home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / b / krtdir.min < prev    next >
Text File  |  2020-01-01  |  9KB  |  654 lines

  1.     .title    KRTDIR.MIN  RT-11 directory services
  2.     .ident    "V03.62"
  3.  
  4. ; /62/    31-May-93  Billy Youdelman
  5.  
  6. ;    Copyright 1984 Change Software, Inc
  7.  
  8.     .include "IN:KRTMAC.MIN"
  9.     .iif ndf  KRTINC  .error    <; .include for IN:KRTMAC.MIN failed>
  10.  
  11.     .mcall    .CSISPC ,.LOCK    ,.LOOKUP
  12.     .mcall    .READW    ,.PURGE    ,.RCTRLO,.UNLOCK
  13.  
  14.     .macro    R0toR2    ptr
  15.     .if nb ptr
  16.     mov    ptr    ,r0
  17.     .endc
  18.     call    R0toR2
  19.     .endm    R0toR2
  20.  
  21.  
  22.     .sbttl    Data offsets
  23.  
  24.     SYSPTR    =    54
  25.         BLKEY    =    256
  26.     HD$BLK    =    1
  27.     HD$FIR    =    6
  28.     HD$SYS    =    760
  29.     H$NEXT    =    2
  30.     H$EXT    =    6
  31.     F.STAT    =    0
  32.     F.NAM1    =    2
  33.     F.NAM2    =    4
  34.     F.TYPE    =    6
  35.     F.LEN    =    10
  36.     F.TIME    =    12
  37.     F.DATE    =    14
  38.     PERM    =    2000
  39.     ENDSEG    =    4000
  40.     PROT    =    100000
  41.     STAR    =    132500
  42.  
  43.  
  44.     .sbttl    Data definitions
  45.  
  46.     .psect    rtdir    ,rw,d,gbl,rel,con
  47. csidev:    .word    0 ,0 ,0 ,0
  48. dirsiz: .word    0
  49. dirbuf::.blkw    1000
  50. dbsize    = .-dirbuf
  51. dirptr: .word    0
  52. endflg:    .word    0
  53. h.next: .word    0
  54. name1:    .blkb    56.
  55. name2:    .blkb    12
  56. numblks:.word    0
  57. numfree:.word    0
  58.  
  59.     .psect    rtdir1    ,rw,d,lcl,rel,con
  60. sluggy:    .blkw    41.
  61.  
  62.     .psect    $pdata
  63. blocks:    .asciz    " Block"
  64. dcrlf:    .asciz    <cr><lf>
  65. defext:    .word    star ,0 ,0 ,0
  66. unpspc:    .ascii    " "
  67. dspace:    .asciz    "  "
  68. files:    .asciz    " File"
  69. free:    .asciz    " Free block"
  70. protspc:.asciz    "P  "
  71. nodate:    .asciz    " No Date"
  72.     .even
  73.  
  74.  
  75.     .psect    $code
  76.     .sbttl    Wildcarded lookup
  77.  
  78. lookup::save    <r1,r2,r3>
  79.     tst    index
  80.     bgt    4$
  81.     call    opndev
  82.     tst    r0
  83.     bne    90$
  84.  
  85. 4$:    mov    context    ,r3
  86.     bne    20$
  87.     call    gethom
  88.     tst    r0
  89.     bne    90$
  90.  
  91.     mov    #hd$fir    ,r1
  92. 10$:    call    gethdr
  93.     tst    r0
  94.     bne    90$
  95.     mov    #dirbuf ,r3
  96.     add    #5*2    ,r3
  97.  
  98. 20$:    mov    #dirbuf    ,r0
  99.     add    #dbsize    ,r0
  100.     cmp    r3    ,r0
  101.     bhis    88$
  102.     bit    #endseg ,f.stat(r3)
  103.     bne    80$
  104.     bit    #perm    ,f.stat(r3)
  105.     bne    25$
  106.     add    f.len(r3),numfree
  107.     br    70$
  108.  
  109. 25$:    call    match
  110.     tst    r0
  111.     beq    70$
  112.     inc    index
  113.     add    f.len(r3) ,numblks
  114.     tst    summary
  115.     bne    70$
  116.     mov    2(r5)    ,r2
  117.     call    convert
  118.     mov    r2    ,r0
  119. 30$:    tstb    (r0)
  120.     beq    40$
  121.     tst    dirflg
  122.     bne    33$
  123.     cmpb    (r0)    ,#space
  124.     beq    35$
  125. 33$:    movb    (r0)    ,(r2)+
  126. 35$:    inc    r0
  127.     br    30$
  128. 40$:    clrb    (r2)
  129.     mov    f.date(r3),lokdate
  130.     mov    f.len(r3) ,loklen
  131.     mov    f.stat(r3),lokstat
  132.     add    dirsiz    ,r3
  133.     mov    r3    ,context
  134.     clr    r0
  135.     br    100$
  136.  
  137. 70$:    add    dirsiz    ,r3
  138.     br    20$
  139. 80$:    mov    h.next    ,r1
  140.     bne    10$
  141. 88$:    mov    #er$nmf ,r0
  142.  
  143. 90$:    push    r0
  144.     .purge    #lun.sr
  145.     clr    lokdate
  146.     clr    lokstat
  147.     clr    loklen
  148.     clr    dirflg
  149.     strcpy    2(r5)    ,(r5)
  150.     pop    r0
  151. 100$:    unsave    <r3,r2,r1>
  152.     return
  153.  
  154.  
  155.     .sbttl    Replace "?" with "%" for RSTS/E users
  156.  
  157. fixwil::save    <r2>
  158.     mov    @r5    ,r2
  159. 10$:    tstb    @r2
  160.     beq    100$
  161.     cmpb    @r2    ,#'?
  162.     bne    20$
  163.     movb    #'%    ,@r2
  164. 20$:    inc    r2
  165.     br    10$
  166. 100$:    unsave    <r2>
  167.     clr    r0
  168.     return
  169.  
  170.  
  171.     .sbttl    Display directory listing on terminal
  172.  
  173. dodir::    call    sdirini
  174.     tst    r0
  175.     bne    100$
  176.     br    20$
  177.  
  178. 10$:    call    dirnex
  179.     bcs    99$
  180.     tst    endflg
  181.     beq    20$
  182.     .rctrlo
  183. 20$:    wrtall    dirbfr
  184.     br    10$
  185.  
  186. 99$:    clr    r0
  187. 100$:    return
  188.  
  189.  
  190.     .sbttl    Server directory
  191.  
  192. sdirini::copyz    (r5)    ,dirnam    ,#80.
  193.     clr    index
  194.     calls    lookup    ,<dirnam,@r5>
  195.     tst    r0
  196.     beq    10$
  197.     cmp    r0    ,#er$nmf
  198.     bne    70$
  199. 10$:    clr    index
  200.     mov    sp    ,dirflg
  201.     clr    endflg
  202.     mov    dirbfr    ,r2
  203.     mov    r2    ,dirptr
  204.     R0toR2    #nodate
  205.     tst    summary
  206.     beq    69$
  207.     R0toR2    #dcrlf
  208.     R0toR2    dirnam
  209. 69$:    clr    r0
  210. 70$:    return
  211.  
  212. sdodir::save    <r2,r3>
  213. 10$:    movb    @dirptr ,r1
  214.     bne    20$
  215.     mov    dirbfr    ,dirptr
  216.     clrb    @dirptr
  217.     call    dirnex
  218.     bcs    90$
  219.     br    10$
  220. 20$:    inc    dirptr
  221.     clr    r0
  222.     br    100$
  223. 90$:    mov    #er$eof ,r0
  224.     clr    r1
  225. 100$:    unsave    <r3,r2>
  226.     return
  227.  
  228. dirnex:    mov    dirbfr    ,r2
  229.     mov    #sluggy    ,r3
  230.     tst    endflg
  231.     bne    89$
  232.     calls    lookup    ,<dirnam,r3>
  233.     tst    r0
  234.     bne    80$
  235.     R0toR2    #dcrlf
  236.     R0toR2    r3
  237.     calls    d$cvtnum,<r3,loklen,#0>
  238.     R0toR2    r3
  239.     bit    #prot    ,lokstat
  240.     beq    57$
  241.     R0toR2    #protspc
  242.     br    59$
  243. 57$:    R0toR2    #unpspc
  244. 59$:    calls    ascdat    ,<r3,lokdate>
  245.     R0toR2    r3
  246.     br    88$
  247.  
  248. 80$:    cmp    r0    ,#er$nmf
  249.     bne    90$
  250.     call    195$
  251. 88$:    clr    r0
  252.     br    100$
  253. 89$:    mov    #er$eof ,r0
  254. 90$:    sec
  255. 100$:    return
  256.  
  257.  
  258.     .sbttl    Directory summary
  259.  
  260. 195$:    mov    sp    ,endflg
  261.     R0toR2    #dcrlf
  262.     tst    summary
  263.     bne    134$
  264.     tst    index
  265.     bgt    134$
  266.     R0toR2    #dcrlf
  267. 134$:    calls    d$cvtnum,<r3,index,#-1>
  268.     R0toR2    r3
  269.     R0toR2    #files
  270.     dec    index
  271.     beq    135$
  272.     movb    #'s!40    ,(r2)+
  273. 135$:    movb    #comma    ,(r2)+
  274.     calls    d$cvtnum,<r3,numblks,#-1>
  275.     R0toR2    r3
  276.     R0toR2    #blocks
  277.     dec    numblks
  278.     beq    137$
  279.     movb    #'s!40    ,(r2)+
  280. 137$:    R0toR2    #dcrlf
  281.     calls    d$cvtnum,<r3,numfree,#-1>
  282.     R0toR2    r3
  283.     R0toR2    #free
  284.     dec    numfree
  285.     beq    139$
  286.     movb    #'s!40    ,(r2)+
  287. 139$:    R0toR2    #dcrlf
  288.     return
  289.  
  290.  
  291.     .sbttl    Copy (r0) to (r2)
  292.  
  293. R0toR2:    movb    (r0)+    ,(r2)+
  294.     bne    R0toR2
  295.     dec    r2
  296.     return
  297.  
  298.  
  299.     .sbttl    Open device, build name list to search directory
  300.  
  301. opndev:    calls    fparse    ,<(r5),#sluggy>
  302.     tst    r0
  303.     beq    1$
  304.     return
  305.  
  306. 1$:    .purge    #lun.sr
  307.     mov    #sluggy    ,r0
  308.     copyz    r0    ,dirnam
  309.     clr    context
  310.     clr    numblks
  311.     clr    numfree
  312.  
  313.     sub    #82.    ,sp
  314.     mov    sp    ,r1
  315.     movb    #'=    ,(r1)+
  316. 10$:    movb    (r0)+    ,(r1)+
  317.     bne    10$
  318.     mov    sp    ,r1
  319.     .csispc #sluggy    ,#defext ,r1
  320.     mov    r1    ,sp
  321.     bcs    80$
  322.     mov    sluggy+36,csidev
  323.     calls    fetch    ,<csidev>
  324.     tst    r0
  325.     bne    120$
  326.  
  327.     mov    #6    ,r1
  328.     mov    #sluggy+40,r0
  329. 17$:    tst    (r0)
  330.     bne    19$
  331.     mov    #star    ,(r0)
  332. 19$:    add    #10    ,r0
  333.     sob    r1    ,17$
  334.     clr    -(r0)
  335.  
  336.     mov    #name1    ,r0
  337.     mov    #56./2    ,r1
  338. 20$:    clr    (r0)+
  339.     sob    r1    ,20$
  340.  
  341.     push    r2
  342.     mov    #name1    ,r1
  343.     mov    #sluggy+36,r2
  344. 30$:    tst    (r2)+
  345.     beq    39$
  346.     mov    #3    ,r0
  347. 33$:    calls    rdtoa    ,<r1,(r2)+>
  348.     add    #3    ,r1
  349.     sob    r0    ,33$
  350.     br    30$
  351. 39$:    pop    r2
  352.  
  353.     .lock
  354.     cmp    rt11ver    ,#5
  355.     bge    40$
  356.     mov    @#sysptr,r0
  357.     mov    #0    ,blkey(r0)
  358.     br    50$
  359. 40$:    MOV    #rtwork    ,R0
  360.     MOV    #28.*^o400+2,@R0
  361.     MOV    #blkey    ,2.(R0)
  362.     CLR    4.(R0)
  363.     EMT    ^o375
  364. 50$:    .lookup #rtwork    ,#lun.sr,#csidev
  365.     bcs    100$
  366.     clr    r0
  367.     br    120$
  368.  
  369. 80$:    mov    #csierr ,r1
  370.     br    110$
  371. 100$:    mov    #lokerr ,r1
  372. 110$:    movb    @#errbyt,r0
  373.     bpl    115$
  374.     com    r0
  375.     mov    #faterr ,r1
  376. 115$:    asl    r0
  377.     add    r0    ,r1
  378.     mov    @r1    ,r0
  379.  
  380. 120$:    add    #82.    ,sp
  381.     push    r0
  382.     beq    130$
  383.     .purge    #lun.sr
  384. 130$:    .unlock
  385.     pop    r0
  386.     return
  387.  
  388.  
  389.     .sbttl    Read in the home block
  390.  
  391. gethom: save    <r1,r2>
  392.     .readw    #rtwork,#lun.sr,#dirbuf,#400,#hd$blk
  393.     bcs    90$
  394.     tst    rtvol
  395.     beq    30$
  396.     mov    #dirbuf ,r2
  397.     add    #hd$sys ,r2
  398.     mov    r2    ,r1
  399.     mov    #rt    ,r0
  400. 10$:    tstb    @r0
  401.     beq    30$
  402.     cmpb    (r0)+    ,(r1)+
  403.     beq    10$
  404.     mov    #vms    ,r0
  405. 20$:    tstb    @r0
  406.     beq    30$
  407.     cmpb    (r0)+    ,(r2)+
  408.     beq    20$
  409.     br    80$
  410. 30$:    clr    r0
  411.     br    100$
  412.  
  413. 80$:    mov    #er$vol ,r0
  414.     br    100$
  415.  
  416. 90$:    movb    @#errbyt,r0
  417.     asl    r0
  418.     mov    drderr(r0),r0
  419. 100$:    unsave    <r2,r1>
  420.     return
  421.  
  422.     .save
  423.     .psect    $pdata
  424. rt:    .asciz    "DECRT11"
  425. vms:    .asciz    "DECVMSEX"
  426.     .even
  427.     .restore
  428.  
  429.  
  430.     .sbttl    Read in a segment, get header data
  431.  
  432. gethdr: .readw    #rtwork,#lun.sr,#dirbuf,#1000,r1
  433.     bcs    90$
  434.     mov    #dirbuf    ,r0
  435.     asl    h$next(r0)
  436.     beq    5$
  437.     add    #4      ,h$next(r0)
  438. 5$:    mov    h$next(r0),h.next
  439.     mov    #7*2     ,dirsiz
  440.     add    h$ext(r0),dirsiz
  441.     clr    r0
  442.     br    100$
  443.  
  444. 90$:    movb    @#errbyt,r0
  445.     asl    r0
  446.     mov    drderr(r0),r0
  447. 100$:    return
  448.  
  449.  
  450.     .sbttl    Convert a directory entry to .asciz
  451.  
  452. convert:save    <r2>
  453.     calls    rdtoa    ,<r2,csidev>
  454.     add    #2    ,r2
  455.     cmpb    @r2    ,#space
  456.     beq    20$
  457.     tstb    (r2)+
  458. 20$:    movb    #':    ,(r2)+
  459.     calls    rdtoa    ,<r2,f.nam1(r3)>
  460.     add    #3    ,r2
  461.     calls    rdtoa    ,<r2,f.nam2(r3)>
  462.     add    #3    ,r2
  463.     movb    #'.    ,(r2)+
  464.     calls    rdtoa    ,<r2,f.type(r3)>
  465.     clrb    3(r2)
  466.     unsave    <r2>
  467.     return
  468.  
  469.  
  470.     .sbttl    Wildcarded file name match test
  471.  
  472.     PERCENT = '.
  473.     WILDC    = '?
  474.  
  475. match:    save    <r1,r2,r4>
  476.     mov    #name2    ,r1
  477.     mov    r3    ,r2
  478.     add    #f.nam1 ,r2
  479.     mov    #3    ,r0
  480. 10$:    calls    rdtoa    ,<r1,(r2)+>
  481.     add    #3    ,r1
  482.     sob    r0    ,10$
  483.  
  484.     mov    #name1    ,r4
  485. 33$:    tstb    (r4)
  486.     beq    99$
  487.     mov    r4    ,r1
  488.     mov    #name2    ,r2
  489.     mov    #6.    ,r0
  490.     add    r0    ,r4
  491.     call    200$
  492.     bcs    90$
  493.     mov    r4    ,r1
  494.     mov    #name2+6,r2
  495.     mov    #3.    ,r0
  496.     add    r0    ,r4
  497.     call    200$
  498.     bcs    93$
  499.     mov    sp    ,r0
  500.     br    100$
  501.  
  502. 90$:    add    #3    ,r4
  503. 93$:    br    33$
  504. 99$:    clr    r0
  505. 100$:    unsave    <r4,r2,r1>
  506.     return
  507.  
  508. 200$:    mov    r0    ,L311$
  509.     mov    r1    ,L310$
  510. 201$:    cmpb    @r1    ,@r2
  511.     beq    202$
  512.     cmpb    @r1    ,#wildc
  513.     beq    210$
  514.     cmpb    @r1    ,#percent
  515.     bne    231$
  516.     cmpb    (r2)    ,#space
  517.     ble    231$
  518. 202$:    inc    r1
  519.     inc    r2
  520.     sob    r0    ,201$
  521.     call    300$
  522.     bcs    230$
  523.     cmpb    @r1    ,#space
  524.     beq    230$
  525.     br    231$
  526.  
  527. 210$:    inc    r1
  528.     call    300$
  529.     bcs    230$
  530. 211$:    cmpb    @r1    ,#space
  531.     beq    230$
  532.     cmpb    @r1    ,#percent
  533.     bne    220$
  534.     cmpb    (r2)    ,#space
  535.     ble    231$
  536.     inc    r1
  537.     sob    r0    ,211$
  538.     br    230$
  539.  
  540. 220$:    cmpb    @r1    ,@r2
  541.     bne    221$
  542.     cmpb    1(r2)    ,@r2
  543.     bne    202$
  544. 221$:    inc    r2
  545.     sob    r0    ,220$
  546.     br    231$
  547.  
  548. 230$:    tst    (pc)+
  549. 231$:    sec
  550.     return
  551.  
  552. 300$:    push    r0
  553.     mov    r1    ,r0
  554.     sub    L310$    ,r0
  555.     cmp    L311$    ,r0
  556.     beq    320$
  557.     tst    (pc)+
  558. 320$:    sec
  559.     pop    r0
  560.     return
  561.  
  562.     .save
  563.     .psect    rtdir    ,rw,d,gbl,rel,con
  564. L310$:    .word    0
  565. L311$:    .word    0
  566.     .restore
  567.  
  568.  
  569.     .sbttl    Convert date to .asciz
  570.  
  571. ascdat::save    <r0,r1,r2,r3>
  572.     mov    @r5    ,r1
  573.     mov    2(r5)    ,r0
  574.     bne    5$
  575. 1$:    strcpy    r1    ,#D310$
  576.     br    100$
  577.  
  578. 5$:    cmp    r0    ,#-1
  579.     beq    1$
  580.  
  581. 10$:    mov    r0    ,r3
  582.     ash    #3    ,r3
  583.     swab    r3
  584.     bic    #^c37    ,r3
  585.     call    i2toa
  586.  
  587.     mov    r0    ,r3
  588.     swab    r3
  589.     bic    #^c74    ,r3
  590.     cmp    r3    ,#12.*4
  591.     ble    17$
  592.     clr    r3
  593. 17$:    add    #D300$    ,r3
  594.     mov    #5    ,r2
  595. 20$:    movb    (r3)+    ,(r1)+
  596.     dec    r2
  597.     bne    20$
  598.  
  599.     mov    r0    ,r3
  600.     bic    #^c37    ,r3
  601.     add    #1972.    ,r3
  602.     bic    #^c140000,r0
  603.     swab    r0
  604.     asr    r0
  605.     add    r0    ,r3
  606.  
  607. 30$:    call    i4toa
  608.     clrb    @r1
  609.     cmpb    #'0    ,@(r5)
  610.     bne    100$
  611.     movb    #space    ,@(r5)
  612. 100$:    unsave    <r3,r2,r1,r0>
  613.     return
  614.  
  615.     .save
  616.     .psect    $pdata
  617. D300$:    .ascii "-ERR-Jan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec-"
  618. D310$:    .asciz " No Date "
  619.     .even
  620.     .restore
  621.  
  622.  
  623.     .sbttl    Unsigned 16-bit integer conversion
  624.  
  625. d$cvtnum:save    <r0,r1,r2,r3>
  626.     mov    (r5)    ,r2
  627.     mov    #6    ,r3
  628.     mov    r3    ,r1
  629.  
  630. 1$:    movb    #space    ,(r2)+
  631.     sob    r1    ,1$
  632.     clrb    @r2
  633.     mov    2(r5)    ,r1
  634.  
  635. 2$:    clr    r0
  636.     div    #10.    ,r0
  637.     add    #'0    ,r1
  638.     movb    r1    ,-(r2)
  639.     mov    r0    ,r1
  640.     beq    3$
  641.     sob    r3    ,2$
  642.  
  643. 3$:    tst    4(r5)
  644.     beq    5$
  645.      mov    @r5    ,r1
  646.      inc    r1
  647. 4$:     movb    (r2)+    ,(r1)+
  648.      bne    4$
  649.  
  650. 5$:    unsave    <r3,r2,r1,r0>
  651.     return
  652.  
  653.     .end
  654.