home *** CD-ROM | disk | FTP | other *** search
- ; 6/25/82---THIS PROGRAM, WHICH WAS ADAPTED FROM
- ; THE FMAP(CATALOG) PROGRAM, WILL LIST
- ; YOUR FILE DIRECTORY ON A LABEL SIZED
- ; OUTPUT. IT WAS WRITTEN USING AN EPSON
- ; MX-100. I DON'T KNOW WHETHER OR NOT IT
- ; WILL WORK WITH MX-80 BUT TRY IT. IT USES
- ; EPSON CONTROL CODES SO WOULD PROBABLY HAVE
- ; TO BE MODIFIED FOR OTHER PRINTERS.
- ;
- ; ANY SUGGESTIONS OR COMMENTS SHOULD BE FORWARDED
- ; TO: DENNIS MC FERRAN
- ; 1038 POLK LANE
- ; SAN JOSE, CA 95117
- ; (408-296-6021)
- ;
- ;
- ; TO USE--------
- ; 1) PLACE DISC WITH THIS PROGRAM ON IT IN DRIVE B
- ; 2) TURN ON YOUR PRINTER.
- ; 3) PLACE DISC THAT YOU WOULD LIKE TO LABEL IN DRIVE A:
- ; 4) GET INTO CPM (IF YOU'RE NOT THERE ALREADY).
- ; 5) TYPE B:DIRLABEL
- ; 6) PLACE ANOTHER DISC IN DRIVE A AND REPEAT
- ; AS MANY TIMES AS YOU WOULD LIKE.
- ;
- ; 8/82 Revised by Jim Woolley, FOG Disk Librarian
- ; 4 files/line, " | " between files, unidirectional print
- ; (unidir. print = esc,U,1 may only work with Graftrax)
- ;
- ; 9/82 Revised by Dennis McFerran, FOG, to look for disk
- ; number on USER 15. This was you can ERA *.* without
- ; effecting the disk number. Also if there is room on
- ; the label, the program will now print SPACE LEFT on
- ; the disk and the DATE that you labelled the disk.
- ;
- ;*********EQUATE TABLE - BDOS***********************
- ; *
- RDCHR EQU 1 ;READ CHAR FROM CONSOLE *
- WRCHR EQU 5 ;WRITE CHR TO PRINTER *
- PRINT EQU 9 ;PRINT CONSOLE BUFF *
- RDCON EQU 10 ;READ CONS BUFFER *
- CONST EQU 11 ;CHECK CONS STAT *
- FSRCHF EQU 17 ; " " *
- FSRCHN EQU 18 ; " " *
- FCB EQU 5CH ;FILE CONTROL BLOCK *
- BDOS EQU 5 ; *
- TPATOP EQU 0C700H-1;TOP OF TRANSIENT PROG AREA*
- DATEBUFF EQU TPATOP-16;BEGINNING OF DATE BUFFER *
- ; *
- ;**********EPSON MX-100 PRINTER CODES***************
- ESCAPE EQU 27 ; *
- SPACING EQU 65 ;LINE SPACING *
- CONDON EQU 15 ;CONDENSED PRINTING ON *
- CONDOFF EQU 18 ;CONDENSED PRINTING OFF *
- UNIDIR EQU 'U' ;UNIDIRECTIONAL PRINT *
- FORLEN EQU 67 ;SETS FORM LENGTH *
- FORMFEED EQU 12 ;FORM FEED *
- CR EQU 13 ;CARRIAGE RETURN *
- LF EQU 10 ;LINE FEED *
- ;***************************************************
- ;
- ORG 100H
- START LXI H,0 ;SAVE THE OLD STACK
- DAD SP ;H=STACK
- SHLD STACK ;SAVE IT
- LXI SP,STACK ;GET NEW STACK
- ;RESET SYSTEM
- MVI C,13
- CALL BDOS
- ;SAVE FILE WRITE REQUEST CHAR
- LDA FCB+17
- STA FILESW
- ;DATE REQUEST
- MVI A,'$'
- STA DATEBUFF+10
- MVI A,8
- STA DATEBUFF
- DTE LDA DATEBUFF+8
- CPI '8'
- JZ OKDATE
- LXI D,DATEREQ
- MVI C,PRINT
- CALL BDOS
- MVI C,RDCON
- LXI D,DATEBUFF
- CALL BDOS
- JMP DTE
-
- ;NO FCB SPECIFIED?
- MKBLANK MVI A,' '
- STA DATEBUFF+2
- RET
- OKDATE LDA DATEBUFF+2
- CPI '0'
- CZ MKBLANK
- LXI H,FCB+1
- MOV A,M
- CPI ' '
- JNZ GOTFCB
- ;NO FCB - MAKE FCB ALL '?'
- MVI B,11 ;FN+FT COUNT
- QLOOP MVI M,'?' ;STORE '?' IN FCB
- INX H
- DCR B
- JNZ QLOOP
-
-
- ;LOOK UP THE FCB IN THE DIRECTORY
- GOTFCB MVI C,FSRCHF ;GET 'SEARCH FIRST' FNC
- LXI D,FCB
- CALL BDOS ;READ FIRST
- INR A ;WERE THERE ANY?
- STA TEMP ;SAVE
- CNZ SOME ;GOT SOME - PRT TITLE, CONT
- GOTFCB1 MVI E,15
- MVI C,32
- CALL BDOS
- MVI C,FSRCHF ;GET 'SEARCH FIRST' FNC
- LXI D,FCB
- CALL BDOS ;READ FIRST
- INR A ;WERE THERE ANY?
- STA TEMP ;SAVE
- CNZ SOME1 ;GOT SOME - PRT TITLE, CONT
- LXI D,NONMSG
- MVI C,9
- CALL BDOS
- JMP EXIT1
- SOME1 CALL SOME
- MVI E,00
- MVI C,32
- CALL BDOS
- JMP PRTTL
- ;READ MORE DIRECTORY ENTRIES
- MOREDIR MVI C,FSRCHN ;SEARCH NEXT
- LXI D,FCB
- CALL BDOS ;READ DIR ENTRY
- INR A ;CHECK FOR END (0FFH)
- RZ ;GOTFCB1 ;NO MORE - SORT & PRINT
- ;POINT TO DIRECTORY ENTRY
- SOME DCR A ;UNDO PREV 'INR A'
- ANI 3 ;MAKE MODULUS 4
- ADD A ;MULTIPLY...
- ADD A ;..BY 32 BECAUSE
- ADD A ;..EACH DIRECTORY
- ADD A ;..ENTRY IS 32
- ADD A ;..BYTES LONG
- LXI H,81H ;POINT TO BUFFER
- ;(SKIP TO FN/FT)
- ADD L ;POINT TO ENTRY
- MOV L,A ;SAVE (CAN'T CARRY TO H)
- ;MOVE ENTRY TO TABLE
- XCHG ;ENTRY TO DE
- LHLD NEXTT ;NEXT TABLE ENTRY TO HL
- MVI B,31 ;ENTRY LENGTH
- TMOVE LDAX D ;GET ENTRY CHAR
- MOV M,A ;STORE IN TABLE
- INX D
- INX H
- DCR B ;MORE?
- JNZ TMOVE
- SHLD NEXTT ;SAVE UPDATED TABLE ADDR
- LDA COUNT ;GET PREV COUNT
- INR A
- STA COUNT
- JMP MOREDIR
- ;PRINT TITLE
- PRTTL LXI H,TTL
- CALL WRCON
-
-
-
- ;SORT AND PRINT
- SPRINT LDA COUNT ;INIT THE ORDER TABLE
- LXI H,ORDER
- LXI D,TABLE
- LXI B,31 ;ENTRY LENGTH
- BLDORD MOV M,E ;SAVE LO ORD ADDR
- INX H
- MOV M,D ;SAVE HI ORD ADDR
- INX H
- XCHG ;TABLE ADDR TO HL
- DAD B ;POINT TO NEXT ENTRY
- XCHG
- DCR A ;MORE?
- JNZ BLDORD ;..YES
- LDA COUNT ;GET COUNT
- STA FILCOUNT;SAVE AS # TO PRINT
- STA SCOUNT ;SAVE AS # TO SORT
- DCR A ;ONLY 1 ENTRY?
- JZ DONE ;..YES, SO SKIP SORT
- SORT XRA A ;GET A ZERO
- STA SWITCH ;SHOW NONE SWITCHED
- LDA SCOUNT ;GET COUNT
- DCR A ;USE 1 LESS
- STA TEMP ;SAVE # TO COMPARE
- STA SCOUNT ;SAVE HIGHEST ENTRY
- JZ DONE ;EXIT IF NO MORE
- LXI H,ORDER ;POINT TO ORDER TABLE
- SORTLP CALL COMPR ;COMPARE 2 ENTRIES
- CM SWAP ;SWAP IF NOT IN ORDER
- INX H ;BUMP ORDER
- INX H ;..TABLE POINTER
- LDA TEMP ;GET COUNT
- DCR A
- STA TEMP
- JNZ SORTLP ;CONTINUE
- ;ONE PASS OF SORT DONE
- LDA SWITCH ;ANY SWAPS DONE?
- ORA A
- JNZ SORT
- ;SORT IS ALL DONE - PRINT ENTRIES
- DONE LXI H,ORDER
- SHLD NEXTT
- MVI A,4
- STA PRCOUNT
- ;PRINT AN ENTRY
- ENTRY MVI C,CONST ;CK STATUS OF KB
- CALL BDOS ;ANY KEY PRESSED?
- DCR A
- JZ ABORT ;YES, ABORT
- LHLD NEXTT ;GET ORDER TABLE POINTER
- MOV E,M ;GET LO ADDR
- INX H
- MOV D,M ;GET HI ADDR
- INX H
- SHLD NEXTT ;SAVE UPDATED TABLE POINTER
- XCHG ;TABLE ENTRY TO HL
- MVI B,8 ;FILE NAME LENGTH
- CALL TYPEIT ;TYPE FILENAME
- MVI A,'.'
- CALL TYPE
- MVI B,3 ;GET THE FILETYPE
- CALL TYPEIT
- INX H ;SKIP EXTENT
- INX H ;SKIP
- INX H ;UNUSED
- MOV A,M ;GET REC COUNT
- DCR A ;FUDGE
- RAR ;DIVIDE
- RAR ;..BY 8
- RAR
- ANI 1FH ;DELETE GARBAGE
- INR A ;MAKE RELATIVE TO 1, NOT 0
- MVI B,16 ;SAVE AS MAX # EXTENTS
- MOV A,M ;RELOAD RECORD COUNT
- INX H ;SKIP RECORD COUNT
- EXTLP MOV A,M ;GET EXTENT BYTE
- ORA A ;EMPTY?
- JZ ENDEXT ;..YES
- PUSH PSW
- LDA EXTCOUNT
- INR A
- DAA
- INR A
- DAA
- STA EXTCOUNT
- POP PSW
- INX H ;POINT TO NEXT CHR
- DCR B ;MORE IN EXTENT?
- JZ ENDEXT
- MVI A,0
- CMP M
- JNZ EXTLP ;YES
-
- ENDEXT MVI B,16
- LDA NFILE ;GET # FILES
- INR A ;BUMP
- DAA ;MAKE DECIMAL
- STA NFILE ;SAVE IT BACK
- LDA PRCOUNT
- DCR A
- STA PRCOUNT
- CPI 0
- JZ CLCR
- LXI H,SPACES
- CALL WRCON
- JMP CLCRPLUS
- CLCR CALL CR1 ;END, TYPE C/R
- MVI A,4
- STA PRCOUNT
- ;SEE IF MORE ENTRIES
- CLCRPLUS LDA COUNT
- DCR A
- STA COUNT
- JNZ ENTRY ;YES, MORE
- JMP EXIT
- ;TYPE CHAR IN A
- TYPE PUSH B
- PUSH D
- PUSH H
- MOV E,A
- MVI C,WRCHR
- CALL BDOS
- POP H
- POP D
- POP B
- RET
- WRCON MVI A,24H
- CMP M
- RZ
- MOV A,M
- PUSH H
- CALL TYPE
- POP H
- INX H
- JMP WRCON
- TYPEIT MOV A,M
- CALL TYPE
- INX H
- DCR B
- JNZ TYPEIT
- RET
- SPACE MVI A,' '
- JMP TYPE
- CR1 MVI E,13 ;PRINT
- MVI C,5 ;C/R
- CALL BDOS
- MVI E,10 ;LF
- MVI C,5
- JMP BDOS
- TEMP DS 1 ;SAVE DIR ENTRY
- ;ERROR EXIT
- ERXIT POP D ;GET MSG
- MVI C,PRINT
- JMP CALLB ;PRINT MSG, EXIT
- ;ABORT - READ CHAR ENTERED
- ABORT MVI C,RDCHR
- CALLB CALL BDOS ;DELETE THE CHAR
- ;FALL INTO EXIT
- ;EXIT - ALL DONE , RESTORE STACK
- EXIT LDA FILCOUNT
- CPI 25 ;DID IT PRINT MORE THAN SIX LINES
- JNC EXIT1 ;IF SO DON'T PRINT SPACE MESSAGE
- CPI 24 ;DID IF PRINT 6 FULL LINES
- JZ NOCRLF ;IF SO DON'T DO EXTRA CR/LF
- CPI 21 ;DID IT PRINT MORE THAN FIVE LINES
- JNC NOCRLF2 ;IF SO DON'T DO EXTRA CR/LF
- CPI 20
- JZ NOCRLF2
- CPI 16
- JZ NOCRLF2
- CPI 12
- JZ NOCRLF2
- CPI 8
- JZ NOCRLF2
- CPI 4
- JZ NOCRLF2
- MVI A,CR
- CALL TYPE
- MVI A,LF
- CALL TYPE
- NOCRLF2 MVI A,CR
- CALL TYPE
- MVI A,LF
- CALL TYPE
- NOCRLF LXI H,EXTMSG
- CALL WRCON
- LDA EXTCOUNT
- MOV B,A
- MVI A,92H
- SUB B
- DAA
- CALL XO
- MVI A,'K'
- CALL TYPE
- LXI H,LABDAT
- CALL WRCON
- LXI H,DATEBUFF+2
- CALL WRCON
- EXIT1
- MVI E,00
- MVI C,32
- CALL BDOS
-
- LXI H,RESPRINT
- CALL WRCON
- LHLD STACK ;GET OLD STACK
- SPHL ;MOVE TO STACK
- RET ;..AND RETURN
- RESPRINT DB FORMFEED,CONDOFF,ESCAPE,SPACING,12
- DB ESCAPE,FORLEN,66 ;EPSON CODES
- DB ESCAPE,UNIDIR,0,'$' ;TO RESTORE PRINTER TO NORMAL
- ;COMPARE ROUTINE FOR SORT
-
- COMPR PUSH H ;SAVE TABLE ADDR
- MOV E,M ;LOAD LO
- INX H
- MOV D,M ;LOAD HI
- INX H
- MOV C,M
- INX H
- MOV B,M
- ;BC, DE NOW POINT TO ENTRIES TO BE COMPARED
- XCHG
- CMPLP LDAX B
- CMP M
- INX H
- INX B
- JZ CMPLP
- POP H
- RET ;COND CODE TELLS ALL
- ;SWAP ENTRIES IN THE ORDER TABLE
- SWAP MVI A,1
- STA SWITCH ;SHOW A SWAP WAS MADE
- MOV C,M
- INX H
- PUSH H ;SAVE TABLE ADDR+1
- MOV B,M
- INX H
- MOV E,M
- MOV M,C
- INX H
- MOV D,M
- MOV M,B
- POP H
- MOV M,D
- DCX H ;BACK POINTER TO CORRECT LOC'N
- MOV M,E
- RET
- ;HEX OUTPUT
- XO PUSH PSW ;SAVE CHAR
- RAR
- RAR
- RAR
- RAR
- CALL NIBBL ;PRINT LEFT NIBBLE
- POP PSW ;GET VALUE BACK
- NIBBL ANI 0FH ;ISOLATE NIBBLE
- CPI 10 ;NUMBER?
- JC XNUM ;YES
- ADI 7 ;FUDGE ALPHA HEX
- XNUM ADI '0' ;MAKE PRINTABLE
- JMP TYPE
- DS 30 ;STACK AREA
- STACK DS 2 ;SAVE OLD STACK HERE
- NFILE DB 0 ;NUMBER OF FILES PRINTED
- ;
-
- NEXTT DW TABLE ;NEXT TABLE ENTRY
- EXTCOUNT DB 02
- EXTMSG DB 'Space Left on Disk = $'
- COUNT DB 0 ;ENTRY COUNT
- SCOUNT DB 0 ;# TO SORT
- PRCOUNT DB 0 ;COUNTER FOR ITEMS ON LINE
- FILCOUNT DB 0
- SPACES DB ' | $'
- DATEREQ DB 'Please enter today''s date as mm/dd/yy---->$'
- NONMSG DB CR,LF,'++This program is looking for a file with the name'
- DB CR,LF,' -disknam.###(disk number) in USER 15. This becomes'
- db CR,LF,' the disc reference and will remain on the disc even'
- db CR,LF,' if you ERA *.*.'
- db CR,LF,LF,'Please save your disk number now as follows:'
- db CR,LF,' A> USER 15'
- db CR,LF,' A> SAVE 0 -disknam.### '
- db CR,LF,' this dash--^ is mandatory'
- db CR,LF,' A> USER 0',CR,LF,'$'
- TTL DB ESCAPE,FORLEN,0,1 ;SET PAGE LENGTH AT 1".
- DB ESCAPE,SPACING,8 ;SET LINE SIZE TO 8/72"
- DB ESCAPE,UNIDIR,1 ;SET UNIDIRECTIONAL PRINT.
- DB CONDON,'$' ;SET CONDENSED PRINT.
- LABDAT DB ' Label Date--$'
- SWITCH DB 0 ;SWAP SWITCH FOR SORT
- FILESW DS 1 ;'F' IF WRITING FILE
- BUFAD DW 80H ;OUTPUT ADDR
- MYFCB DB 0,'NAMES SUB',0
- DS 19
- DB 0
- ORDER DS 128 ;ORDER TABLE
- TABLE EQU $ ;READ ENTRIES IN HERE
- END 100H
-
-