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


[Back: SplEnumQueue - Related Functions]
[Next: SplEnumQueue - Topics]