📄 ar.s
字号:
/ ar -- archive/library mov (sp)+,r0 sub $2,r0 ble userr tst (sp)+ mov (sp)+,r1 clr r21: tstb (r1) beq 1f cmpb (r1),$'v bne 2f inc r1 incb vflg br 1b2: tst r2 bne userr movb (r1)+,r2 br 1b1: tst r2 beq userr mov $arglst,r11: mov (sp)+,(r1)+ dec r0 bgt 1b clr (r1)+ mov $swlst,r11: cmp r2,(r1)+ beq 1f tst (r1)+ bne 1b br userr1: jmp *(r1)swlst: 'r; comr 'u; comu 'd; comd 'x; comx 't; comt 0; 0userr: jsr r5,diag <bad usage\n\0> .evenputc: movb r0,ch mov $1,r0 sys write; ch; 1 rts r5print: movb (r1)+,r0 beq 1f jsr r5,putc br print1: rts r5diag: mov r5,r1 jsr r5,print tst tfo beq 1f sys unlink; tfil1: sys exitgetaf: mov arglst,0f sys open; 0:..; 0 bes 1f mov r0,afi sys read; buf; 2 cmp buf,magic bne magerr tst (r5)+1: rts r5magerr: mov arglst,r1 jsr r5,print jsr r5,diag < -- not in archive format\n\0> .evenmktmp: sys stat; tfil; buf bes 1f incb tfil+8 cmpb tfil+8,$'z blo mktmp br tferr1: sys signal; 2; 1 ror r0 bcs 1f sys signal; 2; done1: sys creat; tfil; 600 bes tferr mov r0,tfo sys open; tfil; 0 bes tferr mov r0,tfi rts r5tferr: jsr r5,diag <cannot open temp file\n\0> .evengetdir: mov afi,r0 sys read; dir; 16. cmp r0,$16. bne 1f jsr r5,mvname tst (r5)+1: rts r5mvname: mov name,rname mov name+2,rname+2 mov name+4,rname+4 mov name+6,rname+6 rts r5skip: mov size,r0 inc r0 bic $1,r0 mov r0,0f mov afi,r0 sys seek; 0:..; 1 rts r5trim: mov r0,r21: tstb (r0) beq 1f cmpb (r0)+,$'/ beq trim br 1b1: rts r5match: mov $arglst+2,r11: mov (r1)+,r0 beq 1f cmp r0,$-1 beq 1b jsr r5,trim mov $name,r02: cmp r0,$name+8. beq 2f cmpb (r0),(r2)+ bne 1b tstb (r0)+ bne 2b2: cmp (r5)+,-(r1)1: rts r5mvfil: mov (r1),9f mov (r1),0f sys stat; 0:..; buf bes operr sys open; 9:..; 0 bes operr mov r0,fio mov (r1),r0 mov $-1,(r1) jsr r5,trim mov $name,r01: cmp r0,$name+8. beq 1f movb (r2)+,(r0)+ bne 1b1: mov buf+32.,mtim mov buf+34.,mtim+2 movb buf+7.,ouid movb buf+4.,mode mov buf+10.,size mov tfo,r0 sys write; dir; 16. mov size,r21: mov fio,r0 sys read; buf; 512. sub r0,r2 mov r0,0f beq 1f mov tfo,r0 sys write; buf; 0:.. br 1b1: tst r2 bne phserr bit $1,size beq 1f mov tfo,r0 sys seek; 1; 11: mov fio,r0 sys close jsr r5,mvname rts r5operr: mov 9b,r1 jsr r5,print jsr r5,diag < -- cannot open\n\0> .evenphserr: mov 9b,r1 jsr r5,print jsr r5,diag < -- phase error\n\0> .evencopyfl: mov tfo,r0 sys write; dir; 16. mov size,r1 mov $rname,9b1: mov r1,0f beq 1f cmp r1,$512. blo 2f mov $512.,0f2: mov afi,r0 sys read; buf; 0:.. sub r0,r1 mov r0,0f beq phserr mov tfo,r0 sys write; buf; 0:.. br 1b1: bit $1,size beq 1f mov afi,r0 sys seek; 1; 1 mov tfo,r0 sys seek; 1; 11: rts r5xtract:/ movb mode,0f sys creat; rname; 0:666 bes noxerr mov r0,fio mov size,r1 mov $rname,9b1: mov r1,0f beq 1f cmp r1,$512. blo 2f mov $512.,0f2: mov afi,r0 sys read; buf; 0:.. sub r0,r1 mov r0,0f beq phserr mov fio,r0 sys write; buf; 0:.. br 1b1: mov fio,r0 sys close bit $1,size beq 1f mov afi,r0 sys seek; 1; 11: mov r0,-(sp) mov r1,-(sp) mov mtim+2,r1 mov mtim,r0/ sys mdate mov (sp)+,r1 mov (sp)+,r1 rts r5noxerr: mov $rname,r1 jsr r5,print jsr r5,diag < -- cannot create\n\0> .eventable: mov $rname,r1 jsr r5,print mov $'\n,r0 jsr r5,putc rts r5mesg: mov r1,-(sp) mov (r5)+,r0 tstb vflg beq 1f jsr r5,putc mov $' ,r0 jsr r5,putc mov $rname,r1 jsr r5,print mov $'\n,r0 jsr r5,putc1: mov (sp)+,r1 rts r5oldnew: sys stat; rname; buf bes 1f cmp buf+32.,mtim blo 1f bhi 2f cmp buf+34.,mtim+2 blos 1f2: tst (r5)+ mov $rname,tname mov $tname,r11: rts r5comr: jsr r5,mktmp jsr r5,getaf br copfl1: jsr r5,getdir br copfl jsr r5,match br 2f jsr r5,mesg; 'r jsr r5,skip jsr r5,mvfil br 1b2: jsr r5,copyfl jsr r5,mesg; 'c br 1bcomu: jsr r5,mktmp jsr r5,getaf br noaf1: jsr r5,getdir br copfl tst arglst+2 beq 2f jsr r5,match br 3f mov $-1,(r1)2: jsr r5,oldnew br 3f jsr r5,mesg; 'r jsr r5,skip jsr r5,mvfil br 1b3: jsr r5,copyfl jsr r5,mesg; 'c br 1bcomd: jsr r5,mktmp jsr r5,getaf br noaf1: jsr r5,getdir br 1f jsr r5,match br 2f mov $-1,(r1) jsr r5,skip jsr r5,mesg; 'd br 1b2: jsr r5,copyfl jsr r5,mesg; 'c br 1b1: jsr r5,nfound br copflnoaf: jsr r5,diag <no archive file\n\0> .evencrterr: jsr r5,diag <cannot create archive file\n\0> .evencopfl: mov $arglst,r1 mov (r1)+,0f1: tst (r1)+ beq 1f cmp -2(r1),$-1 beq 1b tst -(r1) jsr r5,mvfil jsr r5,mesg; 'a br 1b1: sys signal; 2; 1 / no interrupts during copy back sys creat; 0:..; 666 bes crterr mov r0,afo sys write; magic; 21: mov tfi,r0 sys read; buf; 512. mov r0,0f beq done mov afo,r0 sys write; buf; 0:.. br 1bdone: jsr r5,diag <\0> .evencomx: jsr r5,getaf br noaf1: jsr r5,getdir br 1f tst arglst+2 beq 3f jsr r5,match br 2f mov $-1,(r1)3: jsr r5,xtract jsr r5,mesg; 'x br 1b2: jsr r5,skip br 1b1: jsr r5,nfound br donecomt: jsr r5,getaf br noaf1: jsr r5,getdir br 1f tst arglst+2 beq 2f jsr r5,match br 3f mov $-1,(r1)2: jsr r5,table3: jsr r5,skip br 1b1: jsr r5,nfound br donenfound: mov $arglst+2,r21: mov (r2)+,r1 beq 1f cmp r1,$-1 beq 1b mov $-1,-(r2) jsr r5,print mov $notfnd,r1 jsr r5,print br 1b1: rts r5notfnd: < -- not found\n\0> .eventfil: </tmp/vtma\0> .evenmagic: -147. .bssafi: .=.+2afo: .=.+2tfi: .=.+2tfo: .=.+2fio: .=.+2rname: .=.+9.ch: .=.+1vflg: .=.+1 .eventname: .=.+2dir: name: .=.+8. mtim: .=.+4 ouid: .=.+1 mode: .=.+1 size: .=.+2arglst: .=.+200.buf: .=.+512.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -