DIRECTORY Asserting, Basics, Core, IO, PrincOps, Rope, RedBlackTree, RoseBehavior, RoseEvents, RosePrivates, VFonts; RoseWireTypes: CEDAR DEFINITIONS = BEGIN LORA: TYPE = LIST OF REF ANY; ROPE: TYPE = Rope.ROPE; LOR: TYPE = LIST OF ROPE; STREAM: TYPE = IO.STREAM; Assertion: TYPE = Asserting.Assertion; Assertions: TYPE = Asserting.Assertions; SymbolTable: TYPE = RedBlackTree.Table; WatcherList: TYPE = RoseEvents.WatcherList; Watcher: TYPE = RoseEvents.Watcher; Drive: TYPE = RoseBehavior.Drive; Strength: TYPE = RoseBehavior.Strength; PortPath: TYPE = RoseBehavior.PortPath; Wire: TYPE = Core.Wire; WordPtr: TYPE = LONG POINTER TO CARDINAL; Ptr: TYPE = PrincOps.BitAddress; nilPtr: Ptr = [word: NIL, bit: 0]; CoreWireStructure: TYPE = {atom, record, sequence}; StructureOfWire: PROC [Wire] RETURNS [CoreWireStructure]; WireFlavor: TYPE = {simple, switch, drive}; WireFlavorName: ARRAY WireFlavor OF ROPE; BehaviorClassWiring: TYPE = REF BehaviorClassWiringRep; BehaviorClassWiringRep: TYPE = ARRAY WireFlavor OF RoseWireClass; BehaviorTypeWiring: TYPE = REF BehaviorTypeWiringRep; BehaviorTypeWiringRep: TYPE = ARRAY WireFlavor OF RoseWireType; RoseWireType: TYPE = REF RoseWireTypeRec; RoseWireTypeRec: TYPE = RECORD [ class: RoseWireClass, typeData: REF ANY, length: NAT, other: Assertions _ NIL]; RoseWireClass: TYPE = REF RoseWireClassRec; RoseWireClassRec: TYPE = RECORD [ structure: CoreWireStructure, dereference: BOOL, addressContaining: BOOL, length: INTEGER _ LAST[INTEGER], classData: REF ANY _ NIL, super: RoseWireSuperClass ]; RoseWireSuperClass: TYPE = REF RoseWireSuperClassRec; RoseWireSuperClassRec: TYPE = RECORD [ GetType: PROC [RoseWireClass, Wire] RETURNS [RoseWireType], ListFormats: PROC [RoseWireType] RETURNS [LOR], GetFormat: PROC [RoseWireType, ROPE] RETURNS [Format], SelectorOffset: PROC [RoseWireType, Selector] RETURNS [dBits: NAT] _ NIL, FieldName: PROC [RoseWireClass, INT] RETURNS [ROPE] _ NIL, SubType: PROC [RoseWireType, Selector] RETURNS [RoseWireType] _ NIL, SubClass: PROC [RoseWireClass, Selector] RETURNS [RoseWireClass] _ NIL, Bits: PROC [RoseWireClass] RETURNS [INT], MesaRepresentation: PROC [RoseWireClass] RETURNS [Mesa], MesaRepAux: PROC [RoseWireClass] RETURNS [Mesa] _ NIL, ReferentRep: PROC [rwc: RoseWireClass, wireExpr: ROPE] RETURNS [ROPE] _ NIL, CreateReferent: PROC [RoseWireType] RETURNS [LONG POINTER] _ NIL, flavor: WireFlavor, Initialize: PROC [rwt: RoseWireType, p: Ptr, steady: BOOL], Transduce: PROC [fromS: Strength, fromT, toT: RoseWireType, fromP, toP: Ptr] _ NIL, InitQ: PROC [rwt: RoseWireType, p: Ptr, cap: Strength] _ NIL, InitUD: PROC [rwt: RoseWireType, p: Ptr, cap: Strength] RETURNS [isInput: BOOL] _ NIL, ComputeLevel: PROC [rwt: RoseWireType, p: Ptr, xPhobic: BOOL] RETURNS [delay: BOOL] _ NIL, CopyQ, CopyUD, CopyLevel: PROC [rwt: RoseWireType, from, to: Ptr] _ NIL, EqualUD: PROC [rwt: RoseWireType, p1, p2: Ptr] RETURNS [equal: BOOL] _ NIL, MaxinQ, MaxinUD: PROC [rwt: RoseWireType, from, to: Ptr] RETURNS [increase: BOOL] _ NIL ]; Mesa: TYPE = RECORD [mesa: ROPE, directory, imports: LOR _ NIL]; Selector: TYPE = RECORD [variant: SELECT kind: * FROM whole => [], subscript--of sequence--, field--of record-- => [index: INT], ENDCASE]; WireValBreak: IO.BreakProc; Format: TYPE = REF FormatRep; FormatRep: TYPE = RECORD [ FormatValue: PROC [RoseWireType, Format, Ptr] RETURNS [ROPE], ParseValue: PROC [RoseWireType, Format, Ptr, STREAM] RETURNS [BOOLEAN], MaxWidth: PROC [RoseWireType, Format, VFonts.Font] RETURNS [INT], formatData: REF ANY _ NIL, key: ROPE ]; END. θRoseWireTypes.Mesa Spreitzer, November 18, 1985 10:02:13 pm PST Barth, September 3, 1985 4:36:21 pm PDT This module defines the what Rosemary knows about Wire types. Is a value really a pointer to stuff? For composites, are any (transitive) components represented by pointers? Not implied by dereference. = type.length when record; meaningless when sequence or atom. Interface Don't bother to list NIL. Given NIL, should return some vanilla default. See RoseWireFormats for further standardization. Structure Offset from begin of entire value to begin of selected piece. Client must interpret the dereference field of the class before applying the offset. For records. Representation No more distinction between container and interesting value; class is responsible for padding interesting part with 0's. the Mesa type of the representation Mesa code (e.g. declaration) to establish mesa type. NOT including the rep-auxes of sub-types. When class.dereference. Assuming MesaRepAux already present. When class.dereference. Behavior Prepare to propogate Q. Prepare to propogate U&D; report whether Q at input strength. Compute level from Q, U, & D. delay => would prefer not to get current answer. The following procedures need be implemented only by atomic wire types, and maybe soon basic sequences. Hmm... maybe they don't need to be implemented at all (here)... Block then Max values at from into values at to; report whether increase. IN [NUL .. SP] => sepr, ',, ':, '[, '] => break, ENDCASE => other ΚA– "cedar" style˜code™K™,K™'—K˜KšΟk œœO˜tK˜KšΠbx œœ œ˜"K˜K™=K˜Kš˜K˜Kš œœœœœœ˜Kšœœœ˜Kš œœœœœ˜Kšœœœœ˜Kšœ œ˜&Kšœ œ˜(Kšœ œ˜'Kšœ œ˜+Kšœ œ˜#Kšœœ˜!Kšœ œ˜'Kšœ œ˜'K˜Kšœœ ˜K˜Kš œ œœœœœ˜)K˜Kšœœ˜ Kšœœ ˜"K˜Kšœœ˜3KšΟnœœœ˜9K˜Kšœ œ˜+K˜Kšœœ œœ˜)K˜Kšœœœ˜7Kšœœœ œ˜AK˜Kšœœœ˜5Kšœœœ œ˜?K˜Kšœœœ˜)šœœœ˜ K˜Kšœ œœ˜Kšœœ˜ Kšœœ˜—K˜Kšœœœ˜+šœœœ˜!Kšœ˜šœ œ˜K™%—šœœ˜K™HKšœ™—šœœœœ˜ K™K™"—Kšœ œœœ˜Kšœ˜Kšœ˜—K˜Kšœœœ˜5šœœœ˜&™ KšŸœœœ˜;šŸ œœœœ˜/K™—šŸ œœœœ ˜6K™.K™0——™ š Ÿœœœ œœ˜IK™“—š Ÿ œœœœœœ˜:K™ —KšŸœœœœ˜DKšŸœœœœ˜G—™šŸœœœœ˜)K™x—šŸœœœ˜8Kšœ#™#—šŸ œœœ œ˜6Kšœ4™4KšΟeœ&™)—š Ÿ œœ œœœœ˜LKšœ™Kšœ$™$—š Ÿœœœœœœ˜AKšœ™——™K˜KšŸ œœ%œ˜;KšŸ œœ@œ˜SšΠbnœœ.œ˜=K™—š ‘œœ,œ œœ˜VK™=—š Ÿ œœ&œœ œœ˜ZK™N—K™¨Kš Οbœ’œŸ œœ&œ˜HKš Ÿœœ"œ œœ˜Kš ’œŸœœ$œ œ˜WK™I——K˜—K˜Kš œœœœœœ˜@K˜šœ œœ œ ˜5K˜ Kšœ Οcœ£ œ œ˜=Kšœ˜ —K˜šœœ ˜Kš œœœ£œ£™Kšœ™K™—K˜Kšœœœ ˜šœ œœ˜KšŸ œœœœ˜=Kš Ÿ œœœœœ˜GKšŸœœ%œœ˜AKšœ œœœ˜Kšœ˜ K˜—K˜Kšœ˜—…— ς