DIRECTORY CD, CDCells, CDCommandOps, CDDirectory, CDOps, CDProperties, CDSequencer, Core, CoreGeometry, CoreOps, FSM, IO, Rope, SchCDUtils, Sisyph, TerminalIO; FSMExtras: CEDAR PROGRAM IMPORTS CDCells, CDCommandOps, CDDirectory, CDOps, CDProperties, CoreOps, FSM, IO, Rope, SchCDUtils, Sisyph, TerminalIO SHARES Sisyph = BEGIN CreateFSMIconSch: PROC [comm: CDSequencer.Command] ~ { fsmName: Rope.ROPE; shortName: Rope.ROPE; iconName: Rope.ROPE; icon: CD.Object; cell: Core.CellType; shell: SchCDUtils.Shell; nms: ARRAY CoreGeometry.Side OF LIST OF Rope.ROPE; side: CoreGeometry.Side _ left; codeLine: IO.ROPE; cx: Sisyph.Context _ Sisyph.Create[comm.design]; selected: CD.Instance = CDOps.TheInstance[comm.design, "CreateFSMIcon\n"]; IF selected=NIL THEN RETURN; fsmName _ CDDirectory.Name[selected.ob, comm.design]; IF fsmName.IsEmpty[] THEN {TerminalIO.PutF["*** Selected schematic has no name.\n"]; RETURN}; IF ~Rope.Match["*.fsm", fsmName] THEN TerminalIO.PutF["*** Convention for FSM schematics is to suffix them with '.fsm'.\n"]; shortName _ TerminalIO.RequestRope["Type icon short name: "]; IF shortName.IsEmpty[] THEN shortName _ fsmName.Substr[0, fsmName.Index[0, "."]] ELSE shortName _ shortName.Substr[0, shortName.Index[0, "."]]; iconName _ shortName.Concat[".icon"]; IF CDDirectory.Fetch[comm.design, iconName]#NIL THEN {TerminalIO.PutF["*** The icon %g already exists!\n", IO.rope[iconName]]; RETURN}; cell _ FSM.SchMachine[cx, fsmName]; FOR i: INT IN [0..cell.public.size) DO nm: IO.ROPE _ CoreOps.GetShortWireName[cell.public[i]]; IF nm.Equal["Gnd"] OR nm.Equal["Vdd"] THEN {side _ right; LOOP}; nms[side] _ CONS[nm, nms[side]] ENDLOOP; shell _ SchCDUtils.NewShell[shortName, nms, comm.design]; shell.grid _ CDOps.GetGrid[comm.design, comm]; -- default might not be perfect... icon _ SchCDUtils.ShellObject[shell]; CDProperties.PutObjectProp[icon, Sisyph.mode.extractProcProp, $SisyphExtractCellIcon]; codeLine _ IO.PutFR["FSM.SchMachine[cx, \"%g\"]", IO.rope[fsmName]]; CDProperties.PutObjectProp[icon, $CodeFor, codeLine]; CDCells.SetSimplificationTreshhold[cell: icon, val: 30, inPixels: TRUE]; IF NOT CDDirectory.Include[comm.design, icon, iconName] THEN ERROR; -- Abnormal [] _ CDOps.IncludeObjectI[comm.design, icon, comm.pos]; TerminalIO.PutF["%g generated\n", IO.rope[iconName]]}; CreateFSMIconCode: PROC [comm: CDSequencer.Command] ~ { shortName: Rope.ROPE; iconName: Rope.ROPE; codeFor: Rope.ROPE; icon: CD.Object; cell: Core.CellType; shell: SchCDUtils.Shell; nms: ARRAY CoreGeometry.Side OF LIST OF Rope.ROPE; side: CoreGeometry.Side _ left; cx: Sisyph.Context _ Sisyph.Create[comm.design]; shortName _ TerminalIO.RequestRope["Short name: "]; shortName _ shortName.Substr[0, shortName.Index[0, "."]]; iconName _ shortName.Concat[".icon"]; IF CDDirectory.Fetch[comm.design, iconName]#NIL THEN {TerminalIO.PutF["*** The icon %g already exists!\n", IO.rope[iconName]]; RETURN}; codeFor _ TerminalIO.RequestRope["Code: "]; cell _ NARROW[Sisyph.EvalToRef[cx, codeFor]]; FOR i: INT IN [0..cell.public.size) DO nm: IO.ROPE _ CoreOps.GetShortWireName[cell.public[i]]; IF nm.Equal["Gnd"] OR nm.Equal["Vdd"] THEN {side _ right; LOOP}; nms[side] _ CONS[nm, nms[side]] ENDLOOP; shell _ SchCDUtils.NewShell[shortName, nms, comm.design]; shell.grid _ CDOps.GetGrid[comm.design, comm]; -- default might not be perfect... icon _ SchCDUtils.ShellObject[shell]; CDProperties.PutObjectProp[icon, Sisyph.mode.extractProcProp, $SisyphExtractCellIcon]; CDProperties.PutObjectProp[icon, $CodeFor, codeFor]; CDCells.SetSimplificationTreshhold[cell: icon, val: 30, inPixels: TRUE]; IF NOT CDDirectory.Include[comm.design, icon, iconName] THEN ERROR; -- Abnormal [] _ CDOps.IncludeObjectI[comm.design, icon, comm.pos]; TerminalIO.PutF["%g generated\n", IO.rope[iconName]]}; CDCommandOps.RegisterWithMenu[ menu: $SisyphIconMenu, entry: "Create Icon for FSM schematic", doc: "Create Icon for finite state machine schematic", key: $CreateFSMIconSch, proc: CreateFSMIconSch ]; CDCommandOps.RegisterWithMenu[ menu: $SisyphIconMenu, entry: "Create Icon for FSM code", doc: "Create Icon for finite state machine code", key: $CreateFSMIconCode, proc: CreateFSMIconCode ]; END. ΈFSMExtras.mesa Copyright Σ 1986, 1987 by Xerox Corporation. All rights reserved. Don Curry November 4, 1987 9:04:00 pm PST Common Types and Declarations Create FSM Icon -- Get name of source and target -- Get the source cell type -- Get the names -- Build the object, instantiate it & return -- Get name of source and target -- Get the source cell type -- Get the names -- Build the object, instantiate it & return Runtime Loading Κ8˜šœ™JšœB™BJšœ)™)—J™JšΟk œhœ'˜ŸJ˜šœ œ˜JšœCœ&˜wJšœ˜ Jšœ˜—IheadšΠbl™šΟb™šΟnœœ ˜6Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜J˜Jšœ˜Jš œœœœœœ˜4Jšœ!˜!Jšœ œ˜Jšœ3˜3Jšœ œ>˜KšΟc ™ Jšœ œœœ˜Jšœ5˜5šœ˜Jšœ;œ˜C—šœ˜%JšœV˜V—Jšœ=˜=šœ˜Jšœ5˜9Jšœ:˜>—Jšœ%˜%šœ*œ˜4Jšœ6œœ˜R——š‘™Jšœ#˜#—š‘™šœœœ˜&Jšœœœ,˜7Jšœœœœ˜@Jšœ œœ˜(——š‘,™,Jšœ9˜9Jšœ/‘"˜QJšœ%˜%JšœV˜VJšœ œ%œ˜DJšœ5˜5JšœBœ˜HJ•StartOfExpansionb[design: CD.Design, object: CD.Object, alternateName: ROPE _ NIL, fiddleName: BOOL _ TRUE]š œœ2œœ‘Πbc˜OJšœ7˜7Jšœ"œ˜6—J˜—š œœ ˜7Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜J˜Jšœ˜Jš œœœœœœ˜4Jšœ!˜!Jšœ3˜3š‘ ™ Jšœ3˜3Jšœ9˜9Jšœ&˜&šœ*œ˜4Jšœ6œœ˜R—Jšœ,˜,—š‘™Jšœœ ˜-—š‘™šœœœ˜&Jšœœœ,˜7Jšœœœœ˜@Jšœ œœ˜(——š‘,™,Jšœ9˜9Jšœ/‘"˜QJšœ%˜%JšœV˜VJšœ4˜4JšœBœ˜HJ–b[design: CD.Design, object: CD.Object, alternateName: ROPE _ NIL, fiddleName: BOOL _ TRUE]š œœ2œœ‘’˜OJšœ7˜7Jšœ"œ˜6———šž™šœ˜Jšœ˜Jšœ(˜(Jšœ7˜7Jšœ˜Jšœ˜—šœ˜Jšœ˜Jšœ#˜#Jšœ2˜2Jšœ˜Jšœ˜—J˜—Jšœ˜J˜J˜—…—|l