From 044a54d4b77c8f8baea68c337f1d9c5ce8008dfa Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Sat, 19 Oct 2002 17:23:38 +0000 Subject: [PATCH] Updated to use new paramblock class and some endian fixes for the exe header. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@359 --- src/dos/dos_execute.cpp | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/dos/dos_execute.cpp b/src/dos/dos_execute.cpp index b582a37e..80020c12 100644 --- a/src/dos/dos_execute.cpp +++ b/src/dos/dos_execute.cpp @@ -191,28 +191,24 @@ static void SetupPSP(Bit16u pspseg,Bit16u memsize,Bit16u envseg) { dos.dta=RealMake(pspseg,0x80); } -static void SetupCMDLine(Bit16u pspseg,ParamBlock * block) +static void SetupCMDLine(Bit16u pspseg,DOS_ParamBlock & block) { DOS_PSP psp(pspseg); // if cmdtail==0 it will inited as empty in SetCommandTail - psp.SetCommandTail(block->exec.cmdtail); + psp.SetCommandTail(block.data.exec.cmdtail); } -bool DOS_Execute(char * name,ParamBlock * _block,Bit8u flags) { +bool DOS_Execute(char * name,PhysPt block_pt,Bit8u flags) { EXE_Header head;Bitu i; Bit16u fhandle;Bit16u len;Bit32u pos; Bit16u pspseg,envseg,loadseg,memsize,readsize; HostPt loadaddress;RealPt relocpt; - Bitu headersize,imagesize; + DOS_ParamBlock block(block_pt); + block.LoadData(); if (flags!=LOADNGO && flags!=OVERLAY) { E_Exit("DOS:Not supported execute mode %d for file %s",flags,name); } - - // Parameter block may be overwritten on load, so save these values ! - ParamBlock block; - memcpy(&block,_block,sizeof(ParamBlock)); - /* Check for EXE or COM File */ bool iscom=false; if (!DOS_OpenFile(name,OPEN_READ,&fhandle)) return false; @@ -221,15 +217,22 @@ bool DOS_Execute(char * name,ParamBlock * _block,Bit8u flags) { DOS_CloseFile(fhandle); return false; } + /* Convert the header to correct endian, i hope this works */ + HostPt endian=(HostPt)&head; + for (i=0;i