mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-02-02 15:01:52 +00:00
57 lines
2.2 KiB
Plaintext
57 lines
2.2 KiB
Plaintext
tst r1 / positive i-number ?
|
|
bge error1 / yes, error 1 negative i-number means write
|
|
neg r1 / make it positive
|
|
jsr r0,writei / write data
|
|
1:
|
|
mov u.nread,*u.r0 / put no. of bytes transferred into (u.r0)
|
|
br sysret1
|
|
|
|
rw1:
|
|
jsr r0,arg; u.base / get buffer pointer
|
|
jsr r0,arg; u.count / get no. of characters
|
|
mov *u.r0,r1 / put file descriptor (index to u.fp table) in r1
|
|
jsr r0,getf / get i-number of the file in r1
|
|
rts r0
|
|
|
|
sysopen:
|
|
jsr r0,arg2 / get sys args into u.namep and on stack
|
|
jsr r0,namei / i-number of file in r1
|
|
br error2 / file not found
|
|
tst (sp) / is mode = 0 (2nd arg of call; 0 means, open for read)
|
|
beq 1f / yes, leave i-number positive
|
|
neg r1 / open for writing so make i-number negative
|
|
1:
|
|
jsr r0,iopen / open file whose i-number is in r1
|
|
tst (sp)+ / pop the stack and test the mode
|
|
beq op1 / is open for read op1
|
|
|
|
op0:
|
|
neg r1 / make i-number positive if open for writing
|
|
op1:
|
|
clr r2 / clear registers
|
|
clr r3
|
|
1: / scan the list of entries in fsp table
|
|
tstb u.fp(r2) / test the entry in the u.fp list
|
|
beq 1f / if byte in list is 0 branch
|
|
inc r2 / bump r2 so next byte can be checked
|
|
cmp r2,$10. / reached end of list?
|
|
blt 1b / no, go back
|
|
br error2 / yes, error (no files open)
|
|
1:
|
|
tst fsp(r3) / scan fsp entries
|
|
beq 1f / if 0 branch
|
|
add $8.,r3 / add 8 to r3 to bump it to next entry mfsp table
|
|
cmp r3,$[nfiles*8.] / done scanning
|
|
blt 1b / no, back
|
|
br error2 / yes, error
|
|
1: / r2 has index to u.fp list; r3, has index to fsp table
|
|
mov r1,fsp(r3) / put i-number of open file into next available
|
|
mov cdev,fsp+2(r3) / entry in fsp table, put # of device in
|
|
/ next word
|
|
clr fsp+4(r3)
|
|
clr fsp+6(r3) / clear the next two words
|
|
asr r3
|
|
asr r3 / divide by 8 to get number of the fsp entry-1
|
|
asr r3
|
|
inc r3 / add 1 to get fsp entry number
|