summaryrefslogtreecommitdiff
path: root/prnt/hpijs/dj660.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'prnt/hpijs/dj660.cpp')
-rw-r--r--prnt/hpijs/dj660.cpp232
1 files changed, 232 insertions, 0 deletions
diff --git a/prnt/hpijs/dj660.cpp b/prnt/hpijs/dj660.cpp
new file mode 100644
index 0000000..41e0180
--- /dev/null
+++ b/prnt/hpijs/dj660.cpp
@@ -0,0 +1,232 @@
+/*****************************************************************************\
+ dj660.cpp : Implimentation for the DJ660 class
+
+ Copyright (c) 1996 - 2001, 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.
+\*****************************************************************************/
+
+
+#ifdef APDK_DJ6xx
+
+#include "header.h"
+#include "dj6xx.h"
+#include "dj660.h"
+#include "printerproxy.h"
+
+APDK_BEGIN_NAMESPACE
+
+extern uint32_t ulMapDJ660_CCM_KCMY[ 9 * 9 * 9 ];
+extern uint32_t ulMapDJ600_CCM_K[ 9 * 9 * 9 ];
+extern uint32_t ulMapDJ600_CCM_CMY[ 9 * 9 * 9 ];
+//
+// ** DJ660:Printer CLASS **
+//
+
+DJ660::DJ660(SystemServices* pSS,BOOL proto)
+ : DJ6XX(pSS,NUM_DJ6XX_FONTS,proto)
+// create two dummy font objects to be queried via EnumFont
+{
+DBG1("DJ660::VerifyPenInfo(): called\n");
+
+ if ((!proto) && (IOMode.bDevID))
+ {
+ constructor_error = VerifyPenInfo();
+ CERRCHECK;
+ }
+ else ePen=BOTH_PENS; // matches default mode
+
+ pMode[DEFAULTMODE_INDEX] = new PrintMode( ulMapDJ660_CCM_KCMY );
+ pMode[GRAYMODE_INDEX] = new GrayMode(ulMapDJ600_CCM_K);
+ pMode[SPECIALMODE_INDEX] = new Mode660Draft();
+#ifdef APDK_EXTENDED_MEDIASIZE
+ pMode[SPECIALMODE_INDEX+1] = new Mode660DraftGrayK();
+ pMode[SPECIALMODE_INDEX+2] = new Mode660BestGrayK();
+ ModeCount=5;
+#else
+ ModeCount=3;
+#endif
+ CMYMap = ulMapDJ660_CCM_KCMY;
+
+
+DBG1("DJ 660 created\n");
+}
+
+Mode660Draft::Mode660Draft()
+: PrintMode( ulMapDJ660_CCM_KCMY )
+{
+ theQuality = qualityDraft;
+
+ Config.eHT = MATRIX;
+
+ pmQuality = QUALITY_DRAFT;
+
+// strcpy(ModeName, "Draft");
+
+}
+
+#ifdef APDK_EXTENDED_MEDIASIZE
+Mode660DraftGrayK::Mode660DraftGrayK()
+: GrayMode(ulMapDJ600_CCM_K)
+{
+ theQuality = qualityDraft;
+ pmQuality = QUALITY_DRAFT;
+}
+
+Mode660BestGrayK::Mode660BestGrayK()
+: GrayMode(ulMapDJ600_CCM_K)
+{
+ theQuality = qualityPresentation;
+ pmQuality = QUALITY_BEST;
+ BaseResX = 600;
+ ResolutionX[0] = 600;
+#ifdef APDK_HIGH_RES_MODES
+ BaseResY = 600;
+ ResolutionY[0] = 600;
+#else
+ BaseResY = 300;
+ ResolutionY[0] = 300;
+#endif
+}
+#endif // APDK_EXTENDED_MEDIASIZE
+
+Header* DJ660::SelectHeader(PrintContext* pc)
+{
+ return new Header6XX(this,pc);
+}
+
+DRIVER_ERROR DJ660::VerifyPenInfo()
+{
+
+ DRIVER_ERROR err=NO_ERROR;
+
+ if(IOMode.bDevID == FALSE)
+ return err;
+
+ err = ParsePenInfo(ePen);
+ ERRCHECK;
+
+
+ // check for the normal case
+ if (ePen == BOTH_PENS)
+ return NO_ERROR;
+
+
+ // the 6XX printers are all two-pen, so trap
+ // on any pen type that is not BOTH_PENS
+ while ( ePen != BOTH_PENS )
+ {
+
+ switch (ePen)
+ {
+ case MDL_BOTH:
+ case MDL_PEN:
+ // user shouldn't be able to get photopen in a non-690...
+ pSS->DisplayPrinterStatus(DISPLAY_PHOTO_PEN_WARN);
+ break;
+ case BLACK_PEN:
+ // black pen installed, need to install color pen
+ pSS->DisplayPrinterStatus(DISPLAY_NO_COLOR_PEN);
+ break;
+ case COLOR_PEN:
+ // color pen installed, need to install black pen
+ pSS->DisplayPrinterStatus(DISPLAY_NO_BLACK_PEN);
+ break;
+ case NO_PEN:
+ // neither pen installed
+ default:
+ pSS->DisplayPrinterStatus(DISPLAY_NO_PENS);
+ break;
+ }
+
+ if (pSS->BusyWait(500) == JOB_CANCELED)
+ return JOB_CANCELED;
+
+ err = ParsePenInfo(ePen);
+ ERRCHECK;
+ }
+
+ pSS->DisplayPrinterStatus(DISPLAY_PRINTING);
+
+ return NO_ERROR;
+
+}
+
+DRIVER_ERROR DJ660::ParsePenInfo(PEN_TYPE& ePen, BOOL QueryPrinter)
+{
+ char* str;
+ DRIVER_ERROR err = SetPenInfo(str, QueryPrinter);
+ ERRCHECK;
+
+ if (*str != '$')
+ {
+ return BAD_DEVICE_ID;
+ }
+
+ str++; // skip $
+ // parse penID
+ PEN_TYPE temp_pen1;
+ // check pen1, assume it is black or MDL, pen2 is color
+ switch (str[0])
+ {
+ // check for MDL in case someone wedged one in there
+ case 'M': temp_pen1 = MDL_PEN; break; // (M)ulti-Dye load pen
+ case 'C': temp_pen1 = BLACK_PEN; break; // (C)andide black
+ default: temp_pen1 = NO_PEN; break;
+ }
+
+ // now check pen2
+
+ int i=2;
+ while((i < DevIDBuffSize) && str[i]!='$') i++; // handles variable length penIDs
+ if (i == DevIDBuffSize)
+ {
+ return BAD_DEVICE_ID;
+ }
+
+ i++;
+
+ if(str[i]=='R') // we have the (R)obinhood color pen,
+ // check what pen1 was
+ {
+ if (temp_pen1 == BLACK_PEN)
+ ePen = BOTH_PENS;
+ else
+ {
+ if (temp_pen1 == MDL_PEN)
+ ePen = MDL_BOTH;
+ else
+ ePen = COLOR_PEN;
+ }
+ }
+ else // no color pen, just set what pen1 was
+ ePen = temp_pen1;
+
+ return NO_ERROR;
+}
+
+APDK_END_NAMESPACE
+
+#endif //APDK_DJ660