1: / ar -- archive/library
   2: 
   3:         mov     (sp)+,r0
   4:         sub     $2,r0
   5:         ble     userr
   6:         tst     (sp)+
   7:         mov     (sp)+,r1
   8:         clr     r2
   9: 1:
  10:         tstb    (r1)
  11:         beq     1f
  12:         cmpb    (r1),$'v
  13:         bne     2f
  14:         inc     r1
  15:         incb    vflg
  16:         br      1b
  17: 2:
  18:         tst     r2
  19:         bne     userr
  20:         movb    (r1)+,r2
  21:         br      1b
  22: 1:
  23:         tst     r2
  24:         beq     userr
  25:         mov     $arglst,r1
  26: 1:
  27:         mov     (sp)+,(r1)+
  28:         dec     r0
  29:         bgt     1b
  30:         clr     (r1)+
  31:         mov     $swlst,r1
  32: 1:
  33:         cmp     r2,(r1)+
  34:         beq     1f
  35:         tst     (r1)+
  36:         bne     1b
  37:         br      userr
  38: 1:
  39:         jmp     *(r1)
  40: 
  41: swlst:
  42:         'r; comr
  43:         'u; comu
  44:         'd; comd
  45:         'x; comx
  46:         't; comt
  47:          0; 0
  48: 
  49: userr:
  50:         jsr     r5,diag
  51:                 <bad usage\n\0>
  52:         .even
  53: 
  54: putc:
  55:         movb    r0,ch
  56:         mov     $1,r0
  57:         sys     write; ch; 1
  58:         rts     r5
  59: 
  60: print:
  61:         movb    (r1)+,r0
  62:         beq     1f
  63:         jsr     r5,putc
  64:         br      print
  65: 1:
  66:         rts     r5
  67: 
  68: diag:
  69:         mov     r5,r1
  70:         jsr     r5,print
  71:         tst     tfo
  72:         beq     1f
  73:         sys     unlink; tfil
  74: 1:
  75:         sys     exit
  76: 
  77: getaf:
  78:         mov     arglst,0f
  79:         sys     open; 0:..; 0
  80:         bes     1f
  81:         mov     r0,afi
  82:         sys     read; buf; 2
  83:         cmp     buf,magic
  84:         bne     magerr
  85:         tst     (r5)+
  86: 1:
  87:         rts     r5
  88: 
  89: magerr:
  90:         mov     arglst,r1
  91:         jsr     r5,print
  92:         jsr     r5,diag
  93:                 < -- not in archive format\n\0>
  94:         .even
  95: 
  96: mktmp:
  97:         sys     stat; tfil; buf
  98:         bes     1f
  99:         incb    tfil+8
 100:         cmpb    tfil+8,$'z
 101:         blo     mktmp
 102:         br      tferr
 103: 1:
 104:         sys     signal; 2; 1
 105:         ror     r0
 106:         bcs     1f
 107:         sys     signal; 2; done
 108: 1:
 109:         sys     creat; tfil; 600
 110:         bes     tferr
 111:         mov     r0,tfo
 112:         sys     open; tfil; 0
 113:         bes     tferr
 114:         mov     r0,tfi
 115:         rts     r5
 116: 
 117: tferr:
 118:         jsr     r5,diag
 119:                 <cannot open temp file\n\0>
 120:         .even
 121: 
 122: getdir:
 123:         mov     afi,r0
 124:         sys     read; dir; 16.
 125:         cmp     r0,$16.
 126:         bne     1f
 127:         jsr     r5,mvname
 128:         tst     (r5)+
 129: 1:
 130:         rts     r5
 131: 
 132: mvname:
 133:         mov     name,rname
 134:         mov     name+2,rname+2
 135:         mov     name+4,rname+4
 136:         mov     name+6,rname+6
 137:         rts     r5
 138: 
 139: skip:
 140:         mov     size,r0
 141:         inc     r0
 142:         bic     $1,r0
 143:         mov     r0,0f
 144:         mov     afi,r0
 145:         sys     seek; 0:..; 1
 146:         rts     r5
 147: 
 148: trim:
 149:         mov     r0,r2
 150: 1:
 151:         tstb    (r0)
 152:         beq     1f
 153:         cmpb    (r0)+,$'/
 154:         beq     trim
 155:         br      1b
 156: 1:
 157:         rts     r5
 158: 
 159: match:
 160:         mov     $arglst+2,r1
 161: 1:
 162:         mov     (r1)+,r0
 163:         beq     1f
 164:         cmp     r0,$-1
 165:         beq     1b
 166:         jsr     r5,trim
 167:         mov     $name,r0
 168: 2:
 169:         cmp     r0,$name+8.
 170:         beq     2f
 171:         cmpb    (r0),(r2)+
 172:         bne     1b
 173:         tstb    (r0)+
 174:         bne     2b
 175: 2:
 176:         cmp     (r5)+,-(r1)
 177: 1:
 178:         rts     r5
 179: 
 180: mvfil:
 181:         mov     (r1),9f
 182:         mov     (r1),0f
 183:         sys     stat; 0:..; buf
 184:         bes     operr
 185:         sys     open; 9:..; 0
 186:         bes     operr
 187:         mov     r0,fio
 188:         mov     (r1),r0
 189:         mov     $-1,(r1)
 190:         jsr     r5,trim
 191:         mov     $name,r0
 192: 1:
 193:         cmp     r0,$name+8.
 194:         beq     1f
 195:         movb    (r2)+,(r0)+
 196:         bne     1b
 197: 1:
 198:         mov     buf+32.,mtim
 199:         mov     buf+34.,mtim+2
 200:         movb    buf+7.,ouid
 201:         movb    buf+4.,mode
 202:         mov     buf+10.,size
 203:         mov     tfo,r0
 204:         sys     write; dir; 16.
 205:         mov     size,r2
 206: 1:
 207:         mov     fio,r0
 208:         sys     read; buf; 512.
 209:         sub     r0,r2
 210:         mov     r0,0f
 211:         beq     1f
 212:         mov     tfo,r0
 213:         sys     write; buf; 0:..
 214:         br      1b
 215: 1:
 216:         tst     r2
 217:         bne     phserr
 218:         bit     $1,size
 219:         beq     1f
 220:         mov     tfo,r0
 221:         sys     seek; 1; 1
 222: 1:
 223:         mov     fio,r0
 224:         sys     close
 225:         jsr     r5,mvname
 226:         rts     r5
 227: 
 228: operr:
 229:         mov     9b,r1
 230:         jsr     r5,print
 231:         jsr     r5,diag
 232:                 < -- cannot open\n\0>
 233:         .even
 234: 
 235: phserr:
 236:         mov     9b,r1
 237:         jsr     r5,print
 238:         jsr     r5,diag
 239:                 < -- phase error\n\0>
 240:         .even
 241: 
 242: copyfl:
 243:         mov     tfo,r0
 244:         sys     write; dir; 16.
 245:         mov     size,r1
 246:         mov     $rname,9b
 247: 1:
 248:         mov     r1,0f
 249:         beq     1f
 250:         cmp     r1,$512.
 251:         blo     2f
 252:         mov     $512.,0f
 253: 2:
 254:         mov     afi,r0
 255:         sys     read; buf; 0:..
 256:         sub     r0,r1
 257:         mov     r0,0f
 258:         beq     phserr
 259:         mov     tfo,r0
 260:         sys     write; buf; 0:..
 261:         br      1b
 262: 1:
 263:         bit     $1,size
 264:         beq     1f
 265:         mov     afi,r0
 266:         sys     seek; 1; 1
 267:         mov     tfo,r0
 268:         sys     seek; 1; 1
 269: 1:
 270:         rts     r5
 271: 
 272: xtract:
 273: /	movb	mode,0f
 274:         sys     creat; rname; 0:666
 275:         bes     noxerr
 276:         mov     r0,fio
 277:         mov     size,r1
 278:         mov     $rname,9b
 279: 1:
 280:         mov     r1,0f
 281:         beq     1f
 282:         cmp     r1,$512.
 283:         blo     2f
 284:         mov     $512.,0f
 285: 2:
 286:         mov     afi,r0
 287:         sys     read; buf; 0:..
 288:         sub     r0,r1
 289:         mov     r0,0f
 290:         beq     phserr
 291:         mov     fio,r0
 292:         sys     write; buf; 0:..
 293:         br      1b
 294: 1:
 295:         mov     fio,r0
 296:         sys     close
 297:         bit     $1,size
 298:         beq     1f
 299:         mov     afi,r0
 300:         sys     seek; 1; 1
 301: 1:
 302:         mov     r0,-(sp)
 303:         mov     r1,-(sp)
 304:         mov     mtim+2,r1
 305:         mov     mtim,r0
 306: /	sys	mdate
 307:         mov     (sp)+,r1
 308:         mov     (sp)+,r1
 309:         rts     r5
 310: 
 311: noxerr:
 312:         mov     $rname,r1
 313:         jsr     r5,print
 314:         jsr     r5,diag
 315:                 < -- cannot create\n\0>
 316:         .even
 317: 
 318: table:
 319:         mov     $rname,r1
 320:         jsr     r5,print
 321:         mov     $'\n,r0
 322:         jsr     r5,putc
 323:         rts     r5
 324: 
 325: mesg:
 326:         mov     r1,-(sp)
 327:         mov     (r5)+,r0
 328:         tstb    vflg
 329:         beq     1f
 330:         jsr     r5,putc
 331:         mov     $' ,r0
 332:         jsr     r5,putc
 333:         mov     $rname,r1
 334:         jsr     r5,print
 335:         mov     $'\n,r0
 336:         jsr     r5,putc
 337: 1:
 338:         mov     (sp)+,r1
 339:         rts     r5
 340: 
 341: oldnew:
 342:         sys     stat; rname; buf
 343:         bes     1f
 344:         cmp     buf+32.,mtim
 345:         blo     1f
 346:         bhi     2f
 347:         cmp     buf+34.,mtim+2
 348:         blos    1f
 349: 2:
 350:         tst     (r5)+
 351:         mov     $rname,tname
 352:         mov     $tname,r1
 353: 1:
 354:         rts     r5
 355: 
 356: comr:
 357:         jsr     r5,mktmp
 358:         jsr     r5,getaf
 359:                 br copfl
 360: 1:
 361:         jsr     r5,getdir
 362:                 br copfl
 363:         jsr     r5,match
 364:                 br 2f
 365:         jsr     r5,mesg; 'r
 366:         jsr     r5,skip
 367:         jsr     r5,mvfil
 368:         br      1b
 369: 2:
 370:         jsr     r5,copyfl
 371:         jsr     r5,mesg; 'c
 372:         br      1b
 373: 
 374: comu:
 375:         jsr     r5,mktmp
 376:         jsr     r5,getaf
 377:                 br noaf
 378: 1:
 379:         jsr     r5,getdir
 380:                 br copfl
 381:         tst     arglst+2
 382:         beq     2f
 383:         jsr     r5,match
 384:                 br 3f
 385:         mov     $-1,(r1)
 386: 2:
 387:         jsr     r5,oldnew
 388:                 br 3f
 389:         jsr     r5,mesg; 'r
 390:         jsr     r5,skip
 391:         jsr     r5,mvfil
 392:         br      1b
 393: 3:
 394:         jsr     r5,copyfl
 395:         jsr     r5,mesg; 'c
 396:         br      1b
 397: 
 398: comd:
 399:         jsr     r5,mktmp
 400:         jsr     r5,getaf
 401:                 br noaf
 402: 1:
 403:         jsr     r5,getdir
 404:                 br 1f
 405:         jsr     r5,match
 406:                 br 2f
 407:         mov     $-1,(r1)
 408:         jsr     r5,skip
 409:         jsr     r5,mesg; 'd
 410:         br      1b
 411: 2:
 412:         jsr     r5,copyfl
 413:         jsr     r5,mesg; 'c
 414:         br      1b
 415: 1:
 416:         jsr     r5,nfound
 417:         br      copfl
 418: 
 419: noaf:
 420:         jsr     r5,diag
 421:                 <no archive file\n\0>
 422:         .even
 423: 
 424: crterr:
 425:         jsr     r5,diag
 426:                 <cannot create archive file\n\0>
 427:         .even
 428: 
 429: copfl:
 430:         mov     $arglst,r1
 431:         mov     (r1)+,0f
 432: 1:
 433:         tst     (r1)+
 434:         beq     1f
 435:         cmp     -2(r1),$-1
 436:         beq     1b
 437:         tst     -(r1)
 438:         jsr     r5,mvfil
 439:         jsr     r5,mesg; 'a
 440:         br      1b
 441: 1:
 442:         sys     signal; 2; 1 / no interrupts during copy back
 443:         sys     creat; 0:..; 666
 444:         bes     crterr
 445:         mov     r0,afo
 446:         sys     write; magic; 2
 447: 1:
 448:         mov     tfi,r0
 449:         sys     read; buf; 512.
 450:         mov     r0,0f
 451:         beq     done
 452:         mov     afo,r0
 453:         sys     write; buf; 0:..
 454:         br      1b
 455: 
 456: done:
 457:         jsr     r5,diag
 458:                 <\0>
 459:         .even
 460: 
 461: comx:
 462:         jsr     r5,getaf
 463:                 br noaf
 464: 1:
 465:         jsr     r5,getdir
 466:                 br 1f
 467:         tst     arglst+2
 468:         beq     3f
 469:         jsr     r5,match
 470:                 br 2f
 471:         mov     $-1,(r1)
 472: 3:
 473:         jsr     r5,xtract
 474:         jsr     r5,mesg; 'x
 475:         br      1b
 476: 2:
 477:         jsr     r5,skip
 478:         br      1b
 479: 1:
 480:         jsr     r5,nfound
 481:         br      done
 482: 
 483: comt:
 484:         jsr     r5,getaf
 485:                 br noaf
 486: 1:
 487:         jsr     r5,getdir
 488:                 br 1f
 489:         tst     arglst+2
 490:         beq     2f
 491:         jsr     r5,match
 492:                 br 3f
 493:         mov     $-1,(r1)
 494: 2:
 495:         jsr     r5,table
 496: 3:
 497:         jsr     r5,skip
 498:         br      1b
 499: 1:
 500:         jsr     r5,nfound
 501:         br      done
 502: 
 503: nfound:
 504:         mov     $arglst+2,r2
 505: 1:
 506:         mov     (r2)+,r1
 507:         beq     1f
 508:         cmp     r1,$-1
 509:         beq     1b
 510:         mov     $-1,-(r2)
 511:         jsr     r5,print
 512:         mov     $notfnd,r1
 513:         jsr     r5,print
 514:         br      1b
 515: 1:
 516:         rts     r5
 517: 
 518: notfnd:
 519:         < -- not found\n\0>
 520:         .even
 521: 
 522: tfil:   </tmp/vtma\0>
 523:         .even
 524: magic:  -147.
 525: 
 526:         .bss
 527: 
 528: afi:    .=.+2
 529: afo:    .=.+2
 530: tfi:    .=.+2
 531: tfo:    .=.+2
 532: fio:    .=.+2
 533: rname:  .=.+9.
 534: ch:     .=.+1
 535: vflg:   .=.+1
 536:         .even
 537: tname:  .=.+2
 538: dir:
 539:         name: .=.+8.
 540:         mtim: .=.+4
 541:         ouid: .=.+1
 542:         mode: .=.+1
 543:         size: .=.+2
 544: arglst: .=.+200.
 545: buf:    .=.+512.

