1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/******************************************************************************
*
* Copyright (c) 1994-1999 Palm Computing, Inc. or its subsidiaries.
* All rights reserved.
*
* File: CharAttr.h
*
* Description:
* This file defines character classification and character
* conversion macros
*
* History:
* April 21, 1995 Created by Art Lamb
*
*****************************************************************************/
#ifndef __CHARATTR_H__
#define __CHARATTR_H__
// Include elementary types
#include <PalmTypes.h> // Basic types
#include <CoreTraps.h> // Trap Numbers.
// Remember that sizeof(0x0D) == 2 because 0x0D is treated like an int. The
// same is true of sizeof('a'), sizeof('\0'), and sizeof(chrNull). For this
// reason it's safest to use the sizeOf7BitChar macro to document buffer size
// and string length calcs. Note that this can only be used with low-ascii
// characters, as anything else might be the high byte of a double-byte char.
#define sizeOf7BitChar(c) 1
#ifdef NON_INTERNATIONAL
#define sizeofchar(c) sizeof((char) (c))
#define lastAsciiChr 0x00FF
#else
#define sizeofchar(c) _Obsolete__use_sizeOf7BitChar
#define lastAsciiChr _Obsolete__lastAsciiChr_does_not_work_for_Japanese
#endif
// Character attribute code bits.
#define _XA 0x0200 // extra alphabetic
#define _XS 0x0100 // extra space
#define _BB 0x0080 // BEL, BS, etc.
#define _CN 0x0040 // CR, FF, HT, NL, VT
#define _DI 0x0020 // '0'-'9'
#define _LO 0x0010 // 'a'-'z' and lowercase extended chars.
#define _PU 0x0008 // punctuation
#define _SP 0x0004 // space
#define _UP 0x0002 // 'A'-'Z' and uppercase extended chars.
#define _XD 0x0001 // '0'-'9', 'A'-'F', 'a'-'f'
// These macros have all been deprecated and replaced by corresponding TxtCharXXXX
// macros found in TextMgr.h. The main problem is that these all assume 8-bit character
// codes, and thus won't work with Shift JIS and other multi-byte encodings.
// Character classification macros.
#ifdef NON_INTERNATIONAL
#define IsAscii(c) (c <= 255)
#define IsAlNum(attr,c) (attr[(UInt8)(c)] & (_DI|_LO|_UP|_XA))
#define IsAlpha(attr,c) (attr[(UInt8)(c)] & (_LO|_UP|_XA))
#define IsCntrl(attr,c) (attr[(UInt8)(c)] & (_BB|_CN))
#define IsDigit(attr,c) (attr[(UInt8)(c)] & _DI)
#define IsGraph(attr,c) (attr[(UInt8)(c)] & (_DI|_LO|_PU|_UP|_XA))
#define IsLower(attr,c) (attr[(UInt8)(c)] & _LO)
#define IsPrint(attr,c) (attr[(UInt8)(c)] & (_DI|_LO|_PU|_SP|_UP|_XA))
#define IsPunct(attr,c) (attr[(UInt8)(c)] & _PU)
#define IsSpace(attr,c) (attr[(UInt8)(c)] & (_CN|_SP|_XS))
#define IsUpper(attr,c) (attr[(UInt8)(c)] & _UP)
#define IsHex(attr,c) (attr[(UInt8)(c)] & _XD)
#define IsDelim(attr,c) (attr[(UInt8)(c)] & _SP|_PU)
#else
#define IsAscii(c) _Obsolete__use_TxtCharIsValid
#define IsAlNum(attr,c) _Obsolete__use_TxtCharIsAlNum
#define IsAlpha(attr,c) _Obsolete__use_TxtCharIsAlpha
#define IsCntrl(attr,c) _Obsolete__use_TxtCharIsCntrl
#define IsDigit(attr,c) _Obsolete__use_TxtCharIsDigit
#define IsGraph(attr,c) _Obsolete__use_TxtCharIsGraph
#define IsLower(attr,c) _Obsolete__use_TxtCharIsLower
#define IsPrint(attr,c) _Obsolete__use_TxtCharIsPrint
#define IsPunct(attr,c) _Obsolete__use_TxtCharIsPunct
#define IsSpace(attr,c) _Obsolete__use_TxtCharIsSpace
#define IsUpper(attr,c) _Obsolete__use_TxtCharIsUpper
#define IsHex(attr,c) _Obsolete__use_TxtCharIsHex
#define IsDelim(attr,c) _Obsolete__use_TxtCharIsDelim
#endif
// This macro is deprecated because it relies on character code ranges, versus checking
// to ensure that the keydown event has the command bit set in the modifiers field. Use
// the TxtCharIsHardKey macro found in TextMgr.h.
#ifdef NON_INTERNATIONAL
#define ChrIsHardKey(c) ((((c) >= hardKeyMin) && ((c) <= hardKeyMax)) || ((c) == calcChr))
#else
#define ChrIsHardKey(c) _Obsolete__use_TxtCharIsHardKey
#endif
#ifdef REMOVE_FOR_EMULATOR
#ifdef __cplusplus
extern "C" {
#endif
// In 3.1 and later versions of Palm OS, these routines have all been replaced by new
// Text Manager routines found in TextMgr.h
#ifdef NON_INTERNATIONAL
const UInt16 *GetCharAttr (void)
SYS_TRAP(sysTrapGetCharAttr);
const UInt8 *GetCharSortValue (void)
SYS_TRAP(sysTrapGetCharSortValue);
const UInt8 *GetCharCaselessValue (void)
SYS_TRAP(sysTrapGetCharCaselessValue);
#else
#define GetCharAttr() _Obsolete__use_TxtCharIs_macros
#define GetCharSortValue() _Obsolete__use_TxtCompare
#define GetCharCaselessValue() _Obsolete__use_TxtCaselessCompare
#endif
#ifdef __cplusplus
}
#endif
#endif
#endif /* __CHARATTR_H__ */
|