home *** CD-ROM | disk | FTP | other *** search
/ Network Support Encyclopedia 96-1 / novell-nsepro-1996-1-cd2.iso / download / netware / psrvr.exe / PS_APIS.TX1 next >
Text File  |  1994-11-28  |  149KB  |  3,037 lines

  1.                            NETWARE PRINT SERVER
  2.                                 June 1994
  3.                                Revision 1.3
  4.  
  5.  
  6.  
  7.  
  8.  
  9.                                Novell, Inc.
  10.                             122 East 1700 South
  11.                                P.O. Box 5900
  12.                           Provo, Utah 84606  USA
  13.  
  14.  
  15.  
  16.  
  17. (c) Copyright 1990, 1994 Novell, Inc.  All rights reserved.  No part of this publication may be reproduced, photocopied, stored on a retrieval system, or transmitted without the express prior written consent of the publisher.
  18.  
  19.  
  20. ABOUT THIS DOCUMENT
  21. This document provides technical information about the services and features of the NetWare Print Server.   It also provides the necessary information for using protocol packets.
  22.  
  23.  
  24. TABLE OF CONTENTS
  25.  
  26. CHAPTER 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
  27.      THE NETWARE PRINT SERVER. . . . . . . . . . . . . . . . . . . . . . .1
  28.           OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
  29.           PRINT SERVER BINDERY OBJECTS . . . . . . . . . . . . . . . . . .2
  30.           PRINT SERVER CLIENTS . . . . . . . . . . . . . . . . . . . . . .2
  31.           PRINT QUEUE BINDERY PROPERTY TYPES . . . . . . . . . . . . . . .2
  32.           DIFFERENCES BETWEEN 3.11 BINDERY AND 4.0 DIRECTORY . . . . . . .3
  33.                Queue Objects . . . . . . . . . . . . . . . . . . . . . . .3
  34.                     OT_PRINT_QUEUE Bindery object. . . . . . . . . . . . .3
  35.                     Queue Directory object . . . . . . . . . . . . . . . .3
  36.                Print Server Objects. . . . . . . . . . . . . . . . . . . .3
  37.                     OT_PRINT_SERVER Bindery Object and Properties. . . . .3
  38.                     Print Server Directory Object and Attributes . . . . .3
  39.                     Record Format for PRINT.IDX. . . . . . . . . . . . . .4
  40.                     Record Format for PRINT.nnn. . . . . . . . . . . . . .4
  41.                     Record Format for QUEUE.nnn. . . . . . . . . . . . . .5
  42.                     Record Format for NOTIFY.nnn . . . . . . . . . . . . .5
  43.                     Record Format for FILESERV . . . . . . . . . . . . . .5
  44.                     Code Needed to Translate From Old Bindery Configuration File Format5
  45.           PRINT SERVER - CLIENT COMMUNICATION. . . . . . . . . . . . . . .6
  46.           PROTOCOL PACKET FORMAT . . . . . . . . . . . . . . . . . . . . .7
  47.           SERVICE MODES. . . . . . . . . . . . . . . . . . . . . . . . . .8
  48.  
  49. CHAPTER 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
  50.      PROTOCOL PACKETS. . . . . . . . . . . . . . . . . . . . . . . . . . 11
  51.           NetWare 3.11 subset. . . . . . . . . . . . . . . . . . . . . . 13
  52.                Abort Print Job . . . . . . . . . . . . . . . . . . . . . 13
  53.                Add Notify Object . . . . . . . . . . . . . . . . . . . . 14
  54.                Add Queue to Printer. . . . . . . . . . . . . . . . . . . 15
  55.                Attach Print Server to File Server. . . . . . . . . . . . 16
  56.                Cancel Down Request . . . . . . . . . . . . . . . . . . . 17
  57.                Change Notify Interval. . . . . . . . . . . . . . . . . . 18
  58.                Change Queue Priority . . . . . . . . . . . . . . . . . . 19
  59.                Change Service Mode . . . . . . . . . . . . . . . . . . . 20
  60.                Delete Notify Object. . . . . . . . . . . . . . . . . . . 21
  61.                Delete Queue From Printer . . . . . . . . . . . . . . . . 22
  62.                Detach Print Server From File Server. . . . . . . . . . . 23
  63.                Down Print Server . . . . . . . . . . . . . . . . . . . . 24
  64.                Eject Form. . . . . . . . . . . . . . . . . . . . . . . . 25
  65.                Get Attached Servers. . . . . . . . . . . . . . . . . . . 26
  66.                Get Notify Object . . . . . . . . . . . . . . . . . . . . 27
  67.                Get Printers Servicing Queue. . . . . . . . . . . . . . . 28
  68. Get Printer Status . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
  69.                Get Print Job Status. . . . . . . . . . . . . . . . . . . 30
  70.                Get Print Server Info . . . . . . . . . . . . . . . . . . 31
  71.                Get Queues Serviced . . . . . . . . . . . . . . . . . . . 32
  72.                Login to Print Server . . . . . . . . . . . . . . . . . . 33
  73.                Mark Top of Form. . . . . . . . . . . . . . . . . . . . . 34
  74.                Rewind Print Job. . . . . . . . . . . . . . . . . . . . . 35
  75.                Set Mounted Form. . . . . . . . . . . . . . . . . . . . . 36
  76.                Start Printer . . . . . . . . . . . . . . . . . . . . . . 37
  77.                Stop Printer. . . . . . . . . . . . . . . . . . . . . . . 38
  78.           NetWare 4.00 additions . . . . . . . . . . . . . . . . . . . . 39
  79.                Add Form. . . . . . . . . . . . . . . . . . . . . . . . . 39
  80.                Dismount Form . . . . . . . . . . . . . . . . . . . . . . 40
  81.                Get Extended Printer Status . . . . . . . . . . . . . . . 41
  82.           NetWare 4.00 - Directory Services Support. . . . . . . . . . . 43
  83.                D.S. Add Notify Object. . . . . . . . . . . . . . . . . . 44
  84.                D.S. Add Queue to Printer . . . . . . . . . . . . . . . . 45
  85.                D.S. Change Notify Interval . . . . . . . . . . . . . . . 46
  86.                D.S.Change Queue Priority . . . . . . . . . . . . . . . . 47
  87.                D.S. Delete Notify Object . . . . . . . . . . . . . . . . 48
  88.                D.S. Delete Queue From Printer. . . . . . . . . . . . . . 49
  89.                D.S. Get Job ID . . . . . . . . . . . . . . . . . . . . . 50
  90.                D.S. Get Notify Object. . . . . . . . . . . . . . . . . . 51
  91.                D.S. Get Printers Servicing Queue . . . . . . . . . . . . 52
  92.                D.S. Get Queues Serviced. . . . . . . . . . . . . . . . . 53
  93.                D.S. Login to Print Server. . . . . . . . . . . . . . . . 54
  94.           NetWare 4.10 - Directory Services Support. . . . . . . . . . . 55
  95.                Unicode D.S. Add Notify Object. . . . . . . . . . . . . . 56
  96.                Unicode D.S. Add Queue to Printer . . . . . . . . . . . . 57
  97.                Unicode D.S. Change Notify Interval . . . . . . . . . . . 58
  98.                Unicode D.S.Change Queue Priority . . . . . . . . . . . . 59
  99.                Unicode D.S. Delete Notify Object . . . . . . . . . . . . 60
  100.                Unicode D.S. Delete Queue From Printer. . . . . . . . . . 61
  101.                Unicode D.S. Get Job ID . . . . . . . . . . . . . . . . . 62
  102.                Unicode D.S. Get Notify Object. . . . . . . . . . . . . . 63
  103.                Unicode D.S. Get Printers Servicing Queue . . . . . . . . 64
  104.                Unicode D.S. Get Queues Serviced. . . . . . . . . . . . . 65
  105.                Unicode D.S. Login to Print Server. . . . . . . . . . . . 66
  106.  
  107. CHAPTER 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
  108.      NWPSRV LIBRARY FUNCTIONS. . . . . . . . . . . . . . . . . . . . . . 67
  109.           Function Calls for Anyone. . . . . . . . . . . . . . . . . . . 68
  110.                NWPSComGetAttachedNServers. . . . . . . . . . . . . . . . 68
  111.                NWPSComGetPrintServerInfo . . . . . . . . . . . . . . . . 68
  112.                NWPSComLoginToPrintServer . . . . . . . . . . . . . . . . 68
  113.           Function Calls for Operators and Users . . . . . . . . . . . . 69
  114.                NWPSComAbortPrintJob. . . . . . . . . . . . . . . . . . . 69
  115.                NWPSComAttachToPrintServer. . . . . . . . . . . . . . . . 69
  116.                NWPSComDetachFromPrintServer. . . . . . . . . . . . . . . 69
  117.                NWPSComGetNotifyObject. . . . . . . . . . . . . . . . . . 69
  118.                NWPSComGetPrintersServicingQ. . . . . . . . . . . . . . . 69
  119.                NWPSComGetPrinterStatus . . . . . . . . . . . . . . . . . 69
  120.                NWPSComGetPrintJobStatus. . . . . . . . . . . . . . . . . 69
  121.                NWPSComGetQueuesServiced. . . . . . . . . . . . . . . . . 69
  122.      Function Calls for Operators Only . . . . . . . . . . . . . . . . . 70
  123.                NWPSComAddNotifyObject. . . . . . . . . . . . . . . . . . 70
  124.                NWPSComAddQueueToPrinter. . . . . . . . . . . . . . . . . 70
  125.                NWPSComAttachPServerToNServer . . . . . . . . . . . . . . 70
  126.                NWPSComCancelDownRequest. . . . . . . . . . . . . . . . . 70
  127.                NWPSComChangeNotifyInterval . . . . . . . . . . . . . . . 70
  128.                NWPSComChangeQueuePriority. . . . . . . . . . . . . . . . 70
  129.                NWPSComChangeServiceMode. . . . . . . . . . . . . . . . . 70
  130.                NWPSComDeleteNotifyObject . . . . . . . . . . . . . . . . 70
  131.                NWPSComDeleteQueueFromPrinter . . . . . . . . . . . . . . 70
  132.                NWPSComDetachPServerFromNServer . . . . . . . . . . . . . 70
  133.                NWPSComDownPrintServer. . . . . . . . . . . . . . . . . . 70
  134.                NWPSComEjectForm. . . . . . . . . . . . . . . . . . . . . 70
  135.                NWPSComMarkTopOfForm. . . . . . . . . . . . . . . . . . . 70
  136.                NWPSComRewindPrintJob . . . . . . . . . . . . . . . . . . 70
  137.                NWPSComSetMountedForm . . . . . . . . . . . . . . . . . . 70
  138.                NWPSComStartPrinter . . . . . . . . . . . . . . . . . . . 70
  139.                NWPSComStopPrinter. . . . . . . . . . . . . . . . . . . . 70
  140.  
  141. CHAPTER 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
  142.      REMOTE PRINTERS . . . . . . . . . . . . . . . . . . . . . . . . . . 71
  143.           INITIALIZING COMMUNICATION . . . . . . . . . . . . . . . . . . 71
  144.           RUN TIME COMMUNICATION . . . . . . . . . . . . . . . . . . . . 72
  145.           REMOTE PRINTER TO PRINT SERVER COMMUNICATION . . . . . . . . . 72
  146.                REMOTE PRINTER STATUS PACKET FORMAT . . . . . . . . . . . 72
  147.           PRINT SERVER TO REMOTE PRINTER COMMUNICATION . . . . . . . . . 73
  148.           REMOTE PRINTER FUNCTION PACKET FORMATS . . . . . . . . . . . . 75
  149.                Get Next Remote Printer . . . . . . . . . . . . . . . . . 76
  150.                Request Remote Printer. . . . . . . . . . . . . . . . . . 77
  151.                Set Remote Mode . . . . . . . . . . . . . . . . . . . . . 78
  152.                Scan Network Printers . . . . . . . . . . . . . . . . . . 79
  153.           REMOTE PRINTER NWPSRV LIBRARY FUNCTION CALLS . . . . . . . . . 81
  154.                Function Calls for Network Printers Only. . . . . . . . . 82
  155.                     NWPSComGetNextRemotePrinter. . . . . . . . . . . . . 82
  156.                     NWPSComRequestRemotePrinter. . . . . . . . . . . . . 82
  157.                     NWPSComSetRemoteMode . . . . . . . . . . . . . . . . 82
  158.           REMOTE PRINTER DATA STREAM TYPES . . . . . . . . . . . . . . . 83
  159.           REMOTE PRINTER TYPES . . . . . . . . . . . . . . . . . . . . . 84
  160.  
  161. APPENDIX A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
  162.      PRINT SERVER COMMUNICATION ERROR CODES (numerical). . . . . . . . . 85
  163.  
  164. APPENDIX B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
  165.      PRINT SERVER ERROR CODES (numerical). . . . . . . . . . . . . . . . 87
  166.  
  167. APPENDIX C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
  168.      PRINT SERVER COMMUNICATION ERROR CODES (alphabetical) . . . . . . . 93
  169.  
  170. APPENDIX D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
  171.      PRINT SERVER ERROR CODES (alphabetical) . . . . . . . . . . . . . . 95
  172.  
  173. APPENDIX E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
  174.      FUNCTION CONSTANTS. . . . . . . . . . . . . . . . . . . . . . . . . 97
  175.  
  176. APPENDIX F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
  177.      PRINTER STATUS CODES. . . . . . . . . . . . . . . . . . . . . . . . 99
  178.  
  179. APPENDIX G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
  180.      RECORD STRUCTURES . . . . . . . . . . . . . . . . . . . . . . . . .101
  181.           3.11 QUEUE JOBS. . . . . . . . . . . . . . . . . . . . . . . .101
  182.           4.00 QUEUE JOBS. . . . . . . . . . . . . . . . . . . . . . . .103
  183.      CLIENT RECORD AREA. . . . . . . . . . . . . . . . . . . . . . . . .105
  184.  
  185. APPENDIX H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
  186.      ACCESS LEVELS . . . . . . . . . . . . . . . . . . . . . . . . . . .107
  187.      JOB OUTCOMES. . . . . . . . . . . . . . . . . . . . . . . . . . . .107
  188.      PRINTER MODES . . . . . . . . . . . . . . . . . . . . . . . . . . .107
  189.      PRINTER STATUS. . . . . . . . . . . . . . . . . . . . . . . . . . .107
  190.  
  191. APPENDIX I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
  192.      LIST OF PROTOCOL PACKETS (numerical). . . . . . . . . . . . . . . .109
  193.  
  194. APPENDIX J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
  195.      LIST OF PROTOCOL PACKETS (alphabetical) . . . . . . . . . . . . . .111
  196.  
  197. APPENDIX K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
  198.      Code Needed to Translate From the Old Bindery Configuration File Format113
  199.           API Calls for Format Conversion. . . . . . . . . . . . . . . .113
  200.           Printer Configuration Structures . . . . . . . . . . . . . . .113
  201.  
  202. APPENDIX L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121
  203.      OTHER DOCUMENTS . . . . . . . . . . . . . . . . . . . . . . . . . .121
  204.  
  205.                                  CHAPTER 1
  206.  
  207.                          THE NETWARE PRINT SERVER
  208.  
  209.  
  210. OVERVIEW
  211.  
  212. The NetWare Print Server version 4.00 is available in only one configuration: NetWare Loadable Module (NLM). It will operate with any file server using NetWare 4.0 or newer.  The print server will service queues on several different file servers at once.  The Netware 4.0 print server has four different job scheduling methods or queue service modes, and it will support up to 255 printers.
  213.  
  214. Clients can communicate with the print server from the PConsole utility.  (The print server console has been enhanced, but still has limited use compared to features of the 4.0 PConsole.)  The print server uses NetWare's Service Advertising Protocol (SAP) to advertise its presence on the internet, allowing clients to locate the print server from anywhere on the internet.  The print server uses Sequenced Packet Exchange Protocol (SPX) to communicate with clients and remote printers.  The print server can notify clients when their print jobs are finished.  It can also notify a list of clients when a printer needs attention. Examples of situations requiring attention are when a new form needs to be mounted or when a printer is out of paper.  NetWare also provides a set of API functions to allow application programs to communicate with the print server.
  215.  
  216. The NetWare Print Server uses the NetWare NCP server's name service (bindery or 4.0 Directory Services) to learn a client's access rights to the print server.  Clients can add, delete, and modify printers without  taking the file server down.  
  217.  
  218. The print server is configured using the PConsole utility operating in either Bindery Mode or in Directory Services Mode. The difference between the two modes is due to the creation of Printer objects in the NetWare 4.0 Directory Services database. The older bindery design uses files kept in the print server's object directory. The print server determines the operating parameters by reading configuration files defined as stream attributes of the Directory Services database.  When the PConsole utility operating in Directory Services Mode creates a Print Server directory object, it also creates Printer directory objects that contain the printer configuration stream attributes.  When the PConsole utility operating in "bindery mode" creates a PRINT_SERVER bindery object, it also creates a file directory in SYS:SYSTEM for maintaining printer configuration information.
  219.  
  220. When a print job is sent to the print server, the print server has access to the Print Queue Record structure, including the Client Record Area (See Appendix G).
  221. PRINT SERVER BINDERY OBJECTS
  222.  
  223.  
  224. The NetWare 3.11 Print Server design uses the bindery to contain the configuration of queues, printers, and print servers.  The NetWare 4.0 Print Server design was enhanced to contain printers as a Directory object instead of a collection of matching files within a print server's file directory.  The bindery objects are explained below.  This will be followed by a discussion of how the Directory objects and their attributes relate to the bindery objects and their properties.
  225.  
  226. There are two types of print server bindery objects:  the print server object and the advertising print server object.  The print server object is static and the advertising print server object is dynamic.
  227.  
  228. The PRINT_SERVER bindery object is created (and can be modified) by the system supervisor from the PConsole utility and gives the print server access rights to file servers.  The properties of a PRINT_SERVER bindery object are ACCOUNT_BALANCE, LOGIN_CONTROL, PASSWORDS, OLDPASSWORDS, PS_USERS, PS_OPERATORS, and IDENTIFICATION.  The object type of a PRINT_SERVER is 7h.
  229.  
  230. When a print server advertises on the internet, the NetWare router creates an ADVERTISING_PRINT_SERVER bindery object.  ADVERTISING_PRINT_SERVER bindery objects have bindery level security and cannot be deleted by the system supervisor.  They are, however, automatically deleted by the router when the file server or the print server goes down (a characteristic of dynamic bindery objects).  The object type of an ADVERTISING_PRINT_SERVER is 47h (71 decimal).
  231.  
  232.  
  233. PRINT SERVER CLIENTS
  234.  
  235. There are two types of print server clients:  users and operators.  Users may request status information from the print server.  Operators may also request status information from the print server as well as control the way the print server handles print jobs.  Chapter 2, "Protocol Packets," specifies which functions clients may use.
  236.  
  237.  
  238. PRINT QUEUE BINDERY PROPERTY TYPES
  239.  
  240. There are four types of print queue bindery properties:  Q_USERS, Q_OPERATORS, Q_SERVERS, and Q_DIRECTORY.  Q_USERS can submit print jobs to the queue and can modify or delete their own jobs.  Q-  _OPERATORS can manage any print jobs that are in the queue.  Q_SERVERS service the print jobs that are in the queue.  Q_DIRECTORY contains the name of the directory where the queue jobs are stored.DIFFERENCES BETWEEN 3.11 BINDERY AND 4.0 DIRECTORY
  241.  
  242.  
  243. The print server configuration is different because Printer Directory objects have no counterpart in the bindery, and the corresponding Print Server Directory object has an additional attribute that refers to the configured Printer objects.  The following Bindery Objects and properties are translated into Directory objects and attributes during the installation process.  For more information about upgrading from 3.11 Bindery to 4.0 Directory Services, see the PUPGRADE.NLM Design Specification.
  244.  
  245. Queue Objects
  246.           
  247.      OT_PRINT_QUEUE Bindery object
  248.                
  249.      The OT_PRINT_QUEUE object is translated to the Queue Directory object and should contain all of the following properties:  Q_USERS, Q_OPERATORS, Q_SERVERS, and Q_DIRECTORY.  All of the OT_PRINT_QUEUE properties translate to the attributes of Queue.
  250.  
  251.      Queue Directory object
  252.                
  253.      The Queue object is translated from the OT_PRINT_QUEUE Bindery object and should contain all of the following attributes:  User, Operator, Server, Queue Directory, Host Server, Network Address and Volume.  The first four attributes are translated from the OT_PRINT_QUEUE properties.
  254.      
  255. Print Server Objects
  256.  
  257.      OT_PRINT_SERVER Bindery Object and Properties
  258.  
  259.      The OT_PRINT_SERVER Bindery object is translated to the Print Server Directory object and should contain all of the following properties: IDENTIFICATION, PS_OPERATORS, PS_USERS, LOGIN_CONTROL, and PASSWORD.  The first three properties of OT_PRINT_SERVER translate to the first three attributes of Print Server. 
  260.  
  261.      Print Server Directory Object and Attributes
  262.                
  263.      The Print Server Directory object is translated from the OT_PRINT_SERVER Bindery object and should contain all of the following attributes:  Description, Operator, User, SAP Name, Printer, Host Device, Private Key, and Public Key.  The first three properties of OT_PRINT_SERVER translate to the first three attributes of Print Server.
  264.  
  265.      Record Format for PRINT.IDX
  266.  
  267.      PRINT.IDX consists of one 12240-byte array.  It represents each of the possible 255 (0-254) PRINT.nnn files and contains up to 255 48-byte records with the following structure:
  268.  
  269.  
  270.  
  271.  
  272.  
  273. Field Name    Length/Type    Description
  274. printerName    48 uint8    Null-terminated
  275.  
  276.  
  277.      The size of the file represents the greatest printer number in use, i.e. if the maximum printer number configured is 3 then the file is only (3+1)*48 bytes long.  The data in the file is sparsely allocated so that the position of a printer name in the file implies its printer number and thus the corresponding PRINT.nnn name.  This file was added for performance reasons.
  278.  
  279.      Record Format for PRINT.nnn
  280.  
  281.      PRINT.nnn consists of one 70-byte record with the following structure:
  282.  
  283.  
  284.  
  285.  
  286.  
  287. Field Name    Length/Type    Description
  288. printerName    48 uint8    Null-terminated
  289. printerSubtype    uint16
  290. useInterrupts    uint16        Boolean
  291. irqNumber    uint16
  292. serviceMode    uint16
  293. bufferSize    uint16
  294. baudRate    uint16        Serial only; zero otherwise.
  295. dataBits    uint16        Serial only; zero otherwise.
  296. stopBits    uint16        Serial only; zero otherwise.
  297. parity        uint16        Serial only; zero otherwise.
  298. useXonXoff    uint16        Serial only, boolean; zero otherwise.
  299. currentForm    uint16
  300.  
  301.  
  302.  
  303.  
  304.      Record Format for QUEUE.nnn
  305.  
  306.      QUEUE.nnn consists of multiple 49-byte records with the following structure:
  307.  
  308.  
  309.  
  310.  
  311.  
  312. Field Name    Length/Type    Description
  313. queueName    48 uint8    Null-terminated
  314. priority    uint8        1-10
  315.  
  316.                          
  317.  
  318.      Record Format for NOTIFY.nnn
  319.  
  320.      NOTIFY.nnn consists of multiple 54-byte records with the following structure:
  321.  
  322.  
  323.  
  324.  
  325.  
  326. Field Name    Length/Type    Description
  327. objectName    48 uint8    Null-terminated
  328. objectType    uint16        OT_USER or OT_USER_GROUP
  329. initialNotify    uint16
  330. repeatInterval    uint16
  331.  
  332.  
  333.  
  334.  
  335.      Record Format for FILESERV
  336.           
  337.      FILESERV consists of multiple records, 48 characters long, with the following structure:
  338.  
  339.  
  340.  
  341.  
  342.  
  343. Field Name    Length/Type    Description
  344. serverName    48 uint8    Null-terminated
  345.  
  346.      Code Needed to Translate From Old Bindery Configuration File Format
  347.  
  348.      The API calls needed to do format conversion from the old Bindery Source Files are NWPSApiConfigToFileConfig and NWPSFileConfigToApiConfig.  The calls' syntax, possible PRINT.nnn values and the printer configuration structures can be found in the NWPS_CFG.H include file.  For more information, see Appendix K.PRINT SERVER - CLIENT COMMUNICATION
  349.  
  350. To communicate with a print server, the client must establish an SPX connection.  Issuing the NWPSRV Library call "NWPSComAttachToPrintServer" will do this.  Clients can also establish an SPX connection by taking the following steps:
  351.  
  352.      1.   If the shell is loaded:
  353.  
  354.           a.   Scan the bindery.
  355.           b.   Locate a print server.
  356.           c.   Get the network address of the print server from the NET_ADDRESS property.
  357.           d.   Use the network address to establish the SPX connection.
  358.  
  359.      2.   If no shell is loaded:
  360.  
  361.           a.   Use NetWare's Service Advertising Protocol (SAP) to get the network address of the print server.
  362.           b.   Use the network address to establish the SPX connection.
  363.  
  364. Once the SPX connection is established, the client can login to the print server to establish rights as an operator or user.  Once logged in, the client can communicate with the print server using the print server protocol packets or the NWPSRV Library functions.  Terminating the SPX connection will log the client out of the print server.
  365.  
  366. Protocol packets must conform to the following format:
  367.  
  368.  
  369.                           PROTOCOL PACKET FORMAT
  370.  
  371.  
  372. Request Packet
  373.  
  374. Offset         Field            Size           Data Type
  375.  
  376.  0        SPX Header                    42 bytes       *
  377. 42        Print Server Function         1 byte        uint8
  378. 43        Request data                  Variable       (See Chapter 2, "Protocol Packets")
  379.  
  380.  
  381. Reply Packet
  382.  
  383. Offset         Field            Size           Data Type
  384.  
  385.  0        SPX Header                    42 bytes       *
  386. 42        Reply data                    Variable       (See Chapter 2, "Protocol Packets")
  387.  
  388.  
  389.  
  390. Clients must wait for a reply packet before sending another request packet.
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405. * See the NetWare System Interface Technical Overview:  Chapter 4, "Communication Services".SERVICE MODES
  406.  
  407. This section describes the relationship between queues and printers and how printers service those queues.  There are 4 Service Modes, each of which describes an algorithm that a printer should use to service its queues.
  408.  
  409. The print server maintains a list of print queues for each printer.  Each queue has an assigned queue priority and may contain several print jobs waiting to be serviced.  The print server will request print jobs from the highest priority queue before proceeding to the next queue.  If two or more queues have the same priority, the jobs will be requested from each queue alternately.
  410.  
  411. The print server tracks which forms have been mounted on each printer.  Depending on the service mode, the print server may request print jobs that require a particular form.  The form required by a print job is called the Print Job Form.  A form currently mounted in a printer is called a Mounted Form.
  412.  
  413. Where a print job is positioned in a queue is called the Job Position.  The first print job in the queue is Job Position 1, the second is Job Position 2, and so on.
  414.  
  415. The queue priority, the job position, the mounted form, and the print job form are the factors the print server uses to decide which print job gets printed next.  The precedence of these factors is given for each service mode as follows:
  416.  
  417. SERVICE MODE 0 - CHANGE FORMS AS NEEDED:
  418.  
  419. This mode prints all the jobs in the highest priority queue, in order of job position, then advances to the next queue.  (The NetWare print process before Print Server version 1.00 serviced jobs in this way.)
  420.  
  421. Steps:       1.     Start at the highest priority queue.
  422.              2.     Request the print job in the next job position.
  423.              3.     If no print jobs are waiting to be serviced, advance to the next queue and goto step 2.
  424.              4.     If no more queues are waiting to be serviced, delay 15 seconds and goto step 1.
  425.  
  426. SERVICE MODE 1 - MINIMIZE FORM CHANGES WITHIN QUEUES:
  427.  
  428. This mode prints all jobs in the highest priority queue, using the requested form as the primary selection key and the job position as the secondary selection key, then it repeats this process for the lower priority queues.
  429.  
  430. Steps:       1.     Start at the highest priority queue.
  431.              2.     Request a print job which requires the mounted form.
  432.              3.     If no print jobs which require the mounted form are waiting to be serviced, request the print job in the next position.
  433.              4.     If no print jobs are waiting to be serviced, advance to the next queue and goto step 2.
  434.              5.     If no more queues are waiting to be serviced, delay 15 seconds and goto step 1.
  435.  
  436. SERVICE MODE 2 - NEVER CHANGE FORMS:
  437.  
  438. This mode prints only those jobs which require the mounted form beginning at the highest priority queue.  The mounted form does not change in this mode.
  439.  
  440. Steps:       1.     Start at the highest priority queue.
  441.              2.     Request a print job which requires the mounted form.
  442.              3.     If no print jobs which require the mounted form are waiting to be serviced,  advance to the next queue and goto step 2.
  443.              4.     If no more queues are waiting to be serviced, delay 15 seconds and goto step 1.
  444.  
  445. SERVICE MODE 3 - MINIMIZE FORM CHANGES ACROSS QUEUES:
  446.  
  447. This mode prints all the jobs which require the mounted form, beginning at the highest priority queue.  It then searches the other queues (in order of priority) for print jobs which require the mounted form.  If no print jobs which require the mounted form are waiting to be serviced in any queue, then it requests print jobs which require any form, beginning at the highest priority queue.
  448.  
  449. Steps:       1.     Start at the highest priority queue.
  450.              2.     Request a print job which requires the mounted form.
  451.              3.     If no print jobs which require the mounted form are waiting to be serviced, advance to the next queue and goto step 2.
  452.              4.     If no more queues are waiting to be serviced, start at the highest priority queue.
  453.              5.     Request the print job in the next job position.
  454.              6.     If no print jobs are waiting to be serviced, advance to the next queue and goto step 5.
  455.              7.     If no more queues are waiting to be serviced, delay 15 seconds and goto step 1.
  456.  
  457.                                  CHAPTER 2
  458.  
  459.                              PROTOCOL PACKETS
  460.  
  461.  
  462. An SPX connection must be established before a protocol packet can be issued successfully.  See Chapter 1, "Print Server - Client Communication" for information on how to establish an SPX connection.
  463.  
  464. For protocol packets that use the parameter jobOutcome, if jobOutcome is NWPS_RETURN_TO_QUEUE, the job control flag to restart a job must be set first or this parameter will not work.  See Job Control Flags in the Queue Job section of Appendix G, "Record Structures."
  465.  
  466. If the SPX connection is terminated unexpectedly, NWPSE_CONNECTION_TERMINATED will be returned in the Event Control Block (ECB).  See the NetWare System Interface Technical Overview:  Chapter 4, "Communication Services" for information on ECBs.
  467.  
  468. The packet descriptions are organized first by the NetWare 3.11 subset and then by the NetWare 4.00 and 4.10 additions.
  469.  
  470.  
  471. .NetWare 3.11 subset
  472.  
  473. Abort Print Job (for operators and users) 
  474.  
  475. This packet aborts the current print job.
  476.  
  477. Request Format
  478.  
  479.    FunctionNumber       uint8  0x0E
  480.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  481.    JobOutcome           uint8  1 - NWPS_RETURN_TO_QUEUE
  482.                                2 - NWPS_THROW_AWAY
  483.  
  484. Reply Format
  485.  
  486.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  487.                                0x0103 NWPSE_BINDERY_LOCKED
  488.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  489.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  490.                                0x0303 NWPSE_INVALID_PARAMETER
  491.                                0x0305 NWPSE_NOT_CONNECTED 
  492.                                0x0306 NWPSE_GOING_DOWN
  493.                                0x0309 NWPSE_NO_JOB_ACTIVE
  494.                                0x030C NWPSE_DOWN 
  495.                                0x030E NWPSE_NO_RIGHTS
  496.  
  497. Remarks
  498.  
  499.    This packet clears the buffer.  One blank page will be ejected unless suppress form feed is set.
  500. Add Notify Object (for operators only) 
  501.  
  502. This packet adds an object to the print server's list of objects to be notified when a printer needs attention (such as mounting forms, printer off-line, out of paper).
  503.  
  504. Request Format
  505.  
  506.    FunctionNumber       uint8  0x16
  507.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  508.    FileServerName       uint8[48]
  509.    ObjectName           uint8[48]
  510.    ObjectType           uint16
  511.    FirstNotice          uint16 Number of seconds to wait before 1st notice.
  512.    Interval             uint16 Number of seconds between following notices.
  513.  
  514.  
  515. Reply Format
  516.  
  517.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  518.                                0x0103 NWPSE_BINDERY_LOCKED
  519.                                0x0200 NWPSE_NO_SUCH_OBJECT
  520.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  521.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  522.                                0x0305 NWPSE_NOT_CONNECTED 
  523.    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  524.                                0x030B NWPSE_ALREADY_IN_LIST
  525.                                0x030C NWPSE_DOWN 
  526.                                0x030E NWPSE_NO_RIGHTS
  527.  
  528. Remarks
  529.  
  530.    The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 indicates that the job owner is to be notified.  The object must have a connection ID to be notified.
  531.  
  532. Add Queue to Printer (for operators only) 
  533.  
  534. This packet assigns a queue to a printer and assigns a priority to the queue.
  535.  
  536. Request Format
  537.  
  538.    FunctionNumber       uint8  0x11
  539.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  540.    FileServerName       uint8[48]
  541.    QueueName            uint8[48]
  542.    Priority             uint8
  543.  
  544. Reply Format
  545.  
  546.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  547.                                0x0103 NWPSE_BINDERY_LOCKED
  548.                                0x0200 NWPSE_NO_SUCH_QUEUE
  549.                                0x0201 NWPSE_NOT_AUTHORIZED_FOR_QUEUE
  550.                                0x0202 NWPSE_QUEUE_HALTED
  551.                                0x0203 NWPSE_UNABLE_TO_ATTACH_TO_QUEUE
  552.                                0x0204 NWPSE_TOO_MANY_QUEUE_SERVER
  553.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  554.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  555.                                0x0305 NWPSE_NOT_CONNECTED 
  556.                                0x030B NWPSE_ALREADY_IN_LIST
  557.                                0x030C NWPSE_DOWN 
  558.                                0x030E NWPSE_NO_RIGHTS
  559.                                0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  560.  
  561. Remarks
  562.  
  563.    The operator must be attached to the file server where the queue is to be added.  This packet attaches a queue server to the queue; therefore, the print server must be a property of the queue.  The queue cannot have more than 25 print servers servicing it.
  564. Attach Print Server to File Server (for operators only)
  565.  
  566. This packet attaches a print server to a file server.
  567.  
  568. Request Format
  569.  
  570.    FunctionNumber       uint8  0x18
  571.    FileServerName       uint8[48]
  572.    Password             uint8[128]
  573.  
  574. Reply Format
  575.  
  576.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  577.                                0x0101 NWPSE_TOO_MANY_FILE_SERVERS
  578.                                0x0102 NWPSE_UNKNOWN_FILE_SERVER
  579.                                0x0103 NWPSE_BINDERY_LOCKED
  580.                                0x0104 NWPSE_FILE_SERVER_MAXED_OUT
  581.                                0x0105 NWPSE_NO_RESPONSE
  582.                                0x0106 NWPSE_ALREADY_ATTACHED
  583.                                0x0107 NWPSE_CANT_ATTACH
  584.                                0x0108 NWPSE_NO_ACCOUNT_BALANCE
  585.                                0x0109 NWPSE_NO_CREDIT_LEFT
  586.                                0x010A NWPSE_INTRUDER_DETECTION_LOCK
  587.                                0x010B NWPSE_TOO_MANY_CONNECTIONS
  588.                                0x010C NWPSE_ACCOUNT_DISABLED
  589.                                0x010D NWPSE_UNAUTHORIZED_TIME
  590.                                0x010E NWPSE_UNAUTHORIZED_STATION
  591.                                0x010F NWPSE_NO_MORE_GRACE
  592.                                0x0110 NWPSE_LOGIN_DISABLED
  593.                                0x0111 NWPSE_ILLEGAL_ACCT_NAME
  594.                                0x0112 NWPSE_PASSWORD_HAS_EXPIRED
  595.                                0x0113 NWPSE_ACCESS_DENIED
  596.                                0x0114 NWPSE_CANT_LOGIN
  597.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  598.                                0x030C NWPSE_DOWN 
  599.                                0x030E NWPSE_NO_RIGHTS
  600.  
  601. Remarks
  602.  
  603.    A print server object must exist on the file server.  A print server cannot connect to more than 8 file servers.  If the print server attaches without an error, it will also login to the file server.  If the login fails, the print server will detach itself from the file server.  If the attach and the login are successful, then the packet will read the file server's configuration files, which includes the queues that the print server will be servicing and the objects to notify.Cancel Down Request (for operators only) 
  604.  
  605. This packet cancels the Down Print Server command.
  606.  
  607. Request Format
  608.  
  609.    FunctionNumber       uint8  0x04
  610.  
  611. Reply Format
  612.  
  613.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  614.                                0x030C NWPSE_DOWN 
  615.                                0x030E NWPSE_NO_RIGHTS
  616.  
  617. Remarks
  618.  
  619.    This packet will work only if the print server is processing a print job.  If the print server has already advertised that it is down, it will return NWPSE_DOWN.
  620.  
  621. Change Notify Interval (for operators only) 
  622.  
  623. This packet sets or changes the number of seconds the print server will wait before it notifies an object (FirstNotice) and the number of seconds the print server will wait between following notices.
  624.  
  625. Request Format
  626.  
  627.    FunctionNumber       uint8  0x15
  628.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  629.    FileServerName       uint8[48]
  630.    ObjectName           uint8[48]
  631.    ObjectType           uint16
  632.    FirstNotice          uint16 Number of seconds to wait before 1st notice.
  633.    Interval             uint16 Number of seconds between following notices.
  634.  
  635.  
  636. Reply Format
  637.  
  638.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  639.                                0x0103 NWPSE_BINDERY_LOCKED
  640.                                0x0200 NWPSE_NO_SUCH_OBJECT
  641.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  642.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  643.                                0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  644.                                0x030C NWPSE_DOWN 
  645.                                0x030D NWPSE_NOT_IN_LIST
  646.                                0x030E NWPSE_NO_RIGHTS
  647.  
  648. Remarks
  649.  
  650.    The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 indicates that the notify interval is to be changed for the job owner.  The object to notify must already be in the notify list.
  651. Change Queue Priority (for operators only) 
  652.  
  653. This packet changes the service priority assigned to the specified queue. 
  654.  
  655. Request Format
  656.  
  657.    FunctionNumber       uint8  0x10
  658.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  659.    FileServerName       uint8[48]
  660.    QueueName            uint8[48]
  661.    NewPriority          uint8  1 = highest priority,  10= lowest priority.
  662.  
  663. Reply Format
  664.  
  665.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  666.                                0x0200 NWPSE_NO_SUCH_OBJECT
  667.                                0x0103 NWPSE_BINDERY_LOCKED
  668.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  669.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  670.                                0x030D NWPSE_NOT_IN_LIST
  671.                                0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  672.                                0x030C NWPSE_DOWN 
  673.                                0x030E NWPSE_NO_RIGHTS
  674.  
  675. Remarks
  676.  
  677.    The operator must be attached to the file server where the queue exists.  Attempts to get information about a queue will fail if the queue is not on the specified file server or if the queue is not in the print server list.
  678. Change Service Mode (for operators only) 
  679.  
  680. This packet changes the service mode of the specified printer.
  681.  
  682. Request Format
  683.  
  684.    FunctionNumber       uint8  0x0C
  685.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  686.    NewServiceMode       uint8  0 - Change forms as needed
  687.                                1 - Minimize form changes within queues
  688.                                2 - Never change forms
  689.                                3 - Minimize form changes across queues
  690.  
  691.  
  692. Reply Format
  693.  
  694.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  695.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  696.                                0x0303 NWPSE_INVALID_PARAMETER
  697.                                0x0305 NWPSE_NOT_CONNECTED 
  698.                                0x030C NWPSE_DOWN 
  699.                                0x030E NWPSE_NO_RIGHTS
  700.  
  701. Remarks
  702.  
  703.    The new service mode must be a valid number (0-3).  See "Service Modes" in Chapter 1.
  704. Delete Notify Object (for operators only) 
  705.  
  706. This packet deletes an object from the print server's list of objects to be notified when a printer needs attention (such as mounting forms, printer off-line, out of paper).
  707.  
  708. Request Format
  709.  
  710.    FunctionNumber       uint8  0x17
  711.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  712.    FileServerName       uint8[48]
  713.    ObjectName           uint8[48]
  714.    ObjectType           uint16
  715.  
  716. Reply Format
  717.  
  718.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  719.                                0x0103 NWPSE_BINDERY_LOCKED
  720.                                0x0200 NWPSE_NO_SUCH_OBJECT
  721.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  722.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  723.                                0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  724.                                0x030C NWPSE_DOWN 
  725.                                0x030D NWPSE_NOT_IN_LIST
  726.                                0x030E NWPSE_NO_RIGHTS
  727.  
  728. Remarks
  729.  
  730.    The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 indicates that the job owner is to be deleted.  NWPSE_NOT_IN_LIST is returned if the object is not found in the list.
  731.  
  732. Delete Queue From Printer (for operators only) 
  733.  
  734. This packet deletes a queue from a printer's service list.
  735.  
  736. Request Format
  737.  
  738.    FunctionNumber       uint8  0x12
  739.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  740.    DetachImmediately    uint8  0 - NO, 1 - YES
  741.    JobOutcome           uint8  (This is used only if DetachImmediately is YES.)
  742.                                1 - NWPS_RETURN_TO_QUEUE
  743.                                2 - NWPS_THROW_AWAY
  744.    FileServerName       uint8[48]
  745.    QueueName            uint8[48]
  746.  
  747. Reply Format
  748.  
  749.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  750.                                0x0103 NWPSE_BINDERY_LOCKED
  751.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  752.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  753.                                0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  754.                                0x030C NWPSE_DOWN 
  755.                                0x030D NWPSE_NOT_IN_LIST
  756.                                0x030E NWPSE_NO_RIGHTS
  757.  
  758. Remarks
  759.  
  760.    The client must be attached to the file server where the queue exists.  If a print server is servicing a job from the queue, this packet will abort the job using jobOutcome.  If any other printers are servicing the queue, this packet will not delete the queue.  The queue must be deleted from each printer.  If no other printers are servicing this queue, this packet deletes the queue.
  761. Detach Print Server From File Server (for operators only)
  762.  
  763. This packet detaches a print server from a file server.
  764.  
  765. Request Format
  766.  
  767.    FunctionNumber       uint8  0x19
  768.    DetachImmediately    uint8  0 - NO, 1 - YES
  769.    JobOutcome           uint8  (This is used only if DetachImmediately is YES.)
  770.                                1 - NWPS_RETURN_TO_QUEUE
  771.                                2 - NWPS_THROW_AWAY
  772.    FileServerName       uint8[48]
  773.  
  774. Reply Format
  775.  
  776.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  777.                                0x0103 NWPSE_BINDERY_LOCKED
  778.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  779.                                0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  780.                                0x030C NWPSE_DOWN 
  781.                                0x030E NWPSE_NO_RIGHTS
  782.                                0x0305 NWPSE_CANT_DETACH_PRIMARY_SERVER
  783.  
  784. Remarks
  785.  
  786.    If detachImmediately is set and a job is being serviced, the print server will abort the job and detach.  If detachImmediately is not set and a job is being serviced, the print server will remain attached to the file server though the packet has returned NWPSE_SUCCESSFUL, and the print server will not detach until the job has finished.  Before detaching, this packet will detach all of the print server's printers from the queues.  If any printers are servicing queues, it will wait until they are finished before it detaches them.  It also deletes the notify objects after it detaches.
  787. Down Print Server (for operators only) 
  788.  
  789. This packet sends down the print server.
  790.  
  791. Request Format
  792.  
  793.    FunctionNumber       uint8  0x03
  794.    DownImmediately      uint8  0 - NO, 1 - YES
  795.    JobOutcome           uint8  (This is used only if DownImmediately is YES.)
  796.                                1 - NWPS_RETURN_TO_QUEUE
  797.                                2 - NWPS_THROW_AWAY
  798.  
  799. Reply Format
  800.  
  801.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  802.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  803.                                0x030C NWPSE_DOWN 
  804.                                0x030E NWPSE_NO_RIGHTS
  805.                                0x0303 NWPSE_INVALID_PARAMETER
  806.  
  807.  
  808. Remarks
  809.  
  810.    Before it shuts down, the print server will check the value of jobOutcome, deal with the job accordingly, stop the printer, and, depending on the value of downImmediately, will advertise its status with GOING_DOWN or DOWN.  JobOutcome must be a valid number.  This packet does not terminate the SPX connection.
  811. Eject Form (for operators only) 
  812.  
  813. This packet sends a form feed to the specified printer.
  814.  
  815. Request Format
  816.  
  817.    FunctionNumber       uint8  0x0A
  818.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  819.  
  820. Reply Format
  821.  
  822.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  823.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  824.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  825.                                0x0304 NWPSE_PRINTER_BUSY
  826.                                0x0305 NWPSE_NOT_CONNECTED 
  827.                                0x0306 NWPSE_GOING_DOWN
  828.                                0x030C NWPSE_DOWN 
  829.                                0x030E NWPSE_NO_RIGHTS
  830.  
  831. Remarks
  832.  
  833.    This packet is successful only when the printer is idle.  If the printer is active, an error is returned.
  834.  
  835. Get Attached Servers (for anyone)
  836.  
  837. This packet returns the names of the file servers that are attached to the print server.
  838.  
  839. Request Format
  840.  
  841.    FunctionNumber       uint8  0x1A
  842.    SequenceIdentifier   uint8  Initially zero
  843.  
  844. Reply Format
  845.  
  846.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  847.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  848.                                0x030C NWPSE_DOWN 
  849.                                0x030D NWPSE_NOT_IN_LIST
  850.    UpdatedSequenceIdentifier   uint8
  851.    FileServerName       uint8[48]
  852.  
  853. Remarks
  854.  
  855.    Initially the SequenceIdentifier must be set to zero (0).  After the initial request, the client must place the value returned in UpdatedSequenceIdentifier in the SequenceIdentifier for each subsequent call.  NWPSE_NOT_IN_LIST is returned when no file servers are left in the list.
  856. Get Notify Object (for operators and users) 
  857.  
  858. This packet returns the objects that will be notified when a printer needs attention and when the objects will be notified.
  859.  
  860. Request Format
  861.  
  862.    FunctionNumber       uint8  0x14
  863.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  864.    SequenceIdentifier   uint16 Initially zero
  865.  
  866. Reply Format
  867.  
  868.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  869.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  870.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  871.                                0x030C NWPSE_DOWN 
  872.                                0x030D NWPSE_NOT_IN_LIST
  873.                                0x030E NWPSE_NO_RIGHTS 
  874.    UpdatedSequenceIdentifier   uint16
  875.    FileServerName       uint8[48]
  876.    ObjectName           uint8[48]
  877.    ObjectType           uint16 
  878.    FirstNotice          uint16 Number of seconds to wait before 1st notice.
  879.    Interval             uint16 Number of seconds between following notices.
  880.  
  881. Remarks
  882.  
  883.    This packet returns NWPSE_NOT_IN LIST when there are no objects left in the notify list.  Initially the SequenceIdentifier must be set to zero (0).  After the initial request, the client must place the value returned in UpdatedSequenceIdentifier in the SequenceIdentifier for each subsequent call.
  884. Get Printers Servicing Queue (for operators and users) 
  885.  
  886. This packet returns an array of uint8s (servicingQueueArray) which identifies which printers are servicing the specified queue.
  887.  
  888. Request Format
  889.  
  890.    FunctionNumber       uint8  0x13
  891.    FileServerName       uint8[48]
  892.    QueueName            uint8[48]
  893.    MaxNumberofEntries   uint8
  894.  
  895. Reply Format
  896.  
  897.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  898.                                0x0103 NWPSE_BINDERY_LOCKED
  899.                                0x0200 NWPSE_NO_SUCH_OBJECT
  900.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  901.                                0x0306 NWPSE_GOING_DOWN
  902.                                0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  903.                                0x030C NWPSE_DOWN 
  904.                                0x030E NWPSE_NO_RIGHTS 
  905.    NumPrinters          uint8  Number of printers attached to the print server.
  906.    ServicingQueueArray  uint8  Array of uint8s.  A uint8 for each printer attached to the print server; up to the maximum number requested.
  907.  
  908. Remarks
  909.  
  910.    The number of uint8s in the array corresponds to the number of printers attached to the print server and each uint8 in the array represents a different printer.  MaxNumberEntries is the maximum number of printers to be returned.Get Printer Status (for operators and users) 
  911.  
  912. This packet gets the status information about a printer.
  913.  
  914. Request Format
  915.  
  916.    FunctionNumber       uint8  0x05
  917.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  918.  
  919. Reply Format
  920.  
  921.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  922.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  923.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  924.                                0x030C NWPSE_DOWN 
  925.                                0x030E NWPSE_NO_RIGHTS 
  926.    Status               uint8  0 PSTAT_WAITING_FOR_JOB
  927.                                1 PSTAT_WAITING_FOR_FORM
  928.                                2 PSTAT_PRINTING_JOB
  929.                                3 PSTAT_PAUSED
  930.                                4 PSTAT_STOPPED
  931.                                5 PSTAT_MARK_EJECT
  932.                                6 PSTAT_READY_TO_GO_DOWN
  933.                                7 PSTAT_NOT_CONNECTED
  934.                                8 PSTAT_PRIVATE
  935.    ErrorCode            uint8  Online/Offline
  936.    ActiveJob            uint8  TRUE (active) or FALSE (idle)
  937.    QueueServiceMode     uint8  
  938.    MountedFormNumber    uint16
  939.    MountedFormName      uint8[16]
  940.    PrinterName          uint8[48]
  941.  
  942. Remarks
  943.  
  944.    If more than one print server is attached to a file server, the SPX connection will determine which print server can be accessed.  The printer number must be known to the print server.   Only status information for printers that can be accessed on the current SPX connection will be returned.  The client must disconnect and establish a new SPX connection to access other printers.
  945. Get Print Job Status (for operators and users) 
  946.  
  947. This packet gets the status of the current print job on the specified printer.
  948.  
  949. Request Format
  950.  
  951.    FunctionNumber       uint8  0x0D
  952.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  953.  
  954. Reply Format
  955.  
  956.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  957.                                0x0103 NWPSE_BINDERY_LOCKED
  958.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  959.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  960.                                0x0306 NWPSE_GOING_DOWN
  961.                                0x0309 NWPSE_NO_JOB_ACTIVE
  962.                                0x030C NWPSE_DOWN 
  963.                                0x030E NWPSE_NO_RIGHTS 
  964.    FileServerName       uint8[48]
  965.    QueueName            uint8[48]
  966.    JobQueueNumber       uint16
  967.    JobDescription       uint8[50]
  968.    CopiesInJob          uint16
  969.    CopySize             uint32
  970.    CopiesPrinted        uint16
  971.    BytesIntoCurrentCopy uint32
  972.    FormNumber           uint16
  973.    Text/ByteStream      uint8  TRUE (text) expand tabs.
  974.                                FALSE (bytestream) do not expand tabs.
  975.  
  976. Remarks
  977.  
  978.    CopiesInJob is the number of copies to be printed.  CopySize is the size of the print job in bytes including a form feed unless suppress form feed has been set.  CopiesPrinted is the number of copies already printed.  BytesIntoCurrentCopy is the number of characters already printed in the currently printing copy.
  979. Get Print Server Info (anyone)
  980.  
  981. This packet gets the status of the print server and returns information about the services the print server offers.
  982.  
  983. Request Format
  984.  
  985.    FunctionNumber       uint8  0x02
  986.  
  987. Reply Format
  988.  
  989.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  990.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  991.                                0x030C NWPSE_DOWN 
  992.    Status               uint8  UP, DOWN or WAITING_TO_GO_DOWN
  993.    AttachedPrinters     uint8  Number of attached printers.
  994.    ServiceModesSupported       uint8     Number of modes supported.
  995.    NPSMajorVersionNumber       uint8     NPS Major Version.
  996.    NPSMinorVersionNumber       uint8     NPS Minor Version.
  997.    NPSRevisionNumber    uint8  NPS Revision.
  998.    SerialNumberBCD      uint8[4]
  999.    PSType               uint8  1 - Dedicated DOS
  1000.                                2 - NLM
  1001.                                3 - FS VAP
  1002.                                4 - Bridge VAP
  1003.                                NPS - NetWare Print Server
  1004.    FutureSupport        uint8[7]or[12]
  1005.                                Support information.  Should be set to zero.
  1006.  
  1007. Remarks
  1008.  
  1009.    If the print server is version 1.0 or older, FutureSupport is twelve [12] uint8s and SerialNumber and PSType are not used.  If the print server is version 1.1 or newer, FutureSupport is seven [7] uint8s.  The SerialNumber is returned in Binary Coded Decimal (BCD).
  1010. Get Queues Serviced (for operators and users) 
  1011.  
  1012. This packet returns information about the queue(s) that the specified printer is servicing.
  1013.  
  1014. Request Format
  1015.  
  1016.    FunctionNumber       uint8  0x0F
  1017.    PrinterNumber        uint8  0 to maximum number of printers minus 1.
  1018.    SequenceIdentifier   uint16 Initially zero
  1019.  
  1020. Reply Format
  1021.  
  1022.    CompletionCode       uint16 0x0000 NWPSE_SUCCESSFUL
  1023.                                0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1024.                                0x0302 NWPSE_NO_SUCH_PRINTER 
  1025.                                0x030C NWPSE_DOWN 
  1026.                                0x030D NWPSE_NOT_IN_LIST
  1027.                                0x030E NWPSE_NO_RIGHTS 
  1028.    NewSequenceIdentifier       uint16
  1029.    FileServerName       uint8[48]
  1030.    QueueName            uint8[48]
  1031.    Priority             uint8
  1032.  
  1033. Remarks
  1034.  
  1035.    The client must set the sequence identifier to zero before making the first call, then set the sequence identifier to the value returned NewSequenceIdentifier for all subsequent calls.  The packet returns NWPSE_NOT_IN_LIST when no queues are left.  The Priority will be a value between 1 and 10.
  1036. Login to Print Server (anyone) 
  1037.  
  1038. This packet logs the client into the print server.
  1039.  
  1040. Request Format
  1041.  
  1042.     FunctionNumber    uint8        0x01
  1043.     FileServerName    uint8[48]
  1044.     ConnectionNumber  uint16       File server connection number.
  1045.  
  1046. Reply Format
  1047.  
  1048.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1049.                                    0x0103 NWPSE_BINDERY_LOCKED 
  1050.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1051.                                    0x030C NWPSE_DOWN 
  1052.                                    0x0400 NWPSE_UNABLE_TO_VERIFY_IDENTI TY
  1053.     AccessLevel       uint8        NWPS_OPERATOR, NWPS_USER, or NWPS_LIMITED
  1054.  
  1055. Remarks
  1056.  
  1057.     This packet gets the client's access rights from the file server bindery to find out if the client has user or operator rights to the print server.  The SPX connection must already be established.  The client must be attached to the file server that the print server is attached to.
  1058. Mark Top of Form (for operators only) 
  1059.  
  1060. This packet sends a line of characters to the specified printer to show where the top of the page will be.
  1061.  
  1062. Request Format
  1063.  
  1064.     FunctionNumber    uint8        0x0B
  1065.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1066.     Character         uint8[1]     Any printable character.
  1067.  
  1068. Reply Format
  1069.  
  1070.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1071.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1072.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1073.                                    0x0304 NWPSE_PRINTER_BUSY
  1074.                                    0x0305 NWPSE_NOT_CONNECTED 
  1075.                                    0x0306 NWPSE_GOING_DOWN
  1076.                                    0x030C NWPSE_DOWN 
  1077.                                    0x030E NWPSE_NO_RIGHTS
  1078.  
  1079. Remarks
  1080.  
  1081.     If the operator chooses a character that is not printable, an asterisk will be used.  The printer must be inactive for this packet to be successful.  If the printer is active, an error is returned.
  1082. Rewind Print Job (for operators only)
  1083.  
  1084. This packet rewinds the current print job the specified number of pages or bytes and restarts it from that point.
  1085.  
  1086. Request Format
  1087.  
  1088.     FunctionNumber    uint8        0x09
  1089.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1090.     ByPage            uint8        0 = by byte, 1 = by page.
  1091.     Relative          uint8        0 = absolute, 1 = relative.
  1092.     CopyNumber        uint16       If absolute, the number of the copy to position to.   (The copies are numbered beginning with 1.)
  1093.     Offset            int32        ByPage:  If absolute, page number to restart at.  If relative, number of pages forward or backward.
  1094.                                    ByByte:  If absolute, byte offset to restart at.  If relative, number of bytes forward or backward.
  1095.  
  1096. Reply Format
  1097.  
  1098.     CompletionCode    uint16       0x0000 SUCCESSFUL
  1099.                                    0x0103 NWPSE_BINDERY_LOCKED
  1100.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1101.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1102.                                    0x0304 NWPSE_PRINTER_BUSY
  1103.                                    0x0305 NWPSE_NOT_CONNECTED 
  1104.                                    0x0306 NWPSE_GOING_DOWN
  1105.                                    0x0309 NWPSE_NO_JOB_ACTIVE
  1106.                                    0x030C NWPSE_DOWN 
  1107.                                    0x030E NWPSE_NO_RIGHTS
  1108. Remarks
  1109.  
  1110.     If absolute is selected, the printer will rewind to the specified page number or byte offset.  If relative is selected, the printer will rewind the specified number of pages or bytes from the current page or byte.
  1111. Set Mounted Form (for operators only) 
  1112.  
  1113. This packet informs the print server that the specified form has been mounted on the indicated printer.
  1114.  
  1115. Request Format
  1116.  
  1117.     FunctionNumber    uint8        0x08
  1118.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1119.     FormNumber        uint8        0x00 - 0xFE
  1120.  
  1121. Reply Format
  1122.  
  1123.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1124.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1125.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1126.                                    0x030C NWPSE_DOWN 
  1127.                                    0x030E NWPSE_NO_RIGHTS
  1128.  
  1129. Remarks
  1130.  
  1131.     The printer number must refer to a valid printer.  This clears all other mounted forms for the specified printer.
  1132. Start Printer (for operators only) 
  1133.  
  1134. This packet starts a printer that has been stopped.
  1135.  
  1136. Request Format
  1137.  
  1138.     FunctionNumber    uint8        0x07
  1139.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1140.  
  1141. Reply Format
  1142.  
  1143.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1144.                                    0x0103 NWPSE_BINDERY_LOCKED
  1145.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1146.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1147.                                    0x0305 NWPSE_NOT_CONNECTED 
  1148.                                    0x0306 NWPSE_GOING_DOWN
  1149.                                    0x030C NWPSE_DOWN 
  1150.                                    0x030E NWPSE_NO_RIGHTS 
  1151. Remarks
  1152.  
  1153.     If the print job is paused when the printer is stopped, the print job will be resumed when Start Printer is issued.  If the print job was not paused, the print server will request the next job.  If the printer is not stopped when this packet is issued, it will still return NWPSE_SUCCESSFUL.
  1154. Stop Printer (for operators only) 
  1155.  
  1156. This packet stops the specified printer.
  1157.  
  1158. Request Format
  1159.  
  1160.     FunctionNumber    uint8        0x06
  1161.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1162.     JobOutcome        uint8        0 - NWPS_PLACE_ON_HOLD
  1163.                                    1 - NWPS_RETURN_TO_QUEUE
  1164.                                    2 - NWPS_THROW_AWAY
  1165.  
  1166. Reply Format
  1167.  
  1168.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1169.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1170.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1171.                                    0x0303 NWPSE_INVALID_PARAMETER
  1172.                                    0x0305 NWPSE_NOT_CONNECTED 
  1173.                                    0x0306 NWPSE_GOING_DOWN
  1174.                                    0x030C NWPSE_DOWN 
  1175.                                    0x030E NWPSE_NO_RIGHTS
  1176.  
  1177. Remarks
  1178.  
  1179.     JobOutcome must be passed a 0, 1, or 2.  Otherwise, it returns NWPSE_INVALID_PARAMETER.  If the job is placed on hold, it will be restarted at the point where it stopped.  If the job is returned to queue, it will be restarted from the beginning.  If the printer is already stopped and this packet is issued, it will still return NWPSE_SUCCESSFUL.
  1180.                           NetWare 4.00 additions
  1181.  
  1182. Add Form (for operators only) 
  1183.  
  1184. This packet informs the print server that the specified form should also be mounted on the indicated printer.  This packet is new with the 4.0 Print Server and is used to maintain a list of form numbers that the printer can support. 
  1185.  
  1186. Request Format
  1187.  
  1188.     FunctionNumber    uint8        0x1D
  1189.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1190.     FormNumber        uint8        0x00 - 0xFE
  1191.  
  1192. Reply Format
  1193.  
  1194.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1195.                                    0x0119 NWPSE_MAX_FORMS_EXCEEDED
  1196.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1197.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1198.                                    0x030C NWPSE_DOWN 
  1199.                                    0x030E NWPSE_NO_RIGHTS
  1200.  
  1201. Remarks
  1202.  
  1203.     The printer number must refer to a valid printer.  The maximum number of forms that can be mounted simultaneously is 20.  An attempt to go beyond this number results in an NWPSE_MAX_FORMS_EXCEEDED error being returned.
  1204. Dismount Form (for operators only) 
  1205.  
  1206. This packet informs the print server that the specified form should no longer be mounted on the indicated printer.  This packet is new with the 4.0 Print Server and is used to maintain a list of form numbers that the printer can support. 
  1207.  
  1208. Request Format
  1209.  
  1210.     FunctionNumber    uint8        0x1E
  1211.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1212.     FormNumber        uint8        0x00 - 0xFE
  1213.  
  1214. Reply Format
  1215.  
  1216.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1217.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1218.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1219.                                    0x030C NWPSE_DOWN 
  1220.                                    0x030E NWPSE_NO_RIGHTS
  1221.  
  1222. Remarks
  1223.  
  1224.     The printer number must refer to a valid printer.
  1225. Get Extended Printer Status (for operators and users) 
  1226.  
  1227. This packet gets the string status information about a printer.  This packet is new with the 4.0 Print Server.
  1228.  
  1229. Request Format
  1230.  
  1231.     FunctionNumber    uint8        0x1F
  1232.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1233.  
  1234. Reply Format
  1235.  
  1236.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1237.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1238.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1239.                                    0x030C NWPSE_DOWN 
  1240.                                    0x030E NWPSE_NO_RIGHTS 
  1241.     PrimaryPrinterStatus           uint8[60] Null terminated ASCII string
  1242.     PrimaryErrorStatus             uint8     TRUE/FALSE above string is an error condition.
  1243.     SecondaryPrinterStatus         uint8[60] Null terminated ASCII string
  1244.     SecondaryErrorStatus           uint8     TRUE/FALSE above string is an error condition.
  1245.     ActiveJobCount    uint8        number of active jobs
  1246.     QueueServiceMode  uint8        
  1247.     MountedFormCount  uint16       Number between 0 and 20
  1248.     MountedFormNumber uint16[20]   Array of form numbers which are mounted.
  1249.  
  1250. Remarks
  1251.  
  1252.     If more than one print server is attached to a file server, the SPX connection will determine which print server can be accessed.  The printer number must be known to the print server.   Only status information for printers that can be accessed on the current SPX connection will be returned.  The client must disconnect and establish a new SPX connection to get to other printers.   The two strings have default ascii info if the printer is not an Extended type (XNP).
  1253.  
  1254.  
  1255. .NetWare 4.00 - Directory Services Support
  1256.  
  1257. The following packets correspond to the Bindery versions above and differ in that the FunctionNumber in the request has been incremented by 0xD0, and that the packet formats are changed to accommodate the larger Directory Services fully canonicalized, typeful names.  These D.S. names are placed in the packet so that only significant data need be transmitted.
  1258. D.S. Add Notify Object (for operators only) 
  1259.  
  1260. This packet adds an object to the print server's list of objects to be notified when a printer needs attention (such as mounting forms, printer off-line, out of paper).  This packet is new with the 4.0 Print Server.
  1261.  
  1262. Request Format
  1263.  
  1264.     FunctionNumber    uint8        0xE6
  1265.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1266.     ObjectType        uint16
  1267.     FirstNotice       uint16       Number of seconds to wait before 1st notice.
  1268.     Interval          uint16       Number of seconds between following notices.
  1269.     DSObjectName      uint8[512]
  1270.  
  1271.  
  1272. Reply Format
  1273.  
  1274.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1275.                                    0x0103 NWPSE_BINDERY_LOCKED
  1276.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1277.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1278.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1279.                                    0x0305 NWPSE_NOT_CONNECTED 
  1280.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1281.                                    0x030B NWPSE_ALREADY_IN_LIST
  1282.                                    0x030C NWPSE_DOWN 
  1283.                                    0x030E NWPSE_NO_RIGHTS
  1284.  
  1285. Remarks
  1286.  
  1287.     The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 indicates that the job owner is to be notified.  The object must have a connection ID to be notified.
  1288.  
  1289. D.S. Add Queue to Printer (for operators only) 
  1290.  
  1291. This packet assigns a queue to a printer and assigns a priority to the queue.  This packet is new with the 4.0 Print Server.
  1292.  
  1293. Request Format
  1294.  
  1295.     FunctionNumber    uint8        0xE1
  1296.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1297.     Priority          uint8
  1298.     DSQueueName       uint8[512]
  1299.  
  1300. Reply Format
  1301.  
  1302.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1303.                                    0x0103 NWPSE_BINDERY_LOCKED
  1304.                                    0x0200 NWPSE_NO_SUCH_QUEUE
  1305.                                    0x0201 NWPSE_NOT_AUTHORIZED_FOR_QUE UE
  1306.                                    0x0202 NWPSE_QUEUE_HALTED
  1307.                                    0x0203 NWPSE_UNABLE_TO_ATTACH_TO_Q UEUE
  1308.     0x0204 NWPSE_TOO_MANY_QUEUE_SERVER
  1309.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1310.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1311.                                    0x0305 NWPSE_NOT_CONNECTED 
  1312.                                    0x030B NWPSE_ALREADY_IN_LIST
  1313.                                    0x030C NWPSE_DOWN 
  1314.                                    0x030E NWPSE_NO_RIGHTS
  1315.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1316.  
  1317. Remarks
  1318.  
  1319.     The operator must be attached to the file server where the queue is to be added.  This packet attaches a queue server to the queue; therefore, the print server must be a property of the queue.  The queue cannot have more than 25 print servers servicing it.
  1320. D.S. Change Notify Interval (for operators only) 
  1321.  
  1322. This packet sets or changes the number of seconds the print server will wait before it notifies an object (FirstNotice) and the number of seconds the print server will wait between following notices.  This packet is new with the 4.0 Print Server.
  1323.  
  1324. Request Format
  1325.  
  1326.     FunctionNumber    uint8        0xE5
  1327.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1328.     ObjectType        uint16
  1329.     FirstNotice       uint16       Number of seconds to wait before 1st notice.
  1330.     Interval          uint16       Number of seconds between following notices.
  1331.     DSObjectName      uint8[512]
  1332.  
  1333.  
  1334. Reply Format
  1335.  
  1336.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1337.                                    0x0103 NWPSE_BINDERY_LOCKED
  1338.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1339.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1340.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1341.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1342.                                    0x030C NWPSE_DOWN 
  1343.                                    0x030D NWPSE_NOT_IN_LIST
  1344.                                    0x030E NWPSE_NO_RIGHTS
  1345.  
  1346. Remarks
  1347.  
  1348.     The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 indicates that the notify interval is to be changed for the job owner.  The object to notify must already be in the notify list.
  1349. D.S.Change Queue Priority (for operators only) 
  1350.  
  1351. This packet changes the service priority assigned to the specified queue.   This packet is new with the 4.0 Print Server.
  1352.  
  1353. Request Format
  1354.  
  1355.     FunctionNumber    uint8        0xE0
  1356.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1357.     NewPriority       uint8        1 = highest priority, 10 = lowest priority.
  1358.     DSQueueName       uint8[512]
  1359.  
  1360. Reply Format
  1361.  
  1362.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1363.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1364.                                    0x0103 NWPSE_BINDERY_LOCKED
  1365.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1366.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1367.                                    0x030D NWPSE_NOT_IN_LIST
  1368.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1369.                                    0x030C NWPSE_DOWN 
  1370.                                    0x030E NWPSE_NO_RIGHTS
  1371.  
  1372. Remarks
  1373.  
  1374.     The operator must be attached to the file server where the queue exists.  Attempts to get information about a queue will fail if the queue is not on the specified file server or if the queue is not in the print server list.
  1375.  
  1376. D.S. Delete Notify Object (for operators only) 
  1377.  
  1378. This packet deletes an object from the print server's list of objects to be notified when a printer needs attention (such as mounting forms, printer off-line, out of paper).  This packet is new with the 4.0 Print Server.
  1379.  
  1380. Request Format
  1381.  
  1382.     FunctionNumber    uint8        0xE7
  1383.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1384.     ObjectType        uint16
  1385.     DSObjectName      uint8[512]
  1386.  
  1387. Reply Format
  1388.  
  1389.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1390.     0x0103 NWPSE_BINDERY_LOCKED
  1391.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1392.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1393.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1394.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1395.                                    0x030C NWPSE_DOWN 
  1396.                                    0x030D NWPSE_NOT_IN_LIST
  1397.                                    0x030E NWPSE_NO_RIGHTS
  1398.  
  1399. Remarks
  1400.  
  1401.     The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 says that the job owner is to be deleted.  NWPSE_NOT_IN_LIST is returned if the object is not found in the list.
  1402.  
  1403. D.S. Delete Queue From Printer (for operators only) 
  1404.  
  1405. This packet deletes a queue from a printer's service list.  This packet is new with the 4.0 Print Server.
  1406.  
  1407. Request Format
  1408.  
  1409.     FunctionNumber    uint8        0xE2
  1410.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1411.     DetachImmediately uint8        0 - NO, 1 - YES
  1412.     JobOutcome        uint8        (This is used only if DetachImmediately is YES.)
  1413.                                    1 - NWPS_RETURN_TO_QUEUE
  1414.                                    2 - NWPS_THROW_AWAY
  1415.     DSQueueName       uint8[512]
  1416.  
  1417. Reply Format
  1418.  
  1419.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1420.                                    0x0103 NWPSE_BINDERY_LOCKED
  1421.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1422.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1423.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1424.                                    0x030C NWPSE_DOWN 
  1425.                                    0x030D NWPSE_NOT_IN_LIST
  1426.                                    0x030E NWPSE_NO_RIGHTS
  1427.  
  1428. Remarks
  1429.  
  1430.     The client must be attached to the file server where the queue exists.  If a print server is servicing a job from the queue, this packet will abort the job using jobOutcome.  If any other printers are servicing the queue, this packet will not delete the queue.  The queue must be deleted from each printer.  If no other printers are servicing this queue, this packet deletes the queue.
  1431. D.S. Get Job ID (for operators and users) 
  1432.  
  1433. This packet returns information about the current job that the specified printer is printing and the queue from which it comes.  This packet is new with the 4.0 Print Server.
  1434.  
  1435. Request Format
  1436.  
  1437.     FunctionNumber    uint8        0xE8
  1438.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1439.  
  1440. Reply Format
  1441.  
  1442.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1443.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1444.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1445.                                    0x030C NWPSE_DOWN 
  1446.                                    0x030E NWPSE_NO_RIGHTS 
  1447.     QueueNameFormat   uint16       0 - NWPS_BINDERY_SERVICE
  1448.                                    1 - NWPS_DIRECTORY_SERVICE
  1449.     JobID             uint32       QMS Job identifier
  1450. if the QueueNameFormat is 0 then the remaining fields are
  1451.     FileServerName    uint8[48]
  1452.     QueueName         uint8[48]
  1453. else if the QueueNameFormat is 1 then the remaining field is
  1454.     QueueName         uint8[512]
  1455.  
  1456. Remarks
  1457.  
  1458. D.S. Get Notify Object (for operators and users) 
  1459.  
  1460. This packet returns the objects that will be notified when a printer needs attention and when the objects will be notified.  This packet is new with the 4.0 Print Server.
  1461.  
  1462. Request Format
  1463.  
  1464.     FunctionNumber    uint8        0xE4
  1465.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1466.     SequenceIdentifier             uint16    Initially zero
  1467.  
  1468. Reply Format
  1469.  
  1470.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1471.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1472.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1473.                                    0x030C NWPSE_DOWN 
  1474.                                    0x030D NWPSE_NOT_IN_LIST
  1475.     0x030E NWPSE_NO_RIGHTS 
  1476.     UpdatedSequenceIdentifier      uint16
  1477.     ObjectType        uint16       
  1478.     FirstNotice       uint16       Number of seconds to wait before 1st notice.
  1479.     Interval          uint16       Number of seconds between following notices.
  1480.     DSObjectName      uint8[512]
  1481.  
  1482. Remarks
  1483.  
  1484.     This packet returns NWPSE_NOT_IN LIST when there are no objects left in the notify list.  Initially the SequenceIdentifier must be set to zero (0).  After the initial request, the client must place the value returned in UpdatedSequenceIdentifier in the SequenceIdentifier for each subsequent call.
  1485. D.S. Get Printers Servicing Queue (for operators and users) 
  1486.  
  1487. This packet returns an array of uint8s (servicingQueueArray) which identifies which printers are servicing the specified queue.  This packet is new with the 4.0 Print Server.
  1488.  
  1489. Request Format
  1490.  
  1491.     FunctionNumber    uint8        0xE3
  1492.     MaxNumberofEntries             uint8
  1493.     DSQueueName       uint8[512]
  1494.  
  1495. Reply Format
  1496.  
  1497.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1498.                                    0x0103 NWPSE_BINDERY_LOCKED
  1499.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1500.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1501.                                    0x0306 NWPSE_GOING_DOWN
  1502.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1503.                                    0x030C NWPSE_DOWN 
  1504.                                    0x030E NWPSE_NO_RIGHTS 
  1505.     NumPrinters       uint8        Number of printers attached to the print server.
  1506.     ServicingQueueArray            uint8[255]     Array of uint8s.  A uint8 for each printer attached to the print server; up to the maximum number requested.
  1507.  
  1508. Remarks
  1509.  
  1510.     The number of uint8s in the array corresponds to the number of printers attached to the print server and each uint8 in the array represents a different printer.  MaxNumberEntries is the maximum number of printers to be returned.
  1511. D.S. Get Queues Serviced (for operators and users) 
  1512.  
  1513. This packet returns information about the queue(s) that the specified printer is servicing.  This packet is new with the 4.0 Print Server.
  1514.  
  1515. Request Format
  1516.  
  1517.     FunctionNumber    uint8        0xDF
  1518.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1519.     SequenceIdentifier             uint16    Initially zero
  1520.  
  1521. Reply Format
  1522.  
  1523.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1524.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1525.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1526.                                    0x030C NWPSE_DOWN 
  1527.                                    0x030D NWPSE_NOT_IN_LIST
  1528.                                    0x030E NWPSE_NO_RIGHTS 
  1529.     NewSequenceIdentifier          uint16
  1530.     Priority          uint8
  1531.     DSQueueName       uint8[512]
  1532.  
  1533. Remarks
  1534.  
  1535.     The client must set the sequence identifier to zero before making the first call, then set the sequence identifier to the value returned NewSequenceIdentifier for all subsequent calls.  The packet returns NWPSE_NOT_IN_LIST when no queues are left.  The Priority will be a value between 1 and 10.
  1536. D.S. Login to Print Server (anyone) 
  1537.  
  1538. This packet logs the client into the print server.  This packet is new with the 4.0 Print Server.
  1539.  
  1540. Request Format
  1541.  
  1542.     FunctionNumber    uint8        0xD1
  1543.     DSUserName        uint8[512]
  1544.  
  1545. Reply Format
  1546.  
  1547.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1548.                                    0x0103 NWPSE_BINDERY_LOCKED 
  1549.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1550.                                    0x030C NWPSE_DOWN 
  1551.                                    0x0400 NWPSE_UNABLE_TO_VERIFY_IDENTI TY
  1552.     AccessLevel       uint8        NWPS_OPERATOR, NWPS_USER, or NWPS_LIMITED
  1553.  
  1554. Remarks
  1555.  
  1556.     This packet gets the client's access rights from the file server bindery to determine if the client has user or operator rights to the print server.  The SPX connection must already be established.  The client must be attached to the file server that the print server is attached to.  The user should already be authenticated.
  1557.                  NetWare 4.10 - Directory Services Support
  1558.  
  1559. The following packets correspond to the D.S. versions above and differ in that the FunctionNumber in the request has been decremented by 0x30, and that the packet formats are changed to use Unicode instead of the code page of the sender.  These D.S. names are transmitted and received typeless, (as allowed in N.D.S. 4.10) and are are placed in the packet so that only significant data need be transmitted.  Care should be taken to transmit both bytes of the terminating zero.
  1560. Unicode D.S. Add Notify Object (for operators only) 
  1561.  
  1562. This packet adds an object to the print server's list of objects to be notified when a printer needs attention (such as mounting forms, printer off-line, out of paper).  This packet is new with the 4.1 Print Server.
  1563.  
  1564. Request Format
  1565.  
  1566.     FunctionNumber    uint8        0xB6
  1567.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1568.     ObjectType        uint16
  1569.     FirstNotice       uint16       Number of seconds to wait before 1st notice.
  1570.     Interval          uint16       Number of seconds between following notices.
  1571.     DSObjectName      uint16[256]  Unicode name
  1572.  
  1573.  
  1574. Reply Format
  1575.  
  1576.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1577.                                    0x0103 NWPSE_BINDERY_LOCKED
  1578.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1579.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1580.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1581.                                    0x0305 NWPSE_NOT_CONNECTED 
  1582.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1583.                                    0x030B NWPSE_ALREADY_IN_LIST
  1584.                                    0x030C NWPSE_DOWN 
  1585.                                    0x030E NWPSE_NO_RIGHTS
  1586.  
  1587. Remarks
  1588.  
  1589.     The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 indicates that the job owner is to be notified.  The object must have a connection ID to be notified.
  1590.  
  1591. Unicode D.S. Add Queue to Printer (for operators only) 
  1592.  
  1593. This packet assigns a queue to a printer and assigns a priority to the queue.  This packet is new with the 4.1 Print Server.
  1594.  
  1595. Request Format
  1596.  
  1597.     FunctionNumber    uint8        0xB1
  1598.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1599.     Priority          uint8
  1600.     DSQueueName       uint16[256]  Unicode name
  1601.  
  1602. Reply Format
  1603.  
  1604.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1605.                                    0x0103 NWPSE_BINDERY_LOCKED
  1606.                                    0x0200 NWPSE_NO_SUCH_QUEUE
  1607.                                    0x0201 NWPSE_NOT_AUTHORIZED_FOR_QUE UE
  1608.                                    0x0202 NWPSE_QUEUE_HALTED
  1609.                                    0x0203 NWPSE_UNABLE_TO_ATTACH_TO_Q UEUE
  1610.                                    0x0204 NWPSE_TOO_MANY_QUEUE_SERVER
  1611.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1612.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1613.                                    0x0305 NWPSE_NOT_CONNECTED 
  1614.                                    0x030B NWPSE_ALREADY_IN_LIST
  1615.                                    0x030C NWPSE_DOWN 
  1616.                                    0x030E NWPSE_NO_RIGHTS
  1617.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1618.  
  1619. Remarks
  1620.  
  1621.     The operator must be attached to the file server where the queue is to be added.  This packet attaches a queue server to the queue; therefore, the print server must be a property of the queue.  The queue cannot have more than 25 print servers servicing it.
  1622. Unicode D.S. Change Notify Interval (for operators only) 
  1623.  
  1624. This packet sets or changes the number of seconds the print server will wait before it notifies an object (FirstNotice) and the number of seconds the print server will wait between following notices.  This packet is new with the 4.1 Print Server.
  1625.  
  1626. Request Format
  1627.  
  1628.     FunctionNumber    uint8        0xB5
  1629.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1630.     ObjectType        uint16
  1631.     FirstNotice       uint16       Number of seconds to wait before 1st notice.
  1632.     Interval          uint16       Number of seconds between following notices.
  1633.     DSObjectName      uint16[256]  Unicode name
  1634.  
  1635.  
  1636. Reply Format
  1637.  
  1638.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1639.                                    0x0103 NWPSE_BINDERY_LOCKED
  1640.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1641.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1642.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1643.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1644.                                    0x030C NWPSE_DOWN 
  1645.                                    0x030D NWPSE_NOT_IN_LIST
  1646.                                    0x030E NWPSE_NO_RIGHTS
  1647.  
  1648. Remarks
  1649.  
  1650.     The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 indicates that the notify interval is to be changed for the job owner.  The object to notify must already be in the notify list.
  1651. Unicode D.S.Change Queue Priority (for operators only) 
  1652.  
  1653. This packet changes the service priority assigned to the specified queue.   This packet is new with the 4.1 Print Server.
  1654.  
  1655. Request Format
  1656.  
  1657.     FunctionNumber    uint8        0xB0
  1658.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1659.     NewPriority       uint8        1 = highest priority, 10 = lowest priority.
  1660.     DSQueueName       uint16[256]  Unicode name
  1661.  
  1662. Reply Format
  1663.  
  1664.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1665.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1666.                                    0x0103 NWPSE_BINDERY_LOCKED
  1667.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1668.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1669.                                    0x030D NWPSE_NOT_IN_LIST
  1670.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1671.                                    0x030C NWPSE_DOWN 
  1672.                                    0x030E NWPSE_NO_RIGHTS
  1673.  
  1674. Remarks
  1675.  
  1676.     The operator must be attached to the file server where the queue exists.  Attempts to get information about a queue will fail if the queue is not on the specified file server or if the queue is not in the print server list.
  1677.  
  1678. Unicode D.S. Delete Notify Object (for operators only) 
  1679.  
  1680. This packet deletes an object from the print server's list of objects to be notified when a printer needs attention (such as mounting forms, printer off-line, out of paper).  This packet is new with the 4.1 Print Server.
  1681.  
  1682. Request Format
  1683.  
  1684.     FunctionNumber    uint8        0xB7
  1685.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1686.     ObjectType        uint16
  1687.     DSObjectName      uint16[256]  Unicode name
  1688.  
  1689. Reply Format
  1690.  
  1691.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1692.                                    0x0103 NWPSE_BINDERY_LOCKED
  1693.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1694.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1695.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1696.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1697.                                    0x030C NWPSE_DOWN 
  1698.                                    0x030D NWPSE_NOT_IN_LIST
  1699.                                    0x030E NWPSE_NO_RIGHTS
  1700.  
  1701. Remarks
  1702.  
  1703.     The object is specified by the fileServerName, objectName, and objectType.  A blank objectName, or an objectType of -1 says that the job owner is to be deleted.  NWPSE_NOT_IN_LIST is returned if the object is not found in the list.
  1704.  
  1705. Unicode D.S. Delete Queue From Printer (for operators only) 
  1706.  
  1707. This packet deletes a queue from a printer's service list.  This packet is new with the 4.1 Print Server.
  1708.  
  1709. Request Format
  1710.  
  1711.     FunctionNumberuint8            0xB2
  1712.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1713.     DetachImmediately uint8        0 - NO, 1 - YES
  1714.     JobOutcome        uint8        (This is used only if DetachImmediately is YES.)
  1715.                                    1 - NWPS_RETURN_TO_QUEUE
  1716.                                    2 - NWPS_THROW_AWAY
  1717.     DSQueueName       uint16[256]  Unicode name
  1718.  
  1719. Reply Format
  1720.  
  1721.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1722.                                    0x0103 NWPSE_BINDERY_LOCKED
  1723.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1724.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1725.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1726.                                    0x030C NWPSE_DOWN 
  1727.                                    0x030D NWPSE_NOT_IN_LIST
  1728.                                    0x030E NWPSE_NO_RIGHTS
  1729.  
  1730. Remarks
  1731.  
  1732.     The client must be attached to the file server where the queue exists.  If a print server is servicing a job from the queue, this packet will abort the job using jobOutcome.  If any other printers are servicing the queue, this packet will not delete the queue.  The queue must be deleted from each printer.  If no other printers are servicing this queue, this packet deletes the queue.
  1733. Unicode D.S. Get Job ID (for operators and users) 
  1734.  
  1735. This packet returns information about the current job that the specified printer is printing and the queue from which it comes.  This packet is new with the 4.1 Print Server.
  1736.  
  1737. Request Format
  1738.  
  1739.     FunctionNumber    uint8        0xB8
  1740.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1741.  
  1742. Reply Format
  1743.  
  1744.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1745.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1746.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1747.                                    0x030C NWPSE_DOWN 
  1748.                                    0x030E NWPSE_NO_RIGHTS 
  1749.     QueueNameFormat   uint16       0 - NWPS_BINDERY_SERVICE
  1750.                                    1 - NWPS_DIRECTORY_SERVICE
  1751.     JobID             uint32       QMS Job identifier
  1752. if the QueueNameFormat is 0 then the remaining fields are
  1753.     FileServerName    uint8[48]
  1754.     QueueName         uint8[48]
  1755. else if the QueueNameFormat is 1 then the remaining field is
  1756.     QueueName         uint16[256]  Unicode name
  1757.  
  1758. Remarks
  1759.  
  1760. Unicode D.S. Get Notify Object (for operators and users) 
  1761.  
  1762. This packet returns the objects that will be notified when a printer needs attention and when the objects will be notified.  This packet is new with the 4.1 Print Server.
  1763.  
  1764. Request Format
  1765.  
  1766.     FunctionNumber    uint8        0xB4
  1767.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1768.     SequenceIdentifier             uint16    Initially zero
  1769.  
  1770. Reply Format
  1771.  
  1772.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1773.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1774.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1775.                                    0x030C NWPSE_DOWN 
  1776.                                    0x030D NWPSE_NOT_IN_LIST
  1777.                                    0x030E NWPSE_NO_RIGHTS 
  1778.     UpdatedSequenceIdentifier      uint16
  1779.     ObjectType        uint16       
  1780.     FirstNotice       uint16       Number of seconds to wait before 1st notice.
  1781.     Interval          uint16       Number of seconds between following notices.
  1782.     DSObjectName      uint16[256]  Unicode name
  1783.  
  1784. Remarks
  1785.  
  1786.     This packet returns NWPSE_NOT_IN LIST when there are no objects left in the notify list.  Initially the SequenceIdentifier must be set to zero (0).  After the initial request, the client must place the value returned in UpdatedSequenceIdentifier in the SequenceIdentifier for each subsequent call.
  1787. Unicode D.S. Get Printers Servicing Queue (for operators and users) 
  1788.  
  1789. This packet returns an array of uint8s (servicingQueueArray) which identifies which printers are servicing the specified queue.  This packet is new with the 4.1 Print Server.
  1790.  
  1791. Request Format
  1792.  
  1793.     FunctionNumber    uint8        0xB3
  1794.     MaxNumberofEntries             uint8
  1795.     DSQueueName       uint16[256]  Unicode name
  1796.  
  1797. Reply Format
  1798.  
  1799.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1800.                                    0x0103 NWPSE_BINDERY_LOCKED
  1801.                                    0x0200 NWPSE_NO_SUCH_OBJECT
  1802.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1803.                                    0x0306 NWPSE_GOING_DOWN
  1804.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1805.                                    0x030C NWPSE_DOWN 
  1806.                                    0x030E NWPSE_NO_RIGHTS 
  1807.     NumPrinters       uint8        Number of printers attached to the print server.
  1808.     ServicingQueueArray            uint8[255]     Array of uint8s.  A uint8 for each printer attached to the print server; up to the maximum number requested.
  1809.  
  1810. Remarks
  1811.  
  1812.     The number of uint8s in the array corresponds to the number of printers attached to the print server and each uint8 in the array represents a different printer.  MaxNumberEntries is the maximum number of printers to be returned.
  1813. Unicode D.S. Get Queues Serviced (for operators and users) 
  1814.  
  1815. This packet returns information about the queue(s) that the specified printer is servicing.  This packet is new with the 4.1 Print Server.
  1816.  
  1817. Request Format
  1818.  
  1819.     FunctionNumber    uint8        0xAF
  1820.     PrinterNumber     uint8        0 to maximum number of printers minus 1.
  1821.     SequenceIdentifier             uint16    Initially zero
  1822.  
  1823. Reply Format
  1824.  
  1825.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1826.                                    0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1827.                                    0x0302 NWPSE_NO_SUCH_PRINTER 
  1828.                                    0x030C NWPSE_DOWN 
  1829.                                    0x030D NWPSE_NOT_IN_LIST
  1830.                                    0x030E NWPSE_NO_RIGHTS 
  1831.     NewSequenceIdentifier          uint16
  1832.     Priority          uint8
  1833.     DSQueueName       uint16[256]  Unicode name
  1834.  
  1835. Remarks
  1836.  
  1837.     The client must set the sequence identifier to zero before making the first call, then set the sequence identifier to the value returned NewSequenceIdentifier for all subsequent calls.  The packet returns NWPSE_NOT_IN_LIST when no queues are left.  The Priority will be a value between 1 and 10.
  1838. Unicode D.S. Login to Print Server (anyone) 
  1839.  
  1840. This packet logs the client into the print server.  This packet is new with the 4.1 Print Server.
  1841.  
  1842. Request Format
  1843.  
  1844.     FunctionNumber    uint8        0xA1
  1845.     DSUserName        uint16[256]  Unicode name.
  1846.  
  1847. Reply Format
  1848.  
  1849.     CompletionCode    uint16       0x0000 NWPSE_SUCCESSFUL
  1850.                                    0x0103 NWPSE_BINDERY_LOCKED 
  1851.                                    0x030A NWPSE_NOT_ATTACHED_TO_SERVER
  1852.                                    0x030C NWPSE_DOWN 
  1853.                                    0x0400 NWPSE_UNABLE_TO_VERIFY_IDENTI TY
  1854.     AccessLevel       uint8        NWPS_OPERATOR, NWPS_USER, or NWPS_LIMITED
  1855.  
  1856. Remarks
  1857.  
  1858.     This packet gets the client's access rights from the file server bindery to determine if the client has user or operator rights to the print server.  The SPX connection must already be established.  The client must be attached to the file server that the print server is attached to.  The user should already be authenticated.
  1859.                                  CHAPTER 3
  1860.  
  1861.                          NWPSRV LIBRARY FUNCTIONS
  1862.  
  1863.  
  1864. Previous versions of this document contained the complete description of the C-Library  known as NPT.LIB. The newest version of this library has been incorporated into the NetWare 4.0 Client SDK as part of the NWPSRV library.  The spellings of the function names were altered to conform with other parts of the SDK and the "PS" prefix was changed to "NWPSCom" to reflect the "NetWare Print Services Communications" subset of functions.  This chapter contains only a list of the old names and their corresponding spelling changes.  For details on these calls please refer to that portion of the NetWare 4.0 Client SDK documentation, which is included with this document.
  1865.  
  1866. An SPX connection must be established before an NWPSRV Library Function call can be issued successfully.  Issuing the library call "NWPSComAttachToPrintServer" will establish the SPX connection.  See Chapter 1, "Print Server - Client Communication."
  1867.  
  1868. For NWPSRV Library Functions that use the parameter jobOutcome, if jobOutcome is NWPS_RETURN_TO_QUEUE, it is no longer necessary to set the job control flag to restart a job since this is done by the API.  See Job Control Flags in the Queue Job section of Appendix G, "Record Structures."
  1869.  
  1870.                          Function Calls for Anyone
  1871.  
  1872. NWPSComGetAttachedNServers              - was PSGetAttachedServers
  1873. NWPSComGetPrintServerInfo               - was PSGetPrintServerInfo
  1874. NWPSComLoginToPrintServer               - was PSLoginToPrintServer
  1875.                   Function Calls for Operators and Users
  1876.  
  1877. NWPSComAbortPrintJob               - was PSAbortPrintJob
  1878. NWPSComAttachToPrintServer              - was PSAttachToPrintServer
  1879. NWPSComDetachFromPrintServer            - was PSDetachFromPrintServer
  1880. NWPSComGetNotifyObject                  - was PSGetNotifyObject
  1881. NWPSComGetPrintersServicingQ            - was PSGetPrintersServicingQueue
  1882. NWPSComGetPrinterStatus                 - was PSGetPrinterStatus
  1883. NWPSComGetPrintJobStatus                - was PSGetPrintJobStatus
  1884. NWPSComGetQueuesServiced                - was PSGetQueuesServiced
  1885.                      Function Calls for Operators Only
  1886.  
  1887. NWPSComAddNotifyObject                  - was PSAddNotifyObject
  1888. NWPSComAddQueueToPrinter                - was PSAddQueueToPrinter
  1889. NWPSComAttachPServerToNServer           - was PSAttachPrintServerToFileServer
  1890. NWPSComCancelDownRequest                - was PSCancelDownRequest
  1891. NWPSComChangeNotifyInterval             - was PSChangeNotifyInterval
  1892. NWPSComChangeQueuePriority              - was PSChangeQueuePriority
  1893. NWPSComChangeServiceMode                - was PSChangeServiceMode
  1894. NWPSComDeleteNotifyObject               - was PSDeleteNotifyObject
  1895. NWPSComDeleteQueueFromPrinter           - was PSDeleteQueueFromPrinter
  1896. NWPSComDetachPServerFromNServer    - was PSDetachPrintServerFromFileServer
  1897. NWPSComDownPrintServer                  - was PSDownPrintServer
  1898. NWPSComEjectForm                   - was PSEjectForm
  1899. NWPSComMarkTopOfForm               - was PSMarkTopOfForm
  1900. NWPSComRewindPrintJob              - was PSRewindPrintJob
  1901. NWPSComSetMountedForm                   - was PSSetMountedForm
  1902. NWPSComStartPrinter                - was PSStartPrinter
  1903. NWPSComStopPrinter                 - was PSStopPrinter
  1904.                                  CHAPTER 4
  1905.  
  1906.                               REMOTE PRINTERS
  1907.  
  1908.  
  1909. The NetWare Print Server can service remote printers on the internet (printers that are connected to a computer other than the one where the print server is installed).  The print server communicates with remote printers using SPX protocol.  See the NetWare System Interface Technical Overview:  Chapter 4, "Communication Services."
  1910.  
  1911. This chapter contains information about the communication between the print server and remote printers.  This includes initializing communication and transferring data and status information at the packet level.   Information on C-Library function calls is also provided in this chapter.
  1912.  
  1913.  
  1914. INITIALIZING COMMUNICATION
  1915.  
  1916. The print server communicates on 2 SPX sockets.  One socket is for client requests; such as obtaining information about queues supported, print server version number, etc.  The other socket is reserved for communication with remote printers.  The print server advertises the client socket on the internet using Service Advertising Protocol (SAP).  The client socket can be obtained from the bindery or from the SAP packet sent out by the print server.   The remote printer socket is obtained from the print server when the remote printer number is requested using the C-Library Function:  NWPSComRequestRemotePrinter.
  1917.  
  1918. To establish a work-station as a remote printer proceed as follows:
  1919.  
  1920. 1.  Establish an SPX Connection with the print server on the client socket.  This can be done by issuing NWPSComAttachToPrintServer.
  1921.  
  1922. 2.  Find out which printer numbers are available for remote printers.  This can be done by issuing NWPSComGetNextRemotePrinter which sends print server command code 0x80 repetitively until an error is returned indicating that no more remote printer numbers are available.
  1923.  
  1924. 3.  Request that an available printer's number be assigned to the remote printer by issuing NWPSComRequestRemotePrinter. This sends print server command code 0x81.
  1925.  
  1926. 4.  Terminate the SPX connection on the client socket.
  1927.  
  1928. 5.  Establish an SPX connection with the print server on the remote printer socket.
  1929.  
  1930.  
  1931. RUN TIME COMMUNICATION
  1932.  
  1933. After the remote printer number has been selected, communication between the print server and the remote printer takes place on the remote printer socket.  The print server sends commands and data to be printed to the remote printer.  The remote printer sends status packets to the print server.
  1934.  
  1935.  
  1936. REMOTE PRINTER TO PRINT SERVER COMMUNICATION
  1937.  
  1938. The remote printer initiates communication with the print server by sending a status packet.  The status packet tells the print server what state the remote printer is in; such as online, offline, out of paper, sideband finished, new data block needed, or finished printing data block since last packet was sent.
  1939.  
  1940.                     REMOTE PRINTER STATUS PACKET FORMAT
  1941.  
  1942. This packet is sent on the remote printer socket and should be sent whenever a change of status occurs.  All fields must be filled.
  1943.  
  1944. Request Format
  1945.  
  1946.     PrinterNumber     uint8        Printer making request
  1947.     NeedBlocks        uint8        Number of new blocks needed
  1948.     FinishedBlocks    uint8        Number of blocks finished since last packet
  1949.     TroubleCode       uint8        0 (online), 1 (offline), or 2 (out of paper)
  1950.     InSideband        uint8        Is remote printer printing sideband? 1(true) or 0 (false)
  1951.  
  1952. The data stream type in the SPX header of the status packet should be set to zero, indicating that it is a remote information packet type zero.
  1953. PRINT SERVER TO REMOTE PRINTER COMMUNICATION
  1954.  
  1955. After the print server has received a status packet from the remote printer, it will respond by sending data to be printed (if it is requested) and control commands to the remote printer.
  1956.  
  1957. The NetWare Print Server versions 4.00 and 4.10 send 9 different types of packets to a remote printer. (See Remote Printer Data Stream Types in this chapter.)  The type of packet can be determined by the data stream field in the SPX header of the packet.  The data portion of a packet sent to a remote printer can be up to 512 bytes long.
  1958.  
  1959.  
  1960.  
  1961. .REMOTE PRINTER FUNCTION PACKET FORMATS
  1962.  
  1963.  
  1964. An SPX connection must be established before a protocol packet can be issued successfully.  See Chapter 1, "Print Server - Client Communication" for information on how to establish an SPX connection.
  1965.  
  1966. If the SPX connection is terminated unexpectedly, NWPSE_CONNECTION_TERMINATED will be returned in the Event Control Block (ECB).  See the NetWare System Interface Technical Overview:  Chapter 4, "Communication Services."
  1967. Get Next Remote Printer
  1968.  
  1969. This packet returns the printer number of the next available remote printer.
  1970.  
  1971. Request Format
  1972.  
  1973.     CommandCode    uint8   0x80
  1974.     PrinterNumber  uint8
  1975.  
  1976. Reply Format
  1977.  
  1978.     CompletionCode uint16  0x0000 NWPSE_SUCCESSFUL
  1979.                            0x0103 NWPSE_BINDERY_LOCKED
  1980.                            0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  1981.                            0x0302 NWPSE_NO_SUCH_PRINTER 
  1982.                            0x030C NWPSE_DOWN 
  1983.                            0x030E NWPSE_NO_RIGHTS 
  1984.     PrinterNumber  uint8
  1985.     PrinterType    uint16
  1986.     PrinterName    uint8[48]
  1987.  
  1988. Remarks
  1989.  
  1990.     This packet is sent on the client socket.  The printer number should initially be set to 0xFF.  The printer number that is returned should be passed back on each subsequent call to get the next number.
  1991.  
  1992. Request Remote Printer
  1993.  
  1994. This packet requests the print server to assign the specified printer number to a remote printer.
  1995.  
  1996. Request Format
  1997.  
  1998.     CommandCode    uint8   0x81
  1999.     PrinterNumber  uint8
  2000.  
  2001. Reply Format
  2002.  
  2003.     CompletionCode uint16  0x0000 NWPSE_SUCCESSFUL
  2004.                            0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  2005.                            0x0302 NWPSE_NO_SUCH_PRINTER 
  2006.                            0x0308 NWPSE_ALREADY_IN_USE
  2007.                            0x030C NWPSE_DOWN 
  2008.  
  2009.     Printer type   uint16
  2010.     Use interrupts uint16
  2011.     IRQ Number     uint16
  2012.     Blocks         uint16  Recommended number of 512 byte blocks in buffer
  2013.     Protocol       uint16  Use Xon/Xoff protocol? *
  2014.     Baud rate      uint16  *
  2015.     Data bits      uint16  *
  2016.     Stop bits      uint16  *
  2017.     Parity type    uint16  *
  2018.     Socket         uint16  Socket for remote printer to communicate with print server
  2019.  
  2020. Remarks
  2021.  
  2022.     This packet is sent on the client socket.  The client should first send the Get Next Remote Printer packet to find out which printer numbers are available.
  2023.  
  2024.     * These fields are unused unless the printer is of Serial type.
  2025. Set Remote Mode
  2026.  
  2027. This packet sets the remote printer mode.
  2028.  
  2029. Request Format
  2030.  
  2031.     Command code   uint8   0x82
  2032.     Printer number uint8
  2033.     Shared or Private      uint8     0 - NWPS_PRINTER_SHARED
  2034.                            1 - NWPS_PRINTER_PRIVATE
  2035.  
  2036. Reply Format
  2037.  
  2038.     CompletionCode uint16  0x0000 NWPSE_SUCCESSFUL
  2039.                            0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  2040.                            0x0302 NWPSE_NO_SUCH_PRINTER 
  2041.                            0x0303 NWPSE_INVALID_PARAMETER
  2042.                            0x0304 NWPSE_PRINTER_BUSY
  2043.                            0x0305 NWPSE_NOT_CONNECTED 
  2044.                            0x030C NWPSE_DOWN 
  2045.                            0x030E NWPSE_NO_RIGHTS
  2046.                            0x0401 NWPSE_NOT_REMOTE_PRINTER
  2047.  
  2048. Remarks
  2049.  
  2050.     This packet is sent on the client socket.  Zero (0) indicates that the remote printer is shared with the network. One (1) indicates that the remote printer is private to the work-station.
  2051. Scan Network Printers
  2052.  
  2053. This packet returns the printer number of the next available network printer.  This is new with the release of the 4.0 Print Server and is intended to return more kinds of printers than were previously supported.
  2054.  
  2055. Request Format
  2056.  
  2057.     CommandCode    uint8   0x84
  2058.     PrinterNumber  uint8
  2059.  
  2060. Reply Format
  2061.  
  2062.     CompletionCode uint16  0x0000 NWPSE_SUCCESSFUL
  2063.                            0x0103 NWPSE_BINDERY_LOCKED
  2064.                            0x0301 NWPSE_NOT_ENOUGH_MEMORY 
  2065.                            0x0302 NWPSE_NO_SUCH_PRINTER 
  2066.                            0x030C NWPSE_DOWN 
  2067.                            0x030E NWPSE_NO_RIGHTS 
  2068.     PrinterNumber  uint8
  2069.     PrinterType    uint16
  2070.     PrinterName    uint8[48]
  2071.     ExtendedConfigLength   uint8
  2072.     ExtendedConfigData     uint8[100]     The amount of data that is valid depends on the length field above.  The nature of the data is dependent on the PrinterType field.
  2073.  
  2074. Remarks
  2075.  
  2076.     This packet is sent on the client socket.  The printer number should initially be set to 0xFF.  The printer number that is returned should be passed back on each subsequent call to get the next number.
  2077.  
  2078.  
  2079.  
  2080.  
  2081. .REMOTE PRINTER NWPSRV LIBRARY FUNCTION CALLS
  2082.  
  2083.  
  2084. Previous versions of this document contained the complete description of the C-Library  known as NPT.LIB. The newest version of this library has been incorporated into the NetWare 4.0 Client SDK as part of the NWPSRV library.  The spellings of the function names were altered to conform with other parts of the SDK and the "PS" prefix was changed to "NWPSCom" to reflect the "NetWare Print Services Communications" subset of functions.  This chapter contains only a list of the old names and their corresponding spelling changes.  For details on these calls please refer to that portion of the NetWare 4.0 Client SDK documentation, which is included with this document.
  2085.  
  2086. An SPX connection must be established before an NWPSRV Library Function can be issued successfully.  Issuing the library call "NWPSComAttachToPrintServer" will establish an SPX connection.  See Chapter 1, "Print Server - Client Communication."
  2087.  
  2088.                  Function Calls for Network Printers Only
  2089.  
  2090. NWPSComGetNextRemotePrinter     - was PSGetNextRemotePrinter
  2091. NWPSComRequestRemotePrinter     - was PSRequestRemotePrinter
  2092. NWPSComSetRemoteMode            - was PSSetRemoteMode
  2093. REMOTE PRINTER DATA STREAM TYPES
  2094.  
  2095. The following remote printer data stream types are sent from the print server to the remote printer and appear in the data stream field of the SPX header.
  2096.  
  2097.  
  2098. NWPS_DST_DATA      0       The data portion of the packet contains information to be printed.  The length of the incoming data can be figured out from the length field in the SPX header.
  2099.  
  2100. NWPS_DST_FLUSH     1       Stop printing and clear all buffers.
  2101.  
  2102. NWPS_DST_PAUSE     2       Stop printing and wait for new instructions.  Retain all current data.
  2103.  
  2104. NWPS_DST_START     3       Restart printing from buffer.
  2105.  
  2106. NWPS_DST_SIDEBAND  4       Stop printing data in buffer and print data from sideband packet immediately.  Usually sent during the PAUSE state.  Sideband data consists of a character to be printed a specified number of times followed by an end character printed once.
  2107.     Data field:    1st uint8    Count:  Number of times to print character in 2nd uint8.  Must be non-zero.
  2108.                    2nd uint8    Character to print.
  2109.                    3rd uint8    End character.  Printed after all iterations of 2nd uint8 and only if it is non-zero.  Usually a return or a form feed.
  2110.  
  2111. NWPS_DST_NEW_JOB   5       Start new job packet.  1st uint8 after SPX header is tab expansion size.
  2112.  
  2113. NWPS_DST_RELEASE   6       Gives control of the remote printer to a process other than the NetWare Print Server (such as local mode or DOS).  The remote printer still listens for an SPX packet (which will usually be a RECLAIM packet)
  2114.  
  2115. NWPS_DST_RECLAIM   7       Reclaims the remote printer for the NetWare print server.
  2116.  
  2117. NWPS_DST_EOJ       8       End of Job -- signal from 4.0 Print Servers to the Network Printer that all data from the previous job has been transmitted. This was added for synchronization with the Print Server.REMOTE PRINTER TYPES
  2118.  
  2119. These are the possible types of remote printers.  One of the following values is returned when the C-Library Function PSGetNextRemotePrinter is issued.
  2120.  
  2121.  
  2122.      NWPS_P_REM_PAR_1   7              Remote printer using parallel port 1
  2123.      NWPS_P_REM_PAR_2   8              Remote printer using parallel port 2
  2124.      NWPS_P_REM_PAR_3   9              Remote printer using parallel port 3
  2125.      NWPS_P_REM_SER_1   10             Remote printer using serial port 1
  2126.      NWPS_P_REM_SER_2   11             Remote printer using serial port 2
  2127.      NWPS_P_REM_SER_3   12             Remote printer using serial port 3
  2128.      NWPS_P_REM_SER_4   13             Remote printer using serial port 4
  2129.      NWPS_P_REM_OTHER_1 14             Remote printer of other/unknown type
  2130.      NWPS_P_ELSEWHERE_1 15             Defined elsewhere
  2131.      NWPS_P_XNP_1       16             eXtended Network Printer
  2132.      NWPS_P_LOC_AIO     17             AIO Auto-start printer
  2133.      NWPS_P_REM_AIO     18             AIO User-started printer
  2134.      NWPS_P_APPLE_1     100            Apple-Talk printer
  2135.      NWPS_P_UNIX_1      200            UNIX User-started printer
  2136.  
  2137.                                 APPENDIX A
  2138.  
  2139.             PRINT SERVER COMMUNICATION ERROR CODES (numerical)
  2140.  
  2141.  
  2142.  0x0000   NWPSE_SUCCESSFUL
  2143.  
  2144.  (Codes 0x0040 through 0x0047 are errors possible when NWPSComAttachToPrintServer fails.)
  2145.  
  2146.  0x0040   NWPSE_NO_AVAILABLE_SPX_CONNECTI:
  2147.           The shell has not been configured to get enough SPX connections.  This can be remedied by changing the SHELL.CFG file.
  2148.  
  2149.  0x0041   NWPSE_SPX_NOT_INITIALIZED:
  2150.           The SPX shell has not been loaded.
  2151.  
  2152.  0x0042   NWPSE_NO_SUCH_PSERVER:
  2153.           The client has attempted to attach to a print server that is not advertising and therefore not running.
  2154.  
  2155.  0x0043   NWPSE_UNABLE_TO_GET_SERVER_ADDR:
  2156.           The network address of the advertising print server is not in the bindery.
  2157.  
  2158.  0x0044   NWPSE_UNABLE_TO_CONNECT_TO_SERV:
  2159.           The client cannot attach to the print server for some reason that cannot be identified.
  2160.  
  2161.  0x0045   NWPSE_NO_AVAILABLE_IPX_SOCKETS:
  2162.           All available IPX sockets are already in use.
  2163.  
  2164.  0x0046   NWPSE_ALREADY_ATTACH_TO_A_PRINT:
  2165.           The NetWare Print Server C library only allows a client to be attached to one print server at a time.  Clients may write their own libraries if they wish to attach to more than one print server at a time.
  2166.  
  2167.  0x0047   NWPSE_IPX_NOT_INITIALIZED:
  2168.           The IPX shell has not been loaded.
  2169.  
  2170.  0x00ED   NWPSE_CONNECTION_TERMINATED:
  2171.           This message can be returned on any call.  The SPX connection has been broken or the connection between the client and the print server has been broken.
  2172.  
  2173.  
  2174.                                 APPENDIX B
  2175.  
  2176.                    PRINT SERVER ERROR CODES (numerical) 
  2177.  
  2178.  
  2179.  0x0000   NWPSE_SUCCESSFUL
  2180.  
  2181.  (Codes 0x0101 through 0x0107 are errors possible when an Attach Print Server to File Server call fails.)
  2182.  
  2183.  0x0101   NWPSE_TOO_MANY_FILE_SERVERS:
  2184.           The print server is already attached to as many file servers as is possible and cannot attach to any more.
  2185.  
  2186.  0x0102   NWPSE_UNKNOWN_FILE_SERVER:
  2187.           The client has requested to attach to a file server that is not known to the print server.
  2188.  
  2189.  0x0103   NWPSE_BINDERY_LOCKED:
  2190.           The bindery of the specified file server is locked and cannot be accessed at this time.  A bindery will be locked if a supervisor is running Bind Fix or another application that monopolizes the bindery.
  2191.  
  2192.  0x0104   NWPSE_FILE_SERVER_MAXED_OUT:
  2193.           The file server is already attached to as many different connections as is possible and cannot attach to any more.  File servers using NetWare 3.0 can handle to up to 250 connections.
  2194.  
  2195.  0x0105   NWPSE_NO_RESPONSE:
  2196.           The specified file server is recognized by the print server, but does not respond to the attach call for some reason.  This usually means that the file server has just gone down.
  2197.  
  2198.  0x0106   NWPSE_ALREADY_ATTACHED:
  2199.           The print server is already attached to the specified file server.
  2200.  
  2201.  0x0107   NWPSE_CANT_ATTACH:
  2202.           The print server cannot attach to the specified file server for some reason that cannot be identified.
  2203.  
  2204.  (Codes 0x0108 through 0x0114 are errors possible when a login command fails.)
  2205.  
  2206.  0x0108   NWPSE_NO_ACCOUNT_BALANCE:
  2207.           The file server is charging for services and the print server does not have an account balance.  This error will not occur unless accounting has been installed and the print server has not been assigned an account balance.
  2208.  
  2209.  0x0109   NWPSE_NO_CREDIT_LEFT:
  2210.           The file server is charging for services and the print server has exceeded its credit limit.  In this version of the NetWare print server, print servers are automatically given unlimited credit when an accounting application is installed.  This error will not occur unless the credit limit has been altered with a user supplied application.
  2211.  
  2212.  0x010A   NWPSE_INTRUDER_DETECTION_LOCK:
  2213.           The print server is locked out of the file server for a certain amount of time because someone has tried to login as the print server several times and has used the wrong name or wrong password.  The number of incorrect logins before lockout and the length of time of the lockout is set up in the SYSCON utility.
  2214.  
  2215.  0x010B   NWPSE_TOO_MANY_CONNECTIONS:
  2216.           A print server with the same name as the one trying to login is already logged into the file server.
  2217.  
  2218.  0x010C   NWPSE_ACCOUNT_DISABLED:
  2219.           This error will not occur unless a supervisor has specifically altered the print server account so that it is disabled.
  2220.  
  2221.  0x010D   NWPSE_UNAUTHORIZED_TIME:
  2222.           The print server has attempted to login at a time that has been designated by the supervisor as an unauthorized time in the SYSCON utility.
  2223.  
  2224.  0x010E   NWPSE_UNAUTHORIZED_STATION:
  2225.           The print server has attempted to login from a work-station that has not been authorized in the SYSCON utility.  This will not occur unless it has been specifically designated by the supervisor.
  2226.  
  2227.  0x010F   NWPSE_NO_MORE_GRACE:
  2228.           The print server's password has expired and was not changed in the number of times allowed as a grace period.
  2229.  
  2230.  0x0110   NWPSE_LOGIN_DISABLED:
  2231.           All logins have been temporarily disabled by the supervisor.
  2232.  
  2233.  0x0111   NWPSE_ILLEGAL_ACCT_NAME:
  2234.           An account name using illegal characters (such as ?, *, etc.) has been entered.
  2235.  
  2236.  0x0112   NWPSE_PASSWORD_HAS_EXPIRED:
  2237.           This is a warning.  The password has expired and must be changed within the number of time sdesignated as grace time in the SYSCON utility.
  2238.  
  2239.  0x0113   NWPSE_ACCESS_DENIED:
  2240.           An incorrect print server name or password was entered.
  2241.  
  2242.  0x0114   NWPSE_CANT_LOGIN:
  2243.           The print server cannot login to the specified file server for some reason that cannot be identified.
  2244.  
  2245.  0x0115   NWPSE_PRINTER_ALREADY_INSTALLED:
  2246.  
  2247.  0x0116   NWPSE_CANT_OPEN_CONFIG_FILE:
  2248.  
  2249.  0x0117   NWPSE_CANT_READ_CONFIG_FILE:
  2250.  
  2251.  0x0118   NWPSE_UNKNOWN_PRINTER_TYPE:
  2252.  
  2253.  0x0119   NWPSE_MAX_FORMS_EXCEEDED:
  2254.           An attempt was made to add a form to a printer that already has the maximum configured.
  2255.  
  2256.  0x011A   NWPSE_NO_SUCH_JOB:
  2257.           Specified Job Number does not exist on the printer's list of active jobs.
  2258.  
  2259.  0x011B   NWPSE_UNKNOWN_PRINTER_ERROR:
  2260.  
  2261.  0x011C   NWPSE_COMMUNICATIONS_ERROR:
  2262.  
  2263.  0x011D   NWPSE_MODE_NOT_SUPPORTED:
  2264.           The rewind mode is not supported by this printer.
  2265.  
  2266.  (Codes 0x0200 through 0x0401 are errors possible when a protocol packet or a library function call fails.)
  2267.  
  2268.  0x0200   NWPSE_NO_SUCH_OBJECT:
  2269.           An object (such as a user, queue, or group) has been requested that does not exist in the bindery of the specified file server.
  2270.  
  2271.  0x0201   NWPSE_NOT_AUTHORIZED_FOR_QUEUE:
  2272.           The print server is not in the list of authorized print servers for the specified queue.
  2273.  
  2274.  0x0202   NWPSE_QUEUE_HALTED:
  2275.           The queue operator has set a flag in the PConsole utility so that no more print servers can attach to that queue.
  2276.  
  2277.  0x0203   NWPSE_UNABLE_TO_ATTACH_TO_QUEUE:
  2278.           The print server is unable to attach to the specified queue for some reason that cannot be identified.
  2279.  
  2280.  0x0204   NWPSE_TOO_MANY_QUEUE_SERVERS:
  2281.           The specified queue is already attached to the maximum number of print servers it is allowed.
  2282.  0x0300   NWPSE_INVALID_REQUEST:
  2283.           An SPX packet has been sent with a request code that is not recognized by the print server.
  2284.  
  2285.  0x0301   NWPSE_NOT_ENOUGH_MEMORY:
  2286.           The print server cannot allocate the amount of memory needed to meet the request.
  2287.  
  2288.  0x0302   NWPSE_NO_SUCH_PRINTER:
  2289.           A request has been made for a printer that does not exist.
  2290.  
  2291.  0x0303   NWPSE_INVALID_PARAMETER:
  2292.           The request that was made is valid, but at least one of the parameters contains a value that is not valid.
  2293.  
  2294.  0x0304   NWPSE_PRINTER_BUSY:
  2295.           This message is returned if a Mark, Eject, or Change Remote Printer NWPS_PRINTER_PRIVATE/NWPS_PRINTER_SHARED mode is sent while the printer is printing.
  2296.  
  2297.  0x0305   NWPSE_CANT_DETACH_PRIMARY_SERVER:
  2298.           The print server cannot detach from its primary file server.
  2299.  
  2300.  0x0306   NWPSE_GOING_DOWN:
  2301.           The DOWN command has been issued to the print server and it is waiting for all of its printers to finish printing their jobs before if shuts down.  However, the printer that the client has tried to access has finished its last job and is already shut down.
  2302.  
  2303.  0x0307   NWPSE_NOT_CONNECTED:
  2304.           The client has attempted to access a remote printer that has not connected yet.
  2305.  
  2306.  0x0308   NWPSE_ALREADY_IN_USE:
  2307.           The client has attempted to set up a remote printer using a printer number that is already in use.
  2308.  
  2309.  0x0309   NWPSE_NO_JOB_ACTIVE:
  2310.           The client has attempted to abort, rewind, or get job status information for a printer that is not currently active.
  2311.  
  2312.  0x030A   NWPSE_NOT_ATTACHED_TO_SERVER:
  2313.           When attempting to add a queue or add an object to notify, the client has specified a file server that is not attached to the print server.
  2314.  
  2315.  0x030B   NWPSE_ALREADY_IN_LIST:
  2316.           The client has attempted to add an object to a notify list or add a queue to a queue service list that is already in that list.
  2317.  
  2318.  0x030C   NWPSE_DOWN:
  2319.           The print server is down and must be restarted.  This message is returned only during the interval between when the DOWN command is issued and when the print server is actually shut down.
  2320.  
  2321.  0x030D   NWPSE_NOT_IN_LIST:
  2322.           The client has attempted to change or delete a print queue that is not in the queue service list or an object that is not in the notify object list.
  2323.  
  2324.  0x030E   NWPSE_NO_RIGHTS:
  2325.           The client does not have the necessary user or operator rights to perform the attempted function.
  2326.  
  2327.  0x030F   NWPSE_CMD_NOT_SUPPORTED:
  2328.           This message is returned if the network printer is not able to support Sideband operations such as Mark TOF and Eject.
  2329.  
  2330.  0x0400   NWPSE_UNABLE_TO_VERIFY_IDENTITY:
  2331.           This message is returned if a Login to Print Server packet is sent with incorrect data in it.  The connection number and file server name don't match the address that the client is calling from.
  2332.  
  2333.  0x0401   NWPSE_NOT_REMOTE_PRINTER:
  2334.           The user has attempted to make a remote printer call to a printer that is not a remote printer or set up a remote printer using a print number that is not a remote printer number.
  2335.  
  2336.  0x0402   NWPSE_UNAUTHORIZED_PRINTER:
  2337.           The user has attempted to establish a remote printer connection to the print server from a network address that is not permitted.  The printer object is configured with an address restriction.
  2338.  
  2339.  
  2340.                                 APPENDIX C
  2341.  
  2342.            PRINT SERVER COMMUNICATION ERROR CODES (alphabetical)
  2343.  
  2344.  
  2345. 0x0046     NWPSE_ALREADY_ATTACH_TO_A_PRINT
  2346. 0x00ED     NWPSE_CONNECTION_TERMINATED
  2347. 0x0047     NWPSE_IPX_NOT_INITIALIZED
  2348. 0x0045     NWPSE_NO_AVAILABLE_IPX_SOCKETS
  2349. 0x0040     NWPSE_NO_AVAILABLE_SPX_CONNECTI
  2350. 0x0042     NWPSE_NO_SUCH_PSERVER
  2351. 0x0041     NWPSE_SPX_NOT_INITIALIZED
  2352. 0x0044     NWPSE_UNABLE_TO_CONNECT_TO_SERV
  2353. 0x0043     NWPSE_UNABLE_TO_GET_SERVER_ADDR
  2354.  
  2355.  
  2356.  
  2357.                                 APPENDIX D
  2358.  
  2359.                   PRINT SERVER ERROR CODES (alphabetical)
  2360.  
  2361.  
  2362. 0x0113     NWPSE_ACCESS_DENIED
  2363. 0x010C     NWPSE_ACCOUNT_DISABLED
  2364. 0x0106     NWPSE_ALREADY_ATTACHED
  2365. 0x030B     NWPSE_ALREADY_IN_LIST
  2366. 0x0308     NWPSE_ALREADY_IN_USE
  2367. 0x0103     NWPSE_BINDERY_LOCKED
  2368. 0x0107     NWPSE_CANT_ATTACH
  2369. 0x0305     NWPSE_CANT_DETACH_PRIMARY_SERVER
  2370. 0x0114     NWPSE_CANT_LOGIN
  2371. 0x030C     NWPSE_DOWN
  2372. 0x0104     NWPSE_FILE_SERVER_MAXED_OUT
  2373. 0x0306     NWPSE_GOING_DOWN
  2374. 0x0111     NWPSE_ILLEGAL_ACCT_NAME
  2375. 0x010A     NWPSE_INTRUDER_DETECTION_LOCK
  2376. 0x0303     NWPSE_INVALID_PARAMETER
  2377. 0x0300     NWPSE_INVALID_REQUEST
  2378. 0x0110     NWPSE_LOGIN_DISABLED
  2379. 0x030A     NWPSE_NOT_ATTACHED_TO_SERVER
  2380. 0x0201     NWPSE_NOT_AUTHORIZED_FOR_QUEUE
  2381. 0x0301     NWPSE_NOT_ENOUGH_MEMORY
  2382. 0x030D     NWPSE_NOT_IN_LIST
  2383. 0x0401     NWPSE_NOT_REMOTE_PRINTER
  2384. 0x0108     NWPSE_NO_ACCOUNT_BALANCE
  2385. 0x0109     NWPSE_NO_CREDIT_LEFT
  2386. 0x0309     NWPSE_NO_JOB_ACTIVE
  2387. 0x010F     NWPSE_NO_MORE_GRACE
  2388. 0x0105     NWPSE_NO_RESPONSE
  2389. 0x030E     NWPSE_NO_RIGHTS
  2390. 0x0200     NWPSE_NO_SUCH_OBJECT
  2391. 0x0302     NWPSE_NO_SUCH_PRINTER
  2392. 0x0112     NWPSE_PASSWORD_HAS_EXPIRED
  2393. 0x0304     NWPSE_PRINTER_BUSY
  2394. 0x0307     NWPSE_NOT_CONNECTED
  2395. 0x0202     NWPSE_QUEUE_HALTED
  2396. 0x010B     NWPSE_TOO_MANY_CONNECTIONS
  2397. 0x0101     NWPSE_TOO_MANY_FILE_SERVERS
  2398. 0x0204     NWPSE_TOO_MANY_QUEUE_SERVERS
  2399. 0x0203     NWPSE_UNABLE_TO_ATTACH_TO_QUEUE
  2400. 0x0400     NWPSE_UNABLE_TO_VERIFY_IDENTITY
  2401. 0x0402     NWPSE_UNAUTHORIZED_PRINTER
  2402. 0x010E     NWPSE_UNAUTHORIZED_STATION
  2403. 0x010D     NWPSE_UNAUTHORIZED_TIME
  2404. 0x0102     NWPSE_UNKNOWN_FILE_SERVER
  2405.                                 APPENDIX E
  2406.  
  2407.                             FUNCTION CONSTANTS
  2408.  
  2409.          0            NWPS_LIMITED
  2410.          1            NWPS_USER
  2411.          2            NWPS_OPERATOR
  2412.  
  2413.          0x00         RUNNING
  2414.          0x01         GOING DOWN
  2415.          0x02         DOWN
  2416.  
  2417.  
  2418.                                 APPENDIX F
  2419.  
  2420.                            PRINTER STATUS CODES
  2421.  
  2422.          0            PSTAT_WAITING_FOR_JOB
  2423.          1            PSTAT_WAITING_FOR_FORM
  2424.          2            PSTAT_PRINTING_JOB
  2425.          3            PSTAT_PAUSED
  2426.          4            PSTAT_STOPPED
  2427.          5            PSTAT_MARK_EJECT
  2428.          6            PSTAT_READY_TO_GO_DOWN
  2429.          7            PSTAT_NOT_CONNECTED
  2430.          8            PSTAT_PRIVATE
  2431.  
  2432.  
  2433.  
  2434.                                 APPENDIX G
  2435.  
  2436.                              RECORD STRUCTURES
  2437. 3.11 QUEUE JOBS
  2438.  
  2439. The queue job parameters are marked as follows:
  2440.  
  2441.     Q: The value is assigned by the Queue Management Service and cannot be changed.
  2442.     C: The value is assigned by the client and is not used by the Queue Management Service.  It can be changed using protocol functions.
  2443.    CQ: The value is assigned by the client.  It is used and can be changed by the Queue Management Service.  It cannot be changed by protocol functions.
  2444.    QC: The value is assigned by the Queue Management Service and can be changed by the client (operator only).
  2445.  
  2446.    Type uint32 and type uint16 parameters are in high-low order.
  2447.  
  2448. Q:uint8   Client Station
  2449.           The connection number that submitted the job.
  2450.  
  2451. Q:uint8   Client Task
  2452.           The task number that submitted the job.
  2453.  
  2454. Q:uint32  Client ID Number
  2455.           User ID number that submitted the job.
  2456.  
  2457. C:uint32  Target Server ID Number
  2458.           Identifies which print server to send the job to.
  2459.           If any print server is acceptable, enter 1.
  2460.  
  2461. C:uint8[6]     Target Execution Time
  2462.           The time the job should be executed (Year, Month, Day, Hour, Minute, Second).  Enter all 0xFFs for as soon as possible.
  2463.  
  2464. Q:uint8[6]     Job Entry Time
  2465.           The time the job was entered in the queue (Year, Month, Day, Hour, Minute, Second).
  2466.  
  2467. Q:uint16  Job Number
  2468.           The job number of the print job.
  2469.  
  2470. QC:uint16 Job Type
  2471.           The form number of the print job.
  2472.  
  2473. CQ:uint8  Job Position
  2474.           The position of the job in the queue.
  2475.  
  2476. QC:uint8  Job Control Flags
  2477.           0x80:  Set if a job is on hold by the operator.
  2478.           0x40:  Set if a job is on hold by the user.
  2479.           0x20:  Set when NWCreateQueueFile2 is called.
  2480.                       Cleared when NWCloseFileAndStartQueueJob2 is called.
  2481.           0x10:  Set to restart a job.  Must be set if jobOutcome is NWPS_RETURN_TO_QUEUE.
  2482.           0x08:  Set to release a job if the user's connection is terminated during the NWCloseFileAndStartQueueJob2 call.
  2483.  
  2484. Q:uint8[14]      Job File Name
  2485.           Created when NWCreateQueueFile2 is called.
  2486.  
  2487. Q:uint8[6]       Job File Handle
  2488.           Created when NWCreateQueueFile2 is called.
  2489.  
  2490. Q:uint8   Server Station
  2491.           Station number of the print server; undefined unless a job is being serviced.
  2492.  
  2493. Q:uint8   Server Task
  2494.           Task number of the queue servicing the job.
  2495.  
  2496. Q:uint32  Server ID Number
  2497.           ID number of the print server.
  2498.  
  2499. C:uint8[50]      Job Description Text
  2500.           Usually the name of the file being printed.
  2501.  
  2502. C:uint8[152]     Client Record Area
  2503.           Special data for print jobs.
  2504.                           APPENDIX G (continued)
  2505.  
  2506. 4.00 QUEUE JOBS
  2507.  
  2508. Q:uint32  Client Station
  2509.           The connection number that submitted the job.
  2510.  
  2511. Q:uint32  Client Task
  2512.           The task number that submitted the job.
  2513.  
  2514. Q:uint32  Client ID Number
  2515.           User ID number that submitted the job.
  2516.  
  2517. C:uint32  Target Server ID Number
  2518.           Identifies which print server to send the job to.
  2519. If any print server is acceptable, enter 1.
  2520.  
  2521. C:uint8[6]       Target Execution Time
  2522.           The time the job should be executed (Year, Month, Day, Hour, Minute, Second).  Enter all 0xFFs for as soon as possible.
  2523.  
  2524. Q:uint8[6]       Job Entry Time
  2525.           The time the job was entered in the queue (Year, Month, Day, Hour, Minute, Second).
  2526.  
  2527. Q:uint32  Job Number
  2528.           The job number of the print job.
  2529.  
  2530. QC:uint16 Job Type
  2531.           The form number of the print job.
  2532.  
  2533. CQ:uint16 Job Position
  2534.           The position of the job in the queue.
  2535.  
  2536. QC:uint16 Job Control Flags
  2537.           0x80:  Set if a job is on hold by the operator.
  2538.           0x40:  Set if a job is on hold by the user.
  2539.           0x20:  Set when NWCreateQueueFile2 is called.
  2540.                       Cleared when NWCloseFileAndStartQueueJob2 is called.
  2541.           0x10:  Set to restart a job.  Must be set if jobOutcome is NWPS_RETURN_TO_QUEUE.
  2542.           0x08:  Set to release a job if the user's connection is terminated during the NWCloseFileAndStartQueueJob2 call.
  2543.  
  2544. Q:uint8[14]      Job File Name
  2545.           Created when NWCreateQueueFile2 is called.
  2546.  
  2547. Q:uint32  Job File Handle
  2548.           Created when NWCreateQueueFile2 is called.
  2549.  
  2550. Q:uint32  Server Station
  2551.           Station number of the print server; undefined unless a job is being serviced.
  2552.  
  2553. Q:uint32  Server Task
  2554.           Task number of the queue servicing the job.
  2555.  
  2556. Q:uint32  Server ID Number
  2557.           ID number of the print server.
  2558.  
  2559. C:uint8[50]      Job Description Text
  2560.           Usually the name of the file being printed.
  2561.  
  2562. C:uint8[152]     Client Record Area
  2563.           Special data for print jobs.
  2564.                           APPENDIX G (continued)
  2565.  
  2566.  
  2567. CLIENT RECORD AREA
  2568.  
  2569. This data applies to print jobs only.  The client sets these fields and can change them using protocol function calls.
  2570.  
  2571. uint8     Client Record Area Version Number
  2572.           Current version is 0.
  2573.  
  2574. uint8     Tab Size
  2575.           Number of spaces that tabs will be expanded to.  Minimum is 0, maximum is 18.
  2576.  
  2577. uint16    Number of Copies
  2578.           Number of copies to print.
  2579.  
  2580. uint16    Control Flags
  2581.           0x8000:    Set to print banner.
  2582.           0x4000:    Set if tabs, lines per page, and characters per line are to conform to the values entered in the corresponding fields.  Clear if this is to be an unfiltered byte stream.
  2583.           0x0800:    Set to suppress form feed.
  2584.           0x1000:    Notify user when job is done.
  2585.  
  2586. uint16    Maximum Lines per Page
  2587.           Default is 66.
  2588.  
  2589. uint16    Maximum Characters per Line
  2590.           Default is 132.
  2591.  
  2592. uint8[16] Form Name
  2593.           (Null Terminated)
  2594.  
  2595. uint8[6]  Reserved for future use
  2596.           Should be set to zero.
  2597.  
  2598. uint8[13] Banner Name Field
  2599.           Text to be printed in the first box on the banner; usually the user name, but can be changed.
  2600.  
  2601. uint8[13] Banner File Field
  2602.           Text to be printed in the second box on the banner; usually the file name, but can be changed.
  2603.  
  2604. uint8[14] Header File Name
  2605.           File name printed in header of banner.
  2606.  
  2607. uint8[80] Directory Path
  2608.           Directory that the file came from.
  2609.  
  2610.  
  2611.                                 APPENDIX H
  2612.  
  2613.  
  2614.  
  2615.           ACCESS LEVELS
  2616.  
  2617.           0     Limited Access Only
  2618.           1     User Access
  2619.           2     Operator Access
  2620.  
  2621.           JOB OUTCOMES
  2622.  
  2623.           0     NWPS_PLACE_ON_HOLD
  2624.           1     NWPS_RETURN_TO_QUEUE
  2625.           2     NWPS_THROW_AWAY
  2626.  
  2627.           PRINTER MODES
  2628.  
  2629.           0     NWPS_PRINTER_SHARED
  2630.           1     NWPS_PRINTER_PRIVATE
  2631.  
  2632.           PRINTER STATUS
  2633.  
  2634.           0     Printer Running
  2635.           1     Printer Offline
  2636.           2     Printer Out of Paper
  2637.  
  2638.  
  2639.  
  2640.                                 APPENDIX I
  2641.  
  2642.                    LIST OF PROTOCOL PACKETS (numerical)
  2643.  
  2644.  
  2645.     0x01 Login to Print Server
  2646.     0x02 Get Print Server Info
  2647.     0x03 Down Print Server
  2648.     0x04 Cancel Down Request
  2649.     0x05 Get Printer Status
  2650.     0x06 Stop Printer
  2651.     0x07 Start Printer
  2652.     0x08 Set Mounted Form
  2653. 0x09     Rewind Print Job
  2654.     0x0A Eject Form
  2655.     0x0B Mark Top of Form
  2656.     0x0C Change Service Mode
  2657.     0x0D Get Print Job Status
  2658.     0x0E Abort Job
  2659.     0x0F Get Queues Serviced
  2660.     0x10 Change Queue Priority
  2661.     0x11 Add Queue to Printer
  2662.     0x12 Delete Queue From Printer
  2663.     0x13 Get Printers Servicing Queue
  2664.     0x14 Get Notify Object
  2665.     0x15 Change Notify Interval
  2666.     0x16 Add Notify Object
  2667.     0x17 Delete Notify Object
  2668.     0x18 Attach Print Server to File Server
  2669.     0x19 Detach Print Server From File Server
  2670.     0x1A Get Attached Servers
  2671.     0x1D Add Form
  2672.     0x1E Dismount Form
  2673.     0x1F Get Extended Printer Status
  2674.     0x80 Get Remote Printer
  2675.     0x81 Request Remote
  2676.     0x82 Set Remote Mode
  2677.     0x84 Scan Network Printers
  2678.     0xA1 Unicode D.S. Login to Print Server
  2679.     0xAF Unicode D.S. Get Queues Serviced
  2680.     0xB0 Unicode D.S. Change Queue Priority
  2681.     0xB1 Unicode D.S. Add Queue to Printer
  2682.     0xB2 Unicode D.S. Delete Queue From Printer
  2683.     0xB3 Unicode D.S. Get Printers Servicing Queue
  2684.     0xB4 Unicode D.S. Get Notify Object
  2685.     0xB5 Unicode D.S. Change Notify Interval
  2686.     0xB6 Unicode D.S. Add Notify Object
  2687.     0xB7 Unicode D.S. Delete Notify Object
  2688.     0xB8 Unicode D.S. Attach Print Server to File Server
  2689.     0xD1 D.S. Login to Print Server
  2690.     0xDF D.S. Get Queues Serviced
  2691.     0xE0 D.S. Change Queue Priority
  2692.     0xE1 D.S. Add Queue to Printer
  2693.     0xE2 D.S. Delete Queue From Printer
  2694.     0xE3 D.S. Get Printers Servicing Queue
  2695.     0xE4 D.S. Get Notify Object
  2696.     0xE5 D.S. Change Notify Interval
  2697.     0xE6 D.S. Add Notify Object
  2698.     0xE7 D.S. Delete Notify Object
  2699.     0xE8 D.S. Attach Print Server to File Server
  2700.     0xFF Logout
  2701.  
  2702.                                 APPENDIX J
  2703.  
  2704.                   LIST OF PROTOCOL PACKETS (alphabetical)
  2705.  
  2706.  
  2707.     0x1D Add Form
  2708.     0x0E Abort Job
  2709.     0x16 Add Notify Object
  2710.     0x11 Add Queue to Printer 
  2711.     0x18 Attach Print Server to File Server 
  2712.     0x04 Cancel Down Request
  2713.     0x15 Change Notify Interval 
  2714.     0x10 Change Queue Priority
  2715.     0x0C Change Service Mode
  2716.     0x17 Delete Notify Object 
  2717.     0x12 Delete Queue From Printer
  2718.     0x19 Detach Print Server From File Server 
  2719.     0x1E Dismount Form
  2720.     0x03 Down Print Server
  2721.     0xE6 D.S. Add Notify Object
  2722.     0xE1 D.S. Add Queue to Printer
  2723.     0xE5 D.S. Change Notify Interval
  2724.     0xE0 D.S. Change Queue Priority
  2725.     0xE7 D.S. Delete Notify Object
  2726.     0xE2 D.S. Delete Queue From Printer
  2727.     0xE8 D.S. Attach Print Server to File Server
  2728.     0xE4 D.S. Get Notify Object
  2729.     0xE3 D.S. Get Printers Servicing Queue
  2730.     0xDF D.S. Get Queues Serviced
  2731.     0xD1 D.S. Login to Print Server
  2732.     0x0A Eject Form 
  2733.     0x1A Get Attached Servers 
  2734.     0x1F Get Extended Printer Status
  2735.     0x14 Get Notify Object
  2736.     0x0D Get Print Job Status 
  2737.     0x02 Get Print Server Info
  2738.     0x05 Get Printer Status 
  2739.     0x13 Get Printers Servicing Queue 
  2740.     0x0F Get Queues Serviced
  2741.     0x80 Get Remote 
  2742.     0x01 Login to Print Server
  2743.     0xFF Logout 
  2744.     0x0B Mark Top of Form 
  2745.     0x81 Request Remote 
  2746.     0x09 Rewind Print Job 
  2747.     0x84 Scan Network Printers
  2748.     0x08 Set Mounted Form 
  2749.     0x82 Set Remote Mode
  2750.     0x07 Start Printer
  2751.     0x06 Stop Printer 
  2752.     0xB6 Unicode D.S. Add Notify Object
  2753.     0xB1 Unicode D.S. Add Queue to Printer
  2754.     0xB5 Unicode D.S. Change Notify Interval
  2755.     0xB0 Unicode D.S. Change Queue Priority
  2756.     0xB7 Unicode D.S. Delete Notify Object
  2757.     0xB2 Unicode D.S. Delete Queue From Printer
  2758.     0xB8 Unicode D.S. Attach Print Server to File Server
  2759.     0xB4 Unicode D.S. Get Notify Object
  2760.     0xB3 Unicode D.S. Get Printers Servicing Queue
  2761.     0xAF Unicode D.S. Get Queues Serviced
  2762.     0xA1 Unicode D.S. Login to Print Server
  2763.  
  2764.                                 APPENDIX K
  2765.   Code Needed to Translate From the Old Bindery Configuration File Format
  2766.  
  2767.     API Calls for Format Conversion
  2768.     
  2769.     The following code segment is an excerpt from the NWPS_CFG.H file, and describes the calls needed to do format conversion.  The *fileConfig parameter in NWPSCfgFileConfigToApiConfig points to the PRINT.nnn file.
  2770.  
  2771.     /*
  2772.          Information stored in the bindery configuration file has a
  2773.               different format than NWPS_PConfig.  Those applications needing
  2774.               the old format can use these calls to do the conversion.
  2775.     */
  2776.     void NWPSApiConfigToFileConfig(
  2777.          char NWFAR          *name,
  2778.          NWPS_PConfig NWFAR  *apiConfig,
  2779.          BYTE NWFAR          *fileConfig);
  2780.  
  2781.     void NWPSFileConfigToApiConfig(
  2782.          BYTE NWFAR          *fileConfig,
  2783.          char NWFAR          *name,
  2784.          DWORD NWFAR         *length,
  2785.          NWPS_PConfig NWFAR  *apiConfig);
  2786.  
  2787.  
  2788. Printer Configuration Structures
  2789.  
  2790.     The following code segment shows all the possible values for the PRINT.nnn fields, as well as the printer configuration structures:
  2791.  
  2792.  
  2793. /* Printer Types */
  2794. #define NWPS_P_ELSEWHERE        (WORD)-1    /* Printer defined elsewhere */
  2795. #define NWPS_P_OTHER            0           /* Other or Unknown Printer*/
  2796. #define NWPS_P_PAR              1           /* Parallel Printer*/
  2797. #define NWPS_P_SER              2           /* Serial Printer*/
  2798. #define NWPS_P_XRP              3           /* eXtended Remote Printer */
  2799. #define NWPS_P_APPLE            4           /* AppleShare Printer*/
  2800. #define NWPS_P_UNIX             5           /* Unix Printer*/
  2801. #define NWPS_P_AIO              6           /* AIO Printer*/
  2802.  
  2803. /* SubType (port numbers) */
  2804. #define NWPS_PORT_1             0
  2805. #define NWPS_PORT_2             1
  2806. #define NWPS_PORT_3             2
  2807. #define NWPS_PORT_4             3
  2808. #define NWPS_PORT_5             4
  2809. #define NWPS_PORT_6             5
  2810. #define NWPS_PORT_7             6
  2811. #define NWPS_PORT_8             7
  2812. #define NWPS_PORT_9             8
  2813. #define NWPS_PORT_10            9
  2814.  
  2815. /* Possible Print Server status codes */
  2816. #define NWPS_RUNNING            0     /* Running              */
  2817. #define NWPS_GOING_DOWN            1     /* Ready to quit when jobs finish  */
  2818. #define NWPS_DOWN               2     /* Ready to quit           */
  2819. #define NWPS_INITIALIZING       3     /* Initialization in progress    */
  2820.  
  2821. /* Possible Printer status codes */
  2822. #define NWPS_PSTAT_JOB_WAIT        0
  2823. #define NWPS_PSTAT_FORM_WAIT    1
  2824. #define NWPS_PSTAT_PRINTING        2
  2825. #define NWPS_PSTAT_PAUSED       3
  2826. #define NWPS_PSTAT_STOPPED         4
  2827. #define NWPS_PSTAT_MARK_EJECT      5
  2828. #define NWPS_PSTAT_READY_TO_DOWN   6
  2829. #define NWPS_PSTAT_NOT_CONNECTED   7
  2830. #define NWPS_PSTAT_PRIVATE         8
  2831.  
  2832. /* Queue service modes */
  2833. #define NWPS_QUEUE_ONLY            0
  2834. #define NWPS_QUEUE_BEFORE_FORM     1
  2835. #define NWPS_FORM_ONLY          2
  2836. #define NWPS_FORM_BEFORE_QUEUE     3
  2837.  
  2838. /* Values for Serial Port control as stored in configuration files */
  2839. /* Serial Port Baud Rates */
  2840. #define NWPS_BAUD_RATE_0300        0
  2841. #define NWPS_BAUD_RATE_0600        1
  2842. #define NWPS_BAUD_RATE_1200        2
  2843. #define NWPS_BAUD_RATE_2400        3
  2844. #define NWPS_BAUD_RATE_4800        4
  2845. #define NWPS_BAUD_RATE_9600        5
  2846. #define NWPS_BAUD_RATE_19200    6
  2847.  
  2848. /* Serial Port Data Bits */
  2849. #define NWPS_DATA_BITS_5        5
  2850. #define NWPS_DATA_BITS_6        6
  2851. #define NWPS_DATA_BITS_7        7
  2852. #define NWPS_DATA_BITS_8        8
  2853.  
  2854. /* Serial Port Stop Bits */
  2855. #define NWPS_STOP_BITS_1        0
  2856. #define NWPS_STOP_BITS_1_5         1
  2857. #define NWPS_STOP_BITS_2        2
  2858.  
  2859. /* Serial Port Parity Type */
  2860. #define NWPS_PARITY_NONE        0
  2861. #define NWPS_PARITY_EVEN        1
  2862. #define NWPS_PARITY_ODD            2
  2863.  
  2864. /* Values for Serial Port control as stored in configuration files */
  2865. #define NWPS_AIO_WILDCARD       (-1)  /* Default hardware, board, or port */
  2866.  
  2867. /* AIO Port Hardware Types */
  2868. /* reserved 0 */
  2869. #define NWPS_AIO_COMX_TYPE         1
  2870. #define NWPS_AIO_ARTIC_TYPE        2
  2871. #define NWPS_AIO_WNIM_TYPE         3
  2872. /* reserved 4 - 99 */
  2873. /* unused 100 */
  2874. #define NWPS_AIO_AVMB1_TYPE        101
  2875. #define NWPS_AIO_ANIC_TYPE         102
  2876. #define NWPS_AIO_WNIC_TYPE         103
  2877. #define NWPS_AIO_HAYES_TYPE        104
  2878. #define NWPS_AIO_DIGIXI_TYPE    105
  2879. #define NWPS_AIO_DIGICX_TYPE    106
  2880. #define NWPS_AIO_DIGIXM_TYPE    107
  2881. #define NWPS_AIO_DIGIEP_TYPE    108
  2882. #define NWPS_AIO_NPCC_TYPE         109
  2883. /* unused 110- */
  2884.  
  2885. /* AIO Port Baud Rates */
  2886. #define NWPS_AIO_BAUD_50        0
  2887. #define NWPS_AIO_BAUD_75        1
  2888. #define NWPS_AIO_BAUD_110       2
  2889. #define NWPS_AIO_BAUD_134p5        3
  2890. #define NWPS_AIO_BAUD_150       4
  2891. #define NWPS_AIO_BAUD_300       5
  2892. #define NWPS_AIO_BAUD_600       6
  2893. #define NWPS_AIO_BAUD_1200         7
  2894. #define NWPS_AIO_BAUD_1800         8
  2895. #define NWPS_AIO_BAUD_2000         9
  2896. #define NWPS_AIO_BAUD_2400         10
  2897. #define NWPS_AIO_BAUD_3600         11
  2898. #define NWPS_AIO_BAUD_4800         12
  2899. #define NWPS_AIO_BAUD_7200         13
  2900. #define NWPS_AIO_BAUD_9600         14
  2901. #define NWPS_AIO_BAUD_19200        15
  2902. #define NWPS_AIO_BAUD_38400        16
  2903. #define NWPS_AIO_BAUD_57600        17
  2904. #define NWPS_AIO_BAUD_115200    18
  2905.  
  2906. /* AIO Port Data Bits */
  2907. #define NWPS_AIO_DATA_BITS_5    0
  2908. #define NWPS_AIO_DATA_BITS_6    1
  2909. #define NWPS_AIO_DATA_BITS_7    2
  2910. #define NWPS_AIO_DATA_BITS_8    3
  2911.  
  2912. /* AIO Port Stop Bits */
  2913. #define NWPS_AIO_STOP_BITS_1    0
  2914. #define NWPS_AIO_STOP_BITS_1p5     1
  2915. #define NWPS_AIO_STOP_BITS_2    2
  2916.  
  2917. /* AIO Port Parity Type */
  2918. #define NWPS_AIO_PARITY_NONE    0
  2919. #define NWPS_AIO_PARITY_ODD        1
  2920. #define NWPS_AIO_PARITY_EVEN    2
  2921. #define NWPS_AIO_PARITY_MARK    3
  2922. #define NWPS_AIO_PARITY_SPACE      4
  2923.  
  2924. /* Possible types of print servers */
  2925. #define NWPS_TYPE_UNKNOWN       0     /* Pre 1.1 pserver type */
  2926. #define NWPS_TYPE_EXE           1     /* Dedicate pserver for DOS   */
  2927. #define NWPS_TYPE_NLM           2     /* NetWare Loadable Module */
  2928. #define NWPS_TYPE_SERVER_VAP    3     /* VAP, in server*/
  2929. #define NWPS_TYPE_BRIDGE_VAP    4     /* VAP, in Bridge */
  2930. #define NWPS_TYPE_UNIX          5     /* NetWare For Unix PServer */
  2931.  
  2932. /*
  2933.          Printer configuration structures
  2934. */
  2935. /* Serial Printer Config Info */
  2936. typedef struct {
  2937.          WORD portNumber;          /* COMn port number        */
  2938.          WORD localFlag;           /* TRUE - local Printer    */
  2939.                                 /* FALSE - remote       */
  2940.          WORD useInterrupts;       /* TRUE - use irq driver   */
  2941.          WORD irqNumber;           /* IRQ number for printer  */
  2942.          WORD useXonXoff;          /* Use X-On/X-Off?   (Serial) */
  2943.          WORD baudRate;            /* Baud rate      (Serial) */
  2944.          WORD dataBits;            /* Data bits      (Serial) */
  2945.          WORD stopBits;            /* Stop bits      (Serial) */
  2946.          WORD parity;              /* Parity type (Serial) */
  2947. } NWPS_Serial;
  2948.  
  2949. /* Parallel Printer Config Info */
  2950. typedef struct {
  2951.          WORD portNumber;          /* LPTn port number        */
  2952.          WORD localFlag;           /* TRUE - local Printer    */
  2953.                                 /* FALSE - remote       */
  2954.          WORD useInterrupts;       /* TRUE - use irq driver   */
  2955.          WORD irqNumber;           /* IRQ number for printer  */
  2956. } NWPS_Parallel;
  2957.  
  2958. /* AIO Printer Config Info */
  2959. typedef struct {
  2960.          WORD reserved1;           /* Reserved for future use */
  2961.          WORD localFlag;           /* TRUE - local Printer    */
  2962.                                 /* FALSE - remote       */
  2963.          WORD hardwareType;        /*  */
  2964.          BYTE boardNumber;         /*  */
  2965.          BYTE portNumber;          /*  */
  2966.          BYTE useXonXoff;          /* Use X-On/X-Off?         */
  2967.          BYTE aioMgr;              /*  */
  2968.          WORD baudRate;            /* Baud rate            */
  2969.          WORD dataBits;            /* Data bits            */
  2970.          WORD stopBits;            /* Stop bits            */
  2971.          WORD parity;              /* Parity type       */
  2972. } NWPS_Aio;
  2973.  
  2974. /* AppleTalk Printer Configuration info */
  2975. typedef struct {
  2976.          char netPrinterName[NWPS_APPLE_NAME_SIZE + 2];
  2977.                                 /* AppleTalk Network Printer Name*/
  2978.          char netPrinterType[NWPS_APPLE_TYPE_SIZE + 2];
  2979.                                 /* AppleTalk Network Printer Type */
  2980.          char netPrinterZone[NWPS_APPLE_ZONE_SIZE + 2];
  2981. /* AppleTalk Network Printer Zone */
  2982.          WORD hideFlag;            /* TRUE - hide printer */
  2983.          WORD errorFlag;           /* TRUE - print error banner */
  2984. } NWPS_AppleTalk;
  2985.  
  2986. /* Unix Printer Configuration info */
  2987. typedef struct {
  2988.          char hostName[NWPS_UNIX_HOST_SIZE + 1];     /* Name of the unix host    */
  2989.          char hostPrinter[NWPS_UNIX_PRNT_SIZE + 1];  /* Unix printer name */
  2990. } NWPS_Unix;
  2991. /* Other Printer Configuration info */
  2992. typedef struct {
  2993.          DWORD   length;                 /* The length of Other data   */
  2994.          BYTE data[NWPS_OTHER_SIZE];     /* Buffer for the Other data  */
  2995. } NWPS_Other;
  2996.  
  2997. typedef  struct {
  2998.          WORD printerType;            /* Type of printer            */
  2999.          WORD currentForm;            /* Currently mounted form        */
  3000.          WORD bufferSize;             /* Buffer size in K           */
  3001.          WORD serviceMode;            /* Queue service mode            */
  3002.          WORD pollTime;               /* Queue poll time            */
  3003.          WORD bannerType;             /* FALSE - text banner page      */
  3004.                                    /* TRUE - postscript banner page */
  3005.          union {
  3006.            NWPS_Serial    ser;
  3007.            NWPS_Parallel  par;
  3008.            NWPS_Aio    aio;
  3009.            NWPS_AppleTalk apl;
  3010.            NWPS_Unix      unx;
  3011.            NWPS_Other     oth;
  3012.          } type;
  3013. } NWPS_PConfig;
  3014.  
  3015.  
  3016.                                 APPENDIX L
  3017.  
  3018.                               OTHER DOCUMENTS
  3019.  
  3020. Below is a list of other sources which may be helpful when used in conjunction with this one to better understand NetWare 4.0 Print Services.
  3021.  
  3022. "IPX Router Specification" Novell Inc.,   Part # 107-000029-001 
  3023.  
  3024. "Sequenced Packet Protocol - Connection Parameter Negotiation" Xerox Systems Institute, XNSS 339011.
  3025.  
  3026. "NetWare SPX II Services - Purpose and Design"  Novell, Inc.
  3027.  
  3028. "NetWare Core Protocols"  Novell, Inc.
  3029.  
  3030. "NetWare Core Protocols for NetWare 4.x"  Novell, Inc.
  3031.  
  3032. "Encrypted Login for NetWare Service Requesters"  Novell, Inc.
  3033.  
  3034. "NetWare Core Protocol Authentication"  Novell, Inc.
  3035.  
  3036. "MD4 Message-Digest Algorithm"
  3037.