home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / PACKET / RLI120.ARK / EXTDIR.MAC < prev    next >
Text File  |  1986-08-12  |  7KB  |  531 lines

  1. ; EXTDIR.MAC - 12/30/85 - Extended directory listing.
  2.  
  3.     .z80
  4.     maclib    TNC.LIB
  5.  
  6.     entry        dir,dira,dirn,dirs
  7.  
  8.     external    seenew,waitc,fcb,fcb2,event,log,logtxt,llogtxt
  9.     external    maxdrv,ckdrv,@prtx,@outch,@fill,ercant,erfind
  10.     external    @mcmd,$memry,memtop,@outn,@outnb,numb,bindec
  11.  
  12. ; shtyp =
  13. ;       1, show $dir only
  14. ;       2, show $sys only
  15. ;       4, show $new only
  16. ;       7, show all
  17. ; call getfree   returns free space on current drive in HL.
  18.  
  19.     asciictl
  20.     bdosdef
  21.     tncdefs
  22.  
  23.     dseg
  24.  
  25. m1:    dw    $+2
  26.     db    cr,tab,'Drive '
  27. m2:    db    '  contains ',0
  28. m3:    dw    $+2
  29.     db    'K in ',0
  30. m4:    dw    $+2
  31.     db    ' files with ',0
  32. m5:    dw    $+2
  33.     db    'K free',cr,0
  34. bufptr:    ds    2
  35. dsm:    ds    2
  36. blm:    ds    2
  37. bsh:    ds    1
  38. cnt:    ds    2
  39. drm:    ds    2
  40. frsiz:    ds    2
  41. rec:    ds    2
  42. fcnt:    ds    1
  43. span:    ds    2
  44. x7:    ds    2
  45. rec2:    ds    2
  46. rec1:    ds    2
  47. x10:    ds    2
  48. recptr:    ds    2
  49. drv:    ds    1
  50. files:    ds    2
  51. tot:    ds    2
  52. ptr:    ds    2
  53. shtyp:    ds    1
  54.     cseg
  55. dir:    ld    b,1        ; Normal only
  56.     cmpm    seenew,true    ; See new too?
  57.     jr    nz,aldirb    ; No
  58.     ld    b,5
  59.     jr    aldirb
  60. dira:    ld    b,7
  61.     jr    aldirb
  62. dirs:    ld    b,2
  63.     jr    aldirb
  64. dirn:    ld    b,4
  65. aldirb:    ld    a,b
  66.     ld    (shtyp),a
  67.     movcmd    logtxt,0,llogtxt 1
  68.     ld    (hl),cr
  69.     mvim    event,'F'
  70.     call    log
  71.     ld    a,(fcb2)
  72.     or    a
  73.     jr    nz,onedir
  74.     mvim    fcb2,1
  75. aldirc:    zmov    fcb,fcb2,fcbsize
  76.     ld    a,(fcb)
  77.     call    ckdrv
  78.     call    c,prtdir
  79.     ld    a,(fcb2)
  80.     ld    hl,maxdrv
  81.     cp    (hl)
  82.     jp    z,waitc
  83.     inc    a
  84.     ld    (fcb2),a
  85.     jr    aldirc
  86.  
  87. ; Drive specified. Do only that one.
  88.  
  89. onedir:    zmov    fcb,fcb2,fcbsize
  90.     ld    a,(fcb)
  91.     call    ckdrv
  92.     jp    nc,erfind
  93.     call    prtdir
  94.     jp    waitc
  95.  
  96. ; List the directory.
  97.  
  98. prtdir:    movw    ptr,$memry
  99. ; Get default drive
  100.     dodosv    ckcur
  101.     ld    (drv),a
  102.     ld    hl,fcb
  103.     ld    a,(hl)
  104.     or    a
  105.     jr    nz,bgn
  106.     ld    a,(drv)
  107.     inc    a
  108. bgn:    ld    (hl),a
  109.     ld    hl,fcb
  110.     inc    hl
  111.     ld    a,(hl)
  112.     cp    ' '
  113.     jr    nz,sext
  114.     fill    ,11,'?'
  115. sext:    ld    hl,fcb
  116.     ld    de,12
  117.     add    hl,de
  118.     ld    (hl),'?'
  119.     dodosa    setdma,defdma
  120. ; Select drive
  121.     ld    hl,fcb
  122.     ld    e,(hl)
  123.     dec    e
  124.     dodosa    seldsk
  125.     call    getfree
  126.     ld    (frsiz),hl
  127. ; Set up pointers to memory structures.
  128.     ld    de,(ptr)
  129.     ld    hl,(drm)    ; Max files on disk -1
  130.     inc    hl        ; Max files on disk
  131.     add    hl,hl        ; Times two
  132.     add    hl,de
  133.     ld    (rec),hl
  134.     ld    (recptr),hl
  135.     ld    de,(memtop)
  136.     or    a        ; Clear carry
  137.     sbc    hl,de
  138.     jp    nc,er
  139.     ld    hl,0
  140.     ld    (cnt),hl
  141.     ld    (files),hl
  142.     ld    (tot),hl
  143. ; Search first
  144.     ld    de,fcb
  145.     dodosa    search
  146.     jr    nx1
  147. ; Search next
  148. nx:    ld    de,fcb
  149.     dodosa    next
  150. nx1:    inc    a
  151.     jp    z,srt
  152.     dec    a
  153.     and    3
  154.     add    a,a
  155.     add    a,a
  156.     add    a,a
  157.     add    a,a
  158.     add    a,a
  159.     ld    hl,defdma+1
  160.     add    a,l
  161.     ld    l,a
  162.     ld    (bufptr),hl
  163.     ld    b,0
  164.     add    a,3
  165.     ld    l,a        ; Point to f4'
  166.     ld    a,(hl)
  167.     and    80h        ; File has new attr set?
  168.     jr    z,nxa        ; No
  169.     ld    b,4        ; Is new file
  170. nxa:    ld    a,l
  171.     add    a,6
  172.     ld    l,a
  173.     ld    a,(hl)
  174.     and    80h        ; $sys file?
  175.     jr    z,nxb        ; No
  176.     ld    a,2
  177.     or    b        ; Is sys as well
  178.     ld    b,a
  179. nxb:    ld    a,b
  180.     or    a
  181.     jr    nz,nxc
  182.     ld    b,1        ; Normal file
  183. nxc:    ld    a,(shtyp)
  184.     and    b        ; We show this kind?
  185.     jr    z,nx        ; No
  186.  
  187. ; Move file.ext to buffer.
  188. ; Store file, extension, extent number, record count.
  189.  
  190.     ld    hl,(bufptr)
  191.     ld    de,(recptr)
  192.     ld    bc,12
  193.     ldir
  194.     inc    hl
  195.     inc    hl
  196.     ld    a,(hl)
  197.     ld    (de),a
  198.     inc    de
  199.     ld    (recptr),de
  200.     ld    hl,(cnt)
  201.     inc    hl
  202.     ld    (cnt),hl
  203.     ld    hl,13
  204.     add    hl,de
  205.     ld    de,(memtop)
  206.     or    a        ; Clear carry
  207.     sbc    hl,de
  208.     jp    c,nx
  209. er:    call    ercant
  210.     jp    exit
  211.  
  212. srt:    ld    hl,(cnt)
  213.     ld    a,l
  214.     or    h
  215.     jp    z,prtt
  216.     push    hl        ; Save count on top of stack.
  217. ; Fill list of pointers to records with initial record addresses.
  218.     ld    de,(rec)
  219.     ld    hl,(ptr)
  220.     ld    bc,13
  221. srta:    ld    (hl),e
  222.     inc    hl
  223.     ld    (hl),d
  224.     inc    hl
  225. ; Increment address
  226.     ex    de,hl    
  227.     add    hl,bc
  228.     ex    de,hl    
  229. ; Decrement count
  230.     ex    (sp),hl
  231.     dec    hl
  232.     ld    a,l
  233.     or    h
  234.     ex    (sp),hl
  235.     jr    nz,srta
  236.     pop    hl        ; Clean up stack
  237.  
  238.     movw    x10,cnt
  239.     dec    hl
  240.     ld    a,l
  241.     or    h
  242.     jp    z,prt
  243.     ld    hl,(x10)
  244. ; x10/2
  245. srtb:    or    a        ; Clear carry
  246.     ld    a,h
  247.     rra    
  248.     ld    h,a
  249.     ld    a,l
  250.     rra    
  251.     ld    l,a
  252.     or    h
  253.     jp    z,prt
  254.     ld    a,l
  255.     or    1
  256.     ld    l,a
  257.     ld    (span),hl
  258.     inc    hl
  259. srtc:    ld    (x7),hl
  260.     ld    de,(span)
  261.     or    a        ; Clear carry
  262.     sbc    hl,de
  263. srtd:    ld    (rec2),hl
  264.     ex    de,hl
  265.     ld    hl,(span)
  266.     add    hl,de
  267.     ld    (rec1),hl
  268.     ld    a,12
  269.     call    cpr        ; Compare file, extension, extent
  270.     jp    p,srte        ; Don't exchange
  271. ; Exchange the two record ponters.
  272.     ld    bc,(ptr)
  273.     dec    bc
  274.     dec    bc
  275.     ld    de,(rec2)
  276.     ld    hl,(rec1)
  277.     add    hl,hl
  278.     add    hl,bc
  279.     ex    de,hl    
  280.     add    hl,hl
  281.     add    hl,bc
  282.     ld    c,(hl)
  283.     ld    a,(de)
  284.     ex    de,hl    
  285.     ld    (hl),c
  286.     ld    (de),a
  287.     inc    hl
  288.     inc    de
  289.     ld    c,(hl)
  290.     ld    a,(de)
  291.     ex    de,hl    
  292.     ld    (hl),c
  293.     ld    (de),a
  294.     ld    de,(rec2)
  295.     ld    hl,(span)
  296.     ld    a,e
  297.     sub    l
  298.     ld    l,a
  299.     ld    a,d
  300.     sbc    a,h
  301.     ld    h,a
  302.     jp    m,srte
  303.     or    l
  304.     jr    z,srte
  305.     jp    srtd
  306. srte:    ld    de,(x10)
  307.     ld    hl,(x7)
  308.     inc    hl
  309.     ld    a,e
  310.     sub    l
  311.     ld    a,d
  312.     sbc    a,h
  313.     jp    p,srtc
  314.     ld    hl,(span)
  315.     jp    srtb
  316.  
  317. ; Print the sorted file names.
  318.  
  319. prt:    ld    hl,(ptr)
  320.     ld    (recptr),hl
  321.     mvim    fcnt,4        ; Names/line
  322. prta:    dcxm    cnt
  323.     ld    a,h
  324.     or    l
  325.     jp    z,prtd
  326.     ld    hl,(recptr)
  327.     ld    a,11
  328.     push    hl
  329.     ld    e,(hl)
  330.     inc    hl
  331.     ld    d,(hl)
  332.     inc    hl
  333.     ld    c,(hl)
  334.     inc    hl
  335.     ld    b,(hl)
  336.     ex    de,hl    
  337.     ld    e,a
  338. prtb:    ld    a,(bc)
  339.     cp    (hl)
  340.     inc    hl
  341.     inc    bc
  342.     jr    nz,prtc
  343.     dec    e
  344.     jr    nz,prtb
  345. prtc:    pop    hl
  346.     jr    nz,prtd
  347.     inc    hl
  348.     inc    hl
  349.     ld    (recptr),hl
  350.     jr    prta
  351.  
  352. prtd:    ld    hl,(recptr)
  353.     ld    e,(hl)
  354.     inc    hl
  355.     ld    d,(hl)
  356.     inc    hl
  357.     ld    (recptr),hl
  358.     ex    de,hl
  359.     ld    b,8
  360.     call    @outn
  361.     ld    c,'.'
  362.     call    @outch
  363.     ld    b,3
  364.     call    @outn
  365.     ld    e,(hl)
  366.     ld    d,0
  367.     inc    hl
  368.     ld    a,(hl)
  369.     ex    de,hl    
  370.     add    hl,hl
  371.     add    hl,hl
  372.     add    hl,hl
  373.     add    hl,hl
  374.     ex    de,hl    
  375.     ld    hl,blm
  376.     add    a,(hl)
  377.     rrca
  378.     rrca
  379.     rrca
  380.     and    1fh
  381.     ld    l,a
  382.     ld    h,0
  383.     add    hl,de
  384.     ld    a,(blm)
  385.     rrca
  386.     rrca
  387.     rrca
  388.     and    1fh
  389.     cpl    
  390.     and    l
  391.     ld    l,a
  392.     ex    de,hl
  393.     ld    hl,(tot)
  394.     add    hl,de
  395.     ld    (tot),hl
  396.     inxm    files
  397.     ex    de,hl    
  398.     call    bindec
  399.     ld    hl,numb+1
  400.     ld    b,4
  401.     call    @outn
  402.     ld    c,'k'
  403.     call    @outch
  404.     dtz    cnt
  405.     jp    z,prtt
  406.     ld    hl,fcnt
  407.     dec    (hl)
  408.     jr    z,prte
  409.     ld    c,' '
  410.     call    @outch
  411.     ld    c,'|'
  412.     call    @outch
  413.     ld    c,' '
  414.     call    @outch
  415.     jp    prta
  416.  
  417. prte:    mvim    fcnt,4
  418.     ld    c,cr
  419.     call    @outch
  420.     jp    prta
  421.  
  422. prtn:    call    bindec
  423.     ld    hl,numb
  424.     ld    b,5
  425.     jp    @outnb
  426.  
  427. prtt:    ld    hl,fcb
  428.     ld    a,(hl)
  429.     add    a,'A'-1
  430.     ld    (m2),a
  431.     prtx    m1
  432.     ld    hl,(tot)
  433.     call    prtn
  434.     prtx    m3
  435.     ld    hl,(files)
  436.     call    prtn
  437.     prtx    m4
  438.     ld    hl,(frsiz)
  439.     call    prtn
  440.     prtx    m5
  441.     jp    exit
  442.  
  443. ; (HL) rec1 #, (DE) rec2 #
  444. cpr:    ld    bc,(ptr)
  445.     dec    bc
  446.     dec    bc
  447.     add    hl,hl
  448.     add    hl,bc
  449.     ex    de,hl    
  450.     add    hl,hl
  451.     add    hl,bc
  452.     ex    de,hl    
  453.     ld    c,(hl)
  454.     inc    hl
  455.     ld    b,(hl)
  456.     ex    de,hl    
  457.     ld    e,(hl)
  458.     inc    hl
  459.     ld    d,(hl)
  460.     ex    de,hl    
  461.     ld    e,a
  462. cpra:    ld    a,(bc)
  463.     cp    (hl)
  464.     inc    bc
  465.     inc    hl
  466.     ret    nz        ; Records different    
  467.     dec    e
  468.     jr    nz,cpra
  469.     ret            ; Records same    
  470.  
  471. exit:    ld    a,(drv)
  472.     ld    e,a
  473.     dodosa    seldsk
  474.     ret    
  475.  
  476. ; Calculate free space on current drive, return in HL.
  477.  
  478. getfree:    dodosa    getdpb
  479.     inc    hl
  480.     inc    hl
  481.     ld    a,(hl)
  482.     ld    (bsh),a
  483.     inc    hl
  484.     ld    a,(hl)
  485.     ld    (blm),a
  486.     inc    hl
  487.     inc    hl
  488.     ld    e,(hl)
  489.     inc    hl
  490.     ld    d,(hl)
  491.     ld    (dsm),de
  492.     inc    hl
  493.     ld    e,(hl)
  494.     inc    hl
  495.     ld    d,(hl)
  496.     ld    (drm),de
  497.     dodosa    getalv
  498.     ex    de,hl    
  499.     ld    hl,(dsm)
  500.     inc    hl
  501.     ld    bc,0
  502. fra:    push    de
  503.     ld    a,(de)
  504.     ld    e,8
  505. frb:    rla    
  506.     jr    c,frc
  507.     inc    bc
  508. frc:    ld    d,a
  509.     dec    hl
  510.     ld    a,l
  511.     or    h
  512.     jr    z,frd
  513.     ld    a,d
  514.     dec    e
  515.     jr    nz,frb
  516.     pop    de
  517.     inc    de
  518.     jr    fra
  519.  
  520. frd:    pop    de
  521.     ld    l,c
  522.     ld    h,b
  523.     ld    a,(bsh)
  524.     sub    3
  525.     ret    z
  526. fre:    add    hl,hl
  527.     dec    a
  528.     jr    nz,fre
  529.     ret
  530.     end
  531.