static int fcn_list_verbose(RzCore *core, RzList *fcns, const char *sortby) {
	bool use_color = rz_config_get_i(core->config, "scr.color");
	int headeraddr_width = 10;
	char *headeraddr = "==========";

	if (core->analysis->bits == 64) {
		headeraddr_width = 18;
		headeraddr = "==================";
	}

	if (sortby) {
		if (!strcmp(sortby, "size")) {
			rz_list_sort(fcns, cmpsize);
		} else if (!strcmp(sortby, "addr")) {
			rz_list_sort(fcns, fcn_cmpaddr);
		} else if (!strcmp(sortby, "cc")) {
			rz_list_sort(fcns, cmpfcncc);
		} else if (!strcmp(sortby, "edges")) {
			rz_list_sort(fcns, cmpedges);
		} else if (!strcmp(sortby, "calls")) {
			rz_list_sort(fcns, cmpcalls);
		} else if (strstr(sortby, "name")) {
			rz_list_sort(fcns, cmpname);
		} else if (strstr(sortby, "frame")) {
			rz_list_sort(fcns, cmpframe);
		} else if (strstr(sortby, "ref")) {
			rz_list_sort(fcns, cmpxrefs);
		} else if (!strcmp(sortby, "nbbs")) {
			rz_list_sort(fcns, cmpnbbs);
		}
	}

	rz_cons_printf("%-*s %4s %5s %5s %5s %4s %*s range %-*s %s %s %s %s %s %s\n",
		headeraddr_width, "address", "size", "nbbs", "edges", "cc", "cost",
		headeraddr_width, "min bound", headeraddr_width, "max bound", "calls",
		"locals", "args", "xref", "frame", "name");
	rz_cons_printf("%s ==== ===== ===== ===== ==== %s ===== %s ===== ====== ==== ==== ===== ====\n",
		headeraddr, headeraddr, headeraddr);
	RzListIter *iter;
	RzAnalysisFunction *fcn;
	rz_list_foreach (fcns, iter, fcn) {
		fcn_print_verbose(core, fcn, use_color);
	}

	return 0;
}
static int fcn_list_verbose(RzCore *core, RzList *fcns, const char *sortby) {
	bool use_color = rz_config_get_i(core->config, "scr.color");
	int headeraddr_width = 10;
	char *headeraddr = "==========";

	if (core->analysis->bits == 64) {
		headeraddr_width = 18;
		headeraddr = "==================";
	}

	if (sortby) {
		if (!strcmp(sortby, "size")) {
			rz_list_sort(fcns, cmpsize);
		} else if (!strcmp(sortby, "addr")) {
			rz_list_sort(fcns, fcn_cmpaddr);
		} else if (!strcmp(sortby, "cc")) {
			rz_list_sort(fcns, cmpfcncc);
		} else if (!strcmp(sortby, "edges")) {
			rz_list_sort(fcns, cmpedges);
		} else if (!strcmp(sortby, "calls")) {
			rz_list_sort(fcns, cmpcalls);
		} else if (strstr(sortby, "name")) {
			rz_list_sort(fcns, cmpname);
		} else if (strstr(sortby, "frame")) {
			rz_list_sort(fcns, cmpframe);
		} else if (strstr(sortby, "ref")) {
			rz_list_sort(fcns, cmpxrefs);
		} else if (!strcmp(sortby, "nbbs")) {
			rz_list_sort(fcns, cmpnbbs);
		}
	}

	rz_cons_printf("%-*s %4s %5s %5s %5s %4s %*s range %-*s %s %s %s %s %s %s\n",
		headeraddr_width, "address", "size", "nbbs", "edges", "cc", "cost",
		headeraddr_width, "min bound", headeraddr_width, "max bound", "calls",
		"locals", "args", "xref", "frame", "name");
	rz_cons_printf("%s ==== ===== ===== ===== ==== %s ===== %s ===== ====== ==== ==== ===== ====\n",
		headeraddr, headeraddr, headeraddr);
	RzListIter *iter;
	RzAnalysisFunction *fcn;
	rz_list_foreach (fcns, iter, fcn) {
		fcn_print_verbose(core, fcn, use_color);
	}

	return 0;
}