#include <direct.h>
#include <realmode.h>
#include <stdio.h>
#include <io.h>

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

}

