OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.26/] [fp/] [implementation/] [mmix/] [copy.mms] - Diff between revs 15 and 270

Only display areas with differences | Details | Blame | View Log

Rev 15 Rev 270
* 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
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.