[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]
{
This code is provided as is, without guarrantees or support of any kind.
We have two programs, one of which launches another, and passes
shared data to it. You can place anything in that shared data,
including instructions on when to launch a third or fourth program.
The shared data could be of virtually any size, the record we
chose here was picked more or less at random.
}
{$M 1024, 0, 0}
{$R+,S+}
program Home;
Uses
Dos,
SharInfo;
Const
SD: TData =
(S: 'Hi, this message came from Home.Exe.';
I: 42);
var
AddrStr: String[11];
Temp: String[5];
procedure HandleInput;
var
vSeg, vOfs, Code: Word;
PData: ^TData;
begin
Val(ParamStr(1), vSeg, Code);
Val(ParamStr(2), vOfs, Code);
PData := Ptr(vSeg, vOfs);
WriteLn('Home hears: ', PData^.S);
WriteLn('The magic number is: ', PData^.I);
end;
begin
FillChar(AddrStr[1], 11, #32);
Str(Seg(SD), AddrStr);
Str(Ofs(SD), Temp);
Move(Temp[1], AddrStr[length(AddrStr) + 2], length(Temp));
Inc(AddrStr[0], succ(length(temp)));
WriteLn('===============');
WriteLn('Execing Visitor');
WriteLn('===============');
Swapvectors;
Exec('Visitor.Exe', AddrStr);
Swapvectors;
WriteLn('==========================');
WriteLn('We have returned to home. ');
WriteLn('==========================');
WriteLn;
WriteLn('Home Says: ', SD.S);
WriteLn('Here''s a number visitor gave us: ', SD.I);
end.
{======================}
{$M 2024, 0, 2000}
{$S+,R+}
program Visitor;
Uses
Dos,
SharInfo;
var
vSeg, vOfs, Code: Word;
PData: ^TData;
procedure ReportError;
begin
WriteLn('This program is a subprogram of Home');
Halt(1);
end;
procedure SendDataBack;
var
AddrStr: String[11];
Temp: String[5];
SD: TData;
begin
SD.S := 'Hi, this message came from Visitor.Exe.';
SD.I := 42;
FillChar(AddrStr[1], 11, #32);
Str(Seg(SD), AddrStr);
Str(Ofs(SD), Temp);
Move(Temp[1], AddrStr[length(AddrStr) + 2], length(Temp));
Inc(AddrStr[0], succ(length(temp)));
Exec('Home.Exe', AddrStr);
end;
begin
if ParamCount <> 2 then ReportError;
Val(ParamStr(1), vSeg, Code);
if Code <> 0 then ReportError;
Val(ParamStr(2), vOfs, Code);
if Code <> 0 then ReportError;
PData := Ptr(vSeg, vOfs);
WriteLn;
WriteLn('Visitor hears: ', PData^.S);
WriteLn;
PData^.S := 'This is a message from visitor. ';
PData^.i := 231;
{SendDataBack;}
end.
{======================}
Unit SharInfo;
{
Here 's the data being shared between the two programs.
I've declared a record with a string and an integer, but
it wouldn't matter what the contents of this record
happened to be. The fields could be of virtually any type
and could contain any type of data.
}
Interface
Type
TData = Record
S: String;
I: Integer;
end;
Implementation
end.
[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]