Add original unix v6
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
/ makdir -- make a directory
|
||||
|
||||
sys getuid
|
||||
mov r0,uid
|
||||
mov sp,r5
|
||||
tst (r5)+
|
||||
|
||||
loop:
|
||||
tst (r5)+
|
||||
dec (sp)
|
||||
bgt 1f
|
||||
sys exit
|
||||
1:
|
||||
mov (r5),r0
|
||||
mov $buf1,r1
|
||||
mov $buf2,r2
|
||||
clr r3
|
||||
1:
|
||||
movb (r0)+,r4
|
||||
beq 2f
|
||||
movb r4,(r1)+
|
||||
movb r4,(r2)+
|
||||
cmpb r4,$'/
|
||||
bne 1b
|
||||
mov r2,r3
|
||||
br 1b
|
||||
2:
|
||||
movb $'/,(r1)+
|
||||
movb $'.,(r1)+
|
||||
clrb (r1)
|
||||
mov $dot,dir
|
||||
tst r3
|
||||
beq 1f
|
||||
mov $buf2,dir
|
||||
clrb (r3)
|
||||
cmp r3,$buf2+1
|
||||
beq 1f
|
||||
clrb -(r3) / ???
|
||||
1:
|
||||
tstb uid
|
||||
beq 2f
|
||||
sys stat; dir:..; stbuf / status of parent dir
|
||||
bes error
|
||||
mov stbuf+4,r0
|
||||
cmpb uid,stbuf+7
|
||||
bne 1f
|
||||
ash $-6,r0
|
||||
1:
|
||||
ror r0
|
||||
ror r0
|
||||
bcc error / no write permission in parent
|
||||
2:
|
||||
mov (r5),0f
|
||||
sys makdir; 0:..; 140777; 0
|
||||
bes error / prob already exists
|
||||
mov (r5),0f
|
||||
sys chown; 0:..; uid:..
|
||||
mov (r5),0f
|
||||
sys link; 0:..; buf1
|
||||
bes error
|
||||
movb $'.,(r1)+
|
||||
clrb (r1)
|
||||
mov dir,0f
|
||||
sys link; 0:..; buf1
|
||||
bec loop
|
||||
|
||||
error:
|
||||
mov (r5),r0
|
||||
mov r0,0f
|
||||
clr 0f+2
|
||||
1:
|
||||
tstb (r0)+
|
||||
beq 1f
|
||||
inc 0f+2
|
||||
br 1b
|
||||
1:
|
||||
mov $1,r0
|
||||
sys write; 0:..; ..
|
||||
mov $1,r0
|
||||
sys write; ques; 3
|
||||
br loop
|
||||
|
||||
dot: <.\0>
|
||||
ques: < ?\n>
|
||||
.even
|
||||
|
||||
.bss
|
||||
buf1: .=.+100.
|
||||
buf2: .=.+100.
|
||||
stbuf: .=.+40.
|
||||
|
||||
Reference in New Issue
Block a user