DIRECTORY BasicTime USING [Now], EngineLog USING [EngineType, Object], FS USING [Error, FileInfo, StreamOpen], IO USING [Close, EndOfStream, Error, GetChar, GetLength, PutText, STREAM], PrincOpsUtils USING [LongCopy], Rope USING[ROPE]; EngineLogImpl: CEDAR PROGRAM IMPORTS BasicTime, FS, IO, PrincOpsUtils EXPORTS EngineLog = BEGIN ROPE: TYPE ~ Rope.ROPE; STREAM: TYPE ~ IO.STREAM; logFileName: ROPE = "PrintEngine.log"; localPointer: REF EngineLog.Object _ NIL; ForceOut: PUBLIC PROCEDURE = BEGIN words: NAT _ SIZE[EngineLog.Object]; s: STREAM; text: REF TEXT _ NEW[TEXT[words]]; TRUSTED BEGIN ENABLE FS.Error, IO.Error, IO.EndOfStream => GOTO Out; s _ FS.StreamOpen[fileName: logFileName, accessOptions: create, keep: 2]; PrincOpsUtils.LongCopy[from: LOOPHOLE[localPointer], nwords: words, to: (LOOPHOLE[text, LONG POINTER] + SIZE[TEXT[0]])]; IO.PutText[s, text]; IO.Close[s]; EXITS Out => {IF s # NIL THEN IO.Close[s]}; END; END; Map: PUBLIC PROCEDURE [engineType: EngineLog.EngineType, version: CARDINAL] RETURNS [pointer: REF EngineLog.Object] = BEGIN words: NAT _ SELECT engineType FROM raven => SIZE[EngineLog.Object], banshee => SIZE[EngineLog.Object], ENDCASE => 1; file: ROPE _ NIL; s: STREAM; text: REF TEXT _ NEW[TEXT[words]]; length: INT; localPointer _ pointer _ SELECT engineType FROM raven => NEW[EngineLog.Object _ [raven, BasicTime.Now[], ALL [0]]], banshee => NEW[EngineLog.Object _ [banshee, BasicTime.Now[], ALL [0]]], ENDCASE => NIL; file _ FS.FileInfo[logFileName ! FS.Error => CONTINUE].fullFName; IF file # NIL THEN TRUSTED BEGIN ENABLE FS.Error, IO.Error, IO.EndOfStream => GOTO Out; s _ FS.StreamOpen[fileName: logFileName, accessOptions: read]; IF (length _ IO.GetLength[s]) = words*2 THEN GOTO Out; FOR i: INT IN [0 .. length) DO text[i] _ IO.GetChar[s]; ENDLOOP; IO.Close[s]; EXITS Out => {IF s # NIL THEN IO.Close[s]; RETURN [NIL]}; END ELSE BEGIN ENABLE FS.Error, IO.Error => GOTO Out; s _ FS.StreamOpen[fileName: logFileName, accessOptions: create, keep: 2]; IO.Close[s]; EXITS Out => {IF s # NIL THEN IO.Close[s]; RETURN [NIL]}; END; END; -- Map END. LOG When / Who / What Strickberger / 11-Aug-85 22:43:59 / Created for Euclid. Strickberger / 22-Nov-85 18:18:44 / Specify session on OpenByName. REJECT other errors. ϊEngineLogImpl.mesa Copyright (C) Xerox Corporation 1982, 1983, 1984, 1985, 1986. All rights reserved. Last edited by Strickberger 22-Nov-85 18:18:44 Tim Diebert: December 2, 1986 1:27:00 pm PST Types Constants: Variables: PUBLIC PROCEDUREs: Κ ˜codešœ™KšœS™SKšœ.™.K™,—K˜K˜šΟk ˜ Kšœ œ˜Kšœ œ˜%Kšœœ˜'Kšœœ:œ˜JKšœœ ˜Jšœœœ˜—K˜šΟn œœ˜Kšœ œœ ˜(Kšœ ˜—˜K™K™Kšœœœ˜Kšœœœœ˜K˜Kšœ ™ —˜Kšœ œ˜&—˜Kšœ ™ —˜Kšœœœ˜)K˜Kšœ™—˜šžœœ œ˜"Kšœœœ˜$Kš œœœœœœ ˜-šœ˜ Kš œœœœœ˜6KšœœC˜IKš œœ$œœœœœ˜xKšœ˜Kšœ ˜ Kš œ œœœœ ˜+Kšœ˜—Kšœ˜——˜š žœœ œ-œœ œ˜{šœœœ ˜#Kšœ œ˜ Kšœ œ˜"Kšœ˜ —Kšœœœœœœœœœ˜Lšœœ ˜/Kšœ œ-œ˜CKšœ œ/œ˜GKšœœ˜—Kšœœœ œ ˜Ašœ˜ šœœ˜Kš œœœœœ˜6Kšœœ8˜>Kšœ œœœ˜6šœœœ˜Kšœ œ ˜Jšœ˜—Kšœ ˜ Kšœ œœœœ œœ˜9Kš˜—šœ˜ Kšœœœ œ˜&KšœœC˜IKšœ ˜ Kšœ œœœœ œœ˜9Kšœ˜——KšœΟc˜ ——˜Kšœ˜—K˜Kš˜K˜K˜7KšœDœ˜X—…—ά β