-- Copyright (C) 1986 by Xerox Corporation. All rights reserved.
-- StartState.mesa
-- NFS 30-Jan-86 11:08:35
DIRECTORY
CString USING [CString],
MFile USING [Handle, Object],
MLoader USING [Handle, Object],
Stream USING [Handle];
StartState: DEFINITIONS = {
Handle: TYPE = LONG POINTER TO Object;
Object: TYPE;
EnumerateProc: TYPE = PROCEDURE [ssh: Handle, mh: MLoader.Handle]
RETURNS [continue: BOOLEAN ← TRUE];
normalOutcome: INTEGER = 0;
abortOutcome: INTEGER = -1;
zone: UNCOUNTED ZONE;
-- StartOrRestart, Start and Restart return the value normalOutcome
-- unless CRuntime.Exit or CRuntime.Abort are called.
-- If CRuntime.Exit is called, then the value
-- passed to Exit is returned. If CRuntime.Abort is called,
-- then it returns abortOutcome.
-- StartOrRestart can raise the error LoadError or the signal VersionMismatch.
StartOrRestart: PROCEDURE [
file: MFile.Handle, argc: CARDINAL, argv: LONG POINTER TO CString.CString,
stdin, stdout, stderr: Stream.Handle] RETURNS [outcome: INTEGER];
-- GetHandle is used to acquire a Handle to pass to Load, Start, and Restart.
GetHandle: PROCEDURE [file: MFile.Handle]
RETURNS [h: Handle, canRestart: BOOLEAN];
-- Load can raise the error LoadError or the signal VersionMismatch.
Load: PROCEDURE [h: Handle, fh: MFile.Handle];
Start: PROCEDURE [
h: Handle, argc: CARDINAL, argv: LONG POINTER TO CString.CString,
stdin, stdout, stderr: Stream.Handle] RETURNS [outcome: INTEGER];
Restart: PROCEDURE [
h: Handle, argc: CARDINAL, argv: LONG POINTER TO CString.CString,
stdin, stdout, stderr: Stream.Handle] RETURNS [outcome: INTEGER];
<<Unload, UnloadFromFile, and UnloadUnstartedProgram
can raise the error UnloadError.>>
Unload: PROCEDURE [h: MLoader.Handle];
UnloadFromFile: PROCEDURE [file: MFile.Handle]
RETURNS [instancesUnloaded: CARDINAL];
UnloadUnstartedProgram: PROCEDURE [h: Handle];
EnumerateHandles: PROCEDURE [file: MFile.Handle, proc: EnumerateProc];
GetLoadHandle: PROCEDURE [h: Handle] RETURNS [MLoader.Handle];
SetLoadHandle: PROCEDURE [h: Handle, lh: MLoader.Handle];
LoadError: ERROR [message: LONG STRING];
VersionMismatch: SIGNAL [module: LONG STRING];
UnloadError: ERROR [message: LONG STRING, instancesAlreadyUnloaded: CARDINAL];
}.