diff options
Diffstat (limited to 'lib/epson-escpr-mem.c')
-rw-r--r-- | lib/epson-escpr-mem.c | 439 |
1 files changed, 439 insertions, 0 deletions
diff --git a/lib/epson-escpr-mem.c b/lib/epson-escpr-mem.c new file mode 100644 index 0000000..7205e52 --- /dev/null +++ b/lib/epson-escpr-mem.c @@ -0,0 +1,439 @@ +/*________________________________ epson-escpr-mem.c ________________________________*/
+
+/* 1 2 3 4 5 6 7 8 */
+/*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
+/*******************************************|********************************************/
+/*
+ * Copyright (c) 2009 Seiko Epson Corporation All rights reserved.
+ *
+ * Copyright protection claimed includes all forms and matters of copyrightable
+ * material and information now allowed by statutory or judicial law or hereinafter
+ * granted, including without limitation, material generated from the software
+ * programs which are displayed on the screen such as icons, screen display looks,
+ * etc.
+ */
+/*******************************************|********************************************/
+/* */
+/* memory Module */
+/* */
+/* Public Function Calls */
+/* -------------------------- */
+/* void* memRealloc (buffer, oldSizem, newSize ); */
+/* EPS_INT8* memStrStr (strSrc, strFind, gotoEnd ); */
+/* EPS_INT8* memStrStrWithLen (strSrc, nSrcLen, strFind ); */
+/* void memSetEndian (Endianess, byteSize, endTag, value, array); */
+/* void memInspectEndian ( ); */
+/* EPS_INT16 memHtoN16 (nSrc ); */
+/* EPS_INT32 memHtoN32 (nSrc ); */
+/* EPS_INT32 memGetBitCount (bitfield ); */
+/* */
+/*******************************************|********************************************/
+
+/*------------------------------------ Includes -------------------------------------*/
+/*******************************************|********************************************/
+#include "epson-escpr-def.h"
+#include "epson-escpr-err.h"
+#include "epson-escpr-mem.h"
+
+/*---------------------------- ESC/P-R Lib Global Variables --------------------------*/
+/*******************************************|********************************************/
+
+ /*** Extern Function */
+ /*** -------------------------------------------------------------------------------*/
+extern EPS_CMN_FUNC epsCmnFnc;
+
+EPS_INT16 cpuEndian; /* Endian-ness */
+
+
+/*-------------------------------- Local Definition ---------------------------------*/
+/*******************************************|********************************************/
+
+
+/*-------------------------------- Local Functions ----------------------------------*/
+/*******************************************|********************************************/
+
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
+/*-------------------- Public Functions ---------------------*/
+/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/*******************************************|********************************************/
+/* */
+/* Function name: memRealloc() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* buffer void* I/O: pointer of buffer */
+/* oldSize EPS_UINT32 I: original buffer size */
+/* newSize EPS_UINT32 I: new buffer size */
+/* */
+/* Return value: */
+/* EPS_INT8* pointer to finded string */
+/* */
+/* Description: */
+/* Realocate buffer. */
+/* */
+/*******************************************|********************************************/
+void* memRealloc (
+
+ void* buffer,
+ EPS_UINT32 oldSize,
+ EPS_UINT32 newSize
+
+){
+ /* Create a temporary pointer to a new buffer of the desired size */
+ void* newBuffer = EPS_ALLOC(newSize);
+ if( NULL == newBuffer ){
+ EPS_SAFE_RELEASE( buffer );
+ return NULL;
+ }
+
+ memset(newBuffer, 0, newSize);
+
+ /* Copy the data from the old buffer to the new one */
+ if(oldSize < newSize)
+ {
+ memcpy(newBuffer, buffer, oldSize);
+ }
+ else
+ {
+ memcpy(newBuffer, buffer, newSize);
+ }
+ /* Free the original buffer */
+ EPS_SAFE_RELEASE( buffer );
+
+ /* Return a pointer to the new block of memory */
+ return newBuffer;
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: memStrStr() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* strSrc EPS_INT8* I: Source string */
+/* strFind EPS_INT8* I: Find string. Size MUST be less than 64 byte. */
+/* gotoEnd EPS_BOOL I: If TRUE, the return value indicates */
+/* the end of found string. */
+/* */
+/* Return value: */
+/* EPS_INT8* pointer to finded string */
+/* */
+/* Description: */
+/* Finds the first occurrence of a substring within a string. */
+/* The comparison is NOT case sensitive. */
+/* */
+/*******************************************|********************************************/
+EPS_INT8* memStrStr (
+
+ EPS_INT8* strSrc,
+ const EPS_INT8* strFind,
+ EPS_BOOL gotoEnd
+
+){
+ EPS_INT8 strShadow[64];
+ EPS_INT32 nSrcPos = 0;
+ EPS_INT32 nFindPos = 0;
+ EPS_INT32 nFindedTop = -1;
+ EPS_UINT32 nFindStrLen = 0;
+
+ if(NULL == strSrc || 64 <= strlen(strFind)){
+ return NULL;
+ }
+
+ memset(strShadow, 0, sizeof(strShadow));
+
+ /* create shadow string */
+ do{
+ if( 0x41 <= strFind[nFindPos] && strFind[nFindPos] <= 0x5A){
+ strShadow[nFindPos] = (EPS_INT8)(strFind[nFindPos] + 0x20);
+ } else if( 0x61 <= strFind[nFindPos] && strFind[nFindPos] <= 0x7A){
+ strShadow[nFindPos] = (EPS_INT8)(strFind[nFindPos] - 0x20);
+ } else{
+ strShadow[nFindPos] = strFind[nFindPos];
+ }
+ }while('\0' != strFind[nFindPos++]);
+
+ /* search by strFind & strShadow */
+ nFindPos = 0;
+ while( '\0' != strSrc[nSrcPos] && '\0' != strFind[nFindPos]){
+ if( strSrc[nSrcPos] == strFind[nFindPos]
+ || strSrc[nSrcPos] == strShadow[nFindPos] ){
+ if(-1 == nFindedTop){
+ nFindedTop = nSrcPos;
+ }
+
+ nSrcPos++;
+ nFindPos++;
+
+ } else{
+ if(-1 == nFindedTop){
+ nSrcPos++;
+ nFindPos = 0;
+ } else{
+ nSrcPos = nFindedTop + 1;
+ }
+ nFindedTop = -1;
+ }
+ }
+
+ nFindStrLen = (EPS_UINT32)strlen(strFind);
+ if(0 <= nFindedTop && (EPS_INT32)strlen(strFind) == nFindPos){
+ if(!gotoEnd){
+ return &strSrc[nFindedTop];
+ } else{
+ return &strSrc[nFindedTop] + nFindStrLen;
+ }
+ } else{
+ return NULL;
+ }
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: memStrStrWithLen() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* strSrc EPS_INT8* I: Source string */
+/* nSrcLen EPS_UINT32 I: Source string length */
+/* strFind EPS_INT8* I: Find string. Size MUST be less than 64 byte. */
+/* */
+/* Return value: */
+/* EPS_INT8* pointer to finded string */
+/* */
+/* Description: */
+/* Finds the first occurrence of a substring within a string. */
+/* The comparison is NOT case sensitive. */
+/* Limit nSrcLen characters. */
+/* */
+/*******************************************|********************************************/
+EPS_INT8* memStrStrWithLen (
+
+ EPS_INT8* strSrc,
+ EPS_UINT32 nSrcLen,
+ const EPS_INT8* strFind
+
+){
+ EPS_INT8 strShadow[64];
+ EPS_INT32 nSrcPos = 0;
+ EPS_INT32 nFindPos = 0;
+ EPS_INT32 nFindedTop = -1;
+
+ if(NULL == strSrc || 64 <= strlen(strFind)){
+ return NULL;
+ }
+
+ memset(strShadow, 0, sizeof(strShadow));
+
+ /* create shadow string */
+ do{
+ if( 0x41 <= strFind[nFindPos] && strFind[nFindPos] <= 0x5A){
+ strShadow[nFindPos] = (EPS_INT8)(strFind[nFindPos] + 0x20);
+ } else if( 0x61 <= strFind[nFindPos] && strFind[nFindPos] <= 0x7A){
+ strShadow[nFindPos] = (EPS_INT8)(strFind[nFindPos] - 0x20);
+ } else{
+ strShadow[nFindPos] = strFind[nFindPos];
+ }
+ }while('\0' != strFind[nFindPos++]);
+
+ /* search by strFind & strShadow */
+ nFindPos = 0;
+ while( (EPS_INT32)nSrcLen > nSrcPos && '\0' != strFind[nFindPos]){
+ if( strSrc[nSrcPos] == strFind[nFindPos]
+ || strSrc[nSrcPos] == strShadow[nFindPos] ){
+ if(-1 == nFindedTop){
+ nFindedTop = nSrcPos;
+ }
+
+ nSrcPos++;
+ nFindPos++;
+ } else{
+ if(-1 == nFindedTop){
+ nSrcPos++;
+ } else{
+ nSrcPos = nFindedTop + 1;
+ }
+ nFindPos = 0;
+ nFindedTop = -1;
+ }
+ }
+
+ if(0 <= nFindedTop && (EPS_INT32)strlen(strFind) == nFindPos){
+ return &strSrc[nFindedTop];
+ } else{
+ return NULL;
+ }
+}
+
+
+/*******************************************|********************************************/
+/* Function name: memSetEndian() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* Endianess EPS_ENDIAN I: Desired Endianess (Big/Little) */
+/* byteSize EPS_BYTE_SIZE I: 2-byte or 4 bytes to convert */
+/* value EPS_UINT32 I: 4 Bytes to be swapped if necesaray */
+/* array EPS_UINT8* O: Correct endian-ness bytes */
+/* */
+/* Return value: */
+/* None */
+/* */
+/* Description: */
+/* Swap data depending on endian-ness. */
+/* */
+/*******************************************|********************************************/
+void memSetEndian (
+
+ EPS_ENDIAN Endianess, /* Desired Endianess (Big/Little) */
+ EPS_BYTE_SIZE byteSize, /* 2-byte or 4 bytes to convert */
+ EPS_UINT32 value, /* 4 Bytes to be swapped if necesaray */
+ EPS_UINT8* array /* Correct endian-ness bytes */
+
+){
+
+/*** Declare Variable Local to Routine */
+ EPS_UINT16 value2byte;
+ EPS_UINT32 value4byte;
+
+/*** Initialize Local Variables */
+
+/*** Based on desired Eniandess - Perform test and swap, if necessary */
+ switch (byteSize + Endianess) {
+ /*** Change 2 bytes value to the little endianness */
+ case (EPS_2_BYTES + EPS_ENDIAN_LITTLE):
+#if 0 /* Not Used */
+ value2byte = (EPS_UINT16)value;
+ array[0] = (EPS_UINT8)((value2byte ) & 0x00ff);
+ array[1] = (EPS_UINT8)((value2byte >> 8) & 0x00ff);
+#endif
+ break;
+ /*** Change 2 bytes value to the big endianness */
+ case (EPS_2_BYTES + EPS_ENDIAN_BIG):
+ value2byte = (EPS_UINT16)value;
+ array[0] = (EPS_UINT8)((value2byte >> 8) & 0x00ff);
+ array[1] = (EPS_UINT8)((value2byte ) & 0x00ff);
+ break;
+ /*** Change 4 bytes value to the little endianness */
+ case (EPS_4_BYTES + EPS_ENDIAN_LITTLE):
+ value4byte = (EPS_UINT32)value;
+ array[0] = (EPS_UINT8)((value4byte ) & 0x000000ff);
+ array[1] = (EPS_UINT8)((value4byte >> 8) & 0x000000ff);
+ array[2] = (EPS_UINT8)((value4byte >> 16) & 0x000000ff);
+ array[3] = (EPS_UINT8)((value4byte >> 24) & 0x000000ff);
+ break;
+ /*** Change 4 bytes value to the big endianness */
+ case (EPS_4_BYTES + EPS_ENDIAN_BIG):
+ value4byte = (EPS_UINT32)value;
+ array[0] = (EPS_UINT8)((value4byte >> 24) & 0x000000ff);
+ array[1] = (EPS_UINT8)((value4byte >> 16) & 0x000000ff);
+ array[2] = (EPS_UINT8)((value4byte >> 8) & 0x000000ff);
+ array[3] = (EPS_UINT8)((value4byte ) & 0x000000ff);
+ break;
+ default:
+ break;
+ }
+}
+
+
+/*******************************************|********************************************/
+/* Function name: memInspectEndian() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* (None) */
+/* */
+/* Return value: */
+/* None */
+/* */
+/* Description: */
+/* Determine "Endian-ness" for the current cpu. */
+/* */
+/*******************************************|********************************************/
+void memInspectEndian (
+
+ void
+
+){
+ union {
+ EPS_INT8 array[2]; /* Endian-ness test array */
+ EPS_INT16 chars; /* Endian-ness test string */
+ } EndianTest;
+
+ EndianTest.array[0] = 'a';
+ EndianTest.array[1] = 'b';
+ if (EndianTest.chars == 0x6162) {
+ cpuEndian = EPS_ENDIAN_BIG;
+ } else{
+ cpuEndian = EPS_ENDIAN_LITTLE;
+ }
+}
+
+
+EPS_INT32 memGetBitCount(
+
+ EPS_INT32 bitfield
+
+){
+ EPS_INT32 i = 0;
+ EPS_INT32 cnt = 0;
+
+ for(i = 0; i < sizeof(bitfield)*8; i++){
+ if( (bitfield >> i) & 1 ){
+ cnt++;
+ }
+ }
+
+ return cnt;
+}
+
+
+EPS_UINT8 memSearchWhiteColorVal(
+
+ EPS_UINT8 colorPlane,
+ EPS_UINT8* paletteData,
+ EPS_UINT16 paletteSize
+
+){
+ EPS_UINT8 whiteColorValue = 255; /* Set default index for white to negative one */
+ EPS_UINT16 jdx; /* General indes/loop variable */
+ EPS_UINT8* bufPtr = NULL; /* Temporary buffer pointer */
+
+ if( colorPlane == EPS_CP_256COLOR ){
+ bufPtr = paletteData;
+ for ( jdx = 0; jdx < paletteSize/3; jdx++ ) {
+ if (*bufPtr == 255 && *(bufPtr+1) == 255 && *(bufPtr+2) == 255) {
+ whiteColorValue = (EPS_UINT8)jdx;
+ break;
+ }
+ bufPtr += 3;
+ }
+ } else /* if(EPS_CP_FULLCOLOR) */{
+ whiteColorValue = 0xFF;
+ }
+
+ return whiteColorValue;
+}
+
+/*________________________________ epson-escpr-mem.c _________________________________*/
+
+/*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
+/* 1 2 3 4 5 6 7 8 */
+/*******************************************|********************************************/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/***** End of File *** End of File *** End of File *** End of File *** End of File ******/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|