home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / QPROC.ZIP / QPRAW.C < prev    next >
C/C++ Source or Header  |  1990-10-18  |  3KB  |  93 lines

  1. /*****************************************************************/ 
  2. /**             Microsoft LAN Manager            **/ 
  3. /**           Copyright(c) Microsoft Corp., 1985-1990        **/ 
  4. /*****************************************************************/ 
  5. /****************************** Module Header ******************************\
  6.  
  7. Module Name: QPRAW.C
  8.  
  9. This module contains the code for printing a PM_Q_RAW format spooler file
  10.  
  11. History:
  12.  07-Sep-88 [stevewo]  Created.
  13.  
  14. \***************************************************************************/
  15.  
  16. #define INCL_DEV
  17.  
  18. #include "pmprint.h"
  19.  
  20. #define BUFLEN 2048
  21.  
  22. BOOL PASCAL SplQpRawPrintFile( pQProc, pszFileName )
  23. register PQPROCINST pQProc;
  24. PSZ pszFileName;
  25. {
  26.     BOOL result = FALSE;
  27.     ULONG  cbTotal;
  28.     USHORT cb, cbRead;
  29.  
  30.     SplOutSem();
  31.     pQProc->selBuf = NULL;
  32.     if (OpenQPInputFile( pQProc, pszFileName, TRUE ) &&
  33.         OpenQPOutputDC(pQProc, NOASSOC)) {
  34.  
  35.         if ((cbTotal = pQProc->cbFile) > BUFLEN)
  36.             cb = BUFLEN;
  37.         else
  38.             cb = (USHORT)cbTotal;
  39.  
  40.         if (!DosAllocSeg( cb, &pQProc->selBuf, 0 )) {
  41.             result = TRUE;
  42.             while (cbTotal && !(pQProc->fsStatus & QP_ABORTED)) {
  43.                 if (cbTotal > BUFLEN)
  44.                     cb = BUFLEN;
  45.                 else
  46.                     cb = (USHORT)cbTotal;
  47.  
  48.                 cbRead = 0;
  49.                 if (DosRead( pQProc->hFile, MAKEP( pQProc->selBuf, 0 ),
  50.                              cb, (PUSHORT)&cbRead ) || cb != cbRead) {
  51.                     pQProc->fsStatus |= QP_ABORTED;
  52.                     pQProc->fsStatus &= ~ QP_PAUSED;
  53.                     }
  54.                 else
  55.                 if (DevEscape( pQProc->hdc, DEVESC_RAWDATA, (LONG)cbRead,
  56.                                MAKEP( pQProc->selBuf, 0 ),
  57.                                (PLONG)NULL, (PBYTE)NULL ) == DEVESC_ERROR) {
  58.                     pQProc->fsStatus |= QP_ABORTED;
  59.                     pQProc->fsStatus &= ~ QP_PAUSED;
  60.                     }
  61.                 else
  62.                     cbTotal -= cbRead;
  63.  
  64.                 if (pQProc->fsStatus & QP_PAUSED)
  65.                     DosSemWait(&pQProc->semPaused,-1l);
  66.                 }
  67.  
  68.             if (pQProc->fsStatus & QP_ABORTED) {
  69.                 DevEscape( pQProc->hdc, DEVESC_ABORTDOC,
  70.                            (LONG)0L, (PBYTE)NULL,
  71.                            (PLONG)NULL, (PBYTE)NULL );
  72.                 result = TRUE;
  73.                 }
  74.             else
  75.             if (!cbTotal)
  76.                 result = TRUE;
  77.             }
  78.         }
  79.  
  80.     if (pQProc->selBuf) {
  81.         DosFreeSeg( pQProc->selBuf );
  82.         pQProc->selBuf = 0;
  83.         }
  84.  
  85.     CloseQPOutputDC( pQProc, result );
  86.     CloseQPInputFile( pQProc );
  87.  
  88.     if (!result)
  89.         SplPanic( "SplQpRawPrintFile failed for %0s", pszFileName, 0 );
  90.  
  91.     return( result );
  92. }
  93.