home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Demo;
- VAR
- RestartAddress : ^Integer;
- RestartSp : Integer;
-
- {*} PROCEDURE StoreRestartPoint;
- BEGIN
- InLine($BE/RestartAddress/$8C/$C8/$89/$44/$02/$8B/$46/
- $02/$89/$04/$8B/$C4/$05/$06/$00/$A3/RestartSp);
- END;
-
- {*} PROCEDURE RestartProgram;
- BEGIN
- InLine($A1/RestartSp/$8B/$E0/$8B/$EC/
- $FF/$2E/RestartAddress);
- END;
-
- VAR
- I : Integer;
- Ch : Char;
-
- PROCEDURE Dummy;
-
- PROCEDURE NestedDummy;
- BEGIN
- WriteLn('in nested dummy');
- Write('press a key to restart... ');
- Read(Kbd, CH);
- WriteLn;
- WriteLn('restarting program from nested dummy');
- RestartProgram;
- END;
-
- BEGIN
- WriteLn('in dummy');
- WriteLn('choose from menu: ');
- WriteLn(' 1.run nested dummy procedure');
- WriteLn(' 2.exit dummy normally');
- WriteLn(' 3.restart');
- Write('Enter choice: ');
- REPEAT
- Read(Kbd,Ch);
- UNTIL (Ch In ['1', '2', '3']);
- WriteLn(Ch);
- CASE Ch Of
- '1' : NestedDummy;
- '3' : RestartProgram;
- END;
- WriteLn('normal dummy exit');
- END;
-
- BEGIN
- WriteLn('Entered main block');
- {put any desired initialization code here}
-
- WriteLn('storing restart point');
- StoreRestartPoint;
- WriteLn('after restart point');
- WriteLn('choose from menu: ');
- WriteLn(' 1.run dummy procedure');
- WriteLn(' 2.write some integers');
- WriteLn(' 3.restart');
- WriteLn(' 4.terminate');
- Write('Enter choice: ');
- REPEAT
- Read(Kbd, Ch);
- UNTIL (Ch In ['1', '2', '3', '4']);
- WriteLn(Ch);
- CASE Ch Of
- '1' : Dummy;
- '2' : BEGIN
- FOR I := 1 To 10 DO WriteLn(I);
- Write('press a key to restart... ');
- Read(Kbd, CH);
- WriteLn;
- WriteLn('restarting program');
- RestartProgram;
- END;
- '3' : BEGIN
- WriteLn('restarting program');
- RestartProgram;
- END;
- '4' : ;
- END;
- WriteLn('normal program exit');
-
- END.
-