1;===========================================================================
2; Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.
3;
4; See the accompanying file LICENSE, version 2000-Apr-09 or later
5; (the contents of which are also included in unzip.h) for terms of use.
6; If, for some reason, all these files are missing, the Info-ZIP license
7; also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
8;===========================================================================
9; SWI veneers used by Zip/Unzip
10;
11
12r0		RN	0
13r1		RN	1
14r2		RN	2
15r3		RN	3
16r4		RN	4
17r5		RN	5
18r6		RN	6
19r7		RN	7
20r8		RN	8
21r9		RN	9
22r10		RN	10
23r11		RN	11
24r12		RN	12
25sp		RN	13
26lr		RN	14
27pc		RN	15
28
29sl		RN	10
30fp		RN	11
31ip		RN	12
32
33
34XOS_Bit				EQU &020000
35
36OS_GBPB				EQU &00000C
37OS_File				EQU &000008
38OS_FSControl			EQU &000029
39OS_CLI				EQU &000005
40OS_ReadC			EQU &000004
41OS_ReadVarVal			EQU &000023
42DDEUtils_Prefix			EQU &042580
43Territory_ReadCurrentTimeZone	EQU &043048
44MimeMap_Translate		EQU &050B00
45
46	MACRO
47	STARTCODE $name
48	EXPORT $name
49$name
50	MEND
51
52
53		AREA	|C$$code|, CODE, READONLY
54
55; os_error *SWI_OS_FSControl_26(char *source, char *dest, int actionmask);
56
57	STARTCODE SWI_OS_FSControl_26
58
59	MOV	ip, lr
60
61	MOV	r3, r2
62	MOV	r2, r1
63	MOV	r1, r0
64	MOV	r0, #26
65
66	SWI	OS_FSControl + XOS_Bit
67
68	MOVVC	r0, #0
69
70	MOVS	pc, ip
71
72
73; os_error *SWI_OS_FSControl_27(char *filename, int actionmask);
74
75	STARTCODE SWI_OS_FSControl_27
76
77	MOV	ip, lr
78
79	MOV	r3, r1
80	MOV	r1, r0
81	MOV	r0, #27
82
83	SWI	OS_FSControl + XOS_Bit
84
85	MOVVC	r0, #0
86
87	MOVS	pc, ip
88
89
90; os_error *SWI_OS_GBPB_9(char *dirname, void *buf, int *number,
91;			  int *offset, int size, char *match);
92
93	STARTCODE SWI_OS_GBPB_9
94
95	MOV	ip, sp
96	STMFD	sp!, {r2-r6,lr}
97	LDMIA	ip, {r5,r6}
98	LDR	r4, [r3]
99	LDR	r3, [r2]
100	MOV	r2, r1
101	MOV	r1, r0
102	MOV	r0, #9
103	SWI	OS_GBPB + XOS_Bit
104	LDMVSFD sp!, {r2-r6,pc}^
105	MOV	r0, #0
106	LDMFD	sp, {r5,r6}
107	STR	r3, [r5]
108	STR	r4, [r6]
109	LDMFD	sp!, {r2-r6,pc}^
110
111
112; os_error *SWI_OS_File_1(char *filename, int loadaddr, int execaddr, int attrib);
113
114	STARTCODE SWI_OS_File_1
115
116	STMFD	sp!, {r5,lr}
117	MOV	r5, r3
118	MOV	r3, r2
119	MOV	r2, r1
120	MOV	r1, r0
121	MOV	r0, #1
122	SWI	OS_File + XOS_Bit
123	MOVVC	r0, #0
124	LDMFD	sp!, {r5,pc}^
125
126
127
128; os_error *SWI_OS_File_5(char *filename, int *objtype, int *loadaddr,
129;			  int *execaddr, int *length, int *attrib);
130
131	STARTCODE SWI_OS_File_5
132
133	STMFD	sp!, {r1-r5,lr}
134	MOV	r1, r0
135	MOV	r0, #5
136	SWI	OS_File + XOS_Bit
137	LDMVSFD sp!, {r1-r5,pc}^
138	LDR	lr, [sp]
139	TEQ	lr, #0
140	STRNE	r0, [lr]
141	LDR	lr, [sp, #4]
142	TEQ	lr ,#0
143	STRNE	r2, [lr]
144	LDR	lr, [sp, #8]
145	TEQ	lr, #0
146	STRNE	r3, [lr]
147	LDR	lr, [sp ,#24]
148	TEQ	lr, #0
149	STRNE	r4, [lr]
150	LDR	lr, [sp ,#28]
151	TEQ	lr, #0
152	STRNE	r5, [lr]
153	MOV	r0, #0
154	LDMFD	sp!, {r1-r5,pc}^
155
156
157; os_error *SWI_OS_File_6(char *filename);
158
159	STARTCODE SWI_OS_File_6
160
161	STMFD	sp!, {r4-r5,lr}
162	MOV	r1, r0
163	MOV	r0, #6
164	SWI	OS_File + XOS_Bit
165	MOVVC	r0, #0
166	LDMFD	sp!, {r4-r5,pc}^
167
168
169; os_error *SWI_OS_File_7(char *filename, int loadaddr, int execaddr, int size);
170
171	STARTCODE SWI_OS_File_7
172
173	STMFD	sp!, {r4-r5,lr}
174	MOV	r5, r3
175	MOV	r4, #0
176	MOV	r3, r2
177	MOV	r2, r1
178	MOV	r1, r0
179	MOV	r0, #7
180	SWI	OS_File + XOS_Bit
181	MOVVC	r0, #0
182	LDMFD	sp!, {r4-r5,pc}^
183
184
185; os_error *SWI_OS_File_8(char *dirname);
186
187	STARTCODE SWI_OS_File_8
188
189	STMFD	sp!, {r4,lr}
190	MOV	r1, r0
191	MOV	r4, #0
192	MOV	r0, #8
193	SWI	OS_File + XOS_Bit
194	MOVVC	r0, #0
195	LDMFD	sp!, {r4,pc}^
196
197
198; os_error *SWI_OS_File_18(char *filename, int filetype);
199
200	STARTCODE SWI_OS_File_18
201
202	STMFD	sp!, {r4-r5,lr}
203	MOV	r2, r1
204	MOV	r1, r0
205	MOV	r0, #18
206	SWI	OS_File + XOS_Bit
207	MOVVC	r0, #0
208	LDMFD	sp!, {r4-r5,pc}^
209
210
211; os_error *SWI_OS_CLI(char *cmd);
212
213	STARTCODE SWI_OS_CLI
214
215	MOV	ip, lr
216	SWI	OS_CLI + XOS_Bit
217	MOVVC	r0, #0
218	MOVS	pc, ip
219
220
221; int SWI_OS_ReadC(void);
222
223	STARTCODE SWI_OS_ReadC
224
225	MOV	ip, lr
226	SWI	OS_ReadC + XOS_Bit
227	MOVS	pc, ip
228
229
230; os_error *SWI_OS_ReadVarVal(char *var, char *buf, int len, int *bytesused);
231
232	STARTCODE SWI_OS_ReadVarVal
233
234	STMFD	sp!, {r4,lr}
235	MOV	ip, r3
236	MOV	r3, #0
237	MOV	r4, #0
238	SWI	OS_ReadVarVal + XOS_Bit
239	LDMVSFD	sp!, {r4,pc}^
240	TEQ	ip, #0
241	STRNE	r2, [ip]
242	MOV	r0, #0
243	LDMFD	sp!, {r4,pc}^
244
245
246; os_error *SWI_OS_FSControl_54(char *buffer, int dir, char *fsname, int *size);
247
248	STARTCODE SWI_OS_FSControl_54
249
250	STMFD	sp!, {r3-r6,lr}
251	LDR	r5, [r3]
252	MOV	r3, r2
253	MOV	r2, r1
254	MOV	r1, r0
255	MOV	r0, #54
256	SWI	OS_FSControl + XOS_Bit
257	LDMVSFD sp!, {r3-r6,pc}^
258	MOV	r0, #0
259	LDMFD	sp!, {r3}
260	STR	r5, [r3]
261	LDMFD	sp!, {r4-r6,pc}^
262
263
264; os_error *SWI_OS_FSControl_37(char *pathname, char *buffer, int *size);
265
266	STARTCODE SWI_OS_FSControl_37
267
268	STMFD	sp!, {r2,r3-r5,lr}
269	LDR	r5, [r2]
270	MOV	r3, #0
271	MOV	r4, #0
272	MOV	r2, r1
273	MOV	r1, r0
274	MOV	r0, #37
275	SWI	OS_FSControl + XOS_Bit
276	LDMVSFD sp!, {r2,r3-r5,pc}^
277	MOV	r0, #0
278	LDMFD	sp!, {r2}
279	STR	r5, [r2]
280	LDMFD	sp!, {r3-r5,pc}^
281
282
283; os_error *SWI_DDEUtils_Prefix(char *dir);
284
285	STARTCODE SWI_DDEUtils_Prefix
286
287	MOV	ip, lr
288	SWI	DDEUtils_Prefix + XOS_Bit
289	MOVVC	r0, #0
290	MOVS	pc, ip
291
292; int SWI_Read_Timezone(void);
293
294	STARTCODE SWI_Read_Timezone
295
296	MOV	ip, lr
297	SWI	Territory_ReadCurrentTimeZone + XOS_Bit
298	MOVVC	r0, r1
299	MOVVS	r0, #0
300	MOVS	pc, ip
301
302
303; int SWI_MimeMap_Translate(char *ext);
304
305	STARTCODE SWI_MimeMap_Translate
306	MOV	ip,lr
307	MOV	r1, r0
308	MOV	r0, #3
309	MOV	r2, #0
310	SWI	MimeMap_Translate + XOS_Bit
311	MOVVC	r0, r3
312	MVNVS	r0, #0 ; return -1 on error
313	MOVS	pc, ip
314
315
316	END
317