home *** CD-ROM | disk | FTP | other *** search
- ; trivial SWI veneer for OS_GBPB 9 (read directory entries, names only)
-
- ; int read_entries(const char *dirname, const char *pattern, int *offsetp,
- ; char *buffer, int buffer_size);
- ; returns the number of entries read, or negative if an error occurred
- ; and stores the new offset to use at *offsetp.
-
- GET h.asmregs
- GET h.asmSWIs
-
- AREA |A$$code|, CODE, READONLY
-
- EXPORT read_entries
- read_entries
- STMFD sp!,{r4-r6,lr}
- MOV r6,r1 ; r6 = pattern (0/null for all entries)
- LDR r5,[sp,#16] ; r5 = size of buffer
- MOV ip,r2
- LDR r4,[ip] ; r4 = initial offset
- MOV r2,r3 ; r2 = buffer
- MOV r3,r5 ; r3 = max number of entries to read
- MOV r1,r0 ; r1 = directory name
- MOV r0,#9 ; r0 = code -- 9 (names only)
- SWI XOS_Bit+SWI_OS_GBPB
- STR r4,[ip] ; save new offset
- MVNVS r0,#0 ; return -1 if error
- MOVVC r0,r3 ; else return number of entries read
- LDMFD sp!,{r4-r6,pc}^
-
- END
-