home *** CD-ROM | disk | FTP | other *** search
/ The CIA World Factbook 1992 / k3bimage.iso / sel / 09 / 0013 / killdir.asm < prev    next >
Encoding:
Assembly Source File  |  1991-12-02  |  8.3 KB  |  291 lines

  1.                 PAGE    ,132   ; (EPSON CONDENSED MODE)
  2.         TITLE    KILL DIRECTORY
  3.                 SUBTTL    by Amy J. Goebel
  4. ;
  5. CODESEG        SEGMENT PARA PUBLIC 'CODE'
  6.         ASSUME    CS:CODESEG,DS:CODESEG,ES:CODESEG
  7.                 ORG    0100H        ;MAKE THIS A .COM FILE
  8. ;
  9. ENTRPT:         JMP    START        ;JUMP OVER DATA
  10. ;
  11. MYTITLE        DB    0AH,0DH     ;PUT NAME IN PROGRAM
  12.                 DB    'KILLDIR  by Amy J. Goebel'
  13.                 DB      0AH,0DH,'Working......',0AH,0DH
  14.                 DB    '$'
  15. ;
  16. TARGET        DB    11 DUP (' ')    ;DIRECTORY TO ERASE
  17.         DB    32 DUP (0)
  18. SSUBDIR        DB    11 DUP (' ')    ;SUB-SUB DIR TO ERASE
  19.         DB    32 DUP (0)
  20. ;
  21. NONAME        DB    13,10,'Usage:   KILLDIR directory',0AH,0DH
  22.         DB    'Rules:   Change into directory ABOVE target before issuing,',13,10
  23.                 DB      '         and do not use a drive designation (default drive is used)',0AH,0DH,'$'
  24. ERROR        DB    13,10,'Sorry, could not erase specified directory.'
  25.         DB    13,10,'$'
  26. NOCD        DB    0AH,0DH,'ERROR, PROBLEMS CHANGING DIRECTORIES.',0AH,0DH,'$'
  27. DELMSG        DB    0AH,0DH,'ERROR -- CANNOT DELETE FILE.',0AH,0DH,'$'
  28. RWBAD        DB    0AH,0DH,'COULD NOT MAKE FILE R/W TO DELETE.',0AH,0DH,'$'
  29. NOROOT          DB      0AH,0DH,'CANNOT CHANGE TO PREVIOUS DIR.',0AH,0DH,'$'
  30. SUBERR          DB      0AH,0DH,'SUB-SUB DIR PROCESSING TERMINATED.',0AH,0DH,'$'
  31. ;
  32. FOUNDRO         DB      0AH,0AH,0DH,'There are READ ONLY files present. '
  33.                 DB      0DH,0AH,'They may be part of a copy protection scheme.'
  34.                 DB      0DH,0AH,'Do you want me to continue?  (n/y)  ','$'
  35. FOUNDSD         DB      0AH,0DH,0AH,'There are SUB-sub-directories,',0AH,0DH
  36.                 DB      0DH,0AH,'Do you want me to continue?  (n/y)  ','$'
  37. FDTA        DB    21 DUP (0)    ;RESERVED FOR DOS
  38. ATTR        DB    0        ;FILE'S ATTRIBUTE
  39. TD         DB    4 DUP (0)
  40. SIZE        DB    4 DUP (0)
  41. FNAME           DB      13 DUP (' '),0  ;FILE NAME TO DELETE
  42. ROOT            DB      '..',0          ;PREVIOUS DIR NAME
  43. MATNAME        DB    '*.*',0        ;FIND ALL FILES IN DIR
  44. ;
  45. START        PROC     NEAR        ;PROGRAM STARTS HERE
  46.                 CLD            ;DIRECTION = FORWARDS
  47.         MOV    SI,80H        ;POINT TO COMMAND LINE
  48.                 MOV    CL,[SI]        ;GET NUMBER OF CHARACTERS TYPED
  49.                 OR    CL,CL        ;ZERO?
  50.                 JNZ    GETTARGET    ;NO -- GET TARGET DIRECTROY
  51. ;
  52.         LEA    DX,NONAME    ;DISPLAY ERROR MESSAGE
  53. SHOWERR:
  54.                 MOV    AH,9
  55.                 INT    21H
  56.                 MOV    AL,1        ;ERRORLEVEL 1
  57.                 JMP    QUIT        ;EXIT PROGRAM
  58. ;
  59. GETTARGET:     XOR    CH,CH        ;GET COUNT IN CX
  60.         SUB    CL,1        ;FORGET CR
  61.                 MOV    SI,82H        ;READ FROM COMMAND LINE
  62.                 LEA    DI,TARGET    ;WRITE TO TARGET
  63.                 REP    MOVSB
  64. ;
  65. BANNER:                                 ;PRINT NAME
  66.         LEA     DX,MYTITLE
  67.                 MOV     AH,9H
  68.                 INT     21H
  69. CHNGDIR:                ;CHANGE INTO TARGET DIR
  70.         CLC            ;CLEAR CARRY IN CASE ERR
  71.         LEA    DX,TARGET       ;POINT TO NAMED DIR
  72.         MOV    AH,3BH
  73.         INT    21H
  74.         LEA     DX,NOCD        ;ERROR MESSAGE
  75.         JC      SHOWERR        ;ERROR OCCURRED, QUIT
  76. ;
  77. SETDTA:                    ;SET DTA TO FDTA
  78.         LEA    DX,FDTA
  79.         MOV    AH,1AH
  80.         INT    21H
  81. ;
  82. FFFILE:                    ;FIND FIRST FILE
  83.         CLC            ;CLEAR CARRY IN CASE ERR
  84.         LEA    DX,MATNAME      ;FIND *.*
  85.         MOV    AH,4EH
  86.         MOV    CX,07H        ;FILE ATTRIBUTES IN SEARCH
  87.         INT    21H
  88. ;        JC    GOROOT        ;NO FILES, TRY TO DEL DIR
  89. CHKATTR:                ;CHECK ATTRIBUTE FOR R/O
  90.         MOV    AL,[ATTR]
  91.         AND    AL,00000001B    ;01H IS R/O
  92.         CMP    AL,01H
  93.         JZ    READONLY    ;FILE IS R/O
  94. ;
  95. DELFILE:                    ;NOT R/O SO DEL FILE
  96.         CLC            ;CLEAR CARRY IN CASE OF ERR
  97.         LEA    DX,FNAME
  98.         MOV    AH,41H
  99.         INT    21H
  100.         LEA    DX,DELMSG    ;CAN'T DELETE FILE MSG
  101.         JC      SHOWERR        ;SHOW ERROR AND QUIT IF CARRY
  102. ;
  103. GETNEXT:                ;GET NEXT FILE IN DIR
  104.         CLC            ;CLEAR CARRY IN CASE OF ERR
  105.         LEA    DX,FDTA        ;POINT TO INFO FROM FFFILE
  106.         MOV    AH,4FH
  107.         INT    21H
  108.         JC      GOROOT        ;NO NEXT FILES, TRY TO DEL DIR
  109.         JMP    CHKATTR        ;OTHERWISE, CHECK ATTR OF FILE
  110. ;
  111. READONLY:                ;FILE FOUND WAS READ ONLY
  112.         LEA    DX,FOUNDRO    ;DISPLAY R/O MESSAGE
  113.                 MOV    AH,9
  114.                 INT    21H
  115.         MOV    AH,0CH        ;ASK IF CONTINUE
  116.         MOV    AL,01H        ;CHAR INPUT
  117.         INT    21H
  118.         CMP    AL,'Y'        ;CHECK FOR YES, CONTINUE
  119.         JZ    MAKERW        ;CHANGE FILE'S ATTR
  120.         CMP    AL,'y'
  121.         JZ    MAKERW
  122. DONTGO:                    ;DON'T WANT TO CONTINUE
  123.         JMP    QUIT
  124. ;
  125. MAKERW:                    ;MAKE FILE R/W
  126.         CLC            ;CLEAR CARRY FOR ERR
  127.         MOV    AH,43H        ;CHANGE FILE MODE
  128.         LEA    DX,FNAME
  129.         MOV    CX,00        ;MAKE NORMAL
  130.         MOV    AL,01H        ;CHANGE FILE ATTR
  131.         INT    21H
  132.         LEA    DX,RWBAD        ;ERROR MSG
  133.         JC     BAD            ;DIDN'T DO IT
  134.         JMP    DELFILE        ;OKAY, SO DELETE FILE
  135. ;
  136. GOROOT:                    ;DELETED ALL FILES OKAY
  137.         CALL     SUBDIR        ;CHECK FOR SUB-SUB DIRS
  138.                 LEA     DX,SUBERR    ;SUB-SUB DIR ERROR
  139.         JC    BAD        ;PROBLEMS WITH SUB-SUB DIRS
  140.                 CMP    AL,0FFH        ;CHECK AGAIN FOR MORE SUB-SUBS
  141.         JE      GOROOT
  142.         CLC            ;CLEAR CARRY FOR ERR
  143.         MOV    AH,3BH
  144.         LEA    DX,ROOT
  145.         INT    21H
  146.         LEA    DX,NOROOT
  147.         JC    BAD
  148. ;
  149. DELETE:
  150.                CLC                     ;PREPARE IF ERRORS
  151.                LEA    DX,TARGET    ;ERASE DIRECTORY
  152.         MOV    AH,3AH
  153.                 INT    21H
  154.                 JNC    END        ;NO ERRORS SO END
  155.         LEA    DX,ERROR    ;GIVE ERROR MESSAGE
  156. BAD:
  157.                 MOV    AH,9
  158.                 INT    21H
  159.                 MOV    AL,1        ;ERRORLEVEL 1
  160.                 JMP    QUIT
  161.  
  162. END:        XOR    AL,AL        ;RETURN TO DOS
  163. QUIT:        MOV    AH,4CH        ;PROVIDING AN ERRORLEVEL VALUE
  164.         INT    21H
  165. ;
  166. START        ENDP
  167. ;
  168. SUBDIR        PROC    NEAR        ;PROCESS ANY SUB-SUB DIRS
  169. SUBFIRST:                ;FIND FIRST DIR
  170.         CLC            ;CLEAR CARRY IN CASE ERR
  171.         LEA    DX,MATNAME      ;FIND *.*
  172.         MOV    AH,4EH
  173.         MOV    CX,10H        ;DIR ATTRIBUTE IN SEARCH
  174.         INT    21H
  175. ;        JC    CLEND         ;NO DIRS
  176. DOTS:                    ;CHECK FOR . AND ..
  177.         MOV    AL,'.'
  178.         CMP    AL,[FNAME]
  179.         JZ    SUBNEXT
  180. SUBCHGE:                ;GO INTO SUB-SUB DIR
  181.         LEA    DX,FOUNDSD    ;DISPLAY SD MESSAGE
  182.                 MOV    AH,9
  183.                 INT    21H
  184.         MOV    AH,0CH        ;ASK IF CONTINUE
  185.         MOV    AL,01H        ;CHAR INPUT
  186.         INT    21H
  187.         CMP    AL,'Y'        ;CHECK FOR YES, CONTINUE
  188.         JZ     DOIT          ;PROCESS SUB SUB
  189.         CMP    AL,'y'
  190.         JZ     DOIT
  191.                 STC
  192.         JMP    ENDSUB
  193. DOIT:
  194.                 CLD                     ;INC REGS IN MOVE
  195.         MOV    CX,000BH    ;SAVE SUB-SUB NAME
  196.                 LEA    SI,FNAME
  197.         LEA     DI,SSUBDIR
  198.         REP    MOVSB        ;PUT NAME INTO SUBDIR
  199.         CLC            ;CLEAR FOR ERRORS
  200.         MOV    AH,3BH          ;CHANGE DIRS
  201.         LEA     DX,FNAME
  202.             INT    21H
  203.         JC    ENDSUB        ;ERROR IN CHANGING DIRS
  204.         LEA    DX,MATNAME    ;FIND FIRST FILE IN SUB-SUB
  205.         MOV    AH,4EH
  206.         MOV    CX,07H        ;NORMAL FILES, NOT DIRS
  207.         INT    21H
  208.         JC    ENDSUB        ;NO FILES IN SUB-SUB
  209. SUBATTR:                ;CHECK ATTRIBUTE FOR R/O
  210.         MOV    AL,[ATTR]
  211.         AND    AL,00000001B    ;01H IS R/O
  212.         CMP    AL,01H
  213.         JZ    SUBRO       ;FILE IS R/O
  214. ;
  215. SUBDEL:                     ;NOT R/O SO DEL FILE
  216.         CLC            ;CLEAR CARRY IN CASE OF ERR
  217.         LEA    DX,FNAME
  218.         MOV    AH,41H
  219.         INT    21H
  220.         LEA    DX,DELMSG    ;CAN'T DELETE FILE MSG
  221.         JC      ENDSUB         ;SHOW ERROR AND QUIT IF CARRY
  222.         CLC            ;OTHERWISE, LOOK FOR FILES
  223.         LEA    DX,FDTA
  224.         MOV    AH,4FH        ;FIND NEXT FILE
  225.         INT    21H
  226.         JC    SBROOT          ;NO MORE FILES IN SUB-SUB
  227.                 JMP     SUBATTR        ;CHECK FILE FOUND
  228. ;
  229. SUBNEXT:                ;GET NEXT DIR
  230.         CLC            ;CLEAR CARRY IN CASE OF ERR
  231.         LEA    DX,FDTA        ;POINT TO INFO FROM SUBFIRST
  232.         MOV    AH,4FH
  233.         INT    21H
  234.         JC      CLEND         ;NO SUB-SUBS, RET
  235.         JMP    DOTS           ;OTHERWISE, CHECK IF SUB-SUB DIR
  236. ;
  237. SUBRO:                        ;FILE FOUND WAS READ ONLY
  238.         LEA    DX,FOUNDRO    ;DISPLAY R/O MESSAGE
  239.                 MOV    AH,9
  240.                 INT    21H
  241.         MOV    AH,0CH        ;ASK IF CONTINUE
  242.         MOV    AL,01H        ;CHAR INPUT
  243.         INT    21H
  244.         CMP    AL,'Y'        ;CHECK FOR YES, CONTINUE
  245.         JZ    SUBRW         ;CHANGE FILE'S ATTR
  246.         CMP    AL,'y'
  247.         JZ    SUBRW
  248. CLEND:                         ;CLEAR CARRY FOR GOOD RETURN
  249.                 MOV     AL,0AAH
  250.         CLC
  251. ENDSUB:                    ;DON'T WANT TO CONTINUE
  252.         RET
  253. ;
  254. SUBRW:                     ;MAKE FILE R/W
  255.         CLC            ;CLEAR CARRY FOR ERR
  256.         MOV    AH,43H        ;CHANGE FILE MODE
  257.         LEA    DX,FNAME
  258.         MOV    CX,00        ;MAKE NORMAL
  259.         MOV    AL,01H        ;CHANGE FILE ATTR
  260.         INT    21H
  261.         LEA    DX,RWBAD        ;ERROR MSG
  262.         JC     ENDSUB         ;DIDN'T DO IT
  263.         JMP    SUBDEL        ;OKAY, SO DELETE FILE
  264. ;
  265. SBROOT:                    ;DELETED ALL FILES OKAY
  266.         CLC            ;CLEAR CARRY FOR ERR
  267.         MOV    AH,3BH
  268.         LEA    DX,ROOT         ;GO TO PREV DIR
  269.         INT    21H
  270.         LEA    DX,NOROOT
  271.         JC    ENDSUB
  272. ;
  273. DELSUB:
  274.                CLC                     ;PREPARE IF ERRORS
  275.                LEA    DX,SSUBDIR    ;ERASE DIRECTORY
  276.         MOV    AH,3AH
  277.                 INT    21H
  278.                 MOV     AL,0FFH
  279.                 JNC    ENDSUB          ;NO ERRORS RET & GET NEXT SUB-SUB
  280.         LEA    DX,ERROR    ;GIVE ERROR MESSAGE
  281.                 MOV    AH,9
  282.                 INT    21H
  283.                 MOV    AL,1        ;ERRORLEVEL 1
  284. SUBBAD:
  285.                 STC
  286.                 RET
  287.  
  288. SUBDIR        ENDP
  289. CODESEG        ENDS
  290.         END    ENTRPT        ;GO TO START FIRST
  291.