home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol115 / del.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.3 KB  |  251 lines

  1.     NAME DEL
  2. ;DELETE COMMAND, SIMILAR TO RT-11
  3. ;
  4. ;CALL AS DEL FNAME [/NOQ]
  5. ;/NOQ OR NO WILDCARDS (? OR *) SUPPRESSES QUERY
  6. ;IF QUERY, ASKS BEFORE DELETING EACH FILE.
  7. ;
  8. ;WRITTEN BY RUSS BAKKE
  9. ;03-09-83
  10. ;
  11.     ORG 100H    ;NORMAL START
  12. START    LD SP,2000H
  13.     LD DE,MSG0    ;BANNER
  14.     LD C,9        ;MS
  15.     CALL DOS
  16. ;FIRST, SEE IF AN FCB WAS PASSED
  17.     LD HL,DBUFF
  18.     LD A,(HL)    ;LENGTH OF COMD LINE
  19.     OR A        ;SET FLAGS
  20.     JP Z,NOFIL    ;NO FILE NAME PASSED
  21. ;
  22. ;SEE IF BLANK TYPE
  23.     LD HL,FCB+9
  24.     LD A,' '
  25.     LD B,3
  26. CKTYP    CP (HL)
  27.     JR NZ,NOBLK
  28.     INC HL
  29.     DJNZ CKTYP
  30. ;YES--FORCE TO '???'
  31.     LD HL,FCB+9
  32.     LD A,'?'
  33.     LD B,3
  34. CK1    LD (HL),A
  35.     INC HL
  36.     DJNZ CK1
  37. ;
  38. NOBLK    CALL CLRFC2
  39.     CALL SAVFN    ;SAVE FCB
  40. ;SEE IF ANY OPTIONS
  41.     LD HL,DBUFF+1
  42. GETOPT    LD A,(HL)
  43.     INC HL
  44.     CP '/'
  45.     JR Z,OPT1
  46.     CP 0
  47.     JR NZ,GETOPT
  48. ;NO OPTS
  49. NOOPT    XOR A
  50.     LD (OPTS),A
  51.     JR GETWC
  52. ;
  53. OPT1    LD A,(HL)
  54.     INC HL
  55.     CP 'N'
  56.     JR NZ,NOOPT
  57.     LD A,(HL)
  58.     INC HL
  59.     CP 'O'
  60.     JR NZ,NOOPT
  61.     LD A,(HL)
  62.     CP 'Q'
  63.     JR NZ,NOOPT
  64.     LD A,1
  65.     LD (OPTS),A
  66. ;
  67. ;NOW SEE IF ANY WILDCARDS
  68. GETWC    LD HL,FCB+1
  69. GETWC1    LD A,(HL)
  70.     INC HL
  71.     CP '*'
  72.     JR Z,SEARCH
  73.     CP '?'
  74.     JR Z,SEARCH
  75.     CP 0
  76.     JR NZ,GETWC1
  77.     LD A,1        ;NO WILDCARDS, SO NOQ
  78.     LD (OPTS),A
  79. ;
  80. ;NOW LOOKUP FIRST FILE
  81. SEARCH    LD DE,FCB2
  82.     LD C,17        ;SEARCH
  83.     CALL DOS
  84.     CP -1
  85.     JP Z,NOFIL
  86. ;
  87. ;A CONTAINS FILE NUMBER, ENTRY IN DBUFF.
  88. ;NOTE: IN CPM IS 0-3; IN IOS MAY BE 0-255.
  89. ;SO TAKE MOD 4.
  90. AGAIN    AND 3
  91.     ADD A,A
  92.     ADD A,A
  93.     ADD A,A
  94.     ADD A,A
  95.     ADD A,A
  96.     LD E,A
  97.     LD D,0
  98.     LD HL,DBUFF
  99.     ADD HL,DE
  100.     PUSH HL
  101. ;HL NOW POINTS TO FILE ENTRY
  102.     LD A,(OPTS)
  103.     CP 0
  104.     JR NZ,NOQUE    ;NO QUERY
  105.     INC HL        ;SKIP STARTING NULL
  106.     PUSH HL
  107.     LD DE,MSG1    ;"DELETE?
  108.     LD C,9        ;PRINT BUFFER
  109.     CALL DOS
  110.     LD C,25        ;GET CURRENT DR.
  111.     CALL DOS
  112.     ADD A,'A'
  113.     LD E,A
  114.     CALL CHOUT
  115.     LD E,':'
  116.     CALL CHOUT
  117.     POP HL
  118.     LD B,8        ;FILENAME
  119.     CALL LINOT
  120.     LD E,'.'
  121.     CALL CHOUT
  122.     LD B,3        ;EXT
  123.     CALL LINOT
  124.     LD E,'?'
  125.     CALL CHOUT
  126.     LD E,' '
  127.     CALL CHOUT
  128.     LD C,1        ;GET ANSWER
  129.     CALL DOS
  130.     PUSH AF
  131.     CP 0DH        ;C/R?
  132.     JR Z,QUER1
  133.     LD E,0DH
  134.     CALL CHOUT
  135. QUER1    LD E,0AH
  136.     CALL CHOUT
  137.     POP AF
  138.     CP 'Y'
  139.     JR NZ,NEXT
  140. ;
  141. ;COPY FCB (12 CHARS) FROM HL (DBUFF)
  142. ;NOTE THAT WE MUST COPY INTO BUFFER,
  143. ;RATHER THAN USE DELETE CALL NOW, SO
  144. ;THAT WE CAN USE "FIND NEXT".
  145. NOQUE    POP HL
  146.     LD DE,(BUFFER)
  147.     LD BC,12
  148.     LDIR
  149.     LD (BUFFER),DE
  150. ;
  151. NEXT    LD DE,FCB2
  152.     LD C,18        ;SEARCH NEXT
  153.     CALL DOS
  154.     CP -1        ;FOUND?
  155.     JP NZ,AGAIN    ;YES, REPEAT
  156. ;
  157. ;NOW DELETE EVERYTHING IN BUFFER
  158.     LD HL,(BUFFER)
  159.     LD A,0FFH
  160.     LD (HL),A    ;MARK END
  161.     LD HL,BUFF
  162.     LD (BUFFER),HL
  163. DELNXT    LD HL,(BUFFER)
  164.     LD A,(HL)
  165.     CP 0FFH
  166.     JR Z,DONE
  167.     PUSH HL
  168.     CALL CLRFCB
  169.     POP HL
  170.     LD DE,FCB
  171.     LD BC,12
  172.     LDIR        ;COPY INTO FCB
  173.     LD (BUFFER),HL
  174.     LD DE,FCB
  175.     LD C,19        ;DELETE
  176.     CALL DOS
  177.     JR DELNXT
  178. ;
  179. DONE    RST 0        ;DONE, WARM START DOS
  180. ;
  181. ;
  182. ;SUBROUTINES
  183. ;
  184. CHOUT    LD C,2        ;CONSOLE OUT
  185.     PUSH HL
  186.     PUSH BC
  187.     CALL DOS
  188.     POP BC
  189.     POP HL
  190.     RET
  191. ;
  192. ;LINOT--SEND B CHARS FROM HL
  193. LINOT    LD E,(HL)
  194.     INC HL
  195.     CALL CHOUT
  196.     DJNZ LINOT
  197.     RET
  198. ;
  199. NOFIL    LD DE,MSG2
  200.     LD C,9
  201.     CALL DOS
  202.     RST 0        ;RET TO OS
  203. ;
  204. SAVFN    LD HL,FCB    ;SAVE FCB
  205.     LD DE,FCB2
  206.     LD BC,12
  207.     LDIR
  208.     RET
  209. ;
  210. ;CLRFCB--CLEAR FCB
  211. CLRFCB    LD HL,FCB
  212. CLR0    LD B,32        ;# BYTES TO CLEAR
  213.     XOR A
  214. CLR1    LD (HL),A
  215.     INC HL
  216.     DJNZ CLR1
  217.     RET
  218. ;
  219. CLRFC2    LD HL,FCB2
  220.     JR CLR0
  221. ;
  222. ;
  223. ;MESSAGES
  224. ;
  225. MSG0    DEFM 'DEL.COM     03-09-83'
  226.     DEFW 0A0DH
  227.     DEFW 0A0DH
  228.     DEFM '$'
  229. ;
  230. MSG1    DEFM 'DELETE $'
  231. ;
  232. MSG2    DEFW 0A0DH
  233.     DEFM 'FILE NOT FOUND'
  234.     DEFW 0A0DH
  235.     DEFM '$'
  236. ;
  237. ;
  238. ;DATA STORAGE
  239. ;
  240. OPTS    DEFS 1        ;FLAG
  241. FCB2    DEFS 32    ;SECOND FCB
  242. BUFFER    DEFW BUFF    ;POINTS TO STORAGE
  243. BUFF    DEFS 1024    ;LOTS OF SPACE
  244. ;
  245. ;
  246. ;EQUATES
  247. FCB    EQU 5CH
  248. DBUFF    EQU 80H
  249. DOS    EQU 5        ;DOS CALL
  250.     END
  251.