#include "tele.h"

#define MENUADMITEMS	2

int comp(p, q)
dialogMenuItem **p, **q;
{
	return strcmp((*p)->prompt, (*q)->prompt);
}

int bAdm(tmp)
dialogMenuItem *tmp;
{
	DMenu *m = NULL;
	dialogMenuItem **items = NULL;
	dialogMenuItem *p;
	int i,n,ret;

	do
	{
		refr = FALSE;
		items = hash_to_menu(&n);

		if (!n)
		{
			msgConfirm("Brak elementów w bazie danych.");
			return DITEM_FAILURE;
		}
	
		qsort(items, n, sizeof(dialogMenuItem *), comp);

		m = (DMenu *)alloca(sizeof(DMenu) + (sizeof(dialogMenuItem)
					* (n+MENUADMITEMS+1)));

		if (!m)
			msgFatal("alloca(): %s", strerror(errno));
	
		memcpy(m, &MenuAdm, sizeof(DMenu));

		p = (dialogMenuItem *)&m->items[0];
		memset(p, 0, sizeof(dialogMenuItem));
		p->prompt = "Usuń element";

		p = (dialogMenuItem *)&m->items[1];
		memset(p, 0, sizeof(dialogMenuItem));
		p->prompt = "X Wyjdź";
		p->fire = &dmenuExit;
	
		for (i=0;i<=n;i++)
		{
			memcpy(&m->items[i+MENUADMITEMS], items[i],
					sizeof(dialogMenuItem));
			free(items[i]);
		}

		free(items);

		if (dmenuOpenSimple(m, TRUE))
			ret = DITEM_SUCCESS;
		else
			ret = DITEM_FAILURE;

		/* burdel po sobie należy posprzątać */

		for (i=MENUADMITEMS;i<=(n+MENUADMITEMS);i++)
		{
			p = (dialogMenuItem *)&m->items[i];
			free(p->prompt);
			free(p->title);
		}
	} while (refr);

	/* ulubionej literki kuriego nie free()ujemy, bo jest
	 * zaalokowana dynamicznie na stosie. mam *nadzieje*, że
	 * na stercie nie zostało już nic... */

	return ret;
	
}

