#define DB_FILENAME "~/DataBaseDemo.BIN" #define DB_ACCT_MAX 100 #define DB_ACCT_BLKS 1 class Acct {//Use <CTRL-l> to help generate formats. U8 name[32] format "$DA-P,LEN=32,A=\"Name:%s\"$\n"; U8 addr[64] format "$DA-P,LEN=64,A=\"Addr:%s\"$\n"; U8 pad[DB_ACCT_BLKS*BLK_SIZE-64-32]; }; U0 InitDatabase() { //Write new contiguous file CFile *f=FOpen(DB_FILENAME,"w",DB_ACCT_MAX*DB_ACCT_BLKS); FClose(f); } U0 WriteAcct() { CFile *f; Acct a; I64 acctnum; acctnum=GetI64("Acct #",-1); if (0<=acctnum<DB_ACCT_MAX) { MemSet(&a,0,BLK_SIZE); if (DocForm(&a)) { f=FOpen(DB_FILENAME,"w+"); FBlkWrite(f,&a,acctnum*DB_ACCT_BLKS,DB_ACCT_BLKS); FClose(f); } } } U0 ReadAcct() { CFile *f; Acct a; I64 acctnum; acctnum=GetI64("Acct #",-1); if (0<=acctnum<DB_ACCT_MAX) { f=FOpen(DB_FILENAME,"r"); FBlkRead(f,&a,acctnum*DB_ACCT_BLKS,DB_ACCT_BLKS); FClose(f); ClassRep(&a); } } U0 DatabaseDemo() { I64 ch; if (!FileFind(DB_FILENAME)) InitDatabase; do { "$GREEN$R$FG$ead acct, $GREEN$W$FG$rite acct or $GREEN$<SHIFT-ESC>$FG$:"; ch=ToUpper(GetChar); '\n'; if (ch=='R') ReadAcct; if (ch=='W') WriteAcct; } while (ch!=CH_SHIFT_ESC && ch!=CH_ESC); } DatabaseDemo;