|
|
1.1 root 1: /********************** Module Header **************************************
2: * code.c
3: * Contains device specific code for Toshiba printers. This involves
4: * using only 6 bits per byte.
5: *
6: * HISTORY:
7: * 13:51 on Mon 13 Jan 1992 -by- Lindsay Harris [lindsayh]
8: * Initial version.
9: *
10: * Copyright (C) 1992 Microsoft Corporation.
11: *
12: **************************************************************************/
13:
14: #include <windows.h>
15:
16:
17: #include <ntmindrv.h>
18:
19:
20: NTMD_INIT ntmdInit; /* Function address in RasDD */
21:
22:
23:
24: /*
25: * Include the module initialisation function so that RasDD will
26: * recognise our module.
27: */
28:
29: #define _GET_FUNC_ADDR 1
30:
31: #include "modinit.c"
32:
33:
34: #define BBITS 8 /* Bits in a byte */
35:
36:
37: /***************************** Function Header *****************************
38: * CBFilterGraphics
39: * Manipulate output data before calling RasDD's buffering function.
40: * This function is called with the raw bit data that is to be
41: * sent to the printer.
42: *
43: * NOTE: THIS FUNCTION OVERWRITES THE DATA IN THE BUFFER PASSED IN!!!
44: *
45: * RETURNS:
46: * Value from WriteSpoolBuf
47: *
48: * HISTORY:
49: * 13:53 on Mon 13 Jan 1992 -by- Lindsay Harris [lindsayh]
50: * Adapted from other drivers for Toshiba stuff.
51: *
52: *
53: ****************************************************************************/
54:
55: int
56: CBFilterGraphics( lpdv, lpBuf, len )
57: void *lpdv;
58: BYTE *lpBuf;
59: int len;
60: {
61:
62: /*
63: * Not hard to do - take the 3 bytes containing the 24 bits to
64: * output, transform them to 4 bytes (6 bits apiece) and send them
65: * off to the output buffering function.
66: */
67:
68:
69: register DWORD rdw;
70:
71: int cbSent;
72:
73: BYTE bBuf[ 4 ]; /* Store data, transfer to WriteSpoolBuf */
74:
75:
76: cbSent = len; /* Assume success */
77: while( (len -= 3) >= 0 )
78: {
79: rdw = 0;
80:
81: /* Step 1: Assemble the 3 bytes into a register */
82:
83: rdw = (DWORD)*lpBuf++;
84: rdw = (rdw << BBITS) | (DWORD)*lpBuf++;
85: rdw = (rdw << BBITS) | (DWORD)*lpBuf++;
86:
87:
88: /* Step 2: Extract the data from the register 6 bits at a time */
89:
90: bBuf[ 3 ] = (BYTE)(rdw & 0x3f); /* 6 bits only */
91: rdw >>= 6; /* The above bits */
92:
93: bBuf[ 2 ] = (BYTE)(rdw & 0x3f);
94: rdw >>= 6;
95:
96: bBuf[ 1 ] = (BYTE)(rdw & 0x3f);
97: rdw >>= 6;
98:
99: bBuf[ 0 ] = (BYTE)(rdw & 0x3f);
100:
101: ntmdInit.WriteSpoolBuf( lpdv, bBuf, 4 );
102: }
103:
104:
105: return cbSent; /* Silly, but compatible with WriteSpoolBuf */
106:
107: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.