DIRECTORY AMBridge, AMTypes, Interpreter, Convert, FS, IO, QuadIO, SymTab; QuadIOImpl: CEDAR PROGRAM IMPORTS AMBridge, Interpreter, Convert, FS, IO, SymTab EXPORTS QuadIO = BEGIN Word: TYPE = LONG CARDINAL; QuadFileFormat: PUBLIC ERROR = CODE; ReadFile: PUBLIC PROC[fileName: IO.ROPE] RETURNS[mem: QuadIO.Memory] = { quadFile: IO.STREAM _ FS.StreamOpen[fileName]; count: INT _ 0; list: LIST OF QuadIO.MemWord _ NIL; mem _ NEW[QuadIO.MemoryRec _ [sym: SymTab.Create[]]]; DO Skip: PROC [source: IO.STREAM, c: CHAR] ~ {[] _ IO.SkipWhitespace[source]; IF IO.GetChar[source] # c THEN QuadFileFormat}; tokenKind: IO.TokenKind; token: IO.ROPE; add, data: Word; [tokenKind, token] _ quadFile.GetCedarTokenRope[! IO.EndOfStream => EXIT]; SELECT tokenKind FROM tokenDECIMAL, tokenOCTAL, tokenHEX => { add _ Convert.CardFromRope[token]; data _ 0; Skip[quadFile, '/]; THROUGH [0..4) DO data _ data*100H + quadFile.GetCard[] ENDLOOP; list _ CONS[[add, data], list]; count _ count+1}; tokenID => { Skip[quadFile, '=]; add _ quadFile.GetCard[]; []_SymTab.Store[mem.sym, token, TVFromRef[NEW[Word _ add]]]}; tokenEOF => EXIT; ENDCASE => QuadFileFormat; ENDLOOP; quadFile.Close[]; mem.wds _ NEW[QuadIO.MemWords[count]]; FOR i: INT DECREASING IN [0..count) DO mem.wds[i] _ list.first; list _ list.rest ENDLOOP}; InterpAddr: PUBLIC PROC[addRope: IO.ROPE, mem: QuadIO.Memory] RETURNS[add: Word] = { result: AMTypes.TV; errorRope: IO.ROPE; noResult: BOOL; refCard: REF; [result, errorRope, noResult] _ Interpreter.Evaluate[addRope, NIL, LIST[mem.sym]]; IF noResult THEN {add _ 0; SIGNAL Signal[errorRope]; RETURN[add]}; refCard _ RefFromTV[result]; WITH refCard SELECT FROM word: REF Word => {RETURN[word^]}; card: REF LONG CARDINAL => {RETURN[card^]}; int: REF INT => {IF int^<0 THEN ERROR; RETURN[int^]}; ENDCASE => ERROR}; TVFromRef: PROC [ref: REF] RETURNS [AMTypes.TV] = TRUSTED {RETURN [AMBridge.TVForReferent[ref]]}; RefFromTV: PROC [tv: REF] RETURNS [REF] = { IF tv=NIL THEN RETURN [NIL]; IF ~ISTYPE [tv, AMTypes.TV] THEN ERROR; TRUSTED {RETURN [AMBridge.SomeRefFromTV[tv]]} }; Signal: SIGNAL[msg: IO.ROPE] = CODE; END. ΄QuadIOImpl.mesa Copyright Σ 1987 by Xerox Corporation. All rights reserved. Don Curry, May 1, 1987 2:20:03 pm PDT Last Edited by: Louis Monier April 2, 1987 4:47:55 pm PST ΚΨ˜šœ™Jšœ<™œ˜RJšœ œ œœ˜BJšœ˜šœ œ˜Jšœœ œ ˜%Jš œœœœœ ˜+Jš œœœ œœœœ˜9Jšœ œ˜——K˜š ž œœœœ œœ˜:Kšœœ ˜'K˜—š ž œœœœœ˜+Kš œœœœœ˜Kš œœœœœ˜(Kšœœ!˜0J˜—Jš žœœœœœ˜$J˜Jšœ˜—…—f ς