BSD 1 development
[unix-history] / px / 30io.s
CommitLineData
4e754410
BJ
1/
2/ IO operations
3/
4_GET:
5 jsr pc,get
6 jsr pc,iosync
7 return
8_PUT:
9 jsr pc,put
10 return
11_MESSAGE:
12 mov $_unit2,r0
13 jsr pc,unit
14 mov fchain,r2 / flush all files
151:
16 beq 2f
17 bit $FWRITE,FUNIT(r2)
18 beq 3f
19 mov FBUF(r2),-(sp)
20 jsr pc,_fflush
21 tst (sp)+
223:
23 mov FCHAIN(r2),r2
24 br 1b
252:
26 mov $_unit1,r2
27 mov FBUF(r2),-(sp)
28 jsr pc,_fflush
29 tst (sp)+
30 return
31_FNIL:
32 mov (sp),r0
33 mov _file,-(sp)
34 mov buf,-(sp)
35 jsr pc,unit
36 jsr pc,iosync
37 mov (sp)+,buf
38 mov (sp)+,_file
39 return
40_BUFF:
41 mov r3,bufopt
42 return
43_EOF:
44 mov (sp)+,r0
45 mov _file,-(sp)
46 mov buf,-(sp)
47 mov $EOF,-(sp)
48 br 1f
49_EOLN:
50 mov (sp)+,r0
51 mov _file,-(sp)
52 mov buf,-(sp)
53 mov $EOF+EOLN,-(sp)
541:
55 jsr pc,unit
56 cmp buf,$_unit0
57 bne 1f
58 cmp bufopt,$1
59 bne 1f
60 mov $u1buf,-(sp)
61 jsr pc,_fflush
62 tst (sp)+
631:
64 mov (sp)+,r1
65 clr -(sp)
66 mov buf,r2
67 bit $EOF,FUNIT(r2)
68 bne 2f
69 jsr pc,iosync
70 bit r1,FUNIT(r2)
71 beq 1f
722:
73 mov $1,(sp)
741:
75 mov (sp)+,r0
76 mov (sp)+,buf
77 mov (sp)+,_file
78 mov r0,-(sp)
79 return
80_RESET:
81 bne 1f / branch if name given
82 cmp *(sp),$_unit0
83 bne 1f
84 tst _unit0+FNAME
85 bne 1f
86 clr r0
87 sys seek; 0; 0
88 bes 9f
89 tst (sp)+
90 tst (lc)+
91 bic $EOF+EOLN,_unit0+FUNIT
92 bis $SYNC,_unit0+FUNIT
93 return
949:
95 mov $stdin,_file
96 mov r0,_errno
97 mov $ESEEK,_perrno
98 error ESEEK
991:
100 jsr pc,getname
101 mov r0,r1
102 mov PFNAME(r1),_file
103 mov FNAME(r1),openrnm
104 sys indir; openr
105 bes eopen
106 mov r0,*FBUF(r1)
107 bis $SYNC|FREAD,r0
108 bis r0,FUNIT(r1)
109 return
110ecreat:
111 mov r0,_errno
112 mov $ECREATE,_perrno
113 error ECREATE
114eopen:
115 mov r0,_errno
116 mov $EOPEN,_perrno
117 error EOPEN
118.data
119openr: sys open; openrnm: .. ; 0
120creit: sys creat; crenm: ..; 0644
121openw: sys open; openwnm: .. ; 1
122.text
123_REWRITE:
124 jsr pc,getname
125 mov r0,r1
126 mov PFNAME(r1),_file
127 mov FNAME(r1),crenm
128 sys indir; creit
129 bes ecreat
130 sys close
131 mov FNAME(r1),openwnm
132 sys indir; openw
133 bes eopen
134 mov r0,*FBUF(r1)
135 bis $EOF|FWRITE,r0
136 bis r0,FUNIT(r1)
137 return
138_REMOVE:
139 bne 1f
140 mov (lc)+,r3
1411:
142 mov sp,r1
143 mov r3,r2
144 inc r2
145 bic $1,r2
146 add r2,sp
147 add r3,r1
148 mov r1,r0
149 movb (r1),r2
150 clrb (r1)
1511:
152 cmpb -1(r1),$'
153 bne 1f
154 clrb -(r1)
155 dec r3
156 bne 1b
1571:
158 sub r3,r1
159 mov r1,1f
160 mov r1,_file
161 sys indir; 0f
162 bes 9f
163 movb r2,(r0)
164 return
165.data
1660: sys unlink; 1: ..
167.text
1689:
169 mov _file,sp
170 mov r0,_errno
171 mov $EREMOVE,_perrno
172 error EREMOVE
173_UNITINP:
174 cmp bufopt,$2
175 bge 1f / bufopt >= 2, don't flush on read
176 cmp $512.,u1cnt
177 beq 1f
178 mov $u1buf,-(sp)
179 jsr pc,_fflush
180 tst (sp)+
1811:
182 mov $_unit0,buf
183 mov $stdin,_file
184 return
185_UNITOUT:
186 mov $_unit1,buf
187 mov $stdout,_file
188 return
189_UNIT:
190 mov (sp)+,r0
191 cmp r0,$_unit0
192 beq _UNITINP
193 jsr pc,unit
194 return
195_READ8:
196 sub $32.,sp
197 mov sp,-(sp)
198 mov $32.,-(sp)
199 mov $1,-(sp)
200 jsr pc,_preadn
201 bcs 1f
202 add $6,sp
203 mov sp,-(sp)
204 jsr pc,_atof
205 add $34.,sp
206 movf fr0,-(sp)
207 return
2081:
209 add $38.,sp
210 clrf -(sp)
211 return
212_READ4:
213 sub $20.,sp
214 mov sp,-(sp)
215 mov $20.,-(sp)
216 clr -(sp)
217 jsr pc,_preadn
218 bcs 1f
219 add $6.,sp
220 mov sp,-(sp)
221 jsr pc,_atol
222 add $22.,sp
223 mov r1,-(sp)
224 mov r0,-(sp)
225 return
2261:
227 add $26.,sp
228 clr -(sp)
229 sxt -(sp)
230 return
231_READC:
232 jsr pc,iosync
233 clr -(sp)
234 movb *buf,(sp)
235 jsr pc,get
236 return
237_READLN:
238 jsr pc,iosync
239 mov buf,r0
240 bit $EOLN+EOF,FUNIT(r0)
241 bne 1f
242 jsr pc,get
243 br _READLN
2441:
245 jsr pc,get
246 return
247_PAGE:
248 mov $14,-(sp)
249 br 1f
250_WRITC:
251 beq 1f
252 mov $323,r0
253 br pwriteit
2541:
255 movb (sp)+,*buf
256 jsr pc,put
257 tst bufopt
258 beq 2f
259 return
260_WRITLN:
261 mov $327,r0
262 mov $'\n,-(sp)
263 mov $1,r2
264 cmp buf,$_unit1
265 bne 1f
266 cmp bufopt,$1
267 bgt 1f
268 clr r2
269 br 1f
270_WRITG:
271 mov $325,r0
272 mov (lc)+,-(sp)
273 br pwriteit
274_WRHEX2:
275 mov $267,r0
276 br 3f
277_WRHEX4:
278 mov $277,r0
279 br 3f
280_WROCT2:
281 mov $330,r0
282 br 3f
283_WROCT4:
284 mov $331,r0
285 br 3f
286_WRIT2:
287 mov $320,r0
288 br 3f
289_WRIT4:
290 mov $321,r0
291 br 3f
292_WRIT8:
293 mov $324,r0
294 br 3f
295_WRITB:
296 mov $322,r0
297 br 3f
298_WRIT82:
299 mov $326,r0
3003:
301pwriteit:
302 mov bufopt,r2
3031:
304 mov r3,-(sp)
305 mov r0,-(sp)
306 jsr pc,_pwrite
307 mov r0,sp
308 tst r2
309 bne 1f
3102:
311 cmp buf,$_unit1
312 bne 1f
313 mov buf,r0
314 mov FBUF(r0),-(sp)
315 jsr pc,_fflush
316 tst (sp)+
3171:
318 return
319_DEFNAME:
320 jsr pc,getname
321 bis $100000,FUNIT(r0)
322 return
323_FLUSH:
324 mov (sp)+,r0
325 jsr pc,unit
326 mov buf,r0
327 bit $FWRITE,FUNIT(r0)
328 beq 1f
329 mov FBUF(r0),-(sp)
330 jsr pc,_fflush
331 tst (sp)+
3321:
333 return