home *** CD-ROM | disk | FTP | other *** search
- ; DIR-DUMP.ASM Version 2.2
- ;
- ; as of
- ;
- ; September 23/11/1980
- ;
- ;
- ; Mod for 64 char wide screen 23/11/82 W.Ellis
- ;
- ; Changed are; Spacing between characters.
- ; ; Headings have been abrevated
- ; ; Proprietary bit check was removed
- ;
- ; ; All this was to make it fit on one
- ; ; 64 character line
- ;
- ; ; Bit 7 gets turned off before the filename
- ; ; gets printed
- ;
- ; Name changed from FILE-XT2.ASM after this change
- ;
- ;
- ;==============================================================
- ;
- ;
- ; Renamed from filename FILE-EXT.ASM, to indicate CP/M Version
- ; 2.X only compatibility (display format) only.
- ;
- ; Added: User number display, "proprietary software" display
- ; and removed "ILLCHK" for non-ASCII characters which
- ; then requested deletion of the questionable file.
- ;
- ; Kelly Smith
- ;
- ;
- ; Originally named FILES.ASM, and from a disassembly by
- ; "J.A.P" of January 23,1980...FILE-XT2.ASM will display the
- ; selected disk's directory entries in the form:
- ;
-
- ;Us Filename.Typ RSH ExSfSiRc <-----------Group-------------->'
- ;============================================================='
- ;
- ; Where:
- ;
- ; "Us" is the User assignment for the file.
- ; "Filename" is the ASCII file name.
- ; "Typ" is the ASCII file type.
- ; "R" is the "read only" control bit
- ; "S" is the "system directory" control bit
- ; "R" is the "reserved" (MP/M Ver.1.0) control bit
- ; "Ex" is the "file extension" byte
- ; "Sf" is a CP/M "internal function" byte.
- ; "Si" is a CP/M "internal function" byte
- ; "Rc" is the "record count" byte.
- ; "Group" is the "allocation vector table" for the file.
- ;
- ; 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.
- ;
- ; 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 ;
- MVI C,12 ;GET CP/M VERSION NUMBER
- CALL BDOS
- CPI 20H ;CP/M VERSION 2.0 OR BETTER?
- JNC BEGIN ;IF VERSION O.K., PRESS ON
- LXI D,BADVER;OOPS...BAD VERSION FOR THIS FILE
- CALL PRINT
- JMP QUIT ;QUIT
- ;
- ;
- ; 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
- ;
- ; 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
- CALL HEXCON ;PRINT USER NUMBER
- CALL SPACE
- PUSH H
- PUSH H
- INX H ;POINT TO FIRST CHARACTER IN FILE NAME
-
- MVI B,8
- WORK02: MOV A,M ;PRINT FILE NAME
- ANI 7FH ;AND IT TO TURN OFF BIT 7
- 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
- ANI 7FH ;AND IT TO TURN OFF BIT 7
- 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:MOV A,M
- RLC ;TEST $SYS AND $R/O, AND RESERVED
- MVI A,'1'
- JC WORK03B
- MVI A,'0'
- WORK03B:CALL TYPE
- 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
- RET
- ;
- BADVER: DB 'Sorry, CP/M Version 2.X required$'
-
- MSG: DB 'Us Filename.Typ RSH ExSfSiRc'
- DB ' <--------------Group-------------->'
- DB CR,LF
- DB '============================'
- DB '===================================='
- DB CR,LF,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
- ;
- CALL CRLF
- 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
- CALL SEARCH ;
- MAIN02: ;
- LDA RESULT ;
- CPI 0FFH
- JZ QUIT
- 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
- ;
- ;
- END
-