templeos-info/public/Wb/Demo/Dsk/DataBase.HC

65 lines
1.2 KiB
HolyC
Executable File

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