home *** CD-ROM | disk | FTP | other *** search
- ;************************************
- ;* *
- ;* QUICK TYPE II *
- ;* VERSION (see below) *
- ;* A TYPEWRITER UTILITY *
- ;* BY ROGER GAGNON 04/01/85 *
- ;* LANSING TECHNICAL DOWNLOAD *
- ;* (517) 694-8650 (RB) *
- ;* *
- ;************************************
- ;
- PREFIX EQU '1' ;major version number
- SUFFIX EQU '1' ;minor revision number
- ;
- ; v 1.1 4/18/84 Added NEC-8023A codes and slightly
- ; modified some comments to make it easier for other
- ; adaptations. Changed max line length from 80 to 136
- ; to allow smaller type sizes to be used to their full
- ; extent. Robert J. Sandel
- ;
- ;
- ; THIS PROGRAM ENABLES THE CONSOLE TO OPERATE AS A DIRECT
- ; OUTPUT TYPEWRITER. LINES CAN BE EDITED BEFORE PRINTING.
- ; PRINTER SETUP CODES CAN ALSO BE PASSED BY SIMPLY TYPING
- ; THE CONTROL KEYS AT THE KEYBOARD AND PRESSING RETURN. A
- ; HANDY UTILITY FOR NOTES, ENVELOPES, AND LABELS.
- ;
- ORG 100H
- JMP PROGRAM
- ;
- ; **** GENERAL EQUATES ****
- ;
- maxbuf equ 136 ;was originally 80
- BDOS EQU 05H ;STANDARD CALL TO OPERATING SYSTEM
- INSTR EQU 0AH ;READ CONSOLE BUFFER
- OUTSTR EQU 09H ;PRINT STRING
- OUTCHR EQU 02H ;CONSOLE OUTPUT
- CR EQU 0DH ;ASCII CODE FOR CR
- LF EQU 0AH ;ASCII CODE FOR LF
- TRUE EQU 01H ;VALUE FOR TRUE
- FALSE EQU 00H ;VALUE FOR FALSE
- TEMP DS 1 ;TEMPORARY STORAGE SPACE
- ;
- ; **** PRINTER TAB INITIALIZATION ****
- ;
- ; THE FOLLOWING EQUATES SELECT ANY NECESSARY PRINTER TAB CODES
- ; AND SCREEN MESSAGES. SOME PRINTERS DON'T REQUIRE ANY SPECIAL
- ; CODES. SET PRINTER TO TRUE THEN SET SELECTED PRINTER TO TRUE.
- ; ALSO SET THE POINTER TO THE CORRECT PRINTER MESSAGE IN THE
- ; 'DISPLAY CODES' SECTION.
- ;
- PRINTER EQU TRUE ;SET TO TRUE IF A PRINTER IS SELECTED
- PROWRTR EQU FALSE ;SET TO TRUE FOR C.ITOH PRINTERS
- NEC8023 EQU TRUE ;SET TO TRUE FOR NEC-8023A PRINTER
- GEMINI EQU FALSE ;SET TO TRUE FOR GEMINI 10X PRINTERS
- ;
- ; **** MAIN PROGRAM ****
- ;
- PROGRAM CALL CRLF ;PRINT CARRIAGE RETURN & LINEFEED
- MVI C,OUTSTR ;PUT FUNCTION # IN C REG
- LXI D,MSG1 ;POINTER TO MESSAGE
- CALL BDOS ;PRINT IT!
- CALL CRLF ;PRINT A BLANK LINE ON CONSOLE
- ;
- ; **** ROUTINE TO INSTALL PRINTER TAB CODES ****
- ;
- IF PRINTER
- ;
- LXI H,INITSTR+2 ;SET UP HL PAIR AND B
- LDA INITSTR+1 ;GET LENGTH OF SET UP STRING
- MOV B,A ;GOES IN B
- OVER MVI C,05H ;SEND CHARACTER TO PRINTER
- MOV E,M ;GET CHARACTER FROM BUFFER
- INX H ;INCREMENT POINTER
- PUSH H ;SAVE H REGISTER
- PUSH B ;SAVE B REG.
- CALL BDOS ;DO IT!
- POP B ;RESTORE B
- POP H ;RESTORE H
- DCR B ;CHECK IF DONE. DECREMENT COUNT
- JNZ OVER ;NOT DONE, GET ANOTHER CHARACTER
- JMP GETCHR ;GET ON WITH THE PROGRAM
- ;
- ENDIF
- ;
- ;
- IF PROWRTR
- ;
- INITSTR DB 42,39,27,40,48,48,56,',',48,49,54,',',48,50,52,','
- DB 48,51,50,',',48,52,48,',',48,52,56,',',48,53,54,','
- DB 48,54,52,',',48,55,50,'.',CR
- ;
- ENDIF
- ;
- ;
- IF NEC8023
- ;
- INITSTR DB INEND-$-1 ;max number of bytes in string
- DB INEND-$ ;actual number of bytes
- DB 11H ;select code
- DB 1BH,5BH,1BH,'E' ;incremental and Elite
- ;:::Tab settings below:::
- DB 27,40, 48,48,56,',',48,49,54,',',48,50,52,','
- DB 48,51,50,',',48,52,48,',',48,52,56,',',48,53,54,','
- DB 48,54,52,',',48,55,50,',',48,56,48,',',48,56,56,','
- DB 48,57,54,',',49,48,52,',',49,49,50,',',49,50,48,','
- DB 49,50,56,'.'
- INEND DB CR
-
- ;
- ENDIF
- ;
- IF GEMINI
- ;
- INITSTR DB 0,0,0,0,0,0 ;ECT........
- ;
- ENDIF
- ;
- ; **** INPUT AND RESPONSE LOOP ****
- ;
- GETCHR MVI A,maxbuf ;SET MAX BUFFER LENGTH TO xx COLUMNS
- STA INBUF ;STICK IT IN BUFFER
- MVI A,CR ;SEED BUFFER WITH A CARRIAGE RETURN
- STA INBUF+2
- MVI A,00H ;INITIALIZE STORAGE AREA
- STA TEMP
- MVI C,INSTR ;CALL READ CONSOLE BUFFER
- LXI D,INBUF ;BUFFER ADDRESS
- CALL BDOS
- ;
- ; **** CHECK IF INPUT IS A SPECIAL COMMAND CODE ****
- ;
- LXI H,INBUF+2 ;GET THE INPUT CHARACTER ADDRESS
- MOV A,M ;MOVE IT INTO A REG
- CPI 0DH ;IS IT A CARRIAGE RETURN?
- JZ NEWLINE ;DO A LINEFEED
- CPI 3FH ;IS IT A QUESTION MARK?
- JZ HELP ;PRINT HELP MESSAGE
- CPI 19H ;IS IT FOR CLEAR SCREEN?
- JZ CLRSCRN ;CLEAR THE SCREEN
- CPI 01H ;IS IT FOR RULER LINE?
- JZ RULER ;PRINT RULER
- ;
- IF PRINTER
- ;
- CPI 1AH ;IS IT FOR PRINTER CODES DISPLAY?
- JZ CODES ;DISPLAY PRINTER CODES
- ;
- ENDIF
- ;
- CPI 09H ;IS IT A TAB CHARACTER?
- JZ TYPE ;PROCEEDE TO PRINT IF SO
- MVI B,1FH ;IS INPUT A PRINTER CODE?
- ORA B ;MASK FOR CONTROL CODES
- CPI 1FH
- JNZ TYPE ;SKIP IF NOT
- MVI A,01H ;OTHERWISE STORE YES INTO TEMP
- STA TEMP
- ;
- ; **** SEND INPUT STRING TO PRINTER ****
- ;
- TYPE LXI H,INBUF+2 ;SET UP HL PAIR AND B
- LDA INBUF+1 ;NUMBER OF CHARACTERS TYPED
- CPI 00H ;ANYTHING TYPED?
- JZ NEWLINE ;IF NOT, DO A LINEFEED
- MOV B,A ;GOES IN B
- AGAIN MVI C,05H ;SEND CHARACTER TO PRINTER
- MOV E,M ;GET CHARACTER FROM BUFFER
- INX H ;INCREMENT POINTER
- PUSH H ;SAVE H REGISTER
- PUSH B ;SAVE B REG.
- CALL BDOS ;DO IT!
- POP B ;RESTORE B
- POP H ;RESTORE H
- DCR B ;CHECK IF DONE. DECREMENT COUNT
- JNZ AGAIN ;NOT DONE, GET ANOTHER CHARACTER
- LDA TEMP ;WAS IT A PRINTER SETUP STRING?
- CPI 01H ;COMPARE TO YES
- JZ ERALINE ;ERASE INPUT LINE
- NEWLINE MVI C,5 ;DONE. TYPE LINEFEED
- MVI E,LF
- CALL BDOS
- ;
- IF NEC8023
- MVI C,5 ;TYPE CARRIAGE RETURN
- MVI E,CR ;NEC PRINT COMMAND &
- CALL BDOS ;CARRIAGE RETURN
- ENDIF
- ;
- CALL CRLF ;PRINT CR, LF ON CONSOLE
- JMP GETCHR ;GO ANOTHER ROUND
- ;
- ; **** PRINT CHARACTERS TO CONSOLE ****
- ;
- PUTCHR MVI C,OUTCHR ;BDOS FUNCTION #2
- MOV E,A ;MOVE CHAR. TO E REG
- CALL BDOS ;PRINT IT
- RET
- ;
- ; **** CARRIAGE RETURN AND LINEFEED TO CONSOLE ****
- ;
- CRLF MVI A,CR
- CALL PUTCHR
- MVI A,LF
- CALL PUTCHR
- RET
- ;
- ; **** DISPLAY HELP MESSAGE ****
- ;
- HELP MVI C,OUTSTR ;PUT FUNCTION # IN C REG
- LXI D,MSG2 ;POINTER TO HELP MESSAGE
- CALL BDOS ;PRINT IT!
- CALL CRLF ;PRINT A BLANK LINE ON CONSOLE
- JMP GETCHR ;BACK TO INPUT LOOP
- ;
- ; **** DISPLAY PRINTER CODES ****
- ;
- IF PRINTER
- ;
- CODES MVI C,OUTSTR ;PUT FUNCTION # IN C REG
- LXI D,PWRT ;**** SET TO CORRECT PRINTER MESSAGE ****
- CALL BDOS ;PRINT IT!
- JMP GETCHR ;BACK TO INPUT LOOP
- ;
- ENDIF
- ;
- ; **** DISPLAY RULER LINE ON CONSOLE ****
- ;
- RULER MVI C,OUTSTR ;PUT FUNCTION # IN C REG
- LXI D,MSG5 ;POINTER TO RULER
- CALL BDOS ;PRINT IT!
- JMP GETCHR ;BACK TO INPUT LOOP
- ;
- ; **** PRINT A BLANK LINE ON CONSOLE ****
- ;
- ERALINE MVI C,OUTSTR ;PUT FUNCTION # IN C REG
- LXI D,MSG6 ;POINTER TO BLANK LINE
- CALL BDOS ;DO IT!
- JMP GETCHR ;BACK TO DOIN' IT
- ;
- ; **** CLEAR SCREEN SEQUENCE ****
- ;
- CLRSCRN MVI C,OUTSTR ;PUT FUNCTION # IN C REG
- LXI D,MSG3 ;POINTER TO CLEAR SCREEN
- CALL BDOS ;DO IT!
- JMP GETCHR ;BACK TO DOIN' IT
- ;
- ; **** MESSAGES ****
- ;
- ; SIGN ON MESSAGE
- ;
- MSG1 DB 'Quick Type II Version ',prefix,'.',suffix,CR,LF
- DB 'Use CTL-C to exit, ? for HELP',CR,LF
- DB '$'
- ;
- ; HELP MESSAGE
- ;
- MSG2 DB CR,LF,LF,LF,LF,LF
- DB ' Quick Type II',CR,LF
- DB ' Version ',prefix,'.',suffix
- DB CR,LF,LF,LF
- DB ' This program allows the use of the console',CR,LF
- DB 'as a direct output typewriter. Lines are typed',CR,LF
- DB 'after each <RETURN>. Input line length is 136',CR,LF
- DB 'characters maximum.',CR,LF
- DB LF,LF
- DB 'Command Keys:'
- DB CR,LF,LF
- DB ' Ctrl - A Display ruler line',CR,LF
- DB ' Ctrl - C Exit to CP/M',CR,LF
- DB ' Ctrl - H <BS> Backspace one character',CR,LF
- DB ' Ctrl - I <TAB> Tab 8 spaces',CR,LF
- DB ' Ctrl - X Erase line and start over',CR,LF
- DB ' Ctrl - Y Clear screen',CR,LF
- ;
- IF PRINTER
- ;
- DB ' Ctrl - Z Display printer setup codes',CR,LF
- ;
- ENDIF
- ;
- DB ' ? Display this help',CR,LF,LF,LF
- DB '$'
- ;
- MSG3 DB LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF
- DB LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF ;good for 25 l.
- DB '$'
- ;
- ; RULER LINE DISPLAY
- ;
- MSG5 DB ' ------^-1-----^---2---^-----3-^-------^'
- DB '-------^-5-----^---6---^-----7-^-------^'
- DB '-------^-9-----^---A---^-----B-^-------^-------^-D------'
- DB CR,LF
- DB '$'
- ;
- ; BLANK LINE
- ;
- MSG6 DB CR,' ',CR,'$'
- ;
- ; PROWRITER CONTROL CODE DISPLAY MESSAGE
- ;
- IF PROWRTR
- ;
- PWRT DB 'Prowriter control codes: '
- DB ' - Quick Type II - vers. ',prefix,'.',suffix
- DB CR,LF,LF
- DB ' ESC - N Pica (10 / inch)',CR,LF
- DB ' ESC - E Elite (12 / inch)',CR,LF
- DB ' ESC - p Pica Proportional',CR,LF
- DB ' ESC - P Elite Proportional',CR,LF
- DB ' ESC - n Extended (9 / inch)',CR,LF
- DB ' ESC - q Condensed (15 / inch)',CR,LF
- DB ' ESC - Q Ultracondensed (17 / inch)',CR,LF,LF
- DB ' CTL - N Headline on '
- DB ' ESC - > Left to right printing',CR,LF
- DB ' CTL - O Headline off '
- DB ' ESC - < Bidirectional printing',CR,LF,LF
- DB ' ESC - ! Boldface on '
- DB ' ESC - f Forward linefeed',CR,LF
- DB ' ESC - " Boldface off '
- DB ' ESC - r Reverse linefeed',CR,LF,LF
- DB ' ESC - X Underline on '
- DB ' ESC - A 6 Lines / inch',CR,LF
- DB ' ESC - Y Underline off '
- DB ' ESC - B 8 Lines / inch',CR,LF
- DB ' '
- DB ' ESC - Tnn (distance = nn/144 inch)',CR,LF
- DB ' ESC - D Slashed Zeros',CR,LF
- DB ' ESC - Z Unslashed Zeros '
- DB ' CTL - L Form Feed',CR,LF,LF
- DB '$'
- ;
- ENDIF
- ;
- ; NEC-8023A CONTROL CODE DISPLAY MESSAGE
- ;
- IF NEC8023
- ;
- PWRT DB CR,LF,LF,LF
- DB 'NEC 8023A control codes: '
- DB ' - Quick Type II - vers. ',prefix,'.',suffix
- DB CR,LF,LF
- DB ' ESC - N Pica (10 / inch)',CR,LF
- DB ' ESC - E Elite (12 / inch)',CR,LF
- DB ' ESC - P Elite Proportional',CR,LF
- DB ' ESC - Q Ultracondensed (17 / inch)',CR,LF,LF
- DB ' CTL - N Headline on '
- DB ' ESC - Lnnn Left Margin Offset ',CR,LF
- DB ' CTL - O Headline off '
- DB ' ESC - 2 Clear(kill) all TABS',CR,LF,LF
- DB ' ESC - ! Boldface on '
- DB ' ESC - f Forward linefeed',CR,LF
- DB ' ESC - " Boldface off '
- DB ' ESC - r Reverse linefeed',CR,LF,LF
- DB ' ESC - X Underline on '
- DB ' ESC - A 6 Lines / inch',CR,LF
- DB ' ESC - Y Underline off '
- DB ' ESC - B 8 Lines / inch',CR,LF
- DB ' '
- DB ' ESC - Tnn (distance = nn/144 inch)',CR,LF
- DB ' CTL - L Form Feed',CR,LF,LF
- DB '$'
- ;
- ENDIF
-
-
- IF GEMINI
- ;
- GEMINI DB 'Gemini control codes: '
- DB ' - Quick Type II - vers. ',prefix,'.',suffix
- DB CR,LF,LF
- DB ' - Pica (10 / inch)',CR,LF
- DB ' - Elite (12 / inch)',CR,LF
- DB ' - Pica Proportional',CR,LF
- DB ' - Elite Proportional',CR,LF
- DB ' - Extended (9 / inch)',CR,LF
- DB ' - Condensed (15 / inch)',CR,LF
- DB ' - Ultracondensed (17 / inch)',CR,LF,LF
- DB ' - Headline on '
- DB ' - Left to right printing',CR,LF
- DB ' - Headline off '
- DB ' - Bidirectional printing',CR,LF,LF
- DB ' - Boldface on '
- DB ' - Forward linefeed',CR,LF
- DB ' - Boldface off '
- DB ' - Reverse linefeed',CR,LF,LF
- DB ' - Underline on '
- DB ' - 6 Lines / inch',CR,LF
- DB ' - Underline off '
- DB ' - 8 Lines / inch',CR,LF
- DB ' '
- DB ' - (distance = nn/144 inch)',CR,LF
- DB ' - Slashed Zeros',CR,LF
- DB ' - Unslashed Zeros '
- DB ' - Form Feed',CR,LF,LF
- DB '$'
- ;
- ENDIF
- ;
- INBUF DS 1 ;CONSOLE BUFFER STORAGE
- ;
- END