| View source | |
| # 2022-06-15 - Print Quest | |
| I wanted to print from DOS applications, but i no longer have a | |
| hardware printer. After some tinkering, i came up with the following | |
| solution in FreeDOS. Note that this process does not work in dosbox | |
| nor in dosbox-x. | |
| The first thing i learned is that the most common type of printer for | |
| DOS is Epson Esc/P. See the link below for a detailed reference to | |
| Esc/P printer language. | |
| Esc/P Reference | |
| First, the ingredients for this recipe: | |
| Ghostscript (FreeDOS) (32-bit) | |
| Ladybug LOGO (Simtelnet) | |
| NetPBM (DJGPP) (32-bit) | |
| PRN2FILE (Garbo) | |
| SNARF screen shot utility (32-bit) | |
| EscParse Esc/P to PDF/PS/SVG converter by Nikita Zimin (32-bit) | |
| Filter to fix Epson printer graphics output by NetPBM | |
| I chose to use Ladybug LOGO, which i described in an earlier log | |
| entry: | |
| Ladybug Quest | |
| I unzipped all of the "ingredients" and made sure they were in my | |
| path. | |
| I saved a simple LOGO program called flwrlife.bug: | |
| C:\>cd \ladybug | |
| C:\ladybug>copy con flwrlife.bug | |
| to circle :size :angle | |
| repeat ( 360 / :angle ) [ fd :size rt :angle ] | |
| end | |
| home cs ht rt 90 repeat 6 [ circle 1 1 rt 60 ] | |
| ^Z | |
| Note: Where it shows ^Z, i pressed Ctrl-Z and then Enter. | |
| I ran the snarf screen shot utility, then ran the LOGO program: | |
| C:\ladybug>snarf.exe | |
| C:\ladybug>ladybug.exe | |
| ? load flwrlife.bug | |
| I pressed Alt+S to take a screenshot. | |
| Ladybug flower of life screenshot | |
| I quit LOGO: | |
| ? bye | |
| I converted the screenshot to Esc/P data using NetPBM. By the way, | |
| when i run NetPBM's Epson graphics through a printer emulator, the | |
| graphical output is staggered and incoherent. For this reason i | |
| wrote escpfltr to add a carriage return before each line of graphics | |
| and unstagger them. | |
| C:\ladybug>bmptoppm.exe SNARF000.BMP >flwrlife.pnm | |
| bmptoppm.exe: Windows BMP, 320x200x4 | |
| C:\ladybug>ppmtopgm.exe flwrlife.pnm >flwrlife.pgm | |
| C:\ladybug>pgmtopbm.exe flwrlife.pgm >flwrlife.pbm | |
| C:\ladybug>pnmmerge.exe pnminvert flwrlife.pbm >inverted.pbm | |
| C:\ladybug>pbmmerge.exe pbmtoepson inverted.pbm >inverted.esc | |
| C:\ladybug>escpfltr.com <inverted.esc >flwrlife.esc | |
| I found an old utility named prn2file that captures the print job | |
| being sent to the printer. It works even when there is no printer | |
| attached. I used options to save to C:\print.out using a 64KB | |
| buffer. Note that prn2file does not work in dosbox nor in dosbox-x. | |
| C:\ladybug>prn2file.com /b64 /f C:\print.out | |
| PRN2FILE 1.1 (c) 1987 Ziff Communications Co. | |
| Modifications (c) 1991 Automated Answers | |
| LPT1 Redirected to: C:\print.out | |
| Then i used the COPY command to "print" the screenshot. It is | |
| important to pass the /b option. This uses an ioctl() to set binary | |
| mode. Otherwise, DOS will truncate the print data the first time it | |
| sees a Ctrl-Z (ASCII character 26, SUB). I used prn2file to ensure | |
| that the whole print job was flushed to disk. | |
| C:\ladybug>copy /b flwrlife.esc prn | |
| C:\ladybug>prn2file.com | |
| PRN2FILE 1.1 (c) 1987 Ziff Communications Co. | |
| Modifications (c) 1991 Automated Answers | |
| LPT1 Redirected to: PRN | |
| Then i compared the captured print job data to the original file. | |
| C:\ladybug>comp flwrlife.esc \print.out | |
| Files compare OK. | |
| What can i do with these captured print jobs on DOS? The "escparse" | |
| utility can convert Esc/P to PDF. I could copy the PDF to a thumb | |
| drive and print it from another computer. Because the DOS PDF | |
| viewers don't work well for me, i'll also convert the PDF to JPEG | |
| page images to preview using the links browser. | |
| C:\ladybug>escparse.exe -pdf C:\print.out >flwrlife.pdf | |
| ESCParser utility by Nikita Zimin Jun 15 2022 17:08:37 | |
| Pages total: 2 | |
| Page 2 | |
| C:\ladybug>gs.exe -r72x72 -dGraphicsAlphaBits=4 -dTextAlphaBits=4 | |
| -sDEVICE=jpeg -dJPEGQ=90 -o page-%03d.jpg flwrlife.pdf | |
| GPL Ghostscript 8.71 (2010-02-10) | |
| Copyright (C) 2010 Artifex Software, Inc. All rights reserved. | |
| This software comes with NO WARRANTY: see the file PUBLIC for details. | |
| Processing pages 1 through 2. | |
| Page 1 | |
| Page 2 | |
| C:\ladybug>c:\freedos\net\links\links.exe -g -mode 640x480x64k | |
| page-001.jpg | |
| Screenshot of page image in links browser | |
| Now that was a pretty convoluted process but it has a few advantages. | |
| * This will run on bare metal. It does not require any VM software. | |
| * This generally works with DOS apps that use an Epson printer. | |
| Whew! That's enough for now. | |
| By the way, i have a follow-up article that mentions printing higher | |
| quality PostScript output instead of low-resolution Epson dot-matrix | |
| output. | |
| 2022-05-15 - Print Quest Part 2 | |
| tags: bencollver,retrocomputing,technical | |
| # Tags | |
| bencollver | |
| retrocomputing | |
| technical |