home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / desktop / finallook_1 / !FinalLook / PatchAll2 (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1995-03-31  |  17KB  |  585 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.40 (26 Mar 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. tHMOV R11,#&500:
  116. R R11,R11,#&34:CMP R2,R11:BEQ Normal \ unsatisfactory
  117. u=MOV R11,#&500:
  118. R R11,R11,#&80:CMP R2,R11:BEQ Normal \ and
  119. vAMOV R11,#&400:
  120. R R11,R11,#&78:CMP R2,R11:BEQ Normal \ HIDEOUS
  121. w@MOV R11,#&400:
  122. R R11,R11,#&98:CMP R2,R11:BEQ Normal \ bodges
  123. xAMOV R11,#&300:
  124. R R11,R11,#&E8:CMP R2,R11:BEQ Normal \ ner ner
  125. yGBIC R14,R14,#&FC000003:LDR R10,[R14,#12]:LDR R11,Bongo2:CMP R11,R10
  126. BNE Normal
  127. .BonjourMeLad
  128. |DLDR R0,[R1]:BIC R0,R0,#3:ADD R0,R0,#&90:LDR R0,[R0]:ADD R0,R0,#4
  129. adr(7,Moglin):MOV R8,R7
  130. .PleiLoop
  131. DLDRB R1,[R0],#1:CMP R1,#
  132. Q R8,R7:STRB R1,[R7],#1:CMP R1,#32
  133. BGE PleiLoop
  134. MOV R1,#0:STRB R1,[R8],#1
  135. LDR R0,[R12,#8]
  136. .SearchLoop
  137. <TEQ R0,#&40000001:BEQ Normal:LDR R2,[R0,#4]:ADD R2,R2,#4
  138. adr(7,Moglin)
  139. .CheckLp
  140. CLDRB R3,[R7],#1:LDRB R4,[R2],#1:CMP R3,#0:CMPEQ R4,#0:BEQ Match
  141. CMP R3,R4:BEQ CheckLp
  142. LDR R0,[R0]:B SearchLoop
  143. .Match
  144. MOV R4,R0:LDR R3,[R4,#32]
  145. LDR R2,[R4,#&18]
  146. .FudgeLoop
  147. MOV R9,R8
  148. ..Lop LDRB R10,[R2],#1:MOVS R10,R10:BNE Lop
  149. .Speedleloop
  150. HLDRB R10,[R2],#1:LDRB R11,[R9],#1:CMP R10,#0:CMPEQ R11,#0:BEQ Match2
  151. CMP R10,R11:BEQ Speedleloop
  152. CMP R10,#0:SUBEQ R2,R2,#1
  153. 2SUBS R3,R3,#1:BNE FudgeLoop:SWI 256+7:B Normal
  154. .Match2
  155. !ADD R5,R0,#&2C:LDR R0,[R0,#8]
  156. Filer_bl(&1EB8)
  157. $ADD R1,R12,#&44:LDMIA R1,{R1-R4}
  158. SWI "XWimp_ForceRedraw"
  159. LDMFD R13!,{R0-R12,R14}
  160. B myjump
  161. .BilgePump2 EQUD &E92D40BE
  162. .TexOnFlag EQUD 0
  163. .FontOnFlag EQUD 0
  164. .DirOnFlag EQUD 0
  165. .Clear
  166. LDMFD R13!,{R10,R14}
  167. STMFD R13!,{R0-R12,R14}
  168. CMP R0,#1:BNE Normal
  169. *LDR R0,TexOnFlag:MOVS R0,R0:BEQ Normal
  170. 1LDR R0,[R10]:LDR R1,Wind:CMP R0,R1:BNE Normal
  171. (LDR R0,[R10,#4]:CMN R0,#1:BEQ Normal
  172. (BIC R14,R14,#&FC000003:LDR R14,[R14]
  173. %LDR R0,Word:CMP R0,R14:BNE Normal
  174. :MOV R0,#&87:SWI "XOS_Byte":BVS Normal:LDRB R0,ModeLast
  175. CMP R0,R2:BLNE CalcSize
  176. =MVN R0,#0:MOV R1,#9:SWI "XOS_ReadModeVariable":BVS Normal
  177. MVN R1,#0
  178. CMP R2,#0:ADREQ R1,Mode0
  179. CMP R2,#2:ADREQ R1,Mode12
  180. CMP R2,#3:ADREQ R1,Mode15
  181. CMN R1,#1:BEQ Normal
  182. LDR R14,ModeLoad
  183. CMP R14,R2:BEQ DontLoad
  184. &STR R2,ModeLoad:STMFD R13!,{R0-R7}
  185. ;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
  186. MOV R2,#0:STR R2,SpriteAt
  187. MOV R0,#5:LDR R1,[R13,#4]
  188. CMOV R2,#0:MOV R3,#0:SWI "XOS_File":ADDVS R13,R13,#32:BVS Normal
  189. HADD R3,R4,#4:MOV R0,#6:SWI "XOS_Module":ADDVS R13,R13,#32:BVS Normal
  190. "STR R2,SpriteAt:STR R4,[R2],#4
  191. =LDR R1,[R13,#4]:MOV R0,#&FF:MOV R3,#0:MOV R4,#0:MOV R5,#0
  192. %SWI "XOS_File":LDMFD R13!,{R0-R7}
  193. BLVC CalcSize:BVC DontLoad
  194. .MOV R0,#7:LDR R2,SpriteAt:SWI "XOS_Module"
  195. MOV R2,#0:STR R2,SpriteAt
  196. B Normal
  197. .DontLoad
  198. )LDR R2,SpriteAt:MOVS R2,R2:BEQ Normal
  199. ?ADD R10,R10,#&48 ; should now point to WindowInfo Block ...
  200. 1LDR R0,[R10,#0]:LDR R6,[R10,#16]:SUB R6,R0,R6
  201. 1LDR R0,[R10,#4]:LDR R7,[R10,#20]:SUB R7,R0,R7
  202. %LDR R10,XSprSize:LDR R11,YSprSize
  203. 2.shpondle SUB R6,R6,R10:CMP R6,R2:BGE shpondle
  204. 2.shpondle SUB R7,R7,R11:CMP R7,R3:BGE shpondle
  205. MOV R8,R4:MOV R9,R5
  206. LDR R1,SpriteAt
  207. ADD R2,R1,#16
  208. MOV R0,#&22:
  209. R R0,R0,#&200
  210. !MOV R3,R6:MOV R4,R7:MOV R5,#0
  211.     .Loop
  212. STMFD R13!,{R0-R5}
  213. SWI "XOS_SpriteOp"
  214. LDMFD R13!,{R0-R5}
  215. BVS Normal
  216. $ADD R3,R3,R10:CMP R3,R8:BLT Loop
  217. .MOV R3,R6:ADD R4,R4,R11:CMP R4,R9:BLT Loop
  218. LDMFD R13!,{R0-R12,R14}
  219. MOVS PC,R14
  220. .Normal
  221. LDMFD R13!,{R0-R12,R14}
  222. MOV R0,R0
  223. B myjump
  224. %.Backg EQUS "background"+
  225. 0:ALIGN
  226. .ModeLoad EQUD -1
  227. .SpriteAt EQUD 0
  228. .ModeLast EQUD 
  229. ..Mode0 EQUS "WindowDrop:Sprites0"+
  230. 0:ALIGN
  231. 0.Mode12 EQUS "WindowDrop:Sprites12"+
  232. 0:ALIGN
  233. 0.Mode15 EQUS "WindowDrop:Sprites15"+
  234. 0:ALIGN
  235. .XSprSize EQUD 0
  236. .YSprSize EQUD 0
  237. .CalcSize
  238. "STMFD R13!,{R0-R7,R10,R11,R14}
  239. *LDR R1,SpriteAt:MOVS R1,R1:BEQ Flimsey
  240. ADD R2,R1,#16
  241. 0MOV R0,#40:
  242. R R0,R0,#&200:SWI "XOS_SpriteOp"
  243. DMVN R0,#0:MOV R1,#4:SWI "XOS_ReadModeVariable":MOV R10,R3,LSL R2
  244. DMVN R0,#0:MOV R1,#5:SWI "XOS_ReadModeVariable":MOV R11,R4,LSL R2
  245. %STR R10,XSprSize:STR R11,YSprSize
  246. .Flimsey
  247. "LDMFD R13!,{R0-R7,R10,R11,PC}^
  248. .GreyFlag EQUD 0
  249. .MaybeClear
  250. )LDR R1,GreyFlag:MOVS R1,R1:BEQ Normal
  251. 'LDR R1,[R13,#56] ; r1 from previous
  252.  R2,R1,#3:CMP R2,#3:BNE Normal
  253. TST R1,#256:BEQ Normal
  254. LDMFD R13!,{R0-R12,R14}
  255. MOVS PC,R14
  256. .Word2 LDR R14,[R12,#84]
  257. .Word3 EQUD &0A00000C
  258. .Counter EQUD 0
  259. .WriteMen EQUD &70D0121
  260. 7; hacks at WindowManager+&76E0 called from WM+&7568
  261. .Write
  262. LDMFD R13!,{R10,R14}
  263. STMFD R13!,{R0-R12,R14}
  264. +LDR R4,FontOnFlag:MOVS R4,R4:BEQ Normal
  265. ,BIC R14,R14,#&FC000003:LDR R11,[R14,#16]
  266. &LDR R4,Word2:CMP R4,R11:BNE Normal
  267. CMP R0,#103:BEQ MaybeClear
  268. LDR R14,[R13,#64]
  269. ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
  270. &LDR R4,Word3:CMP R4,R14:BNE Normal
  271. CMP R0,#4:BNE Normal
  272. 7LDR R2,[R13,#60]:LDR R14,[R13,#56]:
  273.  R9,R14,#&F<<12
  274. CMP R9,#12<<12:BGE Normal
  275. HLDR R9,WriteMen:CMP R14,R9:
  276. RNE R9,R9,#1<<21:CMPNE R14,R9:BEQ Normal
  277. STMFD R13!,{R0-R2,R14}
  278. ILDR R0,[R12,#128]:BIC R0,R0,#3:ADD R1,R0,#64:SWI "OS_ValidateAddress"
  279. BCS Bob
  280. -LDR R2,[R0]:LDR R1,Wind:CMP R2,R1:BNE Bob
  281. $LDR R2,[R0,#4]:CMN R2,#1:BNE Bob
  282.  ; ok so we have a menu here!
  283. (LDR R14,[R13,#60+24] \ The IconFlags
  284. @TST R14,#&100:
  285. Q R14,#&C:MOVNE R14,#&1000000:STR R14,Counter
  286. BLDR R2,[R13,#16+60] \ Aha! the key, the secret! The icon data!
  287. STMFD R13!,{R0-R1,R3-R9}
  288. +LDR R8,[R0,#(&48+8)]:LDR R9,[R0,#(&48)]
  289. SUB R8,R8,R9:SUB R8,R8,#64
  290. *STMFD R13!,{R1,R2}:MOV R1,R8:MOV R2,#0
  291. SWI "Font_Converttopoints"
  292.  MOV R8,R1:LDMFD R13!,{R1,R2}
  293. +LDR R0,myfonthandle:SWI "XFont_SetFont"
  294. MOV R0,R2:.Fleep
  295. <LDR R14,Counter:SUBS R14,R14,#1:STR R14,Counter:BEQ NoHK
  296. 8LDRB R3,[R0],#1:MOVS R3,R3:CMPNE R3,#13:CMPNE R3,#10
  297.  !BEQ NoHK:CMP R3,#32:BNE Fleep
  298. !8LDRB R3,[R0]:CMP R3,#
  299. ":CMPNE R3,#
  300. "^":BEQ FoundHK
  301. CMP R3,#32:BNE NotSpace
  302. #!LDRB R14,[R0,#-1]:CMP R14,#32
  303. $2LDR R14,Counter:ADD R14,R14,#1:STR R14,Counter
  304. BNE NotSpace
  305. .Skandl
  306. LDRB R3,[R0],#1
  307. (<LDR R14,Counter:SUBS R14,R14,#1:STR R14,Counter:BEQ NoHK
  308. )>CMP R3,#32:BEQ Skandl:MOVS R3,R3:CMPNE R3,#13:CMPNE R3,#10
  309. *#BEQ NoHK:SUB R0,R0,#1:B FoundHK
  310. .NotSpace
  311. ,ACMP R3,#
  312. "F":BNE Fleep:LDRB R3,[R0,#1]:CMP R3,#
  313. "0":BLT Fleep
  314. CMP R3,#
  315. "9":BGT Fleep
  316. .FoundHK
  317. / LDRB R3,[R0,#-1]!:CMP R3,#32
  318. BEQ FoundHK:ADD R0,R0,#1
  319. 1NADR R4,HotKey:.Floopy LDRB R3,[R2],#1:STRB R3,[R4],#1:CMP R2,R0:BLT Floopy
  320. MOV R3,#0:STRB R3,[R4]
  321. 3?STMFD R13!,{R1-R4}:ADR R1,HotKey:MOV R2,#&8000000:MOV R3,R2
  322. 4;MVN R4,#0:MOV R5,#&FF:SWI "XFont_StringWidth":MOV R6,R2
  323. LDMFD R13!,{R1-R4}
  324. .Floopy2 LDRB R3,[R2],#1
  325. CMP R3,#32:BEQ Floopy2
  326. SUB R2,R2,#1
  327. 9DSTMFD R13!,{R1-R4}:MOV R1,R2:MOV R2,#&800000:MOV R3,R2:MVN R4,#0
  328. :!LDR R5,Counter:LDR R5,Counter
  329. ;5SWI "XFont_StringWidth":ADD R6,R6,R2:SUB R8,R8,R6
  330. LDMFD R13!,{R1-R4}
  331. MOV R3,#9:STRB R3,[R4],#1
  332. >$STRB R8,[R4],#1:MOV R8,R8,LSR #8
  333. ?4STRB R8,[R4],#1:MOV R8,R8,LSR #8:STRB R8,[R4],#1
  334. LDR R14,Counter
  335. A8.Floopy3 LDRB R3,[R2],#1:SUBS R14,R14,#1:MOVMI R3,#0
  336. STRB R3,[R4],#1
  337. CMP R3,#&20:BGT Floopy3
  338. D2MOV R3,#0:STRB R3,[R4],#1:ADR R2,HotKey:B NoHK
  339. E(.HotKey ]:P%+=128:O%+=128:[OPT pass%
  340. .WriteC
  341. LDMFD R13!,{R10,R14}
  342. STMFD R13!,{R0,R1,R2,R14}
  343. ADR R1,HotKey:ADD R1,R1,#1
  344. J4CMP R2,R1:LDMNEFD R13!,{R0,R1,R2,R14}:BNE myjump
  345. ADR R1,HotKey:MOV R2,#0
  346. L=.Tlp LDRB R0,[R1],#1:MOVS R0,R0:BEQ ZapY:SWI "XOS_WriteC"
  347. CMP R0,#9:BNE Tlp
  348. N$LDRB R0,[R1],#1:SWI "XOS_WriteC"
  349. O$LDRB R0,[R1],#1:SWI "XOS_WriteC"
  350. P$LDRB R0,[R1],#1:SWI "XOS_WriteC"
  351. B Tlp:.ZapY
  352. RCSTR R0,HotKey:.Womlbe LDMFD R13!,{R0-R2,R14}:MOV R0,#0:B myjump
  353. S    .NoHK
  354. LDMFD R13!,{R0-R1,R3-R9}
  355. STR R2,[R13,#16+60]
  356. WBMOV R0,#&87:SWI "XOS_Byte":LDMVSFD R13!,{R0-R2,R14}:BVS Normal
  357. X/LDRB R0,ModeLast:CMP R0,R2:STRB R2,ModeLast
  358. BEQ Already
  359. STMFD R13!,{R0-R5}
  360. BL CalcSize
  361. \-LDRB R0,myfonthandle:SWI "XFont_LoseFont"
  362. adr(1,FontName)
  363. ^%LDR R2,FontXSize:LDR R3,FontYSize
  364. MOV     R4,#0
  365. MOV     R5,#0
  366. SWI     "XFont_FindFont"
  367. MVNVS   R0,#0
  368. STR     R0,myfonthandle
  369. LDMFD R13!,{R0-R5}
  370. e'LDMVSFD R13!,{R0-R2,R14}:BVS Normal
  371. .Already
  372. LDMFD R13!,{R0-R2,R14}
  373. h*LDR R0,GreyFlag:MOVS R0,R0:BEQ NotSelI
  374.  R0,R14,#3:CMP R0,#3:BNE NotSelI
  375. j9TST R14,#256:BEQ NotSelI:TST R14,#(1<<21):BEQ NotSelI
  376. k"MOV R1,R14,LSR #24:
  377.  R1,R1,#&F
  378. lFBIC R14,R14,#&FF000000:
  379. R R14,R14,R1,LSL #24:
  380. R R14,R14,R1,LSL #28
  381. STR R14,[R13,#56]
  382. .NotSelI
  383. o*SUB R13,R13,#16:LDMFD R13!,{R0-R2,R14}
  384. .Bonza
  385. q8LDR R0,[R12,#128]:BIC R0,R0,#3: \\\ MAY BE BUGS HERE
  386. r5LDR R2,[R0]:LDR R1,Wind:CMP R2,R1:BNE Icon_Filled
  387. s!TST R14,#&FF000000:BNE NoTBar
  388. ADD R0,R0,#&48+32
  389. u,LDRB R1,[R0]:CMP R1,#&FF:BEQ Icon_Filled
  390. vCLDRB R0,[R0,#1]:
  391. R R0,R1,R0,LSL #4:
  392. R R14,R14,R0,LSL #24:B Smeg
  393. .NoTBar
  394. x!TST R14,#1<<5:BNE Icon_Filled
  395. y=ADD R0,R0,#&48+35:LDRB R0,[R0]:CMP R0,#&F:BGT Icon_Filled
  396. z3BIC R14,R14,#&F<<28:
  397. R R14,R14,R0,LSL #28:.Smeg
  398. STR R14,[R13,#56]
  399. .Icon_Filled
  400. }*SUB R13,R13,#16:LDMFD R13!,{R0-R2,R14}
  401.  R9,R14,#42:CMP R9,#42:BNE Pj:TST R14,#&200:MOV R9,#0:BNE h
  402. ; allow radio and text
  403. *MOV R9,#0:TST R14,#8:MOVNE R9,#8:BNE h
  404. !TST R14,#&200:MOVNE R9,#16:.h
  405. F.loop LDRB R0,[R2],#1:CMP R0,#32:ADDCS R1,R1,R9:BCS loop:STR R1,Bo
  406. OLDR R1,[R13,#56]:LDR R2,[R13,#60]:LDRB R0,myfonthandle:BIC R1,R1,#&FF000000
  407. R R1,R1,R0,LSL #24
  408. R R1,R1,#&40:
  409. bl(&78E8):LDR R1,Bo
  410. #CMP R9,#8:SUBEQ R1,R1,R4,LSR #1
  411. CMP R9,#16:SUBEQ R1,R1,R4
  412. STR R1,Bo
  413. LDR R1,[R13,#56]
  414. (MOV R9,R1,LSR #28:STRB R9,[R12,#124]
  415.  R14,R1,#&F000000
  416. MOVS R14,R14,LSR #24
  417. CMPEQ R9,#0:
  418. Q R14,#7
  419. STRB R14,[R12,#123]
  420. bl(&7348)
  421. BVS Normal
  422. LDMFD R13!,{R0-R12,R14}
  423. 0MOV R0,#&D4:LDR R1,Bo:SUB R2,R2,#22:B myjump
  424. .Bo &0
  425. .Wordx LDRB R14,[R4,#40]
  426.     .Plot
  427. LDMFD R13!,{R10,R14}
  428. STMFD R13!,{R0-R12,R14}
  429. ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
  430. &LDR R7,Wordx:CMP R7,R14:BNE Normal
  431. -LDR R14,DirOnFlag:MOVS R14,R14:BEQ Normal
  432. ADR R11,open_dir
  433. ILDR R14,[R1,#&18]:LDRB R14,[R14,#1]:CMP R14,#
  434. "s":ADREQ R11,sopen_dir
  435. CMPNE R14,#
  436. "d":BNE Normal
  437. .lebon
  438. JLDR R0,[R4,#4]:
  439. adr(7,Moglin):.CopLp LDRB R14,[R0],#1:STRB R14,[R7],#1
  440. 8CMP R14,#0:BNE CopLp:MOV R14,#
  441. ".":STRB R14,[R7,#-1]
  442. FLDR R0,[R1,#&14]:.CopLp LDRB R14,[R0],#1:CMP R14,#0:CMPNE R14,#&0D
  443. Q R14,#0:STRB R14,[R7],#1
  444. BNE CopLp
  445. LDR R0,[R12,#8]
  446. .RepLp
  447. >TEQ R0,#&40000001:BEQ Normal:
  448. adr(7,Moglin):LDR R6,[R0,#4]
  449. /.SeeIfSame LDRB R5,[R7],#1:LDRB R14,[R6],#1
  450. CMP R5,#32:
  451. Q R5,#0
  452. CMP R14,#32:
  453. Q R14,#0
  454. "TEQ R14,#0:TEQEQ R5,#0:BEQ Yes
  455. (CMP R14,R5:BEQ SeeIfSame:BNE NextOne
  456. ?LDMIA R1,{R0-R7}:MOV R6,R11:
  457. adr(14,Brea):STMIA R14,{R0-R7}
  458. LDMFD R13!,{R0-R12,R14}
  459. adr(1,Brea):B myjump
  460.  .NextOne LDR R0,[R0]:B RepLp
  461. ).open_dir EQUS "sdirectoryo"+
  462. 0:ALIGN
  463. *.sopen_dir EQUS "ssmall_diro"+
  464. 0:ALIGN
  465. &.Trans EQUD 0:EQUD 0:EQUD 0:EQUD 0
  466. 5.FnameCHO EQUS "<FinalLook$OptionsFile>"+
  467. 0:ALIGN
  468. &.Gm EQUS "(Opening file)"+
  469. 0:ALIGN
  470. $.Lookup EQUS "(Lookup)"+
  471. 0:ALIGN
  472. .DoOptions
  473. STMFD R13!,{R0-R7,R14}
  474. GADR R0,Trans:ADR R1,FnameCHO:MOV R2,#0:SWI "XMessageTrans_OpenFile"
  475. ADRVS R0,Gm:BVS OptTrouble
  476. !ADR R4,OptList:ADR R8,OptList
  477. .OptLoop
  478. ADR R0,Trans
  479. LDR R1,[R4],#4 ; token
  480. MOVS R1,R1:BMI OptEnd
  481. *ADD R1,R1,R8 ; put to absolute address
  482. ADR R2,Transbuf:MOV R3,#255
  483. >STMFD R13!,{R4-R7}:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
  484. ASWI "XMessageTrans_Lookup":LDMFD R13!,{R4-R7}:ADRVS R0,Lookup
  485. BVS OptTrouble
  486. LDR R1,[R4],#4 ; address
  487. #ADD R1,R1,R8 ; absolute address
  488. LDR R0,[R4],#4 ; type
  489. CMP R0,#0:BNE NotBoolean
  490. 2; A boolean Yes or No ... test by first letter
  491. 4LDRB R2,[R2]:CMP R2,#
  492. "a":BLT LetOk:CMP R2,#
  493. ASUBLE R2,R2,#32:.LetOk CMP R2,#
  494. "Y":MVNEQ R2,#0:STREQ R2,[R1]
  495. ?BEQ OptLoop:CMP R2,#
  496. Q R2,#0:STREQ R2,[R1]:BEQ OptLoop
  497. STRB R2,Err1+4
  498. B UnBool
  499. .NotBoolean
  500. CMP R0,#1:BNE NotNumeric
  501. ; A numeric
  502. 7MOV R7,R1:MOV R1,R2:MOV R0,#0:SWI "OS_ReadUnsigned"
  503. STR R2,[R7]:B OptLoop
  504. .NotNumeric
  505. ; must be text so copy
  506. >.Flobbadob LDRB R0,[R2],#1:CMP R0,#10:CMPNE R0,#0:
  507. Q R0,#0
  508. +STRB R0,[R1],#1:BNE Flobbadob:B OptLoop
  509. .OptEnd
  510. -ADR R0,Trans:SWI "MessageTrans_CloseFile"
  511. ADR R0,Clios:SWI "OS_CLI"
  512. LDMFD R13!,{R0-R7,PC}^
  513. .UnBool
  514. &ADR R0,Err1:SWI "OS_GenerateError"
  515. LDMFD R13!,{R0-R7,PC}^
  516. T.Err1 EQUS "!@#$Expecting 'Yes' or 'No' for an option ... cannot start"+
  517. 0:ALIGN
  518. .OptTrouble
  519. FADR R1,Job:.Lop LDRB R2,[R0],#1:STRB R2,[R1],#1:MOVS R2,R2:BNE Lop
  520. &ADR R0,Err0:SWI "OS_GenerateError"
  521. LDMFD R13!,{R0-R7,PC}^
  522. g.Err0 EQUS "!@#$Cannot start !FinalLook as there has been a problem with the options file. - ":.Job
  523. /;NB a runtime error overwrites from here on
  524.     ALIGN
  525. .Clios
  526. EQUS "Set WindowDrop$Path "
  527. $.TexPathSet EQUS 
  528. 255,"*"):ALIGN
  529. .OptList
  530. :EQUD Ptr_FontName-OptList:EQUD FontName-OptList:EQUD 2
  531. <EQUD Ptr_FontXSize-OptList:EQUD FontXSize-OptList:EQUD 1
  532. <EQUD Ptr_FontYSize-OptList:EQUD FontYSize-OptList:EQUD 1
  533. ;EQUD Ptr_TexPath-OptList:EQUD TexPathSet-OptList:EQUD 2
  534. 8EQUD Ptr_TexOn-OptList:EQUD TexOnFlag-OptList:EQUD 0
  535. :EQUD Ptr_FontOn-OptList:EQUD FontOnFlag-OptList:EQUD 0
  536. :EQUD Ptr_DirOpen-OptList:EQUD DirOnFlag-OptList:EQUD 0
  537. 6EQUD Ptr_Grey-OptList:EQUD GreyFlag-OptList:EQUD 0
  538. EQUD -1
  539. 3.Ptr_FontName  EQUS "FontName:Corpus.Medium"+
  540. *.Ptr_FontXSize EQUS "FontXSize:170"+
  541. *.Ptr_FontYSize EQUS "FontYSize:248"+
  542. J.Ptr_TexPath EQUS "TexturePath:<FinalLook$Dir>.WindowDrop.Default."+
  543. &.Ptr_TexOn EQUS "TexturesOn:No"+
  544. $.Ptr_FontOn EQUS "FontsOn:No"+
  545. +.Ptr_DirOpen EQUS "DirectoryOpen:No"+
  546. *.Ptr_Grey EQUS "RemoveGreyBlobs:No"+
  547.     ALIGN
  548. *.Transbuf ]:P%+=256:O%+=256:[OPT pass%
  549. $.Brea ]:P%+=64:O%+=64:[OPT pass%
  550. .Moglin
  551. ]P%+=1024:O%+=1024
  552.  "OS_File",10,"<FinalLook$Dir>.AllPatch",&FFA,,code%,O%
  553.  pass%=4 
  554. P%=&8000:O%=code%
  555. [OPT pass%
  556. .Alt_Key
  557. STMFD R13!,{R0-R7,R14}
  558. 8MOV R0,#129:MOV R1,#256-3:MOV R2,#255:SWI "XOS_Byte"
  559. BVS End
  560. (CMP R2,#255:ADREQ R0,On:ADRNE R0,Off
  561. SWI "XOS_CLI"
  562. LDMFD R13!,{R0-R7,PC}^
  563. ).On EQUS "Set FinalLook$AltKey On"+
  564. 1.Off EQUS "Set FinalLook$AltKey Off"+
  565. 0:ALIGN
  566.  "OS_File",10,"<FinalLook$Dir>.AltCheck",&FFC,,code%,O%
  567. bl(addr)
  568. [OPT pass%
  569. ADR R14,P%+16
  570. R R14,R14,#3
  571. LDR PC,P%+4
  572. EQUD WimpMod+addr
  573. Filer_bl(addr)
  574. [OPT pass%
  575. ADR R14,P%+16
  576. R R14,R14,#3
  577. LDR PC,P%+4
  578. EQUD FilerMod+addr
  579. adr(reg,addr)
  580. [OPT pass%
  581. LDR     reg,P%+12
  582. ADD     reg,pc,reg
  583. B       P%+8
  584. EQUD    addr-P%
  585.