home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / utilities / utilsm / makealf / Source / s / finfo next >
Text File  |  1994-05-01  |  1KB  |  68 lines

  1. ; s.finfo
  2. ; routine to grab file information using OS_GBPB 11
  3. ; OS_File 23 would be better, but isn't RO2-friendly
  4. ; also included is a routine to split filename into directory & objname
  5. ; (non-destructively)
  6. ;
  7. ; int finfo(char *name, char *dirname, fileinfo *fblock);
  8. ; void fnsplit(const char *name, char *dbuf, char *nbuf);
  9.  
  10.         GET h.asmregs
  11.  
  12.         GET h.asmSWIs
  13.  
  14.         AREA |A$$code|, CODE, READONLY
  15.  
  16.         EXPORT finfo
  17.         EXPORT fnsplit
  18.  
  19. finfo   MOV ip,sp
  20.         STMFD sp!,{r4-r6,lr}
  21.         MOV r6,r0
  22.         MOV r0,#11
  23.         MOV r4,#0
  24.         MOV r5,#256
  25. floop   MOV r3,#1
  26.         SWI SWI_OS_GBPB + XOS_Bit
  27.         BVS problem
  28.         BCS ok
  29.         CMN r4,#1
  30.         BNE floop
  31. problem MOV r0,#1
  32.         LDMFD sp!,{r4-r6,pc}^
  33. ok      MOV r0,#0
  34.         LDMFD sp!,{r4-r6,pc}^
  35.  
  36. fnsplit STMFD sp!,{r4,r5,lr}
  37.         MOV r4,#0
  38.         STRB r4,[r1]
  39. fnloop1 LDRB r3,[r0,r4]
  40.         CMP r3,#0
  41.         ADDNE r4,r4,#1
  42.         BNE fnloop1
  43. fnloop2 SUBS r4,r4,#1
  44.         BLT nodot
  45.         LDRB r3,[r0,r4]
  46.         CMP r3,#'.'
  47.         BEQ dot
  48.         CMP r3,#':'
  49.         BNE fnloop2
  50.         ADD r5,r4,#1
  51.         MOV r3,#0
  52.         STRB r3,[r1,r5]
  53.         B fnloop3
  54. dot     MOV r5,r4
  55.         MOV r3,#0
  56.         STRB r3,[r1,r5]
  57. fnloop3 SUBS r5,r5,#1
  58.         BLT nodot
  59.         LDRB r3,[r0,r5]
  60.         STRB r3,[r1,r5]
  61.         B fnloop3
  62. nodot   ADD r4,r4,#1
  63.         LDRB r3,[r0,r4]
  64.         STRB r3,[r2],#1
  65.         CMP r3,#0
  66.         BNE nodot
  67.         LDMFD sp!,{r4,r5,pc}^
  68.