This sample code enumerates all the queues and the jobs in them that are on the local workstation.
#define INCL_BASE #define INCL_SPL #define INCL_SPLDOSPRINT #define INCL_SPLERRORS #include <os2.h> #include <stdio.h> INT main () { SPLERR splerr; USHORT jobCount; ULONG cbBuf; ULONG cTotal; ULONG cReturned; ULONG cbNeeded; ULONG ulLevel; ULONG i,j; PSZ pszComputerName; PBYTE pBuf; PPRQINFO3 prq; PPRJINFO2 prj2; ulLevel = 4L; pszComputerName = (PSZ)NULL; splerr = SplEnumQueue(pszComputerName, ulLevel, pBuf, 0L, /* cbBuf */ &cReturned, &cTotal, &cbNeeded, NULL) if (splerr == ERROR_MORE_DATA || splerr == NERR_BufTooSmall) { if (!DosAllocMem(&pBuf, cbNeeded, PAG_READ | PAG_WRITE | PAG_COMMIT)) { cbBuf = cbNeeded; splerr = SplEnumQueue(pszComputerName, ulLevel, pBuf, cbBuf, &cReturned, &cTotal, &cbNeeded, NULL) if (splerr == NO_ERROR) { /* Set pointer to point to the beginning of the buffer */ prq = (PPRQINFO3)pBuf; /* cReturned has the count of the number of PRQINFO3 structures */ for (i=0;i < cReturned; i++) { printf("Queue info: name - %s\n", prq->pszName); if (prq->fsType & PRQ3_TYPE_APPDEFAULT) printf(" This is the application default print queue\n"); printf(" priority - %d starttime - %d endtime - %d fsType - %X\n", prq->uPriority, prq->uStartTime, prq->uUntilTime, prq->fsType); printf(" pszSepFile - %s\n", prq->pszSepFile); printf(" pszPrProc - %s\n", prq->pszPrProc); printf(" pszParms - %s\n", prq->pszParms); printf(" pszComment - %s\n", prq->pszComment); printf(" pszPrinters - %s\n", prq->pszPrinters); printf(" pszDriverName- %s\n", prq->pszDriverName); if (prq->pDriverData) { printf(" pDriverData->cb - %ld\n", (ULONG)prq->pDriverData->cb); printf(" pDriverData->lVersion - %ld\n", (ULONG)prq->pDriverData->lVersion); printf(" pDriverData->szDeviceName- %s\n", prq->pDriverData->szDeviceName); } /* Save the count of jobs. There are this many PRJINFO2 */ /* structures following the PRQINFO3 structure */ jobCount = prq->cJobs; printf("Job count in this queue is %d\n\n",jobCount); /* Increment the pointer past the PRQINFO3 structure */ prq++; /* Set a pointer to point to the first PRJINFO2 structure */ prj2=(PPRJINFO2)prq; for (j=0;j < jobCount ; j++) { printf("Job ID = %d\n", prj2->uJobId); printf("Job Priority = %d\n", prj2->uPriority); printf("User Name = %s\n", prj2->pszUserName); printf("Position = %d\n", prj2->uPosition); printf("Status = %d\n", prj2->fsStatus); printf("Submitted = %ld\n",prj2->ulSubmitted); printf("Size = %ld\n",prj2->ulSize); printf("Comment = %s\n", prj2->pszComment); printf("Document = %s\n\n",prj2->pszDocument); /* Increment the pointer to point to the next structure */ prj2++; } /* endfor jobCount */ /* After doing all the job structures, prj2 points to the next */ /* queue structure. Set the pointer for a PRQINFO3 structure */ prq = (PPRQINFO3)prj2; }/*endfor cReturned */ } DosFreeMem(pBuf); } } /* end if Q level given */ else { /* If we are here we had a bad error code. */ /* Print it and some other info. */ printf("SplEnumQueue Error=%ld, Total=%ld, Returned=%ld, Needed=%ld\n", splerr, cTotal, cReturned, cbNeeded); } DosExit(EXIT_PROCESS, 0); return(splerr); } /* end main */