DefineEm:
PROC = {
DL[$Interface, LIST[StarCh[LIST[$Define, $Unused, $Joined, $WeakJoined, $MustJoin, $Permutable, $Timing, $Simulate, Oo[$Body], $PortImplementation, Oo[$ArrayRelatedInfo], $Comment, $UserData, Limit[$Repeat, 1], Limit[$Constraint, 1], Limit[$Assign, 1], Limit[$Block, 2], Limit[$Escape, 2], Limit[$Iterate, 2], Limit[$Redo, 2]]] ]];
DL[$Unused, LIST[Star[$Reference]]];
DL[$Joined, LIST[StarCh[LIST[$Reference, $Joined, $WeakJoined]] ]];
DL[$WeakJoined, LIST[StarCh[LIST[$Reference, $Joined, $WeakJoined]] ]];
DL[$MustJoin, LIST[StarCh[LIST[$Reference, $Joined, $WeakJoined]] ]];
DL[$Permutable, LIST[StarCh[LIST[NameRef[], $NonPermutable, $Permutable]] ]];
DL[$NonPermutable, LIST[StarCh[LIST[NameRef[], $NonPermutable, $Permutable]] ]];
DL[$Timing, LIST[NameRef[], StarCh[LIST[$Delay, $Stable, $Comment, $UserData]] ]];
DL[$Delay, LIST[Star[$Transition], Star[$Reference]]];
DL[$Transition, LIST[NameRef[], NameRef[], $Value, Opt[$Value]]];
DL[$Stable, LIST[NameRef[], $Number, $Number, NameRef[], NameRef[], NameRef[]]];
DL[$Simulate, LIST[NameRef[], NameDef[], StarCh[LIST[Oo[$Rename], $PortListAlias, Oo[$IgnoreValue], $WaveValue, $Apply, $Comment, $UserData]] ]];
DL[$PortListAlias, LIST[NameDef[], $NameRefs]];
DL[$IgnoreValue, LIST[NameDef[]]];
DL[$WaveValue, LIST[NameDef[], $Number, $logicWaveform]];
DL[$Apply, LIST[$WholeNumber, $Number, StarCh[LIST[$LogicInput, $LogicOutput, $Comment, $UserData]] ]];
DL[$LogicInput, LIST[$NameRefs, $LogicWaveform]];
DL[$LogicOutput, LIST[$NameRefs, $LogicWaveform]];
DL[$LogicWaveform, LIST[Star[NameRef[]]]];
DL[$Body, LIST[StarCh[LIST[$FigureGroup, $Comment, $Property]] ]];
DL[$PortImplementation, LIST[NameRef[], StarCh[LIST[$FigureGroup, $Comment, $Property]] ]];
DL[$FigureGroup, LIST[$FigureGroupRef, StarCh[LIST[$Figure, $SignalGroup, $Comment, $UserData]] ]];
DC[$FigureGroupRef, LIST[$NameRef, $FigureGroupSpecification]];
DC[$Figure, LIST["Polygon", "Path", "Rectangle", "Dot", "Shape", "OpenShape", "Circle", "Annotate"]];
DL[$Polygon, LIST[Star[$Point], Star[$Property]]];
DL[$Path, LIST[Star[$Point], Star[$Property]]];
DL[$Rectangle, LIST[$Point, $Point, Star[$Property]]];
DL[$Dot, LIST[$Point, Star[$Property]]];
DL[$Shape, LIST[Star[$Corner], Star[$Property]]];
DL[$OpenShape, LIST[Star[$Corner], Star[$Property]]];
DL[$Circle, LIST[$Point, $Point, Star[$Property]]];
DL[$Point, LIST[$Coordinate, $Coordinate], 0, 0];
DC[$Point, LIST[$Expression], 1];
DC[$Corner, LIST[$Point, $Arc]];
DL[$Arc, LIST[$Point, $Point, $Point]];
DL[$Annotate, LIST[$String, $Point, $Point, $Justify]];
DC[$Justify, JdC[LIST[$Upper, $Center, $Lower], LIST[$Left, $Center, $Right]]];
DL[$SignalGroup, LIST[NameRef[], StarCh[LIST[$FigureGroup, $Comment, $UserData]] ]];
DL[$ArrayRelatedInfo, LIST[$ArrayUse, Opt[Ch[LIST[$Socket, $Plug]]], StarCh[LIST[$Comment, $UserData]] ]];
DC[$ArrayUse, LIST["ArrayMacro", "ArraySite", "BaseArray"]];
DL[$Socket, LIST[Star[$Transform]]];
DL[$Plug, LIST[Star[$SocketSet]]];
DL[$SocketSet, LIST[Star[$Instance], Star[$Transform]]];
DL[$Contents, LIST[StarCh[LIST[$Define, $Instance, $Unused, $Global, $Joined, $MustJoin, $Required, $Measured, $CriticalSignal, $FigureGroup, $Annotate, $Wire, $Section, Oo[$LogicModel], $Comment, $UserData, Limit[$Repeat, 1], Limit[$Constraint, 1], Limit[$Assign, 1], Limit[$Block, 2], Limit[$Escape, 2], Limit[$Iterate, 2], Limit[$Redo, 2]]] ]];
DL[$Instance, LIST[$References, NameRef[], NameDef[], Opt[$Rename], Opt[$Transform], Star[$Parameter], Star[$Property], Star[$PortInstance]]];
DQ[$References, LIST[$Multiple, Star[$Reference]], $Reference];
DL[$Transform, LIST[Opt[$ScaleX], Opt[$ScaleY], Opt[$Orientation], Opt[$Translate]]];
DL[$ScaleX, LIST[$Coordinate, $Coordinate]];
DL[$ScaleY, LIST[$Coordinate, $Coordinate]];
DC[$Orientation, LIST["r0", "r90", "r180", "r270", "mx", "myr90", "my", "mxr90"]];
DL[$Translate, LIST[$Place, $Place]];
DC[$Place, LIST[$Coordinate, $Step]];
DL[$Step, LIST[$Coordinate, $WholeNumber, $Coordinate]];
DL[$Parameter, LIST[NameRef[], $ParameterValue]];
DQ[$ParameterValue, LIST[$Multiple, Star[$PrimitiveData]], $PrimitiveData, 0, 0];
DQ[$ParameterValue, LIST[$Multiple, Star[$Expression]], $Expression, 1];
DC[$PrimitiveData, LIST[$Primitive, $True, $False]];
DC[$Primitive, LIST[$String, $Integer, $ScaledInteger]];
DL[$PortInstance, LIST[NameRef[], Star[$Property]]];
DL[$Global, LIST[Star[NameRef[]]]];
DL[$Required, LIST[NameRef[], Star[$Delay]]];
DL[$Measured, LIST[NameRef[], Star[$Delay]]];
DL[$CriticalSignal, LIST[$WholeNumber, Star[NameRef[]]]];
DL[$Wire, LIST[NameRef[], NameRef[], Opt[$FigureGroup], Star[$Property]]];
DL[$Section, LIST[$String, StarCh[LIST[$String, $Instance, $Section]] ]];
DL[$LogicModel, LIST[NameRef[], $LogicOtherwise, StarCh[LIST[$LogicState, $Comment, $UserData]] ]];
DL[$LogicOtherwise, LIST[NameRef[]]];
DL[$LogicState, LIST[Star[$Condition], $Result]];
DL[$Condition, LIST[Star[$WFF]]];
DL[$Result, LIST[Star[$WFF]]];
DL[$WFF, LIST[NameRef[], NameRef[], $Number, $Number]];
}.