summaryrefslogtreecommitdiff
path: root/prnt/hpijs/dj9xxvip.h
diff options
context:
space:
mode:
Diffstat (limited to 'prnt/hpijs/dj9xxvip.h')
-rw-r--r--prnt/hpijs/dj9xxvip.h417
1 files changed, 417 insertions, 0 deletions
diff --git a/prnt/hpijs/dj9xxvip.h b/prnt/hpijs/dj9xxvip.h
new file mode 100644
index 0000000..07563fc
--- /dev/null
+++ b/prnt/hpijs/dj9xxvip.h
@@ -0,0 +1,417 @@
+/*****************************************************************************\
+ dj9xxvip.h : Interface for the DJ9xxVIP class
+
+ Copyright (c) 1996 - 2002, Hewlett-Packard Co.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of Hewlett-Packard nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ TO, PATENT INFRINGEMENT; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+\*****************************************************************************/
+
+
+#ifndef APDK_DJ9XXVIP_H
+#define APDK_DJ9XXVIP_H
+
+APDK_BEGIN_NAMESPACE
+
+//extern char *ModelString[MAX_ID_STRING];
+
+/*!
+\internal
+*/
+class DJ9xxVIP : public Printer
+{
+public:
+ DJ9xxVIP(SystemServices* pSS, BOOL proto=FALSE);
+
+ Header* SelectHeader(PrintContext* pc);
+ DRIVER_ERROR VerifyPenInfo();
+ DRIVER_ERROR ParsePenInfo(PEN_TYPE& ePen, BOOL QueryPrinter=TRUE);
+ DISPLAY_STATUS ParseError(BYTE status_reg);
+
+ Compressor* CreateCompressor(unsigned int RasterSize);
+
+ virtual BOOL UseGUIMode(PrintMode* pPrintMode);
+ BOOL UseCMYK(unsigned int iPrintMode) { return FALSE; }
+
+ DRIVER_ERROR CleanPen();
+
+ virtual PAPER_SIZE MandatoryPaperSize();
+
+ virtual DRIVER_ERROR CheckInkLevel();
+
+ virtual BOOL PhotoTrayPresent(BOOL bQueryPrinter);
+
+ virtual PHOTOTRAY_STATE PhotoTrayEngaged (BOOL bQueryPrinter);
+
+ inline virtual BOOL SupportSeparateBlack (PrintMode *pCurrentMode)
+ {
+ if (pCurrentMode->medium == mediaAuto ||
+ pCurrentMode->medium == mediaPlain)
+ {
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ virtual DRIVER_ERROR SetHint (PRINTER_HINT eHint, int iValue)
+ {
+ switch (eHint)
+ {
+ case PAGES_IN_DOC_HINT:
+ {
+ m_iNumPages = iValue;
+ break;
+ }
+ case SPEED_MECH_HINT:
+ {
+ return SendSpeedMechCmd (iValue);
+ }
+ case EXTRA_DRYTIME_HINT:
+ {
+ m_cExtraDryTime = (BYTE) (iValue & 0xFF);
+ break;
+ }
+ case LEFT_OVERSPRAY_HINT:
+ {
+ m_iLeftOverspray = iValue;
+ break;
+ }
+ case RIGHT_OVERSPRAY_HINT:
+ {
+ m_iRightOverspray = iValue;
+ break;
+ }
+ case TOP_OVERSPRAY_HINT:
+ {
+ m_iTopOverspray = iValue;
+ break;
+ }
+ case BOTTOM_OVERSPRAY_HINT:
+ {
+ m_iBottomOverspray = iValue;
+ break;
+ }
+
+ default:
+ break;
+ }
+ return NO_ERROR;
+ }
+ virtual int GetHint (PRINTER_HINT eHint)
+ {
+ if (eHint == EXTRA_DRYTIME_HINT)
+ {
+ return (int) m_cExtraDryTime;
+ }
+ return 0;
+ }
+
+ virtual DRIVER_ERROR AddPJLHeader ();
+protected:
+
+#ifdef APDK_HP_UX
+ virtual DJ9xxVIP & operator = (Printer& rhs)
+ {
+ return *this;
+ }
+#endif
+
+ BOOL PCL3acceptsDriverware;
+ virtual BYTE PhotoTrayStatus(BOOL bQueryPrinter);
+ int iNumMissingPens;
+ int m_iLeftOverspray;
+ int m_iTopOverspray;
+ int m_iRightOverspray;
+ int m_iBottomOverspray;
+
+private:
+ BOOL IsPCL3DriverwareAvailable();
+ virtual DRIVER_ERROR SendSpeedMechCmd (BOOL bLastPage)
+ {
+ return NO_ERROR;
+ }
+ BYTE m_cExtraDryTime;
+}; //DJ9xxVIP
+
+
+class DJ990Mode : public PrintMode
+{
+public:
+ DJ990Mode();
+}; //AladdenMode
+
+
+class GrayModeDJ990 : public GrayMode
+{
+public:
+ GrayModeDJ990 (uint32_t *map, BOOL PCL3OK);
+}; //GrayModeDJ990
+
+class DJ990CMYGrayMode : public PrintMode
+{
+public:
+ DJ990CMYGrayMode ();
+}; //DJ990CMYGrayMode
+
+#ifdef APDK_EXTENDED_MEDIASIZE
+class DJ990KGrayMode : public PrintMode
+{
+public:
+ DJ990KGrayMode ();
+}; //DJ990KGrayMode
+
+class DJ9902400Mode : public PrintMode
+{
+public:
+ DJ9902400Mode ();
+ virtual inline BOOL MediaCompatible (MEDIATYPE eMedia)
+ {
+ return (eMedia == pmMediaType || eMedia == MEDIA_PHOTO);
+ }
+}; // DJ9902400Mode
+
+class DJ990DraftMode : public PrintMode
+{
+public:
+ DJ990DraftMode ();
+}; // DJ990DraftMode
+
+#endif // APDK_EXTENDED_MEDIASIZE
+
+class DJ990BestMode : public PrintMode
+{
+public:
+ DJ990BestMode ();
+}; // DJ990BestMode
+
+class DJ990PhotoNormalMode : public PrintMode
+{
+public:
+ DJ990PhotoNormalMode ();
+}; // DJ990 PhotoNormalMode
+
+#ifdef APDK_HIGH_RES_MODES
+ const int VIP_BASE_RES = 600;
+#else
+ const int VIP_BASE_RES = 300;
+#endif
+
+/////////////////////////////
+#define kWhite 0x00FFFFFE
+#define GetRed(x) (((x >> 16) & 0x0FF))
+#define GetGreen(x) (((x >> 8) & 0x0FF))
+#define GetBlue(x) ((x & 0x0FF))
+
+#define kBertDecompressPixelSize 3
+
+// Follows are all the masks for the command byte.
+#define kTypeMask 0x80
+#define kTypeShiftAmount 7
+
+#define kCacheLiteralBitsMask 0x60
+#define kCacheLiteralBitsShiftAmount 5
+
+#define kCacheBitsMask 0x60
+#define kCacheBitsShiftAmount 5
+
+#define kRoffMask 0x18
+#define kRoffShiftAmount 3
+
+#define kReplace_countMask 0x07
+
+// Now have the compiler check to make sure none of the masks overlap/underlap bits accidently.
+#if ((kTypeMask | kCacheLiteralBitsMask | kRoffMask | kReplace_countMask) != 255)
+#error "Your mask bits are messed up!"
+#endif
+
+#if ((kTypeMask | kCacheBitsMask | kRoffMask | kReplace_countMask) != 255)
+#error "Your mask bits are messed up!"
+#endif
+
+
+enum
+{
+ eLiteral = 0,
+ eRLE = 0x80
+};
+
+enum
+{
+ eeNewPixel = 0x0,
+ eeWPixel = 0x20,
+ eeNEPixel = 0x40,
+ eeCachedColor = 0x60
+};
+
+enum
+{
+ eNewColor = 0x0,
+ eWestColor = 0x1,
+ eNorthEastColor = 0x2,
+ eCachedColor = 0x3
+};
+
+
+// Literal
+#define M10_MAX_OFFSET0 2 /* Largest unscaled value an offset can have before extra byte is needed. */
+#define M10_MAX_COUNT0 6 /* Largest unscaled and unbiased value a count can have before extra byte is needed */
+#define M10_COUNT_START0 1 /* What a count of zero has a value of. */
+
+// RLE
+#define M10_MAX_OFFSET1 2
+#define M10_MAX_COUNT1 6
+#define M10_COUNT_START1 2
+
+#ifndef MIN
+#define MIN(a,b) (((a)>=(b))?(b):(a))
+#endif
+#ifndef MAX
+#define MAX(a,b) (((a)<=(b))?(b):(a))
+#endif
+
+/*
+We don't actually support 4-byte RGB for anything excpet VIP printers.
+So implimenting this and documenting it as a build option is misleading.
+We must make halftoning support 4-byte RGB before we can publish this.
+If we hear from someone that they need support for 4-byte RGB (and it's
+worth it) then we will add it to halftoning, put the define in config.h,
+and uncomment the #if here. 1/17/2002 - JLM
+
+#if defined(APDK_4BYTE_RGB)
+ #define getPixel get4Pixel
+ #define putPixel put4Pixel
+ const unsigned int BYTES_PER_PIXEL = 4;
+#else
+*/
+ #define getPixel get3Pixel
+ #define putPixel put3Pixel
+ const unsigned int BYTES_PER_PIXEL = 3;
+//#endif
+
+
+/*!
+\internal
+*/
+class Mode10 : public Compressor
+{
+public:
+ Mode10(SystemServices* pSys, Printer* pPrinter, unsigned int RasterSize);
+ virtual ~Mode10();
+ BOOL Process(RASTERDATA* input);
+ BYTE* NextOutputRaster(COLORTYPE color);
+ void Flush();
+
+private:
+ Printer* thePrinter;
+
+ inline uint32_t get4Pixel(unsigned char *pixAddress, unsigned int bPrint = FALSE)
+ {
+ #ifdef APDK_LITTLE_ENDIAN
+ return (((unsigned int*)pixAddress)[0]) & kWhite;
+ #else
+ return (((unsigned int*)pixAddress)[0]) & 0xFFFFFF00;
+ #endif
+ }
+
+
+ inline uint32_t get4Pixel(unsigned char *pixAddress, int pixelOffset)
+ {
+ #ifdef APDK_LITTLE_ENDIAN
+ return ((unsigned int*)pixAddress)[pixelOffset] & kWhite;
+ #else
+ return ((unsigned int*)pixAddress)[pixelOffset] & 0xFFFFFF00;
+ #endif
+ }
+
+
+ inline void put4Pixel(unsigned char *pixAddress, int pixelOffset, uint32_t pixel)
+ {
+ #ifdef APDK_LITTLE_ENDIAN
+ (((unsigned int*)pixAddress)[pixelOffset] = pixel & kWhite);
+ #else
+ (((unsigned int*)pixAddress)[pixelOffset] = pixel & 0xFFFFFF00);
+ #endif
+ }
+
+
+ inline void outputVLIBytesConsecutively(int number, unsigned char *&compressedDataPtr)
+ {
+ do
+ {
+ *compressedDataPtr++ = MIN(number, 255);
+ if (255 == number)
+ {
+ *compressedDataPtr++ = 0;
+ }
+ number -= MIN(number,255);
+ } while (number);
+ }
+
+
+ void put3Pixel(BYTE* pixAddress, int pixelOffset, uint32_t pixel);
+ inline uint32_t get3Pixel(BYTE* pixAddress, int pixelOffset);
+ unsigned short ShortDelta(uint32_t lastPixel, uint32_t lastUpperPixel);
+
+
+}; //Mode10
+
+#ifdef APDK_DJ9xxVIP
+//! DJ9xxVIPProxy
+/*!
+******************************************************************************/
+class DJ9xxVIPProxy : public PrinterProxy
+{
+public:
+ DJ9xxVIPProxy() : PrinterProxy(
+ "DJ9xxVIP", // family name
+ "DESKJET 96\0" // DeskJet 96x series
+ "DESKJET 98\0" // DeskJet 98x series
+ "DESKJET 99\0" // DeskJet 99x series
+ "deskjet 6122\0" // deskjet 6122
+ "deskjet 6127\0" // deskjet 6127
+ "PHOTOSMART 1115\0"
+ "PHOTOSMART 1215\0" // PSP 1215
+ "PHOTOSMART 1218\0" // PSP 1218
+ "PHOTOSMART 1115\0" // PSP 1115
+ "PHOTOSMART 1315\0" // PSP 1315
+ "HP BUSINESS INKJET 22\0" // 2200, 2230, 2250, 2280
+ "cp1160\0" // CP 1160
+ "HP Color Inkjet CP1700\0" // CP 1700
+ "HP BUSINESS INKJET 22\0"
+ "dj450\0"
+ "deskjet 450\0"
+#ifdef APDK_MLC_PRINTER
+ "officejet d\0" // officejet d series
+ "officejet 7100\0" // offjetjet 7100 series
+#endif
+ ) {m_iPrinterType = eDJ9xxVIP;}
+ inline Printer* CreatePrinter(SystemServices* pSS) const { return new DJ9xxVIP(pSS); }
+ inline PRINTER_TYPE GetPrinterType() const { return eDJ9xxVIP;}
+ inline unsigned int GetModelBit() const { return 0x10000;}
+};
+#endif
+
+APDK_END_NAMESPACE
+
+#endif //APDK_DJ9XXVIP_H