DIRECTORY C2CDefs, Rope; C2CCodeUtils: CEDAR DEFINITIONS = BEGIN Code: TYPE = C2CDefs.Code; ROPE: TYPE = Rope.ROPE; CodeOrRope: TYPE = REF; CString: PROC [r: ROPE] RETURNS [ROPE]; RopeFromInt: PROC [i: INT] RETURNS [ROPE]; ConstC: PROC [c: CARD] RETURNS [Code]; ConstI: PROC [c: INT] RETURNS [Code]; Mask: PROC [i: INT] RETURNS [mask: ROPE]; ComplexMask: PUBLIC PROC [ones, zeroes: INT] RETURNS [mask: ROPE]; ConstMul: PROC [code: Code, factor: CARD] RETURNS [Code]; ConstDiv: PROC [code: Code, divisor: CARD] RETURNS [Code]; ConstMod: PROC [code: Code, divisor: CARD] RETURNS [Code]; MaskOut: PROC [code: Code, bits: INT] RETURNS [Code]; MaskNShift: PROC [word: Code, bits: INT, start: INT, wsz: INT] RETURNS [Code]; END.  C2CCodeUtils.mesa Copyright Σ 1987, 1988, 1989, 1990, 1991 by Xerox Corporation. All rights reserved. Christian Jacobi, 1987 Christian Jacobi, January 26, 1990 11:19:42 am PST --given an arbitray rope returns a legal string in C (within "'s) --plain conversion, but better caching --returns code representing a constant --returns code representing a constant --returns an octal mask (C) with i rightmost bits set; i<=bitsPerWord! --returns an octal mask for (2**ones-1) * 2**zeroes --returns code multiplied by a constant --returns code divided by a constant --returns remainder of code divided by a constant --returns code _ code & Mask[bits] --masks bits bits of c starting with start --no word boundary crossings! --wsz: unit size of word [word, halfword, byte] Κq•NewlineDelimiter –(cedarcode) style™šœ™Icodešœ ΟeœI™TKšœ™Kšœ2™2K˜—šΟk ˜ Kšœ˜Kšœ˜K˜—KšΟn œžœž œ˜!Kšž˜K˜Kšœžœ˜Kšžœžœžœ˜Kšœ žœžœ˜K˜Iimp˜š Ÿœžœžœžœžœ˜'LšΟc5œ  œ™A—K˜š Ÿ œžœžœžœžœ˜*Kšœ&™&K˜—šŸœžœžœžœ˜&K™&—K˜šŸœžœžœžœ˜%K™&—K˜š Ÿœžœžœžœžœ˜)Kš F™F—K˜š Ÿ œžœžœžœžœžœ˜BKš !œ  œ™4—K˜šŸœžœžœžœ˜9Kšœ'™'—K˜šŸœžœžœžœ˜:Kšœ$™$—K˜šŸœžœžœžœ˜:Kšœ1™1—K˜šŸœžœžœžœ˜5Kšœ#™#—K˜š Ÿ œžœžœ žœžœžœ˜NKš *™*Kš ™Kšœ/™/—K™Kšžœ˜K˜—…—δ]