home *** CD-ROM | disk | FTP | other *** search
/ PC-Blue - MS DOS Public Domain Library / PC-Blue MS-DOS Public Domain Library - NYACC.iso / vol061 / grump.bas < prev    next >
Encoding:
BASIC Source File  |  1987-01-13  |  5.5 KB  |  118 lines

  1. 10 ' ************************************************************
  2. 20 ' ****   GRUMP FOR MX, FX, AND IBM PRINTERS               ****
  3. 30 ' ****       FOR HIGH AND MEDIUM RESOLUTION SCREENS       ****
  4. 40 ' ****         MACHINE LANGUAGE SUBROUTINE                ****
  5. 50 ' ************************************************************
  6. 60 ' THIS PROGRAM PRINTS IBM PC MEDIUM AND HIGH RESOLUTION
  7. 70 ' GRAPHIC SCREENS (SCREEN 1, SCREEN 2) ON EPSONS WITH BIT
  8. 80 ' GRAPHICS MODE AND THE IBM GRAPHIC PRINTER USING A MACHINE
  9. 90 ' LANGUAGE ROUTINE. WORKS WITH BASICA 1.1 AND BASICA 2.0
  10. 100 '
  11. 110 ' PETER BAENZIGER,1215 LANE BLVD., KALAMAZOO, MI 49001
  12. 120 '
  13. 130 '
  14. 140 DEFINT A-Z
  15. 150 GOSUB 4000 '   DETERMINE WHAT SCREEN WE'RE ON
  16. 160 IF SCREENSTAT > 6 OR SCREENSTAT < 4 THEN ERRMSG$ = "SCREEN NOT IN GRAPHICS MODE"
  17. 165 IF SCREENSTAT > 6 OR SCREENSTAT < 4 THEN GOTO 5000
  18. 170 '
  19. 180 GOSUB 4500 '
  20. 190 IF CROSSCHECK <> CHECK THEN ERRMSG$ = "ONE OR MORE OF THE NUMBERS IN THE DATA IS WRONG"
  21. 195 IF CROSSCHECK <> CHECK THEN GOTO 5000
  22. 970 '
  23. 980 'SCREEN RELATED VARIABLES
  24. 990 '
  25. 1000 SCRCOLSIZE = 101
  26. 1010 DIM SCRCOL(SCRCOLSIZE) 'HOLDING ARRAY FOR DATA GOTTEN FROM SCREEN
  27. 1020 SCRLEFT = 0:IF SCREENSTAT = 6 THEN SCRIGHT = 639 ELSE SCRIGHT = 319 ' SCREEN COLUMN NUMBERS
  28. 1030 SCRTOP = 0:SCRBOT = 199 'SCREEN ROW NUMBERS
  29. 1040 '
  30. 1050 ' PRINTER DEPENDENT VARIABLES
  31. 1060 '
  32. 1070 REPS = 2 'HOW MANY TIMES A BYTE SHOULD BE REPEATED IN PRINTING
  33. 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.
  34. 1090 CLEARBITS = 255 '255 MEANS NO BITS NEED CLEARING. TO CLEAR A BIT SUBTRACT ITS VALUE FROM 255.
  35. 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
  36. 1110 NUMDOTS = 8 'HOW MANY DOTS THE PRINTER PRINTS IN ONE PASS
  37. 1120 IF SCREENSTAT = 6 THEN STEPSIZE = NUMDOTS ELSE STEPSIZE = NUMDOTS \ 2
  38. 1130 IF SCREENSTAT = 6 THEN GETWIDTH = 7 ELSE GETWIDTH = 3 'GETWIDTH + 1 DOTS ARE TAKEN OFF THE SCREEN IN ONE PASS
  39. 1140 'REMAINDER, NOT NEEDED FOR 8 BIT PRINTERS
  40. 1150 SHIFT = 0 ' NUMBER OF BIT POSITIONS TO SHIFT TO THE RIGHT. 0 MEANS NO SHIFT
  41. 1160 PRINTROW = 0 ' THIS VARIABLE WILL HOLD THE ADDRESS OF THE PRINTING ROUTINE
  42. 1170 '
  43. 1180 '
  44. 1190 '
  45. 1200 TOGRAPH$ = CHR$(27)+"K"+CHR$(144)+CHR$(1) ' SWITCH TO GRAPHICS AND TELL HOW MANY BYTES WE ARE GOING TO SEND
  46. 1210 TOREG$ = CHR$(27)+"2"+CHR$(27)+"@" ' RESET PRINTER TO NORMAL STATE
  47. 1220 SETCRLF$ = CHR$(27)+"3"+CHR$(24) ' SET GRAPHIC LINEFEED ADVANCE DISTANCE
  48. 1230 CRLF$ = CHR$(13)+CHR$(10) ' ACTUAL GRAPHIC CARRIAGE RETURN/LINEFEED
  49. 1240 LMARGIN$ = SPACE$(6) ' LEFT PAPER MARGIN TO CENTER IMAGE, NOT PRESET
  50. 1970 '
  51. 1980 ' SETTING UP THE PRINTER
  52. 1990 '
  53. 2000 ERRMSG$ = "PRINTER IS NOT RESPONDING":ON ERROR GOTO 5000
  54. 2010 OPEN "LPT1:" AS #1 ' PRINTING IN RANDOM MODE
  55. 2020 WIDTH #1,255 ' KEEP BASIC FROM ADDING CARRIAGE RETURNS EVERY EIGHTY BYTES
  56. 2030 PRINT #1, SETCRLF$; ' SET LINEFEED ADVANCE DISTANCE
  57. 2040 PRINT #1, CRLF$; ' CLEAR BUFFER
  58. 2050 '
  59. 2060 ' HIGH AND MEDIUM RESOLUTION PRINTING
  60. 2070 '
  61. 2080 FOR COL = SCRLEFT TO SCRIGHT STEP STEPSIZE
  62. 2090 GET (COL,SCRTOP)-(COL+GETWIDTH,SCRBOT),SCRCOL
  63. 2100 GOSUB 3000 ' PRINTING ROUTINE
  64. 2110 NEXT COL
  65. 2120 '
  66. 2130 ' SWITCH PRINTER BACK TO REGULAR MODE
  67. 2140 '
  68. 2150 PRINT #1, TOREG$
  69. 2160 END
  70. 2170 '
  71. 2970 '
  72. 2980 'MACHINE LANGUAGE PRINTING SUBROUTINE
  73. 2990 '
  74. 3000 PR(0) = REPS:PR(1) = SPECNUM:PR(2) = CLEARBITS:PR(3) = SETBITS:PR(4) = SHIFT 'TRANSFER PARAMETERS SO PRINTROW CAN GET TO THEM
  75. 3010 PR(5) = VARPTR(SCRCOL(SCRCOLSIZE))+1 ' TRANSFER STARTING ADDRESS OF SCRCOL
  76. 3020 PR(6) = 0 'CLEAR ERROR FLAG
  77. 3030 '
  78. 3040 PRINT #1, LMARGIN$ TOGRAPH$;
  79. 3050 PRINTROW = VARPTR(PR(7)) 'ADDRESS OF MACHINE LANGUAGE ROUTINE
  80. 3060 CALL PRINTROW(PR(0))
  81. 3070 IF PR(6) THEN ERROR 24 ' ERROR 24 IS DEVICE TIMEOUT, TRAPS TO 5000
  82. 3080 PRINT #1, CRLF$;
  83. 3090 RETURN
  84. 3970 '
  85. 3980 ' FIND OUT WHAT SCREEN WE'RE ON
  86. 3990 '
  87. 4000 DEF SEG = 0:SCREENSTAT = PEEK(1024 +73):DEF SEG
  88. 4010 RETURN
  89. 4470 '
  90. 4480 ' LOAD MACHINE LANGUAGE PRINTING ROUTINE
  91. 4490 '
  92. 4500 DIM PR(48) ' ARRAY TO HOLD MACHINE LANGUAGE ROUTINE
  93. 4510 CHECK = 0 ' CHECK VALUE TO CHECK TYPO'S IN ENTERING THE &H'NUMBERS
  94. 4520 FOR N = 7 TO 48 ' PR(0) TO PR(6) HOLD DATA SO START WITH 7
  95. 4530   READ PR(N):CHECK = CHECK XOR PR(N)
  96. 4540 NEXT N
  97. 4550 READ CROSSCHECK ' CHECK AND CROSSCHECK SHOULD BE THE SAME
  98. 4560 RETURN
  99. 4570 '
  100. 4580 ' DATA FOR MACHINE LANGUAGE ROUTINE
  101. 4590 ' ---------------------------------
  102. 4600 ' DATA ON FOLLOWING LINE IS FOR PRINTER THAT PRINTS HIGH BIT UP.  FOR PRINTER THAT PRINT LOW BIT UP, CHANGE TO &HBAFC
  103. 4610 DATA &HBAFD
  104. 4620 ' DATA ON FOLLOWING LINE IS FOR LPT1:.  FOR LPT2: CHANGE IT TO &HOOO1.  FOR LPT3: CHANGE IT TO &H0002
  105. 4630 DATA &H0000
  106. 4640 ' DATA ON THE FOLLOWING FIVE LINES IS THE SAME FOR ALL VERSIONS
  107. 4650 DATA &H8B55,&H8BEC,&H065E,&H778B,&H8A0A,&H084F,&HC8BF,&HAC00,&HE8D2
  108. 4660 DATA &H4722,&H0A04,&H0647,&H22E8,&H0A00,&H75E4,&HF617,&H0247,&H74FF
  109. 4670 DATA &H3A0C,&H0247,&H0775,&H10E8,&H0A00,&H75E4,&H4F05,&HDB75,&HC033
  110. 4680 DATA &H4789,&H5D0C,&H02CA,&H8A00,&H322F,&HCDE4,&HF617,&H29C4,&H0B75
  111. 4690 DATA &HCDFE,&HF375,&HE432,&H00C3
  112. 4700 ' NEXT LINE IS A CROSSCHECK FOR HIGH BIT UP PRINTERS AND LPT1:.  FOR LOW BIT UP PRINTERS ANS LPT1: CHANGE TO &H3453
  113. 4710 DATA &H3452
  114. 4970 '
  115. 4980 ' ERROR MESSAGES
  116. 4990 '
  117. 5000 BEEP:PRINT ERRMSG$:END
  118.