1 /* A simple program that prints a single file, directly using
\r
2 the Parallel Device Driver in MMURTL (Device No. 3 "LPT").
\r
3 Print does perform some formatting, but it's crude.
\r
5 Print File, Version 1.0
\r
6 Usage: Print Filename /1 /2 /4 /8 /F /D /B
\r
7 /1 /2 /4 /8 - Tab stop translation value
\r
8 /F no FormFeed at end of file
\r
9 /D Display file while printing
\r
10 /B Binary print. NO translation, no FF
\r
12 To build Print.run, Use Makeit.bat in DOS, or use CM32 and DASM:
\r
24 #include "\OSSource\MDevDrv.h"
\r
25 #include "\OSSource\MJob.h"
\r
26 #include "\OSSource\MKbd.h"
\r
27 #include "\OSSource\MTimer.h"
\r
28 #include "\OSSource\MVid.h"
\r
29 #include "\OSSource\Parallel.h"
\r
47 struct statRecL lpt;
\r
49 /*****************************************************/
\r
51 void main(long argc, unsigned char *argv[])
\r
53 long erc, erck, i, cl;
\r
54 unsigned char b, lastb;
\r
57 SetJobName("Printing", 8);
\r
61 for(i=1; i < argc; ++i) /* start at arg 1 */
\r
69 case '1' : /* Tab Translation Width */
\r
73 tabstops = *ptr - 0x30;
\r
75 case 'F' : /* No FF at end of file */
\r
79 case 'D' : /* Display while printing */
\r
83 case 'B' : /* BINARY - No translation at all! */
\r
88 printf("Invalid switch");
\r
94 strncpy (name, argv[i], 79);
\r
99 /* Input file not explicitly named errors out */
\r
101 printf("Print File, Version 1,0\r\n");
\r
102 printf("Usage: Filename /1 /2 /4 /8 /F /D /B\r\n");
\r
103 printf("/1 /2 /4 /8 - Tab stop translation value\r\n");
\r
104 printf("/F no FormFeed at end of file\r\n");
\r
105 printf("/D Display file while printing\r\n");
\r
106 printf("/B Binary print. NO translation, no FF\r\n\n");
\r
107 printf("Error: Source filename required\r\n");
\r
111 /* Get the 64 byte device status block which is specific to the
\r
112 parallel device driver. The structure is defined in parallel.h
\r
113 We do this just to see if it's a valid device.
\r
116 erc = DeviceStat(3, &lpt, 64, &i);
\r
120 printf("Error getting LPT Device Status: %d\r\n", erc);
\r
124 /* If device status went OK, we open the printer port */
\r
126 /* device, dOpNum, dLBA, dnBlocks, pData */
\r
127 erc = DeviceOp(3, CmdOpenL, 0, 0, &i);
\r
131 printf("OpenLPT ERROR: %d \r\n", erc);
\r
135 printf("Printing %s ...\r\n", name);
\r
137 /* This is it... */
\r
139 f = fopen(name, "r");
\r
143 /* device, dOpNum, dLBA, dnBlocks, pData */
\r
144 erc = DeviceOp(3, CmdCloseLU, 0, 0, &i);
\r
145 printf("Can't open: %s\r\n", name);
\r
154 while ((!fdone) && (!erc))
\r
167 erc = DeviceOp(3, CmdWriteB, 0, 1, &lastb);
\r
172 { /* print/translate the char */
\r
174 erc = DeviceOp(3, CmdWriteB, 0, 1, &b);
\r
180 erc = DeviceOp(3, CmdWriteB, 0, 1, &lastb);
\r
182 erc = DeviceOp(3, CmdWriteB, 0, 1, &b);
\r
184 printf("\r\n", lastb);
\r
185 col = 0; /* reset */
\r
190 erc = DeviceOp(3, CmdWriteB, 0, 1, " ");
\r
194 } while (col % tabstops);
\r
200 erc = DeviceOp(3, CmdWriteB, 0, 1, &b);
\r
202 printf("Error Writing Byte: %d\r\n", erc);
\r
207 if (i%100==0) /* every 100 chars see if they want to abort */
\r
209 erck = ReadKbd(&key, 0);
\r
213 if (key & 0xff == 0x1b)
\r
222 if ((!fBinary) && (!NoFF))
\r
224 erc = DeviceOp(3, CmdWriteB, 0, 1, "\f");
\r
228 /* device, dOpNum, dLBA, dnBlocks, pData */
\r
229 erc = DeviceOp(3, CmdCloseL, 0, 0, &i);
\r
231 printf("Can't close LPT. Error: %d\r\n", erc);
\r
232 printf("Done\r\n");
\r