| 1 | #\f |
| 2 | # 33iofile.s |
| 3 | # |
| 4 | # FILE HOUSEKEEPING OPERATIONS |
| 5 | # |
| 6 | _DEFNAME: |
| 7 | calls $0,_getname |
| 8 | movl r1,sp |
| 9 | bisw2 $FDEF,FUNIT(r0) |
| 10 | jmp (r8) |
| 11 | _BUFF: |
| 12 | cvtbw (r10)+,_bufopt |
| 13 | jmp (r8) |
| 14 | _RESET: |
| 15 | cvtbl (r10),r3 #attempt to rewind only if stdin |
| 16 | bneq l3301 # and no name is given |
| 17 | cmpl *(sp),$stdin |
| 18 | bneq l3301 |
| 19 | tstb stdin+FNAME |
| 20 | bneq l3301 |
| 21 | pushl stdin+FBUF |
| 22 | calls $1,_rewind |
| 23 | tstl r0 # -1 => error |
| 24 | blss eseek |
| 25 | addl2 $3,r10 |
| 26 | addl2 $4,sp #clear stack |
| 27 | bicw2 $EOF+EOLN,stdin+FUNIT |
| 28 | bisw2 $SYNC,stdin+FUNIT |
| 29 | jmp (r8) |
| 30 | l3301: |
| 31 | calls $0,_getname |
| 32 | movl r1,sp |
| 33 | movl r0,r6 |
| 34 | pushal rdopen |
| 35 | pushal FNAME(r6) |
| 36 | calls $2,_fopen |
| 37 | tstl r0 |
| 38 | beql eopen |
| 39 | movl r0,FBUF(r6) |
| 40 | bisw2 $SYNC+FREAD,FUNIT(r6) |
| 41 | jmp (r8) |
| 42 | eseek: |
| 43 | movl stdin+PFNAME,_file |
| 44 | movw $ESEEK,_perrno |
| 45 | jbr error |
| 46 | eopen: |
| 47 | movl PFNAME(r6),_file |
| 48 | movw $EOPEN,_perrno |
| 49 | jbr error |
| 50 | _REWRITE: |
| 51 | calls $0,_getname |
| 52 | movl r1,sp |
| 53 | movl r0,r6 |
| 54 | movl PFNAME(r6),_file |
| 55 | pushal wtopen |
| 56 | pushal FNAME(r6) |
| 57 | calls $2,_fopen |
| 58 | tstl r0 |
| 59 | beql ecreat |
| 60 | movl r0,FBUF(r6) |
| 61 | bisw2 $EOF+FWRITE,FUNIT(r6) |
| 62 | jmp (r8) |
| 63 | ecreat: |
| 64 | movw $ECREATE,_perrno |
| 65 | jbr error |
| 66 | _FLUSH: |
| 67 | incl r10 |
| 68 | calls $1,_unit |
| 69 | bbc $fWRITE,FUNIT(r7),l3302 |
| 70 | pushl FBUF(r7) |
| 71 | calls $1,_fflush |
| 72 | l3302: |
| 73 | jmp (r8) |
| 74 | _REMOVE: |
| 75 | cvtbl (r10)+,r3 #r3 has filename length |
| 76 | bneq l3303 |
| 77 | cvtwl (r10)+,r3 |
| 78 | l3303: |
| 79 | movl r3,r6 #r6 has stack length |
| 80 | blbc r6,l3304 |
| 81 | incl r6 |
| 82 | l3304: |
| 83 | addl3 r3,sp,r1 #r1 pts to end of name |
| 84 | l3305: |
| 85 | cmpb -(r1),$blank #delete trailing blanks |
| 86 | bneq l3306 #(note: could use "spanc" here) |
| 87 | clrb (r1) |
| 88 | sobgtr r3,l3305 |
| 89 | l3306: |
| 90 | movl sp,_file #remove file |
| 91 | pushl sp |
| 92 | calls $1,_unlink |
| 93 | tstl r0 |
| 94 | bneq eremove |
| 95 | addl2 r6,sp |
| 96 | jmp (r8) |
| 97 | eremove: |
| 98 | movl _file,sp #recover filename |
| 99 | movw $EREMOVE,_perrno |
| 100 | jbr error |
| 101 | _MESSAGE: |
| 102 | incl r10 |
| 103 | calls $0,_pflush |
| 104 | pushal stderr |
| 105 | calls $1,_unit |
| 106 | jmp (r8) |