home *** CD-ROM | disk | FTP | other *** search
- {
- 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.