|
|
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.