/* vim: set filetype=c ts=8 noexpandtab: */ #define COMPRESS_PRINT #include "common.h" #include "uncompress.h" #include #include #include static unsigned char *currentPort = (unsigned char*) 0x4F4E78; static __declspec(naked) int sub_46A6F0( int a, unsigned char portStuff, char *dest, int length) { _asm { mov eax, 0x46A6F0 jmp eax } } static __declspec(naked) int sub_46A6C0(char *dest, int length) { _asm { mov eax, 0x46A6C0 jmp eax } } int uncompress_main(char *dest, char *source, int *length) { unsigned char res; #ifdef COMPRESS_PRINT int i; printf("IN "); for (i = 0; i < *length; i++) { printf("%02X ", (unsigned char) source[i]); } printf("\n"); #endif (*length)--; memcpy(dest, source + 1, *length); sub_46A6F0(0, *currentPort, dest, *length); res = sub_46A6C0(dest, *length); #ifdef COMPRESS_PRINT printf("OUT "); for (i = 0; i < *length; i++) { printf("%02X ", (unsigned char) dest[i]); } printf("\n"); #endif /* res -= source[0]; res = -res; // sbb eax, eax // inc eax*/ /*always accept for now I suppose...*/ return 1; }