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 / ZSYS / SIMTEL20 / ZCPR3 / VFILR4-2.LBR / VFCMDS6.ZZ0 / VFCMDS6.Z8°
Text File  |  2000-06-30  |  7KB  |  293 lines

  1. ;===========================================================================
  2. ;
  3. ; VFCMDS6.Z80 - Move, Delete, Rename Files (M, D, R)
  4. ;
  5. ;===========================================================================
  6.  
  7.  
  8. ; COMMAND: 'M' Move files
  9.  
  10. move:
  11.     call    ermsg
  12.     db    'Move File',0
  13.     xor    a
  14.     ld    (mflag),a    ; Not mass operation
  15.     ld    (first$m),a    ; Ask destination
  16.     call    copy        ; Ask where
  17.     jr    fdel0        ; Delete source, quit
  18.  
  19.  
  20. ; * * * COMMAND: D
  21.  
  22. fdel:
  23.     xor    a        ; Set no mass operation
  24.     ld    (mflag),a
  25.     call    ringfcb        ; Get filename into s$fcb
  26.     call    delprmpt    ; Prompt for deletion
  27.     jp    nz,loop        ; If rejected, back to command loop
  28. fdel0:
  29.     call    delete        ; Delete file
  30.  
  31. ; Was Deletion Done?  Abort if Not
  32.  
  33.     ld    a,(delcode)    ; 0=not done
  34.     or    a
  35.     jp    z,loop        ; Abort if not
  36.  
  37. ; Check for deletion of All local files
  38.  
  39.     ld    hl,(locend)    ; Move in end
  40.     ld    de,-eltsiz
  41.     add    hl,de
  42.     ld    de,(locbeg)    ; Erased all local files?
  43.     call    cmpdehl
  44.     jr    nz,fdel1    ; No - continue
  45.     ld    (locend),hl    ; Yes - set new local end.
  46.     jp    cmdloop        ; Start on first screen again.
  47.  
  48. ; Check for deletion with full screen of files remaining.
  49.  
  50. fdel1:
  51.     ld    de,(ringend)    ; Last screen of files?
  52.     call    cmpdehl
  53.     jr    nz,fdel4    ; No. redisplay with new last file.
  54.  
  55. ; Check for Deletion of last file in ring.
  56.  
  57.     push    hl        ; Save new local end.
  58.     ld    de,(ringpos)    ; Deleted file was last file in ring?
  59.     call    cmpdehl
  60.     jr    nz,fdel2    ; No? rebuild shorter display.
  61.  
  62. ; Last file in ring deleted - move back one position
  63.  
  64.     ld    de,-eltsiz    ; Reset position to new end.
  65.     add    hl,de
  66.     ld    (ringpos),hl
  67.     call    psn$back    ; Back up cursor by one file
  68.  
  69. ; Erase file at previous last file position
  70.  
  71. fdel2:
  72.     ld    hl,(curat)    ; Save current cursor position
  73.     ld    (scurat),hl
  74.     call    cur$last    ; Position to previous last file.
  75.  
  76.     ld    b,entsiz    ; Blank it
  77.     ld    a,' '
  78. fdel3:
  79.     call    cout
  80.     djnz    fdel3
  81.  
  82.     ld    hl,(scurat)    ; Restore current cursor position
  83.     ld    (curat),hl
  84.     pop    hl        ; Set new local end.
  85.     ld    (locend),hl
  86.  
  87. ; Redisplay files starting at RINGPOS
  88.  
  89. fdel4:
  90.     call    erclr        ; Clear error message line.
  91.     jp    runsh5        ; Redisplay current files
  92.  
  93.  
  94. ; DELETE - Delete filename at RINGPOS
  95.  
  96. delete:
  97.     xor    a
  98.     ld    (delcode),a    ; Set deletion not done
  99.     call    ringfcb        ; Get file name
  100.     ld    a,(mflag)    ; Mass operation?
  101.     or    a        ; 0=no
  102.     jr    z,del1        ; Do delete
  103.     ld    a,(massop)    ; Mass move?
  104.     cp    'M'
  105.     jr    z,del1        ; If so, perform as single delete
  106.  
  107. ; Test for Verify on Mass Delete
  108.  
  109.     ld    a,(mdflg)    ; Verify?
  110.     cp    'V'
  111.     jr    nz,del1        ; Delete without verify
  112.  
  113. ; Group Delete with Verify
  114. ;    - Verify file deletion
  115. ;    - Delete only if Approved
  116.  
  117.     call    delprmpt    ; Prompt for deletion of file
  118.     ret    nz        ; Abort if not approved
  119.  
  120. ; Display File Deletion Message
  121.  
  122. del1:
  123.     call    cprmpt
  124.     db    'Deleting ',0
  125.     call    prfns
  126.  
  127. ; Delete File in S$FCB
  128.  
  129. del2:
  130.     ld    hl,s$fcb    ; Check file R/W status
  131.     call    attrib
  132.     ret    z        ; Abort if R/O and delete not approved
  133.     ld    de,s$fcb    ; Point at delete 'fcb'
  134.     ld    c,erase        ; Erase function
  135.     call    bdos
  136.     inc    a
  137.     jr    nz,delcl0    ; Branch if delete succeeded
  138. fnf$msg:
  139.     call    fnf1        ; Show error message
  140.     jp    loop
  141.  
  142. delcl0:    ld    a,0ffh
  143.     ld    (delcode),a    ; Set deletion done
  144.     ld    a,(mflag)
  145.     or    a
  146.     ret    nz        ; If mass operation, quit now
  147.  
  148.         ; Close up erased position
  149.  
  150.     ld    hl,(ringpos)    ; Prepare move up pointers
  151.     push    hl
  152.     ld    de,eltsiz    ; Eltsiz bytes/entry
  153.     add    hl,de        ; De = 'to' location
  154.     pop    de        ; Hl = 'from' location
  155.  
  156. ;  Move ELTSIZ-byte ring entries from HL to DE
  157.  
  158. movup:    ex    de,hl        ; Hl=dest
  159.     push    hl        ; Check if at end
  160.     ld    hl,(ringend)    ; Get old end pointer
  161.     call    cmpdehl        ; Check against current end location
  162.     pop    hl
  163.     ex    de,hl        ; De=dest
  164.     jr    z,movdone    ; Must be at end of ring
  165.     ld    b,eltsiz    ; One name size
  166.     call    movec        ; Move one name up
  167.     jr    movup        ; Go check end parameters
  168.  
  169. ;  Move Complete
  170.  
  171. movdone:
  172.     ld    (ringend),de    ; Set new ring end if all moved
  173.     ld    hl,(ringcnt)    ; One less element in array.
  174.     dec    hl
  175.     ld    (ringcnt),hl
  176.     ret
  177.  
  178.  
  179. ; Prompt for deletion of file
  180.  
  181. delprmpt:
  182.     call    erclr        ; Clear the error line
  183.     call    cprmpt
  184.     db    'Delete ',0
  185.     call    prfns        ; Print file name in s$fcb
  186.     call    vprint
  187.     db    ' (Y/N)? ',0
  188.     call    keyin
  189.     push    af
  190.     call    atcmd        ; Clear the command line
  191.     pop    af
  192.     cp    ctrlc
  193.     jp    z,loop        ; Restart if Control C
  194.     cp    'Y'
  195.     ret
  196.  
  197.  
  198. ; * ** COMMAND: R
  199.  
  200. ; Set-up to rename file at cursor position
  201. ;    scan keyboard buffer and move filename to destination FCB (DFCB)
  202.  
  203. rename:
  204.     ld    hl,(ringpos)    ; Point to the file in the ring
  205.     ld    de,9        ; Offset to R/O byte
  206.     add    hl,de        ; Point to it
  207.     ld    a,128        ; Set bit 7 of A
  208.     cp    (hl)        ; Set carry if R/O
  209.     jr    nc,renam0    ; File is R/W
  210.  
  211.     call    atcmd        ; Cursor to command prompt
  212.     ld    hl,(ringpos)    ; Get ring position
  213.     inc    hl        ; Point to name
  214.     call    prfnskip    ; Print file name
  215.     call    vprint
  216.     db    ' is R/O. Rename anyway (Y/N)? ',bel,0
  217.     call    keyin
  218.     cp    'Y'
  219.     jp    nz,loop
  220.  
  221. renam0:
  222.     call    erclr        ; Clear error line
  223.     call    cprmpt        ; New name prompt
  224.     db    'Rename File to: ',0
  225.     ld    de,d$fcb    ; Pt to fcb to fill
  226.     call    filename    ; Get file name & init fcb.
  227.  
  228.     ld    hl,d$fcb+1    ; Check for any wild cards -- none permitted
  229.     ld    b,11        ; 11 bytes
  230. wildchk:
  231.     ld    a,(hl)        ; Get char
  232.     inc    hl        ; Pt to next
  233.     cp    '?'        ; Wild?
  234.     jr    z,wildfnd
  235.     djnz    wildchk
  236.  
  237.     ld    de,d$fcb    ; Search to see if this file exists
  238.     ld    c,srchf        ; Search first function
  239.     call    bdos
  240.     inc    a        ; 0ffh --> 00h if file not found
  241.     jr    z,renam1    ; To rename, if duplicate doesn't exists.
  242.     call    ermsg        ; Announce the situation
  243.     db    'File Exists',0
  244.     jr    renam0        ; Try again?
  245.  
  246. renam1:
  247.     ld    hl,d$fcb    ; -> file id filled in by filename
  248.     ld    de,d$fcb+16    ; -> to new file id field of fcb
  249.     ld    b,12        ; Amount to move
  250.     call    movec
  251.  
  252.     ld    hl,(ringpos)    ; Move name from ring to rename 'fcb'
  253.     ld    de,d$fcb    ; Place to move name
  254.     ld    b,12        ; Amount to move
  255.     call    movea        ; Moves name and not attributes
  256.  
  257.     ld    de,d$fcb
  258.     ld    c,attr
  259.     call    bdos        ; Clear attributes on disk
  260.  
  261.     ld    de,d$fcb    ; Rename 'fcb' location
  262.     ld    c,ren        ; Rename function
  263.     call    bdos
  264.  
  265.     ld    hl,(ringpos)
  266.     ld    de,9
  267.     add    hl,de        ; Point to R/O attribute
  268.     ld    a,128
  269.     and    (hl)
  270.     jr    z,renam2    ; All Attributes are reset
  271.  
  272.     ld    hl,d$fcb+25
  273.     or    (hl)
  274.     ld    (hl),a        ; Set R/O attribute
  275.     ld    de,d$fcb+16    ; New name with attributes
  276.     ld    c,attr
  277.     call    bdos        ; Set the attributes
  278.  
  279. renam2:
  280.     ld    hl,(ringpos)
  281.     ex    de,hl        ; To DE
  282.     ld    hl,d$fcb+16    ; New name with attributes
  283.     ld    b,12
  284.     call    movec        ; Copy into ring
  285.     jp    runsh5        ; Quit
  286.  
  287. ; wild char found in file name -- error
  288.  
  289. wildfnd:
  290.     call    ermsg
  291.     db    'AFN NOT Allowed',bel,0
  292.     jp    renam0        ; Try again
  293.