Defined functions

comd defined in line 398; used 1 times
  • in line 44
comr defined in line 356; used 1 times
  • in line 42
comt defined in line 483; used 1 times
  • in line 46
comu defined in line 374; used 1 times
  • in line 43
comx defined in line 461; used 1 times
  • in line 45
copfl defined in line 429; used 4 times
copyfl defined in line 242; used 3 times
crterr defined in line 424; used 1 times
diag defined in line 68; used 9 times
done defined in line 456; used 4 times
getaf defined in line 77; used 5 times
getdir defined in line 122; used 5 times
magerr defined in line 89; used 1 times
  • in line 84
magic defined in line 524; used 2 times
match defined in line 159; used 5 times
mesg defined in line 325; used 8 times
mktmp defined in line 96; used 4 times
mvfil defined in line 180; used 3 times
mvname defined in line 132; used 2 times
nfound defined in line 503; used 3 times
noaf defined in line 419; used 4 times
notfnd defined in line 518; used 1 times
noxerr defined in line 311; used 1 times
oldnew defined in line 341; used 1 times
operr defined in line 228; used 2 times
phserr defined in line 235; used 3 times
print defined in line 60; used 10 times
putc defined in line 54; used 5 times
skip defined in line 139; used 5 times
swlst defined in line 41; used 1 times
  • in line 31
table defined in line 318; used 1 times
tferr defined in line 117; used 3 times
tfil defined in line 522; used 6 times
trim defined in line 148; used 3 times
userr defined in line 49; used 4 times
xtract defined in line 272; used 1 times

Defined variables

afi defined in line 528; used 7 times
afo defined in line 529; used 2 times
arglst defined in line 544; used 9 times
buf defined in line 545; used 20 times
ch defined in line 534; used 2 times
dir defined in line 538; used 3 times
fio defined in line 532; used 6 times
mode defined in line 542; used 1 times
mtim defined in line 540; used 6 times
name defined in line 539; used 8 times
ouid defined in line 541; used 1 times
rname defined in line 533; used 12 times
size defined in line 543; used 8 times
tfi defined in line 530; used 2 times
tfo defined in line 531; used 8 times
tname defined in line 537; used 2 times
vflg defined in line 535; used 2 times
Last modified: 1975-05-14
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 538
Valid CSS Valid XHTML 1.0 Strict