<<>> <> <> <> <<>> Char: CEDAR DEFINITIONS ~ BEGIN XCHAR: TYPE ~ MACHINE DEPENDENT {(CARD32.LAST)}; CharCode: TYPE ~ BYTE; CharSet: TYPE ~ CARD[0..2**(BITS[XCHAR]-BITS[CharCode])); Set: PROC [xchar: XCHAR] RETURNS [CharSet] ~ INLINE { RETURN[ORD[xchar] / (2**BITS[CharCode])] }; Code: PROC [xchar: XCHAR] RETURNS [CharCode] ~ INLINE { RETURN[ORD[xchar] MOD (2**BITS[CharCode])] }; Make: PROC [set: CharSet, code: CharCode] RETURNS [XCHAR] ~ INLINE { RETURN[VAL[set*(2**BITS[CharCode])+code]] }; Widen: PROC [char: CHAR] RETURNS [XCHAR] ~ INLINE { RETURN[VAL[ORD[char]]] }; Narrow: PROC [xchar: XCHAR] RETURNS [CHAR] ~ INLINE { RETURN[VAL[ORD[xchar]]] }; -- BoundsFault if too big END.