DIRECTORY CD, CDTexts, CDOps, CDSequencer, TerminalIO, Rope, CDValue, NMos, CDPanel; NMosTextCommands: CEDAR PROGRAM IMPORTS CDOps, CDSequencer, TerminalIO, CDTexts, Rope, CDValue, CDPanel, NMos = BEGIN CreateTextComm: PROC [comm: CDSequencer.Command] = BEGIN ENABLE TerminalIO.UserAbort => GOTO userAbort; fn: NAT _ MIN[INT[fontNum]-1, CDValue.FetchInt[comm.design, $FontNumber]]; font: CDTexts.CDFont _ fontArray[fn]; r: Rope.ROPE _ TerminalIO.RequestRope["Create text\n", "please type: "]; ob: CD.Object; IF font=NIL THEN { TerminalIO.WriteRope["** no font\n"]; RETURN }; IF Rope.IsEmpty[r] THEN { TerminalIO.WriteRope["empty text not included\n"]; RETURN }; ob _ CDTexts.CreateText[r, font]; CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]; EXITS userAbort => {TerminalIO.WriteRope["discarded\n"]} END; fontNum: NAT = 5; FontRange: TYPE = [0..fontNum); fontArray: ARRAY FontRange OF CDTexts.CDFont; ImplCommands: PROC [] = BEGIN CDSequencer.ImplementCommand[$DrawText, CreateTextComm, NMos.nmos]; CDValue.EnregisterKey[$FontNumber, NMos.nmos]; CDPanel.DefineIntEntry[cdValueKey: $FontNumber, tech: NMos.nmos, text: "Font:", min: 0, default: 0, max: fontNum-1]; CDPanel.DefineNewLine[NMos.nmos]; fontArray[0] _ CDTexts.MakeFont1[scale: 2, name: "Xerox/Tiogafonts/Helvetica10"]; fontArray[1] _ CDTexts.MakeFont1[scale: 2, name: "Xerox/Tiogafonts/Gates32"]; fontArray[2] _ CDTexts.MakeFont1[scale: 2, name: "Xerox/Tiogafonts/MusicFont10"]; fontArray[3] _ CDTexts.MakeFont1[scale: 1, name: "Xerox/Tiogafonts/OldEnglish18"]; fontArray[4] _ CDTexts.MakeFont1[scale: 1, name: "Xerox/Tiogafonts/TimesRoman36"]; END; ImplCommands[]; END. ŒNMosTextCommands.mesa (part of Chipndale) Copyright c 1983, 1985 by Xerox Corporation. All rights reserved. by Christian Jacobi, June 24, 1983 5:03 pm last edited Christian Jacobi, June 5, 1985 3:36:04 pm PDT ScaleTextComm: PROC [comm: CDSequencer.Command] = BEGIN ff: REAL = 1.2599; fff: REAL = ff*ff*ff; first: CD.Instance; multiple: BOOL; TerminalIO.WriteRope["Scale text\n"]; [first, multiple] _ CDOps.SelectedInstance[comm.design]; IF multiple THEN TerminalIO.WriteRope["multiple selection; not done\n"] ELSE IF first=NIL THEN TerminalIO.WriteRope["no selection; not done\n"] ELSE IF NOT ISTYPE[first.ob.specificRef, CDTexts.TextPtr] THEN TerminalIO.WriteRope["not text; not done\n"] ELSE { factor: REAL_1.0; n: INT _ TerminalIO.RequestSelection[ choice: LIST[" >>", " >", " <", " <<"], label: "scale" ]; SELECT n FROM 1 => factor _ 1.0/fff; 2 => factor _ 1.0/ff; 3 => factor _ ff; 4 => factor _ fff; ENDCASE => factor _ 1.0; ScaleInst[comm.design, first, factor]; TerminalIO.WriteRope["done\n"] }; END; ScaleInst: PROC [design: CD.Design, aptr: CD.Instance, factor: REAL] = BEGIN IF aptr#NIL AND aptr.ob#NIL THEN WITH aptr.ob.specificRef SELECT FROM tp: CDTexts.TextPtr => { font: CDTexts.CDFont = tp.cdFont; scaledFont: REF CDTexts.FontRec = CDTexts.MakeFont1[name: font.supposedName, scale: font.scaleI*factor]; IF scaledFont#NIL THEN { txt: CD.Object = CDTexts.CreateText[tp.text, scaledFont, aptr.ob.layer]; IF txt#NIL THEN { CDOps.DelayedRedraw[design, CDInstances.ARectO[aptr]]; aptr.ob _ txt; CDOps.DelayedRedraw[design, CDInstances.ARectO[aptr]]; }; }; }; ENDCASE => ERROR END; CDSequencer.ImplementCommand[$ScaleTextS, ScaleTextComm, NMos.nmos]; Ê«˜šœ*™*Jšœ Ïmœ7™BJšœ+™+Jšœ9™9—J˜šÏk ˜ Jšžœ˜J˜J˜J˜ J˜ J˜J˜J˜J˜J˜—šÏbœžœžœ˜ JšžœH˜O—Jšž˜J˜šÏnœžœ˜2šžœ˜Jšžœžœ ˜.—Jšœžœžœžœ9˜JJšœ%˜%Jšœžœ<˜HJšœžœ˜šžœžœžœ˜J˜%Jšž˜J˜—šžœžœ˜J˜2Jšž˜J˜—J˜!J˜Sšž˜J˜2—Jšžœ˜J˜—š  œžœ™1Jšžœ™Jšœžœ ™Jšœžœ ™Jšœžœ ™Jšœ žœ™Jšœ%™%Jšœ8™8Jšžœ žœ7™GJšžœžœžœžœ1™GJš žœžœžœžœ(žœ-™kšžœ™Jšœžœ™šœžœ™%Jšœžœ™'J™J™—šžœž™ Jšœ™Jšœ™Jšœ™Jšœ™Jšžœ™—Jšœ&™&Jšœ™J™—Jšžœ™J™—š   œžœ žœžœžœ™FJšž™š žœžœžœ žœžœ™!šžœžœž™$šœ™Jšœ!™!Jšœ žœY™hšžœ žœžœ™JšœžœA™Hšžœžœžœ™Jšœ6™6Jšœ™Jšœ6™6J™—J™—J™—Jšžœž™——Jšžœ™J™—Jšœ žœ˜Jšœ žœ˜Jšœ žœ žœ˜-J˜š  œžœ˜Jšž˜J˜CJšœD™DJšœ-ž˜.˜@J˜3—J˜!JšœQ˜QJšœM˜MJšœQ˜QJšœR˜RJšœR˜RJšžœ˜J˜—J˜Jšžœ˜J˜—…—Ç