Dos Exec with command interpreter
I have tried to repair this problem, but it is harder than me (for
now). Anyway, I make some modification that may claim enhancement, so
here:
- deletion of two unnecessary fields in the execution block with the
Intr 21h ax=4b00h, where they need in 01 mode (Ralph Brown's);
- better encapsulation of a prefixed string in a null terminated
string;
- complete scan of the all commandline in the second FCB;
- equality of the DS and ES when launching to avoid crash (Go32 unit
manual).
Patch to \rtl\go32v2\dos.pp, fpc 2.0.2:
172,173d171
< iniStack : realptr;
< iniCSIP : realptr;
182c180,181
< c,p : string;
---
200,202c199,202
< move(comline[0],c[1],length(comline)+1);
< c[length(comline)+2]:=#13;
< c[0]:=char(length(comline)+2);
---
204a205
219d219
< { allow slash as backslash }
223c223
< paste_to_dos(c);
---
241,248d240
< inc(arg_ofs);
< until (c[arg_ofs] in [' ',#9,#13]);
< if c[arg_ofs]<>#13 then
< begin
< repeat
< inc(arg_ofs);
< until not (c[arg_ofs] in [' ',#9]);
< end;
251c243
< dosregs.si:=(la_c+arg_ofs) and 15;
---
253c245
< dosregs.di:=fcb2_la and 15;
---
254a247,255
268,269c269,270
< dosregs.ebx:=la_e and 15;
< dosregs.es:=la_e shr 4;
---
277c278
< LastDosExitCode:=DosRegs.al
---
--
Omega e' omega e basta
|