Jump to content

SplEnumDevice

From EDM2
Revision as of 22:28, 7 June 2020 by Ak120 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

This function lists print device on a server, optionally supplying status information.

Syntax

SplEnumDevice(pszComputerName, ulLevel, pBuf, cbBuf, pcReturned, pcTotal, pcbNeeded, pReserved)

Parameters

pszComputerName (PSZ) - input
Name of computer where print devices are to. be listed.
A NULL string specifies the local workstation.
ulLevel (ULONG) - input
Level of detail required.
This must be 0, 2 or 3.
pBuf (PVOID) - output
Buffer.
The returned contents of the buffer depend on the value indicated in ulLevel as follows:
ulLevel Buffer Contents
0 An array of port names. Each name consists of 9 characters, including a null terminator.
2 An array of print device names of type PSZ.
3 An array of PRDINFO3 structures.
If no job is printing on the print device, bits 2-11 of fsStatus in the PRDINFO3 data structure are meaningless.
cbBuf (ULONG) - input
Size, in bytes, of Buffer.
It must be greater than 0.
pcReturned (PULONG) - output
Number of entries returned.
pcTotal (PULONG) - output
Number of entries available.
pcbNeeded (PULONG) - output
Size in bytes of available information.
A value of 0 specifies that the size is not known.
pReserved (PVOID) - output
Reserved value, must be NULL.

Returns

rc (SPLERR) - returns
Return code.
NO_ERROR (0) : No errors occurred.
ERROR_NOT_SUPPORTED (50) : This request is not supported by the network.
ERROR_BAD_NETPATH (53) : The network path cannot be located.
ERROR_INVALID_PARAMETER (87) : An invalid parameter is specified.
ERROR_INVALID_LEVEL (124) : The level parameter is invalid.
ERROR_MORE_DATA (234) : Additional data is available.
NERR_NetNotStarted (2102) : The network program is not started.
NERR_InvalidComputer (2351) : The computer name is invalid.

Sample

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

Call Sequence

#define INCL_SPL /* Or use INCL_PM, */
#include <os2.h>

PSZ       pszComputerName;  /*  Name of computer where print devices are to. be listed. */
ULONG     ulLevel;          /*  Level of detail required. */
PVOID     pBuf;             /*  Buffer. */
ULONG     cbBuf;            /*  Size, in bytes, of Buffer. */
PULONG    pcReturned;       /*  Number of entries returned. */
PULONG    pcTotal;          /*  Number of entries available. */
PULONG    pcbNeeded;        /*  Size in bytes of available information. */
PVOID     pReserved;        /*  Reserved value, must be NULL. */
SPLERR    rc;               /*  Return code. */

rc = SplEnumDevice(pszComputerName, ulLevel,
       pBuf, cbBuf, pcReturned, pcTotal, pcbNeeded,
       pReserved);

Remarks

If ulLevel is set to 0, each port name in pBuf is truncated to 8 characters.

Related Functions