DIRECTORY C2CAddressing, C2CDefs USING [Mode], IntCodeDefs USING [Node], Rope; C2CMode: CEDAR DEFINITIONS = BEGIN Mode: TYPE = C2CDefs.Mode; FreeMode: PROC [Mode]; ExpMode: PROC [Mode] RETURNS [BOOL]; SetExpr: PROC [m: Mode¬NIL, expr: BOOL ¬ TRUE] RETURNS [Mode]; LHSMode: PROC [Mode] RETURNS [BOOL]; SetLHS: PROC [m: Mode¬NIL, lhs: BOOL ¬ TRUE] RETURNS [Mode]; GetAMode: PROC [m: Mode] RETURNS [am: C2CAddressing.AddressMode]; SetAMode: PROC [m: Mode¬NIL, am: C2CAddressing.AddressMode] RETURNS [Mode]; DSetAMode: PROC [m: Mode¬NIL, am: C2CAddressing.AddressMode] RETURNS [Mode]; GetAddrContainer: PROC [m: Mode] RETURNS [ac: C2CAddressing.AddressContainer]; SetAddrContainer: PROC [m: Mode¬NIL, ac: C2CAddressing.AddressContainer] RETURNS [Mode]; GetTemplate: PROC [m: Mode] RETURNS [Rope.ROPE]; SetTemplate: PROC [m: Mode¬NIL, tmp: Rope.ROPE] RETURNS [Mode]; ContainerSize: PROC [m: Mode] RETURNS [INT]; SetContainerSize: PROC [m: Mode, sz: INT] RETURNS [Mode]; BaseSize: PROC [m: Mode] RETURNS [INT]; SetBaseSize: PROC [m: Mode, sz: INT] RETURNS [Mode]; DSetBaseSize: PROC [m: Mode, sz: INT] RETURNS [Mode]; UnitSize: PROC [m: Mode] RETURNS [INT]; SetUnitSize: PROC [m: Mode, sz: INT] RETURNS [Mode]; DSetUnitSize: PROC [m: Mode, sz: INT] RETURNS [Mode]; LHSMaskNShiftNode: PROC [m: Mode] RETURNS [IntCodeDefs.Node]; SetLHSMaskNShiftNode: PROC [m: Mode, node: IntCodeDefs.Node] RETURNS [Mode]; Like: PROC [m: Mode¬NIL, lhs, rhs, expr, stat: BOOL ¬ FALSE] RETURNS [Mode]; SetAModeNC: PROC [m: Mode¬NIL, am: C2CAddressing.AddressMode] RETURNS [Mode]; SetAssBitAddr: PROC [m: Mode¬NIL, ac: C2CAddressing.AddressContainer] RETURNS [Mode]; SetAssAddr: PROC [m: Mode¬NIL, tmp: Rope.ROPE] RETURNS [Mode]; SetAssUnits: PROC [m: Mode¬NIL, tmp: Rope.ROPE, sz: INT] RETURNS [Mode]; SetAssBits: PROC [m: Mode¬NIL, ac: C2CAddressing.AddressContainer, sz: INT] RETURNS [Mode]; UseValue: PROC [sz: INT, m: Mode¬NIL] RETURNS [Mode]; END. F C2CMode.mesa Copyright Σ 1987, 1988, 1990, 1991, 1993 by Xerox Corporation. All rights reserved. Christian Jacobi, 1987 Christian Jacobi, January 22, 1993 1:43 pm PST Basic access procedures All set procedures without leading D create a new mode All set procedures without D reuse mode if not nil A guarantee that this mode won't be used anymore the size of the template Size of bits actually "used"; 0 if size and alignment do not matter Unit size to be used for mask and shift to extract fields Required for modes maskNShift, lHSMaskNShift Not defined for other modes Optionally, the right hand side node. Not defined for other modes Relation of sz fields: BaseSize: the size of the "leaf" node [where bits are used] ContainerSize: the size of a template; ContainerSize>=BaseSize If node.bits is defined then ContainerSize>=node.bits UnitSize: separate concept. Separation to ease understanding. Shortcuts returns new mode with appropriate field changed false parameter won't change the field addr _ am; addrcont _ NIL addr _ assBitAdr; addrcont _ ac; addr _ assAddr; addrcont _ [tmp, NIL]; addr _ assUnits; addrcont _ [tmp, TRASH]; ContainerSize _ sz addr _ AssBits; addrcont _ ac; ContainerSize _ sz shortcut for expr _ TRUE; lhs _ FALSE; addr _ value; addrcont _ NIL, and, SetBaseSize sz: leaf size for deref info Κ/–(cedarcode) style•NewlineDelimiter ™šœ ™ Icodešœ ΟeœI™TK™K™.K˜—šΟk ˜ Kšœ˜Kšœžœ˜Kšœ žœ˜Kšœ˜—K˜KšΟnœžœž œ˜Kšž˜Kšœžœ˜K˜K™šŸ™K™6K™2—K˜šŸœžœ˜K™0—K˜KšŸœžœžœžœ˜$Kš Ÿœžœ žœžœžœžœ˜>K˜KšŸœžœžœžœ˜$Kš Ÿœžœ žœžœžœžœ˜—K™KšΟb ™ K˜š Ÿœžœ žœžœžœžœ˜LKšœ/™/Kšœ&™&—K˜šŸ œžœ žœ!žœ˜MKšœ™—K˜šŸ œžœ žœ&žœ˜UKšœ!™!—K˜š Ÿ œžœ žœ žœžœ˜>Kšœ'™'—K˜š Ÿ œžœ žœ žœžœžœ˜HKšœ*Οc œ™<—K˜š Ÿ œžœ žœ*žœžœ˜[KšœŸœ‘ œ™2—K™š Ÿœžœžœ žœžœ˜5KšœU™UK™—K˜Kšžœ˜K˜—…—˜