home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / a / addtopath / AddPathSrc (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1996-11-17  |  3KB  |  100 lines

  1.  > AddPathSrc
  2. fnm$="AddToPath"
  3. ;bl$=
  4. 0:cr$=
  5. 13:lfcr$=
  6. 10+cr$:tab$=
  7. 9:esc$=
  8. 27:hspc$=
  9. 1codesize=&1000:
  10.  org codesize:L%=org+codesize
  11.  A%=%1100 
  12.  %1110 
  13.  %0010
  14. ?P%=0:O%=org : 
  15.  So that addresses are offsets within module
  16. [OPT A%
  17. J; /E R0->command, R1->command tail, R12->1024 bytes workspace, R13 SP,
  18. ;    R14 link, 
  19.  mode
  20. O            MOV     R11,#0               ; Load a handy zero into spare reg
  21.             MOV     R7,R1
  22.             MOV     R5,R1
  23. #.findarg2lp LDRB    R9,[r5,#1]!
  24.             CMP     R9,#32
  25. "            BGT     findarg2lp
  26.              STREQB  R11,[r5]
  27. .findarg2lp2
  28. #            LDREQB  R9,[r5,#1]!
  29.             CMPEQ   R9,#32
  30. #            BEQ     findarg2lp2
  31. (            ADRLT   R0,versionstring
  32. $            SWILT   "XOS_Write0"
  33. =            MOVLT   PC,R14               ; No second arg!
  34. G            MOV     R4,#0                ; Don't expand into string
  35. D.itsanumber MOV     R0,R7                ; Start of command line
  36.             MOV     R1,R12
  37.              MOV     R2,#1024
  38.             MOV     R3,#0
  39. !(            SWI     "XOS_ReadVarVal"
  40. "$            BVS     needtocreate
  41. #N            TEQ     R4,#1                ; If some hacker has set xxx$Path
  42. $L            
  43. Q   R4,#3                ; to a number, convert to a string
  44. %"            BEQ     itsanumber
  45. &?            STRB    R11,[R1,R2]          ; Terminate string
  46. '/            ; R1->xxx$path, R5->path to add
  47.             MOV     R3,R5
  48.             MOV     R5,R1
  49. .complp     MOV     R0,R5
  50. +".despacelp  LDRB    R2,[R1],#1
  51. ,;            TEQ     R2,#32               ; Strip spaces
  52. -"            STRNEB  R2,[R5],#1
  53.             TEQ     R2,#0
  54. /             TEQNE   R2,#
  55. 0!            BNE     despacelp
  56. 1$            STRB    R11,[R5,#-1]
  57.             MOV     R4,R3
  58. 3@.strcmplp   LDRB    R9,[R4],#1           ; Compare r0 and r4
  59. 4"            LDRB    R6,[R0],#1
  60. 5             
  61. RS    R10,R6,R9
  62. 6N            
  63. Q   PC,R14               ; Component already in path variable
  64.             TEQ     R6,R9
  65. 8             BEQ     strcmplp
  66. 9L            
  67. S    R9,R2,#
  68. ","        ; Neat tweak to save an instruction
  69. :E            STREQB  R2,[R5,#-1]          ; EQ <=> r9=0 <=> r2=','
  70. ;<            BEQ     complp               ; NE <=> r9=','
  71. <B            STRB    R9,[R5,#-1]          ; Need to add to path
  72. =".copylp     LDRB    R9,[R3],#1
  73.             CMP     R9,#32
  74. ?"            STRGTB  R9,[R5],#1
  75.             BGT     copylp
  76.             MOV     R1,R12
  77. B .create     STRB    R11,[R5]
  78.             MOV     R0,R7
  79. D             SUB     R2,R5,R1
  80.             MOV     R3,#0
  81. F4            MOV     R4,#2                ; Macro
  82. G'            SWI     "XOS_SetVarVal"
  83.             MOV     PC,R14
  84. .needtocreate
  85. K9            MOV     R1,R5                ; Skip past 
  86. L#.countlp    LDRB    R9,[R5,#1]!
  87.             CMP     R9,#32
  88.             BGT     countlp
  89.             B       create
  90. .versionstring
  91. R&            EQUS "v1.00"+lfcr$+bl$
  92. S    ALIGN
  93. "Size = ";P%" bytes"
  94.  "OS_File",&0A,fnm$,&FFC,,org,O%
  95. align
  96.  next line allows shuffling of strings to reduce wastage
  97. 2)=0 
  98. 3" byte(s) wasted by FNalign"
  99. 3:[OPTA%:EQUB0:]:
  100.