/*************************************************************************** * * File Name: mon_cfg.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 Modified for unicode * * * * ***************************************************************************/ //--------------------------------------------------------------------------- // $Header: W:/projects/shaqii/vcs/mon/mon_cfg.cpv 2.17 11 Nov 1994 15:52:46 RICHARD $ // File: mon_cfg.cpp // // Copyright (C) Hewlett-Packard Company 1993. All Rights Reserved. // Copying or other reproduction of this material is prohibited without // the prior written consent of Hewlett-Packard Company. // // What: Print Monitor Module containing the i'face for the printer configuration // // Author: Richard Wheeling (rlw) Start: Dec 15 93 // // Notes: // // History: // // $Log: W:/projects/shaqii/vcs/mon/mon_cfg.cpv $ // // Rev 2.17 11 Nov 1994 15:52:46 RICHARD // Modified the Set I/O buffering algorithm to wait for a set echo // from the printer on bidirectional links. // // Rev 2.16 31 Oct 1994 13:07:56 RICHARD // Added timeout and retry count parameters to the CFGOpenPort function. // Modified the function, PJLRequestor, to use these parameters when // sending requests to and receiving reponses from the printer. // // Rev 2.15 26 Oct 1994 11:35:20 RICHARD // Added functionality to send a PJL Enter PCL Language command before // inquiring about the available memory. A Postscript printer (Legend) // will report the incorrect available memory the first time the printer // is asked after a power on. // // Rev 2.14 25 Oct 1994 11:47:30 RICHARD // Added dynamic memory allocation of Info Configuration and Request/Reply // buffers from the global heap. // Added the ability to send and receive PJL echo commands. This // functionality allows the get configuration functions to echo PJL // commands through the printer, thereby ensuring that the reverse // channel I/O buffers in the printer have been flushed. // Added a parameter, ReplyLength, to the function, CFGRequestReply. // // Rev 2.13 17 Oct 1994 13:21:22 RICHARD // Added a function, YieldToApplication. // Added a yield to the application when waiting for the printer to respond // to a previous request. // Changed the logic associated with setting I/O buffering. A single // well-bounded job is created to set I/O buffering. // // Rev 2.12 14 Oct 1994 11:19:32 RICHARD // Changed the PJL syntax for personality specific gets and sets. // // Rev 2.11 13 Oct 1994 09:29:42 RICHARD // Decreased the reply timeout on requests to the printer. // // Rev 2.10 12 Oct 1994 18:46:46 RICHARD // Added a delay of 2 seconds after setting I/O buffering or resource // save. // // Rev 2.9 08 Oct 1994 17:23:20 RICHARD // Rolled back changes relating to dynamic memory allocation. // // Rev 2.8 07 Oct 1994 15:11:14 RICHARD // Changed the dynamic memory allocation to use fixed memory. // // Rev 2.7 05 Oct 1994 14:39:32 RICHARD // Modified the CFGGetDrvObjects function to initialize the boolean flags // associated with available memory and MP tray setting. Setting these // flags to TRUE allows the GetAvailMemory and GetMPTray functions to // get these printer default settings. // // Rev 2.6 04 Oct 1994 18:52:38 RICHARD // Added dynamic memory allocation of Info Configuration and Request/Reply // buffers. // Added Get/Set PCL/Postscript resource save size functionality. // Added Get/Set Adobe MBT (memory boost technology) functionality. // // Rev 2.5 27 Sep 1994 08:24:22 RICHARD // Fixed a compilation problem. // // Rev 2.4 27 Sep 1994 08:19:18 RICHARD // Added a special interface to allow the pcl driver to get the available // memory and MP tray setting // // Rev 2.3 23 Sep 1994 17:22:54 RICHARD // Added the get device capabilities and set test pages functionality // // Rev 2.2 19 Sep 1994 10:59:38 RICHARD // Removed the printer name get/set functionality. // Changed the PJLWrite function calls to PJLSetMessage function calls. The // PJLWrite function was sending UEL on every PJL object set. // // Rev 2.1 23 Aug 1994 16:56:54 RICHARD // Added a conditional compilation switch, COLA, around the getting and // setting of several PJL objects not supported by Alturas // // Rev 2.0 23 Aug 1994 14:16:44 RICHARD // Initial revision. // //--------------------------------------------------------------------------- #include <pch_c.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <trace.h> #include <comdef.h> #include <smonx.h> #include <nolocal.h> #include <yield.h> #include <macros.h> #include "smon.h" #define REQBUFSIZE 1024 #define REPBUFSIZE 256 #define INFOBUFSIZE 5120 #define INFOMEMORYBUFSIZE 256 static const char *UEL = JOB_UEL; static const char *PJL = JOB_PJL; static const char *JobStart = JOB_START; static const char *JobEnd = JOB_END; static const char *SetPrefix = SET_PREFIX; static const char *DefaultPrefix = DEFAULT_PREFIX; static const char *InquirePrefix = INQUIRE_PREFIX; static const char *DInquirePrefix = DINQUIRE_PREFIX; static const char *EchoPrefix = ECHO_PREFIX; static const char *EnterLangPrefix = ENTER_LANG; static const char *Equals = EQUALS; static const char *Postfix = PJL_POSTFIX; static const char *LongEdge = LONGEDGE; static const char *ShortEdge = SHORTEDGE; static const char *Job = JOB; static const char *Auto = AUTO; static const char *Danish = DANISH; static const char *German = GERMAN; static const char *English = ENGLISH; static const char *Spanish = SPANISH; static const char *French = FRENCH; static const char *Italian = ITALIAN; static const char *Dutch = DUTCH; static const char *Norwegian = NORWEGIAN; static const char *Polish = POLISH; static const char *Portuguese = PORTUGUESE; static const char *Finnish = FINNISH; static const char *Swedish = SWEDISH; static const char *Turkish = TURKISH; static const char *Portrait = PORTRAIT; static const char *Landscape = LANDSCAPE; static const char *Upper = UPPER; static const char *Lower = LOWER; static const char *Letter = LETTER; static const char *Legal = LEGAL; static const char *A4 = A4_NAME; static const char *Executive = EXECUTIVE; static const char *Com10 = COM10; static const char *Monarch = MONARCH; static const char *C5 = C5_NAME; static const char *DL = DL_NAME; static const char *B5 = B5_NAME; static const char *Custom = CUSTOM; static const char *PCL = PCL_NAME; static const char *Postscript = POSTSCRIPT; static const char *Light = LIGHT; static const char *Medium = MEDIUM; static const char *Dark = DARK; static const char *On = ON; static const char *Off = OFF; static const char *Enable = ENABLE_NAME; static const char *Disable = DISABLE_NAME; static const char *s15 = PS_TIME_15; static const char *s30 = PS_TIME_30; static const char *s60 = PS_TIME_60; static const char *s120 = PS_TIME_120; static const char *s180 = PS_TIME_180; static const char *Japanese = JAPANESE; static const char *First = FIRST; static const char *Cassette = CASSETTE; static const char *Manual = MANUAL; static const char *SelfTest = SELF_TEST; static const char *ContSelfTest = CONT_SELF_TEST; static const char *PCLTypeList = PCL_TYPE_LIST; static const char *PCLDemoPage = PCL_DEMO_PAGE; static const char *PSConfigPage = PS_CONFIG_PAGE; static const char *PSTypefaceList = PS_TYPEFACE_LIST; static const char *PSDemoPage = PS_DEMO_PAGE; static const char *Total = TOTAL; static const char *Memory = MEMORY; static const char *Languages = LANGUAGES; static const char *AutoCont = AUTOCONT2; static const char *Binding = BINDING2; static const char *ClearableWarnings = CLEARABLEWARNINGS2; static const char *Copies = COPIES2; static const char *CpLock = CPLOCK2; static const char *Density = DENSITY2; static const char *DiskLock = DISKLOCK; static const char *Duplex = DUPLEX2; static const char *EconoMode = ECONOMODE2; static const char *FormLines = FORMLINES2; static const char *ImageAdapt = IMAGEADAPT2; static const char *IOBuffer = IOBUFFER2; static const char *IOBufSize = IOSIZE2; static const char *JobOffset = JOBOFFSET2; static const char *Lang = LANG2; static const char *ServiceMode = SERVICEMODE2; static const char *HPBoiseID = HPBOISEID2; static const char *Exit = EXIT2; static const char *ManualFeed = MANUALFEED2; static const char *Orientation = ORIENTATION2; static const char *Outbin = OUTBIN2; static const char *PageProtect = PAGEPROTECT2; static const char *Paper = PAPER2; static const char *Password = PASSWORD2; static const char *Personality = PERSONALITY2; static const char *PowerSave = POWERSAVE2; static const char *PowerSaveTime = POWERSAVETIME2; static const char *Resolution = RESOLUTION2; static const char *ResourceSave = RESOURCESAVE2; static const char *PCLResSaveSize = PCL_RES_SAVE_SIZE; static const char *PSResSaveSize = PS_RES_SAVE_SIZE; static const char *RET = RET2; static const char *Timeout = TIMEOUT2; static const char *JamRecovery = PS_JAM_RECOVERY; static const char *PrintPSerrors = PRINT_PS_ERRORS; static const char *AvailMemory = AVAIL_MEM; static const char *MPTray = MPTRAY; static const char *PSAdobeMBT = PS_ADOBE_MBT; static const char *TestPage = TESTPAGE; static int nEchoCount; #define PJL_CATEGORY(x) ((UINT) (x / 1000)) // Extract category from error code #define PJL_STATCODE(x) ((UINT) (x % 1000)) // Extract status code from error code #define PJL_CATEGORY_INFO 10 // Information message only #define PJL_CATEGORY_INFO_PM 11 // Info + background paper mount #define PJL_CATEGORY_AUTOCONTINUE 30 // Error reported, no intervention required #define PJL_CATEGORY_SLEEP 35 // Only one code in this category #define PJL_CATEGORY_INTERVENTION 40 // Intervention req'd, printing stopped #define PJL_CATEGORY_PAPER 41 // Manual feed/Paper out error, printing stopped #define PJL_CATEGORY_FATAL 50 // Fatal error, printer needs service #define PJL_READY 10001 // No errors, I/O is online #define PJL_WARMUP 10003 // Printer is warming up #define PJL_SELF_TEST 10004 // Printer is in self-test mode #define PJL_RESET 10005 // Printer is resetting #define PJL_TONER_LOW 10006 // Printer is low on toner #define PJL_CANCELING_JOB 10007 // Printer is canceling a job #define PJL_MIO_NOT_READY 10011 // MIO not ready #define PJL_CONFIG_TEST 10014 // Printer is printing config printout #define PJL_FONT_LIST 10015 // Printer is printing a font list #define PJL_DEMO_PAGE 10017 // Printer is printing a demo page #define PJL_CONFIG_PAGE 10022 // Printer is printing a configuration page #define PJL_PROCESSING_JOB 10023 // Printer is processing a job #define PJL_DATA_RECEIVED 10024 // Printer has received data #define PJL_PROCESSING_FF 10029 // Printer is processing a formfeed #define PJL_MEM_OUT 30016 // Printer has run out of memory #define PJL_OVERRUN 30017 // Print overrun #define PJL_DOOR_OPEN 40021 // Door open #define PJL_PAPER_JAM 40022 // Paper Jam #define PJL_LOW_TONER 40038 // Printer is low on toner #define PJL_OFFLINE 40079 // Printer off-line #define PJL_POWERSAVE 35078 // EnergyStar mode on //--------------------------------------------------------------------------- // local functions //--------------------------------------------------------------------------- WORD FreeReqRepBufs(PSPCB pSPCB) { if (pSPCB->hReqRepBufs != NULL) { GlobalUnlock(pSPCB->hReqRepBufs); GlobalFree(pSPCB->hReqRepBufs); } pSPCB->hReqRepBufs = NULL; pSPCB->ReqBuf = NULL; pSPCB->ReqLen = 0; pSPCB->RepBuf = NULL; pSPCB->RepLen = 0; return(RC_SUCCESS); } WORD AllocReqRepBufs(PSPCB pSPCB) { HGLOBAL hReqRepBufs; LPSTR lpReqRepBufs; if (pSPCB->hReqRepBufs != NULL) FreeReqRepBufs(pSPCB); if ((hReqRepBufs = GlobalAlloc(GHND,REQBUFSIZE + REPBUFSIZE)) == NULL) { TRACE0(TEXT("--AllocReqRepBufs: Unable to allocate memory\r\n")); return(RC_FAILURE); } if ((lpReqRepBufs = (LPSTR) GlobalLock(hReqRepBufs)) == NULL) { TRACE0(TEXT("--AllocReqRepBufs: Unable to lock memory\r\n")); return(RC_FAILURE); } pSPCB->hReqRepBufs = hReqRepBufs; pSPCB->ReqBuf = &lpReqRepBufs[0]; pSPCB->ReqLen = REQBUFSIZE; pSPCB->RepBuf = &lpReqRepBufs[REQBUFSIZE]; pSPCB->RepLen = REPBUFSIZE; return(RC_SUCCESS); } WORD FreeInfoBufs(PSPCB pSPCB) { if (pSPCB->hInfoBufs != NULL) { GlobalUnlock(pSPCB->hInfoBufs); GlobalFree(pSPCB->hInfoBufs); } pSPCB->hInfoBufs = NULL; pSPCB->InfoBuf = NULL; pSPCB->InfoLen = 0; pSPCB->InfoMemoryBuf = NULL; pSPCB->InfoMemoryLen = 0; return(RC_SUCCESS); } WORD AllocInfoBufs(PSPCB pSPCB) { HGLOBAL hInfoBufs; LPSTR lpInfoBufs; if (pSPCB->hInfoBufs != NULL) FreeInfoBufs(pSPCB); if ((hInfoBufs = GlobalAlloc(GHND,INFOBUFSIZE + INFOMEMORYBUFSIZE)) == NULL) { TRACE0(TEXT("--AllocInfoBufs: Unable to allocate memory\r\n")); return(RC_FAILURE); } if ((lpInfoBufs = (LPSTR) GlobalLock(hInfoBufs)) == NULL) { TRACE0(TEXT("--AllocInfoBufs: Unable to lock memory\r\n")); return(RC_FAILURE); } pSPCB->hInfoBufs = hInfoBufs; pSPCB->InfoBuf = &lpInfoBufs[0]; pSPCB->InfoLen = INFOBUFSIZE; pSPCB->InfoMemoryBuf = &lpInfoBufs[INFOBUFSIZE]; pSPCB->InfoMemoryLen = INFOMEMORYBUFSIZE; return(RC_SUCCESS); } WORD PJLRequestor(PSPCB pSPCB,LPCSTR ReqBuf,LPSTR RepBuf,UINT RepLen, BOOL SetReq) { WORD rv; WORD nReadRetry = 0; BOOL bRepFound = FALSE; UINT CrtReqLen,CrtRepLen; DWORD nDelay,nTimeout; TRACE0(TEXT("--PJLRequestor\r\n")); pSPCB->bStatusFound = FALSE; CrtReqLen = lstrlenA(ReqBuf); if (pSPCB->bTwoWay) { while (!bRepFound && nReadRetry++ < pSPCB->nReadRetry) { if (SetReq) rv = PJLSetMessage(pSPCB,ReqBuf); else rv = RC_SUCCESS; if (rv == RC_SUCCESS) { nTimeout = GetTickCount(); while (!bRepFound && GetTickCount() - nTimeout < pSPCB->nReadTimeout) { CrtRepLen = RepLen; rv = PJLGetMessage(pSPCB,RepBuf,&CrtRepLen); if (rv == PJL_STATUS) { if (memcmp(ReqBuf,RepBuf,CrtReqLen - 1) == 0) { bRepFound = TRUE; RepBuf[CrtRepLen] = '\0'; // disable these trace statements in Windows 95 due to a Visual C++ 2.0 // hanging problem #if defined(_DEBUG) && !defined(WIN32) TRACE1(TEXT("--PJL Info (total: %d)\r\n"),CrtRepLen); TRACE0(TEXT("------------------------------------------\r\n")); for (UINT i = 0; i < CrtRepLen; i++) { TRACE1(TEXT("%c"),RepBuf[i]); } TRACE0(TEXT("\r\n------------------------------------------\r\n")); #endif } } else { if (rv == PJL_ERROR) { nReadRetry = pSPCB->nReadRetry; break; } } if (pSPCB->bStatusFound && pSPCB->nStatusCode == 30010) { nReadRetry--; pSPCB->bStatusFound = FALSE; break; } nDelay = GetTickCount(); while (GetTickCount() - nDelay < 110); if (!bRepFound) WindowsYield(YIELD_NOW,NULL); } } } } if (bRepFound) rv = RC_SUCCESS; else rv = RC_FAILURE; return(rv); } void GetInfoAlphaStr(LPSTR dst,LPCSTR src,LPCSTR str) { LPSTR SrcBuf; LPSTR DstBuf; DstBuf = dst; *DstBuf = '\0'; if ((SrcBuf = strstr(src,str)) != NULL) { SrcBuf += lstrlenA(str); while (!isalpha(*SrcBuf)) SrcBuf++; while (isalpha(*SrcBuf)) *DstBuf++ = *SrcBuf++; *DstBuf = '\0'; } } void GetInfoDigitStr(LPSTR dst,LPCSTR src,LPCSTR str) { LPSTR SrcBuf; LPSTR DstBuf; DstBuf = dst; *DstBuf = '\0'; if ((SrcBuf = strstr(src,str)) != NULL) { SrcBuf += lstrlenA(str); while (!isdigit(*SrcBuf)) SrcBuf++; while (isdigit(*SrcBuf)) *DstBuf++ = *SrcBuf++; *DstBuf = '\0'; } } void GetInfoAlphaDigitStr(LPSTR dst,LPCSTR src,LPCSTR str) { LPSTR SrcBuf; LPSTR DstBuf; DstBuf = dst; *DstBuf = '\0'; if ((SrcBuf = strstr(src,str)) != NULL) { SrcBuf += lstrlenA(str); while (!isalpha(*SrcBuf)) SrcBuf++; while (isalpha(*SrcBuf) || isdigit(*SrcBuf)) *DstBuf++ = *SrcBuf++; *DstBuf = '\0'; } } void GetDisplayAlphaStr(LPSTR dst,LPCSTR src,LPCSTR str) { LPSTR SrcBuf; LPSTR DstBuf; DstBuf = dst; *DstBuf = '\0'; if ((SrcBuf = strstr(src,str)) != NULL) { SrcBuf += lstrlenA(str); while (*SrcBuf == '"' || *SrcBuf == ' ') SrcBuf++; while (*SrcBuf != '"' && *SrcBuf != '\r' && *SrcBuf != '\n') *DstBuf++ = *SrcBuf++; *DstBuf = '\0'; } } void GetInfoEnumStr(LPSTR dst[],LPINT dstc,LPCSTR src,LPCSTR str) { LPSTR SrcBuf; int i; *dstc = 0; if ((SrcBuf = strstr(src,str)) != NULL) { SrcBuf += lstrlenA(str); while (!isdigit(*SrcBuf)) SrcBuf++; *dstc = atoi(SrcBuf); for (i = 0; i < *dstc; i++) { while (*SrcBuf != '\r' && *SrcBuf != '\n') SrcBuf++; while (!isalpha(*SrcBuf)) SrcBuf++; dst[i] = SrcBuf; } } } void GetInquireAlphaStr(LPSTR dst,LPCSTR src,LPCSTR str) { LPSTR SrcBuf; LPSTR DstBuf; DstBuf = dst; *DstBuf = '\0'; if ((SrcBuf = strstr(src,str)) != NULL) { SrcBuf += lstrlenA(str); while (*SrcBuf != '\n') SrcBuf++; SrcBuf++; if (memcmp(SrcBuf,"\"?\"",3) != 0) { while (isalpha(*SrcBuf)) *DstBuf++ = *SrcBuf++; *DstBuf = '\0'; } } } void GetInquireDigitStr(LPSTR dst,LPCSTR src,LPCSTR str) { LPSTR SrcBuf; LPSTR DstBuf; DstBuf = dst; *DstBuf = '\0'; if ((SrcBuf = strstr(src,str)) != NULL) { SrcBuf += lstrlenA(str); while (*SrcBuf != '\n') SrcBuf++; SrcBuf++; if (memcmp(SrcBuf,"\"?\"",3) != 0) { while (isdigit(*SrcBuf)) *DstBuf++ = *SrcBuf++; *DstBuf = '\0'; } } } void GetInquireAlphaDigitStr(LPSTR dst,LPCSTR src,LPCSTR str) { LPSTR SrcBuf; LPSTR DstBuf; DstBuf = dst; *DstBuf = '\0'; if ((SrcBuf = strstr(src,str)) != NULL) { SrcBuf += lstrlenA(str); while (*SrcBuf != '\n') SrcBuf++; SrcBuf++; if (memcmp(SrcBuf,"\"?\"",3) != 0) { while (isalpha(*SrcBuf) || isdigit(*SrcBuf)) *DstBuf++ = *SrcBuf++; *DstBuf = '\0'; } } } WORD GetAlphaVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get,LPSTR Value, BOOL Default) { WORD rv = RC_SUCCESS; char str[32]; str[0] = '\0'; if (Get) { lstrcpyA(pSPCB->ReqBuf,Variable); lstrcatA(pSPCB->ReqBuf,"="); GetInfoAlphaStr(str,pSPCB->InfoBuf,pSPCB->ReqBuf); if (lstrlenA(str) == 0) { if (Default) lstrcpyA(pSPCB->ReqBuf,DInquirePrefix); else lstrcpyA(pSPCB->ReqBuf,InquirePrefix); lstrcatA(pSPCB->ReqBuf,Variable); lstrcatA(pSPCB->ReqBuf,Postfix); if ((rv = PJLRequestor(pSPCB,pSPCB->ReqBuf,pSPCB->RepBuf,pSPCB->RepLen, TRUE)) == RC_SUCCESS) { pSPCB->ReqBuf[lstrlenA(pSPCB->ReqBuf) - 1] = '\0'; GetInquireAlphaStr(str,pSPCB->RepBuf,pSPCB->ReqBuf); } } lstrcpyA(Value,str); } return(rv); } WORD GetDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get,LPDWORD Value, BOOL Default) { WORD rv = RC_SUCCESS; char str[32]; str[0] = '\0'; if (Get) { lstrcpyA(pSPCB->ReqBuf,Variable); lstrcatA(pSPCB->ReqBuf,"="); GetInfoDigitStr(str,pSPCB->InfoBuf,pSPCB->ReqBuf); if (lstrlenA(str) == 0) { if (Default) lstrcpyA(pSPCB->ReqBuf,DInquirePrefix); else lstrcpyA(pSPCB->ReqBuf,InquirePrefix); lstrcatA(pSPCB->ReqBuf,Variable); lstrcatA(pSPCB->ReqBuf,Postfix); if ((rv = PJLRequestor(pSPCB,pSPCB->ReqBuf,pSPCB->RepBuf,pSPCB->RepLen, TRUE)) == RC_SUCCESS) { pSPCB->ReqBuf[lstrlenA(pSPCB->ReqBuf) - 1] = '\0'; GetInquireDigitStr(str,pSPCB->RepBuf,pSPCB->ReqBuf); } } *Value = atol(str); } return(rv); } WORD GetAlphaDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get,LPSTR Value, BOOL Default) { WORD rv = RC_SUCCESS; char str[32]; str[0] = '\0'; if (Get) { lstrcpyA(pSPCB->ReqBuf,Variable); lstrcatA(pSPCB->ReqBuf,"="); GetInfoAlphaDigitStr(str,pSPCB->InfoBuf,pSPCB->ReqBuf); if (lstrlenA(str) == 0) { if (Default) lstrcpyA(pSPCB->ReqBuf,DInquirePrefix); else lstrcpyA(pSPCB->ReqBuf,InquirePrefix); lstrcatA(pSPCB->ReqBuf,Variable); lstrcatA(pSPCB->ReqBuf,Postfix); if ((rv = PJLRequestor(pSPCB,pSPCB->ReqBuf,pSPCB->RepBuf,pSPCB->RepLen, TRUE)) == RC_SUCCESS) { pSPCB->ReqBuf[lstrlenA(pSPCB->ReqBuf) - 1] = '\0'; GetInquireAlphaDigitStr(str,pSPCB->RepBuf,pSPCB->ReqBuf); } } lstrcpyA(Value,str); } return(rv); } WORD SetAlphaVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Set,LPCSTR Value, BOOL Default) { WORD rv = RC_SUCCESS; if (Set) { if (Default) lstrcpyA(pSPCB->ReqBuf,DefaultPrefix); else lstrcpyA(pSPCB->ReqBuf,SetPrefix); lstrcatA(pSPCB->ReqBuf,Variable); lstrcatA(pSPCB->ReqBuf,Equals); lstrcatA(pSPCB->ReqBuf,Value); lstrcatA(pSPCB->ReqBuf,Postfix); rv = PJLSetMessage(pSPCB,pSPCB->ReqBuf); } return(rv); } WORD SetDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Set,DWORD Value, BOOL Default) { WORD rv = RC_SUCCESS; char str[32]; str[0] = '\0'; _ltoa(Value,str,10); if (Set) { if (Default) lstrcpyA(pSPCB->ReqBuf,DefaultPrefix); else lstrcpyA(pSPCB->ReqBuf,SetPrefix); lstrcatA(pSPCB->ReqBuf,Variable); lstrcatA(pSPCB->ReqBuf,Equals); lstrcatA(pSPCB->ReqBuf,str); lstrcatA(pSPCB->ReqBuf,Postfix); rv = PJLSetMessage(pSPCB,pSPCB->ReqBuf); } return(rv); } WORD GetLangVariable(PSPCB pSPCB,LPDWORD dwLang,HPBOOL bLang, HPBOOL bLangServiceMode,BOOL Default) { WORD rv = RC_SUCCESS; char Value[32]; BOOL ServiceModeEnabled = FALSE; if (bLang) { if (bLangServiceMode) { rv = SetAlphaVariable(pSPCB,ServiceMode,TRUE,HPBoiseID,Default); if (rv == RC_SUCCESS) ServiceModeEnabled = TRUE; } if (rv == RC_SUCCESS) { rv = GetAlphaVariable(pSPCB,Lang,bLang,Value,Default); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Danish) == 0) *dwLang = PJL_DANISH; else if (lstrcmpA(Value,German) == 0) *dwLang = PJL_GERMAN; else if (lstrcmpA(Value,English) == 0) *dwLang = PJL_ENGLISH; else if (lstrcmpA(Value,Spanish) == 0) *dwLang = PJL_SPANISH; else if (lstrcmpA(Value,French) == 0) *dwLang = PJL_FRENCH; else if (lstrcmpA(Value,Italian) == 0) *dwLang = PJL_ITALIAN; else if (lstrcmpA(Value,Dutch) == 0) *dwLang = PJL_DUTCH; else if (lstrcmpA(Value,Norwegian) == 0) *dwLang = PJL_NORWEGIAN; else if (lstrcmpA(Value,Polish) == 0) *dwLang = PJL_POLISH; else if (lstrcmpA(Value,Portuguese) == 0) *dwLang = PJL_PORTUGUESE; else if (lstrcmpA(Value,Finnish) == 0) *dwLang = PJL_FINNISH; else if (lstrcmpA(Value,Swedish) == 0) *dwLang = PJL_SWEDISH; else if (lstrcmpA(Value,Turkish) == 0) *dwLang = PJL_TURKISH; else if (lstrcmpA(Value,Japanese) == 0) *dwLang = PJL_JAPANESE; else *dwLang = PJL_ENGLISH; } } if (ServiceModeEnabled) rv = SetAlphaVariable(pSPCB,ServiceMode,TRUE,Exit,Default); } return(rv); } WORD SetLangVariable(PSPCB pSPCB,DWORD dwLang,HPBOOL bLang, HPBOOL bLangServiceMode,BOOL Default) { WORD rv = RC_SUCCESS; char Value[32]; BOOL ServiceModeEnabled = FALSE; if (bLang) { if (bLangServiceMode) { rv = SetAlphaVariable(pSPCB,ServiceMode,TRUE,HPBoiseID,Default); if (rv == RC_SUCCESS) ServiceModeEnabled = TRUE; } if (rv == RC_SUCCESS) { switch (dwLang) { case PJL_DANISH: lstrcpyA(Value,Danish); break; case PJL_GERMAN: lstrcpyA(Value,German); break; case PJL_ENGLISH_UK: case PJL_ENGLISH: lstrcpyA(Value,English); break; case PJL_MEXICO: case PJL_SPANISH: lstrcpyA(Value,Spanish); break; case PJL_CANADA: case PJL_FRENCH: lstrcpyA(Value,French); break; case PJL_ITALIAN: lstrcpyA(Value,Italian); break; case PJL_DUTCH: lstrcpyA(Value,Dutch); break; case PJL_NORWEGIAN: lstrcpyA(Value,Norwegian); break; case PJL_POLISH: lstrcpyA(Value,Polish); break; case PJL_PORTUGUESE: lstrcpyA(Value,Portuguese); break; case PJL_FINNISH: lstrcpyA(Value,Finnish); break; case PJL_SWEDISH: lstrcpyA(Value,Swedish); break; case PJL_TURKISH: lstrcpyA(Value,Turkish); break; case PJL_JAPANESE: lstrcpyA(Value,Japanese); break; default: lstrcpyA(Value,English); break; } rv = SetAlphaVariable(pSPCB,Lang,bLang,Value,Default); } if (ServiceModeEnabled) rv = SetAlphaVariable(pSPCB,ServiceMode,TRUE,Exit,Default); } return(rv); } WORD GetDefaultAlphaVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get,LPSTR Value) { return(GetAlphaVariable(pSPCB,Variable,Get,Value,TRUE)); } WORD GetDefaultDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get, LPDWORD Value) { return(GetDigitVariable(pSPCB,Variable,Get,Value,TRUE)); } WORD GetDefaultAlphaDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get, LPSTR Value) { return(GetAlphaDigitVariable(pSPCB,Variable,Get,Value,TRUE)); } WORD GetDefaultLangVariable(PSPCB pSPCB,LPDWORD Lang,HPBOOL bLang, HPBOOL bLangServiceMode) { return(GetLangVariable(pSPCB,Lang,bLang,bLangServiceMode,TRUE)); } WORD GetCurrentAlphaVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get,LPSTR Value) { return(GetAlphaVariable(pSPCB,Variable,Get,Value,FALSE)); } WORD GetCurrentDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get, LPDWORD Value) { return(GetDigitVariable(pSPCB,Variable,Get,Value,FALSE)); } WORD GetCurrentAlphaDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Get, LPSTR Value) { return(GetAlphaDigitVariable(pSPCB,Variable,Get,Value,FALSE)); } WORD GetCurrentLangVariable(PSPCB pSPCB,LPDWORD Lang,HPBOOL bLang, HPBOOL bLangServiceMode) { return(GetLangVariable(pSPCB,Lang,bLang,bLangServiceMode,FALSE)); } WORD SetDefaultAlphaVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Set, LPCSTR Value) { return(SetAlphaVariable(pSPCB,Variable,Set,Value,TRUE)); } WORD SetDefaultDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Set,DWORD Value) { return(SetDigitVariable(pSPCB,Variable,Set,Value,TRUE)); } WORD SetDefaultLangVariable(PSPCB pSPCB,DWORD Lang,HPBOOL bLang, HPBOOL bLangServiceMode) { return(SetLangVariable(pSPCB,Lang,bLang,bLangServiceMode,TRUE)); } WORD SetCurrentAlphaVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Set, LPCSTR Value) { return(SetAlphaVariable(pSPCB,Variable,Set,Value,FALSE)); } WORD SetCurrentDigitVariable(PSPCB pSPCB,LPCSTR Variable,HPBOOL Set,DWORD Value) { return(SetDigitVariable(pSPCB,Variable,Set,Value,FALSE)); } WORD SetCurrentLangVariable(PSPCB pSPCB,DWORD Lang,HPBOOL bLang, HPBOOL bLangServiceMode) { return(SetLangVariable(pSPCB,Lang,bLang,bLangServiceMode,FALSE)); } WORD SetGetEcho(PSPCB pSPCB,LPCSTR Value) { WORD rv; char str[32]; if (++nEchoCount < 0) nEchoCount = 0; str[0] = '\0'; _itoa(nEchoCount,str,10); lstrcpyA(pSPCB->ReqBuf,EchoPrefix); lstrcatA(pSPCB->ReqBuf,Value); lstrcatA(pSPCB->ReqBuf,str); lstrcatA(pSPCB->ReqBuf,Postfix); rv = PJLRequestor(pSPCB,pSPCB->ReqBuf,pSPCB->RepBuf,pSPCB->RepLen,TRUE); return(rv); } WORD SetEcho(PSPCB pSPCB,LPCSTR Value) { WORD rv; char str[32]; if (++nEchoCount < 0) nEchoCount = 0; str[0] = '\0'; _itoa(nEchoCount,str,10); lstrcpyA(pSPCB->ReqBuf,EchoPrefix); lstrcatA(pSPCB->ReqBuf,Value); lstrcatA(pSPCB->ReqBuf,str); lstrcatA(pSPCB->ReqBuf,Postfix); rv = PJLSetMessage(pSPCB,pSPCB->ReqBuf); return(rv); } WORD GetEcho(PSPCB pSPCB,LPCSTR Value) { WORD rv; char str[32]; str[0] = '\0'; _itoa(nEchoCount,str,10); lstrcpyA(pSPCB->ReqBuf,EchoPrefix); lstrcatA(pSPCB->ReqBuf,Value); lstrcatA(pSPCB->ReqBuf,str); lstrcatA(pSPCB->ReqBuf,Postfix); rv = PJLRequestor(pSPCB,pSPCB->ReqBuf,pSPCB->RepBuf,pSPCB->RepLen,FALSE); return(rv); } WORD SetJobStart(PSPCB pSPCB,DWORD CurPassword) { WORD rv; char Value[32]; lstrcpyA(pSPCB->ReqBuf,UEL); lstrcatA(pSPCB->ReqBuf,PJL); lstrcatA(pSPCB->ReqBuf,Postfix); lstrcatA(pSPCB->ReqBuf,JobStart); if (CurPassword != 0) { Value[0] = '\0'; _ltoa(CurPassword,Value,10); lstrcatA(pSPCB->ReqBuf," "); lstrcatA(pSPCB->ReqBuf,Password); lstrcatA(pSPCB->ReqBuf,Equals); lstrcatA(pSPCB->ReqBuf,Value); } lstrcatA(pSPCB->ReqBuf,Postfix); rv = PJLSetMessage(pSPCB,pSPCB->ReqBuf); return(rv); } WORD SetJobEnd(PSPCB pSPCB) { WORD rv; lstrcpyA(pSPCB->ReqBuf,JobEnd); lstrcatA(pSPCB->ReqBuf,Postfix); lstrcatA(pSPCB->ReqBuf,UEL); rv = PJLSetMessage(pSPCB,pSPCB->ReqBuf); return(rv); } WORD EnterPersonality(PSPCB pSPCB,LPCSTR Personality) { WORD rv; lstrcpyA(pSPCB->ReqBuf,EnterLangPrefix); lstrcatA(pSPCB->ReqBuf,Equals); lstrcatA(pSPCB->ReqBuf,Personality); lstrcatA(pSPCB->ReqBuf,Postfix); rv = PJLSetMessage(pSPCB,pSPCB->ReqBuf); return(rv); } WORD GetInfoConfig(PSPCB pSPCB) { return(PJLRequestor(pSPCB,INFO_CONFIG,pSPCB->InfoBuf,pSPCB->InfoLen,TRUE)); } WORD GetInfoVariables(PSPCB pSPCB) { return(PJLRequestor(pSPCB,PJL_INFO_VAR,pSPCB->InfoBuf,pSPCB->InfoLen,TRUE)); } WORD GetInfoMemory(PSPCB pSPCB) { return(PJLRequestor(pSPCB,PJL_INFO_MEM,pSPCB->InfoMemoryBuf, pSPCB->InfoMemoryLen,TRUE)); } WORD GetMemoryCaps(PSPCB pSPCB,LPPeripheralCaps periphCaps) { char str[32]; GetInfoDigitStr(str,pSPCB->InfoBuf,Memory); periphCaps->flags |= CAPS_INSTALLED_RAM; periphCaps->installedRAM = atol(str) / 1048576; return(RC_SUCCESS); } WORD GetLanguagesCaps(PSPCB pSPCB,LPPeripheralCaps periphCaps) { LPSTR str[20]; int strc; int i; periphCaps->bPostScript = FALSE; periphCaps->bPCL = FALSE; periphCaps->bHPGL2 = FALSE; GetInfoEnumStr(str,&strc,pSPCB->InfoBuf,Languages); for (i = 0; i < strc; i++) { if (memcmp(str[i],PCL,lstrlenA(PCL)) == 0) { periphCaps->flags |= (CAPS_PCL | CAPS_HPGL2); periphCaps->bPCL = TRUE; periphCaps->bHPGL2 = TRUE; } else if (memcmp(str[i],Postscript,lstrlenA(Postscript)) == 0) { periphCaps->flags |= CAPS_POSTSCRIPT; periphCaps->bPostScript = TRUE; } } return(RC_SUCCESS); } WORD GetDuplexCaps(PSPCB pSPCB,LPPeripheralCaps periphCaps) { if (strstr(pSPCB->InfoBuf,Duplex) != NULL) { periphCaps->flags |= CAPS_DUPLEX; periphCaps->bDuplex = TRUE; } return(RC_SUCCESS); } WORD GetAutoCont(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bAutoCont) { rv = GetDefaultAlphaVariable(pSPCB,AutoCont,pjlObjects->bAutoCont,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->AutoCont = PJL_ON; else pjlObjects->AutoCont = PJL_OFF; } } return(rv); } WORD SetAutoCont(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bAutoCont) { if (pjlObjects->AutoCont == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,AutoCont,pjlObjects->bAutoCont,Value); } return(rv); } WORD GetBinding(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bBinding) { rv = GetDefaultAlphaVariable(pSPCB,Binding,pjlObjects->bBinding,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,LongEdge) == 0) pjlObjects->Binding = PJL_LONGEDGE; else pjlObjects->Binding = PJL_SHORTEDGE; } } return(rv); } WORD SetBinding(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bBinding) { if (pjlObjects->Binding == PJL_LONGEDGE) lstrcpyA(Value,LongEdge); else lstrcpyA(Value,ShortEdge); rv = SetDefaultAlphaVariable(pSPCB,Binding,pjlObjects->bBinding,Value); } return(rv); } WORD GetClearableWarnings(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bClearableWarnings) { rv = GetDefaultAlphaVariable(pSPCB,ClearableWarnings, pjlObjects->bClearableWarnings,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->ClearableWarnings = PJL_ON; else pjlObjects->ClearableWarnings = PJL_JOB; } } return(rv); } WORD SetClearableWarnings(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bClearableWarnings) { if (pjlObjects->ClearableWarnings == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Job); rv = SetDefaultAlphaVariable(pSPCB,ClearableWarnings, pjlObjects->bClearableWarnings,Value); } return(rv); } WORD GetCopies(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultDigitVariable(pSPCB,Copies,pjlObjects->bCopies, &pjlObjects->Copies)); } WORD SetCopies(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,Copies,pjlObjects->bCopies, pjlObjects->Copies)); } WORD GetCpLock(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bCpLock) { rv = GetDefaultAlphaVariable(pSPCB,CpLock,pjlObjects->bCpLock,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->CpLock = PJL_ON; else pjlObjects->CpLock = PJL_OFF; } } return(rv); } WORD SetCpLock(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bCpLock) { if (pjlObjects->CpLock == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,CpLock,pjlObjects->bCpLock,Value); } return(rv); } WORD GetDensity(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultDigitVariable(pSPCB,Density,pjlObjects->bDensity, &pjlObjects->Density)); } WORD SetDensity(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,Density,pjlObjects->bDensity, pjlObjects->Density)); } WORD GetDiskLock(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bDiskLock) { rv = GetDefaultAlphaVariable(pSPCB,DiskLock,pjlObjects->bDiskLock,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->DiskLock = PJL_ON; else pjlObjects->DiskLock = PJL_OFF; } } return(rv); } WORD SetDiskLock(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bDiskLock) { if (pjlObjects->DiskLock == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,DiskLock,pjlObjects->bDiskLock,Value); } return(rv); } WORD GetDuplex(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bDuplex) { rv = GetDefaultAlphaVariable(pSPCB,Duplex,pjlObjects->bDuplex,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->Duplex = PJL_ON; else pjlObjects->Duplex = PJL_OFF; } } return(rv); } WORD SetDuplex(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bDuplex) { if (pjlObjects->Duplex == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,Duplex,pjlObjects->bDuplex,Value); } return(rv); } WORD GetEconoMode(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bEconoMode) { rv = GetDefaultAlphaVariable(pSPCB,EconoMode,pjlObjects->bEconoMode,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->EconoMode = PJL_ON; else pjlObjects->EconoMode = PJL_OFF; } } return(rv); } WORD SetEconoMode(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bEconoMode) { if (pjlObjects->EconoMode == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,EconoMode,pjlObjects->bEconoMode,Value); } return(rv); } WORD GetFormLines(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultDigitVariable(pSPCB,FormLines,pjlObjects->bFormLines, &pjlObjects->FormLines)); } WORD SetFormLines(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,FormLines,pjlObjects->bFormLines, pjlObjects->FormLines)); } WORD GetImageAdapt(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bImageAdapt) { rv = GetDefaultAlphaVariable(pSPCB,ImageAdapt,pjlObjects->bImageAdapt,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Auto) == 0) pjlObjects->ImageAdapt = PJL_AUTO; else if (lstrcmpA(Value,On) == 0) pjlObjects->ImageAdapt = PJL_ON; else pjlObjects->ImageAdapt = PJL_OFF; } } return(rv); } WORD SetImageAdapt(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bImageAdapt) { if (pjlObjects->ImageAdapt == PJL_AUTO) lstrcpyA(Value,Auto); else if (pjlObjects->ImageAdapt == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,ImageAdapt,pjlObjects->bImageAdapt, Value); } return(rv); } WORD GetIOBufSize(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultDigitVariable(pSPCB,IOBufSize,pjlObjects->bIObuffer, &pjlObjects->IObufSize)); } WORD SetIOBufSize(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,IOBufSize,pjlObjects->bIObuffer, pjlObjects->IObufSize)); } WORD GetIOBuffer(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bIObuffer) { rv = GetDefaultAlphaVariable(pSPCB,IOBuffer,pjlObjects->bIObuffer,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Auto) == 0) pjlObjects->IObuffer = PJL_AUTO; else if (lstrcmpA(Value,On) == 0) pjlObjects->IObuffer = PJL_ON; else pjlObjects->IObuffer = PJL_OFF; if (pjlObjects->IObuffer == PJL_ON) rv = GetIOBufSize(pSPCB,pjlObjects); } } return(rv); } WORD SetIOBuffer(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bIObuffer) { if (pjlObjects->IObuffer == PJL_AUTO) lstrcpyA(Value,Auto); else if (pjlObjects->IObuffer == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,IOBuffer,pjlObjects->bIObuffer,Value); if (rv == RC_SUCCESS && pjlObjects->IObuffer == PJL_ON) rv = SetIOBufSize(pSPCB,pjlObjects); } return(rv); } WORD GetJobOffset(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bJobOffset) { rv = GetDefaultAlphaVariable(pSPCB,JobOffset,pjlObjects->bJobOffset,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->JobOffset = PJL_ON; else pjlObjects->JobOffset = PJL_OFF; } } return(rv); } WORD SetJobOffset(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bJobOffset) { if (pjlObjects->JobOffset == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,JobOffset,pjlObjects->bJobOffset,Value); } return(rv); } WORD GetLang(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultLangVariable(pSPCB,&pjlObjects->Lang,pjlObjects->bLang, pjlObjects->bLangServiceMode)); } WORD SetLang(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultLangVariable(pSPCB,pjlObjects->Lang,pjlObjects->bLang, pjlObjects->bLangServiceMode)); } WORD GetManualFeed(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bManualFeed) { rv = GetDefaultAlphaVariable(pSPCB,ManualFeed,pjlObjects->bManualFeed,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->ManualFeed = PJL_ON; else pjlObjects->ManualFeed = PJL_OFF; } } return(rv); } WORD SetManualFeed(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bManualFeed) { if (pjlObjects->ManualFeed == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,ManualFeed,pjlObjects->bManualFeed, Value); } return(rv); } WORD GetOrientation(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bOrientation) { rv = GetDefaultAlphaVariable(pSPCB,Orientation,pjlObjects->bOrientation, Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Portrait) == 0) pjlObjects->Orientation = PJL_PORTRAIT; else pjlObjects->Orientation = PJL_LANDSCAPE; } } return(rv); } WORD SetOrientation(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bOrientation) { if (pjlObjects->Orientation == PJL_PORTRAIT) lstrcpyA(Value,Portrait); else lstrcpyA(Value,Landscape); rv = SetDefaultAlphaVariable(pSPCB,Orientation,pjlObjects->bOrientation, Value); } return(rv); } WORD GetOutbin(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bOutbin) { rv = GetDefaultAlphaVariable(pSPCB,Outbin,pjlObjects->bOutbin,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Upper) == 0) pjlObjects->Outbin = PJL_UPPER; else pjlObjects->Outbin = PJL_LOWER; } } return(rv); } WORD SetOutbin(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bOutbin) { if (pjlObjects->Outbin == PJL_UPPER) lstrcpyA(Value,Upper); else lstrcpyA(Value,Lower); rv = SetDefaultAlphaVariable(pSPCB,Outbin,pjlObjects->bOutbin,Value); } return(rv); } WORD GetPageProtect(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPageProtect) { rv = GetDefaultAlphaDigitVariable(pSPCB,PageProtect,pjlObjects->bPageProtect, Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Auto) == 0) pjlObjects->PageProtect = PJL_AUTO; else if (lstrcmpA(Value,Off) == 0) pjlObjects->PageProtect = PJL_OFF; else if (lstrcmpA(Value,Letter) == 0) pjlObjects->PageProtect = PJL_LETTER; else if (lstrcmpA(Value,Legal) == 0) pjlObjects->PageProtect = PJL_LEGAL; else if (lstrcmpA(Value,A4) == 0) pjlObjects->PageProtect = PJL_A4; else pjlObjects->PageProtect = PJL_ON; } } return(rv); } WORD SetPageProtect(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPageProtect) { switch (pjlObjects->PageProtect) { case PJL_AUTO: lstrcpyA(Value,AUTO); break; case PJL_OFF: lstrcpyA(Value,OFF); break; case PJL_LETTER: lstrcpyA(Value,LETTER); break; case PJL_LEGAL: lstrcpyA(Value,LEGAL); break; case PJL_A4: lstrcpyA(Value,A4); break; case PJL_ON: lstrcpyA(Value,ON); break; default: lstrcpyA(Value,""); break; } rv = SetDefaultAlphaVariable(pSPCB,PageProtect,pjlObjects->bPageProtect, Value); } return(rv); } WORD GetPaper(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPaper) { rv = GetDefaultAlphaDigitVariable(pSPCB,Paper,pjlObjects->bPaper,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Letter) == 0) pjlObjects->Paper = PJL_LETTER; else if (lstrcmpA(Value,Legal) == 0) pjlObjects->Paper = PJL_LEGAL; else if (lstrcmpA(Value,A4) == 0) pjlObjects->Paper = PJL_A4; else if (lstrcmpA(Value,Executive) == 0) pjlObjects->Paper = PJL_EXECUTIVE; else if (lstrcmpA(Value,Com10) == 0) pjlObjects->Paper = PJL_COM10; else if (lstrcmpA(Value,Monarch) == 0) pjlObjects->Paper = PJL_MONARCH; else if (lstrcmpA(Value,C5) == 0) pjlObjects->Paper = PJL_C5; else if (lstrcmpA(Value,DL) == 0) pjlObjects->Paper = PJL_DL; else if (lstrcmpA(Value,B5) == 0) pjlObjects->Paper = PJL_B5; else pjlObjects->Paper = PJL_CUSTOM; } } return(rv); } WORD SetPaper(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPaper) { switch (pjlObjects->Paper) { case PJL_LETTER: lstrcpyA(Value,Letter); break; case PJL_LEGAL: lstrcpyA(Value,Legal); break; case PJL_A4: lstrcpyA(Value,A4); break; case PJL_EXECUTIVE: lstrcpyA(Value,Executive); break; case PJL_COM10: lstrcpyA(Value,Com10); break; case PJL_MONARCH: lstrcpyA(Value,Monarch); break; case PJL_C5: lstrcpyA(Value,C5); break; case PJL_DL: lstrcpyA(Value,DL); break; case PJL_B5: lstrcpyA(Value,B5); break; case PJL_CUSTOM: lstrcpyA(Value,Custom); break; default: lstrcpyA(Value,""); break; } rv = SetDefaultAlphaVariable(pSPCB,Paper,pjlObjects->bPaper,Value); } return(rv); } WORD GetPassword(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPassWord) { rv = GetDefaultAlphaVariable(pSPCB,Password,pjlObjects->bPassWord,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Enable) == 0) pjlObjects->PassWord = PJL_ENABLE; else pjlObjects->PassWord = PJL_DISABLE; } } return(rv); } WORD SetPassword(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; if (pjlObjects->bPassWord) { rv = SetDefaultDigitVariable(pSPCB,Password,pjlObjects->bPassWord, pjlObjects->NewPassWord); if (rv == RC_SUCCESS) pjlObjects->CurPassWord = pjlObjects->NewPassWord; } return(rv); } WORD GetPersonality(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPersonality) { rv = GetDefaultAlphaVariable(pSPCB,Personality,pjlObjects->bPersonality, Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Auto) == 0) pjlObjects->Personality = PJL_AUTO; else if (lstrcmpA(Value,PCL) == 0) pjlObjects->Personality = PJL_PCL; else pjlObjects->Personality = PJL_POSTSCRIPT; } } return(rv); } WORD SetPersonality(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPersonality) { if (pjlObjects->Personality == PJL_AUTO) lstrcpyA(Value,Auto); else if (pjlObjects->Personality == PJL_PCL) lstrcpyA(Value,PCL); else lstrcpyA(Value,Postscript); rv = SetDefaultAlphaVariable(pSPCB,Personality,pjlObjects->bPersonality, Value); } return(rv); } WORD GetPowerSaveTime(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; DWORD Value; if (pjlObjects->bPowerSave) { rv = GetDefaultDigitVariable(pSPCB,PowerSaveTime,pjlObjects->bPowerSave, &Value); if (rv == RC_SUCCESS) { if (Value == 15) pjlObjects->PowerSave = PJL_15; else if (Value == 30) pjlObjects->PowerSave = PJL_30; else if (Value == 60) pjlObjects->PowerSave = PJL_60; else if (Value == 120) pjlObjects->PowerSave = PJL_120; else pjlObjects->PowerSave = PJL_180; } } return(rv); } WORD SetPowerSaveTime(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; DWORD Value; if (pjlObjects->bPowerSave) { if (pjlObjects->PowerSave == PJL_15) Value = 15; else if (pjlObjects->PowerSave == PJL_30) Value = 30; else if (pjlObjects->PowerSave == PJL_60) Value = 60; else if (pjlObjects->PowerSave == PJL_120) Value = 120; else Value = 180; rv = SetDefaultDigitVariable(pSPCB,PowerSaveTime,pjlObjects->bPowerSave, Value); } return(rv); } WORD GetPowerSave(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPowerSave) { rv = GetDefaultAlphaVariable(pSPCB,PowerSave,pjlObjects->bPowerSave,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) rv = GetPowerSaveTime(pSPCB,pjlObjects); else pjlObjects->PowerSave = PJL_OFF; } } return(rv); } WORD SetPowerSave(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPowerSave) { if (pjlObjects->PowerSave != PJL_OFF) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,PowerSave,pjlObjects->bPowerSave,Value); if (rv == RC_SUCCESS && pjlObjects->PowerSave != PJL_OFF) rv = SetPowerSaveTime(pSPCB,pjlObjects); } return(rv); } WORD GetResolution(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultDigitVariable(pSPCB,Resolution,pjlObjects->bResolution, &pjlObjects->Resolution)); } WORD SetResolution(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,Resolution,pjlObjects->bResolution, pjlObjects->Resolution)); } WORD GetPCLResSaveSize(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultDigitVariable(pSPCB,PCLResSaveSize, pjlObjects->bPCLResSaveSize, &pjlObjects->PCLResSaveSize)); } WORD SetPCLResSaveSize(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,PCLResSaveSize, pjlObjects->bPCLResSaveSize, pjlObjects->PCLResSaveSize)); } WORD GetPSResSaveSize(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultDigitVariable(pSPCB,PSResSaveSize, pjlObjects->bPSResSaveSize, &pjlObjects->PSResSaveSize)); } WORD SetPSResSaveSize(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,PSResSaveSize, pjlObjects->bPSResSaveSize, pjlObjects->PSResSaveSize)); } WORD GetResourceSave(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bResourceSave) { rv = GetDefaultAlphaVariable(pSPCB,ResourceSave,pjlObjects->bResourceSave, Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Auto) == 0) pjlObjects->ResourceSave = PJL_AUTO; else if (lstrcmpA(Value,On) == 0) pjlObjects->ResourceSave = PJL_ON; else pjlObjects->ResourceSave = PJL_OFF; if (pjlObjects->ResourceSave == PJL_ON && (rv = GetPCLResSaveSize(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetPSResSaveSize(pSPCB,pjlObjects)) == RC_SUCCESS); } } return(rv); } WORD SetResourceSave(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bResourceSave) { if (pjlObjects->ResourceSave == PJL_AUTO) lstrcpyA(Value,Auto); else if (pjlObjects->ResourceSave == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,ResourceSave,pjlObjects->bResourceSave, Value); if (rv == RC_SUCCESS && pjlObjects->ResourceSave == PJL_ON && (rv = SetPCLResSaveSize(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetPSResSaveSize(pSPCB,pjlObjects)) == RC_SUCCESS); } return(rv); } WORD GetRET(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bRET) { rv = GetDefaultAlphaVariable(pSPCB,RET,pjlObjects->bRET,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Medium) == 0) pjlObjects->RET = PJL_MEDIUM; else if (lstrcmpA(Value,On) == 0) pjlObjects->RET = PJL_ON; else if (lstrcmpA(Value,Light) == 0) pjlObjects->RET = PJL_LIGHT; else if (lstrcmpA(Value,Dark) == 0) pjlObjects->RET = PJL_DARK; else pjlObjects->RET = PJL_OFF; } } return(rv); } WORD SetRET(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bRET) { switch (pjlObjects->RET) { case PJL_MEDIUM: lstrcpyA(Value,Medium); break; case PJL_ON: lstrcpyA(Value,On); break; case PJL_LIGHT: lstrcpyA(Value,Light); break; case PJL_DARK: lstrcpyA(Value,Dark); break; case PJL_OFF: lstrcpyA(Value,Off); break; default: lstrcpyA(Value,""); break; } rv = SetDefaultAlphaVariable(pSPCB,RET,pjlObjects->bRET,Value); } return(rv); } WORD GetTimeout(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(GetDefaultDigitVariable(pSPCB,Timeout,pjlObjects->bTimeout, &pjlObjects->Timeout)); } WORD SetTimeout(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,Timeout,pjlObjects->bTimeout, pjlObjects->Timeout)); } WORD GetJamRecovery(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bJamRecovery) { rv = GetDefaultAlphaVariable(pSPCB,JamRecovery,pjlObjects->bJamRecovery, Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->JamRecovery = PJL_ON; else pjlObjects->JamRecovery = PJL_OFF; } } return(rv); } WORD SetJamRecovery(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bJamRecovery) { if (pjlObjects->JamRecovery == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,JamRecovery,pjlObjects->bJamRecovery, Value); } return(rv); } WORD GetPrintPSerrors(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPrintPSerrors) { rv = GetDefaultAlphaVariable(pSPCB,PrintPSerrors,pjlObjects->bPrintPSerrors, Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,On) == 0) pjlObjects->PrintPSerrors = PJL_ON; else pjlObjects->PrintPSerrors = PJL_OFF; } } return(rv); } WORD SetPrintPSerrors(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPrintPSerrors) { if (pjlObjects->PrintPSerrors == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,PrintPSerrors,pjlObjects->bPrintPSerrors, Value); } return(rv); } WORD GetAvailMemory(PSPCB pSPCB,LPPJLobjects pjlObjects) { char str[32]; pjlObjects->bAvailMemory = FALSE; GetInfoDigitStr(str,pSPCB->InfoMemoryBuf,Total); pjlObjects->AvailMemory = atol(str); return(RC_SUCCESS); } WORD SetAvailMemory(PSPCB pSPCB,LPPJLobjects pjlObjects) { return(SetDefaultDigitVariable(pSPCB,AvailMemory,pjlObjects->bAvailMemory, pjlObjects->AvailMemory)); } WORD GetMPTray(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bMPTray) { rv = GetDefaultAlphaVariable(pSPCB,MPTray,pjlObjects->bMPTray,Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,First) == 0) pjlObjects->MPTray = PJL_FIRST; else if (lstrcmpA(Value,Cassette) == 0) pjlObjects->MPTray = PJL_CASSETTE; else pjlObjects->MPTray = PJL_MANUAL; } } return(rv); } WORD SetMPTray(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bMPTray) { if (pjlObjects->MPTray == PJL_FIRST) lstrcpyA(Value,First); else if (pjlObjects->MPTray == PJL_CASSETTE) lstrcpyA(Value,Cassette); else lstrcpyA(Value,Manual); rv = SetDefaultAlphaVariable(pSPCB,MPTray,pjlObjects->bMPTray,Value); } return(rv); } WORD GetPSAdobeMBT(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPSAdobeMBT) { rv = GetDefaultAlphaVariable(pSPCB,PSAdobeMBT,pjlObjects->bPSAdobeMBT, Value); if (rv == RC_SUCCESS) { if (lstrcmpA(Value,Auto) == 0) pjlObjects->PSAdobeMBT = PJL_AUTO; else if (lstrcmpA(Value,On) == 0) pjlObjects->PSAdobeMBT = PJL_ON; else pjlObjects->PSAdobeMBT = PJL_OFF; } } return(rv); } WORD SetPSAdobeMBT(PSPCB pSPCB,LPPJLobjects pjlObjects) { WORD rv = RC_SUCCESS; char Value[32]; if (pjlObjects->bPSAdobeMBT) { if (pjlObjects->PSAdobeMBT == PJL_AUTO) lstrcpyA(Value,Auto); else if (pjlObjects->PSAdobeMBT == PJL_ON) lstrcpyA(Value,On); else lstrcpyA(Value,Off); rv = SetDefaultAlphaVariable(pSPCB,PSAdobeMBT,pjlObjects->bPSAdobeMBT, Value); } return(rv); } WORD SetTestPageLang(PSPCB pSPCB,LPPJLtestpages pjlTestPages) { return(SetCurrentLangVariable(pSPCB,pjlTestPages->Lang,pjlTestPages->bLang, pjlTestPages->bLangServiceMode)); } WORD SetSelfTest(PSPCB pSPCB,LPPJLtestpages pjlTestPages) { return(SetCurrentAlphaVariable(pSPCB,TestPage,pjlTestPages->bSelfTest, SelfTest)); } WORD SetContSelfTest(PSPCB pSPCB,LPPJLtestpages pjlTestPages) { return(SetCurrentAlphaVariable(pSPCB,TestPage,pjlTestPages->bContSelfTest, ContSelfTest)); } WORD SetPCLTypeList(PSPCB pSPCB,LPPJLtestpages pjlTestPages) { return(SetCurrentAlphaVariable(pSPCB,TestPage,pjlTestPages->bPCLTypeList, PCLTypeList)); } WORD SetPCLDemoPage(PSPCB pSPCB,LPPJLtestpages pjlTestPages) { return(SetCurrentAlphaVariable(pSPCB,TestPage,pjlTestPages->bPCLDemoPage, PCLDemoPage)); } WORD SetPSConfigPage(PSPCB pSPCB,LPPJLtestpages pjlTestPages) { return(SetCurrentAlphaVariable(pSPCB,TestPage,pjlTestPages->bPSConfigPage, PSConfigPage)); } WORD SetPSTypefaceList(PSPCB pSPCB,LPPJLtestpages pjlTestPages) { return(SetCurrentAlphaVariable(pSPCB,TestPage,pjlTestPages->bPSTypefaceList, PSTypefaceList)); } WORD SetPSDemoPage(PSPCB pSPCB,LPPJLtestpages pjlTestPages) { return(SetCurrentAlphaVariable(pSPCB,TestPage,pjlTestPages->bPSDemoPage, PSDemoPage)); } WORD GetDisplay(PSPCB pSPCB,LPSTR DisplayBuf,BOOL bPollPort) { WORD rv; BOOL bCheckDisplay; char str[64]; if (bPollPort) bCheckDisplay = PJLGetMessage(pSPCB,NULL,NULL) != PJL_ERROR; else bCheckDisplay = TRUE; if (bCheckDisplay && pSPCB->StatusLen != 0) { pSPCB->StatusBuf[pSPCB->StatusLen] = '\0'; GetDisplayAlphaStr(str,pSPCB->StatusBuf,DISPLAY); lstrcpyA(DisplayBuf,str); rv = RC_SUCCESS; } else { *DisplayBuf = '\0'; rv = RC_FAILURE; } return(rv); } WORD GetStatus(PSPCB pSPCB,LPLONG StatusCode,BOOL bPollPort) { WORD rv; BOOL bCheckStatus; char str[32]; if (bPollPort) bCheckStatus = PJLGetMessage(pSPCB,NULL,NULL) != PJL_ERROR; else bCheckStatus = TRUE; if (bCheckStatus && pSPCB->StatusLen != 0) { pSPCB->StatusBuf[pSPCB->StatusLen] = '\0'; GetInfoDigitStr(str,pSPCB->StatusBuf,CODE2); *StatusCode = atol(str); rv = RC_SUCCESS; } else { *StatusCode = 0; rv = RC_FAILURE; } return(rv); } WORD GetDeviceStatus(PSPCB pSPCB,LPDEVSTATE lpDeviceStatus,BOOL bPollPort) { WORD rv; if (bPollPort) PJLGetMessage(pSPCB,NULL,NULL); if (lpDeviceStatus->nBytes >= pSPCB->DeviceState.nBytes) { *lpDeviceStatus = pSPCB->DeviceState; pSPCB->DeviceState.bStatusAvail = FALSE; rv = RC_SUCCESS; } else rv = RC_FAILURE; return(rv); } //--------------------------------------------------------------------------- // interface functions for printer configuration //--------------------------------------------------------------------------- void CFGInit(void) { srand((UINT) time(NULL)); nEchoCount = rand(); } PORTHANDLE CFGOpenPort(HPERIPHERAL hPeripheral,DWORD nWriteTimeout, DWORD nReadTimeout,WORD nReadRetry) { PORTHANDLE hPort; PSPCB pSPCB; TCHAR szPortName[32]; DWORD PortNameSize; TRACE0(TEXT("--CFGOpenPort\r\n")); PortNameSize = sizeof(szPortName); DBGetLocalPort(hPeripheral,szPortName,&PortNameSize); if ((hPort = FindHandle(szPortName)) == INVALID_PORTHANDLE) return(INVALID_PORTHANDLE); pSPCB = &SPCBTable[hPort]; if (OpenPort(hPeripheral,PORT_OWN_CFG | PORT_EXCLUSIVE,pSPCB)) { TRACE0(TEXT("--CFGOpenPort: OpenPort failed\r\n")); return(INVALID_PORTHANDLE); } if (AllocReqRepBufs(pSPCB)) { TRACE0(TEXT("--CFGOpenPort: Unable to allocate and lock memory\r\n")); return(INVALID_PORTHANDLE); } pSPCB->nWriteTimeout = nWriteTimeout; pSPCB->nReadTimeout = nReadTimeout; pSPCB->nReadRetry = nReadRetry; return(hPort); } WORD CFGClosePort(PORTHANDLE hPort) { PSPCB pSPCB; TRACE0(TEXT("--CFGClosePort\r\n")); if (hPort <= 0 || hPort > MAXSPCB) { TRACE0(TEXT("--CFGClosePort: Bad parameter\r\n")); return(RC_FAILURE); } pSPCB = &SPCBTable[hPort]; FreeReqRepBufs(pSPCB); if (ClosePort(PORT_OWN_CFG | PORT_EXCLUSIVE,pSPCB)) { TRACE0(TEXT("--CFGClosePort: ClosePort failed\r\n")); return(RC_FAILURE); } return(RC_SUCCESS); } WORD CFGGetCapabilities(HPERIPHERAL hPeripheral,LPPeripheralCaps periphCaps, BOOL bLocked) { PORTHANDLE hPort; PSPCB pSPCB; WORD rv = RC_FAILURE; TRACE0(TEXT("--CFGGetCapabilities\r\n")); if (!bLocked) return(rv); if ((hPort = CFGOpenPort(hPeripheral,5000,5000,2)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; if (AllocInfoBufs(pSPCB)) { TRACE0(TEXT("--CFGGetCapabilities: Unable to allocate and lock memory\r\n")); return(rv); } periphCaps->flags = 0; if ((rv = SetJobStart(pSPCB,0)) == RC_SUCCESS) { if ((rv = SetGetEcho(pSPCB,GETTING_CONFIG)) != RC_SUCCESS) SetJobEnd(pSPCB); } if (rv == RC_SUCCESS && (rv = GetInfoConfig(pSPCB)) == RC_SUCCESS && (rv = GetMemoryCaps(pSPCB,periphCaps)) == RC_SUCCESS && (rv = GetLanguagesCaps(pSPCB,periphCaps)) == RC_SUCCESS && (rv = GetDuplexCaps(pSPCB,periphCaps)) == RC_SUCCESS); if (rv == RC_SUCCESS) rv = SetJobEnd(pSPCB); FreeInfoBufs(pSPCB); CFGClosePort(hPort); } return(rv); } WORD CFGGetDrvObjects(HPERIPHERAL hPeripheral,LPDRVobjects drvObjects, BOOL bLocked) { PORTHANDLE hPort; PSPCB pSPCB; PJLobjects pjlObjects; WORD rv = RC_FAILURE; TRACE0(TEXT("--CFGGetDrvObjects\r\n")); if (!bLocked) return(rv); if ((hPort = CFGOpenPort(hPeripheral,5000,5000,2)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; if (AllocInfoBufs(pSPCB)) { TRACE0(TEXT("--CFGGetDrvObjects: Unable to allocate and lock memory\r\n")); return(rv); } pSPCB->InfoBuf[0] = '\0'; pjlObjects.bAvailMemory = TRUE; pjlObjects.bMPTray = TRUE; if ((rv = EnterPersonality(pSPCB,PCL)) == RC_SUCCESS && (rv = SetJobStart(pSPCB,0)) == RC_SUCCESS) { if ((rv = SetGetEcho(pSPCB,GETTING_CONFIG)) != RC_SUCCESS) SetJobEnd(pSPCB); } if (rv == RC_SUCCESS && (rv = GetInfoMemory(pSPCB)) == RC_SUCCESS && (rv = GetAvailMemory(pSPCB,&pjlObjects)) == RC_SUCCESS && (rv = GetMPTray(pSPCB,&pjlObjects)) == RC_SUCCESS); if (rv == RC_SUCCESS) rv = SetJobEnd(pSPCB); drvObjects->AvailMemory = pjlObjects.AvailMemory; drvObjects->MPTray = pjlObjects.MPTray; FreeInfoBufs(pSPCB); CFGClosePort(hPort); } return(rv); } WORD CFGGetObjects(HPERIPHERAL hPeripheral,LPPJLobjects pjlObjects, BOOL bLocked) { PORTHANDLE hPort; PSPCB pSPCB; WORD rv = RC_FAILURE; TRACE0(TEXT("--CFGGetObjects\r\n")); if (!bLocked) return(rv); if ((hPort = CFGOpenPort(hPeripheral,5000,5000,2)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; if (AllocInfoBufs(pSPCB)) { TRACE0(TEXT("--CFGGetObjects: Unable to allocate and lock memory\r\n")); return(rv); } if ((rv = EnterPersonality(pSPCB,PCL)) == RC_SUCCESS && (rv = SetJobStart(pSPCB,0)) == RC_SUCCESS) { if ((rv = SetGetEcho(pSPCB,GETTING_CONFIG)) != RC_SUCCESS) SetJobEnd(pSPCB); } if (rv == RC_SUCCESS && (rv = GetInfoVariables(pSPCB)) == RC_SUCCESS && (rv = GetInfoMemory(pSPCB)) == RC_SUCCESS && (rv = GetAutoCont(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetBinding(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetClearableWarnings(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetCopies(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetCpLock(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetDensity(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetDiskLock(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetDuplex(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetEconoMode(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetFormLines(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetImageAdapt(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetIOBuffer(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetJobOffset(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetLang(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetManualFeed(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetOrientation(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetOutbin(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetPageProtect(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetPaper(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetPassword(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetPersonality(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetPowerSave(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetResolution(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetResourceSave(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetRET(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetTimeout(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetJamRecovery(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetPrintPSerrors(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetAvailMemory(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetMPTray(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = GetPSAdobeMBT(pSPCB,pjlObjects)) == RC_SUCCESS); if (rv == RC_SUCCESS) rv = SetJobEnd(pSPCB); FreeInfoBufs(pSPCB); CFGClosePort(hPort); } return(rv); } WORD CFGSetObjects(HPERIPHERAL hPeripheral,LPPJLobjects pjlObjects, DWORD nSetDelay,BOOL bLocked) { PORTHANDLE hPort; PSPCB pSPCB; BOOL JobActive; DWORD nDelay; WORD rv = RC_FAILURE; TRACE0(TEXT("--CFGSetObjects\r\n")); if (!bLocked) return(rv); if ((hPort = CFGOpenPort(hPeripheral,5000,5000,2)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; JobActive = pjlObjects->bAutoCont || pjlObjects->bBinding || pjlObjects->bClearableWarnings || pjlObjects->bCopies || pjlObjects->bCpLock || pjlObjects->bDensity || pjlObjects->bDiskLock || pjlObjects->bDuplex || pjlObjects->bEconoMode || pjlObjects->bFormLines || pjlObjects->bImageAdapt || pjlObjects->bJobOffset || pjlObjects->bLang || pjlObjects->bManualFeed || pjlObjects->bOrientation || pjlObjects->bOutbin || pjlObjects->bPageProtect || pjlObjects->bPaper || pjlObjects->bPassWord || pjlObjects->bPersonality || pjlObjects->bPowerSave || pjlObjects->bResolution || pjlObjects->bResourceSave || pjlObjects->bPCLResSaveSize || pjlObjects->bPSResSaveSize || pjlObjects->bRET || pjlObjects->bTimeout || pjlObjects->bJamRecovery || pjlObjects->bPrintPSerrors || pjlObjects->bAvailMemory || pjlObjects->bMPTray || pjlObjects->bPSAdobeMBT || pjlObjects->bMPTray; if (JobActive && (rv = SetJobStart(pSPCB,pjlObjects->CurPassWord)) == RC_SUCCESS) { if ((rv = SetEcho(pSPCB,SETTING_CONFIG)) != RC_SUCCESS) SetJobEnd(pSPCB); } if (JobActive && rv == RC_SUCCESS && (rv = SetAutoCont(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetBinding(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetClearableWarnings(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetCopies(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetCpLock(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetDensity(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetDiskLock(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetDuplex(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetEconoMode(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetFormLines(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetImageAdapt(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetJobOffset(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetLang(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetManualFeed(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetOrientation(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetOutbin(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetPageProtect(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetPaper(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetPassword(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetPersonality(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetPowerSave(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetResolution(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetResourceSave(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetRET(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetTimeout(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetJamRecovery(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetPrintPSerrors(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetAvailMemory(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetMPTray(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetPSAdobeMBT(pSPCB,pjlObjects)) == RC_SUCCESS); if (JobActive && rv == RC_SUCCESS) rv = SetJobEnd(pSPCB); if (rv == RC_SUCCESS && pjlObjects->bIObuffer) { if ((rv = SetJobStart(pSPCB,pjlObjects->CurPassWord)) == RC_SUCCESS && (rv = SetIOBuffer(pSPCB,pjlObjects)) == RC_SUCCESS && (rv = SetEcho(pSPCB,SETTING_IO_BUFFER)) == RC_SUCCESS && (rv = SetJobEnd(pSPCB)) == RC_SUCCESS && pSPCB->bTwoWay && (rv = GetEcho(pSPCB,SETTING_IO_BUFFER)) == RC_SUCCESS); if (rv == RC_SUCCESS) { nDelay = GetTickCount(); while (GetTickCount() - nDelay < nSetDelay) { WindowsYield(YIELD_NOW,NULL); } } } if (rv == RC_SUCCESS && (pjlObjects->bResourceSave || pjlObjects->bPCLResSaveSize || pjlObjects->bPSResSaveSize)) { nDelay = GetTickCount(); while (GetTickCount() - nDelay < nSetDelay) { WindowsYield(YIELD_NOW,NULL); } } CFGClosePort(hPort); } return(rv); } WORD CFGSetTestPages(HPERIPHERAL hPeripheral,LPPJLtestpages pjlTestPages, BOOL bLocked) { PORTHANDLE hPort; PSPCB pSPCB; BOOL JobActive; WORD rv = RC_FAILURE; TRACE0(TEXT("--CFGSetTestPages\r\n")); if (!bLocked) return(rv); if ((hPort = CFGOpenPort(hPeripheral,5000,5000,2)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; JobActive = pjlTestPages->bLang || pjlTestPages->bSelfTest || pjlTestPages->bContSelfTest || pjlTestPages->bPCLTypeList || pjlTestPages->bPCLDemoPage || pjlTestPages->bPSConfigPage || pjlTestPages->bPSTypefaceList || pjlTestPages->bPSDemoPage; if (JobActive && (rv = SetJobStart(pSPCB,0)) == RC_SUCCESS) { if ((rv = SetEcho(pSPCB,SETTING_TEST_PAGES)) != RC_SUCCESS) SetJobEnd(pSPCB); } if (JobActive && rv == RC_SUCCESS && (rv = SetTestPageLang(pSPCB,pjlTestPages)) == RC_SUCCESS && (rv = SetSelfTest(pSPCB,pjlTestPages)) == RC_SUCCESS && (rv = SetContSelfTest(pSPCB,pjlTestPages)) == RC_SUCCESS && (rv = SetPCLTypeList(pSPCB,pjlTestPages)) == RC_SUCCESS && (rv = SetPCLDemoPage(pSPCB,pjlTestPages)) == RC_SUCCESS && (rv = SetPSConfigPage(pSPCB,pjlTestPages)) == RC_SUCCESS && (rv = SetPSTypefaceList(pSPCB,pjlTestPages)) == RC_SUCCESS && (rv = SetPSDemoPage(pSPCB,pjlTestPages)) == RC_SUCCESS); if (JobActive && rv == RC_SUCCESS) rv = SetJobEnd(pSPCB); CFGClosePort(hPort); } return(rv); } WORD CFGRequest(HPERIPHERAL hPeripheral,LPCSTR RequestBuffer,BOOL bLocked) { PORTHANDLE hPort; PSPCB pSPCB; WORD rv = RC_FAILURE; TRACE0(TEXT("--CFGRequest\r\n")); if (!bLocked) return(rv); if ((hPort = CFGOpenPort(hPeripheral,5000,5000,2)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; rv = PJLSetMessage(pSPCB,RequestBuffer); CFGClosePort(hPort); } return(rv); } WORD CFGRequestReply(HPERIPHERAL hPeripheral,LPCSTR RequestBuffer, LPSTR ReplyBuffer,UINT ReplyLength,BOOL bLocked) { PORTHANDLE hPort; PSPCB pSPCB; WORD rv = RC_FAILURE; TRACE0(TEXT("--CFGRequestReply\r\n")); if (!bLocked) return(rv); if ((hPort = CFGOpenPort(hPeripheral,5000,5000,2)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; rv = PJLRequestor(pSPCB,RequestBuffer,ReplyBuffer,ReplyLength,TRUE); CFGClosePort(hPort); } return(rv); } //--------------------------------------------------------------------------- // interface functions for printer status //--------------------------------------------------------------------------- PORTHANDLE STAOpenPort(HPERIPHERAL hPeripheral,BOOL bLocked, LPBOOL lpbOpenPort,LPBOOL lpbPollPort) { PORTHANDLE hPort; PSPCB pSPCB; TCHAR szPortName[32]; DWORD PortNameSize; TRACE0(TEXT("--STAOpenPort\r\n")); PortNameSize = sizeof(szPortName); DBGetLocalPort(hPeripheral,szPortName,&PortNameSize); if ((hPort = FindHandle(szPortName)) == INVALID_PORTHANDLE) return(INVALID_PORTHANDLE); pSPCB = &SPCBTable[hPort]; if (bLocked) { // any owners ? if (pSPCB->bPortOwner == 0) { if (OpenPort(hPeripheral,PORT_OWN_STATUS,pSPCB)) *lpbOpenPort = *lpbPollPort = FALSE; else *lpbOpenPort = *lpbPollPort = TRUE; } else { *lpbOpenPort = FALSE; #ifdef WIN32 *lpbPollPort = FALSE; #else *lpbPollPort = (pSPCB->bPortOwner & PORT_EXCLUSIVE) == 0; #endif } } else *lpbOpenPort = *lpbPollPort = FALSE; return(hPort); } WORD STAClosePort(PORTHANDLE hPort) { PSPCB pSPCB; TRACE0(TEXT("--STAClosePort\r\n")); if (hPort <= 0 || hPort > MAXSPCB) { TRACE0(TEXT("--STAClosePort: Bad parameter\r\n")); return(RC_FAILURE); } pSPCB = &SPCBTable[hPort]; if (ClosePort(PORT_OWN_STATUS,pSPCB)) { TRACE0(TEXT("--STAClosePort: ClosePort failed\r\n")); return(RC_FAILURE); } return(RC_SUCCESS); } WORD STAGetDisplay(HPERIPHERAL hPeripheral,LPTSTR DisplayBuffer,BOOL bLocked) { PORTHANDLE hPort; BOOL bOpenPort; BOOL bPollPort; PSPCB pSPCB; WORD rv = RC_FAILURE; char szDisplay[64]; TRACE0(TEXT("--STAGetDisplay\r\n")); if ((hPort = STAOpenPort(hPeripheral,bLocked,&bOpenPort,&bPollPort)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; rv = GetDisplay(pSPCB,szDisplay,bPollPort); // Wide the string for pal object MBCS_TO_UNICODE(DisplayBuffer, 64, szDisplay); if (bOpenPort) STAClosePort(hPort); } return(rv); } WORD STAGetStatus(HPERIPHERAL hPeripheral,LPDWORD Status,BOOL bLocked) { PORTHANDLE hPort; BOOL bOpenPort; BOOL bPollPort; PSPCB pSPCB; LONG StatusCode; WORD rv = RC_FAILURE; TRACE0(TEXT("--STAGetStatus\r\n")); if ((hPort = STAOpenPort(hPeripheral,bLocked,&bOpenPort,&bPollPort)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; rv = GetStatus(pSPCB,(LPLONG) &StatusCode,bPollPort); if (rv == RC_SUCCESS) { switch (StatusCode) { case PJL_READY: case PJL_MIO_NOT_READY: *Status = ASYNCH_ONLINE; break; case PJL_WARMUP: *Status = ASYNCH_WARMUP; break; case PJL_PROCESSING_JOB: case PJL_DATA_RECEIVED: case PJL_PROCESSING_FF: *Status = ASYNCH_PRINTING; break; case PJL_CANCELING_JOB: *Status = ASYNCH_BUSY; break; case PJL_RESET: *Status = ASYNCH_RESET; break; case PJL_TONER_LOW: *Status = ASYNCH_TONER_LOW; break; case PJL_CONFIG_TEST: case PJL_FONT_LIST: case PJL_DEMO_PAGE: case PJL_CONFIG_PAGE: case PJL_SELF_TEST: *Status = ASYNCH_PRINTING_TEST_PAGE; break; case PJL_MEM_OUT: *Status = ASYNCH_MEMORY_OUT; break; case PJL_OVERRUN: *Status = ASYNCH_PAGE_PUNT; break; case PJL_DOOR_OPEN: *Status = ASYNCH_DOOR_OPEN; break; case PJL_PAPER_JAM: *Status = ASYNCH_PAPER_JAM; break; case PJL_LOW_TONER: *Status = ASYNCH_TONER_GONE; break; case PJL_OFFLINE: *Status = ASYNCH_OFFLINE; break; case PJL_POWERSAVE: *Status = ASYNCH_POWERSAVE_MODE; break; default: if (PJL_CATEGORY(StatusCode) == PJL_CATEGORY_SLEEP) *Status = ASYNCH_ONLINE; else if (PJL_CATEGORY(StatusCode) == PJL_CATEGORY_INTERVENTION) *Status = ASYNCH_INTERVENTION; else if (PJL_CATEGORY(StatusCode) == PJL_CATEGORY_INFO_PM || PJL_CATEGORY(StatusCode) == PJL_CATEGORY_PAPER) { if (PJL_STATCODE(StatusCode) >= 100 && PJL_STATCODE(StatusCode) <= 199) *Status = ASYNCH_MANUAL_FEED; else *Status = ASYNCH_PAPER_OUT; } else *Status = ASYNCH_STATUS_UNKNOWN; break; } } else *Status = ASYNCH_STATUS_UNAVAILABLE; if (bOpenPort) STAClosePort(hPort); } return(rv); } WORD STAGetDeviceStatus(HPERIPHERAL hPeripheral,LPDEVSTATE lpDeviceStatus, BOOL bLocked) { PORTHANDLE hPort; BOOL bOpenPort; BOOL bPollPort; PSPCB pSPCB; WORD rv = RC_FAILURE; TRACE0(TEXT("--STAGetDeviceStatus\r\n")); if ((hPort = STAOpenPort(hPeripheral,bLocked,&bOpenPort,&bPollPort)) != INVALID_PORTHANDLE) { pSPCB = &SPCBTable[hPort]; rv = GetDeviceStatus(pSPCB,lpDeviceStatus,bPollPort); if (bOpenPort) STAClosePort(hPort); } return(rv); }