SplQueryJob - Example Code

The following sample code will print out the information contained in a PRJINFO3 structure that is returned from a SplQueryJob call. The parameters that are entered on the command line are the computer name, queue name, and the job id.

#define INCL_SPL
#define INCL_SPLDOSPRINT
#define INCL_SPLERRORS
#include <os2.h>
#include <stdio.h>    /* for printf call  */
#include <stdlib.h>   /* for atoi call    */

INT main (argc, argv)
    INT argc;
    CHAR *argv[];
{
    INT       splerr;
    ULONG     cbBuf ;
    ULONG     cbNeeded ;
    ULONG     ulLevel ;
    ULONG     ulJob ;
    PSZ       pszComputerName ;
    PSZ       pszQueueName ;
    PVOID     pBuf;
    PPRJINFO3 pprj3 ;

    /* Input the parameters Computer Name, Queue Name,and Job ID. Check that  */
    /* three parameters have been entered along with the program name.        */
    if (argc != 4)
    {
       /* Print a message and exit if wrong number of parameters entered      */
       printf("Syntax:  sjqry  ComputerName  QueueName  JobID    \n");
       DosExit( EXIT_PROCESS , 0 ) ;
    }
    /* Set the parameters to the values entered on the command line.          */
    pszComputerName = argv[1] ;
    pszQueueName = argv[2] ;
    ulJob = atoi (argv[3]);

    /* Valid levels are 0,2,and 3. Level 3 returns a PRJINFO3 structure.      */
    ulLevel = 3 ;

    /* Call the function with cbBuf equal to zero in order to get the number  */
    /* of bytes needed returned in cbNeeded.                                  */
    splerr = SplQueryJob(pszComputerName,pszQueueName,ulJob,
                            ulLevel, (PVOID)NULL, 0L, &cbNeeded );

    /* Only continue if the error return code is one of the two following.    */
    if (splerr == NERR_BufTooSmall || splerr == ERROR_MORE_DATA )
    {
       /* Allocate memory for the buffer(pBuf). Only continue if memory is    */
       /* successfully allocated.                                             */
       if (DosAllocMem( &pBuf, cbNeeded,
                        PAG_READ|PAG_WRITE|PAG_COMMIT) )
       {
          /* Set the count of bytes needed for the buffer to the value        */
          /* returned in cbNeeded from the first call.                        */
          cbBuf = cbNeeded ;

          /* Make the call again with all the correct values.                 */
          SplQueryJob(pszComputerName,pszQueueName,ulJob,
                               ulLevel, pBuf, cbBuf, &cbNeeded) ;

          /* Set a pointer to point to the beginning of the buffer that holds */
          /* the returned structure.                                          */
          pprj3=(PPRJINFO3)pBuf;

          /* Print out the information for each element in the structure.     */
          printf("Job ID      = %d\n", pprj3->uJobId);
          printf("Job Priority= %d\n", pprj3->uPriority);
          printf("User Name   = %s\n", pprj3->pszUserName);
          printf("Position    = %d\n", pprj3->uPosition);
          printf("Status      = %d\n", pprj3->fsStatus);
          printf("Submitted   = %ld\n",pprj3->ulSubmitted);
          printf("Size        = %ld\n",pprj3->ulSize);
          printf("Comment     = %s\n", pprj3->pszComment);
          printf("Document    = %s\n", pprj3->pszDocument);
          printf("Notify Name = %s\n", pprj3->pszNotifyName);
          printf("Data Type   = %s\n", pprj3->pszDataType);
          printf("Parms       = %s\n", pprj3->pszParms);
          printf("Status      = %s\n", pprj3->pszStatus);
          printf("Queue       = %s\n", pprj3->pszQueue);
          printf("QProc Name  = %s\n", pprj3->pszQProcName);
          printf("QProc Parms = %s\n", pprj3->pszQProcParms);
          printf("Driver Name = %s\n", pprj3->pszDriverName);
          printf("Printer Name= %s\n", pprj3->pszPrinterName);

          /* If pDriverData is NULL, then we can not access any data.         */
          if (pprj3->pDriverData)
          {
             printf("  pDriverData->cb           - %ld\n",
                                    (ULONG)pprj3->pDriverData->cb);
             printf("  pDriverData->lVersion     - %ld\n",
                                    (ULONG)pprj3->pDriverData->lVersion) ;
             printf("  pDriverData->szDeviceName - %s\n",
                                       pprj3->pDriverData->szDeviceName) ;
          }
          printf("/n");

          /* Free memory that we allocated.                                   */
          DosFreeMem(pBuf) ;
       }
    }
    else
    {
       /* If we are here than we have an error code. Print it out.            */
       printf("SplQueryJob Error=%ld,Bytes Needed=%ld\n",splerr, cbNeeded);
    }
    DosExit( EXIT_PROCESS , 0 ) ;
    return(splerr);
}


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