home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / desktop / finallook_1 / !FinalLook / PatchAll (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1991-05-10  |  17KB  |  578 lines

  1.  >PatchAll
  2. $;" at line ";
  3.  "OS_Module",18,"WindowManager" 
  4.  ,,,WimpMod
  5.  "OS_Module",18,"Filer" 
  6.  ,,,FilerMod
  7.  code% &4000
  8.  pass%=4 
  9. O%=code%
  10. [OPT pass%
  11. EQUD    0
  12. EQUD    init
  13. EQUD    final
  14. EQUD    0
  15. EQUD    title
  16. EQUD    help
  17. EQUD    0
  18. EQUD    0
  19. EQUD    0
  20. EQUD    0
  21. EQUD    0
  22. .title
  23. EQUS    "PatchAll"
  24. EQUB    0
  25.     .help
  26. AEQUS    "PatchAll"+
  27. 9+"1.41 (10 May 1995) by Matthew Godbolt"
  28. EQUB    0
  29.     ALIGN
  30. .Monga
  31. JEQUS "This module is by Matthew Godbolt (M.R.Godbolt@exeter.ac.uk).  "
  32.  KEQUS "It is FREEWARE and should have come with a !Help file describing"
  33. !-EQUS " what this means. :-)":EQUB 0:ALIGN
  34. "    .init
  35. STMFD   R13!,{R0,R1,R14}
  36. BL DoOptions
  37. ADR R1,FontName
  38. LDR R2,FontXSize
  39. LDR R3,FontYSize
  40. MOV     R4,#0
  41. MOV     R5,#0
  42. SWI     "XFont_FindFont"
  43. +)ADDVS R13,R13,#4:LDMVSFD R13!,{R1,PC}
  44. STR     R0,myfonthandle
  45. SWI "OS_IntOff"
  46. MOV     R1,#8
  47. LDR     R0,[R1]
  48. STR     R0,oldbranch
  49. ADR     R1,myjump-8
  50. BIC R0,R0,#&FF000000
  51. SUB     R0,R0,R1,ASR #2
  52. BIC R0,R0,#&FF000000
  53. R R0,R0,#&EA000000
  54. STR     R0,myjump
  55. ADR     R0,myswihand-&10
  56. MOV     R0,R0,LSR #2
  57. R     R0,R0,#&EA000000
  58. MOV     R1,#8
  59. ;!STR     R0,[R1]:STR R0,mycopy
  60. SWI "OS_IntOn"
  61. LDMFD   R13!,{R0,R1,PC}
  62. .myfonthandle   EQUD0
  63. .myjump       B &1F033C0
  64. .mycopy EQUD 0
  65. AH.FontName EQUS "Trinity.Corpus.Bogus.Font.Italic.I.Dunno.!"+
  66. 0:ALIGN
  67. .FontXSize EQUD 0
  68. .FontYSize EQUD 0
  69. .final
  70. STMFD   R13!,{R0,R1,R14}
  71. LDR R0,oldbranch
  72. MOV R1,#8
  73. H0LDR R2,mycopy:LDR R3,[R1]:CMP R3,R2:BNE Cant
  74. STR R0,[R1]
  75. LDR R0,myfonthandle
  76. SWI "XFont_LoseFont"
  77. L;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
  78. LDMFD   R13!,{R0,R1,PC}^
  79. N".oldbranch      EQUD &EA6051CD
  80. O@.Cant LDMFD R13!,{R0,R1,R14}:ADR R0,errswi:
  81. RS PC,R14,#1<<28
  82. P8.errswi EQUS "!@#$Can't detach SWI handler"+
  83. 0:ALIGN
  84. .myswihand
  85. STMFD   R13!,{R10,R14}
  86. BIC     R14,R14,#&FC000003
  87.  R10,R14,#&03800000:CMP R10,#&03800000:LDMNEFD R13!,{R10,R14}:BNE myjump
  88. LDR     R14,[R14,#-4]
  89. BIC     R14,R14,#&FF000000
  90. BIC     R14,R14,#&20000
  91. CMP R14,#0:BEQ WriteC
  92. Z&LDR R10,ospl:CMP R14,R10:BEQ Write
  93. [1LDR R10,openwindow:CMP R14,R10:BEQ RedrawRoot
  94. \/LDR R10,deletewindow:CMP R14,R10:BEQ Delwin
  95. ])LDR R10,ploticon:CMP R14,R10:BEQ Plot
  96. ^)LDR R10,ClrBack:CMP R14,R10:BEQ Clear
  97. _!LDMFD R13!,{R10,R14}:B myjump
  98. .openwindow EQUD &400C5
  99. .deletewindow EQUD &400C3
  100. .ploticon EQUD &400E2
  101. .ClrBack EQUD 256+16
  102. .ospl EQUD &45
  103. .Word EQUD &E59AE05C
  104. .Wind EQUS "Wind"
  105. j&.Bongo2 SWI "XWimp_GetPointerInfo"
  106. .Delwin
  107. LDMFD R13!,{R10,R14}
  108. STMFD R13!,{R0-R12,R14}
  109. nKBIC R14,R14,#&FC000003:LDR R14,[R14,#16]:LDR R11,BilgePump2:CMP R14,R11
  110. BNE Normal
  111. B BonjourMeLad
  112. .RedrawRoot
  113. LDMFD R13!,{R10,R14}
  114. STMFD R13!,{R0-R12,R14}
  115. CMP R10,#&40000:BGT Normal
  116. uGBIC R14,R14,#&FC000003:LDR R10,[R14,#12]:LDR R11,Bongo2:CMP R11,R10
  117. BNE Normal
  118. .BonjourMeLad
  119. xDLDR R0,[R1]:BIC R0,R0,#3:ADD R0,R0,#&90:LDR R0,[R0]:ADD R0,R0,#4
  120. adr(7,Moglin):MOV R8,R7
  121. .PleiLoop
  122. {DLDRB R1,[R0],#1:CMP R1,#
  123. Q R8,R7:STRB R1,[R7],#1:CMP R1,#32
  124. BGE PleiLoop
  125. MOV R1,#0:STRB R1,[R8],#1
  126. LDR R0,[R12,#8]
  127. .SearchLoop
  128. <TEQ R0,#&40000001:BEQ Normal:LDR R2,[R0,#4]:ADD R2,R2,#4
  129. adr(7,Moglin)
  130. .CheckLp
  131. CLDRB R3,[R7],#1:LDRB R4,[R2],#1:CMP R3,#0:CMPEQ R4,#0:BEQ Match
  132. CMP R3,R4:BEQ CheckLp
  133. LDR R0,[R0]:B SearchLoop
  134. .Match
  135. MOV R4,R0:LDR R3,[R4,#32]
  136. LDR R2,[R4,#&18]
  137. .FudgeLoop
  138. MOV R9,R8
  139. ..Lop LDRB R10,[R2],#1:MOVS R10,R10:BNE Lop
  140. .Speedleloop
  141. HLDRB R10,[R2],#1:LDRB R11,[R9],#1:CMP R10,#0:CMPEQ R11,#0:BEQ Match2
  142. CMP R10,R11:BEQ Speedleloop
  143. CMP R10,#0:SUBEQ R2,R2,#1
  144. 2SUBS R3,R3,#1:BNE FudgeLoop:SWI 256+7:B Normal
  145. .Match2
  146. !ADD R5,R0,#&2C:LDR R0,[R0,#8]
  147. Filer_bl(&1EB8)
  148. $ADD R1,R12,#&44:LDMIA R1,{R1-R4}
  149. SWI "XWimp_ForceRedraw"
  150. LDMFD R13!,{R0-R12,R14}
  151. B myjump
  152. .BilgePump2 EQUD &E92D40BE
  153. .TexOnFlag EQUD 0
  154. .FontOnFlag EQUD 0
  155. .DirOnFlag EQUD 0
  156. .Clear
  157. LDMFD R13!,{R10,R14}
  158. STMFD R13!,{R0-R12,R14}
  159. CMP R0,#1:BNE Normal
  160. *LDR R0,TexOnFlag:MOVS R0,R0:BEQ Normal
  161. 1LDR R0,[R10]:LDR R1,Wind:CMP R0,R1:BNE Normal
  162. (LDR R0,[R10,#4]:CMN R0,#1:BEQ Normal
  163. (BIC R14,R14,#&FC000003:LDR R14,[R14]
  164. %LDR R0,Word:CMP R0,R14:BNE Normal
  165. :MOV R0,#&87:SWI "XOS_Byte":BVS Normal:LDRB R0,ModeLast
  166. CMP R0,R2:BLNE CalcSize
  167. =MVN R0,#0:MOV R1,#9:SWI "XOS_ReadModeVariable":BVS Normal
  168. MVN R1,#0
  169. CMP R2,#0:ADREQ R1,Mode0
  170. CMP R2,#2:ADREQ R1,Mode12
  171. CMP R2,#3:ADREQ R1,Mode15
  172. CMN R1,#1:BEQ Normal
  173. LDR R14,ModeLoad
  174. CMP R14,R2:BEQ DontLoad
  175. &STR R2,ModeLoad:STMFD R13!,{R0-R7}
  176. ;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
  177. MOV R2,#0:STR R2,SpriteAt
  178. MOV R0,#5:LDR R1,[R13,#4]
  179. CMOV R2,#0:MOV R3,#0:SWI "XOS_File":ADDVS R13,R13,#32:BVS Normal
  180. HADD R3,R4,#4:MOV R0,#6:SWI "XOS_Module":ADDVS R13,R13,#32:BVS Normal
  181. "STR R2,SpriteAt:STR R4,[R2],#4
  182. =LDR R1,[R13,#4]:MOV R0,#&FF:MOV R3,#0:MOV R4,#0:MOV R5,#0
  183. %SWI "XOS_File":LDMFD R13!,{R0-R7}
  184. BLVC CalcSize:BVC DontLoad
  185. .MOV R0,#7:LDR R2,SpriteAt:SWI "XOS_Module"
  186. MOV R2,#0:STR R2,SpriteAt
  187. B Normal
  188. .DontLoad
  189. )LDR R2,SpriteAt:MOVS R2,R2:BEQ Normal
  190. LDR R2,[R13,#8]
  191. ?ADD R10,R10,#&48 ; should now point to WindowInfo Block ...
  192. 1LDR R0,[R10,#0]:LDR R6,[R10,#16]:SUB R6,R0,R6
  193. 2LDR R0,[R10,#12]:LDR R7,[R10,#20]:SUB R7,R0,R7
  194. %LDR R10,XSprSize:LDR R11,YSprSize
  195. 2.shpondle SUB R6,R6,R10:CMP R6,R2:BGE shpondle
  196. 2.shpondle ADD R7,R7,R11:CMP R7,R5:BLT shpondle
  197. SUB R7,R7,R11
  198. MOV R8,R4:SUB R9,R3,R11
  199. LDR R1,SpriteAt
  200. ADD R2,R1,#16
  201. MOV R0,#&22:
  202. R R0,R0,#&200
  203. !MOV R3,R6:MOV R4,R7:MOV R5,#0
  204.     .Loop
  205. STMFD R13!,{R0-R5}
  206. SWI "XOS_SpriteOp"
  207. LDMFD R13!,{R0-R5}
  208. BVS Normal
  209. $ADD R3,R3,R10:CMP R3,R8:BLT Loop
  210. .MOV R3,R6:SUB R4,R4,R11:CMP R4,R9:BGE Loop
  211. LDMFD R13!,{R0-R12,R14}
  212. MOVS PC,R14
  213. .Normal
  214. LDMFD R13!,{R0-R12,R14}
  215. MOV R0,R0
  216. B myjump
  217. %.Backg EQUS "background"+
  218. 0:ALIGN
  219. .ModeLoad EQUD -1
  220. .SpriteAt EQUD 0
  221. .ModeLast EQUD 
  222. ..Mode0 EQUS "WindowDrop:Sprites0"+
  223. 0:ALIGN
  224. 0.Mode12 EQUS "WindowDrop:Sprites12"+
  225. 0:ALIGN
  226. 0.Mode15 EQUS "WindowDrop:Sprites15"+
  227. 0:ALIGN
  228. .XSprSize EQUD 0
  229. .YSprSize EQUD 0
  230. .CalcSize
  231. "STMFD R13!,{R0-R7,R10,R11,R14}
  232. *LDR R1,SpriteAt:MOVS R1,R1:BEQ Flimsey
  233. ADD R2,R1,#16
  234. 0MOV R0,#40:
  235. R R0,R0,#&200:SWI "XOS_SpriteOp"
  236. DMVN R0,#0:MOV R1,#4:SWI "XOS_ReadModeVariable":MOV R10,R3,LSL R2
  237. DMVN R0,#0:MOV R1,#5:SWI "XOS_ReadModeVariable":MOV R11,R4,LSL R2
  238. %STR R10,XSprSize:STR R11,YSprSize
  239. .Flimsey
  240. "LDMFD R13!,{R0-R7,R10,R11,PC}^
  241. .GreyFlag EQUD 0
  242. .MaybeClear
  243. )LDR R1,GreyFlag:MOVS R1,R1:BEQ Normal
  244. 'LDR R1,[R13,#56] ; r1 from previous
  245.  R2,R1,#3:CMP R2,#3:BNE Normal
  246. TST R1,#256:BEQ Normal
  247. LDMFD R13!,{R0-R12,R14}
  248. MOVS PC,R14
  249. .Word2 LDR R14,[R12,#84]
  250. .Word3 EQUD &0A00000C
  251. .Counter EQUD 0
  252. .WriteMen EQUD &70D0121
  253. 7; hacks at WindowManager+&76E0 called from WM+&7568
  254. .Write
  255. LDMFD R13!,{R10,R14}
  256. STMFD R13!,{R0-R12,R14}
  257. +LDR R4,FontOnFlag:MOVS R4,R4:BEQ Normal
  258. ,BIC R14,R14,#&FC000003:LDR R11,[R14,#16]
  259. &LDR R4,Word2:CMP R4,R11:BNE Normal
  260. CMP R0,#103:BEQ MaybeClear
  261. LDR R14,[R13,#64]
  262. ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
  263. &LDR R4,Word3:CMP R4,R14:BNE Normal
  264. CMP R0,#4:BNE Normal
  265. 7LDR R2,[R13,#60]:LDR R14,[R13,#56]:
  266.  R9,R14,#&F<<12
  267. CMP R9,#12<<12:BGE Normal
  268. HLDR R9,WriteMen:CMP R14,R9:
  269. RNE R9,R9,#1<<21:CMPNE R14,R9:BEQ Normal
  270. STMFD R13!,{R0-R2,R14}
  271. ILDR R0,[R12,#128]:BIC R0,R0,#3:ADD R1,R0,#64:SWI "OS_ValidateAddress"
  272. BCS Bob
  273. -LDR R2,[R0]:LDR R1,Wind:CMP R2,R1:BNE Bob
  274. $LDR R2,[R0,#4]:CMN R2,#1:BNE Bob
  275.  ; ok so we have a menu here!
  276. (LDR R14,[R13,#60+24] \ The IconFlags
  277. @TST R14,#&100:
  278. Q R14,#&C:MOVNE R14,#&1000000:STR R14,Counter
  279. BLDR R2,[R13,#16+60] \ Aha! the key, the secret! The icon data!
  280. STMFD R13!,{R0-R1,R3-R9}
  281. +LDR R8,[R0,#(&48+8)]:LDR R9,[R0,#(&48)]
  282. SUB R8,R8,R9:SUB R8,R8,#64
  283. *STMFD R13!,{R1,R2}:MOV R1,R8:MOV R2,#0
  284. SWI "Font_Converttopoints"
  285.  MOV R8,R1:LDMFD R13!,{R1,R2}
  286. +LDR R0,myfonthandle:SWI "XFont_SetFont"
  287. MOV R0,R2:.Fleep
  288. <LDR R14,Counter:SUBS R14,R14,#1:STR R14,Counter:BEQ NoHK
  289. 8LDRB R3,[R0],#1:MOVS R3,R3:CMPNE R3,#13:CMPNE R3,#10
  290. !BEQ NoHK:CMP R3,#32:BNE Fleep
  291. 8LDRB R3,[R0]:CMP R3,#
  292. ":CMPNE R3,#
  293. "^":BEQ FoundHK
  294. CMP R3,#32:BNE NotSpace
  295. !!LDRB R14,[R0,#-1]:CMP R14,#32
  296. "2LDR R14,Counter:ADD R14,R14,#1:STR R14,Counter
  297. BNE NotSpace
  298. .Skandl
  299. LDRB R3,[R0],#1
  300. &<LDR R14,Counter:SUBS R14,R14,#1:STR R14,Counter:BEQ NoHK
  301. '>CMP R3,#32:BEQ Skandl:MOVS R3,R3:CMPNE R3,#13:CMPNE R3,#10
  302. (#BEQ NoHK:SUB R0,R0,#1:B FoundHK
  303. .NotSpace
  304. *ACMP R3,#
  305. "F":BNE Fleep:LDRB R3,[R0,#1]:CMP R3,#
  306. "0":BLT Fleep
  307. CMP R3,#
  308. "9":BGT Fleep
  309. .FoundHK
  310. - LDRB R3,[R0,#-1]!:CMP R3,#32
  311. BEQ FoundHK:ADD R0,R0,#1
  312. /NADR R4,HotKey:.Floopy LDRB R3,[R2],#1:STRB R3,[R4],#1:CMP R2,R0:BLT Floopy
  313. MOV R3,#0:STRB R3,[R4]
  314. 1?STMFD R13!,{R1-R4}:ADR R1,HotKey:MOV R2,#&8000000:MOV R3,R2
  315. 2;MVN R4,#0:MOV R5,#&FF:SWI "XFont_StringWidth":MOV R6,R2
  316. LDMFD R13!,{R1-R4}
  317. .Floopy2 LDRB R3,[R2],#1
  318. CMP R3,#32:BEQ Floopy2
  319. SUB R2,R2,#1
  320. 7DSTMFD R13!,{R1-R4}:MOV R1,R2:MOV R2,#&800000:MOV R3,R2:MVN R4,#0
  321. 8!LDR R5,Counter:LDR R5,Counter
  322. 95SWI "XFont_StringWidth":ADD R6,R6,R2:SUB R8,R8,R6
  323. LDMFD R13!,{R1-R4}
  324. MOV R3,#9:STRB R3,[R4],#1
  325. <$STRB R8,[R4],#1:MOV R8,R8,LSR #8
  326. =4STRB R8,[R4],#1:MOV R8,R8,LSR #8:STRB R8,[R4],#1
  327. LDR R14,Counter
  328. ?8.Floopy3 LDRB R3,[R2],#1:SUBS R14,R14,#1:MOVMI R3,#0
  329. STRB R3,[R4],#1
  330. CMP R3,#&20:BGT Floopy3
  331. B2MOV R3,#0:STRB R3,[R4],#1:ADR R2,HotKey:B NoHK
  332. C(.HotKey ]:P%+=128:O%+=128:[OPT pass%
  333. .WriteC
  334. LDMFD R13!,{R10,R14}
  335. STMFD R13!,{R0,R1,R2,R14}
  336. ADR R1,HotKey:ADD R1,R1,#1
  337. H4CMP R2,R1:LDMNEFD R13!,{R0,R1,R2,R14}:BNE myjump
  338. ADR R1,HotKey:MOV R2,#0
  339. J=.Tlp LDRB R0,[R1],#1:MOVS R0,R0:BEQ ZapY:SWI "XOS_WriteC"
  340. CMP R0,#9:BNE Tlp
  341. L$LDRB R0,[R1],#1:SWI "XOS_WriteC"
  342. M$LDRB R0,[R1],#1:SWI "XOS_WriteC"
  343. N$LDRB R0,[R1],#1:SWI "XOS_WriteC"
  344. B Tlp:.ZapY
  345. PCSTR R0,HotKey:.Womlbe LDMFD R13!,{R0-R2,R14}:MOV R0,#0:B myjump
  346. Q    .NoHK
  347. LDMFD R13!,{R0-R1,R3-R9}
  348. STR R2,[R13,#16+60]
  349. UBMOV R0,#&87:SWI "XOS_Byte":LDMVSFD R13!,{R0-R2,R14}:BVS Normal
  350. V/LDRB R0,ModeLast:CMP R0,R2:STRB R2,ModeLast
  351. BEQ Already
  352. STMFD R13!,{R0-R5}
  353. BL CalcSize
  354. Z-LDRB R0,myfonthandle:SWI "XFont_LoseFont"
  355. adr(1,FontName)
  356. \%LDR R2,FontXSize:LDR R3,FontYSize
  357. MOV     R4,#0
  358. MOV     R5,#0
  359. SWI     "XFont_FindFont"
  360. MVNVS   R0,#0
  361. STR     R0,myfonthandle
  362. LDMFD R13!,{R0-R5}
  363. c'LDMVSFD R13!,{R0-R2,R14}:BVS Normal
  364. .Already
  365. LDMFD R13!,{R0-R2,R14}
  366. f*LDR R0,GreyFlag:MOVS R0,R0:BEQ NotSelI
  367.  R0,R14,#3:CMP R0,#3:BNE NotSelI
  368. h9TST R14,#256:BEQ NotSelI:TST R14,#(1<<21):BEQ NotSelI
  369. i"MOV R1,R14,LSR #24:
  370.  R1,R1,#&F
  371. jFBIC R14,R14,#&FF000000:
  372. R R14,R14,R1,LSL #24:
  373. R R14,R14,R1,LSL #28
  374. STR R14,[R13,#56]
  375. .NotSelI
  376. m*SUB R13,R13,#16:LDMFD R13!,{R0-R2,R14}
  377. .Bonza
  378. o8LDR R0,[R12,#128]:BIC R0,R0,#3: \\\ MAY BE BUGS HERE
  379. p5LDR R2,[R0]:LDR R1,Wind:CMP R2,R1:BNE Icon_Filled
  380. q!TST R14,#&FF000000:BNE NoTBar
  381. ADD R0,R0,#&48+32
  382. s,LDRB R1,[R0]:CMP R1,#&FF:BEQ Icon_Filled
  383. tCLDRB R0,[R0,#1]:
  384. R R0,R1,R0,LSL #4:
  385. R R14,R14,R0,LSL #24:B Smeg
  386. .NoTBar
  387. v!TST R14,#1<<5:BNE Icon_Filled
  388. w=ADD R0,R0,#&48+35:LDRB R0,[R0]:CMP R0,#&F:BGT Icon_Filled
  389. x3BIC R14,R14,#&F<<28:
  390. R R14,R14,R0,LSL #28:.Smeg
  391. STR R14,[R13,#56]
  392. .Icon_Filled
  393. {*SUB R13,R13,#16:LDMFD R13!,{R0-R2,R14}
  394.  R9,R14,#42:CMP R9,#42:BNE Pj:TST R14,#&200:MOV R9,#0:BNE h
  395. ; allow radio and text
  396. *MOV R9,#0:TST R14,#8:MOVNE R9,#8:BNE h
  397. !TST R14,#&200:MOVNE R9,#16:.h
  398. F.loop LDRB R0,[R2],#1:CMP R0,#32:ADDCS R1,R1,R9:BCS loop:STR R1,Bo
  399. OLDR R1,[R13,#56]:LDR R2,[R13,#60]:LDRB R0,myfonthandle:BIC R1,R1,#&FF000000
  400. R R1,R1,R0,LSL #24
  401. R R1,R1,#&40:
  402. bl(&78E8):LDR R1,Bo
  403. #CMP R9,#8:SUBEQ R1,R1,R4,LSR #1
  404. CMP R9,#16:SUBEQ R1,R1,R4
  405. STR R1,Bo
  406. LDR R1,[R13,#56]
  407. (MOV R9,R1,LSR #28:STRB R9,[R12,#124]
  408.  R14,R1,#&F000000
  409. MOVS R14,R14,LSR #24
  410. CMPEQ R9,#0:
  411. Q R14,#7
  412. STRB R14,[R12,#123]
  413. bl(&7348)
  414. BVS Normal
  415. LDMFD R13!,{R0-R12,R14}
  416. 0MOV R0,#&D4:LDR R1,Bo:SUB R2,R2,#22:B myjump
  417. .Bo &0
  418. .Wordx LDRB R14,[R4,#40]
  419.     .Plot
  420. LDMFD R13!,{R10,R14}
  421. STMFD R13!,{R0-R12,R14}
  422. ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
  423. &LDR R7,Wordx:CMP R7,R14:BNE Normal
  424. -LDR R14,DirOnFlag:MOVS R14,R14:BEQ Normal
  425. ADR R11,open_dir
  426. ILDR R14,[R1,#&18]:LDRB R14,[R14,#1]:CMP R14,#
  427. "s":ADREQ R11,sopen_dir
  428. CMPNE R14,#
  429. "d":BNE Normal
  430. .lebon
  431. JLDR R0,[R4,#4]:
  432. adr(7,Moglin):.CopLp LDRB R14,[R0],#1:STRB R14,[R7],#1
  433. 8CMP R14,#0:BNE CopLp:MOV R14,#
  434. ".":STRB R14,[R7,#-1]
  435. FLDR R0,[R1,#&14]:.CopLp LDRB R14,[R0],#1:CMP R14,#0:CMPNE R14,#&0D
  436. Q R14,#0:STRB R14,[R7],#1
  437. BNE CopLp
  438. LDR R0,[R12,#8]
  439. .RepLp
  440. >TEQ R0,#&40000001:BEQ Normal:
  441. adr(7,Moglin):LDR R6,[R0,#4]
  442. /.SeeIfSame LDRB R5,[R7],#1:LDRB R14,[R6],#1
  443. CMP R5,#32:
  444. Q R5,#0
  445. CMP R14,#32:
  446. Q R14,#0
  447. "TEQ R14,#0:TEQEQ R5,#0:BEQ Yes
  448. (CMP R14,R5:BEQ SeeIfSame:BNE NextOne
  449. ?LDMIA R1,{R0-R7}:MOV R6,R11:
  450. adr(14,Brea):STMIA R14,{R0-R7}
  451. LDMFD R13!,{R0-R12,R14}
  452. adr(1,Brea):B myjump
  453.  .NextOne LDR R0,[R0]:B RepLp
  454. ).open_dir EQUS "sdirectoryo"+
  455. 0:ALIGN
  456. *.sopen_dir EQUS "ssmall_diro"+
  457. 0:ALIGN
  458. &.Trans EQUD 0:EQUD 0:EQUD 0:EQUD 0
  459. 5.FnameCHO EQUS "<FinalLook$OptionsFile>"+
  460. 0:ALIGN
  461. &.Gm EQUS "(Opening file)"+
  462. 0:ALIGN
  463. $.Lookup EQUS "(Lookup)"+
  464. 0:ALIGN
  465. .DoOptions
  466. STMFD R13!,{R0-R7,R14}
  467. GADR R0,Trans:ADR R1,FnameCHO:MOV R2,#0:SWI "XMessageTrans_OpenFile"
  468. ADRVS R0,Gm:BVS OptTrouble
  469. !ADR R4,OptList:ADR R8,OptList
  470. .OptLoop
  471. ADR R0,Trans
  472. LDR R1,[R4],#4 ; token
  473. MOVS R1,R1:BMI OptEnd
  474. *ADD R1,R1,R8 ; put to absolute address
  475. ADR R2,Transbuf:MOV R3,#255
  476. >STMFD R13!,{R4-R7}:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
  477. ASWI "XMessageTrans_Lookup":LDMFD R13!,{R4-R7}:ADRVS R0,Lookup
  478. BVS OptTrouble
  479. LDR R1,[R4],#4 ; address
  480. #ADD R1,R1,R8 ; absolute address
  481. LDR R0,[R4],#4 ; type
  482. CMP R0,#0:BNE NotBoolean
  483. 2; A boolean Yes or No ... test by first letter
  484. 4LDRB R2,[R2]:CMP R2,#
  485. "a":BLT LetOk:CMP R2,#
  486. ASUBLE R2,R2,#32:.LetOk CMP R2,#
  487. "Y":MVNEQ R2,#0:STREQ R2,[R1]
  488. ?BEQ OptLoop:CMP R2,#
  489. Q R2,#0:STREQ R2,[R1]:BEQ OptLoop
  490. STRB R2,Err1+4
  491. B UnBool
  492. .NotBoolean
  493. CMP R0,#1:BNE NotNumeric
  494. ; A numeric
  495. 7MOV R7,R1:MOV R1,R2:MOV R0,#0:SWI "OS_ReadUnsigned"
  496. STR R2,[R7]:B OptLoop
  497. .NotNumeric
  498. ; must be text so copy
  499. >.Flobbadob LDRB R0,[R2],#1:CMP R0,#10:CMPNE R0,#0:
  500. Q R0,#0
  501. +STRB R0,[R1],#1:BNE Flobbadob:B OptLoop
  502. .OptEnd
  503. -ADR R0,Trans:SWI "MessageTrans_CloseFile"
  504. ADR R0,Clios:SWI "OS_CLI"
  505. LDMFD R13!,{R0-R7,PC}^
  506. .UnBool
  507. &ADR R0,Err1:SWI "OS_GenerateError"
  508. LDMFD R13!,{R0-R7,PC}^
  509. T.Err1 EQUS "!@#$Expecting 'Yes' or 'No' for an option ... cannot start"+
  510. 0:ALIGN
  511. .OptTrouble
  512. FADR R1,Job:.Lop LDRB R2,[R0],#1:STRB R2,[R1],#1:MOVS R2,R2:BNE Lop
  513. &ADR R0,Err0:SWI "OS_GenerateError"
  514. LDMFD R13!,{R0-R7,PC}^
  515. g.Err0 EQUS "!@#$Cannot start !FinalLook as there has been a problem with the options file. - ":.Job
  516. /;NB a runtime error overwrites from here on
  517.     ALIGN
  518. .Clios
  519. EQUS "Set WindowDrop$Path "
  520. $.TexPathSet EQUS 
  521. 255,"*"):ALIGN
  522. .OptList
  523. :EQUD Ptr_FontName-OptList:EQUD FontName-OptList:EQUD 2
  524. <EQUD Ptr_FontXSize-OptList:EQUD FontXSize-OptList:EQUD 1
  525. <EQUD Ptr_FontYSize-OptList:EQUD FontYSize-OptList:EQUD 1
  526. ;EQUD Ptr_TexPath-OptList:EQUD TexPathSet-OptList:EQUD 2
  527. 8EQUD Ptr_TexOn-OptList:EQUD TexOnFlag-OptList:EQUD 0
  528. :EQUD Ptr_FontOn-OptList:EQUD FontOnFlag-OptList:EQUD 0
  529. :EQUD Ptr_DirOpen-OptList:EQUD DirOnFlag-OptList:EQUD 0
  530. 6EQUD Ptr_Grey-OptList:EQUD GreyFlag-OptList:EQUD 0
  531. EQUD -1
  532. 3.Ptr_FontName  EQUS "FontName:Corpus.Medium"+
  533. *.Ptr_FontXSize EQUS "FontXSize:170"+
  534. *.Ptr_FontYSize EQUS "FontYSize:248"+
  535. J.Ptr_TexPath EQUS "TexturePath:<FinalLook$Dir>.WindowDrop.Default."+
  536. &.Ptr_TexOn EQUS "TexturesOn:No"+
  537. $.Ptr_FontOn EQUS "FontsOn:No"+
  538. +.Ptr_DirOpen EQUS "DirectoryOpen:No"+
  539. *.Ptr_Grey EQUS "RemoveGreyBlobs:No"+
  540.     ALIGN
  541. *.Transbuf ]:P%+=256:O%+=256:[OPT pass%
  542. $.Brea ]:P%+=64:O%+=64:[OPT pass%
  543. .Moglin
  544. ]P%+=1024:O%+=1024
  545.  "OS_File",10,"<FinalLook$Dir>.AllPatch",&FFA,,code%,O%
  546.  pass%=4 
  547. P%=&8000:O%=code%
  548. [OPT pass%
  549. .Alt_Key
  550. STMFD R13!,{R0-R7,R14}
  551. 8MOV R0,#129:MOV R1,#256-3:MOV R2,#255:SWI "XOS_Byte"
  552. BVS End
  553. (CMP R2,#255:ADREQ R0,On:ADRNE R0,Off
  554. SWI "XOS_CLI"
  555. LDMFD R13!,{R0-R7,PC}^
  556. ).On EQUS "Set FinalLook$AltKey On"+
  557. 1.Off EQUS "Set FinalLook$AltKey Off"+
  558. 0:ALIGN
  559.  "OS_File",10,"<FinalLook$Dir>.AltCheck",&FFC,,code%,O%
  560. bl(addr)
  561. [OPT pass%
  562. ADR R14,P%+16
  563. R R14,R14,#3
  564. LDR PC,P%+4
  565. EQUD WimpMod+addr
  566. Filer_bl(addr)
  567. [OPT pass%
  568. ADR R14,P%+16
  569. R R14,R14,#3
  570. LDR PC,P%+4
  571. EQUD FilerMod+addr
  572. adr(reg,addr)
  573. [OPT pass%
  574. LDR     reg,P%+12
  575. ADD     reg,pc,reg
  576. B       P%+8
  577. EQUD    addr-P%
  578.