-- 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]; }.