10 static ushort *backBuf1, *backBuf2;
 
   11 static int lookup_initialized;
 
   13 static void dispatchDecoder16(
ushort **pFrame, 
ubyte codeType, 
ubyte **pData, 
ubyte **pOffData, 
int *pDataRemain, 
int *curXb, 
int *curYb);
 
   14 static void genLoopkupTable();
 
   18         ubyte *pOrig, *pOffData, op;
 
   22         if (!lookup_initialized) {
 
   32         offset = pData[0]|(pData[1]<<8);
 
   41         for (j=0; j<yb; j++) {
 
   42                 for (
i=0; 
i<xb/2; 
i++) {
 
   44                         dispatchDecoder16((
ushort **)&pFrame, op, &pData, &pOffData, &dataRemain, &
i, &j);
 
   46                         op = ((*pMap) >> 4) & 0xf;
 
   47                         dispatchDecoder16((
ushort **)&pFrame, op, &pData, &pOffData, &dataRemain, &
i, &j);
 
   56         if ((length-(pData-pOrig)) != 0) {
 
   58                         (pData-pOrig), length, (length-(pData-pOrig))));
 
   62 static ushort GETPIXEL(
unsigned char **
buf, 
int off)
 
   64         ushort val = (*buf)[0+off] | ((*buf)[1+off] << 8);
 
   68 static ushort GETPIXELI(
unsigned char **
buf, 
int off)
 
   70         ushort val = (*buf)[0+off] | ((*buf)[1+off] << 8);
 
   75 static void relClose(
int i, 
int *
x, 
int *
y)
 
   86 static void relFar(
int i, 
int sign, 
int *
x, 
int *
y)
 
   89                 *x = sign * (8 + (i % 7));
 
   92                 *x = sign * (-14 + (i - 56) % 29);
 
   93                 *y = sign *   (8 + (i - 56) / 29);
 
   97 static int close_table[512];
 
   98 static int far_p_table[512];
 
   99 static int far_n_table[512];
 
  101 static void genLoopkupTable()
 
  106         for (i = 0; i < 256; i++) {
 
  109                 close_table[i*2+0] = 
x;
 
  110                 close_table[i*2+1] = 
y;
 
  112                 relFar(i, 1, &x, &y);
 
  114                 far_p_table[i*2+0] = 
x;
 
  115                 far_p_table[i*2+1] = 
y;
 
  117                 relFar(i, -1, &x, &y);
 
  119                 far_n_table[i*2+0] = 
x;
 
  120                 far_n_table[i*2+1] = 
y;
 
  123         lookup_initialized = 1;
 
  130         for (i=0; i<8; i++) {
 
  131                 memcpy(pDest, pSrc, 16);
 
  137 static void patternRow4Pixels(
ushort *pFrame, 
unsigned char pat0, 
unsigned char pat1, 
ushort *
p)
 
  144                 *pFrame++ = p[(mask & 
pattern) >> shift];
 
  150 static void patternRow4Pixels2(
ushort *pFrame, 
unsigned char pat0, 
ushort *p)
 
  152         unsigned char mask=0x03;
 
  153         unsigned char shift=0;
 
  157                 pel = p[(mask & pat0) >> shift];
 
  168 static void patternRow4Pixels2x1(
ushort *pFrame, 
unsigned char pat, 
ushort *p)
 
  170         unsigned char mask=0x03;
 
  171         unsigned char shift=0;
 
  175                 pel = p[(mask & pat) >> shift];
 
  184 static void patternQuadrant4Pixels(
ushort *pFrame, 
unsigned char pat0, 
unsigned char pat1, 
unsigned char pat2, 
unsigned char pat3, 
ushort *p)
 
  186         unsigned long mask = 0x00000003UL;
 
  189         unsigned long pat = (pat3 << 24) | (pat2 << 16) | (pat1 << 8) | pat0;
 
  191         for (i=0; i<16; i++) {
 
  192                 pFrame[i&3] = p[(pat & 
mask) >> shift];
 
  201 static void patternRow2Pixels(
ushort *pFrame, 
unsigned char pat, 
ushort *p)
 
  203         unsigned char mask=0x01;
 
  206                 *pFrame++ = p[(mask & pat) ? 1 : 0];
 
  211 static void patternRow2Pixels2(
ushort *pFrame, 
unsigned char pat, 
ushort *p)
 
  214         unsigned char mask=0x1;
 
  216         while (mask != 0x10) {
 
  217                 pel = p[(mask & pat) ? 1 : 0];
 
  229 static void patternQuadrant2Pixels(
ushort *pFrame, 
unsigned char pat0, 
unsigned char pat1, 
ushort *p)
 
  233         ushort pat = (pat1 << 8) | pat0;
 
  235         for (i=0; i<16; i++) {
 
  236                 pFrame[i&3] = p[(pat & 
mask) ? 1 : 0];
 
  245 static void dispatchDecoder16(
ushort **pFrame, 
unsigned char codeType, 
unsigned char **pData, 
unsigned char **pOffData, 
int *pDataRemain, 
int *curXb, 
int *curYb)
 
  248         unsigned char pat[16];
 
  257                         copyFrame(*pFrame, *pFrame + (backBuf2 - backBuf1));
 
  265                         x = far_p_table[k*2+0];
 
  266                         y = far_p_table[k*2+1];
 
  267                         copyFrame(*pFrame, *pFrame + x + y*
g_width);
 
  273                         x = far_n_table[k*2+0];
 
  274                         y = far_n_table[k*2+1];
 
  275                         copyFrame(*pFrame, *pFrame + x + y*
g_width);
 
  281                         x = close_table[k*2+0];
 
  282                         y = close_table[k*2+1];
 
  283                         copyFrame(*pFrame, *pFrame + (backBuf2 - backBuf1) + x + y*
g_width);
 
  288                         x = (char)*(*pData)++;
 
  289                         y = (char)*(*pData)++;
 
  290                         copyFrame(*pFrame, *pFrame + (backBuf2 - backBuf1) + x + y*
g_width);
 
  295                         nprintf((
"MVE", 
"STUB: encoding 6 not tested\n"));
 
  296                         for (i=0; i<2; i++) {
 
  298                                 if (++*curXb == (
g_width >> 3)) {
 
  309                         p[0] = GETPIXELI(pData, 0);
 
  310                         p[1] = GETPIXELI(pData, 0);
 
  311                         if (!((p[0])&0x8000)) {
 
  312                                 for (i=0; i<8; i++) {
 
  313                                         patternRow2Pixels(*pFrame, *(*pData), p);
 
  318                                 for (i=0; i<2; i++) {
 
  319                                         patternRow2Pixels2(*pFrame, *(*pData) & 0xf, p);
 
  321                                         patternRow2Pixels2(*pFrame, *(*pData) >> 4, p);
 
  329                         p[0] = GETPIXEL(pData, 0);
 
  330                         if (!(p[0] & 0x8000)) {
 
  331                                 for (i=0; i<4; i++) {
 
  332                                         p[0] = GETPIXELI(pData, 0);
 
  333                                         p[1] = GETPIXELI(pData, 0);
 
  334                                         pat[0] = (*pData)[0];
 
  335                                         pat[1] = (*pData)[1];
 
  337                                         patternQuadrant2Pixels(*pFrame, pat[0], pat[1], p);
 
  345                                 p[2] = GETPIXEL(pData, 8);
 
  346                                 if (!(p[2]&0x8000)) {
 
  347                                         for (i=0; i<4; i++) {
 
  349                                                         p[0] = GETPIXELI(pData, 0);
 
  350                                                         p[1] = GETPIXELI(pData, 0);
 
  352                                                 pat[0] = *(*pData)++;
 
  353                                                 pat[1] = *(*pData)++;
 
  354                                                 patternQuadrant2Pixels(*pFrame, pat[0], pat[1], p);
 
  362                                         for (i=0; i<8; i++) {
 
  364                                                         p[0] = GETPIXELI(pData, 0);
 
  365                                                         p[1] = GETPIXELI(pData, 0);
 
  367                                                 patternRow2Pixels(*pFrame, *(*pData), p);
 
  376                         p[0] = GETPIXELI(pData, 0);
 
  377                         p[1] = GETPIXELI(pData, 0);
 
  378                         p[2] = GETPIXELI(pData, 0);
 
  379                         p[3] = GETPIXELI(pData, 0);
 
  381                         if (!(p[0] & 0x8000)) {
 
  382                                 if (!(p[2] & 0x8000)) {
 
  383                                         for (i=0; i<8; i++) {
 
  384                                                 pat[0] = (*pData)[0];
 
  385                                                 pat[1] = (*pData)[1];
 
  387                                                 patternRow4Pixels(*pFrame, pat[0], pat[1], p);
 
  392                                         patternRow4Pixels2(*pFrame, (*pData)[0], p);
 
  394                                         patternRow4Pixels2(*pFrame, (*pData)[1], p);
 
  396                                         patternRow4Pixels2(*pFrame, (*pData)[2], p);
 
  398                                         patternRow4Pixels2(*pFrame, (*pData)[3], p);
 
  403                                 if (!(p[2] & 0x8000))  {
 
  404                                         for (i=0; i<8; i++) {
 
  405                                                 pat[0] = (*pData)[0];
 
  407                                                 patternRow4Pixels2x1(*pFrame, pat[0], p);
 
  412                                         for (i=0; i<4; i++) {
 
  413                                                 pat[0] = (*pData)[0];
 
  414                                                 pat[1] = (*pData)[1];
 
  416                                                 patternRow4Pixels(*pFrame, pat[0], pat[1], p);
 
  418                                                 patternRow4Pixels(*pFrame, pat[0], pat[1], p);
 
  427                         p[0] = GETPIXEL(pData, 0);
 
  428                         if (!(p[0] & 0x8000)) {
 
  429                                 for (i=0; i<4; i++) {
 
  430                                         p[0] = GETPIXELI(pData, 0);
 
  431                                         p[1] = GETPIXELI(pData, 0);
 
  432                                         p[2] = GETPIXELI(pData, 0);
 
  433                                         p[3] = GETPIXELI(pData, 0);
 
  434                                         pat[0] = (*pData)[0];
 
  435                                         pat[1] = (*pData)[1];
 
  436                                         pat[2] = (*pData)[2];
 
  437                                         pat[3] = (*pData)[3];
 
  439                                         patternQuadrant4Pixels(*pFrame, pat[0], pat[1], pat[2], pat[3], p);
 
  447                                 p[0] = GETPIXEL(pData, 16);
 
  448                                 if (!(p[0] & 0x8000)) {
 
  449                                         for (i=0; i<4; i++) {
 
  451                                                         p[0] = GETPIXELI(pData, 0); 
 
  452                                                         p[1] = GETPIXELI(pData, 0);
 
  453                                                         p[2] = GETPIXELI(pData, 0);
 
  454                                                         p[3] = GETPIXELI(pData, 0);
 
  456                                                 pat[0] = (*pData)[0];
 
  457                                                 pat[1] = (*pData)[1];
 
  458                                                 pat[2] = (*pData)[2];
 
  459                                                 pat[3] = (*pData)[3];
 
  461                                                 patternQuadrant4Pixels(*pFrame, pat[0], pat[1], pat[2], pat[3], p);
 
  469                                         for (i=0; i<8; i++) {
 
  471                                                         p[0] = GETPIXELI(pData, 0);
 
  472                                                         p[1] = GETPIXELI(pData, 0);
 
  473                                                         p[2] = GETPIXELI(pData, 0);
 
  474                                                         p[3] = GETPIXELI(pData, 0);
 
  476                                                 pat[0] = (*pData)[0];
 
  477                                                 pat[1] = (*pData)[1];
 
  478                                                 patternRow4Pixels(*pFrame, pat[0], pat[1], p);
 
  487                         for (i=0; i<8; i++) {
 
  488 #if BYTE_ORDER == BIG_ENDIAN 
  490                                 memcpy(&frame_tmp, *pData, 16);
 
  492                                 for (j = 0; j < 16; j += 2) {
 
  493                                         swap_tmp = (
ushort*)(frame_tmp + j);
 
  496                                 memcpy(*pFrame, &frame_tmp, 16);
 
  498                                 memcpy(*pFrame, *pData, 16);
 
  507                         for (i=0; i<4; i++) {
 
  508                                 p[0] = GETPIXEL(pData, 0);
 
  509                                 p[1] = GETPIXEL(pData, 2);
 
  510                                 p[2] = GETPIXEL(pData, 4);
 
  511                                 p[3] = GETPIXEL(pData, 6);
 
  512                                 for (j=0; j<2; j++) {
 
  513                                         for (k=0; k<4; k++) {
 
  514                                                 (*pFrame)[2*k] = p[k];
 
  515                                                 (*pFrame)[2*k+1] = p[k];
 
  525                         for (i=0; i<2; i++) {
 
  526                                 p[0] = GETPIXEL(pData, 0);
 
  527                                 p[1] = GETPIXEL(pData, 2);
 
  528                                 for (j=0; j<4; j++) {
 
  529                                         for (k=0; k<4; k++) {
 
  531                                                 (*pFrame)[k*
g_width+j+4] = p[1];
 
  541                         p[0] = GETPIXEL(pData, 0);
 
  542                         for (i = 0; i < 8; i++) {
 
  543                                 for (j = 0; j < 8; j++) {
 
  553                         p[0] = GETPIXEL(pData, 0);
 
  554                         p[1] = GETPIXEL(pData, 1);
 
  555                         for (i=0; i<8; i++) {
 
  556                                 for (j=0; j<8; j++) {
 
  557                                         (*pFrame)[j] = p[(i+j)&1];
 
GLenum GLuint GLenum GLsizei const GLchar * buf
 
void decodeFrame16(ubyte *pFrame, ubyte *pMap, int mapRemain, unsigned char *pData, int dataRemain)
 
GLint GLint GLint GLint GLint x
 
GLenum GLuint GLenum GLsizei length