home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol256 / eraq68.s < prev    next >
Encoding:
Text File  |  1986-03-22  |  3.8 KB  |  220 lines

  1.         .ttl    ERASE WITH SINGLE FILE QUERY
  2.  
  3.  
  4. * os interface
  5.  
  6. dconio        equ    6
  7. srch1st        equ    17
  8. srchnxt        equ    18
  9. erafile        equ    19
  10. setdma        equ    26
  11.  
  12.  
  13. * base page offsets
  14.  
  15. deffcb1        equ    $5c            * 1st parsed fcb
  16.  
  17.  
  18. * registers
  19.  
  20. dmabfptr    equ    a4            * ^dma buffer
  21. wkfcbptr    equ    a5            * ^work fcb
  22. nmsbfptr    equ    a6            * ^names buffer
  23.  
  24.  
  25. * ascii characters
  26.  
  27. ctrl_c        equ    $03
  28. lf        equ    $0a
  29. cr        equ    $0d
  30.  
  31.  
  32. * misc. constants
  33.  
  34. extlen        equ    3
  35. fnamelen    equ    8
  36. fspeclen    equ    12
  37. sectsize    equ    128
  38. eobuf        equ    $ff
  39. cnstatrq    equ    $00fe
  40. inprequ        equ    $00ff
  41.  
  42.  
  43.     .text
  44.  
  45. start:
  46.     move.l    4(sp),a0        * ^base page
  47.     lea    deffcb1(a0),a0        * ^default fcb 1
  48.     lea    workfcb,wkfcbptr    * ^work fcb
  49.     lea    dmabuf,dmabfptr        * ^dma buffer
  50.     lea    namesbuf,nmsbfptr    * ^found names buffer
  51.  
  52.     move.l    wkfcbptr,a1        * ^work fcb
  53.     moveq    #fspeclen-1,d0        * length count
  54. xferlp1:
  55.     move.b    (a0)+,(a1)+        * xfer search name
  56.     dbf    d0,xferlp1
  57.  
  58.     move.l    dmabfptr,d1        * ^dma buffer
  59.     moveq    #setdma,d0
  60.     bsr    bdos            * set dma address
  61.  
  62.     move.l    wkfcbptr,d1        * ^work fcb
  63.     moveq    #srch1st,d0
  64.     bsr    bdos            * search for first
  65.     tst.b    d0            * file found?
  66.     bmi    exit            * no
  67.     
  68.  
  69. cpytonms:
  70.     ext.l    d0            * clear hi word
  71.     mulu    #32,d0            * offset into dma buffer
  72.     add.l    dmabfptr,d0        * ^found filename
  73.     move.l    d0,a0
  74.     addq.l    #1,a0            * skip user #
  75.     move.b    (wkfcbptr),(nmsbfptr)+    * insert drive #
  76.     moveq    #fspeclen-2,d2        * length count
  77. cpynmslp:
  78.     move.b    (a0)+,(nmsbfptr)+    * copy name to names buffer
  79.     dbf    d2,cpynmslp
  80.  
  81.     move.l    wkfcbptr,d1
  82.     moveq    #srchnxt,d0
  83.     bsr    bdos            * search for next
  84.     tst.b    d0            * file found?
  85.     bpl    cpytonms        * yes
  86.  
  87.     move.b    #eobuf,(nmsbfptr)    * write end of buffer mark
  88.     lea    namesbuf,nmsbfptr    * reset pointer
  89.     move.l    nmsbfptr,a0        * duplicate
  90. showname:
  91.     move.b    (a0)+,d1
  92.     cmp.b    #eobuf,d1        * end of names buffer
  93.     beq    exit            * yes
  94.     add.b    #'A'-1,d1        * get drive name
  95.     bsr    dodconio        * print it
  96.     move.b    #':',d1
  97.     bsr    dodconio        * print ':'
  98.     moveq    #fnamelen-1,d2        * length count
  99. shownme1:
  100.     move.b    (a0)+,d1
  101.     bsr    dodconio        * print file name
  102.     dbf    d2,shownme1        * (8 chars)
  103.     move.b    #'.',d1
  104.     bsr    dodconio        * print '.'
  105.     moveq    #extlen-1,d2        * length count
  106. shownme2:
  107.     move.b    (a0)+,d1
  108.     bsr    dodconio        * print file type
  109.     dbf    d2,shownme2        * (3 chars)
  110.     lea    yesnotxt,a1        * ^msg
  111.     bsr    pstringz        * print it
  112. querase:
  113.     move.w    #cnstatrq,d1
  114.     bsr    dodconio        * get con: status
  115.     tst.b    d0            * con: ready?
  116.     beq    querase            * not yet
  117.     move.w    #inprequ,d1
  118.     bsr    dodconio        * get con: char
  119.     and.b    #$5f,d0            * fold to upper case
  120.     cmp.b    #ctrl_c,d0        * abort?
  121.     beq    exit            * yes
  122.     cmp.b    #'Y',d0            * erase?
  123.     bne    querase2        * no
  124.     move.l    wkfcbptr,a1        * ^fcb
  125.     move.l    nmsbfptr,a0        * filename
  126.     moveq    #fspeclen-1,d2        * length count
  127. querase1:
  128.     move.b    (a0)+,(a1)+        * copy filespec to wkfcb
  129.     dbf    d2,querase1
  130.     
  131.     move.l    wkfcbptr,d1
  132.     moveq    #erafile,d0
  133.     bsr    bdos            * erase file
  134.  
  135.     lea    eratxt,a1        * ^msg
  136.     bsr    pstringz        * confirm erase
  137.     bra    updnmptr
  138.  
  139. querase2:
  140.     cmp.b    #'N',d0
  141.     bne    querase            * invalid reply
  142.     lea    crlf,a1
  143.     bsr    pstringz        * print cr/lf
  144.  
  145. updnmptr:
  146.     move.l    a0,nmsbfptr        * ^next name
  147.     bra    showname        * process next file
  148.  
  149.  
  150. exit:
  151.     rts                * return to ccp
  152.  
  153.  
  154. bdos:
  155.     movem.l    d1-d7/a0-a6,-(sp)
  156.     trap    #2
  157.     movem.l    (sp)+,d1-d7/a0-a6
  158.     rts
  159.  
  160.  
  161. dodconio:
  162.     moveq    #dconio,d0
  163.     bsr    bdos            * perform direct console i/o
  164.     rts
  165.  
  166.  
  167. pstringz:
  168.     movem.l    d1/a1,-(sp)        * print 0 terminated string
  169.     moveq    #0,d1            * pointed to by a1
  170. pstrz1:
  171.     move.b    (a1)+,d1        * fetch char
  172.     beq    expstrz            * end of string
  173.     bsr    dodconio        * print char
  174.     bra    pstrz1            * loop for next char
  175. expstrz:
  176.     movem.l    (sp)+,d1/a1
  177.     rts
  178.  
  179.  
  180.  
  181.  
  182.     .data
  183.  
  184. workfcb:
  185.     dc.b    0            * drive code
  186.     dc.b    'filename'        * file name
  187.     dc.b    'ext'            * file type
  188.     dc.b    0            * extent #
  189.     dc.b    0            * s1, reserved
  190.     dc.b    0            * s2, reserved
  191.     dc.b    0            * rc, reserved
  192.     ds.b    16            * d0-dn, reserved
  193.     dc.b    0            * current sequ. record
  194.     dc.b    0,0,0            * r0,r1,r2 (r. access)
  195.  
  196.  
  197. eratxt:
  198.     dc.b    'erased.'
  199. crlf:
  200.     dc.b    cr,lf,0
  201.  
  202.     
  203. yesnotxt:
  204.     dc.b    '  (Y/N) '
  205.     dc.b    0
  206.     
  207.     .even
  208.  
  209.  
  210.     .bss
  211.  
  212. dmabuf:
  213.     ds.b    sectsize
  214.  
  215. namesbuf:
  216.     ds.b    fspeclen*4096
  217.  
  218.     
  219.     .end
  220.