home *** CD-ROM | disk | FTP | other *** search
- / ar -- archive/library
-
- mov (sp)+,r0
- sub $2,r0
- ble userr
- tst (sp)+
- mov (sp)+,r1
- clr r2
- 1:
- tstb (r1)
- beq 1f
- cmpb (r1),$'v
- bne 2f
- inc r1
- incb vflg
- br 1b
- 2:
- tst r2
- bne userr
- movb (r1)+,r2
- br 1b
- 1:
- tst r2
- beq userr
- mov $arglst,r1
- 1:
- mov (sp)+,(r1)+
- dec r0
- bgt 1b
- clr (r1)+
- mov $swlst,r1
- 1:
- cmp r2,(r1)+
- beq 1f
- tst (r1)+
- bne 1b
- br userr
- 1:
- jmp *(r1)
-
- swlst:
- 'r; comr
- 'u; comu
- 'd; comd
- 'x; comx
- 't; comt
- 0; 0
-
- userr:
- jsr r5,diag
- <bad usage\n\0>
- .even
-
- putc:
- movb r0,ch
- mov $1,r0
- sys write; ch; 1
- rts r5
-
- print:
- movb (r1)+,r0
- beq 1f
- jsr r5,putc
- br print
- 1:
- rts r5
-
- diag:
- mov r5,r1
- jsr r5,print
- tst tfo
- beq 1f
- sys unlink; tfil
- 1:
- sys exit
-
- getaf:
- 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 r5
-
- magerr:
- mov arglst,r1
- jsr r5,print
- jsr r5,diag
- < -- not in archive format\n\0>
- .even
-
- mktmp:
- sys stat; tfil; buf
- bes 1f
- incb tfil+8
- cmpb tfil+8,$'z
- blo mktmp
- br tferr
- 1:
- sys signal; 2; 1
- ror r0
- bcs 1f
- sys signal; 2; done
- 1:
- sys creat; tfil; 600
- bes tferr
- mov r0,tfo
- sys open; tfil; 0
- bes tferr
- mov r0,tfi
- rts r5
-
- tferr:
- jsr r5,diag
- <cannot open temp file\n\0>
- .even
-
- getdir:
- mov afi,r0
- sys read; dir; 16.
- cmp r0,$16.
- bne 1f
- jsr r5,mvname
- tst (r5)+
- 1:
- rts r5
-
- mvname:
- mov name,rname
- mov name+2,rname+2
- mov name+4,rname+4
- mov name+6,rname+6
- rts r5
-
- skip:
- mov size,r0
- inc r0
- bic $1,r0
- mov r0,0f
- mov afi,r0
- sys seek; 0:..; 1
- rts r5
-
- trim:
- mov r0,r2
- 1:
- tstb (r0)
- beq 1f
- cmpb (r0)+,$'/
- beq trim
- br 1b
- 1:
- rts r5
-
- match:
- mov $arglst+2,r1
- 1:
- mov (r1)+,r0
- beq 1f
- cmp r0,$-1
- beq 1b
- jsr r5,trim
- mov $name,r0
- 2:
- cmp r0,$name+8.
- beq 2f
- cmpb (r0),(r2)+
- bne 1b
- tstb (r0)+
- bne 2b
- 2:
- cmp (r5)+,-(r1)
- 1:
- rts r5
-
- mvfil:
- 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,r0
- 1:
- cmp r0,$name+8.
- beq 1f
- movb (r2)+,(r0)+
- bne 1b
- 1:
- 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,r2
- 1:
- mov fio,r0
- sys read; buf; 512.
- sub r0,r2
- mov r0,0f
- beq 1f
- mov tfo,r0
- sys write; buf; 0:..
- br 1b
- 1:
- tst r2
- bne phserr
- bit $1,size
- beq 1f
- mov tfo,r0
- sys seek; 1; 1
- 1:
- mov fio,r0
- sys close
- jsr r5,mvname
- rts r5
-
- operr:
- mov 9b,r1
- jsr r5,print
- jsr r5,diag
- < -- cannot open\n\0>
- .even
-
- phserr:
- mov 9b,r1
- jsr r5,print
- jsr r5,diag
- < -- phase error\n\0>
- .even
-
- copyfl:
- mov tfo,r0
- sys write; dir; 16.
- mov size,r1
- mov $rname,9b
- 1:
- mov r1,0f
- beq 1f
- cmp r1,$512.
- blo 2f
- mov $512.,0f
- 2:
- mov afi,r0
- sys read; buf; 0:..
- sub r0,r1
- mov r0,0f
- beq phserr
- mov tfo,r0
- sys write; buf; 0:..
- br 1b
- 1:
- bit $1,size
- beq 1f
- mov afi,r0
- sys seek; 1; 1
- mov tfo,r0
- sys seek; 1; 1
- 1:
- rts r5
-
- xtract:
- / movb mode,0f
- sys creat; rname; 0:666
- bes noxerr
- mov r0,fio
- mov size,r1
- mov $rname,9b
- 1:
- mov r1,0f
- beq 1f
- cmp r1,$512.
- blo 2f
- mov $512.,0f
- 2:
- mov afi,r0
- sys read; buf; 0:..
- sub r0,r1
- mov r0,0f
- beq phserr
- mov fio,r0
- sys write; buf; 0:..
- br 1b
- 1:
- mov fio,r0
- sys close
- bit $1,size
- beq 1f
- mov afi,r0
- sys seek; 1; 1
- 1:
- mov r0,-(sp)
- mov r1,-(sp)
- mov mtim+2,r1
- mov mtim,r0
- / sys mdate
- mov (sp)+,r1
- mov (sp)+,r1
- rts r5
-
- noxerr:
- mov $rname,r1
- jsr r5,print
- jsr r5,diag
- < -- cannot create\n\0>
- .even
-
- table:
- mov $rname,r1
- jsr r5,print
- mov $'\n,r0
- jsr r5,putc
- rts r5
-
- mesg:
- 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,putc
- 1:
- mov (sp)+,r1
- rts r5
-
- oldnew:
- sys stat; rname; buf
- bes 1f
- cmp buf+32.,mtim
- blo 1f
- bhi 2f
- cmp buf+34.,mtim+2
- blos 1f
- 2:
- tst (r5)+
- mov $rname,tname
- mov $tname,r1
- 1:
- rts r5
-
- comr:
- jsr r5,mktmp
- jsr r5,getaf
- br copfl
- 1:
- jsr r5,getdir
- br copfl
- jsr r5,match
- br 2f
- jsr r5,mesg; 'r
- jsr r5,skip
- jsr r5,mvfil
- br 1b
- 2:
- jsr r5,copyfl
- jsr r5,mesg; 'c
- br 1b
-
- comu:
- jsr r5,mktmp
- jsr r5,getaf
- br noaf
- 1:
- 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 1b
- 3:
- jsr r5,copyfl
- jsr r5,mesg; 'c
- br 1b
-
- comd:
- jsr r5,mktmp
- jsr r5,getaf
- br noaf
- 1:
- jsr r5,getdir
- br 1f
- jsr r5,match
- br 2f
- mov $-1,(r1)
- jsr r5,skip
- jsr r5,mesg; 'd
- br 1b
- 2:
- jsr r5,copyfl
- jsr r5,mesg; 'c
- br 1b
- 1:
- jsr r5,nfound
- br copfl
-
- noaf:
- jsr r5,diag
- <no archive file\n\0>
- .even
-
- crterr:
- jsr r5,diag
- <cannot create archive file\n\0>
- .even
-
- copfl:
- mov $arglst,r1
- mov (r1)+,0f
- 1:
- tst (r1)+
- beq 1f
- cmp -2(r1),$-1
- beq 1b
- tst -(r1)
- jsr r5,mvfil
- jsr r5,mesg; 'a
- br 1b
- 1:
- sys signal; 2; 1 / no interrupts during copy back
- sys creat; 0:..; 666
- bes crterr
- mov r0,afo
- sys write; magic; 2
- 1:
- mov tfi,r0
- sys read; buf; 512.
- mov r0,0f
- beq done
- mov afo,r0
- sys write; buf; 0:..
- br 1b
-
- done:
- jsr r5,diag
- <\0>
- .even
-
- comx:
- jsr r5,getaf
- br noaf
- 1:
- 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 1b
- 2:
- jsr r5,skip
- br 1b
- 1:
- jsr r5,nfound
- br done
-
- comt:
- jsr r5,getaf
- br noaf
- 1:
- jsr r5,getdir
- br 1f
- tst arglst+2
- beq 2f
- jsr r5,match
- br 3f
- mov $-1,(r1)
- 2:
- jsr r5,table
- 3:
- jsr r5,skip
- br 1b
- 1:
- jsr r5,nfound
- br done
-
- nfound:
- mov $arglst+2,r2
- 1:
- mov (r2)+,r1
- beq 1f
- cmp r1,$-1
- beq 1b
- mov $-1,-(r2)
- jsr r5,print
- mov $notfnd,r1
- jsr r5,print
- br 1b
- 1:
- rts r5
-
- notfnd:
- < -- not found\n\0>
- .even
-
- tfil: </tmp/vtma\0>
- .even
- magic: -147.
-
- .bss
-
- afi: .=.+2
- afo: .=.+2
- tfi: .=.+2
- tfo: .=.+2
- fio: .=.+2
- rname: .=.+9.
- ch: .=.+1
- vflg: .=.+1
- .even
- tname: .=.+2
- dir:
- name: .=.+8.
- mtim: .=.+4
- ouid: .=.+1
- mode: .=.+1
- size: .=.+2
- arglst: .=.+200.
- buf: .=.+512.
-
-