mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-06-08 06:29:32 +00:00
Updated File I/O tests, add Record File tests
This commit is contained in:
parent
60ac041bb1
commit
acd1cbe3c3
|
@ -11,29 +11,23 @@
|
||||||
#include <stdiox.h02>
|
#include <stdiox.h02>
|
||||||
#include <string.h02>
|
#include <string.h02>
|
||||||
#include <memory.h02>
|
#include <memory.h02>
|
||||||
|
#include <error.h02>
|
||||||
#include <fileio.h02>
|
#include <fileio.h02>
|
||||||
|
#include <filesys.h02>
|
||||||
|
|
||||||
|
struct rec {
|
||||||
struct txtrec {
|
int start, end;
|
||||||
char name[23];
|
|
||||||
char start[3], dash, end[3];
|
|
||||||
char cr; char lf; char null;};
|
|
||||||
|
|
||||||
struct binrec {
|
|
||||||
char name[24];
|
char name[24];
|
||||||
char start[4], end[4];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
char f; //File Channel
|
const char filnam = "RECFILE.BIN";
|
||||||
char text[128]; //Input Text
|
char f, err, ferr, mode;
|
||||||
struct txtrec tr;
|
char n;
|
||||||
|
char s[128];
|
||||||
|
int dptr, recnum;
|
||||||
|
char aa,yy,xx; int yx;
|
||||||
|
|
||||||
main:
|
struct rec record;
|
||||||
f = fopen(#MREAD, "RECTEXT.TXT");
|
|
||||||
while (fgets(f, tr))
|
|
||||||
puts(tr);
|
|
||||||
fclose(f);
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
data: inline
|
data: inline
|
||||||
"TEX AVERY",&1935,&1942, "TED BONNICKSEN",&1963,&1963, "BERNARD B. BROWN",&1934,&1934,
|
"TEX AVERY",&1935,&1942, "TED BONNICKSEN",&1963,&1963, "BERNARD B. BROWN",&1934,&1934,
|
||||||
|
@ -44,6 +38,60 @@ data: inline
|
||||||
"ABE LEVITOW",&1959,&1962, "ALEX LOVY",&1967,&1968, "NORMAN MCCABE",&1940,&1943,
|
"ABE LEVITOW",&1959,&1962, "ALEX LOVY",&1967,&1968, "NORMAN MCCABE",&1940,&1943,
|
||||||
"ROBERT MCKIMSON",&1946,&1969, "PHIL MONROE",&1963,&1964, "MAURICE NOBLE",&1961,&1964,
|
"ROBERT MCKIMSON",&1946,&1969, "PHIL MONROE",&1963,&1964, "MAURICE NOBLE",&1961,&1964,
|
||||||
"TOM PALMER",&1933,&1933, "HAWLEY PRATT",&1961,&1964, "FRANK TASHLIN",&1936,&1946,
|
"TOM PALMER",&1933,&1933, "HAWLEY PRATT",&1961,&1964, "FRANK TASHLIN",&1936,&1946,
|
||||||
"RICHARD THOMPSON",&1963,&1963, "BILL TYTLA",&1964,&1964;
|
"RICHARD THOMPSON",&1963,&1963, "BILL TYTLA",&1964,&1964, "";
|
||||||
|
|
||||||
|
int rdint() {
|
||||||
|
srcptr = dptr;
|
||||||
|
xx = *srcptr; srcptr++;
|
||||||
|
yy = *srcptr; srcptr++;
|
||||||
|
dptr = srcptr;
|
||||||
|
return 0, yy, xx;
|
||||||
|
}
|
||||||
|
|
||||||
|
void prtrec() {
|
||||||
|
setdst(recnum); printf("%j: ");
|
||||||
|
setdst(record.start); printf("%j ");
|
||||||
|
setdst(record.end); printf("%j ");
|
||||||
|
setdst(record.name); printf("%s%n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main:
|
||||||
|
puts("REMOVING FILE "); putln(filnam);
|
||||||
|
err = remove(0, filnam); if (err and err <> #ENOENT) goto error;
|
||||||
|
|
||||||
|
puts("CREATING FILE "); putln(filnam);
|
||||||
|
fsrecs(@record);
|
||||||
|
f, err = fopen(#MRECRD|#TBNRY, filnam); if (err) goto error;
|
||||||
|
|
||||||
|
puts("WRITING RECORDS ");
|
||||||
|
dptr = &data; recnum = 0;
|
||||||
|
while() {
|
||||||
|
memclr(@record, record);
|
||||||
|
setdst(record.name); n = strcpy(dptr); if (n<2) break;
|
||||||
|
setsrc(dptr); dptr = iadd(.,0,n); dptr++;
|
||||||
|
record.start = rdint();
|
||||||
|
record.end = rdint();
|
||||||
|
fsaddr(&record);
|
||||||
|
putint(recnum); putspc();
|
||||||
|
err, recnum = fputr(f, recnum); if (err) goto error;
|
||||||
|
}
|
||||||
|
newlin();
|
||||||
|
|
||||||
|
putln("READING RECORDS ");
|
||||||
|
do {
|
||||||
|
recnum--;
|
||||||
|
fsaddr(&record);
|
||||||
|
err = fgetr(f, recnum); if (err) goto error;
|
||||||
|
prtrec();
|
||||||
|
} while (<recnum);
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
error:
|
||||||
|
ferr = ferror(f, s);
|
||||||
|
if (err <> ferr) printf(err, "errno=%d, ");
|
||||||
|
setdst(s); printf(ferr, "Error %d: %s%n");
|
||||||
|
goto exit;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/***********(((************************
|
/************************************
|
||||||
* FILETEST - Test/Demo Module fileio *
|
* FILETEST - Test/Demo Module fileio *
|
||||||
**************************************/
|
**************************************/
|
||||||
|
|
||||||
|
@ -21,9 +21,12 @@ char c; //Character Read from File
|
||||||
char i; //Loop Index Variable
|
char i; //Loop Index Variable
|
||||||
char n; //Number of Characters to Write
|
char n; //Number of Characters to Write
|
||||||
int addr; //End Address for load()
|
int addr; //End Address for load()
|
||||||
|
int filpos; //Position in File
|
||||||
char l[255]; //Array for load()
|
char l[255]; //Array for load()
|
||||||
char r[255]; //Array for fread()
|
char r[255]; //Array for fread()
|
||||||
char s[128]; //String for fgets()
|
char s[128]; //String for fgets()
|
||||||
|
const char str1 = "THE QUICK BROWN FOX ";
|
||||||
|
const char str2 = "JUMPED OVER THE LAZY DOG";
|
||||||
const char save = "ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210";
|
const char save = "ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210";
|
||||||
const char bnry = "ZYW1XVU2TS3RQ4PO5NM6LKJI7HG8FED9CBA0";
|
const char bnry = "ZYW1XVU2TS3RQ4PO5NM6LKJI7HG8FED9CBA0";
|
||||||
char aa,xx,yy,zz; //Function Arguments
|
char aa,xx,yy,zz; //Function Arguments
|
||||||
|
@ -33,101 +36,143 @@ main:
|
||||||
fsinit(); //Initialize File System
|
fsinit(); //Initialize File System
|
||||||
fp = opnfil(#MWRITE, &txtfil);
|
fp = opnfil(#MWRITE, &txtfil);
|
||||||
if (fp) {
|
if (fp) {
|
||||||
printf(fp, "WRITING TO CHANNEL %d%n");
|
|
||||||
wstrng(fp); //Test fputs()
|
wstrng(fp); //Test fputs()
|
||||||
|
flshfl(fp); //Test fflush()
|
||||||
wbnry(fp); //Test fwrite()
|
wbnry(fp); //Test fwrite()
|
||||||
wchars(fp); //Test fputc()
|
prtpos(fp); //Print Position in File
|
||||||
}
|
}
|
||||||
sfile(0, &savfil);
|
|
||||||
clsfil(fp);
|
clsfil(fp);
|
||||||
|
fp = opnfil(#MAPPND, &txtfil);
|
||||||
|
if (fp) wchars(fp); //Test fputc()
|
||||||
|
clsfil(fp);
|
||||||
|
sfile(0, &savfil);
|
||||||
|
|
||||||
fp = opnfil(#MREAD, &txtfil);
|
fp = opnfil(#MREAD, &txtfil);
|
||||||
|
else printf(n, " READ $%x CHARACTERS%n");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
printf(fp, "READING CHANNEL %d%n");
|
|
||||||
rstrng(fp);
|
rstrng(fp);
|
||||||
rbnry(fp);
|
rbnry(fp);
|
||||||
|
}
|
||||||
|
clsfil(fp);
|
||||||
|
fp = opnfil(#MREAD, &txtfil);
|
||||||
|
if (fp) {
|
||||||
|
posfil(fp);
|
||||||
rchars(fp);
|
rchars(fp);
|
||||||
|
rwdfil(fp);
|
||||||
|
rstrng(fp);
|
||||||
}
|
}
|
||||||
clsfil(fp);
|
clsfil(fp);
|
||||||
lfile(#MABSLT, &savfil); //Test fload()
|
lfile(#MABSLT, &savfil); //Test fload()
|
||||||
|
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
void error(aa, yy, xx) {
|
void chkerr() {
|
||||||
printf();
|
if (err) {
|
||||||
goto exit;
|
printf(err, " ERROR $%x%n");
|
||||||
}
|
goto exit;
|
||||||
|
|
||||||
void opnfil(aa,yy,xx) {
|
|
||||||
puts("OPENING "); puts(.,yy,xx);
|
|
||||||
printf(aa, " WITH OPTIONS $%h%n");
|
|
||||||
aa, yy = fopen(aa,yy,xx);
|
|
||||||
if (aa) printf(aa,"OPENED ON CHANNEL %d%n");
|
|
||||||
else error(yy, "ERROR %d OPENING FILE%n");
|
|
||||||
return aa;
|
|
||||||
}
|
|
||||||
|
|
||||||
void wbnry(aa) {
|
|
||||||
fsaddr(&bnry);
|
|
||||||
n, err = fwrite(@bnry, aa);
|
|
||||||
if (err) printf(err, "ERROR %d%n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void wchars(aa) {
|
|
||||||
for (i='0'; i<='Z'; i++) {fputc(i, aa);}
|
|
||||||
}
|
|
||||||
|
|
||||||
void wstrng(aa) {
|
|
||||||
fputs(aa, "THE QUICK BROWN FOX ");
|
|
||||||
fputln(aa, "JUMPED OVER THE LAZY DOG");
|
|
||||||
}
|
|
||||||
|
|
||||||
void sfile(aa, yy, xx) {
|
|
||||||
setdst(); printf("SAVING FILE %s%n");
|
|
||||||
setdst(&save); printf("START ADDRESS %w%n");
|
|
||||||
setdst(&bnry); printf("END ADDRESS %w%n");
|
|
||||||
fsname(.,yy,xx); //Set Filename
|
|
||||||
fsaddr(&save); //Set Start Address
|
|
||||||
err, addr = fsave(aa, &bnry);
|
|
||||||
if (err) printf(err, "ERROR %d%n");
|
|
||||||
else putln("FILE SAVED");
|
|
||||||
}
|
|
||||||
|
|
||||||
void rbnry(aa) {
|
|
||||||
fsaddr(&r);
|
|
||||||
n, err = fread(@bnry, aa);
|
|
||||||
if (err) printf(err, "ERROR %d%n");
|
|
||||||
else putln(&r);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lfile(aa, yy, xx) {
|
|
||||||
setdst(); printf("LOADING FILE %s%n");
|
|
||||||
memclr(255, &l); printf("START ADDRESS %w%n");
|
|
||||||
fsname(.,yy,xx); //Set Filename
|
|
||||||
fsaddr(&l); //Set Load Address
|
|
||||||
err, addr = fload(aa);
|
|
||||||
if (err) printf(err, "ERROR %d%n");
|
|
||||||
else {
|
|
||||||
setdst(addr); printf("END ADDRESS %w%n");
|
|
||||||
putln(&l);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void flshfl(aa) {
|
||||||
|
printf(aa, "FFLUSH($%x): ");
|
||||||
|
zz, err = fflush(aa); chkerr();
|
||||||
|
puts("FLUSHED, "); anykey(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void opnfil(aa,yy,xx) {
|
||||||
|
setdst();printf("FOPEN($%x,\"%s\"): ");
|
||||||
|
zz, err = fopen(aa,yy,xx); chkerr();
|
||||||
|
printf(zz,"CHANNEL=$%x%n");
|
||||||
|
return zz;
|
||||||
|
}
|
||||||
|
|
||||||
|
void prtpos(aa) {
|
||||||
|
printf("FTELL($%x): ");
|
||||||
|
err, filpos = ftell(aa); chkerr();
|
||||||
|
setdst(filpos); printf("POSITION=$%w%n");
|
||||||
|
return aa;
|
||||||
|
}
|
||||||
|
|
||||||
|
void posfil(aa) {
|
||||||
|
setdst(filpos); printf(aa, "FSEEK($%x,$%w): ");
|
||||||
|
err = fseek(aa, filpos); chkerr();
|
||||||
|
putln("POSITIONED");
|
||||||
|
}
|
||||||
|
|
||||||
|
void rwdfil(aa) {
|
||||||
|
printf(aa, "REWIND($%x): ");
|
||||||
|
err = rewind(aa, filpos); chkerr();
|
||||||
|
putln("REWOUND");
|
||||||
|
}
|
||||||
|
|
||||||
|
void wbnry(aa) {
|
||||||
|
setdst(&bnry); printf("FWRITE($%x,\"%s\"): ");
|
||||||
|
fsaddr(&bnry);
|
||||||
|
n, err = fwrite(@bnry, aa); chkerr();
|
||||||
|
printf(n, "WROTE $%x BYTES%n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void wchars(aa) {
|
||||||
|
puts("FPUTC '");
|
||||||
|
for (i='0'; i<='Z'; i++) {zz, err = fputc(i, aa); chkerr(); putc(zz);}
|
||||||
|
putln("'");
|
||||||
|
}
|
||||||
|
|
||||||
|
void wstrng(aa) {
|
||||||
|
setdst(str1); printf(aa, "FPUTS($%x,\"%s\"): ");
|
||||||
|
n, err = fputs(aa, str1); chkerr();
|
||||||
|
printf(n, "WROTE $%x CHARACTERS%n");
|
||||||
|
|
||||||
|
setdst(str2); printf(aa, "FPUTLN(%s,\"%s\"): ");
|
||||||
|
n, err = fputln(aa, str2); chkerr();
|
||||||
|
printf(n, "WROTE $%x CHARACTERS%n");
|
||||||
|
}
|
||||||
|
void sfile(aa, yy, xx) {
|
||||||
|
setdst(); printf("FSNAME(\"%s\"); ");
|
||||||
|
fsname(.,yy,xx); //Set Filename
|
||||||
|
setdst(&save); printf("FSADDR($%w); ");
|
||||||
|
fsaddr(&save); //Set Start Address
|
||||||
|
setdst(&bnry); printf(aa, "FSAVE($%x,$%w): ");
|
||||||
|
err, addr = fsave(aa, &bnry); chkerr();
|
||||||
|
putln("FILE SAVED");
|
||||||
|
}
|
||||||
|
|
||||||
|
void rbnry(aa) {
|
||||||
|
setdst(&r); printf("FSADDR($%w); ");
|
||||||
|
fsaddr(&r);
|
||||||
|
printf(@bnry, "FREAD($%x,"); printf(aa,"$%x): ");
|
||||||
|
n, err = fread(@bnry, aa); chkerr();
|
||||||
|
puts(&r); printf(n, ", READ $%x BYTES%n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void lfile(aa, yy, xx) {
|
||||||
|
setdst(); printf("FSNAME(\"%s\"); ");
|
||||||
|
fsname(.,yy,xx); //Set Filename
|
||||||
|
memclr(255, &l); printf("FSADDR($%w); ");
|
||||||
|
fsaddr(&l); //Set Load Address
|
||||||
|
printf(aa, "FLOAD($%x): ");
|
||||||
|
err, addr = fload(aa); chkerr();
|
||||||
|
setdst(addr); printf("END=$%w, "); putln(&l);
|
||||||
|
}
|
||||||
|
|
||||||
void rchars(aa) {
|
void rchars(aa) {
|
||||||
|
printf("FGETC(A): ");
|
||||||
while(!feof(aa)) {
|
while(!feof(aa)) {
|
||||||
c, err = fgetc(aa); if (err) break;
|
c, err = fgetc(aa);
|
||||||
|
if (err == $ff) break; else chkerr();
|
||||||
putc(c);
|
putc(c);
|
||||||
}
|
}
|
||||||
newlin();
|
newlin();
|
||||||
}
|
}
|
||||||
|
|
||||||
void rstrng(aa) {
|
void rstrng(aa) {
|
||||||
n, err = fgets(aa, &s);
|
printf("FGETS($%x, &S): ");
|
||||||
if (err) printf(err, "ERROR %d%n");
|
n, err = fgets(aa, &s); chkerr();
|
||||||
else puts(&s);
|
puts(&s); printf(n, " READ $%x CHARACTERS%n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void clsfil(aa) {
|
void clsfil(aa) {
|
||||||
printf(aa, "CLOSING CHANNEL %d%n");
|
printf(aa, "FCLOSE($%x): ");
|
||||||
fclose(aa);
|
err = fclose(aa); chkerr();
|
||||||
|
putln("CLOSED");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user