-- Copyright (C) 1986 by Xerox Corporation. All rights reserved.
-- CRuntime.mesa
-- NFS 4-Mar-86 12:00:02
DIRECTORY
CBasics USING [FilePtr],
CString USING [CString],
PrincOps USING [GlobalFrameHandle],
Stream USING [Handle];
CRuntime: DEFINITIONS = {
GlobalFrameHandle: TYPE = PrincOps.GlobalFrameHandle;
normalOutcome: INTEGER = 0;
abortOutcome: INTEGER = -1;
FilePtr: TYPE = CBasics.FilePtr;
ConfigHandle: TYPE = LONG POINTER TO ConfigEntry;
ConfigEntry: TYPE;
<< The variable processesAborted is NIL unless the user has aborted
a program running in an instance of a C environment. It is here as an
accelerator, since the procedure StopIfCurrentProcessAborted
need not be called if processesAborted is NIL.
Mesa programs need not explicity refer to this
var. but can instead use the inline procedure StopIfUserAborted.
Environment instances that want to note a user abort should
call NoteAbortedProcess, passing the process id of the program to
be aborted as a parameter.>>
processesAborted: ProcessList;
ProcessList: TYPE = LONG POINTER TO ProcessEntry;
ProcessEntry: TYPE;
StopIfUserAborted: PROCEDURE = INLINE {
IF processesAborted # NIL THEN StopIfCurrentProcessAborted[]; };
StopIfCurrentProcessAborted: PROCEDURE;
NoteAbortedProcess: PROCEDURE [p: PROCESS];
ProcessNotRegistered: ERROR;
ProgramExited: ERROR [status: INTEGER];
TooMuchGlobalArraySpace: ERROR;
log: Stream.Handle; -- CRuntime.log
z: UNCOUNTED ZONE;
arrayZone: UNCOUNTED ZONE;
Start: PROCEDURE [
gf: GlobalFrameHandle, argc: CARDINAL, argv: LONG POINTER TO CString.CString,
stdin, stdout, stderr: Stream.Handle] RETURNS [outcome: INTEGER];
Restart: PROCEDURE [
gf: GlobalFrameHandle, argc: CARDINAL, argv: LONG POINTER TO CString.CString,
stdin, stdout, stderr: Stream.Handle] RETURNS [outcome: INTEGER];
GetHeap: PROCEDURE RETURNS [UNCOUNTED ZONE];
SetHeap: PROCEDURE [h: UNCOUNTED ZONE];
EnterStream: PROCEDURE [sH: Stream.Handle] RETURNS [FilePtr];
EnterStreamGlobally: PROCEDURE [sH: Stream.Handle];
RemoveStream: PROCEDURE [sH: Stream.Handle] RETURNS [canDeleteStream: BOOLEAN];
CanDelete: PROCEDURE [sh: Stream.Handle] RETURNS [BOOLEAN];
GetStdin: PROCEDURE RETURNS [FilePtr];
GetStdout: PROCEDURE RETURNS [FilePtr];
GetStderr: PROCEDURE RETURNS [FilePtr];
SetStdin: PROCEDURE [fp: FilePtr];
SetStdout: PROCEDURE [fp: FilePtr];
SetStderr: PROCEDURE [fp: FilePtr];
CleanUp: PROCEDURE;
StartProgram: PROCEDURE [
fileName: CString.CString, argc: CARDINAL,
argv: LONG POINTER TO CString.CString, stdin, stdout, stderr: Stream.Handle]
RETURNS [outcome: INTEGER];
RemoveConfig: PROCEDURE [gf: GlobalFrameHandle];
RegisterProcess: PROCEDURE;
GetConfigHandle: PROCEDURE RETURNS [ConfigHandle];
SetConfigHandle: PROCEDURE [cH: ConfigHandle];
}.