#include #include #include #include extern DWORD _dmcall; #ifdef MAINENV int main(int i,char **v,char **e); #else int main(int i,char **v); #endif int premain(int c,char **v,char **e) { int i,j; _asm { in al,92h or al,2 out 92h,al } rmsetup(); if (_dmcall) { i= *(int *)0x200000;j= *(int *)0x300000; *(int *)0x200000=1;*(int *)0x300000=2; __asm { wbinvd } if ((*(int *)0x200000-1) || (*(int *)0x300000-2)) { printf("A20 Error\n"); *(int *)0x200000=i;*(int *)0x300000=j; return(20); } } *(int *)0x200000=i;*(int *)0x300000=j; _rmpatchi((int)_lopen,(int)rmlopen); _rmpatchi((int)_lclose,(int)rmlclose); _rmpatchi((int)_lcreat,(int)rmlcreat); _rmpatchi((int)_lread,(int)rmlread); _rmpatchi((int)_lwrite,(int)rmlwrite); _rmpatchi((int)_llseek,(int)rmlseek); _rmpatch((int)_unlink,(int)rmdelete); _rmpatch((int)rename,(int)rmrename); _rmpatch((int)dup,(int)rmdup); _rmpatch((int)dup2,(int)rmdup2); _rmpatch((int)_mkdir,(int)rmmkdir); _rmpatch((int)_rmdir,(int)rmrmdir); _rmpatch((int)_chdir,(int)rmchdir); _rmpatch((int)read,(int)rmread); _rmpatch((int)write,(int)rmwrite); _rmpatch((int)printf,(int)rmprintf); _rmpatch((int)malloc,(int)rmmalloc); _rmpatch((int)calloc,(int)rmcalloc); _rmpatch((int)free,(int)rmfree); _rmpatch((int)exit,(int)rmexit); #ifdef MAINENV return(main(c,v,e)); #else return(main(c,v)); #endif }