-- Copyright (C) 1986 by Xerox Corporation. All rights reserved.
-- CRuntimeInternal.mesa
-- NFS 3-Mar-86 13:29:05
DIRECTORY
CString USING [CString],
File USING [File],
PrincOps USING [GlobalFrameHandle],
Stream USING [Handle];
CRuntimeInternal: DEFINITIONS = {
ConfigEntry: TYPE = RECORD [
config: CARDINAL,
gf: PrincOps.GlobalFrameHandle,
heap: UNCOUNTED ZONE,
openStreams: StreamList,
stdin, stdout, stderr: Stream.Handle,
link: ConfigHandle,
data: LONG POINTER TO ArraySpace];
ConfigHandle: TYPE = LONG POINTER TO ConfigEntry;
CEList: ConfigHandle;
gfTableSize: CARDINAL = 50;
GFEntry: TYPE = RECORD [
gf: GlobalFrameHandle, config: ConfigHandle, link: GFList,
data: LONG POINTER TO ArraySpace];
GFList: TYPE = LONG POINTER TO GFEntry;
GFIndex: TYPE = CARDINAL [0..gfTableSize);
GFTable: TYPE = ARRAY GFIndex OF GFList ← ALL[NIL];
gfTable: LONG POINTER TO GFTable;
shTableSize: CARDINAL = 50;
SHTable: TYPE = ARRAY SHIndex OF SHList ← ALL[NIL];
SHIndex: TYPE = [0..shTableSize);
SHList: TYPE = LONG POINTER TO SHEntry;
SHEntry: TYPE = RECORD [sh: Stream.Handle, refCount: CARDINAL, link: SHList];
shTable: LONG POINTER TO SHTable;
processTableSize: CARDINAL = 17;
ProcessTable: TYPE = ARRAY ProcessIndex OF ProcessList ← ALL[NIL];
ProcessIndex: TYPE = [0..processTableSize);
ProcessList: TYPE = LONG POINTER TO ProcessEntry;
ProcessEntry: TYPE = RECORD [
p: PROCESS, config: ConfigHandle, link: ProcessList];
processTable: LONG POINTER TO ProcessTable;
StreamList: TYPE = LONG POINTER TO StreamEntry;
StreamEntry: TYPE = RECORD [sH: Stream.Handle, link: StreamList];
ArraySpace: TYPE = RECORD [
space, nextArray: LONG POINTER,
words: LONG CARDINAL,
firstArrayOffset: CARDINAL,
filePart: SELECT size: * FROM small => [], large => [file: File.File] ENDCASE];
GlobalFrameHandle: TYPE = PrincOps.GlobalFrameHandle;
MainArgsNeeded: SIGNAL
RETURNS [argC: CARDINAL, argV: LONG POINTER TO CString.CString];
lock: MONITORLOCK;
SetConfig: PROCEDURE [
gf: GlobalFrameHandle, stdin, stdout, stderr: Stream.Handle];
ResetConfig: PROCEDURE [
gf: GlobalFrameHandle, stdin, stdout, stderr: Stream.Handle];
LogCleanUp: PROCEDURE [cH: ConfigHandle] RETURNS [cleanUpNeeded: BOOLEAN];
DeleteAndLogHeap: PROCEDURE [z: UNCOUNTED ZONE];
DeleteAndLogStream: PROCEDURE [sH: Stream.Handle];
}.