DIRECTORY IO, RoseCreate, RoseEvents, RoseLogging, RoseTypes; RoseLoggingImpl: CEDAR PROGRAM IMPORTS IO, RoseCreate, RoseEvents EXPORTS RoseLogging = BEGIN OPEN RoseTypes, RoseLogging; LORA: TYPE = LIST OF REF ANY; WriteRow: PUBLIC PROC [row: Row] = { IF row.intro # NIL THEN row.intro[row]; FOR elts: EltList _ row.elts, elts.rest WHILE elts # NIL DO val: ROPE; val _ elts.first.nFmt.FormatValue[elts.first.n, elts.first.nFmt, elts.first.n.valPtr]; row.to.PutF[elts.first.ioFmt, IO.rope[val]]; ENDLOOP; }; WriteEverySettle: PUBLIC PROC [row: Row, sim: Simulation] = { RoseEvents.AddWatcher[event: $Settled, watcher: [NoteSettled, row], watched: sim]; }; DontWriteEverySettle: PUBLIC PROC [row: Row, sim: Simulation] = { RoseEvents.RemoveWatcher[event: $Settled, watcher: [NoteSettled, row], watched: sim]; }; NoteSettled: PROC [event: ATOM, watched, watcherData, arg: REF ANY] --RoseEvents.NotifyProc-- = { row: Row _ NARROW[watcherData]; WriteRow[row]; }; RowFromNames: PUBLIC PROC [to: STREAM, enl: EltNamesList, pathPrefix: LORA _ NIL, from: Cell _ NIL] RETURNS [row: Row] = { last: EltList _ NIL; row _ NEW [RowRep _ [to: to, elts: NIL]]; FOR enl _ enl, enl.rest WHILE enl # NIL DO thisFrom: Cell; thisNode: Node; next: EltList; thisFrom _ IF enl.first.from # NIL THEN enl.first.from ELSE IF from # NIL OR pathPrefix # NIL THEN RoseCreate.LookupCell[path: pathPrefix, from: from] ELSE NIL; thisNode _ RoseCreate.LookupNode[ path: WITH enl.first.name SELECT FROM r: ROPE => LIST[r], rt: REF TEXT => LIST[rt], l: LORA => l, ENDCASE => ERROR, from: thisFrom]; IF thisNode = NIL THEN ERROR; next _ LIST[[ n: thisNode, nFmt: thisNode.type.procs.GetFormat[ thisNode.type, enl.first.nodeFormat], ioFmt: IF enl.first.ioFormat # NIL THEN enl.first.ioFormat ELSE IF enl.rest = NIL THEN "%g\n" ELSE "%g\t" ]]; IF next.first.nFmt = NIL THEN ERROR; IF last = NIL THEN row.elts _ next ELSE last.rest _ next; last _ next; ENDLOOP; }; END. TRoseLoggingImpl.Mesa Last Edited by: Spreitzer, April 16, 1985 5:15:42 pm PST Κ– "cedar" style˜Icode™J™8K˜KšΟk œ4˜=K˜šΠbxœœ˜Kšœ˜"Kšœ˜—K˜Kšœœ˜"K˜Kš œœœœœœ˜K˜šΟnœ œ˜$Kšœ œœ˜'šœ%œœ˜;Kšœœ˜ K˜VKšœœ ˜,Kšœ˜—K˜—K˜šŸœœœ ˜=K˜RK˜—K˜šŸœœœ ˜AKšœU˜UK˜—K˜š Ÿ œœ œœœΟcœ˜aKšœ œ˜K˜K˜—K˜šŸ œœœœ!œœœœ˜zKšœœ˜Kšœœœ˜)šœœœ˜*K˜K˜K˜šœ ˜ Kšœœœ˜+š œœœœ˜&Kšœ4˜8—Kšœœ˜ —˜!šœœœ˜%Kšœœœ˜Kšœœœœ˜Kšœœ˜ Kšœœ˜—K˜—Kšœ œœœ˜šœœ˜ K˜ šœ$˜$Kšœ˜Kšœ˜—Kšœœœœœœ œœœ˜iKšœ˜—Kšœœœœ˜$Kšœœœœ˜9K˜ Kšœ˜—K˜—K˜Kšœ˜—…—” π