DIRECTORY Char USING [XCHAR, CharSet, CharCode, Code, Set, Widen]; CharOps: CEDAR DEFINITIONS IMPORTS Char ~ BEGIN CharProperty: TYPE ~ MACHINE DEPENDENT {other, blank, alphaNumeric, punctuation, (255)}; CharPropertyTable: TYPE = PACKED ARRAY CHAR OF CharProperty; charPropertyTable: REF READONLY CharPropertyTable; Prop: PROC [c: CHAR] RETURNS [CharProperty] = INLINE { RETURN [charPropertyTable[c]] }; Blank: PROC [c: CHAR] RETURNS [BOOL] = INLINE { RETURN [charPropertyTable[c] = blank] }; AlphaNumeric: PROC [c: CHAR] RETURNS [BOOL] = INLINE { RETURN [charPropertyTable[c] = alphaNumeric] }; Punctuation: PROC [c: CHAR] RETURNS [BOOL] = INLINE { RETURN [charPropertyTable[c] = punctuation] }; Upper: PROC [c: CHAR] RETURNS [CHAR] = INLINE { RETURN [IF c IN ['a..'z] THEN (c-'a)+'A ELSE c] }; Lower: PROC [c: CHAR] RETURNS [CHAR] = INLINE { RETURN [IF c IN ['A..'Z] THEN (c-'A)+'a ELSE c] }; XCHAR: TYPE ~ Char.XCHAR; Char0: PROC [c: XCHAR] RETURNS [CHAR] = INLINE { RETURN [VAL[Char.Code[c]]] }; XProp: PROC [c: XCHAR] RETURNS [CharProperty] = INLINE { RETURN [IF Char.Set[c]=0 THEN Prop[Char0[c]] ELSE other] }; XBlank: PROC [c: XCHAR] RETURNS [BOOL] = INLINE { RETURN [Char.Set[c]=0 AND Blank[Char0[c]]] }; XAlphaNumeric: PROC [c: XCHAR] RETURNS [BOOL] = INLINE { RETURN [Char.Set[c]=0 AND AlphaNumeric[Char0[c]]] }; XPunctuation: PROC [c: XCHAR] RETURNS [BOOL] = INLINE { RETURN [Char.Set[c]=0 AND Punctuation[Char0[c]]] }; XUpper: PROC [c: XCHAR] RETURNS [XCHAR] = INLINE { RETURN [IF Char.Set[c]=0 THEN Char.Widen[Upper[Char0[c]]] ELSE c] }; XLower: PROC [c: XCHAR] RETURNS [XCHAR] = INLINE { RETURN [IF Char.Set[c]=0 THEN Char.Widen[Lower[Char0[c]]] ELSE c] }; END. | CharOps.mesa Copyright Σ 1991 by Xerox Corporation. All rights reserved. Doug Wyatt, October 17, 1991 5:07 pm PDT Κ}•NewlineDelimiter –(cedarcode) style™codešœ ™ Kšœ Οeœ1™