DIRECTORY Atom, Basics, BiasTypes, IO, Rope, RoseTypes, SignalTypeRegistration, VFonts; BiasTypesImpl: CEDAR PROGRAM IMPORTS Atom, IO, Rope, SignalTypeRegistration, VFonts EXPORTS BiasTypes = BEGIN OPEN RoseTypes, BiasTypes; biasProcs: NodeProcs _ NEW [NodeProcsRep _ [ UserDescription: BiasUserDescription, ListFormats: BiasListFormats, GetFormat: BiasGetFormat, MesaForSelf: BiasMesaForSelf, SelectorOffset: BiasSelectorOffset, SubType: BiasSubType, Bits: BiasBits, MesaRepresentation: BiasMesaRepresentation ]]; biasType: PUBLIC NodeType _ NEW [NodeTypeRep[atom] _ [ procs: biasProcs, typeData: NIL, simple: TRUE, structure: atom[$BiasWire]]]; normalBiasFormat: Format _ NEW [FormatRep _ [ FormatValue: BiasFormatValue, ParseValue: BiasParseValue, FormatTest: BiasFormatTest, ParseTest: BiasParseTest, MaxWidth: BiasMaxWidth, key: "bias"]]; initBiasFormat: Format _ NEW [FormatRep _ [ ParseValue: BiasParseInitValue, key: "init"]]; ConstructBiasType: PROC [parms: REF ANY --UNION [BindingList, Args]--] RETURNS [type: NodeType]--RoseTranslateTypes.NodeTypeConstructor-- = BEGIN type _ biasType; END; BiasUserDescription: PROC [NodeType] RETURNS [r: ROPE] = {r _ "Bias"}; BiasListFormats: PROC [NodeType] RETURNS [l: RopeList] = {l _ LIST ["bias"]}; BiasGetFormat: PROC [nt: NodeType, f: ROPE] RETURNS [fmt: Format] = {fmt _ IF f.Equal["init"] THEN initBiasFormat ELSE normalBiasFormat}; BiasMesaForSelf: PROC [NodeType] RETURNS [m: Mesa] = {m _ [mesa: "BiasTypes.biasType", imports: LIST["BiasTypes"]]}; BiasSelectorOffset: PROC [nt: NodeType, s: Selector] RETURNS [o: NAT] = { o _ WITH s SELECT FROM whole => 0, number, range => ERROR, ENDCASE => ERROR}; BiasSubType: PROC [nt: NodeType, s: Selector] RETURNS [snt: NodeType] = { snt _ WITH s SELECT FROM whole => nt, number, range => ERROR, ENDCASE => ERROR}; BiasBits: PROC [NodeType] RETURNS [container, data, leftPad: INT] = {RETURN [1, 1, 0]}; BiasMesaRepresentation: PROC [NodeType] RETURNS [m: Mesa] = {m _ ["BiasTypes.Bias", LIST["BiasTypes"]]}; BiasPtr: TYPE = RECORD [ i: [0 .. Basics.bitsPerWord), p: LONG POINTER TO PACKED ARRAY [0 .. Basics.bitsPerWord) OF Bias]; ToBiasPtr: PROC [p: Ptr] RETURNS [bp: BiasPtr] = TRUSTED {bp _ [p.bit, LOOPHOLE[p.word]]}; BiasFormatValue: PROC [node: Node, fmt: Format, p: Ptr] RETURNS [r: ROPE] = TRUSTED { bp: BiasPtr _ ToBiasPtr[p]; r _ Encode[bp.p[bp.i]]}; Encode: PROC [b: Bias] RETURNS [r: ROPE] = { r _ SELECT b FROM Plus => "+", Minus => "-", ENDCASE => ERROR Coding}; Coding: ERROR = CODE; BiasParseInitValue: PROC [node: Node, fmt: Format, p: Ptr, s: STREAM] RETURNS [success: BOOLEAN] = { b: Bias; bp: BiasPtr _ ToBiasPtr[p]; atom: ATOM _ Atom.MakeAtom[s.GetID[]]; success _ TRUE; SELECT atom FROM $initial, $steady => b _ Plus; ENDCASE => success _ FALSE; IF NOT success THEN RETURN; TRUSTED {bp.p[bp.i] _ b}; }; BiasParseValue: PROC [node: Node, fmt: Format, p: Ptr, s: STREAM] RETURNS [success: BOOLEAN] = { b: Bias; bp: BiasPtr _ ToBiasPtr[p]; success _ TRUE; b _ Decode[s !Coding => {success _ FALSE; CONTINUE}]; IF NOT success THEN RETURN; TRUSTED {bp.p[bp.i] _ b}; }; Decode: PROC [from: STREAM] RETURNS [b: Bias] = { c: CHAR; [] _ from.SkipWhitespace[flushComments: FALSE]; c _ from.GetChar[]; SELECT c FROM '+ => b _ Plus; '- => b _ Minus; ENDCASE => ERROR Coding}; BiasFormatTest: PROC [nt: NodeType, fmt: Format, test: NodeTest] RETURNS [r: ROPE] = BEGIN rb: REF Bias _ NARROW[test.data]; r _ Encode[rb^]; END; BiasParseTest: PROC [nt: NodeType, fmt: Format, s: STREAM] RETURNS [success: BOOLEAN, test: NodeTest] = BEGIN b: Bias; success _ TRUE; b _ Decode[s !Coding => {success _ FALSE; CONTINUE}]; IF NOT success THEN RETURN; test _ [BiasTest, NEW [Bias _ b]]; END; BiasTest: PROC [where: Ptr, testData: REF ANY, nodeType: NodeType] RETURNS [passes: BOOLEAN] --NodeTestProc-- = BEGIN rb: REF Bias _ NARROW[testData]; bp: BiasPtr _ ToBiasPtr[where]; TRUSTED {passes _ bp.p[bp.i] = rb^}; END; BiasMaxWidth: PROC [nt: NodeType, fmt: Format, font: VFonts.Font] RETURNS [INT] = {RETURN [VFonts.StringWidth["+", font]]}; Setup: PROC = BEGIN SignalTypeRegistration.RegisterNodeTypeConstructor["BIAS", ConstructBiasType]; END; Setup[]; END. vBiasTypesImpl.Mesa, from [Indigo]r>Rosemary.DF Last Edited by: Spreitzer, May 8, 1985 4:02:31 pm PDT Κ˜Jšœ+Οmœ ™8J™5Icode˜KšΟk œžœ3˜XK˜šΠbx œžœž˜Kšžœžœ&˜6Kšžœ ˜—K˜Kšžœžœ˜ K˜šœžœ˜,Kšœ%˜%K˜Kšœ˜Kšœ˜Kšœ#˜#Kšœ˜K˜Kšœ*˜*Kšœ˜—K˜šœ žœ žœ˜6K˜Kšœ žœ˜Kšœžœ˜ K˜—K˜šœžœ˜-Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜—K˜šœžœ˜+Kšœ˜Kšœ˜—K˜šΟnœžœ žœžœΟcœžœ‘*œ˜‹Kšž˜K˜Kšžœ˜—K˜Kš œžœ žœžœ˜FKš œžœ žœžœ ˜Mš  œžœžœžœ˜CKšœžœžœžœ˜E—š œžœ žœ ˜4Kšœ+žœ˜?—š œžœžœžœ˜Išœžœžœž˜K˜ Kšœžœ˜Kšžœžœ˜——š  œžœžœ˜Išœžœžœž˜Kšœ ˜ Kšœžœ˜Kšžœžœ˜——š œžœ žœžœ˜CKšœžœ ˜—š œžœ žœ ˜;Kšœžœ˜,—K˜šœ žœžœ˜K˜Kš œžœžœžœžœžœžœ˜C—K˜š  œžœ žœž˜8Kšœžœ ˜!—K˜š  œžœ#žœžœžœ˜UKšœ˜Kšœ˜—K˜š œžœ žœžœ˜,šœžœž˜K˜ K˜ Kšžœžœ ˜——K˜Kšœžœžœ˜K˜š  œžœ&žœžœ žœ˜dKšœ˜Kšœ˜Kšœžœ˜&Kšœ žœ˜šžœž˜K˜Kšžœžœ˜—Kšžœžœ žœžœ˜Kšžœ˜Kšœ˜—K˜š  œžœ&žœžœ žœ˜`Kšœ˜Kšœ˜Kšœ žœ˜Kšœ#žœžœ˜5Kšžœžœ žœžœ˜Kšžœ˜Kšœ˜—K˜š œžœžœžœ˜1Kšœžœ˜Kšœ(žœ˜/K˜šžœž˜ K˜K˜Kšžœžœ ˜——K˜š œžœ-žœžœ˜TKšž˜Kšœžœžœ ˜!K˜Kšžœ˜—K˜š   œžœ žœžœ žœ˜gKšž˜Kšœ˜Kšœ žœ˜Kšœ#žœžœ˜5Kšžœžœ žœžœ˜Kšœžœ ˜"Kšžœ˜—K˜š œžœžœžœžœ žœ‘œ˜oKšž˜Kšœžœžœ ˜ Kšœ˜Kšžœ˜$Kšžœ˜—K˜š  œžœ0žœžœ˜QKšœžœ"˜)—K˜š œžœ˜ Kšž˜KšœN˜NKšžœ˜—K˜K˜K˜Kšžœ˜—…—Vθ