home *** CD-ROM | disk | FTP | other *** search
/ 3D GFX / 3D GFX.iso / pcutils / os2 / show3d / source / queue.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-31  |  2.6 KB  |  131 lines

  1. #define INCL_WIN
  2. #define INCL_GPI
  3. #define INCL_DOSMISC
  4. #define INCL_DOSPROCESS
  5. #define INCL_DEV
  6. #define INCL_SPL
  7. #define INCL_SPLDOSPRINT
  8. #define INCL_BASE
  9. #define INCL_GPIERRORS
  10.  
  11.  
  12. #include <os2.h>
  13.  
  14. #include "queue.h"
  15.  
  16. Format::Format (char *format, ...)
  17. {   va_list v;
  18.     Buffer=new char[1024];
  19.     va_start(v,format);
  20.     vsprintf(Buffer,format,v);
  21.     va_end(v);
  22. }
  23.  
  24. void Format::set (char *format, ...)
  25. {   va_list v;
  26.     Buffer=new char[32];
  27.     va_start(v,format);
  28.     vsprintf(Buffer,format,v);
  29.     va_end(v);
  30. }
  31.  
  32. Format::Format (long size, char *format, ...)
  33. {   va_list v;
  34.     Buffer=new char[size];
  35.     va_start(v,format);
  36.     vsprintf(Buffer,format,v);
  37.     va_end(v);
  38. }
  39.  
  40. Format::~Format ()
  41. {    delete Buffer;
  42. }
  43.  
  44. Queue::Queue (char *name, char *myname, long buffersize)
  45. {   ULONG n;
  46.     Queues=0;
  47.     Myname=myname;
  48.     Buffer=new char[buffersize];
  49.     Buffersize=buffersize;
  50.     search();
  51.     Queue=Queues;
  52.     for (n=0; n<NQueues; n++)
  53.         if (!strcmp(name,Queues[n].pszName))
  54.         {    Queue=Queues;
  55.             break;
  56.         }
  57.     Open=0;
  58.     open(); start();
  59. }
  60.  
  61. Queue::~Queue ()
  62. {    stop(); close();
  63.     if (Queues) delete Queues;
  64. }
  65.  
  66. int Queue::open ()
  67. {   if (!Queue) return 0;
  68.     Data.pszLogAddress        =Queue->pszName;
  69.     Data.pszDriverName        =Queue->pszDriverName;
  70.     *strchr(Data.pszDriverName,'.')=0;
  71.     Data.pdriv              = Queue->pDriverData;
  72.     Data.pszDataType        = "PM_Q_RAW";
  73.     Data.pszComment         = Myname;
  74.     Data.pszQueueProcName   = Queue->pszPrProc;
  75.     Data.pszQueueProcParams = NULL;
  76.     Data.pszSpoolerParams   = NULL;
  77.     Data.pszNetworkParams   = NULL;
  78.     Handle=SplQmOpen("*",9L,(PQMOPENDATA)&Data);
  79.     if (Handle) Open=1;
  80.     return (Handle!=0);
  81. }
  82.  
  83. void Queue::close ()
  84. {    if (Open) SplQmClose(Handle);
  85.     Open=0;
  86. }
  87.  
  88. void Queue::search ()
  89. /* Search all queues and devices */
  90. {   ULONG ret,n;
  91.     if (!Queues) delete Queues;
  92.     Queues=0;
  93.     SplEnumQueue(NULL,3,Queues,0,
  94.         &ret,&NQueues,&n,NULL);
  95.     if (NQueues==0) return;
  96.     Queues=(PPRQINFO3)(new char[n]);
  97.     SplEnumQueue(NULL,3,Queues,n,
  98.         &ret,&NQueues,&n,NULL);
  99. }
  100.  
  101. void Queue::start ()
  102. {    if (Open) SplQmStartDoc(Handle,Myname);
  103. }
  104.  
  105. void Queue::stop ()
  106. {    if (Open) SplQmEndDoc(Handle);
  107. }
  108.  
  109. void Queue::write (char *s, long l)
  110. {    SplQmWrite(Handle,(l>0)?l:(strlen(s)+1),s);
  111. }
  112.  
  113. Queue & operator << (Queue &q, char *s)
  114. {    char *p=q.buffer(),*end=q.buffer()+q.buffersize();
  115.     while (*s)
  116.     {    switch(*s)
  117.         {    case '\n' : *p++=13; *p++=10; break;
  118.             default : *p++=*s;
  119.         }
  120.         s++;
  121.         if (p>=end-1) break;
  122.     }
  123.     *p=0;
  124.     if (q) SplQmWrite(q.handle(),p-q.buffer(),q.buffer());
  125.     return q;
  126. }
  127.  
  128. inline Queue & operator << (Queue &q, long n)
  129. {    return q << (char *)Format(32,"%0ld",n);
  130. }
  131.  
  132.