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