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 */