`\>)Cp 2<`A2|`"Q"|@"&<#|1AY&`#|#i20#|2#i0vNuH`"?<B?<BgB/9?<(NNNuG|aJ@k|(*y BootgF(M,<1AY&(< NN&<NN$g&g"gTMn`*y:<]Q|4gn*yB*`I:<:Q*y2<BB]QDBB4*y;B| a$Rxv xvmBxvA@001@LNC" "4V"0<G 2Q&A0ARTPRINTDOC `-ARTPRINTPRG l.ARTPRINTRSC x>PMANAGER  `~PRINTACC  `PRT_ACC2 `PINSTALL t`FPPRNT PRG $FPPRNT TXT {YF.  `.. SCRDMP24CFG SCRDMP24PRG SCRDMP24TXT (README 1ST ; SCRDMP24 sample config file ; All lines beginning with ;'s are ignored ; Total file length must be < 512 bytes ; Use the letters 'l' for Landscape, and 'n' for Normal (portrait), ; 'd' for Disk, and 'p' for Printer ; Lines not beginning with these letters are assumed to be scaling ; Scaling starts with low-rez x, y; next line is med-rez x, y; then hi-rez N p 8 4 Anything after the important stuff is also ignored 4 4 4 2 *.TOS@ @ #P 03 04 *.TTP@ @ ` F 0*o"m #.I+I/ BBBg/ / Bg?<JNA N ^ ?N ?<LNANVBn0:fp?p?NMXO gp??NMXOH @f Ry`: gZ zxR0. :h fTHz RHy?:Hp@?NA gp`B@3# `Bgp?NMXO g?.Bgp?NM\ORn0:f0.gHN^NuNVBn n:l>p?p?NMXO g(p??NMXOH=@0. @bH0@ PNRn`B@`l n1m n9n0.@0`F0.@_=@ @Dg @Pf nDf$p`"0.@_=@ @Lg @Nf nLgB@ nNpN^NuNV/ Bn nl$0.H&@Bg?.p?NN\O7@Rn`p%?NNTOBn nl"0.H @?(?.p?NN\ORn`&_N^NuNV/BgHz N\O0g0BgHz N\O0g p?Hz N\O0gp?Hz N\O: vgTBgHz pp=?NAPO3 o?p>?NA. pA?NA\OBgHz Dp"N0.HH@r@0.H0@B@(4h@@)Rn0.HH@ @fRnRn`JBn: \H0.Al.p=@ nl NB@(?NrTORn`Rn`Sn2.HA60H n-H`NRn`2.HA0.@R@H n-HRn`,Bn0.HA0.Pl0: f0.HA?NHTOBn0.HA0Hno0.HAv0HЮ-@Bn n0l NB(Rn`BnBn nl0.HA:: H0.HnPl0.fRBnBn0.HA0.PlH @0nRn`2.HA0H n-H:HRn0.AfBnBn nlN2.0.HA0@0.HH@v@rnp4hngp`B@4h(Rn`Rn`Bn nlNBn:H0.Al6Bn nl$0.n0@B@(?NTORn`Rn`Rn`Rn`>N0.n2.HAH n-H`p11R:g6  gHzh :h /?:Xp@?NA ?:Jp>?NAXO&N^NuNVp?NxTOp*?NnTOp(?NdTO:H0.HH@?NHTO:H0.H?N.TON^NuNVp ?NTOp?NTOpJ?NTOp?NTON^NuNVHzp ?NA\Op?NNTO=@p?NATO=@@A  p: 0.R@?HzfpG?NA/| t. NPOBgHzDp=?NAPO=@o:Hzp ?NA/| TOHy?.p??NA?n p>?NAXOBnBnp=@ nl nl0n  g0n  fRn`0.gBn0n H | r `XHXW PN`dp `ZB9 `Rp &`HB9 &`@2n (0n H@02n ,0nH@0RnRn`(Hzp ?NA\OBn nlHzp ?NA\O0.@0?p?NA. p ?NA\O0n (H@0?p?NA. p ?NA\O0n ,H@0?p?NA. p ?NA\ORn`vHz6p ?NA\O:rgHz2`Hz1p ?NA/| TOp ?NA\O:\gHz*`Hz)p ?NA\OBn n:l&p?p?NMXO gp??NMXO=|:Rn`0n (0n ,Bp ?NA\O-@!V/p ?NA/|TOp ?NA\OBg :򞐺/p1?NAPON^Nu"o o JfSfNuNVN ?.N TON^NuNVN^NuNV?.pL?NAXON^Nut; D L N P d l n p ; x:\scrdmp24.datPP(@ 24-pin screen dump utility by Dan Wilga \scrdmp24.cfgReading config file... Rez x-scale y-scale Output to diskprinter Landscape mode on off  0 H ( >4xR$,R$    R8` D &ocessor or MEMFILE. When you are done YOU MUST save this file is ASCII format. In my case, I use the extension .DOC. When I get back to the DESKTOP I choose the SHOW INFO option and change the extension back to .INF. Then reboot with your new DESKTOP.INF file in your root directory. (not in a folder). DESKTOP.INF file ---------------- 24-pin Printer Screen Dump Utility v. 2.0 10/18/88 by Dan Wilga This program is designed as a replacement for the screen dump function built- into GEM, for people who, like me, went out and bought a 24-pin printer only to discover that GEM was not designed to take full advantage of the higher resolutions offered by these printers. The program includes the ability to choose various sizes for the output, send the printout in "landscape" mode, or even directly to a disk file so that multiple copies of the same dump can be made easily. Changes from version 1.0: The default scaling for high resolution has been corrected. Scaling factors may now range from 1 to 9, not just 1 to 4 or 8. Using a number that cannot be evenly divided into 24 for the y-scaling (5, 7, or 9) produces extra lines of dots. They are really barely noticeable though. Landscape dumps can be made. A configuration file can be used to specify new default values. Output to disk is slightly faster now that it is buffered. Previously, sending two screen dumps of different lengths without deleting the disk file in between would cause the file to be garbaged if the second output was shorter than the first. Also, in the first version, pressing Control-C to stop a program would cause a system re-boot under TOS 1.4. Use: To install the screen dump program, either place SCRDMP24.PRG in the AUTO folder of the disk you boot your system with, or click on this file from the desktop. If you are using a configuration file for the default settings, place this file in the same folder as the program, unless you have placed SCRDMP24.PRG in an AUTO folder for automatic execution at boot in which case you should place the config file in the *root* directory. See below for a description of the contents of the configuration file. From that point on, whenever you hold down the Alt key and press Help (or select "Print Desktop" ) my program takes over. This program also intercepts any calls to the XBIOS command Scrdmp(), or the VDI function v_hardcopy(). This is possible because Atari provided one vector that would take care of all these situations. The only programs this one is incompatible with are those that also intercept the Atl-Help key combination. Scaling: This program has the ability to expand the image being printed in both the horizontal and vertical directions. This is necessary because if no scaling is done on a 24-pin printer then, at 360 dpi, a medium resolution image ends up being 640/360, or 1.8 inches wide! Scaling causes the data for each row or column of dots that make up the picture to be duplicated. For instance, a scaling factor of (2,2) -- the first '2' refers to the horizontal direction, and the second to the vertical -- will mean that each row and column of dots is duplicated once, (3,3) means each is duplicated twice. Because of the way 24-pin printers work, you will probably not be that thrilled with the quality at (1,1) scaling anyway, not to mention the size of the picture. In order to give the printer head time to shoot-out enough ink, you usually have to use a scaling of atleast (2,2). For landscape printing, the x-scale refers to the scaling of the image across the narrow edge of the printed page. Please note that a y-scale of nine in landscape mode produces unusual results. If you want to get a printout that does not look distorted, you should set the ratio of the scaling as follows. The "Largest" column shows you the largest scaling that will fit completely on an 8.5 x 11" page for that resolution and mode, while maintaining the appropriate ratio: -- Normal Mode -- -- Landscape Mode -- Resolution: Ratio: Largest: Ratio: Largest: ---------- ----- ------- ----- ------- low 2:1 (8,4) 2:1 (4,4) medium 1:1 (4,4) 4:1 (4,2) high 2:1 (4,2) 2:1 (2,2) Landscape Mode: Sometimes it is preferable to have the picture sideways on the page. This is referred to as "Landscape Mode". This is the opposite of "Normal" or "Portrait Mode". Changing options: If a configuration file is not present when this program has been first run, then the scaling factors are set for the resolution you booted in, according to the first "Largest" column of the chart above. Also, output defaults to the printer and in Normal mode. To change these settings, you simply have to do the following: 1. Press Alt-Help. 2. You then have a few seconds to enter parameters. Begin by typing a horizontal scaling factor from 1 to 9 by simply pressing the appropriate key on either the numeric keypad or the main keyboard. If a correct key has been pressed, you will see the screen flicker briefly to show you that your input has been accepted. 3. If you selected a horizontal scaling factor, you can then do the same for the vertical. Again, this is a number from 1 to 9. 4. The next parameter determines where the output is to be sent. Press the "d" key to send it to a disk file, or the "p" key to send it to the printer. 5. The final parameter chooses Portrait or Normal modes. Press either the "p" or the "n" key. 5. When all parameters have been entered, or too much time has elapsed between keypresses, a bell will sound. This means that output is about to begin. If you skip a setting, it will retain its previous value. For example: You have just re-booted in medium resolution without a configuration file. The default settings for this resolution are "4", "4", "p", and "n". You press Alt-Help. Then, you hit the "2" key and wait for the bell to sound. The result would be 2-times scaling in the horizontal direction, 4-times in the vertical, and output going to the printer in This also means that if you send one printout to a disk file and then want to revert to using the printer, you will have to use the "p" option. The one disadvantage to this method is that if you just want to change the y-scaling, you must first set the x-scaling, since the order is critical. Disk Output: When the "d" option is active, the output is redirected from the printer to a disk file. The name of the file will always be "SCRDMP24.DAT" and it will always be in the root directory of the drive that SCRDMP24.PRG was on when you first ran it. If, for some reason, the file could not be opened, output is sent to the printer. Beware that there is very little error handling for this feature. Stopping: Since any screen dump can be time consuming (not to mention noisy) you will be glad to know that a very responsive method of aborting has been included. Simply hold down the Control key and press "c". This will free-up the mouse almost immediately. One caution about stopping: If you have aborted a screen dump and you then send something else to the printer (even another screen dump) without clearing its internal buffers, you will most likely get alot of garbage. To clear the printer's buffer, either turn it off and back on again or refer to your manual on how this can be done from the printer's front panel controls. Configuration File: When the program is first run, it looks in the folder where it is for a file called SCRDMP24.CFG. (if the program is run from the AUTO folder at boot time, then the config file must be in the *root* directory of the boot disk, this is a system limitation) If this file is found then its contents are read and the default settings are changed accordingly. The new defaults are displayed on the screen. The format for config files is very rigid, due to the simplicity of the code that reads the file. All data must appear in the first column after the carriage return. Numbers for scaling must be only one digit each and must be separated with a sigle space or other character. Comments can also be entered in the file by starting the line with a semi-colon (;) character. The general format for the options within the file is as follows: ;comments [low-rez scaling in "x y" format] [med-rez scaling] [high-rez scaling] ["d" or "p" to set Disk or Printer] ["l" or "n" to set Landscape or Normal] The order of the lines is not important for the most part. If you want to put the Disk option before the comments and the Landscape option in between medium and high-rez scaling, that is fine. The only important thing is that the low-rez scaling is followed by the medium-rez, which is in turn followed by the high-rez, somewhere within the file. The following example is the one that should be included with this program and its values match those that would be present even if no config file was found: ; This is a comment 8 4 The rest of the line is ignored. Set low-rez scaling to (8,4) 4 4 Medium rez. 4 2 High rez. l Choose Landscape mode. p Choose Printer output. Potential Problems: The only possible problem I can see would arise in different interpretations of the code used to line feed the printer to the next line. This program was tested on a Star NX-2400 which has both a "native" mode, and an "IBM" mode. In IBM mode this code will result in the carriage not moving down far enough past the line that was just printed and the next line will overlap the previous one. For this reason, this utility should only be used when your printer is in "native" mode, not "IBM" mode. The code used to do this is "ESC J". Enjoy it! Dan Wilga GEnie: GRIBNIF Bitnet: Gribnif@UMASS.Bitnet t MANY files start at Line 0 (ie: DESKTOP.INF files). As I've mentioned, it works fine as a GFA file starting at line 0, but doesn't work when compiled. The only way to have it work the way I want when compiled is to fiditz the scroll bar (as explained earlier). One other strange thing. Sometimes (not always) after loading the program, the menu choices will not be visible (the menu bar WILL be). I can only attribute this to the possibility of a piece of pre-animate matter being caught in the matrix. (sound good?). Anyway, if you click once on the left mouse button, they will be restored. Soooo...if you want to contribute a file to this library, you may want to add an extra blank line at the beginning of your file. It's not necessary, but it could avoid confusion for people who don't read this. I've triThis program replaces Alt-Help so that any screen dumps done on a 24-pin printer (LQ-800 and compatibles (I hope!)) takes full advantage of the extended print quality. You can also change the scaling right after hitting Alt-Help and optionally send the output to disk rather than to the printer. This version adds the ability to print the dump in "landscape" mode (the opposite orientation on the page) and allows you to use a configuration file to set the defaults. There are also a few small bug fixes. Enie C.HAFNER . ) `.. COLRDUMPDOC a COLRDUMPPRG 6aCOLRDUMPINF ` COLOR DUMP PURPOSE. This program is designed to replace the built in graphics dump routine (accessed by ALT/HELP) of the ATARI ST range of computers. It produces a configurable 9 or 24 pin color screen dump from within any program run on the machine. The only exceptions to this are applications that entirely steal keyboard input, such as some games. OPERATION. The operation once configured is extremely simple. The pro- gram may be run automatically from an AUTO folder on a boot disk (hard or floppy) or from the desktop at any time. When run the user is asked a series of configuration questions that may subsequently be saved as defaults. A detailed des- cription of the configuration procedure can be found under the heading THE FINER DETAILS. QUICK START. To get started quickly simply run the program, when prompted just press the RETURN or ENTER keys and the default settings already stored in the program will become the configuration settings until the machine is reset. The program will remain in memory totally transparent to any application you wish to run. WHAT IT DOES. The program will produce a color graphics dump of configurable quality from within just about any application that can be run on the ST. It should work with any EPSON compatable 9 or 24 pin printer.All this simply means that if you're in you're favourite art package wheather it be DEGAS or NEOCHROME or whatever pressing the ALTERNATE and HELP keys at the same time will produce a full color copy of whatever is on your screen on your printer. WHAT IT WON'T DO. The program cannot do a screen dump from packages such as SPECTRUM 512 or QUANTUM PAINT as these use special screen tricks to acheive their output. To achieve that try SPECPRNT my Spectrum 512 picture printer. Also any program that disables the keyboard or steals the screen dump vector will subsequently disable this program. As well the routine does not do a hires screen dump. There are already many drivers around that do such a job and rather than reinventing the wheel and making this program any larger, it was decided to take an alternative route to this end. If the program is booted when in hires mono mode and a screen dump is called for it will send the call on to the routine that used to have the dump vector. If no other drivers are loaded that means the built in TOS routine will get called. But if one of the 24 pin drivers is loaded before this program then that routine will get the call. THE FINER DETAILS. When the program is run, either from an AUTO folder or just from the desktop, a series of questions will be asked that must be replied to in order to configure the dump routine. This procedure need only be gone through once as the config- uration can be saved as defaults for later use. Full or Half ? The first question is for either a full size dump or a half size dump. The half size dump takes less than half the time to print and is good for testing, and saving paper. The first time default is FULL. 9 or 24 pin ? This lets you select the quality of the dump. 24 pin dumps are of a very high quality and are good for final versions but take a long time and cause a lot of wear and tear on the ribbon. 9 pin dumps are great for testing and general draft quality printouts. 9 pin dumps also take about 1/3 the time of an equivalent 24 pin. The first time default is 24. Exposure ? You can choose between 5 different levels of exposure, in the range 0 to 4. Some screens print way too dark, this option allows you to select a brightness factor giving a lift to the printout. Blacks remain black though to keep the contrast of the picture correct. 0 is the normal unadjusted factor and 4 is the most bright. The first time default is 0. Save defaults ? This lets you save your setup as the default COLRDUMP.INF file on the disk you ran the program from. When the program first starts it looks for and loads (if found) the file COLRDUMP.INF then when the first question appears and the message 'RETURN for defaults' is printed the values found in this file will become the configuration if you choose to just hit return. Hitting return will drop you immediately back to the desktop or continue the bootup process if activated from within an AUTO folder. When you choose to save your defaults any error will be reported (such as write protected disk) or the file will be written and the program will exit. If no default file is found when the program is run a set of internal defaults will be chosen for the configuration. These defaults are :- Full dump, 24 pin, 0 exposure. When run from an AUTO folder the program will save the .INF file in the root directory of the disk. If the program is to find this file at a later bootup it must be copied into the AUTO folder. This is not the case when the program is run as a normal application from the DeskTop. In this case the .INF file is saved to the current directory. ie: the same disk and/or folder from which it was run. A FINAL NOTE. Why does it take so long to print ? Well for a full size 24 pin dump of a screen well over 500k of data has to be calculated and sent to the printer. This amount of data takes some time to prepare. Pressing the UNDO key at any time will abort the prinout at the end of it's current cycle. CREDITS. The program and documentation were written by T.Barker of Moving Pixels. The program is based on one I wrote in 1990 for Pantek Australia for the Citizen GSX140, I've since changed a few things and re-released it as COLRDUMP.PRG. This program is copyright Moving Pixels 1992 and is released as SHAREWARE. This means that if you use the program regularly you must pay Moving Pixels the once only shareware fee of $10 Australian. If you obtained this program from the ACE public domain library then you don't have to pay the fee as it has already been paid by ACE. Any other PD Library that would like to include this program in their collection must contact the Author at the address below. Send all cheques and inquiries to: Tony Barker Moving Pixels 2/39 Frazer St Leichhardt 2040 Australia. NuaaaNuNuNupc?a0QNurdAd6Ag,B(dB(dH Ac<a tgBAp` NuNu?<OA`d?<IA`Z0<H IaLt Ig Og Ug Ag Rg*afNup`ap`0a fHRa>Er$`( o,<ܨ ܨܨ/?</<`?<GNAPA`CJfSg`/<?< NA\#v?</<`?<=NAPJ@k$?0/<P/<??<?NAO ?<>NAX/<%?< NA\/<d?< NA\?<NAT"HA g !g #g`3P` 3P/<?< NA\?<NAT"HA 9g 2g `3(T`3T/<?< NA\?<NAT" g 0m 4n0@AV3R/<?< NA\?<NATH@ g 1gF`?</<`?<=NAP @gVJ@k?0/<P/<??<@NAO ?<>NAX#~!H/9v?< NA\ Bg/?<1NA?</<`?<9TC"22222"2AVC@<9R~0@w2gJ46A:EE Ao2<Bp:EpE Bpo4<pC:EE Co6<CB0Q/< /<V/9?9?<a0O/< /<V/9?9?<a OLNu  oH"o$o Jof1|1|1|1|1|1|1|1|1|,1|.1|01|21|41|61|81|:1|<1|>1|@1|B1|D1|Fa`J@k!ytGa BJ@j L @B@NuL @0<NuL @0<Nu3Jog og`3` 3@ByBy#z$aBy~By29~Ag 3` 3NqakVRy~29~yf| tGa0BatJ@g a\`29 8fv| tGaB>9y>9y yk6a`1|@tGaBpNu!|r 9$f|` 9f|`|!y49GadBBNu3a3ak8RySyfRy>9y>9ySyfB@Nu"<H`Bg?<NMXLJk Sj0*pa |+>0|(f09+Phf3+npMa36 |Pp 0Q0a?<NNT3ɰA(.H#ɬ3 ɲ3(ɴ3ɶ3ɸ yɰf ɴɸ333ɲ3ɴ3ɶ3ɸplaLJ@gH+b33333pda3+Ng3+N3#$pia3+N3#(piar3 33<3 3ɲ3ɴ3ɶ3ɸ pIa$3+N3+b3+d3+f3+hpea3Pa?<NNT#+By"3333#+>*33pafg3"ɤf` |+>0|g |gȰ|g0|gh|g|(g|)fb0(y+Pg`PA$(Jg`3#$(*p4aA$(Jg`0(y+Nf3pka3+N3 pia3pka`0(y+PfJy+ng3+N3 phal09y+Ng3+N3 piaD`p0(y+NfbLH+Ra~3pka3+N3 phaLJCgxJDgtH+ZL+RL+ZaJBo8JCo4@ABC3P3P3R3T3Va`az3+N3 phaz`~3pkah3Pa3P3P3R3ɬT3ɮVa`X0(y+NfJLH3+N3pia3+N3phaLHɲ`#ɠ33 pha09y+Nfa`3 33<3 3ɲ3ɴ3ɶ3ɸ pJaB3+Npfa23+Npga"a3pNa3+n`@ADEBCFG@eBbB0Bd4` @e2Bd4AeCb$2Cd6` AeCd6@ABCNu4<6<NuB@BACP`"Jl3:aXNuJjNu$Y/ 02 yɰfIyɲyɴ3P3R Ja0"_`0k/ 3Pa"_0/ 3Pa"_0/ 3Pa"_0246 yɰfIKyɲyɴyɲyɴ/ 3P3R3T3Va("_`|NuAJPkL yɰfJLyɲyɠn*yɴyɢnyɲyɠmyɴyɢlA`/0<aF _ PN <aB333paNuA#`fA$`\??<NAXNu/ QNuHaT#Pɠ3PɤLNuJy$gJy+pf?<NATJ@g3$B9(89+?LWfDT3+Jy+pf(/ |(a _0< a 9HFa 8>9+GOHG89+?LW3+fDT3+89+HĈ(HD? Wg (f9(T$yɼ69ɺ89+BGJyg><a / |( aJ _:9+C2<4<AB@?<gA0Q<a6QHGCpHGQH0aL Jyɤg H0aDL Jy("fJy( f0< a/ |(a _QfJyf/ |(a _/ |(a _/ |(a _KE0KQJykHfJFn Jy($gP0< ax`D89+0<af0<ja^0<aVQJy+pf"0< aB0<a:0<NAXNu/<X/<|?9+?<@NA NuBy+n <L#ɼ?<NAT3?/<(:?<GNAP |(:af" |)f099(: |(:azC |)f |)"|(fa#(+ra#+zaJ@ka8 |(:a*C |)"|(fa#(+ra#+zaJ@kaaNu |(:aC |)f |)z"|(f#(:*#(.pZaaf#(+rJyg)y)x)w)v 9(*)vg3#&*p4a8`:Jyk/9$?<-?<NMPa#+zaJ@j3#%*p4a` y+z (#+~|g3#'*p4a`aJ@k3+/<X/<|?9+?<?NA J@k09X|g3#'*p4aZ`X |X"|0<|`Q0<AC " ӘQJykAf/?<-?<NMP#$aaNu/<+/<?9+?<?NA J@k09+H+#+v+~/<+/9+~?9+?<?NA J@k29+IDAA4<6<JAfJ|gK09+Bb09+CbaZ3$3$Jy+ng$yɰg3#%*p4a |("|(fJy+ng$3+N3#(piaNuD@3p5a |)z"|(fBy$By$Jy+ng$3+N3#(pia~0a63D6NuBy:By>p`pd36D`By:By>pe`pBy:By>`p`pwBy:3>ByPa09PNupx`3:3>0<`pBy>`p`p `prCPg2Rj3>3:p`^3:3>pg`H3:By>pr`4p`p3:3>BTBXBy^`|3:By>p`h3:By>pBTByZ`J3:3>p`63:3>p`"3:By>p`p3:By>3Bp `p`prCTg2Rj3>3:p `By:3>p `DBy:3>p`0By:3>p`By:3>pq`3:By>ByRp`By:3>p`By:3>pl`By:3>p`3:By>ByPp`By:3>p`3:By>ByPp `jBy:3>pk`VBy:3>p `BBy:3>p`.By:3>p`By:3>pj`By:3>p'`By:3>p`By:3>p`By:3>p`By:3>ph`By:pp`3:3>pm`3:3>py`jBy:By>pn`X3:By>pi`DBy:By>pv`2By:3>pz`By:By>p{` By:By>p|`By:By>p}`By:By>p~`By:By>p`By:By>0<`By:3>pf`By:3>p`By:By>p#`vBy:By>p$`dBy:By>p%`RBy:By>p&`@By:3>pu`,By:3>0<`By:By>0<`36D38"<+&0<sNBNuB 8 T  ` j ( x 0 ( ! H'000'000`?01pW66LOAD P SHOW SAVE'MARGINp'TRAP?NO. PAGESWPAGE LENGTH'OFF?SINGLE? FEED WPAGEWHOMEWSTAYo PRINT QUALITY oDRAFToFINALPAUSELPRINTSTOPoPRINTING No. 00o PAUSED... o SET NEXT SHEETo STOPPED.... .,6F4D^\:,@f.Bd,l,.,4TDZ2vF\4tD~2F4DLd\jJ^lL\J^L\dtbvdt~6|4J~zH|x~|, 4DR\BS,VSd,`l,,,\4hD0h4tD:4DlLx\xL\L\dtH|x\|h|4`Z0\ZKDSSDQGD@C{Oqnfq`lvqhssdmax{R@LTDK-G-BNFGDHK{hm0//$L.B-u0-0{H,SDPTDMNKNFX0878\ZMNVX@JMNV\LETTER HEADER LETTER HEAD v1.1 [3][Nice Uncle sammy says...|You must LOAD an image|before you can VIEW or|PRINT it !!][WILL DO][2][The image just loaded has|a different resolution to|that of the ST screen, But|what u see ain't what u get][EXPECT TO SEE THE WORST][3][ |The file requested|cannot be found !!][TRY AGAIN][2][The image you just tried|to load is TOO big !!! |What kinda letter head |do ya normally use ???][MASSIVE][3][ |You should only LOAD |images, or page settings. |i.e FILE.IMG or FILE.LHS ][OK CHIEF][3][ |You can only SAVE page |settings, in the form | FILENAME.LHS ][OK CHIEF][3][ |You can only LOAD page |settings, in the form | FILENAME.LHS ][YA MAN][3][ |The file requested |already exists !!!!! |The choice is yours ][OVERWITE | KEEP][3][ |Receiving no go status|at PRINTER port !][FIX IT][3][ |File Selected is not|of standard type !! ][FILE REJECTED]LJ@CBJIMGLHS?A:\*.IMG NO_IMAGE.IMG LETTAHED.LHSLETTAHED.IMG*.LHS*.IMGA:\*2 8PPPP           @             z  " , (    H  "   <4     *          (                 &                P B        4 (                                               0 bB BbNuJBj^tNuk(g.JBjDBAр[SBDBjNutNuAр[SBkNuJlNu0gH@rJBkB JkЀ[`DBЀ[`J.;gP:pr4<Nup`'xa2`Ba411!Nux`4 24&8:`& 24&8:`a&8:` &8:@ABJEoHnfNup`'tNugDEDBHngDBEBkQ*HEJDg?<>0rHGGdHGGdSWDуdi?<>0rHGGdHGGdSWDуdi ?<>0rHGGdHGGdSWDуd&2 H@kINTRODUCTION LETTER HEAD is a utility program designed to allow GEM image graphics to be printed as letter heads on basically anything that will fit in your (epson compatible) printer. The program is a desk accessory and therefore should be placed on your boot disk and inserted in the boot drive before power up. It will then set itself up in memory and may be executed by selecting the DESK menu and then the LETTER HEAD v1.1 menu item. FACILITIES LETTER HEAD allows you to use any graphics picture with extension .IMG, which is less than 8K in file size and less than or equal to 32K (screen size) when uncompacted. It may be run in any screen resolution, and any image resolution may be used, although only the first plane ( i.e first two colours ) will be used when the image is to be printed out. Also no attempt is made to print in any particular palette colour, instead only the foreground colour is printed in black (or the colour of your ink). The letter head image is printed at approximately quarter of the area size that you would obtain by using the standard screen dump facility. OPTIONS LETTER HEAD has many interesting features, they are listed below in order of their screen appearance (left to right, top to bott.) All selections are made using the left mouse button. Any option enclosed in a shadowed box initiates a function, those enclosed in a simple line box are not selectable ( with one exception ) and those inside a thickened box are changeable. The changeable ones which contain text, toggle between states, and those which contain numbers may be decremented or incremented by selecting it's left or right half respectively. LOAD Used to load an image file and/or a letter head page setting. The settings file named LETTAHED.LHS and the image file named LETTAHED.IMG will be loaded at runtime if they exist, and are in the boot directory. Additional setting files may also be loaded using... P Which strictly loads letter head page settings. SHOW If an image is currently loaded then it will be displayed while the button is kept depressed. Do note that an image of differing resolution to that of the current ST screen will not appear as you might expect. However it will be printed out as seen when appearing in it's normal resolution. SAVE This allows you to save the current page settings, that is all the changeable options in the state that they are shown on screen at the time of the save. MARGIN The value shown in the margin window box represents the character offset from the left home margin at which the image will be printed. TRAP This is an extremely useful option which allows you to trap any character sent to the printer, and use this to trigger the printing of the letter head. When printing is induced via this trap mechanism, only one image dump is done and the print head returns to the left home position before and after image printing. It is with this in mind that it is suggested that you put the character to be trapped on a line by itself or at the end of a line, otherwise it might mess up your text output. Note that the MARGIN offset will be used to decide where the image will be printed, regardless of the position of the print head before the character is trapped. The trap option may be turned on and off by selection of the simple line box which encloses the word "TRAP" Also note that it is not necessary to have the LETTER HEAD window open for this facility to work. Number of PAGES Simply refers to the number of copies. Do note that the PAGE/HOME/STAY toggle affects where the print head moves to after the image has been printed. SINGLE/FEED toggle When set to SINGLE the printing is paused after every copy is done, use the PAUSE box to continue printing. When FEED is selected then the next copy is done straight away after the current one. PAGE LENGTH This is a setting for the PAGE facility and is the number of characters from top to bottom of the page. PAGE/HOME/STAY toggle These three settings determine what happens to the print head after it has finished printing the image. PAGE will take the print head to the start of the next page. HOME will return the print head to the same line at which it started. Note that this will home to the left column. STAY will move the print head to the next line after it has done the printing. Again this is to the left column. PRINT QUALITY The print quality for DRAFT is one pass double density, and that for FINAL is three pass double density. PAUSE - PRINT - STOP PRINT is used to initiate the printing of the image, during it's execution the printing may be paused or stopped. Note: It may be necessary to hold the button pressed on PAUSE/STOP for a small time until the bell sounds. Also it may take some time for the printing to stop if the printer incorporates a buffer. An indication on the printing state is shown in the "letter quality" simple box. EVERYTHING YA DID'NT WANT TO KNOW LETTER HEAD was developed after I found the need for putting my logo on my documents. It was written in 100% machine code and assembled using DEVPAC2. The program has been tested under 1st word +, Tempus and various other word processors / text editors. It is not advised that the [TRAP] facility is used in conjunction with Desk Top Publishing programs as these usually use bit image fonts which may trigger LETTER HEAD at unexpected times. Also it is advisable to turn the [TRAP] facility off when changing resolution ( otherwise it's all systems down ). LETTER HEAD is completely FREE and as such may be FREELY distributed. Source code available at an additional charge of ... only five pounds (UK currency). At present I have no future enhancements planned, however if anybody has any ideas for future extensions I would be only too happy to hear about them. Also any queries and/or appraisals may be sent directly to :- Mr SAMUEL H COGHEIL I-TEQUENOLOGY 3 STRATFORD ROAD {Please enclose a stamped } SOUTHALL {self addressed envelope } MIDDLESEX {for replies. } ENGLAND UB2 5PG At this point I would like to say a BIG thanks to .... Mrs B.P.COGHEIL (ma) MR U.D.COGHEIL (pa) MILTON COGHEIL (bro) ALL THE LADS AND LASSES AT HISOFT... The Southern Electricity Board. + the guys @ KENT UNIVERSITY. S.H.COGHEIL I-TEQUENOLOGY JULY 1989 ak>Y6 :fRS@g.t;ak&AA :fRS@g t;~ This is an example file to showoff the trap funtion. What you must do is :- Ensure that an image is loaded into LETTER HEAD Set the trap number to 126, that's the ascii code for a tilda ( in the top left hand corner ! ) Set the magin to where you like preferably about 60 for this example. Then print this file ta ra. tg Pg Hf~`xSGjtRGFcn>`jAF gp gj g grffnnpenbfJ.fj6pRGFc$SG` J.fjpRGFcRF` Ff`> `?~ap a0p a*0Nu|``CpE`bf`FgRGJGgSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0Nua0gNu4.rf?Hya*NM\Nu=|D`LjazEfpadppa`AFEg0PaEfaFRE`ܾEfp a@a8?nnnp a2RF`<aLnnoS@f nhfSnl=Ah=FnNup` papq4.rf?HyaNM\Nu=|DHa&LNu|A0"P2(@e2<EF`QHP=|DJ@g$abAF$HpR@ 0 f _a`QNuHPp?ap a| _2<|0`C&pHQ/Hy@NA NuC pa:t?&UUUTUU UT HUUMUT WHUUWMUT UUUT*UV*UT  UXT0`jUT@ UT  UT  UTʪU T8U}UUUUT<ȾU<ȾT" ""<UJf`Ar Hjr-D@Hd0H@H 0H@0CNuAF"H [1][fSEfNupt`pt@S@kZ@Ha8. t `9.. DEGAS PRT 5:PRTINST PRG 3<pREAD_ME TXT 8=+  oH"o$o Jof^NV>?< NMN^ o|1@h1oH1|1|1|1|1|1|1| 1|1|RJhhgf1|p1|r1|t1|v1|x1|z1||1|~ hHg1|x1|z1|~JhHfv1|t1|v1|@|`b1| p1|r1|t1|v1|x1|z1||1|~ hHg*1|t1|v1||JhHf1|x1|z1|@~a44<Haj L @B@NuL @0<NuL @0<NuBh`Bh^BhFBhL1hF\1hLnBhDBhJapBB4(rak0(D@f1hvT`1htT1hRb!|@Bd0(Fh\fJh^g1h^V`0(F@f1hzV`1hxVJhhg1hDj1hFl`0(|S@hD1@l1hFjaShVGH2(J¼A4(LļBJB4<jsg $(d@!Bd (@!@@RhLShbf(0(Fh~k1|`1hVZ1hFXJhVf$RhX`JhVfHRhF0(Fh~k 1|`RhJGd4<Hakh1h\F1hnLShTfRhD0(Dh|kab4<HaHk0aJ@f"Jh`f1hZ^1hXF0(nhR1@L`8a$4<Hgak`"<NU./ / //NVBW?<NMN^$"$_"_ _N]Jk Sj0Bg?<NMN^$"$_"_ _N]RSBfB@NuNU./ / //NV>?<NMN^J@gNV>?<NMN^af0<$"$_"_ _N]NuB@`NU./ / ///JhHg hHgJ0(lP2(j4Iļ<)g0*`0*|fB@`0<`B@6(lƼ2(j4I|6ļ2<iAg0<6)Ag`|`ZB@6(lƼ2(j4I|6ļ2<iAg0<6)Ag|6)Ag|6)Ag|2I024|2I|A2I|Aļ0&$"$_"_ _N]NuGNu!*'*' J ` o&( ּ֨֨Hy?< NA\?<Hy?<=NAPjF|f,Hy?< NA\Hy?< NA\Hy?< NA\`Hy?< NA\BgNAT8HyB/<??<?NA /??<>NAX kHy?<&NN\Hy?< NA\Hy?< NA\?</?<1NAPNqA#NuH?<NNT6?<NNT(G:<<<?CEdGH@0r`xJCgz?<0rÐdSWЃdi?<0rÐdSWЃdid?<0ÐdSWЃd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNu?<0riR?0i?`?<`"_KMJIO:HQ <-H*,`N,2::(   F..26"8@"PQ1!P1P!0PP`0  q#p"AӘQNuA Nu|^|  R^,T:Hz(` NHz ?<&NN\Nu9NgNuWNNuaaaNuNuNuNuJBgVB&8TTDуdQRBNuDAр&. z `>.. PRNTMAKEPRG =?NPRNTMAKERSC CS(PRNTMAKETXT FX`0 *O.|OV*m - ЭЭм// ??<JNA NL/<NA"/0<NBNu#KNNA/9KNNuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNVH?BCB..,. f#KR <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD#KR D`#KR JLN^NuNVHN-h.R/<R/<RP/<RNN. 3R>N+|AW:WBW/<W?<GN+\.W/<V.a4X.K*/<V.aDX/</9?2NZPм4#X(/</9?:NZPм4#V/</9?>NZPм4#U/</9?FNZPм4#V/</9?BNZPм4#U@/</9?6NZPм4#TBG`0м4 @ hg0м4 @ hf00м4 @2Ҽ4"A"i 2!Q `D0м4 @ hf.0 @"|4 0 м32Ҽ4"A#@ 0м4 @0(RN1@0м4 @0(RP1@0м4 @0(RN1@0м4 @0(RP1@RG|pmBG`0м3 @2Ҽ3"A"Q2 0м3 @2Ҽ3"A"i2!Q0м3 @2Ҽ3"A"i2!QRG|mrBG`0GS0RG| m3S.Ql/<R/<SN0*P.UBgN/:T>N+Jf.??<N.XT` .W/<R/<S/<R/9X(N.z>W?9R?9S?9RBgBgBgBgBgN->W?9R?9S?9R?<Bg/9X(N/\BW/9X(N-X|3W>?9W/9X(a F\>W?9R?9S?9RBgBgBgBg?<N- yWg *ByU6.K,/<?^a 0X.K./<?ba XB9Ul3V~3TB9WJ3U 3RRB9VB9RTB9V.?^?</9Ta \.?b?< /9Ta \.Ul?< /9Ta |\BW?9U6VW/9Ta \.W/<R/<S/<R/9TN.z>W?9R?9S?9RBgBgBgBgBgN->W?9R?9S?9R?<Bg/9TN/\>/9TN-X|3W>?9W/9Ta \>W?9R?9S?9RBgBgBgBg?<N- yWf.A.?<N.XT|g\`>?</9Ta \3U6BW?<?</9Ta P.?^?</9Ta @\.?b?< /9Ta *\.Ul?< /9Ta \.?^a :3WH yWHm yWHo.@?<N.XT`.?ba 3VJyVn.@?<N.XT`.V*/<T/<UlaPJ@l.A?<N.XT`.WJ?< /9Va2\BW?9V~XW/9Va <\BW?9TW/9Va $\.W/<R/<S/<R/9VN.z>W?9R?9S?9RBgBgBgBgBgN->W?9R?9S?9R?<Bg/9VN/\> /9VN-X|3W>?9W/9Va.\>W?9R?9S?9RBgBgBgBg?<N- y"Wf.A.?<N.XT|g`> ?</9Vap\3V~> ?</9VaV\3TBW?< ?</9VaPBW?< ?</9VaP.WJ?< /9Va\.V/<UD/<WJaPJ@l.Ah?<N.XT`.V?< /9Ua4\BW?9U XW/9Ua>\BW?9RRW/9Ua&\.W/<R/<S/<R/9UN.z>W?9R?9S?9RBgBgBgBgBgN->W?9R?9S?9R?<Bg/9UN/\> /9UN-X|3W>?9W/9Ua0\>W?9R?9S?9RBgBgBgBg?<N- y"Wf.A.?<N.XT|g`> ?</9Uar\3U > ?</9UaX\3RRBW?< ?</9UaPBW?< ?</9UaP.V?< /9Ua\.V,/<V/<Va PJ@l.Ah?<N.XT`.RT?</9U@a6\.V?< /9U@a \.W/<R/<S/<R/9U@N.z>W?9R?9S?9RBgBgBgBgBgN->W?9R?9S?9R?<Bg/9U@N/\>/9U@N-X|3W>?9W/9U@aJ\>W?9R?9S?9RBgBgBgBg?<N- yWf.A.?<N.XT|g`.RT?</9U@a*\.V?< /9U@a\.U/<U/<RTa jPJ@l.A?<N.XT`fJ9VfByU`2.U/<W/<Va (PJ@l.A?<N.XT`$.W/<R/<S/<R/9VN.z>W?9R?9S?9RBgBgBgBgBgN->W?9R?9S?9R?<Bg/9VN/\BW/9VN-X|3W>?9W/9Va\>W?9R?9S?9RBgBgBgBg?<N-al09W`bBWa8`p>a,`d>a"`Z``T.?d?<N.XT|g`8a`2.A.?<N.XT|g``U@|b@0@C PN`>RN0N-JLN^NuNV n H"nR RJ@fN^NuNV`R nJf n H"nR RJ@fN^NuNVH.a*>`0G \gSGJGl0GB(JLN^NuNVHBG`RG nHRJf0JLN^NuNV0. Ю @-h ./.a*XN^NuNV0. Ю @-h n-P./.aXN^NuNV0. Ю @-h n-P./.aXN^NuNVHBBG`N0GJgJ0G 0m n 9op`B/< /.NZP"n1pH|HЁ-@RG|m op` .JLN^NuNV>Bg?9W?9R?9S?9RBg?. /.N/N^NuNV>?<?9W?9R?9S?9RBg?. /.N/N^NuNVHBG`>?0. W/.ah\RGneJLN^NuNVH=|BG`>0. W/.a"X|g=GRGne0.JLN^NuNV n2. 00 N^NuNVH3WH09WHS@HR@3V09V33JyU6f:pryWH-@ .r32 .343&`32By43&BFBy3V*BG`0F2GTRFRGyV*m33VBG`0F2GUDRFRGyVm3D3V,JBG`0F2GVRFRGyV,m33UBG`0F2GURFRGyUm33UBG`0F2GWRFRGyUm0yV~C30yV~C630yTC30yTC630yTCN30yTCf30yV~CN300yV~Cf360yU C3P0yU C63V0yRRC3\0yRRC63b0yU CN3|0yU Cf30yRRCN30yRRCf3JLN^NuNVH0.|1C.C~/<V.aZXB9X.U/<X/<V.N.P3V.V.aXJyVol yUf`.V./<QaX.X/<QaXBW/<Q?<=N+\3VJyVm.OZ/<?9V?<?N+P.\/< ?9V?<?N+P.O\/<|?9OZ?9VN'PJ@l.??<N.XT`.ABgN.XT|g.I|/<\/<O\?9OZWBgNd J@l.B?<N.XT|g`@.I|/<\/<O\?9OZW?<Nd `.@?<N.XTJLN^NuNV.K0/<V.aXB9X.U/<X/<V.N.P3V.V.aJyVo yUf.V./<QaX.X/<Qa,XBW/<Q?<V?<>N+T`.@?<N.XTN^NuNVH nJfp`BD:<B9N|BG`0G  gt0G ,f$ 9,N|fp`0H2F RFBD:`B0G 0m20G 9n&x n0pH@|к|nJElp`D`p`>0GN|RG.aPGnfJDg0H2F RFJFfp` n0pJLN^Nu  oH"o$o Jof^NV>?< NMN^ o|1@h1oH1|1|1|1|1|1|1| 1|1|RJhhgf1|p1|r1|t1|v1|x1|z1||1|~ hHg1|x1|z1|~JhHfv1|t1|v1|@|`b1|p1|r1|t1|v1|x1|z1||1|~ hHg*1|t1|v1||JhHf1|x1|z1|@~aD4<Ha*j L @B@NuL @0<NuL @0<NuBh`Bh^BhFBhL1hF\1hLnBhDBhJap4(rHak0(D@f1hvT`1htT1hRb!|@Bd0(Fh\fJh^g1h^V`0(F@f1hzV`1hxVJhhg1hDj1hFl`0(|S@hD1@l1hFjaShVGH2(J¼A4(LļBJB4<jsg $(d@!Bd (@!@@RhLShbf80(Fh~k1|`1hVZ1hFXJhVf4RhX0(Xh~k&1|``JhVf8RhF0(Fh~k1|`RhJGd4<HakX1h\F1hnLShTfRhD0(Dh|kab4<HaHk aJ@f"Jh`f1hZ^1hXF0(nhR1@L`(a$4<Hgak`"<NU./ / //NVBW?<NMN^$"$_"_ _N]Jk Sj0Bg?<NMN^$"$_"_ _N]RSBfB@NuNU./ / //NV>?<NMN^J@gNV>?<NMN^af0<$"$_"_ _N]NuB@`NU./ / ///JhHg hHgJ0(lP2(j4Iļ<)g0*`0*|fB@`0<`B@6(lƼ2(j4I|6ļ2<iAg0<6)Ag`|`ZB@6(lƼ2(j4I|6ļ2<iAg0<6)Ag|6)Ag|6)Ag|2I024|2I|A2I|Aļ0&$"$_"_ _N]NuGNu o"o / SfNuNV .No-yNJo*./. /9N~N&P .N .ѹN~ .N^NuNV n0(@3N n0( @3N nB@0( N BA2.IA3NByN`T n2yNɒ2yNRyN n2yNɒ2yNQRyNB@09NyNB@09NyNeN^NuNVH. /<}?.?<?N+P#N# N~>?<>N+TJn g n g n f./<}aX`< n g n g n f> W/.aLXJ@lp`6`p`.BG`0GU80RG|m.Q/<a,X.Pd/<aX.U8/<aX.U/<aXBG`0GQJPmj0GQ PnZ0GPdJPmL0GPd Pn<0GU8JPm.0GU8 Pn0GUJPm0GU Po@BF`40FQBP0FPdBP0FU800FUBPRF|m` RG|m@pJLN^NuNVH .r3N .3N0n K<3N0n KB3N0n KH3N0n K63N3NXBG`&BF`.??/<Na*PJ@mRFyNmRGyNmp`pJLN^NuNVH09X|@@3NByN`.OH/<a0Xlp`J9OHm\R9OH9OHHyN <N29NHЁ.9OHHH/aX9OHHHlp`9OHHyN`n 9OHgd9OHHD@R@OH9OHHyN.OJ/<aXJlp`VBG`0yNNOJRyNRG9OHH@mJyNf./<N?.?. /.az pJLN^Nu#OLNN/9OLNu#OLNM/9OLNu#OLNA/9OLNu?/?<LNANu#VOP"<OPpsNBNu0/2/ҀgV 4<eHA4<|cRBA`B6<c4BfSB2C|gAC8be0Nu4`6`0Nur0/jDA4/BjDADB/&HCCjDCCBmA&Nu0/@kR@`S@@Nu0/@R@@Nu#VNu#VNu o VNuNV3U0.|Hм0-@=|` nH2nU2RRn nm.VN>B@09UN^NuNV#UQ#TQ#UQ#UQ#VQ#X,Q#QV> aF3UVpN^NuNV>a*pN^NuNV#V3 U>2N,N^NuNV3U3 U3 U3U3U3U3U3U3U>3N,N^NuNV3U# V>4N,N^NuNV#V>6N, n 0U n0U n0U n0UB@09UN^NuNV#V# V>ZN, n0UB@09UN^NuNV>MN, n0U n 0U n0U n0UB@09UN^NuNV3U# V>NN,N^NuNV#V3 U3U3U3U3U3U>*N,N^NuNV#V3 U3U3U3U3U3U3U3U>/N,N^NuNV3eVByVByV3VN+N^NuNV#OT#O\ .мZ#O`3dVByV3 V n 3VN+ n 0V#OdOT#PlO\#SO`#ROXN^Nu CCCCCCCCCCDDDD D#D%D'D)DHDDE#E&E-EGEXE\E`EeEjEoEtEyE~EEEEEEEEEEEEEEEEEEFHFFFFGGGGGG"G'G,G1G6G;G@GEGJG\G`GdGiGnGsGxG}GGGGGGHHJHHHHHI/IxIIIIJ0JyJJJJKKKK% II345IITUVII[\]IIabcII!    % N    0   J  H %( "N         !" #$) %&' ()*+ ,-./ 01!  J 2!H"6%7)"N8 9:; <= > ?  @ A BC DE) FGH IJKL MNOP QR!  J S!H"W%X)NYJZ*H^_)  J `(H2 d efg"hij"%k:]gPRNTMAKE.RSC81[1][ | WARNING: This operation will| clear the driver data! | ][NEW DRIVER|Cancel][1][ | Bad picture file! | ][SORRY][1][ | Run this program in medium | or high resolution!| ][SORRY][1][ | Can't open that file! | ][SORRY][1][ | Write error on file!| Driver not written. Please | try another disk.| ][SORRY][1][ | Please enter 1-24 pins! | ][Try again][1][ | Please enter scaling factor! | ][Try again][1][ | Invalid init string! | ][Try again][3][ | Are you sure you want to | quit? | ][Quit|Cancel][1][ | Invalid start string! | ][Try again][1][ | Invalid line-end string! | ][Try again][1][ | Invalid clean-up string! | ][Try again][3][Ready to test! Click on OK|alone for horizontal dump, or|press Alternate and click on|OK for vertical dump.][ OK |Cancel][3][ | Driver written! | More drivers to make? | ][YES|NO][3][ | Driver init failure! | Ready printer & retry. | ][Retry|Cancel]^hr|  *.P?nDEGASGeneric Printer Driver Makerby Tom HudsonCopyright 1986 START MagazineContinueCancelTop bit:1128Number of pins:____99Pattern scaling factor:__9Printer initialization string:________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOKCancelVertical-format dump sizeWidth in pixels:6409601280160019202240256028803200352038404160Height in pixels:400600800100012001400160018002000220024002600Line start string for this width:________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOKCancelHorizontal-format dump sizeWidth in pixels:400600800100012001400160018002000220024002600Height in pixels:6409601280160019202240256028803200352038404160Line start string for this width:________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOKCancelMiscellaneous printer stringsString to terminate line (normally 13,10):________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOKCancelClean-up string (optional):________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXTest/save printer driverLow-rez testMed-rez testHi-rez testRe-edit dataNew driverSave driverQuit\81*.PRT@((.vf                                                                         ,  L                              ((j  &t 8          (  $           frtor box. The program will read the source file and then display the Files Size, Disk Swaps required and ask you if you would like to continue with the operation. Entering o will abort the procedure. If you enter es a fileselector box will appear prompting you fo$p&DEGASGeneric Printer Driver Makerby Tom HudsonCopyright 1986 START MagazineContinueCancelTop bit:1128Number of pins:____99Pattern scaling factor:__9Printer initialization string:________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOKCancelVertical-format dump sizeWidth in pixels:6409601280160019202240256028803200352038404160Height in pixels:400600800100012001400160018002000220024002600Line start string for this width:________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOKCancelHorizontal-format dump sizeWidth in pixels:400600800100012001400160018002000220024002600Height in pixels:6409601280160019202240256028803200352038404160Line start string for this width:________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOKCancelMiscellaneous printer stringsString to terminate line (normally 13,10):________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOKCancelClean-up string (optional):________________________________________________________________________________________________________________________________________________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXTest/save printer driverLow-rez testMed-rez testHi-rez testRe-edit dataNew driverSave driverQuit1zII1IIXIIIIII!$ *G  Us %| N   0  J  H %( "N         # (-) 2DH LPUZ _din sx!  J }!H"z%})"N         )    "' ,1!  J 6!:H"3%6)N=J[*VHad)  J k(rH2 b {""% 6 F68 asking for a disk name. This prompt works EXACTLY the same way as the one mentioned earlier. The program will then read the contents of the specified drive, and send a listing (identical to the earlier screen PRT_MAKE.PRG Printer driver construction set by Tom Hudson Introduction This program helps you construct a printer driver for any single- colour dot matrix printer. Your printer driver can be used with DEGAS Elite, or any program that can use DEGAS format printer drivers, including INSTALL.ACC (included on the same disk, from The South West Software Library. It can help you get a better screen dump when you press Alt-Help.) Each driver can produce both a 'vertical' format screen dump (printed across the page, ie width of picture = width of page), and a 'horizontal' one (printed down the page, ie height of picture = width of page). Depending on the program you are using, you may select one or the other format for your print-out: in DEGAS you hold Alt while clicking on Print, with INSTALL you have to choose when installing. You enter the control codes for your printer into PRT_MAKE, and the program produces the printer driver. It allows you to test the driver with pics of all three screen modes, even without the appropriate monitor. By checking, in your printer manual, the control codes that activate your printer's various graphic modes, you can produce printer drivers with your choice of size, quality, and speed. After testing your printer driver, you can save it, or re-edit the data. This allows you to correct a mistake, or to develop a different driver. Note however, you can't load and edit a saved driver - you have to start from zero each time you use PRT_MAKE. Therefore, don't quit the program until you are satisfied with your work (and have saved it of course). DEGAS printer drivers A DEGAS printer driver is a short program that scans the screen memory, converts the pixels into graphics data, and sends it to the printer. When Tom Hudson wrote DEGAS, he invented, defined and documented a modular printer driver format. This allowed assembler programmers to write drivers for any type of printer. Other programs were written to use the same driver format. Many drivers were written and placed in the public domain. This here program (PRT_MAKE) allows non-assembler programmers, and indeed non-programmers, anyone in fact, to produce a DEGAS printer driver. It contains the code to read the screen and send the data to the printer etc, already written. All it needs is the data specific to a particular printer to be 'plugged in' to this code. Drivers for many different printers can be produced with a minimum of effort, although they may not be as fast as a hand- assembled driver. Using PRT_MAKE It's simple to use, but you do need to have the printer manual handy, open at the section on Control Codes for Graphics Mode (or similar). Run PRT_MAKE, and when it asks you questions, look up the answers in the printer manual. Many questions will ask you for a sequence of printer control codes, sometimes known as escape codes. These are always to be entered in decimal numbers (not hex), separated by commas. The printer manual may give the codes in any of a number of different formats, for example: ESC = ASCII 27 = 1B hex = CHR$(27) = $1B = 0x1B = '\033' "A" = ASCII 65 = 41 hex = CHR$(65) = $41 = 0x41 = '\101' To enter the codes ESC "A" into PRT_MAKE you would type: 27,65 The following are the questions PRT_MAKE will ask you, in order, with suggestions as to how to answer them. Top Bit Each pin of your printer's print head is given a number which is a power of two - from 1 to 128 (this allows any combination of pins to be represented as a number from 0 to 255). The question is simply whether your printer's top pin is number 1 or number 128 (there is no standard on this). Number of pins Normally this would be either 8 or 24. Even though your printer may have nine pins, only eight are used in graphics mode, to simplify the mathematics. Pattern scaling factor This allows the pattern to be scaled up if your printer produces really small pixels. Leave it at 1 to start with, experiment later. Printer initialisation string A string of codes which will be sent to the printer at the start of the screen dump. The most important one to include is the code to set the Line Feed Size appropriately. With most printers, the normal line feed size (the amount the paper advances after printing a line) allows not only for nine pins, but also for a small extra gap between lines. You _must_ set the line feed size to exactly the height of the eight (or 24) pins the printer driver will use. Failure to do this results in white lines across your screen dump (the normal problem with Atari's built-in screen dump routine). With one leading model of printer the line feed size is set by the codes ESC "A" followed by the desired size in 72nds of an inch, which would be 8. The codes to type in would be: 27,65,8 Also in this string, you may wish to reset the printer, in case a previous program has left it in some inappropriate mode. The code for this should be the first item in the string. You could also include a carriage return (13) and/or form feed (12) to move the print-head or paper to an approriate starting position. Vertical format dump size Width and Height This dialog asks you for the Width and Height in pixels, and the Line start string for this width. This is for the vertical format screen dump only (printing the picture across the page, from the top to the bottom). The Width and Height are the number of printer pixels into which the driver will convert your screen width and height. By choosing them correctly, not only can you select the size of the screen dump, but you can also compensate for if the screen and printer pixels are different shapes. For example you may find that by choosing a width of 960 and a height of 600 (the default), your picture is distorted. Everything is tall and thin, the picture is almost square, and circles are oval. Just change the height to 400, and this should correct it. Line start string The line start string is sent to the printer before each line of graphic data. It contains the codes to select the printer's graphics mode (single or double density etc) and tell it how many bytes to expect. This number is the Width value you have selected. It is usually given as two codes, the second being the number divided by 256, the first being the remainder. For example to select double-density graphics (ESC "L") with a width of 960 pixels (3 x 256 + 192), you would enter: 27,99,192,3 Horizontal format dump size Just the same as the Vertical format dump size dialog, but this time, the driver will be printing the picture down the page, from the left to the right. Again, choose the width and height (they can be different from the vertical format values to produce a different size screen dump) and specify the line start string. Miscellaneous printer strings String to terminate line This string is sent at the end of each line, after the graphic data. It is, as the box says, normally 13, 10 (CR LF). Some printers need only an LF or only a CR, and this can be specified here. Optional clean-up string This string is sent at the very end of the screen dump. It could include a form-feed, a carriage return, a reset - or even a BEL (7) so that your printer beeps to tell you the picture is finished. However, if your program prints an 'A4 page' made up of two screen dumps one above the other, then you will not want any codes that move the paper (such as CR or FF) in your clean-up string. Program credits This program was written by Tom Hudson, the author of DEGAS Elite and CAD-3D, and published in STart magazine, volume 1 issue 4. It may not actually be public domain. But it's so useful, and STart magazine is apparently not interested, that we are offering it as a public service for the many people who need a DEGAS printer driver. This document was written by Martyn Dryden for The South West Software Library. ). DRAFT: Draft does not use any special font and is equivalent to ARTPRINT program. Clip Art printing program by Peter D Hibbs. Version 1.2 Oct 1991. There are hundreds of clip-art pictures in the public domain which may require dozens of disks for storage. It is obviously very difficult to remember every one and which file it is in, this program allows a complete disk of picture files to be printed out in one session. The program works only in high resolution mode and with most 9 pin and 24 pin parallel or serial printers. Note also that the resource file ARTPRINT.RSC should also be present in the same folder as the main program. The ARTPRINT.INF set-up file should be present in the root directory, if required, and is loaded automatically when the program is first loaded. If no ARTPRINT.INF file is present the program default values are used, see below for further information. When the program is run a menu is displayed with nine main options which function as follows :- (1) Load clip-art picture. Clicking on this button will display the standard file selector for the current drive. Select a clip art picture file to be loaded in the normal way. The program can load seven different picture file formats as follows :- .PI3 Degas high resolution. .PC3 Degas high resolution compressed. .ART ArtiST public domain drawing program. .DOO Dr Doodle public domain drawing program. .IMG High resolution image files. .TN3 High resolution Tiny compressed files. .TNY High resolution Tiny compressed files. If a file with some other extension is selected, the program warns that it is not a recognised file format and gives the option to load it anyway. If the file is loaded it is stored and displayed as a straight binary file, this may show a picture or may not depending on how the picture was stored. Note that the file should not be larger than 33K bytes. If a .IMG file is loaded which is larger than the screen size, the top left corner of the total image will be displayed. The file selector can be used to change to a different drive or select a different folder. Note that if the picture files are in a folder (rather than in the root directory) this facility should be used to select the required folder. A picture in the folder should be loaded to set the path-name for the current folder. When the search or print facilities are used, only the current folder is used (see later). When the picture has been loaded the file selector is replaced by the picture image. To return to the main menu press the right mouse button. (2) Find clip-art picture. To search for a particular picture on the disk click on this button. A new form will be displayed which shows the current drive and the current folders path-name (if any). Click on CONTINUE to start the search sequence or CANCEL to return to the main menu. The pictures on the disk will be displayed one after the other with the filename shown in inverse video at the bottom of the screen. Press the SPACE-BAR (or left button) to pause on a picture and then the RETURN key (or left button) to continue the search or press the ESCAPE key (or right button) to return to the main menu. Note that if the mouse buttons are used they must be held down longer since the operating system does not store the operation as it does for the keyboard. If the pictures are being loaded from a hard disk (or RAM disk) the display time may be too short to see each picture properly. Pressing keys 0-9 will insert a delay between each picture load, 0 is the fastest and 9 is the slowest. If it is necessary to change the disk during the search sequence first pause the scan (by pressing the SPACE-BAR), change the disk and then press the RETURN key to resume the sequence. If the pictures are in a folder, the folder path-name should first be initialised by loading a picture in, as mentioned above in option 1. (3) Print current picture. The current picture can be printed by clicking on this button. The picture is printed out four times actual size, that is one pixel on screen is printed as four dots on the printer. If the PICTURE BORDER 'ON' button is highlighted, a border is drawn around the picture. See also options 7 and 8 for printer set ups. (4) Print all pictures. To print all or some of the picture files click on this button. The required drive should be first selected by clicking on the appropriate drive button. A form is displayed which shows the current drive (and path-name where appropriate). If the pictures are in a folder, the folder should be selected and a picture loaded in as described in option 1 above. The title of the disk should be entered, this name is printed (together with the filename) at the top of each picture, this title is also displayed on the main menu for reference. Now click on the 'SOME' or 'ALL' button, the screen is cleared and a form is displayed at the top of the screen together with all the valid picture files on the current disk. If 'SOME' was selected, none of the files are ticked and if 'ALL' was selected, all the files are ticked. In either case, clicking on a filename will display or erase the tick against the file. Select (or deselect) the files required and then click on 'OK'. The pictures which have been ticked will be printed out eight to a page in actual size, i.e. one pixel on screen equals one dot on the printer. For 9 pin printers the pictures will be slightly distorted due to the lower resolution of these printers as compared with 24 pin printers. The disk title and the filename of each picture will be printed immediately above each picture for easy identification. Note that if the PICTURE BORDER 'ON' button is highlighted on the main menu, a border line will be drawn around each picture. To abort the print-out press the ESCAPE key. Note that not more than 100 pictures should be present on a disk (or in a folder) or the program may crash. (5) Show current picture. Click on this button to remove the main menu and show the current picture. Press the right mouse button to return to the main menu. (6) Show in inverse video. Click on this button to invert the colours black and white. This only works for the current picture in memory and cannot be used when printing out all the picture files. (7) Set up defaults. To change the printer default settings click on this button. A form is displayed showing the RS232, handshaking and printer type options. If a parallel printer is being used it is not necessary to change any of the RS 232 settings. If a serial printer is being used, the 'SERIAL' button should be clicked on together with the required Baud rate, Parity mode and Handshaking mode buttons. When printing out the pictures, the left margin and the gap between the pictures can be adjusted by entering new values into the form. If these settings are only required for the current printing session, click on 'OK', if they are to be used every time the program is used, click on the 'SAVE' button. This will save the current settings in the ARTPRINT.INF file which will be written to the root directory of the current drive (first ensure that the disk with the ARTPRINT.PRG program is in the current drive). Note that if an ARTPRINT.INF file already exists, it will be over-written and if none exists, a new one will be created. When the program is first loaded, the ARTPRINT.INF file is also loaded in to set up the defaults, note also that the printer codes (see next section) are also saved in the ARTPRINT.INF file. The disk titles and filenames at the top of each picture are printed in condensed print and are in a fixed position on the line. The position of the pictures beneath can be adjusted with 'Left margin' and 'Central gap' fields. These should be set so that the pictures are printed directly under the title text. (8) Set up printer codes. If the printer being used is not a Panasonic KXP 1124 or 1624 click on this button to change the control codes sent to the printer (if necessary). Although the method of printing text and graphics data is fairly standard on most printers, the actual control codes to set up various facilities may vary slightly. Rather than use a printer driver system for every different printer this program stores its own printer control codes which can be configured for the printer being used. This does depend, however, on the standard Epson bit graphics mode for 9 and 24 pin printers, i.e. the graphics code followed by the number of bytes to be sent followed by the bit image data for the current line. The user should consult his printer manual for the relevant control codes as described below. Field 1 Printer name & number. The printer type can be entered here as a reminder of which printer the program is configured for. Field 2 Printer initialisation sequence. These codes are sent to the printer at the start of each printing session and are used to initialise the printer, set the top of form and clear the printers internal print buffer if necessary. It could also be used to set the print style for the picture headings if required. Note that the codes must be in Hex format only, this and subsequent fields will only accept hex characters and the space character. The codes may be separated by a space for clarity although this is not necessary. Field 3 Condensed print control code. The text at the top of each picture is set to condensed type otherwise it would be larger than the picture width. Field 4 Microline feed control code. This code is used to move the paper down by a few lines after the title has been printed so that the picture starts just under the title. The code is followed by the distance to be moved, (normally 5 microline- feeds). Field 5 Unidirectional print control code. This code sets the printer to unidirectional printing to improve the print out quality and ensure that the lines are printed exactly beneath each other. It is sent to the printer at the start of each graphics line. Field 6 Microline feed spacing code. This sets the number of microline feeds that is sent for each linefeed code and is always set to the number of pins, i.e. 24 (18 hex). For 9 pin printers the linefeed is set to 8 pins. Field 7 Bit image control code. This starts the bit image mode in 180 dots/inch (24 pin Triple Density) and is followed by the number of rows of dots (640) and then the graphics data. For 9 pin printers the bit image mode should be set to quad density or else the image will be too big. Some typical values for two printers are shown below, if no ARTPRINT.INF file is present the Panasonic values are used. PRINTER- Panasonic KXP1124 (24 pin) Microline MP192 (9 pin) Initialisation 18 1B 40 18 1B 40 Condensed print 0F 0F Microline feed 1B 4A 05 1B 4A 05 Unidirectional 1B 55 01 1B 55 31 Microline feed space 1B 33 18 1B 31 Bit image control 1B 2A 27 1B 5A As described in the previous section, click on 'OK' to enable any changes or on 'SAVE' to save the changes to disk. (9) Quit to desktop. Click on this button to quit the program. rename the file READ_ME.NOW as READ....NOW or READ_ME.!!! or READ_???.NOW. The computer does not allow for EVERY keyboard character to be used in a filename, and the list of unacceptable characters is too diverse to go into here. Simply choose a file to rename (something you don't care about) and experiment with different characters. DELETING A FILE --------------- This option allows you to wipe a file completely out of all exist`)(&o.|P + ЫЫ// Bg?<JNAO p a#3pMa#3Ap 0Q0a$a'a$33333a$.3a%a 3a'a#pa#>Bg?<LNA?<NN|fZ#pna#f3x# p4a"` ARTPRINT.RSC[3][ | SORRY !! | Resource file missing][ QUIT ][3][Printer is off-line][ OK ]a>3xpNa"za>aByBBy,By,B9,a6aA:\*.*a@Aahaa!a a a,6<aa T0a!l  B  8 P `a!3x#Fp4a!Nu[3][ SORRY| |This program only works| in high resolution.][ OK ]a|aatJ@g.aJ@kEa6|gakxa 3xpNa!A6\akX3xpNa!akBaTk:AarA6\C,09,a 0`a h3,3x#p4a ~ yg<`Ha`aH`Ha 6A,C6\0<@ Qa L`za`r[3][ Unknown File Extension|Select LOAD to load file or| CANCEL to abort][LOAD|CANCEL]TN3TNYPI3ARTPC3DOOIMGa`aa,a2|g>a 9,fLM A,a kg9,f ax`ab`,ah6<a#p6a:#3x3z3|3~33p*aaa"J@gA,aa `aaaaJ@gzAa6<aR6< a h Cf6<a~?6<I a6|g,a`>a6<a#3x3z3|3~3`3Hp*a6a 9,f6|f0<@aBja^aak a*`av6<a|#3x3 z3|3~p+a|gZ|fa6<a8#p6a#3x3z3|3~33p*adaav`3x#Hp4a@`aRa3x#p4a`[3][ Sorry|There do not seem to be any|picture files on this disk.][Oh Bother !***]aa:|faN`~aaa6<a$6<(a@A@ 6<aX0a$%aP`a`a@afa~`a `aRa a6<a6<aR@A@ 6<a|g"|g a`aa a"`a`apoaNuaa3x#Zp4a6<a@6<a `t[0][ARTPRINT program by :- | Peter D Hibbs, | 63 Woolsbridge Rd, | Ringwood,| Hants, BH24 2LX.][ Very Interesting !!]6<a6<aB3+6<a43+6< a&3,r6<a3,t6<I+a6< I+a6<a3,vNu6<a26<89+a6<89+a6< 89,ra6<89,ta6<I+ab6< I+aT6<89,vaNu6<a6<I+a6<I+a6<I,a6< I,"a6< I,6a6< I,Ja6<I,^aNu6<aZ6<I+a6<I+a6<I,a6< I,"a6< I,6a6< I,Ja|6<I,^anNuA+a,M ><A,JggaFgAC,a 8A,a :AJg~gXagnAC,a Aa a9,f.9,f"Qv0< a`f`h`9,f0< alNu,`A+a`Aa6<a6<a h Cf6<aa RNu3x3z#pR#V3Z"<*P0<NB09&y4<6<Ca QaX@6a NuH,6<a( f ,><6<Ca( gCa@g"aA:\*.*0aCALNu, y+f ,0< y+g0<??<!NNA @09,rXfC X09,tYfE d09,vZf?(0(<( *gE|m6<CJfDJ(f< (f>(D$H Ja0PC|gDf`aPQLNuH@BG<Jgv g@Bg<@@|PgGFg QJfLNu@@|PgGFgQ`@@|Pg GFgQ`Ha y,C,0<@ Q3,3#,a0<ax0<papABg a``0<aT0<qaLa HLNuHCBfLNu|0m"|9n/@03,By, NuC,0<|FQNu/ 0@AH`?<Hy?<NAXJLNuH`//?9?<@NA JLNuH`Hy?<;NA\JLNuH`aava@@A##pZa09g<9AaA f \fRC0< Q0<J@LNuH瀀AJf \g :g `*.*BLNuH3xpNaLaD@@3xp5aaNuH/<?<NALNuH`?/<?<NNAJ@LNuH`?<ONAJ@LNuHaN@A:?</?<GNAJ@LB((NuH`AJf g \g`BH Hy?<;NALJLNuH@aBdC <<:<6<3x3z#pR#V3Z"<*P0<NB09&y6a2Oe FQLNu `H`?<?<NMJ@g?<?<NMLNu0<`H@ o2SAXgXQ/HLNu P`Ha092949LNuHaJBfLNu?aJBg4NuH3arLNuHaxLNuH?<%NNTLNuCR2@ A*hp222BQ"<*P0<NB09NupBy3 a\3NuByByp`4pd3`ByBype`pByBy`p`pwBy3Bya09Nupx`330<`pBy`p`p `prCg2Rj33p`33pg`n3Bypr`Zp`p33BBBy`|3Byp`h3BypBBy`J33p`633p`"3Byp`p3By3p `p `prCg2Rj33p `By3p `jBy3p`VBy3p`BBy3pq`.3ByByp`By3p`By3pl`By3p`3ByByp`By3p`3ByByp `By3pk`|By3p `hBy3p`TBy3p`@By3pj`,By3p'`By3p`By3p`By3p`By3ph`Bypp`33pm`33py`ByBypn`~3Bypi`jByBypv`XBy3pz`DByByp{`2ByByp|` ByByp}`ByByp~`ByByp`ByBy0<`By3pf`By3p`ByByp#`ByByp$`ByByp%`xByByp&`fprCg2Rj3Bypt`@By3pu`,By30<`ByBy0<`33"<+0<sNBNu5518 1B 40 Panasonic KXP1124 0F 1B 4A 05 1B 55 01 1B 33 18 1B 2A 27 R\x . " .~ 2r   & & (&H(       ,   <0  *" >  2&"     0, $ (   <&, 2*jt2, &h P &h ,(:*  FJd &J      60                                           bcreen). An alert box will appear asking if you would like to specify the number of lines per page. If you select NO, the contents of the buffer will be printed out from beginning to end without any line formatting (or exactly as it appears in the window). If you select YES, a second alert box will prompt you to specify whether you want more lines per page than is specified in the alert box  $ ">PRINT CLIP-ART FILESEnter title for clip art files below.Click on ALL to print all picture files.Click on SOME to print selected files.________________Disk title- ________________XCANCELSOMEALLCurrent drive and Pathname________________________________________CLIP-ART PRINTING PROGRAM by Peter Hibbs 1991Title-________________Version 1.2 Oct 1991Load clip-art picturePICTURE BORDERONOFFFind clip-art picturePrint current picturePrint all pictures Set up defaults Show current picture Set up printer codes Show in inverse videoQuit to desktop Select current driveABCDEFGHIJKLMNOPSEARCH FOR PICTURE FILESCurrent drive and PathnameAbort-Press ESCAPE or right mouse buttonPause-Press SPACE-BAR or left mouse buttonCONTINUECANCEL________________________________________Continue-Press RETURN or left mouse buttonSpeed-Press buttons 0 (fast) to 9 (slow)PRINTER DEFAULT SETTINGSPARALLELSERIAL9 PIN24 PINRS 232 Set UpsBaud Rate960019200480024001200600HandshakingNONERTS/CTSXon/XoffEVENODDNONEParityLeft margin-____9spacesCentral gap-____9spacesClick on SAVE to savein ARTPRINT.INF file.CANCELSAVEOKTo drive-LIST OF PICTURE FILESAll ticked files will be printed, click on required files and OK.OKCANCELPRINTING PICTURE/SPress ESCAPE to abort print-outPrinter name & numberSET UP PRINT CONTROL CODES__________________________________________XEnter printer control codes in hex format onlyPrinter initialisation sequence-____________________________________nCondensed print control code-____________________________________n____________________________________nMicroline feed control code-____________________________________nUnidirectional print control code-____________________________________nMicroline feed spacing code-____________________________________nBit image control code-Click on SAVE to save set-ups in ARTPRINT.INF fileCANCELSAVEOKTo drive-$9:5ef0qqtwEXY+>Qq)<On ,  ;%a(&         ( 221 gn N                0  F  \ # 1r   "!%"(#+1. 0 j    ,( *1 : A( j *  ((.             $ ) - 9> F    OTX]d   y   !  " #$%&'&(   ALA;E%>:(  Z 5z    ..   J"S  f"  "   " " " Q  "    2",   A  Zb:ibilities. -=-=-=-= EPILOGUE -=-=-=-= It is possible that not every contingency has been covered in this manual. If this is the case, please bring it to my attention as soon as possible. If necessary, the manual will be amended to reflect these changes. If there are any features which you would like to see added, any comments you wo.  `~.. MANAGER ACC ͪ2<MANAGER RSC Ъ2 `7^xOA9"HN o"h###BbBy֝N/,HNVN6pA-H"n p)r AfH"n N42$n / ?Hy?N-XpHy?N-XplHy?N-X09@Hy?N-X/9J?</0|AeNrAJ@gNpHy?N-XpCHy?N-XpHy?N-Xp Hy?N-X`JpHy?N-XpCHy?N-XpHy?N-Xp Hy?N-X/9J?<0|AeNrAJ@g&pHy?N-Xp2Hy?N-X/9J?<0|AeNrAJ@g&pHy?N-Xp0Hy?N-X/9J?<0|AeNrAJ@g8pHy?N-XpAHy?N-XpHy?N-X/9J?<&0|AeNrAJ@g8pHy?N-XpEHy?N-XpHy?N-X/9J?<%0|AeNrAJ@g8pHy?N-XpEHy?N-XpHy?N-X/9J?<$0|AeNrAJ@g8pHy?N-XpEHy?N-XpHy?N-X/9J?<*0|AeNrAJ@g^09>y@]ÄC09>y@WÄC09@|^ÄC09>|^ÄCBdBy@pP3>p3<09P|r|AfBy@p3<09N|r|AfpP3>p3<09NR3NNV09Br;Af,NC6O$O:p9Q?<N 3D/9JNN^,_Nu[3][ | Printer is now set. ][ OK ]/,HNVN6pAh-Hp@d\?<BgBgBgp/BgBgBgBgBgBgBgBgBgBgHnHnHnHnHnHnHnN!=@0.r(AfN`N^,_Nu/,HNVN6pA^-HCO$O p QN@e8C:O$O&p%Q?<N 3DN6 yNN^,_Nu[3][RSC Data not found ][Oh Sh*t]MANAGER.RSCA0B1|A01|AV#N$>3H09HJ@k8CDEJ p Q?9HHyJN3FNNbHyN,BgNA NEC ManagerNu/,HNVnN6pAL-Hp. R@rA Hn N'-@r?<nHnHnzHnrHnnN&0.zJ@V=B0.N^,_ _ON/,HNVnN6pAD-H=n=n ?<pHnHnzHnrHnnN&0.zJ@g -nn`B .N^,_ _XN/,HNVN6pA-H"n / Bg?.Nz"_"N^,_ _\N/,HNVN6pA-H"n / Bg?.NF"_"N^,_ _\N/,HNVtN6pA -H?<oHnHnHnxHntN&N^,_NuNu/,HNVtN6pA8-H=n0. rA=@-nx?<HnHnHnxHntN&N^,_ _PN/,HNVtN6pA2-H=n p=@-nx?< HnHnHnxHntN&N^,_ _\N/,HNVtN6pA0-H=n Bn-nx?< HnHnHnxHntN&N^,_ _\N/,HNVN6pA*-H/.?. A O"Op?"QBgBgN N^,_ _ON/,HNVnN6pAL-H"n $n p*R@r=n"n / N'-@r?<#HnHnzHnrHnnN&0.N^,_ _\NNu/,HNVtN6pAV-H=n=n=n=n=n=n=n=n=n ?<3HnHnHnxHntN&N^,_ _ON/,HNVnN6pA@-H0. J@jBn =n -nr?<2HnHnzHnrHnnN&=nz0.N^,_ _\N/,HNVN6pAp-H/.BgHnHnHnHnNBgBgBgBgBg?.?.?.?.N/.Bg?<?.?.?.?.N/.?. N(=@0.N^,_ _\N/,HNVN6pAB-H/. BgHnHnHnHnN?<BgBgBgBg?.?.?.?.NRN^,_ _XN/,HNVtN6pA&-H-n x?<6HnHnHnxHntN&N^,_ _XN/,HNVN6pAR-HBn"n0.r1JAg*"n 0.R@$n2.t20.R@=@`"n 0.@N^,_ _PN/,HNVN6pAz-H"n Jfp. R@?"n / N!p=@p. =@0.nn&"n $Q0.S@2.tA 0Rn`"n $Qp. rN^,_ _ON/,HNVN6pAv-H"n0.-I"n0)rAW"n0)r AWÄC"n0)rAWÄCBd("n / AO"Op?"QN`"n0)rAW"n0)rAWÄC"n0)rAWÄC"n0)rAWÄCBd"n$i -J"n0)rAW"n0)rAWÄCp."ni\CBd"n0)S@@"n Jf"np.R@3@"n/ AO"Op?"QN"n0)rAW"n0)rAWÄCBd"n3n "n3n N^,_ _O N/,HNVN6pAT-H"n0.-I"n0)rAW"n0)rAWÄCBd"n$i /"n / N`N^,_ _O NNu/,HNVxN6p=n=n -n|?<(HnHnHn|HnxN&N^,_ _PN/,HNVxN6p=n -n|?<rHnHnHn|HnxN&N^,_ _\N/,HNVxN6p-n|=n=n=n=n=n=n ?<*HnHnHn|HnxN&N^,_ _ON/,HNVN6p"n0. =i 0.N^,_ _\N/,HNVxN6p-n|=nBn=n=n=n=n=n0. rA=@?</HnHnHn|HnxN&N^,_ _ON/,HNVN6p/.?.HnHnHnHnN/.?.?.?.?.?.?.?. NDN^,_ _O N/,HNVN6p"n0. =i0.N^,_ _\N/,HNVN6p"n0.3n N^,_ _PN/,HNVrN6p-nv=n=n=n=n ?<+HnHn~HnvHnrN&=n~0.N^,_ _O NNu/,HNVtN6p/.?."n/ "n/ N b"n0.-It"n$nt2"n $nt2"nt0) rAJ@g:"n$n0W@2"n$n0W@2"n$n0\@2"n $n 0\@2N^,_ _ONNu/,HNVxN6p=n-n|?<,HnHnHn|HnxN&"n2"n 2N^,_ _ONNu/,HNVN6pp.R@rAHnN'/?. N%=@0.N^,_ _ONNu/,HNVN6pA-H=nF=n@=nD=nB0.:rA=@=n8=n6=n4=n20.0rA=@=n. =n, =n*=n(=n>=n<-n$?<HnHnHnHnN&=n"n2"n2"n2"n 2"n 2"n20.N^,_ _O/LNuH _0@"_24BAAc1V`t>/LNuH _02S@AC2YQ/LNuH _02S@AC2YQ/LNuH _02S@AC2FAYQ/LNuB9`PBy9 _0g$_jp"_// HN,LJ@fP)J9f" f |` f|` f |` f|`4<G BQB) @ef *:f^&Jrt `e QG,dtWJBk4G,|3 J9f g g`> g8 fp@`*S@rG   e gRAQJ9g`tJ)f8a J9g| _0< Hy,N%f|#|3|Nu )bJ) g )g )g ) f J9fgHBNu|/ BgHi ?<ANA>3|NAXNu _4` _t6 Bo r aSB`2aNH?/, _r ar a/L?/,Nu _r aN _4` _t"x0HgJJjDxvC/lzp cRЀ`|e W0R"f`6 _4` _t2xJAjDAxvC/lp0 2H@0RJAfJg<-RBlCSBr aQSCaQN _4v` _46"_JBjtClBSCr aQSBk aQN _v` _60@d C.t`C.tClBSCr aQSBavQNFALSETRUE _6kfv2_t Cc"4YBv` _6kfv"_t Cc4QBvSBkr a(QSCC" A0 9c^a JgYC`NH /"oA/ N/lL /NuBy9(_ _/ C( g  f,t4(H / /?(?<@NA LJkffNu4(SBraQNu(gN fH ??<NAXLNu f H ??<` f H ??<` f NuHy0W` Hy000< LN%fREWRITE required prior to WRITE or PUTDisk or directory fullBy9(_ _/ C (g ( fxJ(f t4($IH / /?(?<?NA LJk,g*fJg  f"J` g  Wf NuJgJ(f P Nu!|Nu4(SBa@J(f8Jg. fJ(f"gr W1Agp f W1A1AQNu(gVJ(fD f&H`?<NAT f?< ?<NAXp LNu fH`?<NATLNuHy10<` Hy10< LN%fReset required prior to Read or GetAttempt to read past end-of-file Nu#3 _ ged 93NHy3`Hy3N%|t`t _"_0gR@| e.G3$S" ghjebb"*f&"`v&A%S"`l&J`ذ|gb*|f8"93g0$A#3`""93g$A#3`"93g $A#3"`"E&R"$b Hy3N%|Jgr"QHd2S@k"QN _"_0" ged gR@ @mz @ e@E3"fB3@B$`\&A2+@ef "'I`F"3@B$`8$K`ư|f"3#3` |f"3#3` "3#3NHeap overruns stackPointer NILPointer not in heapH _0"_e /LNuHy68N%|/B9/|NuH _0 @f0"|p` "_J@jpEr4@ BbBS@kQ/LNuH _4SBkt82$_rAdd0 @f0"|p` "_J@jp6ADb6CG0IS@k$eQ/LNuH _4k2SAk0"_p6B@bE0)CS@kQ/LNuH _2$_r0 @f0"|p` "_J@jp@kS@kv&J$IRC4(K Vg RQBg`?/LNuH _4kF2SAk>0 @f0"|p` "_J@jp6B@bESBkQ/LNuString overflow _ hNVf 0(gr"OD@Hd2S@k "Q` _"ye Hy6N%|N## .f -|6`-|6 nNнf yNStack overruns heapH? _z gBjDRE"g8jDRE$6HBJBg8HAJAf,HBJBf$ւi EdD.` $HB8`B/L?Nu0NvDNH|` H| _z f0NjDRE"g`jDREdJgR(`DfxJg<`DxSDbb JgHA8`"tcRЀ`xeWJg(MdD.`B/LNu099Nu _39NBy9Nu[3][][ Abort ]Copyright 1986, CCD and OSS, Inc.  $"6"$.Z|r                                                                          (L     ,NT*$&@"$*.444":42,0X<"$>,$8(l*lr,&D0T>0,8&&, $LD"2 T &( 0&  >        ,*< * * , , 0 , " HB@6 2J X D2 T  <   , FR ( *@ B @ B V  r}9L'am=G-#/vR㔳j&[qU,|@e+g (hQ/aX'pST9.#:C;ܗTOdr<Cgg<}j|ԥ'q=Li˦j^~@:jލׂ+bkk-A(w<|АVȦe }@j˳ a~US!(bUҰ=V5\)}@hTT?=tkkkA|ةѰ(f}- b@BC}j=<ǛjN?TbKh~U?C(qS| w~<|}Bҥ2<j 5W~@V=*\܍*Da*{w!վztDt7MGa;5l"DR1qlKN ~Mվ}l߬+z8<:NT_署"x咐 t+{*+QI7|;'h%BOQے3FbT?B6 lH ,a1M,DsXMG2AlM>FfS?B}|{VtṾ aØ^xlך 9U-:jZNU,-~"\` zt/`NwJ؃=W^JU(qVilG4^K M,DsXMG2DlHʪFfM?BS)FLex4׼РMP_u_c)˧eYTx:dx5\lA?Z‚1Xn_`JډJ؃=fWѻ:瑐 +{*~PTP**$T =  Pinwriter ManagerCOPYRIGHT BY ANDREAS PETERSHighLow OutTYPE Mixed Black RedTurq'sViolet GoldOrangeGr'nBrown///LINESPACING ItalicGUSAFNATIONALITY Bold x x xChar Width Underlined  xChar Height  xProportionalIBMNo End Tracked Cond'd000Left Margin: ___999080Right Margin: ___999Margin Select Jump Centre Right Left Set! Quit! A>>>~~| |`@>>x??  |< J6RSbop () Y]nrv!E A $* 8 F T < QA  % T Y ^p q& 9  z            % &"!% ! #& ($'%%&'# ) &-*, %+ , )* ..&/; 0?  1F 2R&534 %42;6:& 74 89:5< '  Pa hMxهt t5ћ ?yt"fNn! =_fk(rs_:h(ezL?f=WEOoIC}B稁*︺=`{W_zU۵ -P+!/qXy&xzs[ӅxH#Փ.}Eb?`Mx /ەǣ*{_b*%U+p'+ou(vsl\i_<~e/yÔ$쭱:M1{E%Ӑ ;{"w ՆƗza?us۞{ 7|STDa.  `.. PRINTER ACC 82"PRINTER CON ;2~PRINTER RSC =2<` %N NK mNf]` m"m -So Q m -SBQ(m)MO*mNN2?<NDH?<A?<NAX <B@SfLNuNVHlNxX @fHl ?<Nt\0<f`HlDBgBgNfPN^NuNVBg?<?,F?,H?,J?,LBg?,D/,DNBg?<?,F?,H?,J?,LBg?,B/,DNZBg?<?,F?,H?,J?,LBg?,:/,DN2Bg?<?,F?,H?,J?,LBg?,/,DNN^NuNV/ &nS R @P.||am .||zn.||A|a`.|@.||am .||zn.||A|a`.|@.||Am.||7` .||0.||Am.||7` .||0A n |&_N^NuNVH&n`||$flRHn/ NPV><`4Hn/ NP.|.|HAH҈ A|VRG||*f0S@.|AH||+flRHn/ NpPV><`4Hn/ N\P.|.|HAH҈ A|VRG||*f0S@.|AHR||#fLN^NuNVHBG`"0AH02AI|RG GmBG`0AHBRG GmBgHl^?<=NNP< Fl?<N T`?<?B?<BN& -@Bg?B?<BN f ?<N T`X/.?<HN\&@f ?<N hT`4/ /.??<?N ??<>NX/ NX/ ?<IN\LN^NuNVBn?<NT=@`DBg?<NX0.f Hlj?<N\=@ nf0<`@?<NDT=@Rn nl0.g nfHl?<N\0<`0<N^NuNV?><`*. |HAHЈ @|??<NXRG0. |AH|Ao>N^NuNV?><`*. |HAHЈ @|??<N~XRG0. |AH|Ao>N^NuNV?<NFT0,D|g` BgN2T`@`|g`?<NT`*`|g`?<NT``| g` ?<NTN^NuNVNTJ@g*N0,>|| ?NT0,@|X@?NTN^NuNV l:f ?<NT` ?<NT0,B| g` BgN|T`@`| g`?<NfT`*`| g`?<NPT``|g` ?<N:TN^NuNVH>.<. A-HBE`0RE n EmBE`*0<02H HAA2<E n0H >RE El Gf0gNrBE` nH?NTRE Em0gNLN^NuNV. ||/g`. ||*f. l/,DN?<?<?,F?,H?,J?,LBg?./,DN9n>`8`|g|g|g`^?<Bg?,F?,H?,J?,LBg?, `~HnNX n(fj0.nf^?<NTHlFHlHHlJHlL/,DN0,F|?0,H|?0,J[@?0,L[@??<?<?<?<BgN4?,F?,H?,J?,L?<?<?<?<?<N?<?<BgBg?<Bg/,DNHN=@?,F?,H?,J?,L?<?<?<?<?<N0,F|?0,H|?0,J[@?0,L[@??<?<?<?<?<NvBgNTB?<N8\ nfN& nfNNBBgN\0<f~N^NuNu)Iڀ)J|"/0<NB"lڀ$l|Nu NV9n:0.| A" AA-H=|` nR2.A:H0Rn nm/,N.X0,N^NuNVA:)HA)HA)HA)HA)HA)HA)H?< NXT9l0,N^NuNV)n?<N6TN^NuNV9n9n ?<NTN^NuNV9n)n ?<#NTN^NuNV)n9n 9n9n9n9n9n?<*NTN^NuNV)n9n 9n9n9n9n9n9n9n?</NvTN^NuNV)n9n ?<2NXTN^NuNV9n9n 9n 9n9n9n9n9n9n?<3NTN^NuNV9n)n ?<4NTN^NuNV)n?<6NT n 0 n0 n0 n00,N^NuNV?<MNT n0 n 0 n0 n00,N^NuNV9n)n ?<NNbTN^NuNV)n)n ?<ZNDT n00,N^NuNV9n?<kN TN^NuNV)n?<nNTN^NuNV9n9n 9|B?<pNTBlB n 0,N^NuNV?.NT nn0<`?.?<>NX9@۴g0<`0<N^NuNV?.?<LNXN^NuNV/ A&H`0+ |g/ N*X A"Ҽm?.NT&_N^NuNV/ &n/ NDXJ@g0<`00+ |g /+NXBk ?+ N,TJ@g0<`0<&_N^NuNVH&n0+ |f0<`.0+ |gV0+ |f0<`v0+ |g?<B?+ NhP?/+?+ NP @f0<`@k 0Hѫ`$ k o?<0+D@H/?+ NP'@&Bk0<LN^NuNV nl <`?.?./. ?<BNn -@ m .`?<?.B?<BND -@?<?.B?<BN* -@ nf .Ю -@ `$ nf .Ю -@ `0.g <`b . oHn . /?.?<@N Bg?./. ?<BN ]|9@۴g <` `Bl۴ . N^NuNV/.?<INr\N^NuNVBn`&0.Aڄ0nf0.AڄBPRn nLmN^NuNV?>.=|0Aڄ"HPgXHf0(>N^Nu)Iڀ)J|)_xNA"lڀ$l|/,xNuNVH0&n$n -K`fS`f .`L N^NuNV n "n fN^NuNVH0&n$K`Rf `L N^Nu)Iڀ)J|Hl)_dHld" <sNB"lڀ$l|NuNV)nh)np .мZ)@t9|dBl9| n 9PN n 0A)HhA)HpA)HtA)HlN^NuNV`4 nH| f?< ?<NX nRH??<NX0. Sn J@fN^NuNV` nRH??<NvX0. Sn J@fN^NuNV` nRH??<NHX0. Sn J@fN^NuNVH0&n $KA-H nf?./ N4\=n`L nf?./ N`\=n`. nf?./ Np\=n`-KBn?.NTJ@f`H| f |o@ H-@/./.?.?<@Nr 9@۴Hg0<`0,۴n/./<?.?<@N< 9@۴ @g0<`tRnR -@`R ned` 6.ƼЃ$@ H-@/./.?.?<@N 9@۴Hg0<`0,۴nBl۴0.L N^Nu9|D9| B9|@9|!>9|<9|:9|'8C"2"2 2"2"2"22"2"2"22"2x9|NuPrinter.rsc[3][ Can't load | PRINTER.RSC | ][ Quit ]PRINTER.CON[2][PRINTER IS OFF-LINE. |Please check ][Re-Try|Cancel][3][Load Abandonded !|Printer is Off-Line! ][Cancel] : [1][Mir fehlt leider der notwendige | Speicher !][Sorry]:*.*[1][Dateien fehlt ][Okay][1][Data Clear][Okay][1][Kein Speicher mehr da][Okay][1][Andere Fehler ][Okay] Printer UtilityCON:AUX:PRT: :-?Uʹ$}l /=<컦W򵻲"* ͑{VI5s:Ȣs-0-tMG?jf?W_cR6l"ߍ-m,`"e m=U 2# [I&'!\H;61 =W ѽ1$ kX"dx]I?}3F#,Sz$—S_b':}`(țm)>uʐ~ ~C*: y3khO|KNvۖٶIbaː3Gz&˜!;{ob 7wnG /g5ʐeK*K#S[{j׷b\ab̜bX4U=hnD?jT["Dy~^\SQ\cc~1<`XG p/gpu=GRS -0*(_$8, N3/N^NuNV>,X?9.?9.?9.BgN":P3/>,X?9.?9.?9.?9/N"tP.,/<./<./<.?<?9/N"N^NuNVN.,V/<./<//</N 3,.%?9/N!&T3+P.//<//<0/<0?<BgN".%N!J@f.%?<N xT..BgBgN"XJ@f.%?<N xT..BgBgN"X.,X/<./<./<./9.N aN^NuNV`.,/<,/<,/<,/<./<-BgBg/<,BgBgBgBgBgBgBgBgBgBg?<?<?<?<N83+R9+SgN09,`@09,y+Pf.aaa6>/N">/N">,Nr``|(g`BN^NuNV..BgBgN"X.,X/<./<./<./9.N >,X?9.?9.?9.?9,X?9.?9.?9.BgN  y$f8>?<?9,X?9.?9.?9.Bg?</9.N!>,X?9.?9.?9.?<Bg/9.N!H>,NBW?<2NT>.a8.$09/k??<X?9,N\.?<HNT#/./aF.&09/??<?9,N\.$09/??<L?9,N\.&&09/??<?9,N\>,NBy/`4BW/9.NX3.09.`a>?<?9,X?9.?9.?9.Bg?</9.N!3$`aZ>?<?9,X?9.?9.?9.Bg?</9.N!3$`a>?<?9,X?9.?9.?9.Bg?</9.N!3$`< y$o:>Bg?9,X?9.?9.?9.Bg?< /9.N!` y/f`>Bg?9,X?9.?9.?9.Bg?< /9.N!>?<NT>P?<NTBy/`>?<?9,X?9.?9.?9.Bg?< /9.N!>?<NT>M?<NT3/`* y$o:>Bg?9,X?9.?9.?9.Bg?</9.N!` y/f>Bg?9,X?9.?9.?9.Bg?</9.N!>?<NT y$f>x?<NT y$fBW?<NT y$f>4?<NTBy/`>>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT y$f>x?<NT y$f>?<NT y$f>5?<NT3/` y$o:>Bg?9,X?9.?9.?9.Bg?</9.N!`X y/f>Bg?9,X?9.?9.?9.Bg?</9.N!>?<NT y$f>5?<NT y$f>I?<NT y$fBW?<NTBy/` >?<?9,X?9.?9.?9.Bg?</9.N!>?<NT y$f>4?<NT y$f>I?<NT y$f>?<NT3/`  y$o:>Bg?9,X?9.?9.?9.Bg?< /9.N!` y0fP>Bg?9,X?9.?9.?9.Bg?< /9.N!>?<NTBy0` p>?<?9,X?9.?9.?9.Bg?< /9.N!>?<NT30`  y0fn>Bg?9,X?9.?9.?9.Bg?< /9.N!>?<NT>W?<NTBW?<NTBy0` >?<?9,X?9.?9.?9.Bg?< /9.N!>?<NT>W?<NT>?<NT30` 0 y/f>Bg?9,X?9.?9.?9.Bg?< /9.N!>?<NT y$f>H?<NT y$l>F?<NTBy/` >?<?9,X?9.?9.?9.Bg?< /9.N!>?<NT y$f>G?<NT y$l>E?<NT3/`  y,Zf`>Bg?9,X?9.?9.?9.Bg?</9.N!>?<NT>2?<NTBy,Z` >?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>0?<NT3,Z` J>Bg?9,X?9.?9.?9.Bg?</9.N! y$n Zy. y_.o3_.>.a ".$09/k??<X?9,N\`>Bg?9,X?9.?9.?9.Bg?</9.N! y$n|[y.Jy.lBy.>.a .$09/k??<X?9,N\`6>Bg?9,X?9.?9.?9.Bg?</9.N! y$n>?<NT>l?<NT>.?<NT` y$f:>Bg?9,X?9.?9.?9.Bg?< /9.N!`z y,~f`>Bg?9,X?9.?9.?9.Bg?< /9.N!>?<NT>T?<NTBy,~`>?<?9,X?9.?9.?9.Bg?< /9.N!>?<NT>S?<NTBW?<NT3,~` y$o:>Bg?9,X?9.?9.?9.Bg?</9.N!`Z y/f`>Bg?9,X?9.?9.?9.Bg?</9.N!>?<NT>O?<NTBy/`>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>N?<NT>?<NT3/`|a y$ml>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>V?<NT>1?<NT`a y$m>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>V?<NT>2?<NT`a y$mt>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>V?<NT>6?<NT`a y$m>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>V?<NT>5?<NT`a y$m|>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>V?<NT>3?<NT`a y$m>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>V?<NT>4?<NT`a y$m>?<?9,X?9.?9.?9.Bg?</9.N!>?<NT>V?<NT>0?<NT`>Bg?9,?9.?9.?9.Bg?</9.N!> ?<NT`>Bg?9,?9.?9.?9.Bg?</9.N!.$?<N xT`>Bg?9,?9.?9.?9.Bg?</9.N!Jy0f.30,v`>,v?<NTRy,v y{,vm`X30,v`>,v?<NTRy,v y:,vm3A,v`>,v?<NTRy,v y[,vm> ?<NT> ?<NT`>,X?9.?9.?9.?9,X?9.?9.?9.?<N 3/>Bg?9,?9.?9.?9.Bg?</9.N!``W@|b@0@$ PN y/fN^NuNV>Bg?9,X?9.?9.?9.Bg?</9.N!>Bg?9,X?9.?9.?9.Bg?</9.N!>Bg?9,X?9.?9.?9.Bg?</9.N!>Bg?9,X?9.?9.?9.Bg?</9.N!>Bg?9,X?9.?9.?9.Bg?</9.N!>Bg?9,X?9.?9.?9.Bg?</9.N!>Bg?9,X?9.?9.?9.Bg?</9.N!N^NuNV>Bg?9,X?9.?9.?9.Bg?</9.N!>Bg?9,X?9.?9.?9.Bg?</9.N!>Bg?9,X?9.?9.?9.Bg?</9.N!N^NuNV0.H =@ n lp ` 0.H|0$0. n0.H|0$B9$N^NuNVH../</.NPP,/</NPlp ` H|0$/<B@/.NPP,/<B@/NPB@lp ` H|0$/</.NPP,/</NPlp ` H|0$/<'/.NPP,/<'/NP'lp ` H|0$/</.NPP,/</NPlp ` H|0$/<d/.NPP,/<d/NPdlp ` H|0$/< /.NPP,/< /NP lp ` H|0$ .H|0$B9$JLN^NuNV3e/By/By/3/NN^NuNV3 ,3 ,Bn nH|2n*P2RRnJ@f3/3/Sn3/3/NN^NuNV3{/By/By/3/NN^NuNV#*8#*@ .мZ#*D3d/By/3 / n 3/N n 0/#*P*8#+V*@#-*D#,* aF3//pN^NuNV>a*pN^NuNV3.3 />NN^NuNV3.3 /3 /3/3/3/3/ 3/ 3/3/3/3/3 /3"/#$/3(/3*/>N n,0/ n00/" n40/$ n80/& n<0/( n@0/*B@09/N^NuNV#/3 .>2NN^NuNV3.3 /3 /3/3/3/3/ 3/ 3/>3NN^NuNV3.# />4NN^NuNV#/>6N n 0/ n0/" n0/$ n0/&B@09/N^NuNV>MN n0/ n 0/" n0/$ n0/&B@09/N^NuNV3.# />#NN^NuNV#/3 .3/3/3/3/3/>*NN^NuNV#/3 .3/3/3/3/3/3/ 3/ >/NN^NuNV#/>nNN^NuNV3.3 />pN n /B@09/N^NuNV3.3 /3 /3/3/>dNN^NuNV3.3 /3 /3/3/>eNN^NuNV3.>fNN^NuNV3.>gNN^NuNV3.3 />hN n 0/ n0/" n0/$ n0/&B@09/N^Nu % fN ,  , LVn^fPh[0][This accessory is included|with LabelMaster. It is not|required to use LabelMaster.| Author: Norm Richards][ OK ] Printer SetupPRINTERS.RSC[3] [Bad copy? |PRINTERS.RSC| couldn't be found!] [Cancel][3] [Fatal error!! |Resource File not OK.][Cancel]Available memory:bytes*        *                                                                                                         8            zf  $                 rQf<\+ )?n<"dn!=Co]"=lbXG}@Ѷ̅' ;PH>C#}CR \1D~@:̐ I8G#:VxC3iIa w̧Bݸې :*:瑐 j>I(x7(u}Z/x 7}B?~:?smG:-?AD(u}Zo\w BCi˦jL~@:_m^;bWӹV \ 2"ZM This accessory is very handy for sending special printing control codes to the printer for different type styles and to change the left margin setting. The default mode is for the Epson FX-85/185 and will also work with a variety of other printers. The Star SG-10/15 is also supported when the IBM mode is set on the printer. Codes for some printer functions are also available for the Canon PJ-1080A. In order to send printer codes, be sure that the printer is on and that it is on line. Remember that if the printer is turned off you will have to send the codes again to continue the previous setting. When a function box is black, that particular function is selected. ~sJ=(뛵KGp/%+ "`ꊛ٢Eّ ;T_!?,X[z\-%A3(3}Ephծ&/s= hnD?jT["Dy~Z SQI#Y1(n}iMP!g C%*#@26hBA]%Ejfas68 -l -u epson.s cp68 saver.c saver.i c068 saver.i saver.1 saver.2 saver.3 -f rm saver.i c168 saver.1 saver.2 saver.s rm saver.1 rm saver.2 as68 -l -u saver.s rm saver.s link68 saver.68k=apstart,saver,epson,osbind,vdibind,aesbind rm epson.o rm saver.o relmod saver.68k epson.prg rm saver.68k wait = ƇT2䓅**DX[zA-˭b\aֹ?Q߄ 7?HT=*Fm^ 2\ccTCARwկdх M}I䒅"O8&-}nx?`L0B@?/6=2:HT.x՟a+?*ym( w bȥ s7ە K1u0% S}-{<`X< NOTE: Link with INSTALL.S <--- */ /********************************************/ #include #define HORIZONTAL 0 #define VERTICAL 8 extern scrdump(); /* The printer driver code */ extern int gl_apid; /* ID of our accessory */ int contrl[13]; /* Idiotic bindings */ int intin[128]; int ptsin[128]; int intout[128]; int ptsout[128]; int fresult,fbutton,mexit,prtmode; long bcount; char menuname[] = " Printer Driver"; /* Name in desk menu */ /*********************************************/ /* Our miscellaneous form_alert strings */ /*********************************************/ char intro[] = "[1][DEGAS\277 Printer Installer|by Tom Hudson| |\275 1986 ANTIC Publishing|Version 1.0][Horizontal| Vertical ]"; char instOK[] = "[1][Printer driver installed][ OK ]"; char cantopen[] = "[3][ |Can't open driver file!| ][ Sorry ]"; char notpd[] = "[3][ |That is not a printer driver!| ][ Sorry ]"; /*********************************************/ /* Start of desk accessory code */ /*********************************************/ main() { register int i,j,handle; int menuID1,mgbuf[8]; char defpath[64],workpath[80],filename[20]; /*********************************************/ /* Initialize the desk accessory application */ /*********************************************/ appl_init(); /*********************************************/ /* Install our accessory name in menu bar */ /*********************************************/ menuID1 = menu_register(gl_apid, menuname); /*********************************************/ /* Loop forever looking for startup call */ /*********************************************/ for (;;) { evnt_mesag(mgbuf); /* Wait on a message event */ /*********************************************/ /* We are being called! */ /*********************************************/ if (mgbuf[0] == 40 && mgbuf[4] == menuID1) { for (;;) { /*********************************************/ /* Display configuration alert box */ /* prtmode sets either normal (horizontal) */ /* or Alternate (vertical) modes. */ /*********************************************/ mexit=form_alert(2,intro); if(mexit == 1) prtmode=HORIZONTAL; else prtmode=VERTICAL; /*********************************************/ /* Build pathname with *.PRT extension */ /*********************************************/ defpath[0] = Dgetdrv() + 'A'; defpath[1] = ':'; Dgetpath(&defpath[2], 0); strcpy(workpath,defpath); strcat(workpath,"*.PRT"); filename[0]=0; /*********************************************/ /* Use file selector to get the driver file */ /*********************************************/ fresult=fsel_input(workpath,filename,&fbutton); /*********************************************/ /* If file was selected, grab info! */ /*********************************************/ if(fresult>0 && fbutton==1) { trunname(workpath); strcat(workpath,filename); /*********************************************/ /* Attempt to load the printer driver file */ /*********************************************/ handle = Fopen(workpath,0); if (handle >= 0) { bcount=Fread(handle,2000L,&scrdump); Fclose(handle); /*********************************************/ /* A driver file must be 2000 bytes long! */ /*********************************************/ if(bcount!=2000L) { form_alert(1,notpd); break; } /*********************************************/ /* Install the driver, everything's GO! */ /*********************************************/ install(); form_alert(1,instOK); break; } else /*********************************************/ /* Can't open the file, pal! */ /*********************************************/ { form_alert(1,cantopen); break; } } else { break; } } } } } /*********************************************/ /* General-utility string concatenator */ /*********************************************/ strcat(to,from) char *to,*from; { while (*to) ++to; while (*to++ = *from++); } /*********************************************/ /* General-purpose string copier */ /*********************************************/ strcpy(to,from) char *to,*from; { while (*to++ = *from++); } /*********************************************/ /* General-purpose string length test */ /*********************************************/ strlen(string) char *string; { register int ix; for (ix=0; *string++; ++ix); return ix; } /*********************************************/ /* Strip off *.PRT from pathname */ /*********************************************/ trunname(string) char *string; { register int ix; for(ix=strlen(string); ix>=0; --ix) { if(string[ix] == 92) /* is it \? */ break; } string[ix+1]=0; } /*********************************************/ /* Our code which replaces the system dumper */ /*********************************************/ dumpctrl() { int ix,rez,result; static int palette[16]; static char *screen,workarea[1280]; /*********************************************/ /* Grab screen resolution and base address */ /*********************************************/ rez=Getrez(); screen=Physbase(); /*********************************************/ /* Grab the system color palette */ /*********************************************/ for(ix=0; ix<16; ++ix) palette[ix]=Setcolor(ix,-1); /*********************************************/ /* Force monochrome palette to 000/777 */ /*********************************************/ if(rez==2) { if(palette[0] & 0x0001) { palette[0]=0x0777; palette[1]=0x0000; } else { palette[0]=0x0000; palette[1]=0x0777; } } /*********************************************/ /* Force alternate key mode to prtmode */ /*********************************************/ Getshift(prtmode); /*********************************************/ /* Initialize screen dumper code & printer */ /*********************************************/ result=scrdump(0,rez,screen,palette,workarea); /*********************************************/ /* Dump the screen if initialization was OK */ /*********************************************/ if(result) scrdump(1,rez,screen,palette,workarea); /*********************************************/ /* Return Alternate key mode to normal */ /*********************************************/ Getshift(0); } /*********************************************/ /* End of program! */ /*********************************************/ /f =Do,K~C7?{=qc" O>n5䥮x e/ۓj˳]v?s}v+傮I(`$Xod\: 1H<F_:&oX\&-E7$SJFCNcx&/aX/v><FL:&oX\&-E7$/ /*******************************************/ /* DEGAS(TM) Printer Driver Saver */ /* Written by Tom Hudson */ /* Copyright 1986, ANTIC Publishing */ /* Freeware, not to be sold */ /* */ /* Link with DEGAS printer driver object */ /* file and execute, specifying the name */ /* of the printer driver file (be sure */ /* to use a .PRT extension for the file! */ /*******************************************/ #include extern dumper(); /* The printer driver code */ /* Be sure to use the label _dumper in your printer */ /* driver before the first instruction! */ int contrl[13]; /* Standard GEM bindings */ int intin[128]; int ptsin[128]; int intout[128]; int ptsout[128]; /*********************************************/ /* Our miscellaneous form_alert strings */ /*********************************************/ char saveOK[] = "[1][ |Printer driver written!| ][ OK ]"; char cantopen[] = "[3][ |Can't open driver file!| ][ Sorry ]"; char wrterr[] = "[3][ |Error writing file!| ][ Sorry ]"; /*****************************************/ /* Start of file write code */ /*****************************************/ main() { int handle,fresult,fbutton; long bcount; char defpath[64],workpath[80],filename[20]; /*********************************************/ /* Initialize the application */ /*********************************************/ appl_init(); /*********************************************/ /* Build a pathname with a .PRT extension */ /*********************************************/ defpath[0] = Dgetdrv() + 'A'; defpath[1] = ':'; Dgetpath(&defpath[2], 0); strcpy(workpath,defpath); strcat(workpath,"\\*.PRT"); filename[0]=0; /*********************************************/ /* Use file selector to get the driver name */ /*********************************************/ fresult=fsel_input(workpath,filename,&fbutton); /*********************************************/ /* If filename was entered, write the file! */ /*********************************************/ if(fresult>0 && fbutton==1) { trunname(workpath); strcat(workpath,filename); /*********************************************/ /* Attempt to save the printer driver file */ /*********************************************/ handle = Fcreate(workpath,0); if (handle >= 0) { bcount=Fwrite(handle,2000L,&dumper); Fclose(handle); if(bcount<2000L) form_alert(1,wrterr); else form_alert(1,saveOK); } else { form_alert(1,cantopen); } } } /*********************************************/ /* General-utility string concatenator */ /*********************************************/ strcat(to,from) char *to,*from; { while (*to) ++to; while (*to++ = *from++); } /*********************************************/ /* General-purpose string copier */ /*********************************************/ strcpy(to,from) char *to,*from; { while (*to++ = *from++); } /*********************************************/ /* General-purpose string length test */ /*********************************************/ strlen(string) char *string; { register int ix; for (ix=0; *string++; ++ix); return ix; } /*********************************************/ /* Strip off *.PRT from pathname */ /*********************************************/ trunname(string) char *string; { register int ix; for(ix=strlen(string); ix>=0; --ix) { if(string[ix] == 92) /* is it \? */ break; } string[ix+1]=0; } /*********************************************/ /* End of program! */ /*********************************************/ V QT+ :*t&, 2\+K*SA|7| z}`(>m)XGƏjXT>Gv_bSSO*VIAo,| zБ/  oH"o$o Jof1|1|1|1|1|1|1|1|1|,1|.1|01|21|41|61|81|:1|<1|>1|@1|B1|D1|F1| dtGdaGd2<J@j L @0<NuL @0<NuL @0<Nu1oFJogH og 1|V1|X1|Z1|\1|``>1|V1|X1|Z1|\1|``1|V1|X1|@Z1|\1|`1|D1|H1|J1|^|@1hXL!|CPdtGdak21|d1|Ba1hVN|$PakRhB2(BhZf1|Bap1hVN|PakRhB2(BhZf1|BaD1hVN| PaxkRhB2(BhZf2(J|g aJ@fRhJ1|HRh^2(^h`f 1|^`,ShLf$RhD2(Dh\f`b"<NU./ / //NV>?<NMN^$"$_"_ _N]Jk Sj0?<?<NMN^$"$_"_ _N]RSBf0<NuNU./ / //NV>?<NMN^J@g*NV>?<NMN^af0<$"$_"_ _N]Nu0<` hFg hFgRNU./ / //0(DP2(B4Iļ<)g0<`0<$"$_"_ _N]NuNU./ / ///0<6(DƼ2(B4I|6ļ2<iAg0<6)Ag|&$"$_"_ _N]NuNU./ / ///0<6(DƼ2(B4I|6ļ2<iAg0<6)Ag|6)Ag|6)Ag|&$"$_"_ _N]Nu2(H4(J||JB1AT@RҊ*A04|2|pIA2|IAa65 2|4J|BK|CJg&|kN|k^4(TQAIK,6fd`D¼4(TIK6ļƼfB`44(TIK6f*(P2(HhJ|g`<Jg (d(@@d(@ B@Jf|@tGdak1|dRhH(RShNf0<NuKNu       $- 6      $%- &$- 66 666    $$%- $%%- &&$- 666    $$%%- $$$%- $$$%- &&$$- 6666   $$$$%- $$$$%- $$$$%- &&$$%- &&&$%- 66666  $$$$%%- $$$$%%- &$$$%%- &&&$%%- &&$$$%- &&&&&$- 666666 $$$$%%%-$$$$%%%-$$$$%%%-$$$$%%%-&&&&$%%-&&&&&$%-&&&&&&$-6666666?NV~'_`ȧ;<Ga:n!L='燮I  oH"o$o JofNV>?< NMN^ o@A1oF!|!|UU!|UU!|UU!|D!|!|"!|(A<g hFg|@`|@`JhFg|@`|@!|@Ad1| htGdaGd2<BSAfJ@j L @B@NuL @0<NuL @0<Nu(A<gJhFg< hFg`Bg?<NMN^$"$_"_ _N]RSBfB@NuNU./ / //NV>?<NMN^J@gNV>?<NMN^af0<$"$_"_ _N]NuB@`NU./ / //0(DP2(B4Iļ<)fB@`0<$"$_"_ _N]NuNU./ / ///B@6(DƼ2(B4I|6ļ2<iAg0<6)Ag|&$"$_"_ _N]NuNU./ / ///B@6(DƼ2(B4I|6ļ2<iAg0<6)Ag|6)Ag|6)Ag|&$"$_"_ _N]Nu| dtGdaNu!|L d1| $<&GdaGd2<BSAfNu!|Ld1| ($<GdaGd2<BSAfNuҊ*A04|2I|A2I|AļJK (A<f0(@-(@-(@-(@Nu5pRG|(@JhFg 2(B|gNu5pRG|(@5pRG|(@Nu"Nމz\c;`Xh-,BIgc  oH"o$o Jof1|1|1|1|1|1|1|1|1|,1|.1|01|21|41|61|81|:1|<1|>1|@1|B1|D1|FaJ@j L @B@NuL @0<NuL @0<Nu1oFJog og`1|Z`1|@ZBhDBhJ!|d|$PaBhBBhHJhFg2(B|g1|N`1|N`1|NaklRhB2(BhZf| tGaBaJ@fV(P AP<8fa.\hD hDj*`r!|%O|tGaNBNu!| tGa8BNu1|ha1|LakRhDShhfRhH]hDShNfB@Nu"<NU./ / //NVBW?<NMN^$"$_"_ _N]Jk Sj0Bg?<NMN^$"$_"_ _N]RSBfB@NuNU./ / //NV>?<NMN^J@g*NV>?<NMN^af0<$"$_"_ _N]NuB@` hDk?< NMN^ o@A1oF!|!|UU!|UU!|UU!|D!|!|"!|(A<g og|@`|@`Jog|@`|@!|Q d!|T16h1|>lt GdaGd2<BSAfJ@j L @B@NuL @0<NuL @0<Nu(A<gJog6 og`8Jog ogvBhBIj1|Da(Ҋ*A Uwg (@`TShDj(@ A@Jf|@a0J@kXaJ@fdRhB hBfa`DBhBIj1|DaaZShDj(@ A@Jf|@aJ@ka6J@f RhB hBfa`BhBIj1|Da aShDj(@ A@Jf|@aJ@kaJ@fRhB h@BfaD`BhDIjBhBaҊ*A Uwg(@4(B|f`R4(B|fRRhB hBf(@ A@Jf|@a"J@kaNJ@f$RhD hDf|a`BhDIjBhBBGaaRhB hBf(@ A@Jf|@aJ@kaJ@fRhD hDfaT`BhDIjBhBaaRhB h@Bf(@ A@Jf|@afJ@k\aJ@fhRhD hDfa`H"<NU./ / //NVBW?<NMN^$"$_"_ _N]Jk Sj0Bg?<NMN^$"$_"_ _N]RSBfB@NuNU./ / //NV>?<NMN^J@g*NV>?<NMN^af0<$"$_"_ _N]NuB@`NU./ / //0(DP2(B4Iļ<)g0<`B@$"$_"_ _N]NuNU./ / ///B@6(DƼ2(B4I|6ļ2<iAg0<6)Ag|&$"$_"_ _N]NuNU./ / ///B@6(DƼ2(B4I|6ļ2<iAg0<6)Ag|6)Ag|6)Ag|&$"$_"_ _N]Nu!|ANd!|< htGdaNu!|S08d1|00h1| $<(GdaGd2<BSAfNu!|S09d1|60h1| *$<GdaGd2<BSAfNuҊ*A04|2I|A2I|AļJK (A<f0(@-(@-(@-(@Nu5pRG|(@JhFg 2(B|gNu5pRG|(@Nu5pRG|(@5pRG|(@Nu*********************************** * Epson 2-way B&W graphics dumper * * Written by Tom Hudson * * Copyright 1986, not to be sold * *********************************** PHASE .equ 64 KBSHIFT .equ 65 X .equ 66 Y .equ 68 REZ .equ 70 .globl _dumper ;convenient labelfor dump routine .text _dumper: move.l a0,d0 ;save A0 move.l 16(a7),a0 ;get work area address movem.l d0-a7,(a0) ;shove registers in work area move.l 8(a7),a1 ;screen address--->A1 move.l 12(a7),a2 ;palette address--->A2 tst.w 4(a7) ;init? bne process ;no, go dump! * reset & initialize printer * init: link a6,#-4 move.w #$FFFF,(sp) ;get... move.w #11,-(sp) ;kbshift status trap #13 unlk a6 move.l 16(a7),a0 ;get work area pointer again move.b d0,KBSHIFT(a0) ;save kbshift status move.w 6(a7),REZ(a0) ;save rez * BUILD PIXEL TABLE * move.l #$ffffffff,1200(a0) ;black... move.l #$55ff55ff,1204(a0) move.l #$55bb55ee,1208(a0) move.l #$aa55aa55,1212(a0) move.l #$aa44aa11,1216(a0) move.l #$aa00aa00,1220(a0) move.l #$88002200,1224(a0) move.l #$00000000,1228(a0) ;to white move.b KBSHIFT(a0),d0 ;get kbshift and.b #8,d0 ;ALT? beq sethoriz ;no, do horizontal cmp.w #2,REZ(a0) ;hi rez? beq hivinit ;yes! * reset phase counter * move.b #192,PHASE(a0) ;2 pixels per scan line bra fininit hivinit: move.b #128,PHASE(a0) ;1 pixel per scan line bra fininit sethoriz: tst.w REZ(a0) ;hi rez? beq lowhinit ;yup! * reset phase counter * move.b #128,PHASE(a0) ;1 pixel per scan line bra fininit lowhinit: move.b #192,PHASE(a0) ;2 pixels per scan line * set init string * fininit: move.l #$1b401b41,100(a0) ;finish init by resetting printer & move.w #$080d,104(a0) ;setting linefeed, etc. move.l #6,d2 ;6 bytes in init buffer lea 100(a0),a3 ;point to bytes bsr printit ;print the init stuff lea 100(a0),a3 ;point to print buffer move.w #242,d1 ;clear 242 * 4 bytes clpln: clr.l (a3)+ subq #1,d1 bne clpln tst.w d0 bpl exit * exit w/error condition (0) * error: movem.l (a0),d0-a7 move.l d0,a0 clr.w d0 ;0 indicates error rts * exit the subroutine (no error) * exit: movem.l (a0),d0-a7 move.l d0,a0 move.w #1,d0 ;1 indicates success rts * exit w/abort condition (2) * abort: movem.l (a0),d0-a7 move.l d0,a0 move.w #2,d0 ;2 indicates abort rts * process the pixels and send to printer * process: move.b KBSHIFT(a0),d0 ;get keyboard info and.b #8,d0 ;ALT? beq hformat ;no! tst.w REZ(a0) ;low rez? beq lowvert ;yes! cmp.w #1,REZ(a0) ;med rez? beq medvert ;yes! bra hivert ;only one left... *********************************** * horizontal format dump routines * *********************************** hformat: tst.w REZ(a0) ;low rez? beq lowproc ;yes! cmp.w #1,REZ(a0) ;med rez? beq medproc ;yes! * HI-REZ PROCESSOR * clr.w X(a0) ;start at X=0 nx2: lea 104(a0),a4 ;point A4 to print buffer move.w #399,Y(a0) ;start at Y=399 * GET PIXEL * nx2b: bsr get2 ;get a pixel move.b d0,d1 ;value in d1 (0 or 1) andi.l #$000000ff,d1 lsl.l #1,d1 ;mult by 2 for palette index add.l a2,d1 ;add palette start address movea.l d1,a5 ;shove in A5 btst.b #0,1(a5) ;low bit on? bne white ;yes, it's white! * black pixel * move.b (a4),d1 ;get print buffer byte or.b PHASE(a0),d1 ;turn on bits using PHASE move.b d1,(a4)+ ;put it back in print line move.b d1,(a4)+ ;(twice) bra np2 ;next pixel! * white pixel * white: addq.l #2,a4 ;bypass next 2 printer bytes np2: subq.w #1,Y(a0) ;next Y position bpl nx2b ;branch if more move.b PHASE(a0),d1 ;get PHASE lsr.b #1,d1 ;shift right 1 bit move.b d1,PHASE(a0) ;put back in PHASE tst.b d1 ;any bits left? bne xl2 ;yes, loop back. move.b #128,PHASE(a0) ;reset PHASE bsr doprnt ;print the line! tst.w d0 ;OK? bmi error ;no! xl2: bsr pabchk ;check for UNDO tst.w d0 ;UNDO? bne abort ;yes -- abort! addq.w #1,X(a0) ;next X position cmp.w #640,X(a0) ;end of line? bne nx2 ;no! bsr cleanup ;all done, cleanup printer... bra exit ;and exit * MEDIUM-REZ PROCESSOR * medproc: clr.w X(a0) ;start at X=0 nx1: lea 104(a0),a4 ;point to printer buffer move.w #199,Y(a0) ;start at Y=199 * GET PIXEL * nx1b: bsr get1 ;get a pixel bsr ppix ;put in print line subq.w #1,Y(a0) ;next Y bpl nx1b ;loop if more move.b PHASE(a0),d1 ;get PHASE lsr.b #1,d1 ;shift it right 1 bit move.b d1,PHASE(a0) ;put back tst.b d1 ;end of phase run? bne xl1 ;no! move.b #128,PHASE(a0) ;reset PHASE bsr doprnt ;print the line tst.w d0 ;print error? bmi error ;yes! xl1: bsr pabchk ;check for UNDO abort tst.w d0 ;UNDO? bne abort ;yes! addq.w #1,X(a0) ;next X cmp.w #640,X(a0) ;X done? bne nx1 ;no! bsr cleanup ;cleanup printer... bra exit ;and exit! * LOW-REZ PROCESSOR * lowproc: clr.w X(a0) ;start X at 0 nx0: lea 104(a0),a4 ;point to printer buffer move.w #199,Y(a0) ;start Y at 199 * GET PIXEL * nx0b: bsr get0 ;get a pixel bsr ppix ;put in print line subq.w #1,Y(a0) ;next Y bpl nx0b ;loop if more Y move.b PHASE(a0),d1 ;get phase lsr.b #2,d1 ;shift right 2 bits move.b d1,PHASE(a0) ;put back in phase byte tst.b d1 ;end of phase run? bne xl0 ;no! move.b #192,PHASE(a0) ;reset phase bsr doprnt ;print the line tst.w d0 ;error? bmi error ;yes! xl0: bsr pabchk ;check for UNDO abort tst.w d0 ;UNDO? bne abort ;yes! addq.w #1,X(a0) ;next X cmp.w #320,X(a0) ;done? bne nx0 ;no, loop back. bsr cleanup ;all done, cleanup printer... bra exit ;and exit! * Vertical-format dump routines * * HI-REZ PROCESSOR * hivert: clr.w Y(a0) ;start Y ay 0 vnx2: lea 104(a0),a4 ;point to print buffer clr.w X(a0) ;start X at 0 * GET PIXEL * vnx2b: bsr get2 ;get a pixel move.b d0,d1 ;put it in D1 andi.l #$000000ff,d1 lsl.l #1,d1 ;multiply by 2 for index add.l a2,d1 ;add start of color palette movea.l d1,a5 ;stick in A5 btst.b #0,1(a5) ;low bit on? bne vwhite ;yes, it's white! * black pixel * move.b (a4),d1 ;turn on printer bits or.b PHASE(a0),d1 move.b d1,(a4)+ move.w X(a0),d2 ;get X and.w #1,d2 ;even pixel? bne vnp2 ;no! move.b d1,(a4)+ ;it's even, do it twice. bra vnp2 * white pixel * vwhite: addq.l #1,a4 ;skip printer byte move.w X(a0),d2 ;get X and.w #1,d2 ;is it even? bne vnp2 ;no! addq.l #1,a4 ;do it twice vnp2: addq.w #1,X(a0) ;next X cmpi.w #640,X(a0) ;X done? bne vnx2b ;no, loop! move.b PHASE(a0),d1 ;get phase lsr.b #1,d1 ;shift right 1 bit move.b d1,PHASE(a0) ;put it back tst.b d1 ;end of phase run? bne vxl2 ;no! move.b #128,PHASE(a0) ;reset phase bsr dovprnt ;print it! tst.w d0 ;print OK? bmi error ;no! vxl2: bsr pabchk ;check for UNDO tst.w d0 ;UNDO? bne abort ;yes! addq.w #1,Y(a0) ;next Y position cmp.w #400,Y(a0) ;end of Y? bne vnx2 ;no, loop back. bsr cleanup ;all done, cleanup printer... bra exit ;and exit. * MEDIUM-REZ PROCESSOR * medvert: clr.w Y(a0) ;start Y at 0 vnx1: lea 104(a0),a4 ;point to print line clr.w X(a0) ;start X at 0 clr.w d7 ;clear counter * GET PIXEL * vnx1b: bsr get1 ;get a pixel bsr ppix ;put in print line addq.w #1,X(a0) ;next X cmpi.w #640,X(a0) ;end of X? bne vnx1b ;no! move.b PHASE(a0),d1 ;shift phase lsr.b #2,d1 move.b d1,PHASE(a0) tst.b d1 ;end of phase run? bne vxl1 ;no! move.b #192,PHASE(a0) ;reset phase bsr dovprnt ;print it! tst.w d0 ;print OK? bmi error ;no! vxl1: bsr pabchk ;UNDO check tst.w d0 ;UNDO? bne abort ;yes, abort! addq.w #1,Y(a0) ;next Y cmp.w #200,Y(a0) ;Y done? bne vnx1 ;no! bsr cleanup ;cleanup printer... bra exit ;and exit! * LOW-REZ PROCESSOR * lowvert: clr.w Y(a0) ;start Y at 0 vnx0: lea 104(a0),a4 ;point to printer buffer clr.w X(a0) ;start X at 0 * GET PIXEL * vnx0b: bsr get0 ;get pixel bsr ppix ;put in print line addq.w #1,X(a0) ;next X cmpi.w #320,X(a0) ;X done? bne vnx0b ;no! move.b PHASE(a0),d1 ;shift phase bits lsr.b #2,d1 move.b d1,PHASE(a0) tst.b d1 ;end of phase run? bne vxl0 ;no! move.b #192,PHASE(a0) ;reset phase bsr dovprnt ;print it! tst.w d0 ;print OK? bmi error ;no! vxl0: bsr pabchk ;UNDO check tst.w d0 ;UNDO? bne abort ;yes! addq.w #1,Y(a0) ;next Y cmp.w #200,Y(a0) ;Y done? bne vnx0 ;no! bsr cleanup ;cleanup printer... bra exit ;and exit! **************************** * print string to printer * *--------------------------* * input: * * d2.L # of bytes to print * * a3: address of 1st byte * * returns: * * d0 = -1: error! * * d0 = 0: OK! * **************************** printit: move.l #270000,d1 ;timeout count (works out to +/- 30 secs.) statloop: link a5,#-20 ;save registers on stack move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) link a6,#-4 ;Request printer clr.w (sp) ;output status move.w #8,-(sp) trap #13 unlk a6 move.l (sp)+,d2 ;restore registers move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 tst.l d0 ;printer ready? bmi prtrdy ;yes! subq.l #1,d1 ;decrement timeout counter bpl statloop ;and try again move.w #-1,d0 ;printer error! rts prtrdy: link a5,#-20 ;save registers move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) link a6,#-6 move.b (a3),d0 ;get byte to print andi.w #$00FF,d0 ;mask off to be safe move.w d0,(sp) ;put on stack clr.w -(sp) ;device #0 (printer) move.w #3,-(sp) ;conout trap #13 ;send to printer! unlk a6 move.l (sp)+,d2 ;restore registers move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 addq.l #1,a3 ;point to next byte subq.w #1,d2 ;decrement counter bne printit ;loop if more bytes clr.w d0 ;OK! rts * CHECK FOR UNDO KEY ABORT * pabchk: link a5,#-20 ;Save registers move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) link a6,#-4 ;request keyboard status move.w #2,(sp) ;(returns with D0 = 0 if no characters) move.w #1,-(sp) trap #13 unlk a6 tst.w d0 ;any keys? beq abcexit ;no! link a6,#-4 ;there's a keypress waiting... move.w #2,(sp) ;don't make it wait! move.w #2,-(sp) trap #13 ;get key... unlk a6 cmp.l #$00610000,d0 ;UNDO? bne nobort ;no! move.w #1,d0 ;yes, set abort flag abcexit: move.l (sp)+,d2 ;restore the saved registers move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 rts nobort: clr.w d0 ;clear D0 (no abort) bra abcexit ;and go to exit point * GET hi-rez pixel (0-1) * get2: link a5,#-20 ;save the registers on stack move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) move.w Y(a0),d0 ;get Y coordinate and.l #$0000ffff,d0 ;mask it mulu #80,d0 ;mult. by 80 adda.l d0,a1 ;add to screen base move.w X(a0),d1 ;get X move.w d1,d2 lsr.w #3,d1 ;divide X by 8 adda.w d1,a1 ;add to screen pointer move.b (a1),d0 ;get screen byte and.l #7,d2 ;get byte mask number move.b #$80,d1 ;set up bit mask lsr.b d2,d1 ;shift mask into position and.b d1,d0 ;mask a bit bne set2 clr.w d0 bra getx2 ;bit off! set2: move.w #1,d0 ;bit on! getx2: move.l (sp)+,d2 ;restore registers move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 rts * get medium-rez pixel * get1: link a5,#-24 ;save registers move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) move.l d3,-(sp) clr.w d0 ;zero result register move.w Y(a0),d3 ;grab Y coordinate and.l #$0000ffff,d3 ;mask it off mulu #160,d3 ;multiply by 160 (# of bytes per scan line) adda.l d3,a1 ;add to screen base address move.w X(a0),d1 ;get X coordinate move.w d1,d2 ;duplicate in D2 lsr.w #2,d1 ;divide it by 4 and.w #$00fc,d1 ;turn off lower 3 bits adda.w d1,a1 ;add to screen address move.w (a1),d3 ;get the screen word and.l #15,d2 ;mask X to 0-15 (index within group) move.w #$8000,d1 ;set up a bit mask lsr.w d2,d1 ;shift it by the group index and.w d1,d3 ;get low-order color bit beq bit1b ;it's off, go to next color bit move.w #1,d0 ;set bit in result register bit1b: move.w 2(a1),d3 ;get second pixel group from screen and.w d1,d3 ;get high-order color bit beq getx1 ;it's off, go exit. or.w #2,d0 ;it's on, turn on appropriate color bit in result getx1: move.l (sp)+,d3 ;restore the registers move.l (sp)+,d2 move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 rts * get low-rez pixel * get0: link a5,#-24 ;save registers move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) move.l d3,-(sp) clr.w d0 ;zero result register move.w Y(a0),d3 ;get Y coordinate and.l #$0000ffff,d3 ;mask off for multiply mulu #160,d3 ;multiply by 160 (# of bytes per scan line) adda.l d3,a1 ;add to screen base address move.w X(a0),d1 ;get X coordinate move.w d1,d2 ;duplicate it in D2 lsr.w #1,d1 ;divide it by 2 and.w #$00f8,d1 ;turn off lower 3 bits adda.w d1,a1 ;add to screen address register move.w (a1),d3 ;grab screen word and.l #15,d2 ;mask X to 0-15 move.w #$8000,d1 ;set up bit mask lsr.w d2,d1 ;shift bit mask 0-15 bits and.w d1,d3 ;mask off bit 0 beq bit0b ;bit's off, go get next color bit move.w #1,d0 ;turn on bit 0 in result bit0b: move.w 2(a1),d3 ;get screen word for bit 1 of color and.w d1,d3 ;get bit 1 beq bit0c ;it's off, try bit 2 or.w #2,d0 ;turn on bit 1 in result bit0c: move.w 4(a1),d3 ;get screen word for bit 2 and.w d1,d3 ;get bit 2 beq bit0d ;it's off, try bit 3 or.w #4,d0 ;turn on bit 2 in result bit0d: move.w 6(a1),d3 ;get word for bit 3 and.w d1,d3 ;get bit 3 beq getx0 ;it's off! or.w #8,d0 ;turn on bit 3 in result getx0: move.l (sp)+,d3 ;restore the registers move.l (sp)+,d2 move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 rts cleanup: move.b #12,100(a0) ;do a page eject on printer move.l #1,d2 lea 100(a0),a3 bsr printit rts ;and exit * horizontal format print * doprnt: move.l #$1b4c2003,100(a0) ;build print line header... move.w #$0d0a,904(a0) ;and print line tail (CR/LF) move.l #806,d2 ;print 806 bytes lea 100(a0),a3 bsr printit lea 100(a0),a3 ;clear print line move.w #210,d1 clpln2: clr.l (a3)+ subq #1,d1 bne clpln2 rts * vertical format print * dovprnt: move.l #$1b4cc003,100(a0) ;build print header move.w #$0d0a,1064(a0) ;and tail (CR/LF) move.l #966,d2 ;print 966 bytes lea 100(a0),a3 bsr printit lea 100(a0),a3 ;clear print line move.w #242,d1 vclpln2: clr.l (a3)+ subq #1,d1 bne vclpln2 rts * CHANGE COLOR TO GRAY-SCALE * * AND PUT IN PRINT LINE * ppix: move.b d0,d1 ;put pixel index in d1 andi.l #$000000ff,d1 ;mask it lsl.l #1,d1 ;multiply by 2 add.l a2,d1 ;add palette start address movea.l d1,a5 ;put in a5 move.w (a5),d0 ;get color ($000-$777) move.w d0,d2 ;duplicate it and.w #7,d2 ;mask BLUE bits move.w d0,d1 ;duplicate again lsr.w #4,d1 ;shift... and.w #7,d1 ;and mask GREEN bits add.w d1,d2 ;add green and blue move.w d0,d1 ;duplicate color AGAIN! lsr.w #8,d1 ;shift... and.w #7,d1 ;and mask RED bits add.w d1,d2 ;add to total (now 0-21) and.l #$000000ff,d2 ;mask for divide divu #3,d2 ;divide by 3 (now 0-7) lsl.w #2,d2 ;mult by 4 for index into gray-scale table lea 0(a0,d2.w),a5 ;get effective address adda.l #1200,a5 ;add table start offset move.b KBSHIFT(a0),d1 ;get keybd bits and.b #8,d1 ;ALT (vert format)? bne vchange ;yes, do vert! * handle pixel color * move.b (a5),d1 ;get gray-scale byte and.b PHASE(a0),d1 ;mask with phase or.b (a4),d1 ;or with print byte move.b d1,(a4)+ ;and set print bits move.b 1(a5),d1 ;do three more times (4 dots per pixel) and.b PHASE(a0),d1 or.b (a4),d1 move.b d1,(a4)+ move.b 2(a5),d1 and.b PHASE(a0),d1 or.b (a4),d1 move.b d1,(a4)+ move.b 3(a5),d1 and.b PHASE(a0),d1 or.b (a4),d1 move.b d1,(a4)+ rts * handle vertical pixel color * vchange: move.b 0(a5,d7.w),d1 ;get gray-scale byte addq.w #1,d7 ;increment D7 (printer dot counter) and.w #3,d7 ;force D7 0-3 and.b PHASE(a0),d1 ;mask with phase or.b (a4),d1 ;or with print byte move.b d1,(a4)+ ;put in print line tst.w REZ(a0) ;low rez? beq dump3 ;yes! move.w X(a0),d1 ;med rez: and.w #1,d1 ;is X even? beq dump2 ;yes! rts ;no, exit dump3: move.b 0(a5,d7.w),d1 ;dump second & third bytes for low rez addq.w #1,d7 and.w #3,d7 and.b PHASE(a0),d1 or.b (a4),d1 move.b d1,(a4)+ dump2: move.b 0(a5,d7.w),d1 ;dump second byte for medium rez+even addq.w #1,d7 and.w #3,d7 and.b PHASE(a0),d1 or.b (a4),d1 move.b d1,(a4)+ rts filler .ds.l 500 ;pad to make sure it's at least 2000 bytes * That's all! * F:x!p; DrwnȥMD~Z!mv:{Ɍ&Xz\=`+a,Pt2+@d+:Xׅ t# ln!=I+(QSsh/e,P}*;ʐAeK:F~Kb"Jf:"~M~% xё/!øĒa ["I"]{VcX{=`w^ͻy,PssWT+'jf[D>["I"]{VcX{=`vͻy,P `wL8D[ ********************************************* * DEGAS(TM) Printer Driver Installer * * Assembly language source code * * written by Tom Hudson * * Copyright 1986, ANTIC Publishing * * Freeware, not to be sold * * * * ---> NOTE: Link with INSTALL.C <--- * ********************************************* .globl _install ;Routine to change SCRDMP vector .globl _scrdump ;My screen dump printer driver code .text _install: move.l #doit,-(sp) ;point to the vector changer code move.w #38,-(sp) ;we want to do it in supervisor mode! trap #14 ;execute it! addq.l #6,sp ;restore stack pointer rts ;and return to caller doit: move.l #_dumpctrl,$502 ;point the system screen dump vector to my routine rts ;and return _scrdump: .ds.l 500 ;reserve 2000 bytes for driver code ****************** * End of listing * ****************** pׇ㸠s`gl׉ ,PejU&ʐlwGp*xῌ5p;crV`~C,Q}MT MD[1*[*"TcxVl|xX =X)'oR7 zJw g5b3/'puS$l ?8XZ\ OD|\%{`Xn>`fr`tS$lb"X"B*?qف:9{|g<,PÉJm9J{{G§VF[c|kS%1 ]D 0׉xEus9ϥ+K0廓K#DUo:cdc}㸯}FMHXyI9NI{GK [yQp|\|믙E|9{ zs.0׉,P7E9X 2jxXG+oLcxV DY6zq P fE;QT:X7:jxUD:{s2y8ownxX$0ST+qs:j*=qԇG+lA|9{x9nŗ ȵwX%ʐceK%E2BDތ'`_y[|bdu9nm}EX Q$l{&&I[T>Qp|\}\bxVz `qѻ>`d>2_uIm{GDU\sV,r=`f*g/cY&t5M[3:jo粆=q+posw n,׉t,PA`wL8FlwGp x'C}d?c|Rgw g5b3/ ЉXy'ધT2["Aظ"]{VcX{*********************************** * Epson JX-80 color screen dumper * * Written by Tom Hudson * * Copyright 1986, not to be sold * *********************************** X .equ 66 ;screen X coordinate Y .equ 68 ;screen Y coordinate REZ .equ 70 ;resolution indicator PRTX .equ 72 ;printer X coordinate PRTY .equ 74 ;printer Y coordinate YTIME .equ 76 ;Y coord repeat count XTIME .equ 78 ;X coord repeat count COLOR .equ 80 ;color bit mask (yellow, magenta, cyan) SAVE .equ 82 ;temporary storage PHASE .equ 84 ;printer bit phase XMAX .equ 86 ;screen X limit MASK .equ 88 ;printer pin mask YCOUNT .equ 90 ;Y counter BLACK .equ 200 ;gray-scale table offset WHITE .equ 300 ;white-scale table offset .globl _dumper ;convenient label for dump routine .text _dumper: move.l a0,d0 ;save A0 move.l 16(a7),a0 ;point A0 at the work area start movem.l d0-a7,(a0) ;save all registers move.l 8(a7),a1 ;point A1 to screen base move.l 12(a7),a2 ;point A2 to palette start address tst.w 4(a7) ;initialize command (0)? bne process ;no, dump it! * reset & initialize printer * init: * BUILD BLACK PIXEL TABLE * move.w #%1111111111111111,200(a0) ;Black... move.w #%1111011011110110,202(a0) move.w #%1011011010110110,204(a0) move.w #%1001011010010110,206(a0) move.w #%1000011010000110,208(a0) move.w #%1000001010000010,210(a0) move.w #%1000000010000000,212(a0) move.w #%0000000000000000,214(a0) ;...to white * BUILD WHITE PIXEL TABLE * move.w #%1000000000000000,300(a0) ;low white... move.w #%1000000010000000,302(a0) move.w #%1000001010000000,304(a0) move.w #%1000001010000010,306(a0) move.w #%1000011010000010,308(a0) move.w #%1000011010000110,310(a0) move.w #%1001011010000110,312(a0) move.w #%1001011010010110,314(a0) move.w #%1011011010010110,316(a0) move.w #%1011011010110110,318(a0) move.w #%1111011010110110,320(a0) move.w #%1111011011110110,322(a0) move.w #%1111111011110110,324(a0) move.w #%1111111011110111,326(a0) ;...to high white * set init string * fininit: bsr preset ;reset printer tst.w d0 ;reset successful? bmi error ;no! move.l #$1b410800,150(a0) ;reset, set linefeed to 8 dots move.l #3,d2 ;3 bytes in init string lea 150(a0),a3 ;point to init string bsr printit ;and print it! clr.l 150(a0) ;clear that portion of work area tst.w d0 ;was print OK? bpl exit ;yes! * exit w/error condition (0) * error: movem.l (a0),d0-a7 ;restore registers move.l d0,a0 ;restore old A0 clr.w d0 ;set error condition rts * exit the subroutine (no error) * exit: movem.l (a0),d0-a7 ;restore registers move.l d0,a0 ;restore old A0 move.w #1,d0 ;set OK condition rts * exit w/abort condition (2) * abort: movem.l (a0),d0-a7 ;restore registers move.l d0,a0 ;restore old A0 move.w #2,d0 ;set abort condition rts * process the pixels and send to printer * process: move.w 6(a7),REZ(a0) ;save resolution tst.w 6(a7) ;was it 0 (low)? beq lowvert ;yes! cmp.w #1,6(a7) ;was it 1 (medium)? beq medvert ;yes! bra abort ;can't dump hires with this dumper! * MEDIUM-REZ PROCESSOR * medvert: move.w #640,XMAX(a0) ;set X maximum bra ALLDUMP ;and dump it! * LOW-REZ PROCESSOR * lowvert: move.w #320,XMAX(a0) ;set X maximum ALLDUMP: clr.w Y(a0) ;start at Y=0 clr.w PRTY(a0) ;and printer Y=0 move.l #$80,MASK(a0) ;init pin mask * GET PIXEL * newpass: move.b #%100100,COLOR(a0) ;start with yellow pass nx0strt: bsr linestrt ;start off the print operation clr.w X(a0) ;set screen X coord to 0 clr.w PRTX(a0) ;set printer X coord to 0 nx0yel: tst.w REZ(a0) ;low-res? beq threex ;yes, that's three printer dots! move.w X(a0),d1 ;grab screen X and.w #1,d1 ;is is even? beq onex ;yes, that gets only 1 printer dot move.w #2,XTIME(a0) ;it's odd, make it 2 printer dots. bra doppix ;do convert on pixel onex: move.w #1,XTIME(a0) ;set up 1 printer dot bra doppix threex: move.w #3,XTIME(a0) ;set up 3 printer dots doppix: bsr procit ;process the pixel bmi error ;if error, return. addq.w #1,X(a0) ;increment screen X coord move.w X(a0),d1 ;get the X coord cmp.w XMAX(a0),d1 ;end of screen scan line? bne nx0yel ;nope, loop for more! move.b #$0D,150(a0) ;new color, send CR move.l #1,d2 ;1 byte to print lea 150(a0),a3 ;point to the CR bsr printit ;and print it! clr.l 150(a0) ;clear that part of the work area bsr pabchk ;check for abort (UNDO) tst.w d0 ;abort? beq NOabort ;no! bsr preset ;they bailed out, reset printer bra abort ;and exit w/abort condition NOabort: move.b COLOR(a0),d1 ;get color mask lsr.b #1,d1 ;shift right one bit move.b d1,COLOR(a0) ;and put back in the mask and.b #%111000,d1 ;done with all 3 colors? bne nx0strt ;no, loop for next color move.b #$0a,150(a0) ;new line, send LF move.l #1,d2 ;a LF is just 1 byte, lea 150(a0),a3 ;point to LF bsr printit ;and print it! clr.l 150(a0) ;clear that area addq.w #4,Y(a0) ;increment screen Y by 4 (4 lines per pass) add.w #8,PRTY(a0) ;add 8 to printer's Y (8 pins per pass) cmpi.w #200,Y(a0) ;end of screen? bmi newpass ;no! bsr preset ;all done, reset printer bra exit ;and exit! preset: move.w #$1b40,150(a0) ;set up printer reset codes move.l #2,d2 ;it's 2 bytes lea 150(a0),a3 ;point to string bsr printit ;reset printer! clr.l 150(a0) ;clean up print buffer rts ;and exit! linestrt: move.l #$1B72001B,150(a0) ;set up start of color set string cmpi.b #%100100,COLOR(a0) ;yellow pass? bne notyel ;no, try magenta move.b #$34,152(a0) ;it's yellow, set ribbon color bra setcolor ;and do it. notyel: cmpi.b #%010010,COLOR(a0) ;magenta? bne notmag ;no, it's cyan! move.b #$31,152(a0) ;set ribbon color to magenta bra setcolor ;and do it. notmag: move.b #$32,152(a0) ;set ribbon color to cyan! setcolor: move.l #$4CC00300,154(a0) ;set up end of string (dots per line = 960) move.l #7,d2 ;7 bytes to print lea 150(a0),a3 ;point to string bsr printit ;and print them! clr.l 150(a0) ;clear print area clr.l 154(a0) rts procit: move.w #4,YCOUNT(a0) ;do 4 screen pixels per head pass proc2: bsr getpixel ;get a pixel! move.w #2,YTIME(a0) ;each pixel repeated 2X (8 pins/4 pixels) bsr ppix ;convert pixel & send to printer bmi procx ;exit if error addq.w #1,Y(a0) ;next screen Y coord subq.w #1,YCOUNT(a0) ;1 less pixel to do bne proc2 ;loop if more addq.w #1,PRTX(a0) ;increment printer X count subq.w #4,Y(a0) ;reverse Y coord to top of print head sub.w #8,PRTY(a0) ;and printer Y as well subq.w #1,XTIME(a0) ;decrement X repeat counter bne procit ;loop if more clr.w d0 ;clear error flag procx: rts ;and return **************************** * print string to printer * *--------------------------* * input: * * d2.L # of bytes to print * * a3: address of 1st byte * * returns: * * d0 = -1: error! * * d0 = 0: OK! * **************************** printit: move.l #270000,d1 ;timeout count (works out to +/- 30 secs.) statloop: link a5,#-20 ;save registers on stack move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) link a6,#-4 ;Request printer clr.w (sp) ;output status move.w #8,-(sp) trap #13 unlk a6 move.l (sp)+,d2 ;restore registers move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 tst.l d0 ;printer ready? bmi prtrdy ;yes! subq.l #1,d1 ;decrement timeout counter bpl statloop ;and try again move.w #-1,d0 ;printer error! rts prtrdy: link a5,#-20 ;save registers move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) link a6,#-6 move.b (a3),d0 ;get byte to print andi.w #$00FF,d0 ;mask off to be safe move.w d0,(sp) ;put on stack clr.w -(sp) ;device #0 (printer) move.w #3,-(sp) ;conout trap #13 ;send to printer! unlk a6 move.l (sp)+,d2 ;restore registers move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 addq.l #1,a3 ;point to next byte subq.w #1,d2 ;decrement counter bne printit ;loop if more bytes clr.w d0 ;OK! rts * CHECK FOR UNDO KEY ABORT * pabchk: link a5,#-20 ;Save registers move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) link a6,#-4 ;request keyboard status move.w #2,(sp) ;(returns with D0 = 0 if no characters) move.w #1,-(sp) trap #13 unlk a6 tst.w d0 ;any keys? beq abcexit ;no! link a6,#-4 ;there's a keypress waiting... move.w #2,(sp) ;don't make it wait! move.w #2,-(sp) trap #13 ;get key... unlk a6 cmp.l #$00610000,d0 ;UNDO? bne nobort ;no! move.w #1,d0 ;yes, set abort flag abcexit: move.l (sp)+,d2 ;restore the saved registers move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 rts nobort: clr.w d0 ;clear D0 (no abort) bra abcexit ;and go to exit point getpixel: cmpi #200,Y(a0) ;Y beyond end of screen? bmi getit ;no, get the pixel move.b #-1,d0 ;return -1 for color rts ;and exit getit: tst.w REZ(a0) ;low rez? beq get0 ;yes, get low-rez pixel! get1: link a5,#-24 ;save registers move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) move.l d3,-(sp) clr.w d0 ;zero result register move.w Y(a0),d3 ;grab Y coordinate and.l #$0000ffff,d3 ;mask it off mulu #160,d3 ;multiply by 160 (# of bytes per scan line) adda.l d3,a1 ;add to screen base address move.w X(a0),d1 ;get X coordinate move.w d1,d2 ;duplicate in D2 lsr.w #2,d1 ;divide it by 4 and.w #$00fc,d1 ;turn off lower 3 bits adda.w d1,a1 ;add to screen address move.w (a1),d3 ;get the screen word and.l #15,d2 ;mask X to 0-15 (index within group) move.w #$8000,d1 ;set up a bit mask lsr.w d2,d1 ;shift it by the group index and.w d1,d3 ;get low-order color bit beq bit1b ;it's off, go to next color bit move.w #1,d0 ;set bit in result register bit1b: move.w 2(a1),d3 ;get second pixel group from screen and.w d1,d3 ;get high-order color bit beq getx1 ;it's off, go exit. or.w #2,d0 ;it's on, turn on appropriate color bit in result getx1: move.l (sp)+,d3 ;restore the registers move.l (sp)+,d2 move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 rts * get low-rez pixel * get0: link a5,#-24 ;save registers move.l a0,(sp) move.l a1,-(sp) move.l a2,-(sp) move.l d1,-(sp) move.l d2,-(sp) move.l d3,-(sp) clr.w d0 ;zero result register move.w Y(a0),d3 ;get Y coordinate and.l #$0000ffff,d3 ;mask off for multiply mulu #160,d3 ;multiply by 160 (# of bytes per scan line) adda.l d3,a1 ;add to screen base address move.w X(a0),d1 ;get X coordinate move.w d1,d2 ;duplicate it in D2 lsr.w #1,d1 ;divide it by 2 and.w #$00f8,d1 ;turn off lower 3 bits adda.w d1,a1 ;add to screen address register move.w (a1),d3 ;grab screen word and.l #15,d2 ;mask X to 0-15 move.w #$8000,d1 ;set up bit mask lsr.w d2,d1 ;shift bit mask 0-15 bits and.w d1,d3 ;mask off bit 0 beq bit0b ;bit's off, go get next color bit move.w #1,d0 ;turn on bit 0 in result bit0b: move.w 2(a1),d3 ;get screen word for bit 1 of color and.w d1,d3 ;get bit 1 beq bit0c ;it's off, try bit 2 or.w #2,d0 ;turn on bit 1 in result bit0c: move.w 4(a1),d3 ;get screen word for bit 2 and.w d1,d3 ;get bit 2 beq bit0d ;it's off, try bit 3 or.w #4,d0 ;turn on bit 2 in result bit0d: move.w 6(a1),d3 ;get word for bit 3 and.w d1,d3 ;get bit 3 beq getx0 ;it's off! or.w #8,d0 ;turn on bit 3 in result getx0: move.l (sp)+,d3 ;restore the registers move.l (sp)+,d2 move.l (sp)+,d1 move.l (sp)+,a2 move.l (sp)+,a1 move.l (sp)+,a0 unlk a5 rts * CHANGE COLOR TO PRINTER FORMAT * * AND PUT IN PRINT LINE * ppix: move.w PRTX(a0),d1 ;get printer X coordinate move.w PRTY(a0),d2 ;get printer Y coordinate and.w #3,d1 ;mask X to 0-3 and.w #3,d2 ;mask Y to 0-3 lsl.w #2,d2 ;multiply Y by 4 add.w d2,d1 ;add them for index of 0-15 for printer pixel table move.w d1,PHASE(a0) ;got printer black/white phase index, put in PHASE move.b d0,SAVE(a0) ;save the color for repeat use tst.b d0 ;is color >= 0? bpl d0OK ;yes! clr.w d0 ;no, change it to 0 d0OK: move.b d0,d1 ;duplicate color in D1 andi.l #$000000ff,d1 ;mask it lsl.l #1,d1 ;multiply by 2 for index into palette add.l a2,d1 ;add to palette base address movea.l d1,a5 and put in an address register move.w (a5),d0 ;got color 000-777 move.w d0,d2 ;duplicate it... and.w #7,d2 ;get blue index move.w d0,d1 ;duplicate again... and.w #$0070,d1 ;get green index lsr.w #1,d1 ;shift the green index right 1 bit add.w d1,d2 ;and add to total move.w d0,d1 ;duplicate again!! and.w #$0700,d1 ;get red index lsr.w #2,d1 ;shift right 2 bits add.w d1,d2 ;now we have a color # of 0-511 bsr getcvals ;get color bit table addr in a5 move.w d0,d3 ;not AGAIN?? (gotta save it for next operation) move.b 0(a5,d2.w),d0 ;load color bits * calc color brightness total * move.w d3,d1 ;put color in D1 and.w #7,d1 ;mask blue brite move.w d3,d2 ;put color in D2 lsr.w #4,d2 ;divide by 4 and... and.w #7,d2 ;mask green brite add.w d2,d1 ;add to total brite lsr.w #8,d3 ;now shift color 8 bits right... and.w #7,d3 ;mask red brite add.w d3,d1 ;add to total brite tst.b d0 ;table color bits = %000000 (gray scale)? beq grayit ;yes! cmp.w #7,d1 ;total brite < 7? bmi blakck ;yes, add some black! beq normal ;brightness = 7, it's a solid color! whitck: move.w PHASE(a0),d2 ;get printer pixel phase (0-15) sub.w #8,d1 ;decrement pixel brightness by 8 lsl.w d1 ;and multiply by 2 for index lea 0(a0,d1.w),a5 ;generate a table offset using brightness adda.l #WHITE,a5 ;index into WHITE table move.w (a5),d3 ;get white addition word btst.l d2,d3 ;and check bit indicated by PHASE bne nobitson ;if bit is on, make it white! bra normal ;otherwise, make it normal color grayit: and.l #$000000FF,d1 ;mask in preparation for divide divu #3,d1 ;divide brightness by 3 move.w PHASE(a0),d2 ;get printer phase lsl.w d1 ;multiply brightness by 2 for index lea 0(a0,d1.w),a5 ;generate a table offset using brightness / 3 adda.l #BLACK,a5 ;index into BLACK table move.w (a5),d3 ;get black addition word btst.l d2,d3 ;check bit indicated by PHASE bne turnbitson ;if it's on, add black! bra nobitson ;otherwise, it's white! blakck: move.w PHASE(a0),d2 ;get printer pixel phase lsl.w d1 ;multiply brightness by 2 for index lea 0(a0,d1.w),a5 ;generate an offset using brightness adda.l #BLACK,a5 ;index into BLACK table move.w (a5),d3 ;grab black addition word btst.l d2,d3 ;if it's on, add black bne turnbitson ;otherwise, it's normal color normal: and.b COLOR(a0),d0 ;mask the table color with color pass bits (y, m or c) move.w PRTX(a0),d1 ;get printer X coord add.w PRTY(a0),d1 ;add printer Y coord and.w #1,d1 ;is it an even pixel? beq evenpix ;yes! * ODD pixel on printer, use color 2 lsr.b #3,d0 ;shift so color #2 is used bra orit ;and go put in printer byte evenpix: and.b #7,d0 ;use color #1 orit: tst.b d0 ;any bits on? beq nobitson ;no! turnbitson: tst.b SAVE(a0) ;is original pixel on screen? bmi nobitson ;no, leave white! move.l 150(a0),d0 ;get printer byte or.l MASK(a0),d0 ;OR on the appropriate bit move.l d0,150(a0) ;and put byte back nobitson: move.l MASK(a0),d2 ;get printer pin mask lsr.l d2 ;move to next pin move.l d2,MASK(a0) ;save mask tst.l d2 ;any more pins left? bne noprtyet ;yes! move.l #$80,MASK(a0) ;reset pin mask to top pin move.l #1,d2 ;1 byte to print lea 153(a0),a3 ;point to byte bsr printit ;and print the byte! bmi ppixout ;branch if error clr.l 150(a0) ;clear print work area noprtyet: addq.w #1,PRTY(a0) ;increment printer Y coordinate move.b SAVE(a0),d0 ;restore color to D0 subq.w #1,YTIME(a0) ;decrement Y repeat counter bne ppix ;loop back if more clr.w d0 ;zero D0 to report success ppixout: rts ******************************************** * Color table start -- do not add any code * * between GETCVALS and CVALUES! * ******************************************** getcvals: lea 4(pc),a5 ;point A5 at our color value table rts *************************************************************** * The CVALUES table is a 512-byte table (one byte per color * * combination possible on the ST.) Each byte is made up of * * two color indicator bit groups. Bits 0-2 are termed * * color 1, and are used when the printer pixel X and Y * * coordinates add to an even value. Bits 3-5 are termed * * color 2, and are used when the printer pixel X and Y * * coordinates add to an odd value. The three bits in each * * color represent (from high bit to low bit) yellow, magenta * * and cyan. That is, 100 is yellow, 010 is magenta, 001 is * * cyan. These bits are combined to make: 011=blue, 101=green,* * 110=red, 111=black, 000=white. Gray scales are represented * * by 000, and are automatically shaded by the color routine. * *************************************************************** cvalues: * 000-077 * .dc.b %000000,%011001,%011001,%011001,%011001,%011001,%011001,%011001 .dc.b %101101,%001001,%011101,%011101,%011001,%011001,%011001,%011001 .dc.b %101101,%101011,%001001,%011101,%011101,%011001,%011001,%011001 .dc.b %101101,%101101,%101001,%001001,%001001,%011001,%011101,%011101 .dc.b %101101,%101101,%101011,%101001,%001001,%001001,%011101,%011101 .dc.b %101101,%101101,%101101,%101011,%101011,%001001,%011001,%011001 .dc.b %101101,%101101,%101011,%101011,%101011,%101011,%001001,%011001 .dc.b %101101,%101101,%101101,%101011,%101011,%101011,%101001,%001001 * 100-177 * .dc.b %110110,%010010,%011010,%011010,%011001,%011001,%011001,%011001 .dc.b %100100,%000000,%011001,%011001,%011001,%011001,%011001,%011001 .dc.b %101100,%101101,%001001,%011001,%011001,%011001,%011001,%011001 .dc.b %101101,%101011,%101001,%001001,%011001,%011101,%011001,%011001 .dc.b %101101,%101101,%101011,%101001,%001001,%011001,%011101,%011001 .dc.b %101101,%101101,%101101,%101011,%101001,%001001,%011001,%011001 .dc.b %101101,%101101,%101101,%101011,%101011,%101001,%001001,%011001 .dc.b %101101,%101101,%101101,%101101,%101011,%101011,%101001,%001001 * 200-277 * .dc.b %110110,%110010,%010010,%011010,%011010,%011001,%011001,%011001 .dc.b %110100,%110110,%010010,%011010,%011010,%011001,%011001,%011001 .dc.b %100100,%100100,%000000,%011001,%011001,%011001,%011001,%011001 .dc.b %100100,%100100,%100100,%001001,%011001,%011001,%011001,%011001 .dc.b %101100,%101100,%101101,%101001,%001001,%011001,%011001,%011001 .dc.b %101101,%101101,%101101,%101101,%101001,%001001,%011001,%011001 .dc.b %101101,%101101,%101101,%101101,%101101,%101001,%001001,%011001 .dc.b %101101,%101101,%101101,%101101,%101101,%101101,%101001,%001001 * 300-377 * .dc.b %110110,%110110,%110010,%010010,%011010,%011001,%011001,%011001 .dc.b %110110,%110010,%110010,%010010,%011010,%011010,%011001,%011001 .dc.b %110100,%110100,%110110,%010010,%011010,%011001,%011001,%011001 .dc.b %100100,%100100,%100100,%000000,%011001,%011001,%011001,%011001 .dc.b %101100,%101100,%101100,%101001,%001001,%011001,%011001,%011001 .dc.b %101101,%101101,%101101,%101101,%101001,%001001,%011001,%011001 .dc.b %101101,%101101,%101101,%101101,%101011,%101001,%001001,%011001 .dc.b %101101,%101101,%101101,%101101,%101101,%101101,%101001,%001001 * 400-477 * .dc.b %110110,%110110,%110010,%110010,%010010,%011010,%011001,%011001 .dc.b %110110,%110110,%110110,%110010,%010010,%011010,%011001,%011001 .dc.b %110110,%110110,%110110,%110010,%010010,%011010,%011001,%011001 .dc.b %110100,%110100,%110110,%110110,%010010,%011010,%011010,%011001 .dc.b %100100,%100100,%100100,%100100,%000000,%011001,%011001,%011001 .dc.b %101100,%101100,%101100,%101101,%101101,%001001,%011001,%011001 .dc.b %101101,%101101,%101101,%101011,%101011,%101001,%001001,%011001 .dc.b %101101,%101101,%101101,%101101,%101011,%101011,%101001,%001001 * 500-577 * .dc.b %110110,%110110,%110110,%110110,%110010,%010010,%011010,%011010 .dc.b %110110,%110110,%110110,%110110,%110010,%010010,%011010,%011010 .dc.b %110110,%110110,%110110,%110110,%110010,%010010,%011010,%011010 .dc.b %110100,%110100,%110110,%110110,%110010,%010010,%011010,%011010 .dc.b %110100,%110100,%110100,%110110,%110010,%010010,%011010,%011010 .dc.b %100100,%100100,%100100,%100100,%100100,%000000,%011001,%011001 .dc.b %101100,%101100,%101100,%101100,%101101,%101001,%001001,%011001 .dc.b %101100,%101100,%101100,%101101,%101011,%101001,%101001,%001001 * 600-677 * .dc.b %110110,%110110,%110110,%110110,%110010,%110010,%010010,%011010 .dc.b %110110,%110110,%110110,%110110,%110010,%110010,%010010,%011010 .dc.b %110100,%110110,%110110,%110110,%110010,%110010,%010010,%011010 .dc.b %110100,%110100,%110100,%110110,%110010,%110010,%010010,%011010 .dc.b %110100,%110100,%110110,%110110,%110110,%110010,%010010,%011010 .dc.b %110100,%110100,%110100,%110100,%110100,%110110,%010010,%011010 .dc.b %100100,%100100,%100100,%100100,%100100,%100100,%000000,%011001 .dc.b %101100,%101100,%101100,%101100,%101100,%101100,%101101,%001001 * 700-777 * .dc.b %110110,%110110,%110110,%110110,%110010,%110010,%110010,%010010 .dc.b %110110,%110110,%110110,%110110,%110010,%110010,%110010,%010010 .dc.b %110110,%110110,%110110,%110110,%110010,%110010,%110010,%010010 .dc.b %110110,%110110,%110110,%110110,%110010,%110010,%110010,%010010 .dc.b %110100,%110100,%110100,%110100,%110110,%110010,%110010,%010010 .dc.b %110100,%110100,%110100,%110100,%110100,%110110,%110010,%010010 .dc.b %110100,%110100,%110100,%110100,%110100,%110100,%110110,%010010 .dc.b %100100,%100100,%100100,%100100,%100100,%100100,%100100,%000000 filler .ds.l 500 ;pad the end of the routine to be sure of 2000 bytes 9{|H^.bXeȣ;C9UTj:vۯF0T?y^i8`C~zR?bR7#*=L{JO~50P*D/ވ= F*<`N&ۗM_w*X 5Oҥ#D/ވ>OPahy蛢P|f0 P %Qaې-ihG곙;vӰz=:{ipJFS8 S9yUbJU8BXVAFPVN |A@|:BW/?<GN \./^aXX./^aXB.J. /J/^N P3DJyDo y f.^aD.J/^aXBW/^?<=N \:JEmj./<??<?N P#J>?<>N T Jg.l?<N T`8N.?<N T``.B?<N T````v`NJLN^NuNV`R nJf n H"nR RJ@fN^NuNV n H"nR RJ@fN^NuNVHBG`RG nHRJf0JLN^NuNVH.a>`0G \gSGJGl0GB(JLN^NuNV>N =@>N #Bn`*0n/? ?< N T./</9?.BgN =@Jng&./</9?.?<N BW?< N TN^Nu/<?<&NN\Nu#Nu#NN/9Nu#NM/9Nu#NA/9NuNV30.|Hм F-@=|` nH2n2RRn nm.FNB@096N^NuNV####6#j#r#F> aF36NpN^NuNV>a*pN^NuNV#j>N N^NuNV3# j>4N N^NuNV#j# n>ZN n08B@096N^NuNV3# j>#N N^Nu  Printer Driver[1][DEGAS Printer Installer|by Tom Hudson| | 1986 ANTIC Publishing|Version 1.0][Horizontal| Vertical ][1][Printer driver installed][ OK ][3][ |Can't open driver file!| ][ Sorry ][3][ |That is not a printer driver!| ][ Sorry ]*.PRT"  " :   "     $    Ouː9lK}s˳xq%wX:{qHcc?+2P#Hn>`LR_ȭ 5 v'>pxq֎\<[Ċc2=`X 0_`եOt=LːmF F4B"xq֎]'_jEըȣ4F@JE;˴6[D2\dGĮ,Xq8\ѻ4_g%>uҡ+KGҬxfdy0s-S:djQ4MpvL҅MLȲ>x3Za%!L`gh!գx\u9Ĝ'A˵:Wpޔ{+a؋qYXwLXh`sLḰ2Зn{+2 c\X.+LVg/s?'!Ijb"7kky7^$X?帉-Ys8`ձ?usdKHt}@a\ƼQzl}VC :X;b]7欣OcIٯ*C HidtHW hhcnH<JJܙyI_Ӯ`ؐAk 5qϒ}~EI)(|IV?yN?;ͩXh/`%klU! w[.򋸜>ZM INSTALL.ACC Screen dump patcher by Tom Hudson Introduction This useful accessory loads a DEGAS format printer driver, and forces the ST to use this when you press Alternate-HELP, instead of the built-in screen dump routine which does not work with most printers. DEGAS printer drivers are widely available in the public domain, for many different types of printer. Moreover you can construct your own, if there isn't already a suitable one available, using PRT_MAKE. With PRT_MAKE to build a printer driver, and INSTALL to use it, you should be getting superb screen dumps in future. DEGAS printer drivers A DEGAS printer driver is a short program that scans the screen memory, converts the pixels into graphics data, and sends it to the printer. When Tom Hudson wrote DEGAS, he invented, defined and documented a modular printer driver format. This allowed assembler programmers to write drivers for any type of printer. Many were written and placed in the public domain. This here program (INSTALL.ACC) installs any such driver in place of the ST's built-in screen dump routine. First, it loads the driver into memory. Then, it finds the address at which it was loaded, and places this address into the location that normally holds the address of the screen dump routine. Therefore when you press Alt-HELP, or when a program calls the screen dump routine, the DEGAS driver is used instead of the built- in routine. Using INSTALL.ACC This program is a desk accessory. This means that you can use it without quitting from your program, provided there is a menu-bar. (If your program has no menu-bar or doesn't allow you to use desk accessories, then you will have to quit and return to the Desktop before using INSTALL.) Being a desk accessory, INSTALL.ACC must be on your boot disk - normally the disk that is in Drive A: (or Drive C: for hard disk users) when you switch on your ST. Once your ST is up and running, you should find Printer Driver in the Desk (leftmost) menu on the menu-bar. Click this menu item to activate the program. An alert box will appear asking whether you require vertical or horizontal format screen-dumps. Vertical means printing the picture across the page, from the top to the bottom. Horizontal means printing it down the page, from the left to the right. Having made this choice you are presented with a File Selector box. Choose the driver you wish to use, and click OK. It must be a correctly formatted printer driver (2000 bytes in size). You will observe some disk activity, and an alert box will tell you that the driver has been loaded. From now on, whenever you press Alt-HELP, your ST will print a copy of the screen using the DEGAS printer driver that you loaded. Moreover, by using the accessory you can load a new driver at any time, to replace the one currently loaded. This will allow you to print screen dumps with different sizes and resolutions at will. By using the PRT_MAKE program, you can construct printer drivers that make use of your printer's best graphics features, with your choice of size, quality, and speed. Program credits This program was written by Tom Hudson, the author of DEGAS Elite and CAD-3D, and published in STart magazine, volume 1 issue 4. It may not actually be public domain. But it's so useful, and STart magazine is apparently not interested, that we are offering it as a public service for the many people who need a DEGAS printer driver. This document was written by Martyn Dryden for SWSW\`Pn/_`NPׯX9ΧNKGh4t"dxތ\[{cc^{GP`SnC_c*R [_y2»"+ V"ѿR [~sKUM"Xk[MH7Yxjˁxz Gt(68* [~+3gGuxCPW̳I+f'~w[ A\z:i5VsQqkPQ`C,_a-U7^s>]tǤ5؛Hލ\VkXs\dXv9dEի_t?8ˣJGG|d|vy3|]QàBw'nҞ+ dm7s7sᣒb"=ނ[u]of|hx'!2oks7sᣒb:W֗D"R8`;8=`~?m>սy[_tJςS|ˠ7𷛐m~;{e``XBRAFPRTAfNh f 2(a$Ns fpAgpNs/:NuAf@|AAA ApNsHy?< NA\Hzx?<-?<NMPAd Bg </?<1NA p Print Patch V 1.0 by Frank Pawlowski q &n8np٣+P.]4s:ߜf gDQ\frDǾVkkP}Zf^hYfKTѫ̣[qw=ϣNOC϶p&`|܍\[xcbX{\`Xl_`Mɒ_ss!˴JK˺t#TI-o[KcSn{d`hWǤnQMa_DG9˖|K+pEdJni{WcjNnWX\ŝ_S}PȔmu@ y~tt\x޸-\oJWPXO\Tnng`yi՚jDs J~.GˇB"QO(e[McUj{h`n[iWMf_BC9ːxK-tCdOkc{c,{\Phnn`}b՟oFs J{.G˂A"TN-k[KcS`{e`i^ǤnQMa_DA9˖yK+sEdImm{TciCmYX_Ŕ_R}PȕnuA xxutPx޾(\iMQTXI\R`nf`~`՜lDs Jx(GˁG"WL.i[HcPn{k`kVϤlYMc_AC9˓{K.u@dLho{VclMhWXZÜ_TuPȓfuF zrtVx޹.\nOVVXN\UnnFFPRINT SHOULD BE COPIED INTO AN AUTO FOLDER OF YOUR BOOT DISK ˑsK-wCdOki{PcoOkUXY_W{PȐhuD}rptTxެH28ʉC 7.,ӿmp L$,:&T7,I9{ȅ = 5xҷ2996+=#LXr))[=5$Ӥ>(p6?|ى\gZ-Q59[ȬC4)2@$Nq@""U\Ѱ#: =l",y3>菑C( (x޴1@㍍q<=/e4iQD*i9)󦵖vU)x ٢199,UV# +VXx?/7(3xMƗq@8ꏴ>P$o5G=4: C *ڨ*#5[]ߠ3kS`@籬o9:猉C >[ 5-N3]ⲇ9*l.TL{5<甌 vU%k1-("ʊ<Iخde40TF =,.CC5|1ي`)j<:US+9vg޳L =|{[1'xI$@iVׄ@mp>\Ҽ e:vTDX=|{[CC Uіȵ|@xNׄ@mpUSjk:gTDX-l#͝CCx[9,N:@9?-\jwI՟_n㳓h/>[*-@ ڥ0>5ۧK>k7gVZS=4 C9,N: (>Ʀ6U