#define NOCOMM /* to eliminate lint warnings in windows.h */ #include #ifdef WIN16 #define APIENTRY FAR PASCAL #endif #ifdef WIN16 /* LAN Manager 2.0 toolkit */ #define INCL_NETERRORS #define INCL_NETSERVER #define INCL_NETSHARE #include #include #include #else #include #include #include #include #include #include #endif #include "ntprint.h" #include #define NODRIVERS 7 DRIVER10 Driver[NODRIVERS]={ "RASDD.Optical Wizard", "RASDD", "Optical Wizard", "Optical Wizard Printer", "RASDD.DLL", "RASDD.HP LaserJet III", "RASDD", "HP LaserJet III", "HP LaserJet III Printer", "RASDD.DLL", "RASDD.HP LaserJet IID", "RASDD", "HP LaserJet IID", "HP LaserJet IID Duplex Printer", "RASDD.DLL", "RASDD.EPSON.FX-80e", "RASDD", "EPSON FX-80e", "EPSON FX-80e 9 pin printer", "RASDD.DLL", "RASDD.New Printer", "RASDD", "New Printer", "New Printer with no installed driver", "RASDD.DLL", "PSCRIPT.QMS-PS 810", "PSCRIPT", "QMS-PS 810", "QMS PostScript Printer", "PSCRIPT.DLL", "IBMNULL", "IBMNULL", "", "IBM NULL Printer Driver", "IBMNULL.DRV"}; #define NOPRINTPROCS 3 PRINTPROC PrintProc[NOPRINTPROCS]={"WINPRINT", "PMPRINT", "LMPRINT"}; SPLERR APIENTRY DosPrintDriverEnum(LPSTR pServer, USHORT uLevel, LPBYTE pBuf, ULONG cbBuf, LPWORD pcReturned, LPWORD pcTotal) { LPDRIVER10 pDriver=(LPDRIVER10)pBuf; unsigned i; pBuf+=sizeof(DRIVER10)*NODRIVERS; for (i=0; i < NODRIVERS; i++) { pDriver[i].pDriverName=pBuf; lstrcpy(pBuf, Driver[i].pDriverName); pBuf+=lstrlen(pBuf)+1; pDriver[i].pDeviceName=pBuf; lstrcpy(pBuf, Driver[i].pDeviceName); pBuf+=lstrlen(pBuf)+1; pDriver[i].pDescription=pBuf; lstrcpy(pBuf, Driver[i].pDescription); pBuf+=lstrlen(pBuf)+1; pDriver[i].pFileName=pBuf; lstrcpy(pBuf, Driver[i].pFileName); pBuf+=lstrlen(pBuf)+1; } *pcReturned=NODRIVERS; *pcTotal=NODRIVERS; return NERR_Success; } SPLERR APIENTRY DosPrintServerEnum(USHORT uLevel, LPBYTE pBuf, ULONG cbBuf, LPWORD pcReturned, LPWORD pcTotal) { #ifdef WIN16 struct server_info_1 *pserver_info_1; LPSERVER pServer=(LPSERVER)pBuf; WORD NoReturned = 0, Total, i; pserver_info_1=(struct server_info_1 *)LocalAlloc(LMEM_FIXED, 10240); NetServerEnum2(NULL, 1, (LPSTR)pserver_info_1, 10240, &NoReturned, &Total, -1l, NULL); pBuf+=sizeof(SERVER)*NoReturned; for (i=0; ipNext=(TEMP *)LocalAlloc(LMEM_FIXED, sizeof(TEMP)); pPrev=pPrev->pNext; } else { pFirst=pPrev=(TEMP *)LocalAlloc(LMEM_FIXED, sizeof(TEMP)); } pPrev->pNext=0; pPrev->pName=(char *)LocalAlloc(LMEM_FIXED, strlen(ServerName)+ strlen(pShare[j].shi1_netname)+2); strcat(strcat(strcpy(pPrev->pName, ServerName), "\\"), pShare[j].shi1_netname); pPrev->pServer=AllocPrintStr(ServerName); pPrev->pShare=AllocPrintStr(pShare[j].shi1_netname); pPrev->pComment=AllocPrintStr(pShare[j].shi1_remark); NoPrinters++; } } } #endif } LocalFree((HANDLE)pShare); LocalFree((HANDLE)pserver_info_1); pBuf+=sizeof(PRINTER)*NoPrinters; for (i=0; ipName); pBuf+=lstrlen(pBuf)+1; pPrinter[i].pServer=pBuf; lstrcpy(pBuf, pFirst->pServer); pBuf+=lstrlen(pBuf)+1; pPrinter[i].pShare=pBuf; lstrcpy(pBuf, pFirst->pShare); pBuf+=lstrlen(pBuf)+1; pPrinter[i].pComment=pBuf; lstrcpy(pBuf, pFirst->pComment); pBuf+=lstrlen(pBuf)+1; pNext=pFirst->pNext; LocalFree((HANDLE)pFirst->pName); LocalFree((HANDLE)pFirst->pServer); LocalFree((HANDLE)pFirst->pShare); LocalFree((HANDLE)pFirst->pComment); LocalFree((HANDLE)pFirst); pFirst=pNext; } *pcReturned=NoPrinters; *pcTotal=Total; return NERR_Success; } #endif // PRINTERENUM