home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilsf / jfshared / Modules / ChangeErr / Source`1,0 < prev   
Encoding:
Text File  |  1995-09-23  |  1.8 KB  |  86 lines

  1. App   ChangeError
  2. In    -
  3. Out   ChangeErr
  4. Type  Module
  5. Ver   1.00g
  6.  
  7. Define Module
  8.  Name    ChangeError
  9.  Author  Justin Fletcher
  10.  Service service
  11.  Commands
  12.   Name   ChangeError
  13.   Help   ...
  14.          The ChangeError module ensures that the "Bad buffer size" error
  15.          as returned by LongFiles is not returned, but instead a
  16.          more descriptive message is given.
  17.  End Commands
  18. End Module
  19.  
  20. #REM OFF
  21. .service
  22.    STMFD   (sp)!,{r1-r5,link}            ; Stack registers
  23.    CMP     r1,#6
  24.    BEQ     svc_error
  25.    SUB     r1,r1,#&40000
  26.    CMP     r1,#&C0
  27.    BEQ     svc_wimperror
  28. .xservice
  29.    LDMFD   (sp)!,{r1-r5,pc}^             ; Return from call with flags
  30.  
  31. .svc_wimperror
  32.    LDMFD   (sp)!,{r1-r2}
  33.    STMFD   (sp)!,{r0-r1}
  34.    MOV     r0,r2
  35.    BL      chk_error
  36.    MOV     r2,r0
  37.    LDMFD   (sp)!,{r0-r1,r3-r5,pc}^
  38.  
  39. .svc_error
  40.    REM     "%c04Svc_error called"
  41.    BL      chk_error
  42.    B       xservice
  43.  
  44. .chk_error
  45.    STMFD   (sp)!,{r1-r5,link}            ; Stack registers
  46.    ADD     r0,r0,#4
  47.    LDR     r1,[r0,#-4]
  48.    SUB     r1,r1,#&12
  49.    CMP     r1,#&400      ; is it &412 ?
  50.    BNE     $exit
  51.    ADR     r1,$`bad_buffer
  52.    BL      cmpstr
  53.    BNE     $exit
  54.    ADREQ   r0,$`new_error+4
  55.    REM     "Found"
  56. $exit
  57.    SUB     r0,r0,#4
  58.    LDMFD   (sp)!,{r1-r5,pc}^             ; Return from call with flags
  59. $`bad_buffer
  60.    EQUZ    "Bad buffer size"
  61. $`new_error
  62.    EQUD    1042
  63.    EQUZA   "File open, or bad buffer size"
  64.  
  65. .cmpstr
  66. ; > r0 = source string
  67. ;   r1 = comparison string
  68. ; < EQ if same, GT if higher, LT if less than
  69.    STMFD   (sp)!,{r0-r3,link}            ; Stack registers
  70. $loop
  71.    LDRB    r2,[r0],#1
  72.    LDRB    r3,[r1],#1
  73.    CMP     r2,#32
  74.    MOVLT   r2,#0
  75.    CMP     r3,#32
  76.    MOVLT   r3,#0
  77.    CMP     r2,r3
  78.    BNE     $exit
  79.    CMP     r2,#0
  80.    BNE     $loop
  81. $exit
  82.    LDMFD   (sp)!,{r0-r3,pc}              ; Return from call
  83.  
  84. #Post
  85. #Run <CODE>
  86.