/ tap2 -- dec-tape lod/dmp pstr: movb (r1)+,r0 beq 1f jsr pc,putc br pstr 1: rts pc mesg: movb (r5)+,r0 beq 1f jsr pc,putc br mesg 1: inc r5 bic $1,r5 rts r5 putc: movb r0,ch mov $1,r0 sys write; ch; 1 rts pc getc: clr r0 sys read; ch; 1 movb ch,r0 rts pc clrdir: mov $dir,r1 mov ndirent,r2 1: jsr pc,clrent sob r2,1b rts pc clrent: mov r1,-(sp) add $dirsiz,(sp) 1: clr (r1)+ cmp r1,(sp) blo 1b tst (sp)+ rts pc rddir: clr sum jsr pc,clrdir clr r0 jsr pc,rseek jsr pc,tread mov tapeb+510.,r0 beq 1f tstb flm beq 1f mov r0,ndirent 1: mov $dir,r1 mov ndirent,r2 1: bit $7,r2 bne 2f jsr pc,tread mov $tapeb,r3 2: mov r1,-(sp) mov r3,-(sp) mov $32.,r0 clr -(sp) 2: add (r3)+,(sp) sob r0,2b bis (sp),sum tst (sp)+ bne 2f mov (sp),r3 tst (r3) beq 2f mov r3,0f jsr pc,9f .data 9: jsr r5,encode; 0:.. rts pc .text add $32.,r3 mov r1,-(sp) add $dirsiz,(sp) tst (r1)+ / namep 9: mov (r3)+,(r1)+ cmp r1,(sp) blo 9b tst (sp)+ 2: mov (sp)+,r3 add $64.,r3 mov (sp)+,r1 bic $100000,mode(r1) add $dirsiz,r1 sob r2,1b tst sum beq 1f jsr r5,mesg ; .even tstb fli bne 1f jmp done 1: jsr pc,bitmap rts pc wrdir: clr r0 jsr pc,wseek tstb flm bne 1f sys open; tboot; 0 bes 3f br 2f 1: sys open; mboot; 0 bes 3f 2: mov r0,r1 sys read; tapeb; 512. mov r1,r0 sys close mov ndirent,tapeb+510. 3: jsr pc,twrite mov $dir,r1 mov ndirent,r2 1: bit $7,r2 bne 2f mov $256.,r0 mov $tapeb,r3 3: clr (r3)+ sob r0,3b mov $tapeb,r3 2: mov r3,-(sp) tst (r1) beq 2f mov r3,0f jsr pc,9f .data 9: jsr r5,decode; 0:.. rts pc .text 2: add $32.,r3 mov r1,-(sp) add $dirsiz,(sp) tst (r1)+ 9: mov (r1)+,(r3)+ cmp r1,(sp) blo 9b tst (sp)+ mov (sp)+,r3 clr -(sp) mov $31.,r0 2: sub (r3)+,(sp) sob r0,2b mov (sp)+,(r3)+ dec r2 bit $7,r2 bne 1b jsr pc,twrite tst r2 bne 1b rts pc tread: mov fio,r0 sys read; tapeb; 512. bes trderr cmp r0,$512. bne trderr 1: inc rseeka rts pc trderr: jsr r5,mesg ; .even tstb fli beq 1f mov $tapeb,r0 2: clr (r0)+ cmp r0,$tapeb+512. blo 2b br 1b 1: jmp done twrite: mov fio,r0 sys write; tapeb; 512. bes twrerr cmp r0,$512. bne twrerr inc wseeka rts pc twrerr: jsr r5,mesg ; .even jmp done rseek: mov r0,rseeka mov r0,0f mov fio,r0 sys 0; 9f .data 9: sys seek; 0:..; 3 .text bes seekerr rts pc wseek: mov r0,-(sp) sub wseeka,r0 bge 1f neg r0 1: cmp r0,$25. / longest write seek ble 1f mov (sp),0f beq 2f dec 0f 2: mov fio,r0 sys 0; 9f .data 9: sys seek; 0:..; 3 .text mov fio,r0 sys read; wseeka; 1 1: mov (sp),wseeka mov (sp)+,0f mov fio,r0 sys 0; 9f .data 9: sys seek; 0:..; 3 .text bes seekerr rts pc seekerr: jsr r5,mesg ; .even jmp done verify: movb (r5)+,0f inc r5 tstb flw bne 1f tstb flv beq 2f 1: jsr pc,9f .data 9: jsr r5,mesg 0:; .even rts pc .text mov r1,-(sp) mov $name,r1 jsr pc,pstr mov (sp)+,r1 tstb flw beq 1f jsr r5,mesg < \0> jsr pc,getc cmp r0,$'x bne 3f jsr pc,getc jmp done 3: cmp r0,$'\n beq 3f cmp r0,$'y bne 4f jsr pc,getc cmp r0,$'\n beq 2f 4: jsr pc,getc cmp r0,$'\n bne 4b br 1b 1: jsr r5,mesg <\n\0> 2: tst (r5)+ 3: rts r5 getfiles: cmp narg,$2 bne 1f mov $".\0,name jsr pc,callout 1: cmp narg,$2 ble 1f dec narg mov *parg,r1 add $2,parg mov $name,r2 2: movb (r1)+,(r2)+ bne 2b jsr pc,callout br 1b 1: rts pc expand: sys open; name; 0 bes fserr mov r0,-(sp) 1: mov (sp),r0 sys read; catlb; 16. bes fserr tst r0 beq 1f tst catlb beq 1b mov $name,r0 mov $catlb+2,r1 cmpb (r1),$'. beq 1b 2: tstb (r0)+ bne 2b dec r0 mov r0,-(sp) cmpb -1(r0),$'/ beq 2f movb $'/,(r0)+ 2: movb (r1)+,(r0)+ bne 2b jsr pc,callout clrb *(sp)+ br 1b 1: mov (sp)+,r0 sys close rts pc fserr: mov $name,r1 jsr pc,pstr jsr r5,mesg < -- Cannot open file\n\0>; .even jmp done callout: sys stat; name; statb bes fserr mov statb+4,r0 bic $!60000,r0 beq 1f cmp r0,$40000 beq expand rts pc 1: mov $dir,r1 clr -(sp) 1: tst (r1) bne 3f tst (sp) bne 2f mov r1,(sp) 2: add $dirsiz,r1 cmp r1,edir blo 1b mov (sp)+,r1 bne 4f jsr r5,mesg ; .even jmp done 4: jsr r5,verify; 'a rts pc jsr r5,encode; name br 2f 3: jsr r5,decode; name1 mov $name,r2 mov $name1,r3 3: cmpb (r2)+,(r3) bne 2b tstb (r3)+ bne 3b tst (sp)+ tstb flu beq 3f cmp time0(r1),statb+32. blo 3f bhi 1f cmp time1(r1),statb+34. bhis 1f 3: jsr r5,verify; 'r rts pc 2: mov statb+4,mode(r1) bis $100000,mode(r1) movb statb+7,uid(r1) movb statb+8,gid(r1) tstb flf beq 2f clrb statb+9. clr statb+10. 2: movb statb+9.,size0(r1) mov statb+10.,size1(r1) mov statb+32.,time0(r1) mov statb+34.,time1(r1) 1: rts pc