1 /*
2 *******************************************************************************
3 *
4 * File:         PCLmGenerator.h
5 * Author:       Steve Claiborne
6 * Purpose:      Class/Object interface to genPCLm
7 * Status:
8 *
9 * (C) Copyright 2010, HP Company, all rights reserved.
10 *
11 *******************************************************************************
12 */
13 #ifndef _PCLM_GENERATOR
14 #define _PCLM_GENERATOR
15 #define SUPPORT_WHITE_STRIPS
16 
17 #include "common_defines.h"
18 
19 const int OUT_STR_SIZE = 256;
20 
21 typedef enum
22 {
23   simplex,
24   duplex_longEdge,
25   duplex_shortEdge
26 } duplexDispositionEnum;
27 
28 typedef enum
29 {
30   job_open,
31   job_closed,
32   job_errored
33 } jobStateEnum;
34 
35 typedef enum
36 {
37   deviceRGB,
38   adobeRGB,
39   grayScale,
40   blackonly
41 } colorSpaceDisposition;
42 
43 typedef enum
44 {
45 	default_colortheme,
46 	vividsRGB,
47 	photosRGB,
48 	photoAdobeRGB,
49 	none
50 }colorThemes;
51 
52 typedef enum
53 {
54   debugOn,
55   debugOff
56 } debugDisposition;
57 
58 typedef enum
59 {
60   compressRLE,
61   compressDCT,
62   compressFlate,
63   compressDefault,
64   compressNone
65 } compressionDisposition;
66 
67 typedef enum
68 {
69   portraitOrientation,
70   landscapeOrientation
71 } mediaOrientationDisposition;
72 
73 typedef enum
74 {
75   res300,
76   res600,
77   res1200
78 } renderResolution;
79 
80 typedef enum
81 {
82   top_left,
83   bottom_right
84 } pageOriginType;
85 
86 typedef enum
87 {
88   color_content,
89   gray_content,
90   unknown_content
91 } pageCromaticContent;
92 
93 typedef enum
94 {
95   draft,
96   normal,
97   best,
98 } pageOutputQuality;
99 
100 typedef enum
101 {
102   alternate = 0,
103   alternate_roll = 1,
104   auto_select = 2,
105   bottom = 3,
106   center = 4 ,
107   disc = 5,
108   envelope =6 ,
109   hagaki = 7,
110   large_capacity = 8,
111   left = 9,
112   main_tray = 10,
113   main_roll = 11,
114   manual = 12,
115   middle = 13,
116   photo = 14,
117   rear = 15,
118   right = 16,
119   side = 17,
120   top = 18,
121   tray_1 = 19,
122   tray_2 =20,
123   tray_3 = 21,
124   tray_4 =22,
125   tray_5 = 23,
126   tray_N = 24,
127 } jobInputBin;
128 
129 typedef enum
130 {
131   top_output,
132   middle_output,
133   bottom_output,
134   side_output,
135   center_output,
136   rear_output,
137   face_up,
138   face_down,
139   large_capacity_output,
140   stacker_N,
141   mailbox_N,
142   tray_1_output,
143   tray_2_output,
144   tray_3_output,
145   tray_4_output,
146 } jobOutputBin;
147 
148 typedef struct
149 {
150   char                        userPageQuality[32];
151   mediaOrientationDisposition userOrientation;
152   char                        userMediaType[256];
153   jobInputBin                 userInputBin;
154   int                         userCopies;
155   char                        userDocumentName[256];
156   jobOutputBin                userOutputBin;
157   colorThemes				  colorTheme;
158   char						  datetime[256];
159   int						  jobid;
160   char                        user_name[32];
161 } PCLmSUserSettingsType;
162 
163 typedef struct
164 {
165   char mediaSizeName[256];
166   //char mediaTypeName[256];
167   char clientLocale [256];
168   float mediaHeight;
169   float mediaWidth;
170   float sourceHeight;
171   float sourceWidth;
172   float mediaWidthOffset;
173   float mediaHeightOffset;
174   pageCromaticContent colorContent;          // Did the page contain any "real" color
175   pageOriginType pageOrigin;
176   compressionDisposition compTypeRequested;
177   colorSpaceDisposition srcColorSpaceSpefication;
178   colorSpaceDisposition dstColorSpaceSpefication;
179   int stripHeight;
180   renderResolution destinationResolution;
181 
182   duplexDispositionEnum duplexDisposition; // SJC
183   int scaleFactor; // sjc
184   bool genExtraPage; // SJC
185   bool mirrorBackside;
186 } PCLmPageSetup;
187 
188 typedef struct
189 {
190   PCLmPageSetup         *PCLmPageContent;
191   PCLmSUserSettingsType *PCLmSUserSettings;
192 } PCLmSSetup;
193 
194 typedef enum
195 {
196   success=0,
197   genericFailure=-1,
198   callAgain=1
199 } PCLmGenerator_returnType;
200 
201 class PCLmGenerator
202 {
203 public:
204 
205     PCLmGenerator();
206     ~PCLmGenerator();
207 
208 #ifdef STANDALONE
209     int StartJob    (void **pOutBuffer, int *iOutBufferSize, bool debug);
210 #else
211     int StartJob    (void **pOutBuffer, int *iOutBufferSize);
212 #endif
213     int EndJob      (void **pOutBUffer, int *iOutBifferSize);
214     int StartPage   (PCLmPageSetup *PCLmPageContent, void **pOutBuffer, int *iOutBufferSize);
215     int StartPage   (PCLmSSetup *PCLmSPageContent, bool generatePCLmS, void **pOutBuffer, int *iOutBufferSize);
216     int EndPage     (void **pOutBuffer, int *iOutBufferSize);
217     int Encapsulate (void *pInBuffer, int inBufferSize, int numLines, void **pOutBuffer, int *iOutBufferSize);
218     int SkipLines   (int iSkipLines);
219     void FreeBuffer (void *pBuffer);
220 
221 private:
222     bool colorConvertSource(colorSpaceDisposition srcCS, colorSpaceDisposition dstCS, ubyte *strip, sint32 stripWidth, sint32 stripHeight);
223     void writePDFGrammarPage(int imageWidth, int imageHeight, int numStrips, colorSpaceDisposition destColorSpace);
224     void writePDFGrammarHeader();
225     int injectRLEStrip(ubyte *RLEBuffer, int numBytes, int imageWidth, int imageHeight, colorSpaceDisposition destColorSpace, bool);
226     int injectLZStrip(ubyte *LZBuffer, int numBytes, int imageWidth, int imageHeight, colorSpaceDisposition destColorSpace, bool);
227     int injectJPEG(char *jpeg_Buff, int imageWidth, int imageHeight, int numCompBytes, colorSpaceDisposition destColorSpace, bool);
228     void initOutBuff(char *buff, sint32 size);
229     void writeStr2OutBuff(char *str);
230     void write2Buff(ubyte *buff, int buffSize);
231     int statOutputFileSize();
232     void writePDFGrammarTrailer(int imageWidth, int imageHeight);
233     bool injectAdobeRGBCS();
234     bool addKids(sint32 kidObj);
235     bool addXRef(sint32 xRefObj);
236     int errorOutAndCleanUp();
237 	void Cleanup(void); /*Called in errorOutAndCleanUp and Destructor*/
238 	void writeJobTicket(void);
239 #ifdef SUPPORT_WHITE_STRIPS
240     bool isWhiteStrip(void *, int);
241 #endif
242 	char* getInputBinString(jobInputBin bin);
243 	char* getOutputBin(jobOutputBin bin);
244 	char* getOrientationString(mediaOrientationDisposition Orientation);
245 	char* getDuplexString(duplexDispositionEnum duplex);
246 	char* getColorThemesString(colorThemes colortheme);
247 
248     sint32                      currStripHeight;
249     char                        currMediaName[256];
250     duplexDispositionEnum       currDuplexDisposition;
251     colorSpaceDisposition       currColorSpaceDisposition;
252     debugDisposition            currDebugDisposition;
253     compressionDisposition      currCompressionDisposition;
254     mediaOrientationDisposition currMediaOrientationDisposition;
255     renderResolution            currRenderResolution;
256     int                         currRenderResolutionInteger;
257     void                        *allocatedOutputBuffer;
258     void                        *leftoverScanlineBuffer;
259 
260     int                         mediaWidth;
261     int                         mediaHeight;
262     int                         mediaWidthInPixels;
263     int                         mediaHeightInPixels;
264     colorSpaceDisposition       destColorSpace;
265     colorSpaceDisposition       sourceColorSpace;
266     int                         scaleFactor;
267     bool                        genExtraPage;
268     jobStateEnum                jobOpen;
269     int                         currSourceWidth;
270     int                         currSourceHeight;
271     int                         srcNumComponents;
272     int                         dstNumComponents;
273     int                         numLeftoverScanlines;
274     ubyte                       *scratchBuffer;
275     int                         pageCount;
276     bool                        reverseOrder;
277     int                         outBuffSize;
278     int                         currOutBuffSize;
279     int                         totalBytesWrittenToPCLmFile;
280     int                         totalBytesWrittenToCurrBuff;
281     char                        *outBuffPtr;
282     char                        *currBuffPtr;
283     sint32                      currResolution;
284     float                       STANDARD_SCALE;
285     sint32                      DebugIt;
286     sint32                      DebugIt2;
287     sint32                      objCounter;
288 
289     sint32                      yPosition;
290     sint32                      infoObj;
291     sint32                      pageOrigin;
292     sint32                      *KidsArray;
293     sint32                      numKids;
294 // XRefTable storage
295     sint32                      *xRefTable;
296     sint32                      xRefIndex;
297     sint32                      xRefStart;
298     char                        pOutStr[OUT_STR_SIZE];
299     bool                        adobeRGBCS_firstTime;
300     bool                        mirrorBackside;
301     sint32                      topMarginInPix;
302     sint32                      leftMarginInPix;
303     bool                        firstStrip;
304     sint32                      numFullInjectedStrips;
305     sint32                      numFullScanlinesToInject;
306     sint32                      numPartialScanlinesToInject;
307 
308 	PCLmSUserSettingsType *m_pPCLmSSettings;
309 	char returnStr[256];
310 };
311 
312 #endif /* _PCLM_PARSER_ */
313 
314 
315