/[james]/territories/Source/Source
ViewVC logotype

Contents of /territories/Source/Source

Parent Directory Parent Directory | Revision Log Revision Log


Revision 19 - (show annotations) (download)
Tue Feb 11 11:05:25 2003 UTC (21 years, 3 months ago) by james
File size: 29490 byte(s)
Initial import.

1 ; > Territories.Source
2
3 ; History
4 ; 28 Jan 1999 JB wrote module base
5 ; 29 Jan 1999 JB changed to use paths
6 ; added character tables
7 ; 04 Feb 1999 JB wrote much of territory_convertdateandtime
8 ; 05 Feb 1999 JB continued with territory_convertdateandtime
9 ; 06 Feb 1999 JB finished territory_convertdateandtime
10 ; wrote territory_convertstandard*
11 ; 08 Feb 1999 JB wrote territory_converttimetoordinals
12 ; 10 Feb 1999 JB wrote territory_converttimestringtoordinals
13 ; 11 Feb 1999 JB wrote territory_convertordinalstotime
14 ; wrote territory_selectkeyboardhandler
15 ; 15 Feb 1999 JB wrote territory_collate
16 ; 18 Feb 1999 JB wrote territory_readsymbols
17 ; wrote territory_readcalendarinformation
18 ; wrote territory_nametonumber
19 ; wrote territory_transformstring
20 ; 20 Feb 1999 JB removed help_and_command_keyword_table (was null)
21 ; 25 Jan 2000 JB altered to use AAsm and rearranged files
22 ; 12 Feb 2000 JB fixed divide to round downwards
23
24 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
25 ; Misc stuff
26 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
27
28 ; lower case registers
29 r0 RN 0
30 r1 RN 1
31 r2 RN 2
32 r3 RN 3
33 r4 RN 4
34 r5 RN 5
35 r6 RN 6
36 r7 RN 7
37 r8 RN 8
38 r9 RN 9
39 r10 RN 10
40 r11 RN 11
41 r12 RN 12
42 r13 RN 13
43 r14 RN 14
44 r15 RN 15
45 pc RN 15
46 f0 FN 0
47 f1 FN 1
48
49 ; workspace offsets
50 ^ 0
51 Entry_Table # 43 * 4
52 Time # 8
53 Ordinal_Buffer # 0
54 Centiseconds # 4
55 Seconds # 4
56 Minutes # 4
57 Hours # 4
58 Day # 4
59 Month # 4
60 Year # 4
61 WeekDay # 4
62 YearDay # 4
63 Workspace_Size # 0
64
65 ; swi numbers
66 XOS_Module * &2001e
67 XOS_ReadUnsigned * &20021
68 XOS_ConvertCardinal4 * &200d8
69 XTerritory_Register * &63041
70 XTerritory_Deregister * &63042
71 XTerritory_ReadCurrentTimeZone * &63048
72 XTerritory_ConvertTimeToUTCOrdinals * &63049
73 XTerritory_ConvertOrdinalsToTime * &63051
74 XTerritory_ReadCalendarInformation * &6305f
75 XTerritory_NameToNumber * &63060
76
77 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
78 ; Module header
79 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
80
81 start
82 DCD 0 ;start_code
83 DCD initialisation_code - start
84 DCD finalisation_code - start
85 DCD service_call_handler - start
86 DCD title_string - start
87 DCD help_string - start
88 DCD help_and_command_keyword_table - start
89
90 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
91 ; Title and help strings
92 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
93
94 title_string
95 DCB MODULE_NAME
96 DCB 0
97
98 help_string
99 DCB MODULE_TITLE
100 DCB 9
101 DCB MODULE_VERSION
102 DCB 0
103
104 ALIGN
105
106 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
107 ; Initialisation code
108 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
109
110 initialisation_code ; 1-207
111 STMFD r13!, {r14}
112
113 LDR r0, [r12]
114 TEQ r0, #0
115 BNE ic_allocated
116
117 MOV r0, #6
118 MOV r3, #Workspace_Size
119 SWI XOS_Module ; Claim (1-233)
120 LDMVSFD r13!, {pc}
121 STR r2, [r12]
122
123 ic_allocated
124 LDR r12, [r12]
125 BL territory_register
126 LDMVSFD r13!, {pc}
127
128 LDMFD r13!, {pc}^
129
130 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
131 ; Finalisation code
132 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
133
134 finalisation_code ; 1-209
135 STMFD r13!, {r14}
136
137 MOV r0, #(TERRITORY_NUMBER)
138 SWI XTerritory_Deregister ; 3-795
139 LDMVSFD r13!, {pc}
140
141 LDMFD r13!, {pc}^
142
143 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
144 ; Service call handler
145 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
146
147 service_call_handler ; 1-210
148 TEQ r1, #&64 ; Service_TerritoryManagerLoaded (3-790)
149 MOVNES pc, r14
150
151 STMFD r13!, {r14}
152
153 LDR r12, [r12]
154 BL territory_register
155 LDMVSFD r13!, {pc}
156
157 LDMFD r13!, {pc}^
158
159 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
160 ; Help and command keyword table
161 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
162
163 help_and_command_keyword_table
164 DCB MODULE_NAME
165 DCB 0
166 ALIGN
167 DCD 0 ; no code
168 DCD 0 ; information word
169 DCD 0 ; syntax message
170 DCD about - start ; help offset
171 DCB 0
172
173 about
174 DCB ABOUT_MESSAGE
175 DCB 0
176 ALIGN
177
178 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
179 ; Territory manager related
180 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
181
182 territory_register
183 STMFD r13!, {r0-r2, r14}
184
185 ADRL r1, territory_readtimezones ; &4304A
186 STR r1, [r12, #00]
187 ADRL r1, territory_convertdateandtime ; &4304B
188 STR r1, [r12, #04]
189 ADRL r1, territory_convertstandarddateandtime ; &4304C
190 STR r1, [r12, #08]
191 ADRL r1, territory_convertstandarddate ; &4304D
192 STR r1, [r12, #12]
193 ADRL r1, territory_convertstandardtime ; &4304E
194 STR r1, [r12, #16]
195 ADRL r1, territory_converttimetoordinals ; &4304F
196 STR r1, [r12, #20]
197 ADRL r1, territory_converttimestringtoordinals ; &43050
198 STR r1, [r12, #24]
199 ADRL r1, territory_convertordinalstotime ; &43051
200 STR r1, [r12, #28]
201 ADRL r1, territory_alphabet ; &43052
202 STR r1, [r12, #32]
203 ADRL r1, territory_alphabetidentifier ; &43053
204 STR r1, [r12, #36]
205 ADRL r1, territory_selectkeyboardhandler ; &43054
206 STR r1, [r12, #40]
207 ADRL r1, territory_writedirection ; &43055
208 STR r1, [r12, #44]
209 ADRL r1, territory_characterpropertytable ; &43056
210 STR r1, [r12, #48]
211 ADRL r1, territory_lowercasetable ; &43057
212 STR r1, [r12, #52]
213 ADRL r1, territory_uppercasetable ; &43058
214 STR r1, [r12, #56]
215 ADRL r1, territory_controltable ; &43059
216 STR r1, [r12, #60]
217 ADRL r1, territory_plaintable ; &4305A
218 STR r1, [r12, #64]
219 ADRL r1, territory_valuetable ; &4305B
220 STR r1, [r12, #68]
221 ADRL r1, territory_representationtable ; &4305C
222 STR r1, [r12, #72]
223 ADRL r1, territory_collate ; &4305D
224 STR r1, [r12, #76]
225 ADRL r1, territory_readsymbols ; &4305E
226 STR r1, [r12, #80]
227 ADRL r1, territory_readcalendarinformation ; &4305F
228 STR r1, [r12, #84]
229 ADRL r1, territory_nametonumber ; &43060
230 STR r1, [r12, #88]
231 ADRL r1, territory_transformstring ; &43061
232 STR r1, [r12, #92]
233 ADRL r1, territory_reserved ; &43062
234 STR r1, [r12, #96]
235 STR r1, [r12, #100] ; &43063
236 STR r1, [r12, #104] ; &43064
237 STR r1, [r12, #108] ; &43065
238 STR r1, [r12, #112] ; &43066
239 STR r1, [r12, #116] ; &43067
240 STR r1, [r12, #120] ; &43068
241 STR r1, [r12, #124] ; &43069
242 STR r1, [r12, #128] ; &4306A
243 STR r1, [r12, #132] ; &4306B
244 STR r1, [r12, #136] ; &4306C
245 STR r1, [r12, #140] ; &4306D
246 STR r1, [r12, #144] ; &4306E
247 STR r1, [r12, #148] ; &4306F
248 STR r1, [r12, #152] ; &43070
249 STR r1, [r12, #156] ; &43071
250 STR r1, [r12, #160] ; &43072
251 STR r1, [r12, #164] ; &43073
252 STR r1, [r12, #168] ; &43074
253
254 MOV r0, #TERRITORY_NUMBER
255 MOV r1, r12
256 MOV r2, r12
257 SWI XTerritory_Register
258 ADDVS r13, r13, #4
259 LDMVSFD r13!, {r1-r2, pc}
260
261 LDMFD r13!, {r0-r2, pc}^
262
263 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
264 ; Territory module SWIs
265 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
266
267 territory_readtimezones ; 3-806
268 ADR r0, timezone
269 ADR r1, dstzone
270 LDR r2, timeoffset
271 LDR r3, dstoffset
272
273 MOVS pc, r14
274
275 timezone
276 DCB TIME_ZONE
277 DCB 0
278 dstzone
279 DCB DST_ZONE
280 DCB 0
281 ALIGN
282 timeoffset
283 DCD TIME_OFFSET
284 dstoffset
285 DCD DST_OFFSET
286
287 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
288
289 territory_convertdateandtime ; 3-807
290 STMFD r13!, {r5-r11, r14}
291
292 MOV r7, r1 ; pointer to 5 byte UTC time
293 MOV r8, r2 ; pointer to buffer
294 MOV r9, r2 ; pointer to terminating 0 in buffer
295 MOV r10, r3 ; number of bytes free in buffer
296 MOV r11, r4 ; pointer to format string
297 MOV r5, r4 ; pointer to format string position
298
299 SWI XTerritory_ReadCurrentTimeZone ; 3-801
300 LDMVSFD r13!, {r5-r11, pc}
301 MOV r6, r0 ; pointer to name of current time zone
302
303 LDR r2, [r7] ; add time zone to convert UTC to local time
304 LDRB r3, [r7, #4]
305 ADDS r2, r2, r1
306 ADC r3, r3, #0
307 STR r2, [r12, #(Time + 0)]
308 STRB r3, [r12, #(Time + 4)]
309
310 ADD r1, r12, #Time ; convert 5 byte time to more useful ordinals
311 ADD r2, r12, #Ordinal_Buffer
312 SWI XTerritory_ConvertTimeToUTCOrdinals ; 3-802
313 LDMVSFD r13!, {r5-r11, pc}
314
315 tcdat_loop
316 CMP r10, #1 ; check space in buffer
317 BLT tcdat_buffer_overflow
318
319 LDRB r0, [r5], #1 ; get a byte
320
321 TEQ r0, #"%" ; format field
322 BEQ tcdat_field
323
324 STRB r0, [r9], #1 ; other - add to buffer
325 SUB r10, r10, #1 ; decrement free space
326
327 CMP r0, #32 ; check for terminator (<32)
328 BGE tcdat_loop
329
330 MOV r0, r8 ; tidy up & exit
331 SUB r1, r9, #1
332 MOV r2, r10
333 MOV r3, r11
334 MOV r4, r3
335
336 LDMFD r13!, {r5-r11, pc}^
337
338 tcdat_field ; 1-402
339 LDRB r0, [r5], #1 ; first byte
340
341 TEQ r0, #"0" ; %0 - insert zero byte
342 MOVEQ r0, #0
343 STREQB r0, [r9], #1
344 SUBEQ r10, r10, #1
345 BEQ tcdat_loop
346
347 TEQ r0, #"%" ; %% - insert a %
348 STREQB r0, [r9], #1
349 SUBEQ r10, r10, #1
350 BEQ tcdat_loop
351
352 TEQ r0, #"z" ; z - without leading zeros
353 TEQNE r0, #"Z"
354 MOVEQ r4, #1 ; flag z
355 MOVNE r4, #0
356 LDREQB r0, [r5], #1 ; get a replacement byte
357
358 CMP r0, #32 ; unexpected termination
359 BLS tcdat_unknown_field
360
361 LDRB r1, [r5], #1 ; second byte
362 CMP r1, #32 ; unexpected termination
363 BLS tcdat_unknown_field
364
365 ORR r0, r0, #32 ; convert to lowercase
366 ORR r1, r1, #32
367
368 TEQ r0, #"c" ; cs
369 TEQEQ r1, #"s"
370 LDREQ r0, [r12, #Centiseconds]
371 BEQ tcdat_add_number2
372
373 TEQ r0, #"s" ; se
374 TEQEQ r1, #"e"
375 LDREQ r0, [r12, #Seconds]
376 BEQ tcdat_add_number2
377
378 TEQ r0, #"m" ; mi
379 TEQEQ r1, #"i"
380 LDREQ r0, [r12, #Minutes]
381 BEQ tcdat_add_number2
382
383 TEQ r0, #"1" ; 12
384 TEQEQ r1, #"2"
385 BNE tcdat_skip_12
386 LDR r0, [r12, #Hours]
387 CMP r0, #12 ; convert to 12-hour
388 SUBGT r0, r0, #12
389 TEQ r0, #0 ; 0h => 12h
390 MOVEQ r0, #12
391 B tcdat_add_number2
392 tcdat_skip_12
393
394 TEQ r0, #"2" ; 24
395 TEQEQ r1, #"4"
396 LDREQ r0, [r12, #Hours]
397 BEQ tcdat_add_number2
398
399 TEQ r0, #"a" ; am
400 TEQEQ r1, #"m"
401 ; am/pm not implemented - not used much anyway
402 BEQ tcdat_loop
403
404 TEQ r0, #"p" ; pm
405 TEQEQ r1, #"m"
406 ; am/pm not implemented - not used much anyway
407 BEQ tcdat_loop
408
409 TEQ r0, #"w" ; we
410 TEQEQ r1, #"e"
411 BNE tcdat_skip_we
412 LDR r1, [r12, #WeekDay]
413 TEQ r1, #1 ; !!!
414 ADREQL r0, sunday
415 TEQ r1, #2
416 ADREQL r0, monday
417 TEQ r1, #3
418 ADREQL r0, tuesday
419 TEQ r1, #4
420 ADREQL r0, wednesday
421 TEQ r1, #5
422 ADREQL r0, thursday
423 TEQ r1, #6
424 ADREQL r0, friday
425 TEQ r1, #7
426 ADREQL r0, saturday
427 B tcdat_add_string
428 tcdat_skip_we
429
430 TEQ r0, #"w" ; w3
431 TEQEQ r1, #"3"
432 BNE tcdat_skip_w3
433 LDR r1, [r12, #WeekDay]
434 TEQ r1, #1 ; !!!
435 ADREQL r0, sun
436 TEQ r1, #2
437 ADREQL r0, mon
438 TEQ r1, #3
439 ADREQL r0, tue
440 TEQ r1, #4
441 ADREQL r0, wed
442 TEQ r1, #5
443 ADREQL r0, thu
444 TEQ r1, #6
445 ADREQL r0, fri
446 TEQ r1, #7
447 ADREQL r0, sat
448 B tcdat_add_string
449 tcdat_skip_w3
450
451 TEQ r0, #"w" ; wn
452 TEQEQ r1, #"n"
453 BNE tcdat_skip_wn
454 LDR r0, [r12, #WeekDay]
455 SUB r0, r0, #1 ; convert to mon = 1, sun = 7
456 TEQ r0, #0
457 MOVEQ r0, #7
458 B tcdat_add_number1
459 tcdat_skip_wn
460
461 TEQ r0, #"d" ; dy
462 TEQEQ r1, #"y"
463 LDREQ r0, [r12, #Day]
464 BEQ tcdat_add_number2
465
466 TEQ r0, #"s" ; st
467 TEQEQ r1, #"t"
468 ; st field not implemented
469 BEQ tcdat_loop
470
471 TEQ r0, #"m" ; mo
472 TEQEQ r1, #"o"
473 BNE tcdat_skip_mo
474 LDR r1, [r12, #Month]
475 TEQ r1, #1
476 ADREQL r0, january
477 TEQ r1, #2
478 ADREQL r0, february
479 TEQ r1, #3
480 ADREQL r0, march
481 TEQ r1, #4
482 ADREQL r0, april
483 TEQ r1, #5
484 ADREQL r0, may
485 TEQ r1, #6
486 ADREQL r0, june
487 TEQ r1, #7
488 ADREQL r0, july
489 TEQ r1, #8
490 ADREQL r0, august
491 TEQ r1, #9
492 ADREQL r0, september
493 TEQ r1, #10
494 ADREQL r0, october
495 TEQ r1, #11
496 ADREQL r0, november
497 TEQ r1, #12
498 ADREQL r0, december
499 B tcdat_add_string
500 tcdat_skip_mo
501
502 TEQ r0, #"m" ; m3
503 TEQEQ r1, #"3"
504 BNE tcdat_skip_m3
505 LDR r1, [r12, #Month]
506 TEQ r1, #1
507 ADREQL r0, jan
508 TEQ r1, #2
509 ADREQL r0, feb
510 TEQ r1, #3
511 ADREQL r0, mar
512 TEQ r1, #4
513 ADREQL r0, apr
514 TEQ r1, #5
515 ADREQL r0, may3
516 TEQ r1, #6
517 ADREQL r0, jun
518 TEQ r1, #7
519 ADREQL r0, jul
520 TEQ r1, #8
521 ADREQL r0, aug
522 TEQ r1, #9
523 ADREQL r0, sep
524 TEQ r1, #10
525 ADREQL r0, oct
526 TEQ r1, #11
527 ADREQL r0, nov
528 TEQ r1, #12
529 ADREQL r0, dec
530 B tcdat_add_string
531 tcdat_skip_m3
532
533 TEQ r0, #"m" ; mn
534 TEQEQ r1, #"n"
535 LDREQ r0, [r12, #Month]
536 BEQ tcdat_add_number2
537
538 TEQ r0, #"c" ; ce
539 TEQEQ r1, #"e"
540 LDREQ r0, [r12, #Year]
541 MOVEQ r1, #100
542 BLEQ divide
543 BEQ tcdat_add_number2
544
545 TEQ r0, #"y" ; yr
546 TEQEQ r1, #"r"
547 LDREQ r0, [r12, #Year]
548 MOVEQ r3, r0
549 MOVEQ r1, #100
550 BLEQ divide
551 MULEQ r2, r1, r0 ; work out the remainder
552 SUBEQ r0, r3, r2
553 BEQ tcdat_add_number2
554
555 TEQ r0, #"w" ; wk
556 TEQEQ r1, #"k"
557 BNE tcdat_skip_wk
558 LDR r0, [r12, #YearDay]
559 LDR r1, [r12, #WeekDay]
560 SUBS r1, r1, #1 ; compensate for sun = 1
561 MOVEQ r1, #7
562 SUB r1, r0, r1
563 ADD r0, r1, #7
564 MOV r1, #7
565 BL divide
566 B tcdat_add_number2
567 tcdat_skip_wk
568
569 TEQ r0, #"d" ; dn
570 TEQEQ r1, #"n"
571 LDREQ r0, [r12, #YearDay]
572 BEQ tcdat_add_number3
573
574 TEQ r0, #"t" ; tz
575 TEQEQ r1, #"z"
576 MOVEQ r0, r6
577 BEQ tcdat_add_string
578 ; drop through
579 tcdat_unknown_field
580 ADRL r0, unknown_field
581 LDMFD r13!, {r5-r11, r14}
582 ORRS pc, r14, #&10000000
583
584 tcdat_buffer_overflow
585 ADRL r0, buffer_overflow
586 LDMFD r13!, {r5-r11, r14}
587 ORRS pc, r14, #&10000000
588
589 tcdat_add_number2
590 TEQ r4, #0 ; insert leading 0 if necessary
591 BNE tcdat_add_number1
592 CMP r0, #10
593 MOVLT r1, #"0"
594 STRLTB r1, [r9], #1
595 SUBLT r10, r10, #1 ; decrement free space
596 ; dropped into by number2
597 tcdat_add_number1
598 MOV r1, r9
599 MOV r2, r10
600 SWI XOS_ConvertCardinal4 ; 1-469
601 LDMVSFD r13!, {r5-r11, pc}
602 MOV r9, r1
603 MOV r10, r2
604
605 B tcdat_loop
606
607 tcdat_add_number3
608 TEQ r4, #0 ; insert leading 0s if necessary
609 BNE tcdat_add_number1
610 CMP r0, #100
611 BGE tcdat_add_number1
612 MOV r1, #"0"
613 STRB r1, [r9], #1
614 SUB r10, r10, #1 ; decrement free space
615 CMP r0, #10
616 BGE tcdat_add_number1
617 CMP r10, #1 ; check space in buffer
618 BLT tcdat_buffer_overflow
619 MOV r1, #"0"
620 STRB r1, [r9], #1
621 SUB r10, r10, #1 ; decrement free space
622 B tcdat_add_number1
623
624 tcdat_add_string
625 LDRB r1, [r0], #1 ; source byte
626 CMP r1, #32
627 BLT tcdat_loop
628
629 STRB r1, [r9], #1 ; destination buffer
630 SUB r10, r10, #1
631 CMP r10, #1 ; check space in buffer
632 BLT tcdat_buffer_overflow
633 B tcdat_add_string
634
635 monday DCB MONDAY
636 DCB 0
637 tuesday DCB TUESDAY
638 DCB 0
639 wednesday DCB WEDNESDAY
640 DCB 0
641 thursday DCB THURSDAY
642 DCB 0
643 friday DCB FRIDAY
644 DCB 0
645 saturday DCB SATURDAY
646 DCB 0
647 sunday DCB SUNDAY
648 DCB 0
649
650 mon DCB MON
651 DCB 0
652 tue DCB TUE
653 DCB 0
654 wed DCB WED
655 DCB 0
656 thu DCB THU
657 DCB 0
658 fri DCB FRI
659 DCB 0
660 sat DCB SAT
661 DCB 0
662 sun DCB SUN
663 DCB 0
664
665 january DCB JANUARY
666 DCB 0
667 february DCB FEBRUARY
668 DCB 0
669 march DCB MARCH
670 DCB 0
671 april DCB APRIL
672 DCB 0
673 may DCB MAY
674 DCB 0
675 june DCB JUNE
676 DCB 0
677 july DCB JULY
678 DCB 0
679 august DCB AUGUST
680 DCB 0
681 september DCB SEPTEMBER
682 DCB 0
683 october DCB OCTOBER
684 DCB 0
685 november DCB NOVEMBER
686 DCB 0
687 december DCB DECEMBER
688 DCB 0
689
690 jan DCB JAN
691 DCB 0
692 feb DCB FEB
693 DCB 0
694 mar DCB MAR
695 DCB 0
696 apr DCB APR
697 DCB 0
698 may3 DCB MAY
699 DCB 0
700 jun DCB JUN
701 DCB 0
702 jul DCB JUL
703 DCB 0
704 aug DCB AUG
705 DCB 0
706 sep DCB SEP
707 DCB 0
708 oct DCB OCT
709 DCB 0
710 nov DCB NOV
711 DCB 0
712 dec DCB DEC
713 DCB 0
714 ALIGN
715
716 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
717
718 territory_convertstandarddateandtime ; 3-809
719 STMFD r13!, {r3, r4, r14}
720
721 ADR r4, dateandtime
722 BL territory_convertdateandtime
723
724 LDMVSFD r13!, {r3, r4, pc}
725 LDMFD r13!, {r3, r4, pc}^
726
727 dateandtime
728 DCB DATEANDTIME
729 DCB 0
730 ALIGN
731
732 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
733
734 territory_convertstandarddate ; 3-811
735 STMFD r13!, {r3, r4, r14}
736
737 ADR r4, date
738 BL territory_convertdateandtime
739
740 LDMVSFD r13!, {r3, r4, pc}
741 LDMFD r13!, {r3, r4, pc}^
742
743 date
744 DCB DATE
745 DCB 0
746 ALIGN
747
748 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
749
750 territory_convertstandardtime ; 3-813
751 STMFD r13!, {r3, r4, r14}
752
753 ADR r4, time
754 BL territory_convertdateandtime
755
756 LDMVSFD r13!, {r3, r4, pc}
757 LDMFD r13!, {r3, r4, pc}^
758
759 time
760 DCB TIME
761 DCB 0
762 ALIGN
763
764 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
765
766 territory_converttimetoordinals ; 3-815
767 STMFD r13!, {r1-r4, r14}
768
769 MOV r4, r1 ; pointer to UTC time
770 MOV r5, r2 ; pointer to buffer
771
772 SWI XTerritory_ReadCurrentTimeZone ; 3-801
773 LDMVSFD r13!, {r1-r4, pc}
774
775 LDR r2, [r4] ; add time zone to convert UTC to local time
776 LDRB r3, [r4, #4]
777 ADDS r2, r2, r1
778 ADC r3, r3, #0
779 STR r2, [r12, #(Time + 0)]
780 STRB r3, [r12, #(Time + 4)]
781
782 ADD r1, r12, #Time ; convert 5 byte time to more useful ordinals
783 MOV r2, r5
784 SWI XTerritory_ConvertTimeToUTCOrdinals ; 3-802
785 LDMVSFD r13!, {r1-r4, pc}
786
787 LDR r1, [r5, #28] ; correct day of week
788 SUB r1, r1, #1
789 TEQ r1, #0
790 MOVEQ r1, #7
791 STR r1, [r5, #28]
792
793 LDMFD r13!, {r1-r4, pc}^
794
795 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
796
797 territory_converttimestringtoordinals ; 3-817
798 STMFD r13!, {r1-r7, r14}
799
800 MOV r0, #-1
801 STR r0, [r3, #0]
802 STR r0, [r3, #4]
803 STR r0, [r3, #8]
804 STR r0, [r3, #12]
805 STR r0, [r3, #16]
806 STR r0, [r3, #20]
807 STR r0, [r3, #24]
808
809 MOV r4, r1 ; reason code
810 MOV r5, r2 ; time STRing
811
812 TEQ r4, #1 ; %24:%mi:%se
813 BEQ tctsto_time
814
815 TEQ r4, #2 ; %w3, %dy-%m3-%ce%yr
816 TEQNE r4, #3 ; %w3, %dy-%m3-%ce%yr.%24:%mi:%se
817 BEQ tctsto_date
818
819 ADRL r0, unknown_format
820 LDMFD r13!, {r1-r7, r14}
821 ORRS pc, r14, #&10000000
822
823 tctsto_date
824 LDRB r0, [r5], #1 ; skip %w3, ‘
825 CMP r0, #" "
826 BLT tctsto_bad_string
827 BNE tctsto_date
828
829 MOV r0, #10
830 MOV r1, r5
831 SWI XOS_ReadUnsigned ; 1-448
832 LDMVSFD r13!, {r1-r7, pc}
833 STR r2, [r3, #16] ; day
834
835 ADD r5, r1, #1 ; skip -‘
836
837 ADRL r0, jan
838 MOV r2, #1
839 BL tctsto_compare
840
841 ADRL r0, feb
842 MOV r2, #2
843 BL tctsto_compare
844
845 ADRL r0, mar
846 MOV r2, #3
847 BL tctsto_compare
848
849 ADRL r0, apr
850 MOV r2, #4
851 BL tctsto_compare
852
853 ADRL r0, may3
854 MOV r2, #5
855 BL tctsto_compare
856
857 ADRL r0, jun
858 MOV r2, #6
859 BL tctsto_compare
860
861 ADRL r0, jul
862 MOV r2, #7
863 BL tctsto_compare
864
865 ADRL r0, aug
866 MOV r2, #8
867 BL tctsto_compare
868
869 ADRL r0, sep
870 MOV r2, #9
871 BL tctsto_compare
872
873 ADRL r0, oct
874 MOV r2, #10
875 BL tctsto_compare
876
877 ADRL r0, nov
878 MOV r2, #11
879 BL tctsto_compare
880
881 ADRL r0, dec
882 MOV r2, #12
883 BL tctsto_compare
884
885 B tctsto_bad_string
886
887 tctsto_found
888 STR r2, [r3, #20] ; month
889
890 MOV r0, #10
891 SWI XOS_ReadUnsigned ; 1-448
892 LDMVSFD r13!, {r1-r7, pc}
893 STR r2, [r3, #24] ; year
894
895 ADD r5, r1, #1
896
897 TEQ r4, #2
898 LDMEQFD r13!, {r1-r7, pc}^
899
900 tctsto_time ; drop through
901 MOV r0, #10
902
903 MOV r1, r5
904 SWI XOS_ReadUnsigned ; 1-448
905 LDMVSFD r13!, {r1-r7, pc}
906 STR r2, [r3, #12] ; hours
907
908 ADD r1, r5, #3
909 SWI XOS_ReadUnsigned ; 1-448
910 LDMVSFD r13!, {r1-r7, pc}
911 STR r2, [r3, #8] ; minutes
912
913 ADD r1, r5, #6
914 SWI XOS_ReadUnsigned ; 1-448
915 LDMVSFD r13!, {r1-r7, pc}
916 STR r2, [r3, #4] ; seconds
917
918 MOV r0, #0
919 STR r0, [r3, #0] ; centiseconds
920
921 LDMFD r13!, {r1-r7, pc}^
922
923 tctsto_compare
924 MOV r1, r5
925 tctsto_loop
926 LDRB r6, [r1], #1 ; STRing
927 LDRB r7, [r0], #1 ; month
928 TEQ r7, #0
929 TEQEQ r6, #"-"
930 BEQ tctsto_found
931 TEQ r6, r7
932 MOVNE pc, r14
933
934 B tctsto_loop
935
936 tctsto_bad_string
937 ADRL r0, bad_string
938 LDMFD r13!, {r1-r7, r14}
939 ORRS pc, r14, #&10000000
940
941 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
942
943 territory_convertordinalstotime ; 3-819
944 STMFD r13!, {r14}
945
946 MOV r0, #1 ; cheat: pass to UK territory
947 SWI XTerritory_ConvertOrdinalsToTime
948 LDMVSFD r13!, {pc}
949
950 LDMFD r13!, {pc}^
951
952 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
953
954 territory_alphabet ; 3-821
955 MOV r0, #ALPHABET_NUMBER
956 MOVS pc, r14
957
958 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
959
960 territory_alphabetidentifier ; 3-822
961 ADR r0, alphabet
962 MOVS pc, r14
963
964 alphabet
965 DCB ALPHABET_NAME
966 DCB 0
967 ALIGN
968
969 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
970
971 territory_selectkeyboardhandler ; 3-823
972 ; not implemented
973 MOVS pc, r14
974
975 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
976
977 territory_writedirection ; 3-824
978 MOV r0, #WRITE_DIRECTION
979 MOVS pc, r14
980
981 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
982
983 territory_characterpropertytable ; 3-826
984 ADRL r0, propertytables
985 CMP r1, #10
986 ADRGTL r0, unknown_property
987 ORRGTS pc, r14, #&10000000
988 ADD r0, r0, r1, LSL #5
989 MOVS pc, r14
990
991 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
992
993 territory_lowercasetable ; 3-828
994 ADRL r0, lowercasetable
995 MOVS pc, r14
996
997 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
998
999 territory_uppercasetable ; 3-829
1000 ADRL r0, uppercasetable
1001 MOVS pc, r14
1002
1003 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1004
1005 territory_controltable ; 3-830
1006 ADRL r0, controltable
1007 MOVS pc, r14
1008
1009 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1010
1011 territory_plaintable ; 3-831
1012 ADRL r0, plaintable
1013 MOVS pc, r14
1014
1015 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1016
1017 territory_valuetable ; 3-832
1018 ADRL r0, valuetable
1019 MOVS pc, r14
1020
1021 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1022
1023 territory_representationtable ; 3-833
1024 ADRL r0, representationtable
1025 MOVS pc, r14
1026
1027 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1028
1029 territory_collate ; 3-834
1030 STMFD r13!, {r1-r8, r14}
1031
1032 ADRL r6, lowercasetable
1033 ADRL r7, plaintable
1034 ADRL r8, collatetable
1035
1036 tc_loop
1037 LDRB r4, [r1], #1
1038 LDRB r5, [r2], #1
1039
1040 CMP r4, #32 ; check for termination
1041 CMPLT r5, #32
1042 MOVLT r0, #0 ; both end
1043 BLT tc_end
1044 CMP r4, #32
1045 MOVLT r0, #-1 ; 1 ends
1046 BLT tc_end
1047 CMP r5, #32
1048 MOVLT r0, #1 ; 2 ends
1049 BLT tc_end
1050
1051 TST r3, #1 ; ignore case
1052 LDRNEB r4, [r6, r4] ; convert to lower case
1053 LDRNEB r5, [r6, r5]
1054
1055 TST r3, #2 ; ignore accents
1056 LDRNEB r4, [r7, r4] ; convert to plain
1057 LDRNEB r5, [r7, r5]
1058
1059 LDRB r4, [r8, r4] ; convert to sort priority
1060 LDRB r5, [r8, r5]
1061
1062 CMP r4, r5 ; do comparison
1063 BEQ tc_loop
1064
1065 MOVLT r0, #-1
1066 MOVGT r0, #1
1067
1068 tc_end
1069 CMP r0, #0 ; set flags
1070
1071 LDMFD r13!, {r1-r8, pc} ; no ^
1072
1073 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1074
1075 territory_readsymbols ; 3-836
1076 TEQ r1, #0 ; STRings
1077 ADREQ r0, trs_decimalpoint
1078 TEQ r1, #1
1079 ADREQ r0, trs_thousands
1080 TEQ r1, #2
1081 ADREQ r0, trs_digits
1082 TEQ r1, #3
1083 ADREQ r0, trs_intcurrency
1084 TEQ r1, #4
1085 ADREQ r0, trs_currency
1086 TEQ r1, #5
1087 ADREQ r0, trs_moneydecimalpoint
1088 TEQ r1, #6
1089 ADREQ r0, trs_moneythousands
1090 TEQ r1, #7
1091 ADREQ r0, trs_moneydigits
1092 TEQ r1, #8
1093 ADREQ r0, trs_moneypositive
1094 TEQ r1, #9
1095 ADREQ r0, trs_moneynegative
1096 TEQ r1, #18
1097 ADREQ r0, trs_listseparator
1098
1099 TEQ r1, #10 ; values
1100 MOVEQ r0, #SYMBOL_MONEYINTFRACTION
1101 TEQ r1, #11
1102 MOVEQ r0, #SYMBOL_MONEYFRACTION
1103 TEQ r1, #12
1104 MOVEQ r0, #SYMBOL_CURRENCYPLACE
1105 TEQ r1, #13
1106 MOVEQ r0, #SYMBOL_CURRENCYSPACE
1107 TEQ r1, #14
1108 MOVEQ r0, #SYMBOL_CURRENCYPLACENEG
1109 TEQ r1, #15
1110 MOVEQ r0, #SYMBOL_CURRENCYSPACENEG
1111 TEQ r1, #16
1112 MOVEQ r0, #SYMBOL_MONEYPOS
1113 TEQ r1, #17
1114 MOVEQ r0, #SYMBOL_MONEYNEG
1115
1116 MOVS pc, r14
1117
1118 trs_decimalpoint
1119 DCB SYMBOL_DECIMALPOINT
1120 DCB 0
1121 trs_thousands
1122 DCB SYMBOL_THOUSANDS
1123 DCB 0
1124 trs_digits
1125 DCD SYMBOL_DIGITS
1126 trs_intcurrency
1127 DCB SYMBOL_INTCURRENCY
1128 DCB 0
1129 trs_currency
1130 DCB SYMBOL_CURRENCY
1131 DCB 0
1132 trs_moneydecimalpoint
1133 DCB SYMBOL_MONEYDECIMALPOINT
1134 DCB 0
1135 trs_moneythousands
1136 DCB SYMBOL_MONEYTHOUSANDS
1137 DCB 0
1138 trs_moneydigits
1139 DCD SYMBOL_MONEYDIGITS
1140 trs_moneypositive
1141 DCB SYMBOL_MONEYPOSITIVE
1142 DCB 0
1143 trs_moneynegative
1144 DCB SYMBOL_MONEYNEGATIVE
1145 DCB 0
1146 trs_listseparator
1147 DCB SYMBOL_LISTSEPARATOR
1148 DCB 0
1149 ALIGN
1150
1151 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1152
1153 territory_readcalendarinformation ; 3-839
1154 STMFD r13!, {r0-r2, r14}
1155
1156 MOV r0, #1 ; pass to UK territory to get time
1157 SWI XTerritory_ReadCalendarInformation
1158 ADDVS r13, r13, #4
1159 LDMVSFD r13!, {r1-r2, pc}
1160
1161 MOV r0, #CALENDAR_FIRSTWORKDAY
1162 STR r0, [r2, #0]
1163 MOV r0, #CALENDAR_LASTWORKDAY
1164 STR r0, [r2, #4]
1165 MOV r0, #CALENDAR_MAXLENAMPM
1166 STR r0, [r2, #16]
1167 MOV r0, #CALENDAR_MAXLENWE
1168 STR r0, [r2, #20]
1169 MOV r0, #CALENDAR_MAXLENW3
1170 STR r0, [r2, #24]
1171 MOV r0, #CALENDAR_MAXLENDY
1172 STR r0, [r2, #28]
1173 MOV r0, #CALENDAR_MAXLENST
1174 STR r0, [r2, #32]
1175 MOV r0, #CALENDAR_MAXLENMO
1176 STR r0, [r2, #36]
1177 MOV r0, #CALENDAR_MAXLENM3
1178 STR r0, [r2, #40]
1179 MOV r0, #CALENDAR_MAXLENTZ
1180 STR r0, [r2, #44]
1181
1182 LDMFD r13!, {r0-r2, pc}^
1183
1184 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1185
1186 territory_nametonumber ; 3-841
1187 STMFD r13!, {r14}
1188
1189 MOV r0, #1 ; pass to UK territory
1190 SWI XTerritory_NameToNumber
1191 LDMVSFD r13!, {pc}
1192
1193 LDMFD r13!, {pc}^
1194
1195 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1196
1197 territory_transformstring ; 3-842
1198 STMFD r13!, {r1-r5, r14}
1199
1200 MOV r0, #0 ; find string length
1201 tts_loop
1202 LDRB r4, [r2, r0]
1203 ADD r0, r0, #1
1204 CMP r4, #32
1205 BGE tts_loop
1206
1207 SUB r0, r0, #1
1208
1209 CMP r0, r3 ; buffer too short so exit
1210 LDMGEFD r13!, {r1-r5, pc}^
1211
1212 ADRL r5, collatetable
1213
1214 tts_loop2
1215 LDRB r4, [r2], #1
1216 CMP r4, #32
1217 BLT tts_end
1218 LDRB r4, [r5, r4]
1219 STRB r4, [r1], #1
1220 B tts_loop2
1221
1222 tts_end
1223 MOV r4, #0
1224 STRB r4, [r1]
1225
1226 LDMFD r13!, {r1-r5, pc}^
1227
1228 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1229
1230 territory_reserved
1231 ADR r0, unknown_SWI
1232 ORRS pc, r14, #&10000000
1233
1234 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1235 ; Division algorithm
1236 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1237
1238 ; On entry
1239 ; r0 = value
1240 ; r1 = divisor
1241 ; On exit
1242 ; r0 = value ÷ divisor
1243 ; f0, f1 corrupted
1244
1245 divide
1246 STMFD r13!, {r14}
1247
1248 FLTS f0, r0 ; just use the FP :-)
1249 FLTS f1, r1
1250 FDVS f0, f0, f1
1251 FIXM r0, f0
1252
1253 LDMFD r13!, {pc}^
1254
1255 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1256 ; Error Blocks
1257 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1258
1259 unknown_SWI
1260 DCD &43040
1261 DCB "Unknown Territory SWI"
1262 DCB 0
1263 ALIGN
1264
1265 unknown_property
1266 DCD &43041
1267 DCB "Unknown character property"
1268 DCB 0
1269 ALIGN
1270
1271 buffer_overflow
1272 DCD &2C1
1273 DCB "Buffer overflow"
1274 DCB 0
1275 ALIGN
1276
1277 unknown_field
1278 DCD &2C2
1279 DCB "Unknown '%' field"
1280 DCB 0
1281 ALIGN
1282
1283 unknown_format
1284 DCD &2C3
1285 DCB "Unknown format type"
1286 DCB 0
1287 ALIGN
1288
1289 bad_string
1290 DCD &2C4
1291 DCB "Bad time string"
1292 DCB 0
1293
1294 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1295 ; Data
1296 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1297
1298 data
1299 ^ data
1300 propertytables # 352
1301 lowercasetable # 256
1302 uppercasetable # 256
1303 controltable # 256
1304 plaintable # 256
1305 valuetable # 256
1306 representationtable # 16
1307 collatetable # 256
1308
1309 ALIGN
1310
1311 ;˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜
1312
1313 END

  ViewVC Help
Powered by ViewVC 1.1.26