mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-23 05:30:29 +00:00
1 line
3.6 KiB
C
Executable File
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 */
|