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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
|
.include "asm/macros.inc"
.include "global.inc"
.data
.balign 4
.global _loc_tim_C$timezone
_loc_tim_C$timezone: ; 0x02106B84
.asciz ""
.size _loc_tim_C$timezone,.-_loc_tim_C$timezone
.balign 4
.global _loc_tim_C$timefmt2
_loc_tim_C$timefmt2: ; 0x02106B88
.asciz "%T"
.size _loc_tim_C$timefmt2,.-_loc_tim_C$timefmt2
.balign 4
.global _loc_tim_C$AMPM
_loc_tim_C$AMPM: ; 0x02106B8C
.asciz "AM|PM"
.size _loc_tim_C$AMPM,.-_loc_tim_C$AMPM
.balign 4, 0
.global _loc_ctyp_C
_loc_ctyp_C: ; 0x02106B94
.word __mbtowc_noconv
.word __wctomb_noconv
.size _loc_ctyp_C,.-_loc_ctyp_C
.global _loc_coll_C
_loc_coll_C: ; 0x02106B9C
.word 0x20
.word 0x6E
.word 0x00
.word char_coll_tableC
.size _loc_coll_C,.-_loc_coll_C
.global _loc_tim_C
_loc_tim_C: ; 0x02106BAC
.word _loc_tim_C$AMPM
.word _loc_tim_C$datetimefmt
.word _loc_tim_C$timefmt
.word _loc_tim_C$datefmt
.word _loc_tim_C$timefmt2
.word _loc_tim_C$daynames
.word _loc_tim_C$monthnames
.word _loc_tim_C$timezone
.size _loc_tim_C,.-_loc_tim_C
.global char_coll_tableC
char_coll_tableC: ; 0x02106BCC
.short 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008
.short 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010
.short 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028
.short 0x0029, 0x002A, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016
.short 0x0017, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0035, 0x0037
.short 0x0039, 0x003B, 0x003D, 0x003F, 0x0041, 0x0043, 0x0045, 0x0047
.short 0x0049, 0x004B, 0x004D, 0x004F, 0x0051, 0x0053, 0x0055, 0x0057
.short 0x0059, 0x005B, 0x005D, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C
.short 0x0000, 0x002C, 0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038
.short 0x003A, 0x003C, 0x003E, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048
.short 0x004A, 0x004C, 0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058
.short 0x005A, 0x005C, 0x005E, 0x001D, 0x001E, 0x001F, 0x0020, 0x0000
.size char_coll_tableC,.-char_coll_tableC
.global _loc_tim_C$datefmt
_loc_tim_C$datefmt: ; 0x02106C8C
.asciz "%m/%d/%y"
.size _loc_tim_C$datefmt,.-_loc_tim_C$datefmt
.balign 4, 0
.global _current_locale
_current_locale: ; 0x02106C98
.word _loc_tim_C
.word _loc_coll_C
.word _loc_ctyp_C
.size _current_locale,.-_current_locale
.global _loc_tim_C$timefmt
_loc_tim_C$timefmt: ; 0x02106CA4
.asciz "%I:%M:%S %p"
.size _loc_tim_C$timefmt,.-_loc_tim_C$timefmt
.balign 4, 0
.global _loc_tim_C$datetimefmt
_loc_tim_C$datetimefmt: ; 0x02106CB0
.asciz "%a %b %e %T %Y"
.size _loc_tim_C$datetimefmt,.-_loc_tim_C$datetimefmt
.balign 4, 0
.global _loc_tim_C$daynames
_loc_tim_C$daynames: ; 0x02106CC0
.asciz "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday"
.size _loc_tim_C$daynames,.-_loc_tim_C$daynames
.balign 4, 0
.global _loc_tim_C$monthnames
_loc_tim_C$monthnames: ; 0x02106D18
.asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December"
.size _loc_tim_C$monthnames,.-_loc_tim_C$monthnames
.text
arm_func_start mbtowc
mbtowc:
stmdb sp!, {r3,lr}
ldr r3, _020DF2CC ; =_current_locale
ldr r3, [r3, #0x8]
ldr r3, [r3, #0x0]
blx r3
ldmia sp!, {r3,pc}
.balign 4
_020DF2CC: .word _current_locale
arm_func_end mbtowc
arm_func_start __mbtowc_noconv
__mbtowc_noconv: ; 0x020DF2D0
cmp r1, #0x0
moveq r0, #0x0
bxeq lr
cmp r2, #0x0
mvneq r0, #0x0
bxeq lr
cmp r0, #0x0
ldrneb r2, [r1, #0x0]
strneh r2, [r0, #0x0]
ldrsb r0, [r1, #0x0]
cmp r0, #0x0
moveq r0, #0x0
movne r0, #0x1
bx lr
arm_func_end __mbtowc_noconv
arm_func_start __wctomb_noconv
__wctomb_noconv: ; 0x020DF308
cmp r0, #0x0
moveq r0, #0x0
strneb r1, [r0, #0x0]
movne r0, #0x1
bx lr
arm_func_end __wctomb_noconv
arm_func_start wctomb
wctomb: ; 0x020DF31C
stmdb sp!, {r3,lr}
ldr r2, _020DF334 ; =_current_locale
ldr r2, [r2, #0x8]
ldr r2, [r2, #0x4]
blx r2
ldmia sp!, {r3,pc}
.balign 4
_020DF334: .word _current_locale
arm_func_end wctomb
arm_func_start mbstowcs
mbstowcs: ; 0x020DF338
stmdb sp!, {r4-r8,lr}
mov r7, r1
mov r8, r0
mov r0, r7
mov r6, r2
bl strlen
mov r5, r0
cmp r8, #0x0
mov r4, #0x0
beq _020DF3B8
cmp r6, #0x0
bls _020DF3B8
_020DF368:
ldrsb r0, [r7, #0x0]
cmp r0, #0x0
beq _020DF3A0
mov r0, r8
mov r1, r7
mov r2, r5
bl mbtowc
cmp r0, #0x0
add r8, r8, #0x2
addgt r7, r7, r0
subgt r5, r5, r0
bgt _020DF3AC
mvn r0, #0x0
ldmia sp!, {r4-r8,pc}
_020DF3A0:
mov r0, #0x0
strh r0, [r8, #0x0]
b _020DF3B8
_020DF3AC:
add r4, r4, #0x1
cmp r4, r6
blo _020DF368
_020DF3B8:
mov r0, r4
ldmia sp!, {r4-r8,pc}
arm_func_end mbstowcs
arm_func_start wcstombs
wcstombs:
stmdb sp!, {r3-r9,lr}
movs r4, r0
mov r9, r1
cmpne r9, #0x0
mov r8, r2
mov r7, #0x0
moveq r0, #0x0
ldmeqia sp!, {r3-r9,pc}
add r6, sp, #0x0
_020DF3E4:
ldrh r1, [r9, #0x0]
cmp r1, #0x0
moveq r0, #0x0
streqb r0, [r4, r7]
beq _020DF430
mov r0, r6
add r9, r9, #0x2
bl wctomb
mov r5, r0
add r0, r7, r5
cmp r0, r8
bhi _020DF430
mov r1, r6
mov r2, r5
add r0, r4, r7
bl strncpy
add r7, r7, r5
cmp r7, r8
bls _020DF3E4
_020DF430:
mov r0, r7
ldmia sp!, {r3-r9,pc}
arm_func_end wcstombs
exception mbtowc, 29, 0x00100000
exception wctomb, 29, 0x00100000
exception mbstowcs, 137, 0x00301F00
exception wcstombs, 121, 0x00403F00
|