This source code file is available for download here: cmd_v12_2004_09_27.zip(~1 MB)

 1: program bexec;
 2: 
 3: {$APPTYPE CONSOLE}
 4: 
 5: uses
 6:   SysUtils,ExeHdr,Classes,basShell,Chip;
 7: 
 8: function GetStream:TStream;
 9: var dosHdr:TImageDosHeader;
10: var peHdr:TImageNTHeaders;
11: var peOfs:integer;
12: var i:integer;
13: var sec:TImageSectionHeader;
14: begin
15:   Result:=TFileStream.Create(ParamStr(0),fmOpenRead or fmShareDenyWrite);
16:   Result.ReadBuffer(dosHdr,sizeof(dosHdr));
17:   peOfs:=dosHdr.e_lfanew;
18:   Result.Position:=peOfs;
19:   Result.ReadBuffer(peHdr,sizeof(peHdr));
20: 
21:   for i:=peHdr.FileHeader.NumberOfSections-1 downto 0 do begin
22:    Result.Position:=peOfs+sizeof(TImageNTHeaders)+i*sizeof(TImageSectionHeader);
23:    Result.ReadBuffer(sec,sizeof(sec));
24: 
25:    if (sec.PointerToRawData<>0) and (sec.SizeOfRawData<>0) then begin
26:     Result.Position:=sec.PointerToRawData+sec.SizeOfRawData;
27:     exit
28:    end
29:   end;
30:   Result.Free;
31:   Result:=nil    // TODO:
32: end;
33: 
34: function Command:string;
35: var src:TStream;
36: begin
37:   src:=GetStream;
38:   if Assigned(src) then begin
39:    SetLength(Result,src.Size-src.Position);
40:    try
41:     if Result<>'' then src.ReadBuffer(Result[1],Length(Result))
42:    finally
43:     src.Free
44:    end  
45:   end else
46:    Result:=''
47: end;
48: 
49: var Script:Chip.TBasic;
50: begin
51: Script:=basShell.TBasic.Create;
52: try
53:   Script.input:=@input;
54:   Script.output:=@output;
55:   Script.Run(Command+#13#10'RUN')
56: finally
57:   Script.Free
58: end
59: end.

Do you have questions, comments, feedback?