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

Annotation of /territories/Source/Source

Parent Directory Parent Directory | Revision Log Revision Log


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

1 james 19 ; > 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