65 lines
1.2 KiB
HolyC
65 lines
1.2 KiB
HolyC
|
#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;
|