U0 BgtEntryDel2(CBgtEntry *tmpb)
{
	if (tmpb->type != BE_TEMPLATE_COPY)
	{
		Free(tmpb->credit);
		Free(tmpb->debit);
		Free(tmpb->desc);
	}
}

CBgtEntry *BgtEntryCopy(CBgtEntry *tmpb, Bool periodic_copy)
{
	CBgtEntry *res = MAlloc(sizeof(CBgtEntry));

	MemCopy(res, tmpb, sizeof(CBgtEntry));
	if (periodic_copy)
	{
		res->credit = StrNew(tmpb->credit);
		res->debit  = StrNew(tmpb->debit);
		res->desc   = StrNew(tmpb->desc);
	}

	return res;
}

U0 BgtEntryDel(CBgtEntry *tmpb)
{
	BgtEntryDel2(tmpb);
	Free(tmpb);
}

U0 BgtIns(CBgtEntry *tmpb)
{
	CBgtEntry *tmpb1 = b_head.next;

	while (tmpb1 != &b_head && tmpb1->date < tmpb->date)
		tmpb1 = tmpb1->next;
	QueueInsert(tmpb, tmpb1->last);
}

class CBgtEntryForm
{
	U8		date	[512]	format "$$DA-P,A=\"Date              :%s\"$$\n";
	F64 	amount			format "Amount            $$$$$$DA,A=\"%10.2f\"$$\n";
	U8		credit	[512]	format "$$DA-P,A=\"Credit (from) Acct:%s\"$$\n";
	U8		debit	[512]	format "$$DA-P,A=\"Debit  (to)   Acct:%s\"$$\n";
	U8		desc	[512]	format "$$DA-P,A=\"Desc              :%s\"$$\n";
};

CBgtEntry *BgtEntryPrompt(CBgtEntry *default=NULL)
{
	CBgtEntryForm	 b;
	CBgtEntry		*tmpb;
	U8				*st;

	MemSet(&b, 0, sizeof(CBgtEntryForm));
	StrCopy(&b.date, "*");
	if (default)
	{
		StrPrint(b.date, "%D", default->date);
		b.amount = default->amount;
		StrCopy(b.credit, default->credit);
		StrCopy(b.debit , default->debit);
		StrCopy(b.desc	, default->desc);
	}
	while (TRUE)
		if (PopUpForm(&b))
		{
			if (!*b.credit)
			{
				st = BgtPopUpAcct("Credit Acct\n\n");
				if (st != DOCM_CANCEL)
					StrCopy(b.credit, st);
			}
			else if (!*b.debit)
			{
				st = BgtPopUpAcct("Debit Acct\n\n");
				if (st != DOCM_CANCEL)
					StrCopy(b.debit, st);
			}
			else
			{
				tmpb = CAlloc(sizeof(CBgtEntry));
				tmpb->date	 = Str2Date(b.date);
				tmpb->amount = b.amount;
				tmpb->credit = StrNew(b.credit);
				tmpb->debit  = StrNew(b.debit);
				tmpb->desc	 = StrNew(b.desc);
				tmpb->type	 = BE_NORMAL;
				StrFileAdd(tmpb->credit, &accts_table_strs, accts_table);
				StrFileAdd(tmpb->debit,  &accts_table_strs, accts_table);
				return tmpb;
			}
		}
		else
			return NULL;
}
