home *** CD-ROM | disk | FTP | other *** search
- ;
- ; FILE-EXT.ASM
- ;
- ; Originally named FILES.ASM, and from a disassembly by
- ; "J.A.P" of January 23,1980...FILE-EXT.ASM will display the
- ; selected disk's directory entries in the form:
- ;
- ; Filename.Typ exs1s2rc <-----Group----->
- ; =========================================
- ;
- ; The "hack-job" I did on this one was less than ideal, but
- ; none the less, it get's the job done...the display format is
- ; now alot cleaner, and it does'nt "warm boot" as the
- ; FILES.ASM version did...
- ;
- ; The program will display the disk directory of the logged
- ; on disk, including all the Hexadecimal information on the
- ; groups. If an illegal character is found in the filename or
- ; filetype, it will prompt the operator as to whether to
- ; delete the file (or not). If the operator answers Y (yes),
- ; the program will go on displaying more file information and
- ; stopping when a bad filename or filetype is encountered.
- ; When the display is all done, the files that were selected
- ; for deletion will be removed from the directory.
- ;
- ; On the subject of "hack-job's" of software, read an
- ; interesting article in Psychology Today magazine, "The
- ; Hacker Papers; Computer Addiction: Reflection on a New
- ; Obsession"...August 1980 issue, pages 62-69.
- ;
- ; Best regards,
- ;
- ; Kelly Smith, CP/M-NET (tm)
- ; 805-527-9321 (Modem, 300 Baud)
- ; 805-527-0518 (Verbal)
- ;
-
- ORG 0100H
-
- BDOS EQU 05H
- TBUFF EQU 80H
- ;
- CR EQU 0DH ;ASCII CARRIAGE RETURN
- LF EQU 0AH ;ASCII LINE FEED
- ;
- ;
- FILES: ;
- LXI H,0 ;
- DAD SP ;
- SHLD OLDSTK ;
- LXI SP,NEWSTK ;
- JMP BEGIN ;
- ;
- ;
- ; SYSTEM SUBROUTINES
- ;
- ; PRINT STRING FROM D&E REGS.
- ;
- PRINT: MVI C,9
- CALL BDOS
- RET
- ;
- ; TYPE A CHAR FROM (A)
- ;
- TYPE: ;
- PUSH B
- PUSH D
- PUSH H
- MVI C,2
- MOV E,A
- CALL BDOS ;
- POP H
- POP D
- POP B
- RET
- ;
- ; SEARCH FOR A FILE
- ;
- SEARCH: ;
- PUSH B
- PUSH D
- PUSH H
- MVI C,11H
- LXI D,AFN ;
- CALL BDOS ;
- STA RESULT ;
- POP H
- POP D
- POP B
- RET
- ;
- ; AMBIGUOUS FILENAME.TYP
- ;
- AFN: ;
- DB '?????????????'
- RESULT: ;
- DB 0 ;STORAGE FOR RESULT OF BDOS CALL
- ;
- ; FIND NEXT OCCURRENCE OF FILE
- ;
- NEXTFILE: ;
- PUSH B
- PUSH D
- PUSH H
- MVI C,12H
- LXI D,AFN ;
- CALL BDOS ;
- STA RESULT ;
- POP H
- POP D
- POP B
- RET
- ;
- ; DELETE A FILE
- ;
- DELETE: ;
- PUSH B
- PUSH D
- PUSH H
- MVI C,13H
- CALL BDOS ;
- POP H
- POP D
- POP B
- RET
- ;
- ; GET INPUT FROM CONSOLE
- ;
- CONIN: ;
- PUSH B
- PUSH D
- PUSH H
- MVI C,1
- CALL BDOS ;
- POP H
- POP D
- POP B
- RET
- ;
- ; CONVERT A BYTE IN (A) TO TWO PRINTED CHARACTERS
- ;
- HEXASC: ;
- CPI 0AH
- JC HEXA2 ;
- ADI '7' ;
- CALL TYPE ;
- RET
- HEXA2: ;
- ADI '0' ;
- CALL TYPE ;
- RET
- HEXCON: ;
- PUSH PSW
- RAR
- RAR
- RAR
- RAR
- ANI 0FH
- CALL HEXASC ;
- POP PSW
- ANI 0FH
- CALL HEXASC ;
- RET
- ;
- ; NEWLINE
- ;
- CRLF: ;
- MVI A,CR
- CALL TYPE ;
- MVI A,LF
- CALL TYPE ;
- RET
- ;
- ; PRINT A SPACE
- ;
- SPACE: ;
- MVI A,' ' ;
- CALL TYPE ;
- RET
- ;
- ; MAIN WORK LOOP
- ;
- ; THIS ROUTINE FINDS THE POSITION OF THE FILE
- ; INFORMATION IN THE DIRECTORY DMA, PRINTS THE
- ; DATA IF IT IS A CURRENT FILE, AND PROMPTS THE
- ; OPERATOR FOR INSTRUCTIONS IF THE FILENAME HAS
- ; ILLEGAL (NON-ASCII) DATA IN IT.
- ;
- WORKLOOP: ;
- LDA RESULT ;RESULT HOLDS POSITION OF-
- MOV B,A ; -THE DIRECTORY ENTRY IN THE DIR. DMA
- ANI 3
- RAL
- RAL
- RAL
- RAL
- RAL
- ANI 0E0H
- MOV E,A
- MVI D,0
- LXI H,TBUFF ;
- DAD D ;HL NOW POINTS AT THE FILE INFO
- MOV A,M
- CPI 0E5H ;KILLED FILE?
- RZ ;YES
- MOV A,M
- STA ENTBYT ;
- PUSH H
- PUSH H
- MVI B,8
- INX H
- WORK02: MOV A,M ;PRINT FILE NAME
- CALL ILLCHK ;
- CALL TYPE ;
- DCR B
- INX H
- JNZ WORK02 ;
- MVI B,3
- MVI A,'.'
- CALL TYPE ;PRINT NEXT THREE CHARACTERS AS ASCII
- WORK03: MOV A,M
- CALL ILLCHK ;
- CALL TYPE ;
- DCR B
- INX H
- JNZ WORK03 ;
- CALL TYPE
- CALL SPACE
- MVI B,3
- POP H ;NOW DISPLAY ATTRIBUTES
- LXI D,9
- DAD D
- WORK03A:CALL SPACE
- MOV A,M
- RLC ;TEST $SYS AND $R/O, AND RESERVED
- MVI A,'1'
- JC WORK03B
- MVI A,'0'
- WORK03B:CALL TYPE
- CALL SPACE
- DCR B
- INX H
- JNZ WORK03A
- MVI B,20
- WORK04: MOV A,B
- ANI 3
- CZ SPACE ;
- MOV A,M
- CALL HEXCON ;
- INX H
- DCR B
- JNZ WORK04 ;
- CALL CRLF ;
- POP H
- LDA ENTBYT ;
- ORA A
- RZ
- PUSH H
- LXI H,DELMSG ;
- WORK06: ;
- MOV A,M
- ORA A
- JZ WORK08 ;
- CALL TYPE ;
- INX H
- JMP WORK06 ;
- DELMSG: ;
- DB 'Delete this file ? ',0
- WORK08: ;
- CALL CONIN ;
- POP H
- ANI 5FH
- CPI 'Y' ;
- PUSH PSW
- CALL CRLF ;KEEP IT NEAT
- POP PSW
- RNZ
- XCHG
- LHLD DELPTR ;
- MVI B,10H
- WORK10: ;
- LDAX D
- MOV M,A
- INX H
- INX D
- DCR B
- JNZ WORK10 ;
- SHLD DELPTR ;
- RET
- ;
- ; CHECK FOR NONASCII CHARACTER <20H OR >60H
- ;
- ILLCHK: PUSH PSW
- ANI 07FH ;MASK FOR PROPRIETARY", "$SYS", "$R/W"
- CPI ' ' ;
- JC ILLEGL ;
- CPI 61H
- JNC ILLEGL ;
- POP PSW
- RET
- ILLEGL: POP PSW
- PUSH PSW
- MVI A,0FFH
- STA ENTBYT ;
- POP PSW
- RET
- ;
- ;
- ;
- MSG: DB 'Filename.Typ R/OSysRes exs1s2rc'
- DB ' <--------------Group-------------->'
- DB CR,LF
- DB '==============================='
- DB '===================================='
- DB CR,LF,'$'
- ;
- ;
- ;
- ; ERROR MESSAGES
- ;
- ERROR1: LXI D,ERMSG1;SAY NO GO, AND BAIL OUT
- CALL PRINT
- JMP QUIT
-
- ;
- ERMSG1: DB CR,LF,'Disk select should be " N:"$'
-
- ;
- ERROR2: LXI D,ERMSG2;SAY NO GO, AND BAIL OUT
- CALL PRINT
- JMP QUIT
-
- ERMSG2: DB CR,LF,'Bad delimeter, should be ":"$'
-
- ;
- ERROR3: LXI D,ERMSG3;SAY NO GO, AND BAIL OUT
- CALL PRINT
- JMP QUIT
-
- ERMSG3: DB CR,LF,'No drive specified$'
-
- ;
- ERROR4: LXI D,ERMSG4;SAY NO GO, AND BAIL OUT
- CALL PRINT
- JMP QUIT
-
- ERMSG4: DB CR,LF,'Only drives A to D allowed$'
-
- ;
-
- ; PROGRAM BEGINS HERE
- ;
- BEGIN:
- ;
- ; CHECK FOR DRIVE SPECIFICATION
- ;
- LDA TBUFF ;GET LENGTH OF COMMAND PARAMETERS
- CPI 2 ; IF <2, NO PARAMETERS
- JC MAIN01 ; MUST BE PRESENT LOGGED-IN DRIVE
- JZ ERROR1 ;EXACTLY 2, IS ERROR
- LHLD TBUFF+2 ;AT LEAST 3 THEN...
- MOV A,H ;NEXT CHARACTER SHOULD BE ":"
- CPI ':'
- JNZ ERROR2 ;ONLY ALLOW DRIVE SET
- MOV A,L ;NEXT CHARACTER SHOULD BE DRIVE
- CPI 'A' ;AT A MINIMUM, "A"
- JC ERROR3
- CPI 'E' ;AT A MAXIMUM "D"
- JNC ERROR4
- ANI 7 ;STRIP BITS, FOR 0 TO 3
- DCR A ;BACK OFF FOR 0 TO 3
- MOV E,A ;MAKE DISK NUMBER
- MVI D,0
- MVI C,14 ;BDOS SELECT DISK FUNCTION
- CALL BDOS
-
- MAIN01: LXI D,MSG
- CALL PRINT
- ;
- LXI H,DELFIL ;
- SHLD DELPTR ;
- CALL SEARCH ;
- MAIN02: ;
- LDA RESULT ;
- CPI 0FFH
- JZ MAIN04 ;
- CALL WORKLOOP ;
- CALL NEXTFILE ;
- JMP MAIN02 ;
- MAIN04: ;
- LHLD DELPTR ;
- LXI D,DELFIL
- MOV A,L
- CMP E
- JNZ MAIN06 ;
- MOV A,H
- CMP D
- JZ QUIT ;
- MAIN06: ;
- LXI D,-10H
- DAD D
- SHLD DELPTR ;
- XCHG
- CALL DELETE ;
- JMP MAIN04 ;
- QUIT: ;
- LHLD OLDSTK ;
- SPHL
- RET ;
- ;
- ; SOME STORAGE LOCATIONS
- ;
- OLDSTK: DS 2 ;STORAGE FOR "OLD" STACK POINTER
- DS 32
- NEWSTK EQU $ ;STORAGE FOR "NEW" STACK
- ENTBYT: DS 1 ;
- DELPTR: DS 16 ;
- DELFIL EQU $ ;FILE OF DELETEABLE FILE BUILDS HERE
- ;
- ;
- END
-