home *** CD-ROM | disk | FTP | other *** search
- PAGE ,132 ; (EPSON CONDENSED MODE)
- TITLE KILL DIRECTORY
- SUBTTL by Amy J. Goebel
- ;
- CODESEG SEGMENT PARA PUBLIC 'CODE'
- ASSUME CS:CODESEG,DS:CODESEG,ES:CODESEG
- ORG 0100H ;MAKE THIS A .COM FILE
- ;
- ENTRPT: JMP START ;JUMP OVER DATA
- ;
- MYTITLE DB 0AH,0DH ;PUT NAME IN PROGRAM
- DB 'KILLDIR by Amy J. Goebel'
- DB 0AH,0DH,'Working......',0AH,0DH
- DB '$'
- ;
- TARGET DB 11 DUP (' ') ;DIRECTORY TO ERASE
- DB 32 DUP (0)
- SSUBDIR DB 11 DUP (' ') ;SUB-SUB DIR TO ERASE
- DB 32 DUP (0)
- ;
- NONAME DB 13,10,'Usage: KILLDIR directory',0AH,0DH
- DB 'Rules: Change into directory ABOVE target before issuing,',13,10
- DB ' and do not use a drive designation (default drive is used)',0AH,0DH,'$'
- ERROR DB 13,10,'Sorry, could not erase specified directory.'
- DB 13,10,'$'
- NOCD DB 0AH,0DH,'ERROR, PROBLEMS CHANGING DIRECTORIES.',0AH,0DH,'$'
- DELMSG DB 0AH,0DH,'ERROR -- CANNOT DELETE FILE.',0AH,0DH,'$'
- RWBAD DB 0AH,0DH,'COULD NOT MAKE FILE R/W TO DELETE.',0AH,0DH,'$'
- NOROOT DB 0AH,0DH,'CANNOT CHANGE TO PREVIOUS DIR.',0AH,0DH,'$'
- SUBERR DB 0AH,0DH,'SUB-SUB DIR PROCESSING TERMINATED.',0AH,0DH,'$'
- ;
- FOUNDRO DB 0AH,0AH,0DH,'There are READ ONLY files present. '
- DB 0DH,0AH,'They may be part of a copy protection scheme.'
- DB 0DH,0AH,'Do you want me to continue? (n/y) ','$'
- FOUNDSD DB 0AH,0DH,0AH,'There are SUB-sub-directories,',0AH,0DH
- DB 0DH,0AH,'Do you want me to continue? (n/y) ','$'
- FDTA DB 21 DUP (0) ;RESERVED FOR DOS
- ATTR DB 0 ;FILE'S ATTRIBUTE
- TD DB 4 DUP (0)
- SIZE DB 4 DUP (0)
- FNAME DB 13 DUP (' '),0 ;FILE NAME TO DELETE
- ROOT DB '..',0 ;PREVIOUS DIR NAME
- MATNAME DB '*.*',0 ;FIND ALL FILES IN DIR
- ;
- START PROC NEAR ;PROGRAM STARTS HERE
- CLD ;DIRECTION = FORWARDS
- MOV SI,80H ;POINT TO COMMAND LINE
- MOV CL,[SI] ;GET NUMBER OF CHARACTERS TYPED
- OR CL,CL ;ZERO?
- JNZ GETTARGET ;NO -- GET TARGET DIRECTROY
- ;
- LEA DX,NONAME ;DISPLAY ERROR MESSAGE
- SHOWERR:
- MOV AH,9
- INT 21H
- MOV AL,1 ;ERRORLEVEL 1
- JMP QUIT ;EXIT PROGRAM
- ;
- GETTARGET: XOR CH,CH ;GET COUNT IN CX
- SUB CL,1 ;FORGET CR
- MOV SI,82H ;READ FROM COMMAND LINE
- LEA DI,TARGET ;WRITE TO TARGET
- REP MOVSB
- ;
- BANNER: ;PRINT NAME
- LEA DX,MYTITLE
- MOV AH,9H
- INT 21H
- CHNGDIR: ;CHANGE INTO TARGET DIR
- CLC ;CLEAR CARRY IN CASE ERR
- LEA DX,TARGET ;POINT TO NAMED DIR
- MOV AH,3BH
- INT 21H
- LEA DX,NOCD ;ERROR MESSAGE
- JC SHOWERR ;ERROR OCCURRED, QUIT
- ;
- SETDTA: ;SET DTA TO FDTA
- LEA DX,FDTA
- MOV AH,1AH
- INT 21H
- ;
- FFFILE: ;FIND FIRST FILE
- CLC ;CLEAR CARRY IN CASE ERR
- LEA DX,MATNAME ;FIND *.*
- MOV AH,4EH
- MOV CX,07H ;FILE ATTRIBUTES IN SEARCH
- INT 21H
- ; JC GOROOT ;NO FILES, TRY TO DEL DIR
- CHKATTR: ;CHECK ATTRIBUTE FOR R/O
- MOV AL,[ATTR]
- AND AL,00000001B ;01H IS R/O
- CMP AL,01H
- JZ READONLY ;FILE IS R/O
- ;
- DELFILE: ;NOT R/O SO DEL FILE
- CLC ;CLEAR CARRY IN CASE OF ERR
- LEA DX,FNAME
- MOV AH,41H
- INT 21H
- LEA DX,DELMSG ;CAN'T DELETE FILE MSG
- JC SHOWERR ;SHOW ERROR AND QUIT IF CARRY
- ;
- GETNEXT: ;GET NEXT FILE IN DIR
- CLC ;CLEAR CARRY IN CASE OF ERR
- LEA DX,FDTA ;POINT TO INFO FROM FFFILE
- MOV AH,4FH
- INT 21H
- JC GOROOT ;NO NEXT FILES, TRY TO DEL DIR
- JMP CHKATTR ;OTHERWISE, CHECK ATTR OF FILE
- ;
- READONLY: ;FILE FOUND WAS READ ONLY
- LEA DX,FOUNDRO ;DISPLAY R/O MESSAGE
- MOV AH,9
- INT 21H
- MOV AH,0CH ;ASK IF CONTINUE
- MOV AL,01H ;CHAR INPUT
- INT 21H
- CMP AL,'Y' ;CHECK FOR YES, CONTINUE
- JZ MAKERW ;CHANGE FILE'S ATTR
- CMP AL,'y'
- JZ MAKERW
- DONTGO: ;DON'T WANT TO CONTINUE
- JMP QUIT
- ;
- MAKERW: ;MAKE FILE R/W
- CLC ;CLEAR CARRY FOR ERR
- MOV AH,43H ;CHANGE FILE MODE
- LEA DX,FNAME
- MOV CX,00 ;MAKE NORMAL
- MOV AL,01H ;CHANGE FILE ATTR
- INT 21H
- LEA DX,RWBAD ;ERROR MSG
- JC BAD ;DIDN'T DO IT
- JMP DELFILE ;OKAY, SO DELETE FILE
- ;
- GOROOT: ;DELETED ALL FILES OKAY
- CALL SUBDIR ;CHECK FOR SUB-SUB DIRS
- LEA DX,SUBERR ;SUB-SUB DIR ERROR
- JC BAD ;PROBLEMS WITH SUB-SUB DIRS
- CMP AL,0FFH ;CHECK AGAIN FOR MORE SUB-SUBS
- JE GOROOT
- CLC ;CLEAR CARRY FOR ERR
- MOV AH,3BH
- LEA DX,ROOT
- INT 21H
- LEA DX,NOROOT
- JC BAD
- ;
- DELETE:
- CLC ;PREPARE IF ERRORS
- LEA DX,TARGET ;ERASE DIRECTORY
- MOV AH,3AH
- INT 21H
- JNC END ;NO ERRORS SO END
- LEA DX,ERROR ;GIVE ERROR MESSAGE
- BAD:
- MOV AH,9
- INT 21H
- MOV AL,1 ;ERRORLEVEL 1
- JMP QUIT
-
- END: XOR AL,AL ;RETURN TO DOS
- QUIT: MOV AH,4CH ;PROVIDING AN ERRORLEVEL VALUE
- INT 21H
- ;
- START ENDP
- ;
- SUBDIR PROC NEAR ;PROCESS ANY SUB-SUB DIRS
- SUBFIRST: ;FIND FIRST DIR
- CLC ;CLEAR CARRY IN CASE ERR
- LEA DX,MATNAME ;FIND *.*
- MOV AH,4EH
- MOV CX,10H ;DIR ATTRIBUTE IN SEARCH
- INT 21H
- ; JC CLEND ;NO DIRS
- DOTS: ;CHECK FOR . AND ..
- MOV AL,'.'
- CMP AL,[FNAME]
- JZ SUBNEXT
- SUBCHGE: ;GO INTO SUB-SUB DIR
- LEA DX,FOUNDSD ;DISPLAY SD MESSAGE
- MOV AH,9
- INT 21H
- MOV AH,0CH ;ASK IF CONTINUE
- MOV AL,01H ;CHAR INPUT
- INT 21H
- CMP AL,'Y' ;CHECK FOR YES, CONTINUE
- JZ DOIT ;PROCESS SUB SUB
- CMP AL,'y'
- JZ DOIT
- STC
- JMP ENDSUB
- DOIT:
- CLD ;INC REGS IN MOVE
- MOV CX,000BH ;SAVE SUB-SUB NAME
- LEA SI,FNAME
- LEA DI,SSUBDIR
- REP MOVSB ;PUT NAME INTO SUBDIR
- CLC ;CLEAR FOR ERRORS
- MOV AH,3BH ;CHANGE DIRS
- LEA DX,FNAME
- INT 21H
- JC ENDSUB ;ERROR IN CHANGING DIRS
- LEA DX,MATNAME ;FIND FIRST FILE IN SUB-SUB
- MOV AH,4EH
- MOV CX,07H ;NORMAL FILES, NOT DIRS
- INT 21H
- JC ENDSUB ;NO FILES IN SUB-SUB
- SUBATTR: ;CHECK ATTRIBUTE FOR R/O
- MOV AL,[ATTR]
- AND AL,00000001B ;01H IS R/O
- CMP AL,01H
- JZ SUBRO ;FILE IS R/O
- ;
- SUBDEL: ;NOT R/O SO DEL FILE
- CLC ;CLEAR CARRY IN CASE OF ERR
- LEA DX,FNAME
- MOV AH,41H
- INT 21H
- LEA DX,DELMSG ;CAN'T DELETE FILE MSG
- JC ENDSUB ;SHOW ERROR AND QUIT IF CARRY
- CLC ;OTHERWISE, LOOK FOR FILES
- LEA DX,FDTA
- MOV AH,4FH ;FIND NEXT FILE
- INT 21H
- JC SBROOT ;NO MORE FILES IN SUB-SUB
- JMP SUBATTR ;CHECK FILE FOUND
- ;
- SUBNEXT: ;GET NEXT DIR
- CLC ;CLEAR CARRY IN CASE OF ERR
- LEA DX,FDTA ;POINT TO INFO FROM SUBFIRST
- MOV AH,4FH
- INT 21H
- JC CLEND ;NO SUB-SUBS, RET
- JMP DOTS ;OTHERWISE, CHECK IF SUB-SUB DIR
- ;
- SUBRO: ;FILE FOUND WAS READ ONLY
- LEA DX,FOUNDRO ;DISPLAY R/O MESSAGE
- MOV AH,9
- INT 21H
- MOV AH,0CH ;ASK IF CONTINUE
- MOV AL,01H ;CHAR INPUT
- INT 21H
- CMP AL,'Y' ;CHECK FOR YES, CONTINUE
- JZ SUBRW ;CHANGE FILE'S ATTR
- CMP AL,'y'
- JZ SUBRW
- CLEND: ;CLEAR CARRY FOR GOOD RETURN
- MOV AL,0AAH
- CLC
- ENDSUB: ;DON'T WANT TO CONTINUE
- RET
- ;
- SUBRW: ;MAKE FILE R/W
- CLC ;CLEAR CARRY FOR ERR
- MOV AH,43H ;CHANGE FILE MODE
- LEA DX,FNAME
- MOV CX,00 ;MAKE NORMAL
- MOV AL,01H ;CHANGE FILE ATTR
- INT 21H
- LEA DX,RWBAD ;ERROR MSG
- JC ENDSUB ;DIDN'T DO IT
- JMP SUBDEL ;OKAY, SO DELETE FILE
- ;
- SBROOT: ;DELETED ALL FILES OKAY
- CLC ;CLEAR CARRY FOR ERR
- MOV AH,3BH
- LEA DX,ROOT ;GO TO PREV DIR
- INT 21H
- LEA DX,NOROOT
- JC ENDSUB
- ;
- DELSUB:
- CLC ;PREPARE IF ERRORS
- LEA DX,SSUBDIR ;ERASE DIRECTORY
- MOV AH,3AH
- INT 21H
- MOV AL,0FFH
- JNC ENDSUB ;NO ERRORS RET & GET NEXT SUB-SUB
- LEA DX,ERROR ;GIVE ERROR MESSAGE
- MOV AH,9
- INT 21H
- MOV AL,1 ;ERRORLEVEL 1
- SUBBAD:
- STC
- RET
-
- SUBDIR ENDP
- CODESEG ENDS
- END ENTRPT ;GO TO START FIRST