REpsp2
PSP2 OS reverse engineering
Loading...
Searching...
No Matches
sysclib.c
Go to the documentation of this file.
1
2#include <sysmem/sysclib.h>
3
4/* ctype.h implementation */
5#define NUM_ASCII_CHARS 128
6#define IS_ASCII(ch) ((0 <= (ch)) && ((ch) < NUM_ASCII_CHARS))
7
8static const unsigned char ctype_table[NUM_ASCII_CHARS] = {
9 /* 0x00~0x08: control codes */
13
14 /* 0x09~0x0D: tab + whitespaces */
15 CTYPE_SPACE, // 0x09: \t
16 CTYPE_SPACE, // 0x0A: \n
17 CTYPE_SPACE, // 0x0B: \v
18 CTYPE_SPACE, // 0x0C: \f
19 CTYPE_SPACE, // 0x0D: \r
20
21 /* 0x0E~0x1F: control codes */
28
29 /* 0x20: space */
30 (CTYPE_PUNCT | CTYPE_SPACE), // bug(?): space is also punctuation?
31
32 /* 0x21~0x2F: punctuation */
33 CTYPE_PUNCT, // 0x21: !
34 CTYPE_PUNCT, // 0x22: "
35 CTYPE_PUNCT, // 0x23: #
36 CTYPE_PUNCT, // 0x24: $
37 CTYPE_PUNCT, // 0x25: %
38 CTYPE_PUNCT, // 0x26: &
39 CTYPE_PUNCT, // 0x27: '
40 CTYPE_PUNCT, // 0x28: (
41 CTYPE_PUNCT, // 0x29: )
42 CTYPE_PUNCT, // 0x2A: *
43 CTYPE_PUNCT, // 0x2B: +
44 CTYPE_PUNCT, // 0x2C: ,
45 CTYPE_PUNCT, // 0x2D: -
46 CTYPE_PUNCT, // 0x2E: .
47 CTYPE_PUNCT, // 0x2F: /
48
49 /* 0x30~0x39: digits */
50 CTYPE_DIGIT, // 0x30: 0
51 CTYPE_DIGIT, // 0x31: 1
52 CTYPE_DIGIT, // 0x32: 2
53 CTYPE_DIGIT, // 0x33: 3
54 CTYPE_DIGIT, // 0x34: 4
55 CTYPE_DIGIT, // 0x35: 5
56 CTYPE_DIGIT, // 0x36: 6
57 CTYPE_DIGIT, // 0x37: 7
58 CTYPE_DIGIT, // 0x38: 8
59 CTYPE_DIGIT, // 0x39: 9
60
61 /* 0x3A~0x40: punctuation */
62 CTYPE_PUNCT, // 0x3A: :
63 CTYPE_PUNCT, // 0x3B: ;
64 CTYPE_PUNCT, // 0x3C: <
65 CTYPE_PUNCT, // 0x3D: =
66 CTYPE_PUNCT, // 0x3E: >
67 CTYPE_PUNCT, // 0x3F: ?
68 CTYPE_PUNCT, // 0x40: @
69
70 /* 0x41~0x5A: uppercase letters */
71 (CTYPE_UPPER | CTYPE_HEXDIGIT), // 0x41: A
72 (CTYPE_UPPER | CTYPE_HEXDIGIT), // 0x42: B
73 (CTYPE_UPPER | CTYPE_HEXDIGIT), // 0x43: C
74 (CTYPE_UPPER | CTYPE_HEXDIGIT), // 0x44: D
75 (CTYPE_UPPER | CTYPE_HEXDIGIT), // 0x45: E
76 (CTYPE_UPPER | CTYPE_HEXDIGIT), // 0x46: F
77 CTYPE_UPPER, // 0x47: G
78 CTYPE_UPPER, // 0x48: H
79 CTYPE_UPPER, // 0x49: I
80 CTYPE_UPPER, // 0x4A: J
81 CTYPE_UPPER, // 0x4B: K
82 CTYPE_UPPER, // 0x4C: L
83 CTYPE_UPPER, // 0x4D: M
84 CTYPE_UPPER, // 0x4E: N
85 CTYPE_UPPER, // 0x4F: O
86 CTYPE_UPPER, // 0x50: P
87 CTYPE_UPPER, // 0x51: Q
88 CTYPE_UPPER, // 0x52: R
89 CTYPE_UPPER, // 0x53: S
90 CTYPE_UPPER, // 0x54: T
91 CTYPE_UPPER, // 0x55: U
92 CTYPE_UPPER, // 0x56: V
93 CTYPE_UPPER, // 0x57: W
94 CTYPE_UPPER, // 0x58: X
95 CTYPE_UPPER, // 0x59: Y
96 CTYPE_UPPER, // 0x5A: Z
97
98 /* 0x5B~0x60: punctuation */
99 CTYPE_PUNCT, // 0x5B: [
100 CTYPE_PUNCT, // 0x5C: \ (backslash)
101 CTYPE_PUNCT, // 0x5D: ]
102 CTYPE_PUNCT, // 0x5E: ^
103 CTYPE_PUNCT, // 0x5F: _
104 CTYPE_PUNCT, // 0x60: `
105
106 /* 0x61~0x7A: lowercase letters */
107 (CTYPE_LOWER | CTYPE_HEXDIGIT), // 0x61: a
108 (CTYPE_LOWER | CTYPE_HEXDIGIT), // 0x62: b
109 (CTYPE_LOWER | CTYPE_HEXDIGIT), // 0x63: c
110 (CTYPE_LOWER | CTYPE_HEXDIGIT), // 0x64: d
111 (CTYPE_LOWER | CTYPE_HEXDIGIT), // 0x65: e
112 (CTYPE_LOWER | CTYPE_HEXDIGIT), // 0x66: f
113 CTYPE_LOWER, // 0x67: g
114 CTYPE_LOWER, // 0x68: h
115 CTYPE_LOWER, // 0x69: i
116 CTYPE_LOWER, // 0x6A: j
117 CTYPE_LOWER, // 0x6B: k
118 CTYPE_LOWER, // 0x6C: l
119 CTYPE_LOWER, // 0x6D: m
120 CTYPE_LOWER, // 0x6E: n
121 CTYPE_LOWER, // 0x6F: o
122 CTYPE_LOWER, // 0x70: p
123 CTYPE_LOWER, // 0x71: q
124 CTYPE_LOWER, // 0x72: r
125 CTYPE_LOWER, // 0x73: s
126 CTYPE_LOWER, // 0x74: t
127 CTYPE_LOWER, // 0x75: u
128 CTYPE_LOWER, // 0x76: v
129 CTYPE_LOWER, // 0x77: w
130 CTYPE_LOWER, // 0x78: x
131 CTYPE_LOWER, // 0x79: y
132 CTYPE_LOWER, // 0x7A: z
133
134 /* 0x7B~0x7E: punctuation */
135 CTYPE_PUNCT, // 0x7B: {
136 CTYPE_PUNCT, // 0x7C: |
137 CTYPE_PUNCT, // 0x7D: }
138 CTYPE_PUNCT, // 0x7E: ~
139
140 /* 0x7F: control code (DEL) */
142};
143
144int tolower(int ch) {
145 if (IS_ASCII(ch) && (ctype_table[ch] & CTYPE_UPPER) != 0)
146 return ch + 0x20; // 'a' - 'A' == 0x20
147
148 return ch;
149}
150
151int toupper(int ch) {
152 if (IS_ASCII(ch) && (ctype_table[ch] & CTYPE_LOWER) != 0)
153 return ch - 0x20; // 'a' - 'A' == 0x20
154
155 return ch;
156}
157
158unsigned look_ctype_table(int ch) {
159 if (IS_ASCII(ch))
160 return ctype_table[ch];
161
162 return 0;
163}
#define IS_ASCII(ch)
Definition sysclib.c:6
#define NUM_ASCII_CHARS
Definition sysclib.c:5
unsigned look_ctype_table(int ch)
Definition sysclib.c:158
int tolower(int ch)
Definition sysclib.c:144
int toupper(int ch)
Definition sysclib.c:151
#define CTYPE_CONTROL
Definition sysclib.h:22
#define CTYPE_SPACE
Definition sysclib.h:20
#define CTYPE_PUNCT
Definition sysclib.h:21
#define CTYPE_UPPER
Definition sysclib.h:17
#define CTYPE_HEXDIGIT
Definition sysclib.h:23
#define CTYPE_LOWER
Definition sysclib.h:18
#define CTYPE_DIGIT
Definition sysclib.h:19