home *** CD-ROM | disk | FTP | other *** search
/ Network Support Encyclopedia 96-1 / novell-nsepro-1996-1-cd2.iso / download / netware / submit.exe / SUBMTJOB.C < prev    next >
Text File  |  1995-07-07  |  12KB  |  352 lines

  1. /****************************************************************************
  2. **      DISCLAIMER  
  3. **  
  4. **   Novell, Inc. makes no representations or warranties with respect to
  5. **   any NetWare software, and specifically disclaims any express or
  6. **   implied warranties of merchantability, title, or fitness for a
  7. **   particular purpose.
  8. **   
  9. **   Distribution of any NetWare software is forbidden without the
  10. **   express written consent of Novell, Inc.  Further, Novell reserves
  11. **   the right to discontinue distribution of any NetWare software.
  12. **   
  13. **   Novell is not responsible for lost profits or revenue, loss of use
  14. **   of the software, loss of data, costs of re-creating lost data, the
  15. **   cost of any substitute equipment or program, or claims by any party
  16. **   other than you.  Novell strongly recommends a backup be made before
  17. **   any software is installed.   Technical support for this software
  18. **   may be provided at the discretion of Novell.
  19. ****************************************************************************
  20. **   File:   SUBMTJOB.C
  21. **   
  22. **   Desc:   Sample Code for NWCloseFileAndStartQueueJob2.
  23. **   
  24. **       This code will open a filehandle for a print job on the server and
  25. **       queue specified on the command line.  It will then write a line of
  26. **       data "this is a test" to the file and close it so it will then be
  27. **       printed out to the printer serviced by that queue.
  28. **
  29. **   NOTE: This code also allows you to change the form number of a job if
  30. **         you need to.  The name that is used for the form is for the users
  31. **         information only.  The name and the form number are not tied to
  32. **         each other in any way.
  33. **
  34. **
  35. **
  36. **   Parameter descriptions:    > input
  37. **                              < output
  38. **
  39. **   Programmers:
  40. **
  41. **   Ini   Who      Company                  Firm
  42. **   -----------------------------------------------------------------------
  43. **   ARM   A. Ray Maxwell   Novell Developer Support.
  44. **
  45. **   History:
  46. **
  47. **   When      Who   What
  48. **   -----------------------------------------------------------------------
  49. **   10/12/94   ARM   First code.
  50. **   07/07/95   ARM   Added code to allow the user to change the form that 
  51. **                    is used on the printer.
  52. */
  53.  
  54.  
  55. /****************************************************************************
  56. **   Include headers, macros, etc.
  57. */   
  58.    /*------------------------------------------------------------------------
  59.    **   Borland C.
  60.    */
  61.    #include <stdlib.h>  /* exit()    */
  62.    #include <stdio.h>   /* printf()  */
  63.    #include <string.h>  /* strupr()  */
  64.    #include <io.h>      /* write()   */
  65.    #include <conio.h>   /* clrscr()  */
  66.   
  67.    /*------------------------------------------------------------------------
  68.    **   NetWare Library
  69.    */
  70.    #include <nwcalls.h>
  71.  
  72.    /*------------------------------------------------------------------------
  73.    **   defines
  74.    */
  75.    #define   NWDOS
  76.    #define   KEEP_ON        0x0400
  77.    #define   NO_FORM_FEED   0x0800
  78.    #define   NOTIFICATION   0x1000
  79.    #define   DELETE_FILE    0x2000
  80.    #define   EXPAND_TABS    0x4000
  81.    #define   PRINT_BANNER   0x8000
  82.  
  83.  
  84. /****************************************************************************
  85. ** Global variables.
  86. */
  87. /*========================================================
  88.   This structure is overlayed on the QMS
  89.   WQueueJobStruct.clientRecordArea to define a print job.
  90.   I is not used in any of the print services APIs.
  91.   (Formerly called NWPS_PJob.)
  92. NOTE: This structure is in NWPS_JOB.h in the volume one or v10e SDK
  93.   ========================================================*/
  94.  
  95.  
  96. typedef struct {
  97.   BYTE                  versionNumber;
  98.   BYTE                  tabSize;
  99.   WORD                  numberOfCopies;
  100.   WORD                  printControlFlags;
  101.   WORD                  maxLinesPerPage;
  102.   WORD                  maxCharsPerLine;
  103.   BYTE                  formName[13];
  104.   BYTE                  reserve[9];
  105.   BYTE                  bannerNameField[13];
  106.   BYTE                  bannerFileField[13];
  107.   BYTE                  headerFileName[14];
  108.   BYTE                  directoryPath[80];
  109. } NWPS_ClientRecord;
  110.  
  111.  
  112. /****************************************************************************
  113. ** Main program start.
  114. */
  115. void main(int argc, char *argv[]){
  116.  
  117.   NWCCODE ccode;
  118.   NWCONN_HANDLE connHandle;
  119.   NWOBJ_ID printQID;
  120.   NWQueueJobStruct jobInfo;
  121.   NWFILE_HANDLE jobFile;
  122.   NWPS_ClientRecord *psInfo;        /* this is the struct pointer for the
  123.                                         clientRecordArea in jobInfo        */
  124.   WORD formNumber;                  /* used to change the form number      */
  125.   char server[48];
  126.   char queueName[48];
  127.  
  128.   int   rVal;
  129.   int   x, cnt;
  130.  
  131.   if (argc < 3)
  132.   {
  133.      clrscr();
  134.      printf("USAGE: SUBMTJOB <serverName> <queueName> <form number>\n");
  135.      printf("       serverName: The name of the file server the queue is on\n");
  136.      printf("       queueName : The name of the queue to send the job to\n");
  137.      printf("       formNumber: option for changing forms\n");
  138.  
  139.      goto EXIT;
  140.   }
  141.   ccode = NWCallsInit(NULL, NULL);
  142.  
  143.   if(ccode)
  144.      exit(1);
  145.  
  146.   strcpy(server,strupr(argv[1]));
  147.   strcpy(queueName,strupr(argv[2]));
  148.   if(argc==4)
  149.      formNumber=(WORD)strtoul(argv[3],(char**)NULL,10);
  150.   /*------------------------------------------------------------------------
  151.   ** Get the connection handle to the file server.  Must already
  152.   ** be attached to this file server
  153.   */
  154.  
  155.   ccode = NWGetConnectionHandle(
  156.           /* > servername        */ server,
  157.           /*   Novell Reserved1  */ 0,
  158.           /* < connection Handle */ &connHandle,
  159.           /*   Novell Reserved2  */ NULL);
  160.  
  161.   switch(ccode)
  162.   {
  163.      case SUCCESSFUL:
  164.         break;
  165.         
  166.      case INVALID_CONNECTION:
  167.         printf("ERROR:  Invalid connection.\n");
  168.         goto EXIT;
  169.         
  170.      case 0x880F:
  171.         printf("ERROR:  You are not connected to fileserver [%s]!\n", server);
  172.         goto EXIT;
  173.      
  174.      default:
  175.         printf("ERROR:  Unknown error NWGetConnectionHandle:0x%04X\n", ccode);
  176.         goto EXIT;
  177.   }
  178.   
  179.   /*------------------------------------------------------------------------
  180.   ** Get the object ID for the desired print queue to print to.
  181.   */
  182.   ccode=NWGetObjectID(
  183.         /*   >   connection   */   connHandle,
  184.         /*   >   objectName   */   queueName,
  185.         /*   >   objectType   */   OT_PRINT_QUEUE,
  186.         /*   <   objectID     */   &printQID);
  187.  
  188.   switch(ccode)
  189.   {
  190.      case SUCCESSFUL:
  191.         break;
  192.         
  193.      case INVALID_CONNECTION:
  194.         printf("ERROR:  Invalid connection.\n");
  195.         goto EXIT;
  196.      
  197.      default:
  198.         printf("ERROR:  Unknown error NWGetObjectID: %d\n", ccode);
  199.         goto EXIT;
  200.   }
  201.   
  202.   /*------------------------------------------------------------------------
  203.   **   Fill out jobInfo structure.
  204.   */
  205.   memset(&jobInfo, 0x00, sizeof(jobInfo));   /* zero out structure */
  206.    
  207.   /*------------------------------------------------------------------------
  208.   **   Wildcard: any print server may service this job.
  209.   */
  210.   
  211.   jobInfo.targetServerID = 0xFFFFFFFFL;
  212.   
  213.   memset(jobInfo.targetExecutionTime, 0xFF, 6);  /* 0xFFFFFFFFFFFF: ASAP */
  214.   jobInfo.jobControlFlags |= 0x10;
  215.    
  216.   /*-----------------------------------------------------------------------
  217.   ** Setting the jobType will change the form number that you can see in 
  218.   ** pconsole.
  219.   */
  220.   jobInfo.jobType=NWWordSwap(formNumber);
  221.   
  222.   /*------------------------------------------------------------------------
  223.   **   Fill out NetWare Print Server specific information in the clientRecord
  224.   ** Area of the jobInfo structure.
  225.   */
  226.   psInfo = (NWPS_ClientRecord *)(jobInfo.clientRecordArea);
  227.   psInfo->versionNumber      =   0;
  228.   psInfo->tabSize            =   8;
  229.   psInfo->numberOfCopies     =   NWWordSwap(1);
  230.   psInfo->printControlFlags  =   NO_FORM_FEED;
  231.   psInfo->maxLinesPerPage    =   NWWordSwap(66);
  232.   psInfo->maxCharsPerLine    =   NWWordSwap(132);
  233.   strcpy(psInfo->formName,"test");
  234.   /* psInfo->reserved[9]; */
  235.   strcpy(psInfo->bannerNameField,"BannerName");
  236.   strcpy(psInfo->bannerFileField,"BannerFile");
  237.   strcpy(psInfo->headerFileName, "HeaderName");   
  238.   psInfo->directoryPath[0]   =   '\0';
  239.   
  240.   /*------------------------------------------------------------------------
  241.   ** Create a queue file using the known ID and connection handle
  242.   */
  243.   ccode=NWCreateQueueFile2(
  244.      /* >  connection      */ connHandle,
  245.      /* >  queueID         */ printQID,
  246.      /* <> jobStructure    */ &jobInfo,
  247.      /* <  fileHandle      */ &jobFile
  248.      );
  249.   switch(ccode)
  250.   {
  251.      case SUCCESSFUL:
  252.         break;
  253.      
  254.      case INVALID_CONNECTION:
  255.         printf("ERROR:  Invalid connection.\n");
  256.         goto EXIT;
  257.      
  258.      case 0x89D3:
  259.         printf("ERROR:  NO rights to print queue: %s.\n", queueName);
  260.         goto EXIT;
  261.      
  262.      default:
  263.         printf("ERROR:  Unknown error NWCreateQueueFile2: 0x%04X\n", ccode);
  264.         goto EXIT;
  265.   }
  266.   
  267.   
  268.   /*------------------------------------------------------------------------
  269.   ** Print job
  270.   */
  271.   write(jobFile,"this is a test",14);
  272.   
  273.   
  274.   /*------------------------------------------------------------------------
  275.   ** Close print job now that data has been sent.
  276.   */
  277.   ccode=NWCloseFileAndStartQueueJob2(
  278.         /* >  connection  */   connHandle,
  279.         /* >  queueID     */   printQID,
  280.         /* >  jobNumber   */   jobInfo.jobNumber,
  281.         /* >   fileHandle  */   jobFile);
  282.   
  283.   switch(ccode)
  284.   {
  285.      case SUCCESSFUL:
  286.         break;
  287.      
  288.      case DIRECTORY_FULL:
  289.         printf("ERROR:  Queue directory full.\n");
  290.         break;
  291.      
  292.      case ERR_Q_IO_FAILURE:
  293.         printf("ERROR:  Queue I/O failure.\n");
  294.         break;
  295.      
  296.      case ERR_NO_QUEUE:
  297.         printf("ERROR:  No such queue.\n");
  298.         break;
  299.      
  300.      case ERR_NO_Q_SERVER:
  301.         printf("ERROR:  No queue server.\n");
  302.         break;
  303.      
  304.      case ERR_NO_Q_RIGHTS:
  305.         printf("ERROR: NO rights to print in queue.\n");
  306.         break;
  307.      
  308.      case 0x89D4: /* ERR_QUEUE_FULL */
  309.         printf("ERROR: Print queue full.\n");
  310.         break;
  311.      
  312.      case ERR_NO_Q_JOB:
  313.         printf("ERROR: Invalid job number specified.\n");
  314.         break;
  315.      
  316.      case ERR_NO_Q_JOB_RIGHTS:
  317.         printf("ERROR: NO rights to place a job into this queue\n.");
  318.         break;
  319.      
  320.      case ERR_Q_IN_SERVICE:
  321.         printf("ERROR: Queue being serviced now and not accepting jobs\n.");
  322.         break;
  323.      
  324.      case ERR_Q_NOT_ACTIVE:
  325.         printf("ERROR: Queue currently not active and not accepting jobs\n.");
  326.         break;
  327.      
  328.      case ERR_Q_STN_NOT_SERVER:
  329.         printf("ERROR:  The Queue Station is not a Server\n.");
  330.         break;
  331.      
  332.      case ERR_Q_HALTED:
  333.         printf("ERROR:  Queue is currently halted and not accepting jobs\n.");
  334.         break;
  335.      
  336.      case ERR_Q_MAX_SERVERS:
  337.         printf("ERROR:  Too many servers\n.");
  338.         break;
  339.      
  340.      case   0x89FF:
  341.         printf("ERROR:   General failure NWCloseFileAndStartQueueJob2\n.");
  342.         break;                                                                  
  343.      
  344.      default:
  345.         printf("Unknown error NWCloseFileAndStartQueueJob2: %d\n", ccode);
  346.         break;
  347.   }
  348.   
  349.   EXIT:
  350.   
  351. }
  352.