This sample code enumerates all the devices on the local workstation. It then prints out the information.
#define INCL_BASE #define INCL_DOSMEMMGR #define INCL_SPL #define INCL_SPLDOSPRINT #define INCL_SPLERRORS #include <os2.h> #include <stdio.h> INT main () { ULONG cbBuf ; ULONG cTotal; ULONG cReturned ; ULONG cbNeeded ; ULONG ulLevel = 3L; ULONG i ; SPLERR splerr ; PSZ pszComputerName ; PBYTE pBuf ; PPRDINFO3 pprd3 ; pszComputerName = (PSZ)NULL ; /* Make the call with cBuf = 0 so that you will get the size of the */ /* buffer needed returned in cbNeeded. */ splerr = SplEnumDevice(pszComputerName, ulLevel, pBuf, 0L, /* cbBuf */ &cReturned, &cTotal, &cbNeeded, NULL) ; /* Only continue if the error codes ERROR_MORE_DATA or */ /* NERR_BufTooSmall are returned. */ if (splerr == ERROR_MORE_DATA || splerr == NERR_BufTooSmall) { /* Allocate memory for the buffer that will hold the returning info. */ if (!DosAllocMem( &pBuf, cbNeeded, PAG_READ|PAG_WRITE|PAG_COMMIT) ) { cbBuf = cbNeeded ; /* Make call again with the proper buffer size. */ splerr = SplEnumDevice(pszComputerName, ulLevel, pBuf, cbBuf, &cReturned, &cTotal, &cbNeeded, NULL) ; /* If no errors, print out the buffer information. */ if (splerr == NO_ERROR) { for (i=0;i < cReturned ; i++) { /* Each time through the loop increase the pointer. */ pprd3 = (PPRDINFO3)pBuf+i ; printf("Device info:pszPrinterName - %s\n", pprd3->pszPrinterName) ; printf(" pszUserName - %s\n", pprd3->pszUserName); printf(" pszLogAddr - %s\n", pprd3->pszLogAddr); printf(" uJobId - %d fsStatus - %X\n", pprd3->uJobId , pprd3->fsStatus); printf(" pszStatus - %s\n", pprd3->pszStatus); printf(" pszComment - %s\n", pprd3->pszComment); printf(" pszDrivers - %s\n", pprd3->pszDrivers); printf(" time - %d usTimeOut - %X\n", pprd3->time , pprd3->usTimeOut); } } DosFreeMem(pBuf) ; } } /* end if */ else { printf("SplEnumDevice splerr=%ld, cTotal=%ld, cReturned=%ld, cbNeeded=%ld\n", splerr, cTotal, cReturned, cbNeeded) ; } DosExit( EXIT_PROCESS , 0 ) ; return(splerr); } /* end main */