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; }