home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / printer / scrndump.bas < prev    next >
BASIC Source File  |  1984-05-08  |  4KB  |  71 lines

  1.  8-May-84 14:53:34-PDT,3953;000000000001
  2. Date: Tue, 8 May 84 16:27:20 EDT
  3. From: "Richard Jeff Lehman"@UMich-MTS.Mailnet
  4. To: info-ibmpc@isib.arpa
  5. Message-ID: <399631@UMich-MTS.Mailnet>
  6.  
  7. To:       John McCluskey@JPL-VLSI.ARPA c/o INFO-IBMPC@USC-ISIB
  8. From:     R. J. Lehman
  9. Subject:  Hercules Graphic Card Screendump
  10.  
  11. (Note:  I'm following crude instructions on how to get a message into
  12. INFO-IBMPC.  Please pass this along as appropriate.  Thanks.)
  13.  
  14.   1.  Hercules sells a package, GRAPH-X (about $50.), which includes the
  15. PCDOS utility, HARDCOPY.COM, to do screendumps.
  16.  
  17.   2.  Since the HARDCOPY screendump is quite small, I wrote the BASIC
  18. program, SCRNDUMP.BAS (appended to this text), which produces a 7 X 10
  19. inch picture on an Epson FX-type printer.  The annotation in the program
  20. should help your friend figure out how to get a graphics dump.  Running
  21. under BASICA, the program is S-L-O-W, but it moves along at the printer's
  22. speed when compiled.  I hope this helps.
  23.  
  24.                     R. J. Lehman
  25.                     University of Michigan
  26.                     Transportation Research Institute
  27.                     2901 Baxter Road
  28.                     Ann Arbor, MI  48109
  29.  
  30.  
  31. (Program follows...)
  32.  
  33. 1 '  Program:  SCRNDUMP
  34. 2 '  Purpose:  Produce full page hard copies of Hercules screen-image files.
  35. 3 '  Author:   Richard Jeff Lehman                                                             407 UMTRI/2901 Baxter Rd.                                                      Ann Arbor, MI  48109
  36. 4 '  Last revised:  1/5/84
  37. 5 '  Notice:   Copyright (C) 1984, R. J. Lehman.  All Rights Reserved.
  38. 6 '  Notice:   Permission is hereby given for non-commercial duplication,                      modification and distribution.
  39. 7 '
  40. 8 '
  41. 10 CLS:KEY OFF:DEFINT A-O:DEFSTR P-U:DIM BS(86,3)
  42. 11 '
  43. 12 '  Array BS is used to hold the starting address of each of the 348 rows
  44. 13 '  which comprise a Hercules screen.
  45. 14 '
  46. 15 '  The following line computes the initial values.
  47. 16 '
  48. 17 FOR I=86 TO 0 STEP -1:FOR J=3 TO 0 STEP -1:BS(I,J)=J*8192+I*90:NEXT J,I
  49. 20 DEF SEG=&HB000:'  Address of Hercules screen 0
  50. 25 WIDTH "lpt1:",255:'  Prepare printer
  51. 30 INPUT"Enter name of screen image file to print: ";FILENAME$
  52. 35 ON ERROR GOTO 1000:'  Don't crash if file not found, etc.
  53. 40 BLOAD FILENAME$,0:'   Load image into Hercules' memory.
  54. 42 ON ERROR GOTO 0:
  55. 45 FOR I=1 TO 3:LPRINT" ":NEXT:'   position paper so image will be centered
  56. 60 SETUP=CHR$(27)+"3"+CHR$(24)+CHR$(27)+"*"+CHR$(6)+CHR$(184)+CHR$(2):'  Epson command line.  Says "space 9 lines/in, and use CRT graphics II print type {90 dots/in}, with (184+2*256 = 696 = 2*348) dots/line."
  57. 70 FOR K=0 TO 89:'  Only 90 steps across the screen because the stuff will be printed in byte-sized chunks.  (90*8=720 columns on the Hercules screen)
  58. 75 LPRINT SETUP;:'  Tell the printer again, every line.
  59. 80 FOR I=86 TO 0 STEP -1:FOR J=3 TO 0 STEP -1:'  Print four rows at a time, from bottom to top
  60. 90 A=BS(I,J)+K:T=CHR$(PEEK(A)):IF T<>CHR$(13) THEN LPRINT T;T; ELSE LPRINT CHR$(15);CHR$(15);:'  Get the contents of screen memory byte, treat it like a character.
  61. 92 '  If the character is <CR> (CHR$(13)), fudge it and print something that will look OK, because the IBMPC burps an extra <LF> (CHR$(10)) when printing a <CR>, and that can louse up a perfectly decent looking picture,
  62. 93 '   because the Epson can't tell a <LF> meant as line feed from one meant as data when it's printing a picture.  (It took me quite a while to figure this out.)
  63. 95 NEXT J,I:LPRINT:NEXT K:'  End of loops, print WITH <CR> to end the line.
  64. 100 LPRINT CHR$(27);"2";:'   Put Epson back in standard text mode.
  65. 110 FOR I=1 TO 3:LPRINT" ":NEXT:'   Go to top of next page.
  66. 120 CLS:PRINT:INPUT"Print another file? ";SN:SN=LEFT$(SN,1):IF SN="y" OR SN="Y" THEN 30:'   Do it all again, if desired.
  67. 130 END:'   Or not.  As you wish.
  68. 1000 CLS:PRINT"I/O Error #:";ERR;".  Try again":RESUME 30:'  Disk error message
  69.  
  70. (Program ends.)
  71.