mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-01-11 23:53:34 +00:00
57 lines
1.8 KiB
Plaintext
57 lines
1.8 KiB
Plaintext
mov (sp)+,r1 / get i-number back
|
|
jsr r0,iget / get i-node
|
|
jsr r0,setimod / set modified flag
|
|
decb i.nlks / decrement the number of links
|
|
bgt sysret9 / if this was not the last link to file return
|
|
jsr r0,anyi / if it was, see if anyone has it open. Then
|
|
/ free contents of file and destroy it.
|
|
br sysret9
|
|
|
|
mkdir:
|
|
jsr r0,copyz; u.dirbuf+2; u.dirbuf+10. / clear this
|
|
mov u.namep,r2 / r2 points to name of directory entry
|
|
mov $u.dirbuf+2,r3 / r3 points to u.dirbuf+2
|
|
1: / put characters in the directory name in u.dirbuf+2 - u.dirbuf+10
|
|
movb (r2)+,r1 / move character in name to r1
|
|
beq 1f / if null, done
|
|
cmp r1,$'/ / is it a "/"?
|
|
beq error9 / yes, error
|
|
cmp r3,$u.dirbuf+10. / have we reached the last slot for
|
|
/ a char?
|
|
beq 1b / yes, go back
|
|
movb r1,(r3)+ / no, put the char in the u.dirbuf
|
|
br 1b / get next char
|
|
1:
|
|
mov u.dirp,u.off / pointer to empty current directory slot to
|
|
/u.off
|
|
|
|
wdir:
|
|
mov $u.dirbuf,u.base / u.base points to created file name
|
|
mov $10.,u.count / u.count = 10
|
|
mov ii,r1 / r1 has i-number of current directory
|
|
jsr r0,access; 1 / get i-node and set its file up for writing
|
|
jsr r0,writei / write into directory
|
|
rts r0
|
|
|
|
sysexec:
|
|
jsr r0,arg2 / arg0 in u.namep,arg1 on top of stack
|
|
jsr r0,namei / namei returns i-number of file named in
|
|
/ sysexec call in r1
|
|
br error9
|
|
jsr r0,iget / get i-node for file to be executed
|
|
bit $20,i.flgs / is file executable
|
|
beq error9
|
|
jsr r0,iopen / gets i-node for file with i-number given in
|
|
/ r1 (opens file)
|
|
bit $40,i.flgs / test user id on execution bit
|
|
beq 1f
|
|
tstb u.uid / test user id
|
|
beq 1f / super user
|
|
movb i.uid,u.uid / put user id of owner of file as process
|
|
/ user id
|
|
1:
|
|
mov (sp)+,r5 / r5 now contains address of list of pointers to
|
|
/ arguments to be passed
|
|
mov $1,u.quit / u.quit determines handling of quits;
|
|
/ u.quit = 1 take quit
|