/*************************************************************************** ** ** encline ** ** Encode a line for RLE PCX image data */ static int encline(unsigned char *line, int length, FILE *fp) { int local, last; int srcindex; int runcount; int total; last = *line++; runcount = 1; srcindex = 1; total = 0; while (srcindex < length) { local = *line++; srcindex++; if (local == last) { runcount++; if (runcount == 0x3f) { if (encput(last, runcount, fp)) { return 1; } total += runcount; runcount = 0; } } else { if (runcount) { if (encput(last,runcount,fp)) { return 1; } total += runcount; } last = local; runcount = 1; } } if (runcount) { if (encput(last, runcount, fp)) { return 1; } total += runcount; } return 0; }
// PACKING // int16_t encLine(uchar *inBuff, int16_t inLen,uchar *buf, int16_t outLen) { uchar curr,last; uint16_t scrIndex; uint16_t total; uchar runCount; total = 0; runCount = 1; last = *inBuff; for( scrIndex=1;scrIndex<inLen&&total<outLen;scrIndex++) { curr = *(++inBuff); if( curr==last ) // There is a "run" in the data, encode it // { runCount++; if( runCount==63 ) { total += encput(last,runCount,&buf[total]); runCount = 0; } } else // No "run" - curr!=last // { if( runCount ) total += encput(last,runCount,&buf[total]); last = curr; runCount = 1; } } // endloop // if( runCount ) // finish up // return total+encput(last,runCount,&buf[total]) ; return total; }