U0 BgtAcctsUpdate() { CBgtEntry *tmpb; CBgtTemplate *tmpt; tmpb=b_head.next; while (tmpb != &b_head) { if (tmpb->type != BE_TEMPLATE_COPY) { tmpb->credit_idx = StrFileAdd(tmpb->credit, &accts_table_strs, accts_table); tmpb->debit_idx = StrFileAdd(tmpb->debit, &accts_table_strs, accts_table); } tmpb=tmpb->next; } tmpt=t_head.next; while (tmpt != &t_head) { tmpt->b.credit_idx = StrFileAdd(tmpt->b.credit, &accts_table_strs, accts_table); tmpt->b.debit_idx = StrFileAdd(tmpt->b.debit, &accts_table_strs, accts_table); tmpt=tmpt->next; } } U0 BgtAcctsWrite() { BgtAcctsUpdate; StrFileWrite(bgt_accts_file, accts_table, TRUE); } U0 BgtAcctsRead() { I64 i, max_num; U8 *colors, **s = StrFileRead(bgt_accts_file, &max_num, &colors, TRUE); StrFileDel(accts_table); accts_table = HashTableNew(512); accts_table_strs = 0; for (i = 0; i <= max_num; i++) if (s[i]) StrFileAdd(s[i], &accts_table_strs, accts_table, colors[i]); StrFileArrDel(s, max_num); Free(colors); } I64 BgtAcctColor(U8 *st) { CHashGeneric *tmph; if (tmph = HashFind(st, accts_table, SFT_GENERIC)) return tmph->user_data1; else return BLACK; } U8 *BgtPopUpAcct(U8 *header=NULL, U8 *default=NULL) { I64 i; U8 *res; CDoc *doc = DocNew; CDocEntry *doc_e, *doc_default = NULL; CHashGeneric *tmph; if (header) DocPrint(doc, "%s", header); for (i = 0; i <= accts_table->mask; i++) { tmph = accts_table->body[i]; while (tmph) { doc_e = DocPrint(doc, "$FG,%d$$MU-UL,\"%s\",LE=0x%X$\n", tmph->user_data1, tmph->str, tmph->str); if (default && !StrCompare(default, tmph->str)) doc_default = doc_e; tmph = tmph->next; } } if (doc_default) { doc->cur_entry = doc_default; doc->cur_col = 0; } res = PopUpMenu(doc, DOF_DONT_HOME); DocDel(doc); return res; }