hschumann2/TempleOS-Source-Code
0847
1 2#define DB_FILENAME "~/DataBaseDemo.BIN"3#define DB_ACCT_MAX 1004#define DB_ACCT_BLKS 15 6class Acct7{//Use <CTRL-l> to help generate formats.8 U8 name[32] format "$DA-P,LEN=32,A=\"Name:%s\"$\n";9 U8 addr[64] format "$DA-P,LEN=64,A=\"Addr:%s\"$\n";10 U8 pad[DB_ACCT_BLKS*BLK_SIZE-64-32];11};12 13U0 InitDatabase()14{ //Write new contiguous file15 CFile *f=FOpen(DB_FILENAME,"w",DB_ACCT_MAX*DB_ACCT_BLKS);16 FClose(f);17}18 19U0 WriteAcct()20{21 CFile *f;22 Acct a;23 I64 acctnum;24 25 acctnum=GetI64("Acct #",-1);26 if (0<=acctnum<DB_ACCT_MAX) {27 MemSet(&a,0,BLK_SIZE);28 if (DocForm(&a)) {29 f=FOpen(DB_FILENAME,"w+");30 FBlkWrite(f,&a,acctnum*DB_ACCT_BLKS,DB_ACCT_BLKS);31 FClose(f);32 }33 }34}35 36U0 ReadAcct()37{38 CFile *f;39 Acct a;40 I64 acctnum;41 42 acctnum=GetI64("Acct #",-1);43 if (0<=acctnum<DB_ACCT_MAX) {44 f=FOpen(DB_FILENAME,"r");45 FBlkRead(f,&a,acctnum*DB_ACCT_BLKS,DB_ACCT_BLKS);46 FClose(f);47 ClassRep(&a);48 }49}50 51U0 DatabaseDemo()52{53 I64 ch;54 if (!FileFind(DB_FILENAME))55 InitDatabase;56 do {57 "$GREEN$R$FG$ead acct, $GREEN$W$FG$rite acct or $GREEN$<SHIFT-ESC>$FG$:";58 ch=ToUpper(GetChar);59 '\n';60 if (ch=='R') ReadAcct;61 if (ch=='W') WriteAcct;62 } while (ch!=CH_SHIFT_ESC && ch!=CH_ESC);63}64 65DatabaseDemo;66 