DIRECTORY FS, IO, Rope, RoseCreate, RoseTranslateTypes, RoseTranslateInsides, RoseTypes; RopePorts: CEDAR PROGRAM IMPORTS FS, IO, Rope, RoseTranslateInsides EXPORTS RoseCreate = BEGIN OPEN RoseTypes, RoseTranslateTypes, RoseTranslateInsides; PortsFromROPE: PUBLIC PROC [asRope: ROPE] RETURNS [ports: Ports] = {ports _ PortsFromStream[IO.RIS[asRope]]}; PortsFromFile: PUBLIC PROC [fileName: ROPE] RETURNS [ports: Ports] = {ports _ PortsFromStream[FS.StreamOpen[fileName]]}; PortsFromStream: PUBLIC PROC [stream: STREAM] RETURNS [ports: Ports] = BEGIN length: CARDINAL _ stream.GetCard[]; ports _ NEW [PortsRep[length]]; FOR portIndex: CARDINAL IN [0 .. length) DO job: Job _ NEW [JobRep _ [ exec: NIL, rootName: NIL, from: stream, log: viewerLog, type: Other]]; any: REF ANY; bits: [0 .. 16); terminator: ROPE; ports[portIndex].firstWord _ stream.GetCard[]; ports[portIndex].wordCount _ stream.GetCard[]; ports[portIndex].name _ stream.GetRopeLiteral[]; [any, terminator] _ ParseExpression[job, TRUE]; IF NOT terminator.Equal["!!"] THEN ERROR; WITH any SELECT FROM sti: SignalTypeInvocation => ports[portIndex].type _ sti.st; rope: ROPE => {sti: SignalTypeInvocation _ InstantiateSignalType[job, rope, NIL]; ports[portIndex].type _ sti.st}; ENDCASE => ERROR; bits _ stream.GetCard[]; ports[portIndex].input _ (bits MOD 2) >= 1; ports[portIndex].output _ (bits MOD 4) >= 2; ports[portIndex].XPhobic _ (bits MOD 8) >= 4; ports[portIndex].special _ (bits MOD 16) >= 8; ENDLOOP; [] _ stream.SkipWhitespace[flushComments: FALSE]; IF NOT stream.EndOf[] THEN ERROR; END; END. LRopePorts.Mesa last edited by Spreitzer March 11, 1984 5:07:53 pm PST ΚH– "cedar" style˜Icode™K™6K˜KšΟk œœœH˜XK˜šΠbx œœ˜Kšœœœ˜*Kšœ ˜—K˜Kšœœ5˜?K˜š Οn œœœ œœ˜BKšœœœ ˜*—K˜š Ÿ œœœ œœ˜DKšœœ˜3—K˜š Ÿœœœ œœ˜FKš˜Kšœœ˜$Kšœœ˜šœ œœ˜+šœ œ ˜Kšœœ˜ Kšœ œ˜K˜ Kšœ˜K˜—Kšœœœ˜ K˜Kšœ œ˜Kšœ.˜.Kšœ.˜.Kšœ0˜0Kšœ)œ˜/Kšœœœœ˜)šœœ˜Kšœ<˜