home *** CD-ROM | disk | FTP | other *** search
- 10 ' ************************************************************
- 20 ' **** GRUMP FOR MX, FX, AND IBM PRINTERS ****
- 30 ' **** FOR HIGH AND MEDIUM RESOLUTION SCREENS ****
- 40 ' **** MACHINE LANGUAGE SUBROUTINE ****
- 50 ' ************************************************************
- 60 ' THIS PROGRAM PRINTS IBM PC MEDIUM AND HIGH RESOLUTION
- 70 ' GRAPHIC SCREENS (SCREEN 1, SCREEN 2) ON EPSONS WITH BIT
- 80 ' GRAPHICS MODE AND THE IBM GRAPHIC PRINTER USING A MACHINE
- 90 ' LANGUAGE ROUTINE. WORKS WITH BASICA 1.1 AND BASICA 2.0
- 100 '
- 110 ' PETER BAENZIGER,1215 LANE BLVD., KALAMAZOO, MI 49001
- 120 '
- 130 '
- 140 DEFINT A-Z
- 150 GOSUB 4000 ' DETERMINE WHAT SCREEN WE'RE ON
- 160 IF SCREENSTAT > 6 OR SCREENSTAT < 4 THEN ERRMSG$ = "SCREEN NOT IN GRAPHICS MODE"
- 165 IF SCREENSTAT > 6 OR SCREENSTAT < 4 THEN GOTO 5000
- 170 '
- 180 GOSUB 4500 '
- 190 IF CROSSCHECK <> CHECK THEN ERRMSG$ = "ONE OR MORE OF THE NUMBERS IN THE DATA IS WRONG"
- 195 IF CROSSCHECK <> CHECK THEN GOTO 5000
- 970 '
- 980 'SCREEN RELATED VARIABLES
- 990 '
- 1000 SCRCOLSIZE = 101
- 1010 DIM SCRCOL(SCRCOLSIZE) 'HOLDING ARRAY FOR DATA GOTTEN FROM SCREEN
- 1020 SCRLEFT = 0:IF SCREENSTAT = 6 THEN SCRIGHT = 639 ELSE SCRIGHT = 319 ' SCREEN COLUMN NUMBERS
- 1030 SCRTOP = 0:SCRBOT = 199 'SCREEN ROW NUMBERS
- 1040 '
- 1050 ' PRINTER DEPENDENT VARIABLES
- 1060 '
- 1070 REPS = 2 'HOW MANY TIMES A BYTE SHOULD BE REPEATED IN PRINTING
- 1080 SETBITS = 0 '0 MEANS NO BITS NEED SETTING. TO SET A BIT, SET SETBITS TO THE VALUE OF THE BIT YOU WANT TO SET.
- 1090 CLEARBITS = 255 '255 MEANS NO BITS NEED CLEARING. TO CLEAR A BIT SUBTRACT ITS VALUE FROM 255.
- 1100 SPECNUM = 0 'ANY SPECIAL NUMBER FOR YOUR PRINTER THAT NEEDS PRINTING TWICE, SUCH AS 3 FOR P-SERIES PRINTERS. SPECNUM=0 MEANS NO SPECIAL NUMBERS
- 1110 NUMDOTS = 8 'HOW MANY DOTS THE PRINTER PRINTS IN ONE PASS
- 1120 IF SCREENSTAT = 6 THEN STEPSIZE = NUMDOTS ELSE STEPSIZE = NUMDOTS \ 2
- 1130 IF SCREENSTAT = 6 THEN GETWIDTH = 7 ELSE GETWIDTH = 3 'GETWIDTH + 1 DOTS ARE TAKEN OFF THE SCREEN IN ONE PASS
- 1140 'REMAINDER, NOT NEEDED FOR 8 BIT PRINTERS
- 1150 SHIFT = 0 ' NUMBER OF BIT POSITIONS TO SHIFT TO THE RIGHT. 0 MEANS NO SHIFT
- 1160 PRINTROW = 0 ' THIS VARIABLE WILL HOLD THE ADDRESS OF THE PRINTING ROUTINE
- 1170 '
- 1180 '
- 1190 '
- 1200 TOGRAPH$ = CHR$(27)+"K"+CHR$(144)+CHR$(1) ' SWITCH TO GRAPHICS AND TELL HOW MANY BYTES WE ARE GOING TO SEND
- 1210 TOREG$ = CHR$(27)+"2"+CHR$(27)+"@" ' RESET PRINTER TO NORMAL STATE
- 1220 SETCRLF$ = CHR$(27)+"3"+CHR$(24) ' SET GRAPHIC LINEFEED ADVANCE DISTANCE
- 1230 CRLF$ = CHR$(13)+CHR$(10) ' ACTUAL GRAPHIC CARRIAGE RETURN/LINEFEED
- 1240 LMARGIN$ = SPACE$(6) ' LEFT PAPER MARGIN TO CENTER IMAGE, NOT PRESET
- 1970 '
- 1980 ' SETTING UP THE PRINTER
- 1990 '
- 2000 ERRMSG$ = "PRINTER IS NOT RESPONDING":ON ERROR GOTO 5000
- 2010 OPEN "LPT1:" AS #1 ' PRINTING IN RANDOM MODE
- 2020 WIDTH #1,255 ' KEEP BASIC FROM ADDING CARRIAGE RETURNS EVERY EIGHTY BYTES
- 2030 PRINT #1, SETCRLF$; ' SET LINEFEED ADVANCE DISTANCE
- 2040 PRINT #1, CRLF$; ' CLEAR BUFFER
- 2050 '
- 2060 ' HIGH AND MEDIUM RESOLUTION PRINTING
- 2070 '
- 2080 FOR COL = SCRLEFT TO SCRIGHT STEP STEPSIZE
- 2090 GET (COL,SCRTOP)-(COL+GETWIDTH,SCRBOT),SCRCOL
- 2100 GOSUB 3000 ' PRINTING ROUTINE
- 2110 NEXT COL
- 2120 '
- 2130 ' SWITCH PRINTER BACK TO REGULAR MODE
- 2140 '
- 2150 PRINT #1, TOREG$
- 2160 END
- 2170 '
- 2970 '
- 2980 'MACHINE LANGUAGE PRINTING SUBROUTINE
- 2990 '
- 3000 PR(0) = REPS:PR(1) = SPECNUM:PR(2) = CLEARBITS:PR(3) = SETBITS:PR(4) = SHIFT 'TRANSFER PARAMETERS SO PRINTROW CAN GET TO THEM
- 3010 PR(5) = VARPTR(SCRCOL(SCRCOLSIZE))+1 ' TRANSFER STARTING ADDRESS OF SCRCOL
- 3020 PR(6) = 0 'CLEAR ERROR FLAG
- 3030 '
- 3040 PRINT #1, LMARGIN$ TOGRAPH$;
- 3050 PRINTROW = VARPTR(PR(7)) 'ADDRESS OF MACHINE LANGUAGE ROUTINE
- 3060 CALL PRINTROW(PR(0))
- 3070 IF PR(6) THEN ERROR 24 ' ERROR 24 IS DEVICE TIMEOUT, TRAPS TO 5000
- 3080 PRINT #1, CRLF$;
- 3090 RETURN
- 3970 '
- 3980 ' FIND OUT WHAT SCREEN WE'RE ON
- 3990 '
- 4000 DEF SEG = 0:SCREENSTAT = PEEK(1024 +73):DEF SEG
- 4010 RETURN
- 4470 '
- 4480 ' LOAD MACHINE LANGUAGE PRINTING ROUTINE
- 4490 '
- 4500 DIM PR(48) ' ARRAY TO HOLD MACHINE LANGUAGE ROUTINE
- 4510 CHECK = 0 ' CHECK VALUE TO CHECK TYPO'S IN ENTERING THE &H'NUMBERS
- 4520 FOR N = 7 TO 48 ' PR(0) TO PR(6) HOLD DATA SO START WITH 7
- 4530 READ PR(N):CHECK = CHECK XOR PR(N)
- 4540 NEXT N
- 4550 READ CROSSCHECK ' CHECK AND CROSSCHECK SHOULD BE THE SAME
- 4560 RETURN
- 4570 '
- 4580 ' DATA FOR MACHINE LANGUAGE ROUTINE
- 4590 ' ---------------------------------
- 4600 ' DATA ON FOLLOWING LINE IS FOR PRINTER THAT PRINTS HIGH BIT UP. FOR PRINTER THAT PRINT LOW BIT UP, CHANGE TO &HBAFC
- 4610 DATA &HBAFD
- 4620 ' DATA ON FOLLOWING LINE IS FOR LPT1:. FOR LPT2: CHANGE IT TO &HOOO1. FOR LPT3: CHANGE IT TO &H0002
- 4630 DATA &H0000
- 4640 ' DATA ON THE FOLLOWING FIVE LINES IS THE SAME FOR ALL VERSIONS
- 4650 DATA &H8B55,&H8BEC,&H065E,&H778B,&H8A0A,&H084F,&HC8BF,&HAC00,&HE8D2
- 4660 DATA &H4722,&H0A04,&H0647,&H22E8,&H0A00,&H75E4,&HF617,&H0247,&H74FF
- 4670 DATA &H3A0C,&H0247,&H0775,&H10E8,&H0A00,&H75E4,&H4F05,&HDB75,&HC033
- 4680 DATA &H4789,&H5D0C,&H02CA,&H8A00,&H322F,&HCDE4,&HF617,&H29C4,&H0B75
- 4690 DATA &HCDFE,&HF375,&HE432,&H00C3
- 4700 ' NEXT LINE IS A CROSSCHECK FOR HIGH BIT UP PRINTERS AND LPT1:. FOR LOW BIT UP PRINTERS ANS LPT1: CHANGE TO &H3453
- 4710 DATA &H3452
- 4970 '
- 4980 ' ERROR MESSAGES
- 4990 '
- 5000 BEEP:PRINT ERRMSG$:END
-