-- Copyright (C) 1986 by Xerox Corporation. All rights reserved.
-- File: FBasicsImpl.mesa - created by JKF. Last edit:
-- JKF 22-May-86 11:32:10
DIRECTORY
FBasics USING [LibraryProblem],
CRuntime USING [ConfigHandle, GetConfigHandle, ProcessNotRegistered,
SetConfigHandle],
Heap USING [systemZone],
IsAround USING [FortranMathLibraryIsLoadedIfIsboundIsTrueForThisProc],
MFile USING [Error, Handle, ReadOnly],
Runtime USING [ControlLink, IsBound],
StartState USING [normalOutcome, StartOrRestart];
FBasicsImpl: PROGRAM
IMPORTS CRuntime, FBasics, Heap, IsAround, MFile, Runtime, StartState
EXPORTS FBasics =
BEGIN
z: UNCOUNTED ZONE = Heap.systemZone;
-- Raised if library can't be found or loaded:
LibraryProblem: PUBLIC ERROR [s: LONG STRING] = CODE;
FortranLoaded: PUBLIC PROC [] = {
retval: BOOLEAN ← FALSE;
-- check for FSupport loaded
retval ← CheckLib[
"FSupport.archivebcd"L,
LOOPHOLE[IsAround.FortranMathLibraryIsLoadedIfIsboundIsTrueForThisProc]];
IF retval = FALSE THEN {
retval ← CheckLib[
"FSupport.bcd"L,
LOOPHOLE[IsAround.FortranMathLibraryIsLoadedIfIsboundIsTrueForThisProc]];
IF retval = FALSE THEN FBasics.LibraryProblem["Could not load FSupport"L]};
};
CheckLib: PROC [s: LONG STRING, link: Runtime.ControlLink]
RETURNS [retval: BOOLEAN ← TRUE] = {
i: INTEGER ← 0;
file: MFile.Handle ← NIL;
cH:CRuntime.ConfigHandle ← NIL;
IF Runtime.IsBound[link] THEN RETURN[TRUE];
file ← MFile.ReadOnly[
s, [NIL, NIL] ! MFile.Error => {retval ← FALSE; CONTINUE}];
IF retval = FALSE THEN RETURN[FALSE];
cH ← CRuntime.GetConfigHandle[!CRuntime.ProcessNotRegistered => CONTINUE];
i ← StartState.StartOrRestart[
file: file, argc: 0, argv: NIL, stdin: NIL, stdout: NIL, stderr: NIL];
IF cH # NIL THEN CRuntime.SetConfigHandle[cH];
IF i = StartState.normalOutcome THEN RETURN[TRUE] ELSE RETURN[FALSE]};
END...