|
|
1.1 root 1: /******************************Module*Header*******************************\
2: * Module Name: printer.c
3: *
4: * Contains functions for enermerating printers
5: *
6: * Created: 16-Apr-1992 11:19:00
7: * Author: Petrus Wong
8: *
9: * Copyright (c) 1990 Microsoft Corporation
10: *
11: * Before printing the bInitPrinter is called for enumerating printers
12: * and doing the setup for printing
13: *
14: * When Mandelbrot Dream exits, bCleanupPrinter is called to free up
15: * memory
16: *
17: * Dependencies:
18: *
19: * (#defines)
20: * (#includes)
21: *
22: \**************************************************************************/
23: #include <windows.h>
24: #include <winspool.h>
25: #include <drivinit.h>
26: #include "printer.h"
27:
28: //
29: // Globals for printing
30: //
31: PPRINTER_INFO_1 gpPrinters = NULL;
32: PSZ *gpszPrinterNames = NULL;
33: PSZ *gpszDeviceNames = NULL;
34:
35: BOOL bInitPrinter(HWND);
36: BOOL bCleanupPrinter(VOID);
37:
38: extern HMENU hPrinterMenu;
39: extern INT giNPrinters;
40: extern HWND ghwndMain;
41:
42: /******************************Public*Routine******************************\
43: *
44: * bInitPrinter
45: *
46: * Effects: Enumerating printers...
47: *
48: * Warnings: Globals alert!!
49: *
50: * History:
51: * 16-Apr-1992 -by- Petrus Wong
52: *
53: \**************************************************************************/
54:
55: BOOL bInitPrinter(HWND hwnd) {
56: BOOL bSuccess;
57: DWORD cbPrinters;
58: DWORD cbNeeded, cReturned, j;
59: int i;
60:
61:
62: bSuccess = TRUE;
63: cbPrinters = 4096L;
64:
65: if (!(gpPrinters = (PPRINTER_INFO_1)LocalAlloc((LMEM_FIXED | LMEM_ZEROINIT),
66: cbPrinters)))
67: {
68: MessageBox(ghwndMain, "InitPrint: LocalAlloc for gpPrinters failed.", "Error", MB_OK);
69: return (FALSE);
70: }
71:
72: if (!EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 1, (LPBYTE)gpPrinters,
73: cbPrinters, &cbNeeded, &cReturned))
74: {
75: if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
76: {
77: LocalFree((LOCALHANDLE)gpPrinters);
78: gpPrinters = (PPRINTER_INFO_1)LocalAlloc((LMEM_FIXED | LMEM_ZEROINIT),
79: cbNeeded);
80: cbPrinters = cbNeeded;
81:
82: if (!EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 1, (LPBYTE)gpPrinters,
83: cbPrinters, &cbNeeded, &cReturned))
84: {
85: MessageBox(ghwndMain, "Could not enumerate printers!", "Error", MB_OK);
86: return (FALSE);
87: }
88:
89: }
90: else
91: {
92: MessageBox(ghwndMain, "Could not enumerate printers!", "Error", MB_OK);
93: return (FALSE);
94: }
95: }
96:
97: // allocate some memory.
98:
99: gpszPrinterNames = (PSZ *)LocalAlloc((LMEM_FIXED | LMEM_ZEROINIT),
100: cReturned * (DWORD)sizeof(PSZ));
101:
102: gpszDeviceNames = (PSZ *)LocalAlloc((LMEM_FIXED | LMEM_ZEROINIT),
103: cReturned * (DWORD)sizeof(PSZ));
104:
105: if (giNPrinters != 0) {
106: for (i = 0; i < giNPrinters; i++) {
107: RemoveMenu(hPrinterMenu, 3, MF_BYPOSITION);
108: }
109: giNPrinters = 0;
110: }
111:
112: // insert each printer name into the menu.
113:
114: j = giNPrinters = cReturned;
115: for (i = 0; i < (INT) cReturned; i++)
116: {
117: // insert into menu from bottom up.
118:
119: j--;
120: InsertMenu(hPrinterMenu, 4, MF_BYCOMMAND | MF_STRING,
121: MM_PRINTER + i, (LPSTR)gpPrinters[j].pName);
122:
123: // save a list of printer names, so we can associate them
124: // with their menu indices later.
125:
126: gpszPrinterNames[i] = gpPrinters[j].pName;
127: gpszDeviceNames[i] = gpPrinters[j].pDescription;
128: }
129: #if 0
130: //
131: // Use this if this is called in the MDI child instead
132: //
133: DrawMenuBar(GetParent(GetParent(hwnd)));
134: #endif
135: //
136: // Use this instead if this is called in InitializeApp
137: //
138: DrawMenuBar(hwnd);
139: return (bSuccess);
140: }
141:
142:
143:
144:
145: /******************************Public*Routine******************************\
146: *
147: * bCleanupPrinter
148: *
149: * Effects: Local freeing
150: *
151: * Warnings: globals!!!
152: *
153: * History:
154: * 29-May-1992 -by- Petrus Wong
155: * Wrote it.
156: \**************************************************************************/
157:
158: BOOL bCleanupPrinter(VOID)
159: {
160: if (gpPrinters != NULL)
161: LocalFree((LOCALHANDLE)gpPrinters);
162: if (gpszPrinterNames != NULL)
163: LocalFree((LOCALHANDLE)gpszPrinterNames);
164: if (gpszDeviceNames != NULL)
165: LocalFree((LOCALHANDLE)gpszDeviceNames);
166:
167: return TRUE;
168: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.