* SAMPLE PROGRAM: COPY A GIVEN FILE TO STANDARD OUTPUT
|
* SAMPLE PROGRAM: COPY A GIVEN FILE TO STANDARD OUTPUT
|
|
|
t IS $255
|
t IS $255
|
argc IS $0
|
argc IS $0
|
argv IS $1
|
argv IS $1
|
s IS $2
|
s IS $2
|
Buf_Size IS 5 ridiculously small for testing
|
Buf_Size IS 5 ridiculously small for testing
|
LOC Data_Segment
|
LOC Data_Segment
|
Buffer LOC @+Buf_Size
|
Buffer LOC @+Buf_Size
|
GREG @
|
GREG @
|
Arg0 OCTA 0,TextRead
|
Arg0 OCTA 0,TextRead
|
Arg1 OCTA Buffer,Buf_Size
|
Arg1 OCTA Buffer,Buf_Size
|
|
|
LOC #200 main(argc,argv) {
|
LOC #200 main(argc,argv) {
|
Main CMP t,argc,2 if (argc==2) goto openit
|
Main CMP t,argc,2 if (argc==2) goto openit
|
PBZ t,OpenIt
|
PBZ t,OpenIt
|
GETA t,1F fputs("Usage: ",stderr)
|
GETA t,1F fputs("Usage: ",stderr)
|
TRAP 0,Fputs,StdErr
|
TRAP 0,Fputs,StdErr
|
LDOU t,argv,0 fputs(argv[0],stderr)
|
LDOU t,argv,0 fputs(argv[0],stderr)
|
TRAP 0,Fputs,StdErr
|
TRAP 0,Fputs,StdErr
|
GETA t,2F fputs(" filename\n",stderr)
|
GETA t,2F fputs(" filename\n",stderr)
|
Quit TRAP 0,Fputs,StdErr
|
Quit TRAP 0,Fputs,StdErr
|
NEG t,0,1 quit: exit(-1)
|
NEG t,0,1 quit: exit(-1)
|
TRAP 0,Halt,0
|
TRAP 0,Halt,0
|
1H BYTE "Usage: ",0
|
1H BYTE "Usage: ",0
|
LOC (@+3)&-4 align to tetrabyte
|
LOC (@+3)&-4 align to tetrabyte
|
2H BYTE " filename",#a,0
|
2H BYTE " filename",#a,0
|
|
|
OpenIt LDOU s,argv,8 openit: s=argv[1]
|
OpenIt LDOU s,argv,8 openit: s=argv[1]
|
STOU s,Arg0
|
STOU s,Arg0
|
LDA t,Arg0 fopen(argv[1],"r",file[3])
|
LDA t,Arg0 fopen(argv[1],"r",file[3])
|
TRAP 0,Fopen,3
|
TRAP 0,Fopen,3
|
PBNN t,CopyIt if (no error) goto copyit
|
PBNN t,CopyIt if (no error) goto copyit
|
GETA t,1F fputs("Can't open file ",stderr)
|
GETA t,1F fputs("Can't open file ",stderr)
|
TRAP 0,Fputs,StdErr
|
TRAP 0,Fputs,StdErr
|
SET t,s fputs(argv[1],stderr)
|
SET t,s fputs(argv[1],stderr)
|
TRAP 0,Fputs,StdErr
|
TRAP 0,Fputs,StdErr
|
GETA t,2F fputs("!\n",stderr)
|
GETA t,2F fputs("!\n",stderr)
|
JMP Quit goto quit
|
JMP Quit goto quit
|
1H BYTE "Can't open file ",0
|
1H BYTE "Can't open file ",0
|
LOC (@+3)&-4 align to tetrabyte
|
LOC (@+3)&-4 align to tetrabyte
|
2H BYTE "!",#a,0
|
2H BYTE "!",#a,0
|
|
|
CopyIt LDA t,Arg1 copyit:
|
CopyIt LDA t,Arg1 copyit:
|
TRAP 0,Fread,3 items=fread(buffer,1,buf_size,file[3])
|
TRAP 0,Fread,3 items=fread(buffer,1,buf_size,file[3])
|
BN t,EndIt if (items < buf_size) goto endit
|
BN t,EndIt if (items < buf_size) goto endit
|
LDA t,Arg1 items=fwrite(buffer,1,buf_size,stdout)
|
LDA t,Arg1 items=fwrite(buffer,1,buf_size,stdout)
|
TRAP 0,Fwrite,StdOut
|
TRAP 0,Fwrite,StdOut
|
PBNN t,CopyIt if (items >= buf_size) goto copyit
|
PBNN t,CopyIt if (items >= buf_size) goto copyit
|
Trouble GETA t,1F trouble: fputs("Trouble w...!",stderr)
|
Trouble GETA t,1F trouble: fputs("Trouble w...!",stderr)
|
JMP Quit goto quit
|
JMP Quit goto quit
|
1H BYTE "Trouble writing StdOut!",#a,0
|
1H BYTE "Trouble writing StdOut!",#a,0
|
|
|
EndIt INCL t,Buf_Size
|
EndIt INCL t,Buf_Size
|
BN t,ReadErr if (ferror(file[3])) goto readerr
|
BN t,ReadErr if (ferror(file[3])) goto readerr
|
STO t,Arg1+8
|
STO t,Arg1+8
|
LDA t,Arg1 n=fwrite(buffer,1,items,stdout)
|
LDA t,Arg1 n=fwrite(buffer,1,items,stdout)
|
TRAP 0,Fwrite,StdOut
|
TRAP 0,Fwrite,StdOut
|
BN t,Trouble if (n < items) goto trouble
|
BN t,Trouble if (n < items) goto trouble
|
TRAP 0,Halt,0 exit(0)
|
TRAP 0,Halt,0 exit(0)
|
ReadErr GETA t,1F readerr: fputs("Trouble r...!",stderr)
|
ReadErr GETA t,1F readerr: fputs("Trouble r...!",stderr)
|
JMP Quit goto quit }
|
JMP Quit goto quit }
|
1H BYTE "Trouble reading!",#a,0
|
1H BYTE "Trouble reading!",#a,0
|
|
|