/* common.c - Don Yang (uguu.org) 09/11/01 */ #include #include #include"common.h" /* Ring buffer */ BYTE RingBuffer[BUFFER_SIZE]; int ProcOffset, LimitOffset; int FileSize, iChecksum, oChecksum; /***************************************************************** GetByte */ DWORD GetByte(int absoffset, FILE *infile) { int byte; while( absoffset >= LimitOffset ) { if( (byte = fgetc(infile)) == EOF ) { FileSize = LimitOffset++; return INPUT_EOF; } iChecksum ^= (int)byte; RingBuffer[(LimitOffset++) & BUFFER_MASK] = (BYTE)byte; } if( absoffset >= FileSize ) return INPUT_EOF; return (DWORD)RingBuffer[absoffset & BUFFER_MASK]; } /* GetByte() */ /***************************************************************** PutByte */ void PutByte(BYTE byte, FILE *outfile) { oChecksum ^= (int)byte; (void)fputc((int)byte, outfile); } /* PutByte() */ /***************************************************************** PutWord */ void PutWord(WORD word, FILE *outfile) { oChecksum ^= (int)(word & 0xff); oChecksum ^= (int)(word >> 8); (void)fputc((int)(word & 0xff), outfile); (void)fputc((int)(word >> 8), outfile); } /* PutWord() */