1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-02-02 06:51:49 +00:00
Files
DoctorWkt.unix-jun72/pages/e02-09
2008-05-02 18:08:18 +00:00

58 lines
1.6 KiB
Plaintext

br sysret4
systell: / get the r/w pointer
jsr r0,seektell
br error4
error4:
jmp error / see 'error' routine
sysret4:
jmp sysret / see 'sysret' routine
seektell:
jsr r0,arg; u.base / puts offset in u.base
jsr r0,arg; u.count / put ptr name in u.count
mov *u.r0,r1 / file descriptor in r1 (index in u.fp list)
jsr r0,getf / u.fofp points to 3rd word in fsp entry
mov r1,-(sp) / r1 has i-number of file, put it on the stack
beq error4 / if i-number is 0, not active so error
bgt .+4 / if its positive jump
neg r1 / if not make it positive
jsr r0,iget / get its i-node into core
cmp u.count,$1 / is ptr name =1
blt 2f / no its zero
beq 1f / yes its 1
mov i.size,u.count / put number of bytes in file in u.count
br 2f
1: / ptr name =1
mov *u.fofp,u.count / put offset in u.count
2: / ptrname =0
mov (sp)+,r1 / i-number on stack r1
rts r0
sysintr: / set interrupt handling
jsr r0,arg; u.intr / put the argument in u.intr
br 1f / go into quit routine
sysquit:
jsr r0,arg; u.quit / put argument in u.quit
1:
mov u.ttyp,r1 / move pointer to control tty buffer to r1
beq sysret4 / return to user
clrb 6(r1) / clear the interrupt character in the tty buffer
br sysret4 / return to user
syssetuid: / set process id
movb *u.r0,r1 / move process id (number) to r1
cmpb r1,u.ruid / is it equal to the real user id number
beq 1f / yes
tstb u.uid / no, is current user the super user?
bne error4 / no, error
1:
movb r1,u.uid / put process id in u.uid
movb r1,u.ruid / put process id in u.ruid
br sysret4 / system return
sysgetuid:
movb u.ruid,*u.r0 / move the real user id to (u.r0)
br sysret4 / systerm return, sysret