| 1 |
## Simple Spooler 0.3 ## |
| 2 |
Copyright (c) 2026, Ken McLeod. |
| 3 |
|
| 4 |
This application acts as a virtual printer on an AppleTalk network, receiving |
| 5 |
print jobs using PAP (Printer Access Protocol) and spooling them to files. It |
| 6 |
can either print immediately or at a later scheduled time, sending the print |
| 7 |
job to a locally-connected ImageWriter printer which would otherwise not be |
| 8 |
visible on the network. |
| 9 |
|
| 10 |
Simple Spooler is freeware. You may use and distribute the software at no |
| 11 |
charge. See the LICENSE file for conditions on your use of the source code. |
| 12 |
|
| 13 |
|
| 14 |
**System requirements** |
| 15 |
|
| 16 |
System 6.0 or later (up to Mac OS 9.2.2) is currently required to run Simple |
| 17 |
Spooler. This software has been tested on System 6.0.5, 7.0.1, and 7.5.3, as |
| 18 |
well as Mac OS 8.6 and 9.2.2. |
| 19 |
|
| 20 |
AppleTalk must be set to Active in the Chooser. You should have enough free |
| 21 |
disk space on your startup disk to accomodate the print jobs you expect to |
| 22 |
receive. ImageWriter spool files occupy less space than LaserWriter spool |
| 23 |
files, but all can add up if they are not being processed immediately. |
| 24 |
|
| 25 |
|
| 26 |
**Starting the spooler** |
| 27 |
|
| 28 |
After opening the application, select "Start Spooler" from the Control menu. |
| 29 |
A dialog will present the following options: |
| 30 |
|
| 31 |
* Printer name |
| 32 |
Type a name for the print spooler, which you can think of as a virtual |
| 33 |
printer. This name will appear on the network and can be selected by other |
| 34 |
users as an AppleTalk printer in the Chooser. |
| 35 |
|
| 36 |
* Auto-run at launch |
| 37 |
Select this checkbox if you want the spooler to run automatically when the |
| 38 |
application opens, rather than needing to manually click Start. This allows |
| 39 |
for unattended server operation, e.g. by placing an alias to Simple Spooler |
| 40 |
in your Startup Items folder on System 7.0 or later. |
| 41 |
|
| 42 |
* Virtual printer type |
| 43 |
Select one of the icons representing LaserWriter, ImageWriter LQ, or |
| 44 |
ImageWriter to create a virtual printer of that type. For an ImageWriter or |
| 45 |
LQ, you can additionally select whether the printer is seen as having a |
| 46 |
color ribbon or a sheet feeder. The "IW1 compatibility" checkbox improves |
| 47 |
compatibility with the original ImageWriter by removing newer printer |
| 48 |
control codes that only the ImageWriter II understands. The "Skip Reverse |
| 49 |
Feeds" checkbox strips control codes that would cause your printer to roll |
| 50 |
the paper backwards; selecting this can prevent misprints and paper jams. |
| 51 |
|
| 52 |
* Print to this port |
| 53 |
Select the icon for the local serial port where your ImageWriter printer |
| 54 |
is connected. If the Enabled checkbox is selected, spooled print jobs will |
| 55 |
automatically be printed to this port once they have been received, as long |
| 56 |
as the current time is within the scheduled printing hours. The default |
| 57 |
setting is 12 AM - 12 AM (or 0 - 24), an unrestricted span of 24 hours |
| 58 |
starting at midnight. |
| 59 |
|
| 60 |
You can restrict printer use by using the up/down arrow control to change the |
| 61 |
start and end times; for example, you may only want printing to occur during |
| 62 |
business hours and not at night. If the spooler receives a print job outside |
| 63 |
the specified hours, it will be printed later once the start hour is reached. |
| 64 |
Uncheck the Enabled box if you don't have a local printer connected, or if you |
| 65 |
just want to hold all jobs for printing at a later date. |
| 66 |
|
| 67 |
Click Start to begin running the spooler. This registers the printer name you |
| 68 |
provided on the AppleTalk network, listens for incoming print jobs, and |
| 69 |
prepares to print any previously spooled jobs in its spool folder. |
| 70 |
|
| 71 |
|
| 72 |
**Stopping the spooler** |
| 73 |
|
| 74 |
The spooler can be stopped by selecting "Stop Spooler" from the Control menu, |
| 75 |
or by quitting the application. |
| 76 |
|
| 77 |
|
| 78 |
**Printing to the spooler** |
| 79 |
|
| 80 |
On a Mac connected to your AppleTalk network, open Chooser and select the |
| 81 |
printer driver for the printer type being emulated. For example, if Simple |
| 82 |
Spooler is emulating an AppleTalk ImageWriter, then select the "AppleTalk |
| 83 |
ImageWriter" icon in Chooser. You should see the spooler appear as a printer |
| 84 |
in the list. After selecting it and closing the Chooser window, you should be |
| 85 |
able to print to the spooler from any application. |
| 86 |
|
| 87 |
|
| 88 |
**About the log** |
| 89 |
|
| 90 |
Simple Spooler displays a single window with a log of its activity. This log is |
| 91 |
entirely in memory, and does not persist when the application quits. To avoid |
| 92 |
running out of memory, the earliest entries are deleted periodically as new |
| 93 |
ones are added to the end. |
| 94 |
|
| 95 |
By default, messages are logged when the spooler starts up or stops, when |
| 96 |
incoming connections are handled, when spooled jobs are printed, or if an error |
| 97 |
occurs. However, more details can be enabled to aid in debugging. There are four |
| 98 |
log levels, each printing its own messages as well as those of the levels below |
| 99 |
it. Level 0 is the default. At level 1, internal activity and warnings are |
| 100 |
logged. At level 2, all protocol messages are displayed, and at the maximum |
| 101 |
level 3, additional debug data is logged. |
| 102 |
|
| 103 |
Because changing the log level to 2 or higher will greatly diminish server |
| 104 |
performance, and the extra information is intended for development purposes |
| 105 |
only, there is no menu item for this hidden feature. Press the command-shift-L |
| 106 |
key combination to increase the log level by 1. After reaching 3, the log |
| 107 |
level will reset to 0 again. The spooler should normally be run only at the |
| 108 |
default log level 0. |
| 109 |
|
| 110 |
Pressing the command-shift-S key combination will output the server's current |
| 111 |
status to the log. Alternatively, select Print Status from the Control menu. |
| 112 |
|
| 113 |
|
| 114 |
**About the print queue** |
| 115 |
|
| 116 |
The first time Simple Spooler is run, it will create a spool folder (named |
| 117 |
Simple Spooler) in the Preferences folder within the System Folder, or in the |
| 118 |
System Folder itself if prior to System 7.0. Print jobs are saved as temporary |
| 119 |
files in the spool folder. Their file names start with a prefix that depends on |
| 120 |
the printer type selected: IW for ImageWriter, LQ for ImageWriter LQ, and LW for |
| 121 |
LaserWriter. When the spooler is running, it checks periodically for files in |
| 122 |
this folder which have the file type 'pjob', whose names start with the current |
| 123 |
prefix and a hyphen, and do not end in a .ps extension. For example, a file |
| 124 |
named "IW-12345" will be printed, but not "IWEm" or "IW12345" or "IW-12345.ps". |
| 125 |
|
| 126 |
Spool files are processed in the order they were added to the folder. If the |
| 127 |
Enabled checkbox was selected and printing is currently enabled, the file is |
| 128 |
sent to the selected serial port. Once all bytes in the spool file have been |
| 129 |
sent to that port without an error, that job is considered complete and the file |
| 130 |
is deleted. |
| 131 |
|
| 132 |
|
| 133 |
**About LaserWriter spooling** |
| 134 |
|
| 135 |
This application was primarily designed to emulate an ImageWriter printer, but |
| 136 |
it can also create a virtual LaserWriter which spools its print jobs to |
| 137 |
PostScript files. This feature is somewhat redundant, as you could just select |
| 138 |
"print to file" in the LaserWriter print dialog to obtain the same result. An |
| 139 |
ImageWriter cannot render PostScript code, but older LaserWriter models with a |
| 140 |
serial port connection can theoretically be used to print spooled files; this |
| 141 |
has not been tested. |
| 142 |
|
| 143 |
Note: you can use software such as Ghostscript, Adobe Illustrator, or even |
| 144 |
Preview.app (on older versions of Mac OS X) to view PostScript files, or convert |
| 145 |
them to another format for viewing on a modern computer. |
| 146 |
|
| 147 |
|
| 148 |
**Generating PostScript output from ImageWriter print jobs** |
| 149 |
|
| 150 |
If you would like to have print jobs for an ImageWriter automatically generate |
| 151 |
PostScript output files, simply copy the "IWEm" file from this distribution into |
| 152 |
the spool folder. "IWEm" (ImageWriter Emulator) is PostScript code from Apple |
| 153 |
that can interpret ImageWriter print sequences. When a print job is received |
| 154 |
successfully, and the file "IWEm" is found in the spool folder, a second file |
| 155 |
with a .ps extension will also be created and appear in the folder. This .ps |
| 156 |
file can be viewed in applications which support PostScript. |
| 157 |
|
| 158 |
Note: IWEm is not compatible with color printing, or with the ImageWriter LQ's |
| 159 |
Best and Faster modes. A better option for converting ImageWriter spool files |
| 160 |
into a format that can be viewed on a modern computer is the 'imagewriter' |
| 161 |
command line tool, available from <https://github.com/greg-kennedy/ImageWriter>. |
| 162 |
|
| 163 |
|
| 164 |
**Using Simple Spooler in a Mac emulator** |
| 165 |
|
| 166 |
If you don't want to keep a real Mac and ImageWriter turned on for hours, you |
| 167 |
can run Simple Spooler in a virtual Mac with emulation software such as QEMU, |
| 168 |
Mini vMac, or Snow that supports AppleTalk networking. Be aware that printing to |
| 169 |
a serial port where nothing is actually connected sends those bytes to nowhere. |
| 170 |
You may want to uncheck the Enabled box for printing to a serial port when |
| 171 |
running Simple Spooler in an emulator, and instead copy the spool files over to |
| 172 |
your real Mac's spool folder when you are ready to print them. |
| 173 |
|
| 174 |
|
| 175 |
**Known issues** |
| 176 |
|
| 177 |
Printing to the spooler from the same Mac which is running the spooler does not |
| 178 |
work well yet. (There's a bug with self-send mode. Don't try it unless you like |
| 179 |
rebooting.) |
| 180 |
|
| 181 |
On System 6, there are some errors being logged with the tickle mechanism which |
| 182 |
is part of PAP. This should be fixable and does not seem to affect printing. |
| 183 |
|
| 184 |
There is currently no handshaking with the real printer before attempting to |
| 185 |
print, so if no printer is connected to the selected port, data is sent into the |
| 186 |
void without any error and the spool file is deleted. |
| 187 |
|
| 188 |
In this release, LaserWriter spooling is only known to work with version 8.3.4 |
| 189 |
of the LaserWriter 8 driver. This is the version which shipped with system |
| 190 |
software 7.5.3. Version 8.6.1 and later send an additional query prior to normal |
| 191 |
setup, as does 7.1.1 and likely others. In general, we can't yet handle more |
| 192 |
than one query transaction (meaning the driver is asking us to answer its |
| 193 |
questions, rather than giving us data) in a given print job. A fix is being |
| 194 |
investigated. |
| 195 |
|
| 196 |
|
| 197 |
**Bug reports, feedback, etc.** |
| 198 |
|
| 199 |
Please let me know about your experience with Simple Spooler, especially if you |
| 200 |
run into any problems. This prerelease software is still under development and |
| 201 |
not yet considered stable. Bug reports and suggestions for improvement are |
| 202 |
always welcome. (When reporting a problem, please mention the system version, |
| 203 |
spooler configuration, and what software you are using to print, so I can try |
| 204 |
to reproduce it.) Thanks! |
| 205 |
|
| 206 |
<https://mastodon.social/@_the_cloud> |
| 207 |
<thecloudexpanse @gmail.com> |
| 208 |
|
| 209 |
|
| 210 |
**Modification history** |
| 211 |
|
| 212 |
0.1 2026-02-16: first release for testing |
| 213 |
0.2 2026-02-23: added ImageWriter 1 compatibility mode |
| 214 |
0.3 2026-07-30: split up configuration and startup, so server can auto-run; |
| 215 |
rewrote filter to run when printing rather than spooling; |
| 216 |
optionally strip reverse feeds |