summaryrefslogtreecommitdiff
path: root/prnt/hpijs/ernieplatform.h
diff options
context:
space:
mode:
Diffstat (limited to 'prnt/hpijs/ernieplatform.h')
-rw-r--r--prnt/hpijs/ernieplatform.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/prnt/hpijs/ernieplatform.h b/prnt/hpijs/ernieplatform.h
new file mode 100644
index 0000000..40195c2
--- /dev/null
+++ b/prnt/hpijs/ernieplatform.h
@@ -0,0 +1,137 @@
+/*****************************************************************************\
+ ernieplatform.h : Interface for ernie
+
+ 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.
+\*****************************************************************************/
+
+
+APDK_BEGIN_NAMESPACE
+
+// Endianess of the architecture we're on
+#ifdef APDK_LITTLE_ENDIAN
+ #define bigEndian 0
+ #define littleEndian 1
+ #define GetRed(x) (((x >> 16) & 0x0FF))
+ #define GetGreen(x) (((x >> 8) & 0x0FF))
+ #define GetBlue(x) ((x & 0x0FF))
+#else
+ #define bigEndian 1
+ #define littleEndian 0
+ #define GetRed(x) (((x >> 24) & 0x0FF))
+ #define GetGreen(x) (((x >> 16) & 0x0FF))
+ #define GetBlue(x) (((x >> 8) & 0x0FF))
+#endif
+
+/*#define GetRed(x) (((x >> 24) & 0x0FF))
+#define GetGreen(x) (((x >> 16) & 0x0FF))
+#define GetBlue(x) (((x >> 8) & 0x0FF))*/
+
+// Slow down the system and gather stats or not.
+#define kGatherStats 0
+#define kDecompressStats 0
+
+// ********** THIS IS NOT TRUE **************
+// While it may seem like the need to be both
+// big endian and little endian versions of
+// these macros, due to the face that the
+// shift command in general knows about the
+// endian order, you get the same result
+// from these commands no matter what order
+// the bytes are in. Strange isn't it.
+//#define GetRed(x) (((x >> 16) & 0x0FF))
+//#define GetRed(x) (((x >> 24) & 0x0FF))
+//#define GetGreen(x) (((x >> 8) & 0x0FF))
+//#define GetGreen(x) (((x >> 16) & 0x0FF))
+//#define GetBlue(x) ((x & 0x0FF))
+//#define GetBlue(x) (((x >> 8) & 0x0FF))
+// ******************************************
+
+#ifndef MIN
+#define MIN(a,b) (((a)>=(b))?(b):(a))
+#endif
+#ifndef MAX
+#define MAX(a,b) (((a)<=(b))?(b):(a))
+#endif
+
+#define kWhite 0x00FFFFFE
+
+//inline unsigned int get4Pixel(unsigned char *pixAddress);
+//inline unsigned int get4Pixel(unsigned char *pixAddress)
+//inline uint32_t get4Pixel(unsigned char *pixAddress);
+
+inline uint32_t get4Pixel(unsigned char *pixAddress)
+{
+// slower simple code
+// unsigned int toReturn = *((unsigned int*)pixAddress); // load toReturn with XRGB
+// toReturn &= kWhite; // Strip off unwanted X. EGW stripped lsb blue.
+//
+// return toReturn;
+
+#ifdef APDK_LITTLE_ENDIAN
+ return (((unsigned int*)pixAddress)[0]) & kWhite;
+#else
+ return (((unsigned int*)pixAddress)[0]) & 0xFFFFFF00;
+#endif
+}
+
+
+//inline unsigned int get4Pixel(unsigned char *pixAddress, int pixelOffset);
+//inline unsigned int get4Pixel(unsigned char *pixAddress, int pixelOffset)
+//inline uint32_t get4Pixel(unsigned char *pixAddress, int pixelOffset);
+
+inline uint32_t get4Pixel(unsigned char *pixAddress, int pixelOffset)
+{
+// slower simple code
+// unsigned int *uLongPtr = (unsigned int *)pixAddress;
+// uLongPtr += pixelOffset;
+//
+// return *uLongPtr & kWhite;
+
+#ifdef APDK_LITTLE_ENDIAN
+ return ((unsigned int*)pixAddress)[pixelOffset] & kWhite;
+#else
+ return ((unsigned int*)pixAddress)[pixelOffset] & 0xFFFFFF00;
+#endif
+}
+
+//void put3Pixel(unsigned char *pixAddress, int pixelOffset, unsigned int pixel);
+void put3Pixel(unsigned char *pixAddress, int pixelOffset, uint32_t pixel);
+
+//inline void put4Pixel(unsigned char *pixAddress, int pixelOffset, unsigned int pixel);
+//inline void put4Pixel(unsigned char *pixAddress, int pixelOffset, unsigned int pixel)
+//inline void put4Pixel(unsigned char *pixAddress, int pixelOffset, uint32_t pixel);
+
+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
+}
+
+APDK_END_NAMESPACE