antoine-source/appleworksgs/Spell/Inc/CSCHAR.H
2023-03-04 03:45:20 +01:00

1 line
3.6 KiB
C
Executable File

/***********************************************************************\
Product Number: PROXLIB-01-2.0
Version: rev2.0
Product Name: Proximity Subroutine Library
Filename: cschar.h
This document contains private and confidential information and
its disclosure does not constitute publication. Some of the
information herein also may appear in United States and or
Foreign Patents Pending. All rights are reserved by Proximity
Technology Inc., except those specifically granted by license.
\***********************************************************************/
#ifndef _CSCHAR
#define _CSCHAR
#ifndef _PROXLIB
#include "proxlib.h"
#endif
/* Character type bits and bit masks */
#define _CSPRINT 0x01 /* bit for random valid characters */
#define _CSWORD 0x1E /* bits for characters valid in word */
#define _CSINWORD 0x02 /* bit for a non-alpha valid in word */
#define _CSALPHA 0x1C /* bits for an alphabetic character */
#define _CSLOWER 0x04 /* bit for a lower case letter */
#define _CSUPPER 0x08 /* bit for an upper case letter */
#define _CSSCASE 0x10 /* bit for a single case letter */
/* scharfes S is an example of above */
#define _CSDIGIT 0x20 /* bit for digit character */
#define _CSHEX 0x40 /* bit for hex digit character */
/* Character classification table & macros. These work for all UCHAR values
(e.g. 0-255). */
extern UCHAR Csctype[];
#define csprint(cc) (Csctype[cc])
#define csword(cc) (Csctype[cc] & _CSINWORD)
#define csalpha(cc) (Csctype[cc] & _CSALPHA)
#define cslower(cc) (Csctype[cc] & _CSLOWER)
#define csupper(cc) (Csctype[cc] & _CSUPPER)
#define csscase(cc) (Csctype[cc] & _CSSCASE)
#define csdigit(cc) (Csctype[cc] & _CSDIGIT)
#define cshex(cc) (Csctype[cc] & (_CSHEX|_CSDIGIT))
/* Character conversion tables & macros. These work for all UCHAR values
(e.g. 0-255). */
extern UCHAR Cstolower[]; /* table to convert to lower case */
extern UCHAR Cstoupper[]; /* table to convert to upper case */
#define cstolower(cc) (ctoi(Cstolower[cc])) /* convert to lower case */
#define cstoupper(cc) (ctoi(Cstoupper[cc])) /* convert to upper case */
/* Character ordering macro. The values returned by this macro are ordered
so that characters which are modified versions of other characters occur
after their base characters but before others that have different base
characters. The base letters (but not other characters) are ordered in
the standard ASCII order. All control characters are mapped to zero.
Space is mapped after controls and before letters. Letters come next.
Non-letters come last.
Letters are ordered in pairs, upper case then lower case. Those letters
which have a single case use two order positions. The letters start with
an even order value. These allow case insensitive matching: if c1 and c2
are letters then
order = (cstoorder(*c1) - cstoorder(*c2)) >> 1;
if (order < 0) {
(* c1 letter before c2 letter. *)
} else if (order == 0) {
(* letters equal *)
} else { (* order > 0 *)
(* c1 letter after c2 letter. *)
}
compares the two letters ignoring case.
Note that the values assigned by this macro have no special meaning and
can be changed from release to release. The only purpose which they can
be used for (and continue to work) is comparison with other values from
the same macro.
*/
extern UCHAR Cstoorder[]; /* table to get collating order */
#define cstoorder(cc) (ctoi(Cstoorder[cc])) /* get collating order */
#endif /* _CSCHAR */