DIRECTORY NodeStyle USING [DataEntry, DataList, overflow, RealCode, RealParam, Style, TabStop, LeaderTabStop, RuleTabStop, RulesTabStop, TabRealParam], Real USING [Round]; NodeStyleImpl: CEDAR MONITOR IMPORTS Real EXPORTS NodeStyle ~ BEGIN OPEN NodeStyle; lastIntAsReal: REAL _ LAST[INT]; firstIntAsReal: REAL _ FIRST[INT]; IntegerValue: PUBLIC PROC [value: REAL _ 0.0] RETURNS [INT] ~ { RETURN [SELECT value FROM > lastIntAsReal => LAST[INT], < firstIntAsReal => FIRST[INT], ENDCASE => Real.Round[value]]; }; realArray: REF ARRAY RealCode OF REAL ~ NEW[ARRAY RealCode OF REAL _ ALL[0.0]]; nextFreeRealCode: RealCode _ 1; overflowCount: INT _ 0; EnterReal: ENTRY PROC [value: REAL _ 0.0] RETURNS [code: RealCode] ~ { ENABLE UNWIND => NULL; FOR code _ RealCode.FIRST, code+1 UNTIL code=nextFreeRealCode DO IF realArray[code]=value THEN RETURN; -- value already in realArray ENDLOOP; IF code=overflow THEN overflowCount _ overflowCount+1 -- realArray is full ELSE { realArray[code] _ value; nextFreeRealCode _ code+1 }; -- enter in realArray }; SetReal: PUBLIC PROC [s: Style, param: RealParam, value: REAL _ 0.0] ~ { code: RealCode ~ EnterReal[value]; IF code=overflow THEN s.dataList _ NEW[DataEntry _ [s.dataList, real[param, value]]]; s.real[param] _ code; }; GetReal: PUBLIC PROC [s: Style, param: RealParam] RETURNS [value: REAL _ 0.0] ~ { code: RealCode ~ s.real[param]; IF code#overflow THEN RETURN[realArray[code]] ELSE { FOR entry: REF DataEntry _ s.dataList, entry.next UNTIL entry=NIL DO WITH entry SELECT FROM e: REF DataEntry.real => IF e.param=param THEN RETURN[e.value]; ENDCASE; ENDLOOP; ERROR; -- failed to find it on the data list -- }; }; GetTabLoc: PUBLIC PROC [stop: TabStop, s:Style] RETURNS [REAL _ 0.0] ~ { code: RealCode; IF (code _ stop.loc) # overflow THEN RETURN [realArray[code]]; RETURN [GetTabOverflow[s,stop,loc]]; }; GetTabLeaderSpacing: PUBLIC PROC [stop: LeaderTabStop, s:Style] RETURNS [REAL _ 0.0] ~ { code: RealCode; IF (code _ stop.spacing) # overflow THEN RETURN [realArray[code]]; RETURN [GetTabOverflow[s,stop,spacing]]; }; GetTabRuleWeight: PUBLIC PROC [stop: RuleTabStop, s:Style] RETURNS [REAL _ 0.0] ~ { code: RealCode; IF (code _ stop.weight) # overflow THEN RETURN [realArray[code]]; RETURN [GetTabOverflow[s,stop,weight]]; }; GetTabRuleVShift: PUBLIC PROC [stop: RuleTabStop, s:Style] RETURNS [REAL _ 0.0] ~ { code: RealCode; IF (code _ stop.vshift) # overflow THEN RETURN [realArray[code]]; RETURN [GetTabOverflow[s,stop,vshift]]; }; GetTabRealCode: PUBLIC PROC [s: Style, stop: TabStop, which: TabRealParam, value: REAL _ 0.0] RETURNS [code: RealCode] ~ { code _ EnterReal[value]; IF code=overflow THEN s.dataList _ NEW[DataEntry _ [s.dataList, tab[stop, which, value]]]; }; GetRulesTabCount: PUBLIC PROC [stop: RulesTabStop] RETURNS [count: INT] ~ { RETURN [stop.rules.length]; }; GetRulesTabInfo: PUBLIC PROC [stop: RulesTabStop, num: INT] RETURNS [weight, vshift: REAL] ~ { weight _ stop.rules.array[num].weight; vshift _ stop.rules.array[num].vshift; }; GetTabOverflow: PROC [s: Style, stop: TabStop, which: TabRealParam] RETURNS [value: REAL _ 0.0] ~ { FOR x: DataList _ s.dataList, x.next UNTIL x=NIL DO WITH x SELECT FROM xx: REF DataEntry.tab => IF xx.tabStop=stop AND xx.which=which THEN RETURN [xx.value]; ENDCASE; ENDLOOP; ERROR -- failed to find it on the data list -- }; pointsPerPica: PUBLIC REAL _ 12.0; pointsPerInch: PUBLIC REAL _ 1.0/0.0138370; -- 72.27 pointsPerCentimeter: PUBLIC REAL _ pointsPerInch/2.540; pointsPerMillimeter: PUBLIC REAL _ pointsPerCentimeter/10; pointsPerDidot: PUBLIC REAL _ pointsPerCentimeter/26.60; pointsPerFil: PUBLIC REAL _ 10000.0; pointsPerFill: PUBLIC REAL _ pointsPerFil*pointsPerFil; pointsPerFilll: PUBLIC REAL _ pointsPerFill*pointsPerFil; END. „NodeStyleImpl.mesa Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. Written by Bill Paxton, January 1981 Bill Paxton, December 1, 1982 7:38 am Maxwell, January 6, 1983 8:46 am Russ Atkinson, March 7, 1985 3:34:46 am PST Plass, March 14, 1985 5:00:54 pm PST Rick Beach, March 21, 1985 2:32:26 pm PST Doug Wyatt, September 25, 1986 12:29:42 pm PDT Implements JaM commands for style rules and commands to load styles. Real Parameters array of real-valued distances next free entry in realArray reserve entry 0 for 0.0 Tabs For num in [0..RulesTabCount), returns the weight and vshift values for that rule. Dimensions สฎ˜codešœ™Kšœ ฯmœ7™BKšœ$™$Kšœ%™%K™ K™+K™$J™)K™.—K˜KšœD™DK™šฯk ˜ Kšœ žœ~˜Kšœžœ ˜—K˜Kšะbl œžœž˜Kšžœ˜ Kšžœ ˜Kšœžœžœ ˜headšœ™Kšœžœžœžœ˜ šœžœžœžœ˜"K™—š ฯn œžœžœ žœžœžœ˜?šžœžœž˜Kšœžœžœ˜Kšœžœžœ˜Kšžœ˜—Kšœ˜K˜—šœ žœžœ žœžœžœžœ žœžœžœ˜OKšฯc™—šœ˜Kšœ™Kšœ™—Kšœžœ˜K˜š   œžœžœ žœžœ˜FKšžœžœžœ˜šžœžœ žœž˜@Kšžœžœžœก˜CKšžœ˜—Kšžœžœ!ก˜JKšžœ9ก˜RKšœ˜K˜—š œžœžœ%žœ ˜HK˜"Kšžœžœžœ/˜UK˜Kšœ˜K˜—š  œžœžœžœ žœ ˜QKšœ˜Kšžœžœžœ˜-šžœ˜š žœžœ$žœžœž˜Dšžœžœž˜Kš œžœžœžœžœ ˜?Kšžœ˜—Kšžœ˜—Kšžœก(˜/K˜—Kšœ˜K˜——™š   œžœžœžœžœ ˜HK˜Kšžœžœžœ˜>Kšžœ˜$Kšœ˜K˜—š  œžœžœ žœžœ ˜XK˜Kšžœ"žœžœ˜BKšžœ"˜(Kšœ˜K™—š  œžœžœžœžœ ˜SK˜Kšžœ!žœžœ˜AKšžœ!˜'Kšœ˜K™—š  œžœžœžœžœ ˜SK˜Kšžœ!žœžœ˜AKšžœ!˜'Kšœ˜K™—š  œžœžœ7žœžœ˜zKšœ˜Kšžœžœžœ4˜ZK˜K˜—š  œžœžœžœ žœ˜KKšžœ˜Kšœ˜K˜—š  œžœžœžœžœžœ˜^K™RKšœ&˜&Kšœ&˜&Kšœ˜K˜—š œžœ/žœ žœ ˜cšžœ"žœžœž˜3šžœžœž˜Kš œžœžœžœžœžœ ˜VKšžœ˜—Kšžœ˜—Kšžœก(˜.Kšœ˜K˜——šœ ™ Kšœžœžœ˜"Kšœžœžœก˜4Kšœžœžœ˜7Kšœžœžœ˜:Kšœžœžœ˜8Kšœžœžœ ˜$Kšœžœžœ˜7Kšœžœžœ˜9—K˜K˜Kšžœ˜—…—ถ่