|
|
1.1 root 1: #
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)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.