; FORMS.SBR ; ; ; ; PROPRIETARY PROGRAM MATERIAL ; ; THIS MATERIAL IS THE PROPERTY OF DALE A. EICHBAUER, ; 692 E. FREELAND ROAD, MERRILL, MICHIGAN, 48637. PERMISSION ; TO COPY & USE IS GRANTED FOR NON-PROFIT USES ONLY. ; ; ; ; ; -----------EITHER 2 OR 3 ARGUMENTS ARE PASSED------------------------- ; ; THE FIRST IS A 1-BYTE STRING CHARACTER INDICATING ; THE PRINTER TYPE -- CURRENTLY "T" FOR TI-810, ; "N" FOR NEC SPINWRITER, "P" FOR THE IDS PRISM ; AND AM-304 (DATAPRODUCTS) FAMILY OF PRINTERS, ; "A" FOR THE AM302, AND "E" FOR THE EPSON MX80 ; ARE ONLY ONES ACCEPTED. ; THE SECOND BYTE IS A 1-BYTE BINARY VALUE INDICATING ; THE NUMBER OF LINES PER PAGE. ; THE THIRD (OPTIONAL) ARGUMENT IS A STRING INTO WHICH ; THE CODES ARE PASSED, IF THE OPTION IS ; SPECIFIED, RATHER THAN DIRECT OUTPUT. ; ; VARIABLE STORAGE AREAS: ; ; 0(A4) -- PRINTER TYPE ADDRESS ; 4(A4) -- FORM LINE COUNT TO SET IN PRINTER ; 10(A4) -- DDB ADDRESS OF FILE # 4(PRINTER) (CHANGE TO SUIT NEEDS) ; 14(A4) -- ADDRESS OF BUFFER IN DDB SEARCH SYS SEARCH SYSSYM AUTOEXTERN OBJNAM FORMS.SBR VMAJOR=2. VMINOR=6. VSUB=0. VEDIT=100. VWHO=1. ; OFFSETS FROM A3 FOR PARAMETERS PASSED FROM BASIC PARMS=0 TYPE.1=2 ADD.1=4 SIZE.1=10 TYPE.2=14 ADD.2=16 SIZE.2=22 TYPE.3=26 ADD.3=30 SIZE.3=34 ; OFFSETS FROM A4 (IMPURE STORAGE) PTR.L=0 ; ADDRESS OF PRINTER TYPE VARIABLE LINES.L=4 ; ADDRESS OF NUMBER OF LINES IN FORM VARIABLE DDB.L=10 ; ADDRESS OF PRINT FILE DDB (IF SPECIFIED) BUFF.L=14 ; ADDRESS OF PRINT FILE DDB BUFFER (IF SPECIFIED) DEFINE XY A,B MOV #^D,D1 TCRT ENDM PHDR -1,PV$RPD,PH$REE!PH$REU BR START ASCII / COPYRIGHT (C) 1983, 1984 DALE A. EICHBAUER / EVEN START: JOBIDX A6 MOV JOBTRM(A6),A2 ORW #33,@A2 ; SET NOECHO, IMAGE MODE, DATA TRANSPARENCY, & ENABLE LOWER CASE MOV ADD.1(A3),PTR.L(A4) ; PRINTER TYPE ADDRESS MOV ADD.2(A3),LINES.L(A4) ; NUMBER OF LINES ADDRESS CMPW PARMS(A3),#2 ; SEE IF ONLY 2 PARAMETERS PASSED BLE FILE ; IF SO, DO FILE OUTPUT CMPW TYPE.3(A3),#2 ; SEE IF STRING OR UNFORMATTED JGT PARMERR ; IF NOT, ABORT MOV ADD.3(A3),BUFF.L(A4) ; GET THE ADDRESS OF THE STRING MOV BUFF.L(A4),A2 ; USE THIS DOWN BELOW MOV SIZE.3(A3),D1 ; GET THE STRING SIZE CMP D1,#132. ; MUST BE 132 LONG AT LEAST JLT PARMERR ; IF BAD, ABORT BR L47004 ; AND GO FILL THE STRING FILE: MOV #4.,D1 ; FILE #4 IS THE PRINTER (CHANGE AS NEEDED) CALL $FLSET ; FIND THE DDB JNE L01570 MOV A2,DDB.L(A4) ; STORE THE DDB ADDRESS MOV D.BUF(A2),BUFF.L(A4) ; STORE THE PRINTER BUFFER ADDRESS TST D.IDX(A2) ; SEE IF ANYTHING ALREADY IN BUFFER BEQ SKIP ; IF NOT, GO AROUND MOV D.IDX(A2),D.SIZ(A2) ; SET BUFFER SIZE TO BYTES LEFT WRITE @A2 ; ELSE PUT IT OUT FIRST JNE FILERR ; IF ERROR, ABORT SKIP: MOV #132.,D.SIZ(A2) ; SET RECORD LENGTH TO 132 CHARS. MOV D.SIZ(A2),D1 ; LOAD BUFFER SIZE FOR COUNTER MOV BUFF.L(A4),A2 ; GET BUFFER STARTING ADDRESS L47004: MOVB #0,(A2)+ ; MOVE IN A NULL SOB D1,L47004 ; & BACK TILL DONE MOV BUFF.L(A4),A2 ; GET BUFFER STARTING ADDRESS AGAIN MOV PTR.L(A4),A1 ; GET THE TYPE CHARACTER CMPB @A1,#'T ; SEE IF "T" BEQ L40001 ; NO FORMFEED IF IT IS CMPB @A1,#'t ; SEE IF "t" BNE L45000 ; GO ON TO NEC CHECK ; TYPE IS TI-810 L40001: MOVB #177,(A2)+ ; CLEAR LINE BUFFER MOVB #33,(A2)+ ; ESCAPE MOVB #62,(A2)+ ; COMMAND # 62 MOV LINES.L(A4),A1 ; POINT TO PAGE LENGTH VALUE MOVB @A1,(A2)+ ; LOAD THE PAGE LENGTH MOVB #15,(A2)+ ; CR JMP ENDIT ; OUTPUT THEM L45000: MOV PTR.L(A4),A1 ; GET THE TYPE CHARACTER CMPB @A1,#'N ; SEE IF "N" BEQ L45001 ; NO FORMFEED IF IT IS CMPB @A1,#'n ; SEE IF "n" BNE PRISM ; NO MATCH, TRY PRISM ; TYPE IS NEC L45001: MOVB #33,(A2)+ ; ESCAPE MOVB #67,(A2)+ ; COMMAND # 7 -- CLEAR ALL TABS & FF LENGTH MOVB #33,(A2)+ ; ESCAPE MOVB #77,(A2)+ ; COMMAND # ? -- INHIBIT PAPER MOVEMENT MOV LINES.L(A4),A1 ; POINT TO PAGE LENGTH VALUE CLR D1 MOVB @A1,D1 ; LOAD THE PAGE LENGTH L45002: MOVB #12,(A2)+ ; PUT OUT LINE FEEDS EQUAL TO PAGE LENGTH SOB D1,L45002 MOVB #33,(A2)+ ; ESCAPE MOVB #100,(A2)+ ; COMMAND # @ -- RESET FORMAT MODE (NORMAL) MOVB #33,(A2)+ ; ONE LAST ESCAPE SEQUENCE MOVB #114,(A2)+ ; COMMAND # L -- SET FORM FEED LENGTH JMP ENDIT PRISM: CMPB @A1,#'P ; SEE IF "P" BEQ PRISM1 ; NO FORMFEED IF IT IS CMPB @A1,#'p ; SEE IF "P" BNE AM302 ; NO MATCH, TRY AM-302 PRISM1: MOVB #33,(A2)+ ; SET UP VERTICAL ADV-1 FIRST MOVB #'B,(A2)+ MOVB #',,(A2)+ ; SEND SEPERATOR MOVB #'8,(A2)+ ; MAKE IT 6 LPI (8 UNITS PER LINE) MOVB #',,(A2)+ ; ANOTHER SEPERATOR MOVB #'$,(A2)+ ; AND TERMINATOR MOVB #15,(A2)+ ; NOW TERMINATE COMMAND WITH CR MOVB #10,(A2)+ ; AND LF MOVB #33,(A2)+ ; ESCAPE MOVB #'L,(A2)+ ; INDICATE FORM LENGTH SEQUENCE MOVB #',,(A2)+ ; SEND COMMA SEPERATOR MOV LINES.L(A4),A1 ; POINT TO PAGE LENGTH VALUE CLR D1 MOVB @A1,D1 ; LOAD THE PAGE LENGTH MUL D1,#10 ; MULTIPLY # LINES BY 8 INCREMENTS PER LINE DCVT 0,10 ; SEND TO BUFFER MOVB #',,(A2)+ ; SEND COMMA SEPERATOR MOV LINES.L(A4),A1 ; POINT TO PAGE LENGTH VALUE CLR D1 MOVB @A1,D1 ; LOAD THE PAGE LENGTH DEC D1 ; MAKE THIS ONE LINE LESS MUL D1,#10 ; MULTIPLY # LINES BY 8 INCREMENTS PER LINE DCVT 0,10 ; SEND TO BUFFER MOVB #',,(A2)+ ; SEND COMMA SEPERATOR MOVB #'$,(A2)+ ; AND THE TERMINATOR MOVB #15,(A2)+ ; CR MOVB #10,(A2)+ ; LF BR ENDIT ; OUTPUT ALL OF THIS AM302: CMPB @A1,#'A ; SEE IF "A" BEQ ALPHA ; IF SO, WE'RE SET CMPB @A1,#'a ; SEE IF "a" BNE MX80 ; IF NO MATCH, TRY EPSON MX80 ; TYPE IS AM-302 ALPHA: MOVB #33,(A2)+ ; ESCAPE MOVB #14,(A2)+ ; FF CHARACTER MOV LINES.L(A4),A1 ; POINT TO PAGE LENGTH VALUE MOVB @A1,(A2)+ ; LOAD THE PAGE LENGTH MOVB #15,(A2)+ ; TERMINATE WITH 'RETURN' BR ENDIT MX80: CMPB @A1,#'E ; SEE IF "E" BEQ EPSON ; IF SO, WE'RE SET CMPB @A1,#'e ; SEE IF "e" BNE BASIC ; IF NO MATCH, BACK TO CALLING PROGRAM ; TYPE IS EPSON MX-80 EPSON: MOVB #33,(A2)+ ; ESCAPE MOVB #'@,(A2)+ ; MASTER RESET CHARACTER MOVB #15,(A2)+ ; TERMINATE WITH 'RETURN' MOVB #33,(A2)+ ; ESCAPE MOVB #'C,(A2)+ ; FORMLENGTH CHARACTER MOV LINES.L(A4),A1 ; POINT TO PAGE LENGTH VALUE MOVB @A1,(A2)+ ; LOAD THE PAGE LENGTH MOVB #15,(A2)+ ; TERMINATE WITH 'RETURN' ; ENDIT: CMPW PARMS(A3),#2 ; SEE IF ONLY 2 PARAMETERS PASSED BGT BASIC ; IF NOT, ALL DONE MOV DDB.L(A4),A2 ; LOAD A2 WITH ADDRESS OF DDB MOV #120,D.SIZ(A2) ; PUT RECORD LENGTH IN DDB MOV #0,D.IDX(A2) ; INDEX IS AT ZERO WRITE @A2 ; OUTPUT RECORD JNE FILERR ; IF ERROR, ABORT BASIC: RTN ; BACK TO BASIC L01570: XY 24,1 XY -1,9 TYPE SLEEP #30000. RTN FILERR: XY 24,1 XY -1,9 TYPE SLEEP #30000. RTN PARMERR: XY 24,1 XY -1,9 TYPE SLEEP #30000. RTN ASCII / COPYRIGHT (C) 1983, 1984 DALE A. EICHBAUER / EVEN END .