mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
5.7 KiB
211 lines
5.7 KiB
/***************************************************************************
|
|
*
|
|
* File Name: mon_pjl.cpp
|
|
*
|
|
* Copyright (C) 1993-1996 Hewlett-Packard Company.
|
|
* All rights reserved.
|
|
*
|
|
* 11311 Chinden Blvd.
|
|
* Boise, Idaho 83714
|
|
*
|
|
* This is a part of the HP JetAdmin Printer Utility
|
|
*
|
|
* This source code is only intended as a supplement for support and
|
|
* localization of HP JetAdmin by 3rd party Operating System vendors.
|
|
* Modification of source code cannot be made without the express written
|
|
* consent of Hewlett-Packard.
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
* Author: Name
|
|
*
|
|
*
|
|
* Modification history:
|
|
*
|
|
* date initials change description
|
|
*
|
|
* mm-dd-yy MJB
|
|
*
|
|
* 01-18-96 JLH Unicode changes
|
|
*
|
|
*
|
|
*
|
|
*
|
|
***************************************************************************/
|
|
|
|
//---------------------------------------------------------------------------
|
|
// $Header: W:/projects/shaqii/vcs/mon/mon_pjl.cpv 2.6 31 Oct 1994 13:12:58 RICHARD $
|
|
// File: mon_pjl.cpp
|
|
//
|
|
// Copyright (C) Hewlett-Packard Company 1992. All Rights Reserved.
|
|
// Copying or other reproduction of this material is prohibited without
|
|
// the prior written consent of Hewlett-Packard Company.
|
|
//
|
|
// What: print monitor PJL interface module
|
|
//
|
|
// Author: Sylvan Butler (sdb) 07/29/93
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
//
|
|
// $Log: W:/projects/shaqii/vcs/mon/mon_pjl.cpv $
|
|
//
|
|
// Rev 2.6 31 Oct 1994 13:12:58 RICHARD
|
|
// Modified the function, PJLSetMessage, to use the write timeout parameter
|
|
// passed in though the CFGOpenPort interface.
|
|
//
|
|
// Rev 2.5 26 Oct 1994 11:56:46 RICHARD
|
|
// Added a fix in the function, PJLGetMessage, when detecting read errors.
|
|
//
|
|
// Rev 2.4 25 Oct 1994 09:30:32 RICHARD
|
|
// Simplified the function, PJLGetMessage. PJLGetMessage no longer deals
|
|
// with incoming printer PJL messages that span multiple PJL buffers. PJL
|
|
// buffers are now being dynamically allocated to handle the largest PJL
|
|
// message.
|
|
//
|
|
// Rev 2.3 17 Oct 1994 13:04:26 RICHARD
|
|
// Added a yield to the application when waiting for the printer to accept
|
|
// a request from the host.
|
|
//
|
|
// Rev 2.2 13 Oct 1994 09:30:30 RICHARD
|
|
// Added a timeout on sending requests to the printer.
|
|
//
|
|
// Rev 2.1 19 Sep 1994 11:06:42 RICHARD
|
|
// Added the PJLSetMessage function which sends pjl strings to the printer
|
|
// without UEL commands.
|
|
//
|
|
// Rev 2.0 23 Aug 1994 13:52:30 RICHARD
|
|
// Modified the PJL Get functions to return fully formed PJL messages
|
|
//
|
|
// Rev 1.2 16 Aug 1993 11:50:22 SYLVAN
|
|
// fix keywords in header (case sensitive)
|
|
//
|
|
// Who When What
|
|
// --- --------- ----
|
|
// sdb Jul 29 93 Leveraged from qppjl.cpp
|
|
// sdb Aug 16 93 Slightly changed output format in PJLGetStatus
|
|
//---------------------------------------------------------------------------
|
|
|
|
#include <pch_c.h>
|
|
|
|
#include <trace.h>
|
|
#include <comdef.h>
|
|
#include <smonx.h>
|
|
#include <nolocal.h>
|
|
#include <yield.h>
|
|
|
|
#include "smon.h"
|
|
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
// Name: PJLSetMessage
|
|
//
|
|
// What: Send PJL strings to the printer
|
|
//
|
|
// Parameters:
|
|
//
|
|
// pSPCB stuff
|
|
//
|
|
// Return:
|
|
// RC_SUCCESS string was sent (OTHERWISE NOT SENT)
|
|
// RC_FAILURE error communicating
|
|
//
|
|
// Notes:
|
|
//---------------------------------------------------------------------------
|
|
WORD PJLSetMessage(PSPCB pSPCB,LPCSTR SrcBuf)
|
|
{
|
|
WORD rv = RC_SUCCESS;
|
|
LPCSTR Buf;
|
|
int cbBytesLeft;
|
|
int cbBytesWritten;
|
|
DWORD nTimeout;
|
|
|
|
TRACE0(TEXT("--PJLSetMessage\r\n"));
|
|
|
|
Buf = SrcBuf;
|
|
cbBytesLeft = lstrlenA(SrcBuf);
|
|
nTimeout = GetTickCount();
|
|
|
|
while (cbBytesLeft > 0 && GetTickCount() - nTimeout < pSPCB->nWriteTimeout)
|
|
{
|
|
rv = WritePort(Buf,cbBytesLeft,&cbBytesWritten,pSPCB);
|
|
|
|
cbBytesLeft -= cbBytesWritten;
|
|
Buf += cbBytesWritten;
|
|
|
|
if (cbBytesLeft > 0) WindowsYield(YIELD_NOW,NULL);
|
|
}
|
|
|
|
TRACE2(TEXT("--PJLSetMessage: %d of %d bytes written to printer:\r\n"),
|
|
Buf - SrcBuf,lstrlenA(SrcBuf));
|
|
TRACE0(TEXT("------------------------------------------\r\n"));
|
|
TRACE1(TEXT("%s\r\n"),SrcBuf);
|
|
TRACE0(TEXT("------------------------------------------\r\n"));
|
|
return(rv);
|
|
}
|
|
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
// Name: PJLGetMessage
|
|
//
|
|
// What: Get PJL strings from the printer
|
|
//
|
|
// Parameters:
|
|
//
|
|
// pSPCB stuff
|
|
//
|
|
// Return:
|
|
// PJL_STATUS complete success
|
|
// PJL_STATUS_NOT no success, but no failure
|
|
// PJL_ERROR complete failure (io error has been set)
|
|
//
|
|
// Notes:
|
|
//---------------------------------------------------------------------------
|
|
WORD PJLGetMessage(PSPCB pSPCB,LPSTR DstBuf,LPUINT DstLen)
|
|
{
|
|
WORD PJLrv, rv;
|
|
int nBytesRead;
|
|
LPSTR CrtSrcBuf;
|
|
UINT CrtSrcLen;
|
|
|
|
CrtSrcBuf = pSPCB->PJLInfo.Buf;
|
|
CrtSrcLen = pSPCB->PJLInfo.nLen;
|
|
|
|
PJLrv = PJL_STATUS_NOT;
|
|
|
|
do
|
|
{
|
|
// Read the PJL status string from the printer (if there is one)
|
|
rv = ReadPort(&CrtSrcBuf[CrtSrcLen],pSPCB->PJLLen-CrtSrcLen,
|
|
&nBytesRead,pSPCB);
|
|
if (rv == RC_SUCCESS)
|
|
{
|
|
CrtSrcLen += nBytesRead;
|
|
if (CrtSrcLen != 0)
|
|
{
|
|
rv = ExtractMessage(pSPCB,DstBuf,DstLen,CrtSrcBuf,&CrtSrcLen);
|
|
|
|
if (DstBuf == NULL)
|
|
{
|
|
if (pSPCB->bStatusFound) PJLrv = PJL_STATUS;
|
|
}
|
|
else
|
|
{
|
|
if (rv == RC_SUCCESS) PJLrv = PJL_STATUS;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
TRACE0(TEXT("--PJLGetMessage: ReadPort Error\r\n"));
|
|
PJLrv = PJL_ERROR;
|
|
}
|
|
}
|
|
while (PJLrv == PJL_STATUS_NOT && nBytesRead > 0);
|
|
|
|
pSPCB->PJLInfo.nLen = CrtSrcLen;
|
|
|
|
return(PJLrv);
|
|
}
|