home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 3
/
TheARMClub_PDCD3.iso
/
hensa
/
desktop
/
finallook_1
/
!FinalLook
/
PatchAll2
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1995-03-31
|
17KB
|
585 lines
>PatchAll
$;" at line ";
"OS_Module",18,"WindowManager"
,,,WimpMod
"OS_Module",18,"Filer"
,,,FilerMod
code% &4000
pass%=4
O%=code%
[OPT pass%
EQUD 0
EQUD init
EQUD final
EQUD 0
EQUD title
EQUD help
EQUD 0
EQUD 0
EQUD 0
EQUD 0
EQUD 0
.title
EQUS "PatchAll"
EQUB 0
.help
AEQUS "PatchAll"+
9+"1.40 (26 Mar 1995) by Matthew Godbolt"
EQUB 0
ALIGN
.Monga
JEQUS "This module is by Matthew Godbolt (M.R.Godbolt@exeter.ac.uk). "
KEQUS "It is FREEWARE and should have come with a !Help file describing"
!-EQUS " what this means. :-)":EQUB 0:ALIGN
" .init
STMFD R13!,{R0,R1,R14}
BL DoOptions
ADR R1,FontName
LDR R2,FontXSize
LDR R3,FontYSize
MOV R4,#0
MOV R5,#0
SWI "XFont_FindFont"
+)ADDVS R13,R13,#4:LDMVSFD R13!,{R1,PC}
STR R0,myfonthandle
SWI "OS_IntOff"
MOV R1,#8
LDR R0,[R1]
STR R0,oldbranch
ADR R1,myjump-8
BIC R0,R0,#&FF000000
SUB R0,R0,R1,ASR #2
BIC R0,R0,#&FF000000
R R0,R0,#&EA000000
STR R0,myjump
ADR R0,myswihand-&10
MOV R0,R0,LSR #2
R R0,R0,#&EA000000
MOV R1,#8
;!STR R0,[R1]:STR R0,mycopy
SWI "OS_IntOn"
LDMFD R13!,{R0,R1,PC}
.myfonthandle EQUD0
.myjump B &1F033C0
.mycopy EQUD 0
AH.FontName EQUS "Trinity.Corpus.Bogus.Font.Italic.I.Dunno.!"+
0:ALIGN
.FontXSize EQUD 0
.FontYSize EQUD 0
.final
STMFD R13!,{R0,R1,R14}
LDR R0,oldbranch
MOV R1,#8
H0LDR R2,mycopy:LDR R3,[R1]:CMP R3,R2:BNE Cant
STR R0,[R1]
LDR R0,myfonthandle
SWI "XFont_LoseFont"
L;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
LDMFD R13!,{R0,R1,PC}^
N".oldbranch EQUD &EA6051CD
O@.Cant LDMFD R13!,{R0,R1,R14}:ADR R0,errswi:
RS PC,R14,#1<<28
P8.errswi EQUS "!@#$Can't detach SWI handler"+
0:ALIGN
.myswihand
STMFD R13!,{R10,R14}
BIC R14,R14,#&FC000003
R10,R14,#&03800000:CMP R10,#&03800000:LDMNEFD R13!,{R10,R14}:BNE myjump
LDR R14,[R14,#-4]
BIC R14,R14,#&FF000000
BIC R14,R14,#&20000
CMP R14,#0:BEQ WriteC
Z&LDR R10,ospl:CMP R14,R10:BEQ Write
[1LDR R10,openwindow:CMP R14,R10:BEQ RedrawRoot
\/LDR R10,deletewindow:CMP R14,R10:BEQ Delwin
])LDR R10,ploticon:CMP R14,R10:BEQ Plot
^)LDR R10,ClrBack:CMP R14,R10:BEQ Clear
_!LDMFD R13!,{R10,R14}:B myjump
.openwindow EQUD &400C5
.deletewindow EQUD &400C3
.ploticon EQUD &400E2
.ClrBack EQUD 256+16
.ospl EQUD &45
.Word EQUD &E59AE05C
.Wind EQUS "Wind"
j&.Bongo2 SWI "XWimp_GetPointerInfo"
.Delwin
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
nKBIC R14,R14,#&FC000003:LDR R14,[R14,#16]:LDR R11,BilgePump2:CMP R14,R11
BNE Normal
B BonjourMeLad
.RedrawRoot
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
tHMOV R11,#&500:
R R11,R11,#&34:CMP R2,R11:BEQ Normal \ unsatisfactory
u=MOV R11,#&500:
R R11,R11,#&80:CMP R2,R11:BEQ Normal \ and
vAMOV R11,#&400:
R R11,R11,#&78:CMP R2,R11:BEQ Normal \ HIDEOUS
w@MOV R11,#&400:
R R11,R11,#&98:CMP R2,R11:BEQ Normal \ bodges
xAMOV R11,#&300:
R R11,R11,#&E8:CMP R2,R11:BEQ Normal \ ner ner
yGBIC R14,R14,#&FC000003:LDR R10,[R14,#12]:LDR R11,Bongo2:CMP R11,R10
BNE Normal
.BonjourMeLad
|DLDR R0,[R1]:BIC R0,R0,#3:ADD R0,R0,#&90:LDR R0,[R0]:ADD R0,R0,#4
adr(7,Moglin):MOV R8,R7
.PleiLoop
DLDRB R1,[R0],#1:CMP R1,#
Q R8,R7:STRB R1,[R7],#1:CMP R1,#32
BGE PleiLoop
MOV R1,#0:STRB R1,[R8],#1
LDR R0,[R12,#8]
.SearchLoop
<TEQ R0,#&40000001:BEQ Normal:LDR R2,[R0,#4]:ADD R2,R2,#4
adr(7,Moglin)
.CheckLp
CLDRB R3,[R7],#1:LDRB R4,[R2],#1:CMP R3,#0:CMPEQ R4,#0:BEQ Match
CMP R3,R4:BEQ CheckLp
LDR R0,[R0]:B SearchLoop
.Match
MOV R4,R0:LDR R3,[R4,#32]
LDR R2,[R4,#&18]
.FudgeLoop
MOV R9,R8
..Lop LDRB R10,[R2],#1:MOVS R10,R10:BNE Lop
.Speedleloop
HLDRB R10,[R2],#1:LDRB R11,[R9],#1:CMP R10,#0:CMPEQ R11,#0:BEQ Match2
CMP R10,R11:BEQ Speedleloop
CMP R10,#0:SUBEQ R2,R2,#1
2SUBS R3,R3,#1:BNE FudgeLoop:SWI 256+7:B Normal
.Match2
!ADD R5,R0,#&2C:LDR R0,[R0,#8]
Filer_bl(&1EB8)
$ADD R1,R12,#&44:LDMIA R1,{R1-R4}
SWI "XWimp_ForceRedraw"
LDMFD R13!,{R0-R12,R14}
B myjump
.BilgePump2 EQUD &E92D40BE
.TexOnFlag EQUD 0
.FontOnFlag EQUD 0
.DirOnFlag EQUD 0
.Clear
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
CMP R0,#1:BNE Normal
*LDR R0,TexOnFlag:MOVS R0,R0:BEQ Normal
1LDR R0,[R10]:LDR R1,Wind:CMP R0,R1:BNE Normal
(LDR R0,[R10,#4]:CMN R0,#1:BEQ Normal
(BIC R14,R14,#&FC000003:LDR R14,[R14]
%LDR R0,Word:CMP R0,R14:BNE Normal
:MOV R0,#&87:SWI "XOS_Byte":BVS Normal:LDRB R0,ModeLast
CMP R0,R2:BLNE CalcSize
=MVN R0,#0:MOV R1,#9:SWI "XOS_ReadModeVariable":BVS Normal
MVN R1,#0
CMP R2,#0:ADREQ R1,Mode0
CMP R2,#2:ADREQ R1,Mode12
CMP R2,#3:ADREQ R1,Mode15
CMN R1,#1:BEQ Normal
LDR R14,ModeLoad
CMP R14,R2:BEQ DontLoad
&STR R2,ModeLoad:STMFD R13!,{R0-R7}
;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
MOV R2,#0:STR R2,SpriteAt
MOV R0,#5:LDR R1,[R13,#4]
CMOV R2,#0:MOV R3,#0:SWI "XOS_File":ADDVS R13,R13,#32:BVS Normal
HADD R3,R4,#4:MOV R0,#6:SWI "XOS_Module":ADDVS R13,R13,#32:BVS Normal
"STR R2,SpriteAt:STR R4,[R2],#4
=LDR R1,[R13,#4]:MOV R0,#&FF:MOV R3,#0:MOV R4,#0:MOV R5,#0
%SWI "XOS_File":LDMFD R13!,{R0-R7}
BLVC CalcSize:BVC DontLoad
.MOV R0,#7:LDR R2,SpriteAt:SWI "XOS_Module"
MOV R2,#0:STR R2,SpriteAt
B Normal
.DontLoad
)LDR R2,SpriteAt:MOVS R2,R2:BEQ Normal
?ADD R10,R10,#&48 ; should now point to WindowInfo Block ...
1LDR R0,[R10,#0]:LDR R6,[R10,#16]:SUB R6,R0,R6
1LDR R0,[R10,#4]:LDR R7,[R10,#20]:SUB R7,R0,R7
%LDR R10,XSprSize:LDR R11,YSprSize
2.shpondle SUB R6,R6,R10:CMP R6,R2:BGE shpondle
2.shpondle SUB R7,R7,R11:CMP R7,R3:BGE shpondle
MOV R8,R4:MOV R9,R5
LDR R1,SpriteAt
ADD R2,R1,#16
MOV R0,#&22:
R R0,R0,#&200
!MOV R3,R6:MOV R4,R7:MOV R5,#0
.Loop
STMFD R13!,{R0-R5}
SWI "XOS_SpriteOp"
LDMFD R13!,{R0-R5}
BVS Normal
$ADD R3,R3,R10:CMP R3,R8:BLT Loop
.MOV R3,R6:ADD R4,R4,R11:CMP R4,R9:BLT Loop
LDMFD R13!,{R0-R12,R14}
MOVS PC,R14
.Normal
LDMFD R13!,{R0-R12,R14}
MOV R0,R0
B myjump
%.Backg EQUS "background"+
0:ALIGN
.ModeLoad EQUD -1
.SpriteAt EQUD 0
.ModeLast EQUD
..Mode0 EQUS "WindowDrop:Sprites0"+
0:ALIGN
0.Mode12 EQUS "WindowDrop:Sprites12"+
0:ALIGN
0.Mode15 EQUS "WindowDrop:Sprites15"+
0:ALIGN
.XSprSize EQUD 0
.YSprSize EQUD 0
.CalcSize
"STMFD R13!,{R0-R7,R10,R11,R14}
*LDR R1,SpriteAt:MOVS R1,R1:BEQ Flimsey
ADD R2,R1,#16
0MOV R0,#40:
R R0,R0,#&200:SWI "XOS_SpriteOp"
DMVN R0,#0:MOV R1,#4:SWI "XOS_ReadModeVariable":MOV R10,R3,LSL R2
DMVN R0,#0:MOV R1,#5:SWI "XOS_ReadModeVariable":MOV R11,R4,LSL R2
%STR R10,XSprSize:STR R11,YSprSize
.Flimsey
"LDMFD R13!,{R0-R7,R10,R11,PC}^
.GreyFlag EQUD 0
.MaybeClear
)LDR R1,GreyFlag:MOVS R1,R1:BEQ Normal
'LDR R1,[R13,#56] ; r1 from previous
R2,R1,#3:CMP R2,#3:BNE Normal
TST R1,#256:BEQ Normal
LDMFD R13!,{R0-R12,R14}
MOVS PC,R14
.Word2 LDR R14,[R12,#84]
.Word3 EQUD &0A00000C
.Counter EQUD 0
.WriteMen EQUD &70D0121
7; hacks at WindowManager+&76E0 called from WM+&7568
.Write
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
+LDR R4,FontOnFlag:MOVS R4,R4:BEQ Normal
,BIC R14,R14,#&FC000003:LDR R11,[R14,#16]
&LDR R4,Word2:CMP R4,R11:BNE Normal
CMP R0,#103:BEQ MaybeClear
LDR R14,[R13,#64]
,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
&LDR R4,Word3:CMP R4,R14:BNE Normal
CMP R0,#4:BNE Normal
7LDR R2,[R13,#60]:LDR R14,[R13,#56]:
R9,R14,#&F<<12
CMP R9,#12<<12:BGE Normal
HLDR R9,WriteMen:CMP R14,R9:
RNE R9,R9,#1<<21:CMPNE R14,R9:BEQ Normal
STMFD R13!,{R0-R2,R14}
ILDR R0,[R12,#128]:BIC R0,R0,#3:ADD R1,R0,#64:SWI "OS_ValidateAddress"
BCS Bob
-LDR R2,[R0]:LDR R1,Wind:CMP R2,R1:BNE Bob
$LDR R2,[R0,#4]:CMN R2,#1:BNE Bob
; ok so we have a menu here!
(LDR R14,[R13,#60+24] \ The IconFlags
@TST R14,#&100:
Q R14,#&C:MOVNE R14,#&1000000:STR R14,Counter
BLDR R2,[R13,#16+60] \ Aha! the key, the secret! The icon data!
STMFD R13!,{R0-R1,R3-R9}
+LDR R8,[R0,#(&48+8)]:LDR R9,[R0,#(&48)]
SUB R8,R8,R9:SUB R8,R8,#64
*STMFD R13!,{R1,R2}:MOV R1,R8:MOV R2,#0
SWI "Font_Converttopoints"
MOV R8,R1:LDMFD R13!,{R1,R2}
+LDR R0,myfonthandle:SWI "XFont_SetFont"
MOV R0,R2:.Fleep
<LDR R14,Counter:SUBS R14,R14,#1:STR R14,Counter:BEQ NoHK
8LDRB R3,[R0],#1:MOVS R3,R3:CMPNE R3,#13:CMPNE R3,#10
!BEQ NoHK:CMP R3,#32:BNE Fleep
!8LDRB R3,[R0]:CMP R3,#
":CMPNE R3,#
"^":BEQ FoundHK
CMP R3,#32:BNE NotSpace
#!LDRB R14,[R0,#-1]:CMP R14,#32
$2LDR R14,Counter:ADD R14,R14,#1:STR R14,Counter
BNE NotSpace
.Skandl
LDRB R3,[R0],#1
(<LDR R14,Counter:SUBS R14,R14,#1:STR R14,Counter:BEQ NoHK
)>CMP R3,#32:BEQ Skandl:MOVS R3,R3:CMPNE R3,#13:CMPNE R3,#10
*#BEQ NoHK:SUB R0,R0,#1:B FoundHK
.NotSpace
,ACMP R3,#
"F":BNE Fleep:LDRB R3,[R0,#1]:CMP R3,#
"0":BLT Fleep
CMP R3,#
"9":BGT Fleep
.FoundHK
/ LDRB R3,[R0,#-1]!:CMP R3,#32
BEQ FoundHK:ADD R0,R0,#1
1NADR R4,HotKey:.Floopy LDRB R3,[R2],#1:STRB R3,[R4],#1:CMP R2,R0:BLT Floopy
MOV R3,#0:STRB R3,[R4]
3?STMFD R13!,{R1-R4}:ADR R1,HotKey:MOV R2,#&8000000:MOV R3,R2
4;MVN R4,#0:MOV R5,#&FF:SWI "XFont_StringWidth":MOV R6,R2
LDMFD R13!,{R1-R4}
.Floopy2 LDRB R3,[R2],#1
CMP R3,#32:BEQ Floopy2
SUB R2,R2,#1
9DSTMFD R13!,{R1-R4}:MOV R1,R2:MOV R2,#&800000:MOV R3,R2:MVN R4,#0
:!LDR R5,Counter:LDR R5,Counter
;5SWI "XFont_StringWidth":ADD R6,R6,R2:SUB R8,R8,R6
LDMFD R13!,{R1-R4}
MOV R3,#9:STRB R3,[R4],#1
>$STRB R8,[R4],#1:MOV R8,R8,LSR #8
?4STRB R8,[R4],#1:MOV R8,R8,LSR #8:STRB R8,[R4],#1
LDR R14,Counter
A8.Floopy3 LDRB R3,[R2],#1:SUBS R14,R14,#1:MOVMI R3,#0
STRB R3,[R4],#1
CMP R3,#&20:BGT Floopy3
D2MOV R3,#0:STRB R3,[R4],#1:ADR R2,HotKey:B NoHK
E(.HotKey ]:P%+=128:O%+=128:[OPT pass%
.WriteC
LDMFD R13!,{R10,R14}
STMFD R13!,{R0,R1,R2,R14}
ADR R1,HotKey:ADD R1,R1,#1
J4CMP R2,R1:LDMNEFD R13!,{R0,R1,R2,R14}:BNE myjump
ADR R1,HotKey:MOV R2,#0
L=.Tlp LDRB R0,[R1],#1:MOVS R0,R0:BEQ ZapY:SWI "XOS_WriteC"
CMP R0,#9:BNE Tlp
N$LDRB R0,[R1],#1:SWI "XOS_WriteC"
O$LDRB R0,[R1],#1:SWI "XOS_WriteC"
P$LDRB R0,[R1],#1:SWI "XOS_WriteC"
B Tlp:.ZapY
RCSTR R0,HotKey:.Womlbe LDMFD R13!,{R0-R2,R14}:MOV R0,#0:B myjump
S .NoHK
LDMFD R13!,{R0-R1,R3-R9}
STR R2,[R13,#16+60]
WBMOV R0,#&87:SWI "XOS_Byte":LDMVSFD R13!,{R0-R2,R14}:BVS Normal
X/LDRB R0,ModeLast:CMP R0,R2:STRB R2,ModeLast
BEQ Already
STMFD R13!,{R0-R5}
BL CalcSize
\-LDRB R0,myfonthandle:SWI "XFont_LoseFont"
adr(1,FontName)
^%LDR R2,FontXSize:LDR R3,FontYSize
MOV R4,#0
MOV R5,#0
SWI "XFont_FindFont"
MVNVS R0,#0
STR R0,myfonthandle
LDMFD R13!,{R0-R5}
e'LDMVSFD R13!,{R0-R2,R14}:BVS Normal
.Already
LDMFD R13!,{R0-R2,R14}
h*LDR R0,GreyFlag:MOVS R0,R0:BEQ NotSelI
R0,R14,#3:CMP R0,#3:BNE NotSelI
j9TST R14,#256:BEQ NotSelI:TST R14,#(1<<21):BEQ NotSelI
k"MOV R1,R14,LSR #24:
R1,R1,#&F
lFBIC R14,R14,#&FF000000:
R R14,R14,R1,LSL #24:
R R14,R14,R1,LSL #28
STR R14,[R13,#56]
.NotSelI
o*SUB R13,R13,#16:LDMFD R13!,{R0-R2,R14}
.Bonza
q8LDR R0,[R12,#128]:BIC R0,R0,#3: \\\ MAY BE BUGS HERE
r5LDR R2,[R0]:LDR R1,Wind:CMP R2,R1:BNE Icon_Filled
s!TST R14,#&FF000000:BNE NoTBar
ADD R0,R0,#&48+32
u,LDRB R1,[R0]:CMP R1,#&FF:BEQ Icon_Filled
vCLDRB R0,[R0,#1]:
R R0,R1,R0,LSL #4:
R R14,R14,R0,LSL #24:B Smeg
.NoTBar
x!TST R14,#1<<5:BNE Icon_Filled
y=ADD R0,R0,#&48+35:LDRB R0,[R0]:CMP R0,#&F:BGT Icon_Filled
z3BIC R14,R14,#&F<<28:
R R14,R14,R0,LSL #28:.Smeg
STR R14,[R13,#56]
.Icon_Filled
}*SUB R13,R13,#16:LDMFD R13!,{R0-R2,R14}
R9,R14,#42:CMP R9,#42:BNE Pj:TST R14,#&200:MOV R9,#0:BNE h
; allow radio and text
*MOV R9,#0:TST R14,#8:MOVNE R9,#8:BNE h
!TST R14,#&200:MOVNE R9,#16:.h
F.loop LDRB R0,[R2],#1:CMP R0,#32:ADDCS R1,R1,R9:BCS loop:STR R1,Bo
OLDR R1,[R13,#56]:LDR R2,[R13,#60]:LDRB R0,myfonthandle:BIC R1,R1,#&FF000000
R R1,R1,R0,LSL #24
R R1,R1,#&40:
bl(&78E8):LDR R1,Bo
#CMP R9,#8:SUBEQ R1,R1,R4,LSR #1
CMP R9,#16:SUBEQ R1,R1,R4
STR R1,Bo
LDR R1,[R13,#56]
(MOV R9,R1,LSR #28:STRB R9,[R12,#124]
R14,R1,#&F000000
MOVS R14,R14,LSR #24
CMPEQ R9,#0:
Q R14,#7
STRB R14,[R12,#123]
bl(&7348)
BVS Normal
LDMFD R13!,{R0-R12,R14}
0MOV R0,#&D4:LDR R1,Bo:SUB R2,R2,#22:B myjump
.Bo &0
.Wordx LDRB R14,[R4,#40]
.Plot
LDMFD R13!,{R10,R14}
STMFD R13!,{R0-R12,R14}
,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
&LDR R7,Wordx:CMP R7,R14:BNE Normal
-LDR R14,DirOnFlag:MOVS R14,R14:BEQ Normal
ADR R11,open_dir
ILDR R14,[R1,#&18]:LDRB R14,[R14,#1]:CMP R14,#
"s":ADREQ R11,sopen_dir
CMPNE R14,#
"d":BNE Normal
.lebon
JLDR R0,[R4,#4]:
adr(7,Moglin):.CopLp LDRB R14,[R0],#1:STRB R14,[R7],#1
8CMP R14,#0:BNE CopLp:MOV R14,#
".":STRB R14,[R7,#-1]
FLDR R0,[R1,#&14]:.CopLp LDRB R14,[R0],#1:CMP R14,#0:CMPNE R14,#&0D
Q R14,#0:STRB R14,[R7],#1
BNE CopLp
LDR R0,[R12,#8]
.RepLp
>TEQ R0,#&40000001:BEQ Normal:
adr(7,Moglin):LDR R6,[R0,#4]
/.SeeIfSame LDRB R5,[R7],#1:LDRB R14,[R6],#1
CMP R5,#32:
Q R5,#0
CMP R14,#32:
Q R14,#0
"TEQ R14,#0:TEQEQ R5,#0:BEQ Yes
(CMP R14,R5:BEQ SeeIfSame:BNE NextOne
?LDMIA R1,{R0-R7}:MOV R6,R11:
adr(14,Brea):STMIA R14,{R0-R7}
LDMFD R13!,{R0-R12,R14}
adr(1,Brea):B myjump
.NextOne LDR R0,[R0]:B RepLp
).open_dir EQUS "sdirectoryo"+
0:ALIGN
*.sopen_dir EQUS "ssmall_diro"+
0:ALIGN
&.Trans EQUD 0:EQUD 0:EQUD 0:EQUD 0
5.FnameCHO EQUS "<FinalLook$OptionsFile>"+
0:ALIGN
&.Gm EQUS "(Opening file)"+
0:ALIGN
$.Lookup EQUS "(Lookup)"+
0:ALIGN
.DoOptions
STMFD R13!,{R0-R7,R14}
GADR R0,Trans:ADR R1,FnameCHO:MOV R2,#0:SWI "XMessageTrans_OpenFile"
ADRVS R0,Gm:BVS OptTrouble
!ADR R4,OptList:ADR R8,OptList
.OptLoop
ADR R0,Trans
LDR R1,[R4],#4 ; token
MOVS R1,R1:BMI OptEnd
*ADD R1,R1,R8 ; put to absolute address
ADR R2,Transbuf:MOV R3,#255
>STMFD R13!,{R4-R7}:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
ASWI "XMessageTrans_Lookup":LDMFD R13!,{R4-R7}:ADRVS R0,Lookup
BVS OptTrouble
LDR R1,[R4],#4 ; address
#ADD R1,R1,R8 ; absolute address
LDR R0,[R4],#4 ; type
CMP R0,#0:BNE NotBoolean
2; A boolean Yes or No ... test by first letter
4LDRB R2,[R2]:CMP R2,#
"a":BLT LetOk:CMP R2,#
ASUBLE R2,R2,#32:.LetOk CMP R2,#
"Y":MVNEQ R2,#0:STREQ R2,[R1]
?BEQ OptLoop:CMP R2,#
Q R2,#0:STREQ R2,[R1]:BEQ OptLoop
STRB R2,Err1+4
B UnBool
.NotBoolean
CMP R0,#1:BNE NotNumeric
; A numeric
7MOV R7,R1:MOV R1,R2:MOV R0,#0:SWI "OS_ReadUnsigned"
STR R2,[R7]:B OptLoop
.NotNumeric
; must be text so copy
>.Flobbadob LDRB R0,[R2],#1:CMP R0,#10:CMPNE R0,#0:
Q R0,#0
+STRB R0,[R1],#1:BNE Flobbadob:B OptLoop
.OptEnd
-ADR R0,Trans:SWI "MessageTrans_CloseFile"
ADR R0,Clios:SWI "OS_CLI"
LDMFD R13!,{R0-R7,PC}^
.UnBool
&ADR R0,Err1:SWI "OS_GenerateError"
LDMFD R13!,{R0-R7,PC}^
T.Err1 EQUS "!@#$Expecting 'Yes' or 'No' for an option ... cannot start"+
0:ALIGN
.OptTrouble
FADR R1,Job:.Lop LDRB R2,[R0],#1:STRB R2,[R1],#1:MOVS R2,R2:BNE Lop
&ADR R0,Err0:SWI "OS_GenerateError"
LDMFD R13!,{R0-R7,PC}^
g.Err0 EQUS "!@#$Cannot start !FinalLook as there has been a problem with the options file. - ":.Job
/;NB a runtime error overwrites from here on
ALIGN
.Clios
EQUS "Set WindowDrop$Path "
$.TexPathSet EQUS
255,"*"):ALIGN
.OptList
:EQUD Ptr_FontName-OptList:EQUD FontName-OptList:EQUD 2
<EQUD Ptr_FontXSize-OptList:EQUD FontXSize-OptList:EQUD 1
<EQUD Ptr_FontYSize-OptList:EQUD FontYSize-OptList:EQUD 1
;EQUD Ptr_TexPath-OptList:EQUD TexPathSet-OptList:EQUD 2
8EQUD Ptr_TexOn-OptList:EQUD TexOnFlag-OptList:EQUD 0
:EQUD Ptr_FontOn-OptList:EQUD FontOnFlag-OptList:EQUD 0
:EQUD Ptr_DirOpen-OptList:EQUD DirOnFlag-OptList:EQUD 0
6EQUD Ptr_Grey-OptList:EQUD GreyFlag-OptList:EQUD 0
EQUD -1
3.Ptr_FontName EQUS "FontName:Corpus.Medium"+
*.Ptr_FontXSize EQUS "FontXSize:170"+
*.Ptr_FontYSize EQUS "FontYSize:248"+
J.Ptr_TexPath EQUS "TexturePath:<FinalLook$Dir>.WindowDrop.Default."+
&.Ptr_TexOn EQUS "TexturesOn:No"+
$.Ptr_FontOn EQUS "FontsOn:No"+
+.Ptr_DirOpen EQUS "DirectoryOpen:No"+
*.Ptr_Grey EQUS "RemoveGreyBlobs:No"+
ALIGN
*.Transbuf ]:P%+=256:O%+=256:[OPT pass%
$.Brea ]:P%+=64:O%+=64:[OPT pass%
.Moglin
]P%+=1024:O%+=1024
"OS_File",10,"<FinalLook$Dir>.AllPatch",&FFA,,code%,O%
pass%=4
P%=&8000:O%=code%
[OPT pass%
.Alt_Key
STMFD R13!,{R0-R7,R14}
8MOV R0,#129:MOV R1,#256-3:MOV R2,#255:SWI "XOS_Byte"
BVS End
(CMP R2,#255:ADREQ R0,On:ADRNE R0,Off
SWI "XOS_CLI"
LDMFD R13!,{R0-R7,PC}^
).On EQUS "Set FinalLook$AltKey On"+
1.Off EQUS "Set FinalLook$AltKey Off"+
0:ALIGN
"OS_File",10,"<FinalLook$Dir>.AltCheck",&FFC,,code%,O%
bl(addr)
[OPT pass%
ADR R14,P%+16
R R14,R14,#3
LDR PC,P%+4
EQUD WimpMod+addr
Filer_bl(addr)
[OPT pass%
ADR R14,P%+16
R R14,R14,#3
LDR PC,P%+4
EQUD FilerMod+addr
adr(reg,addr)
[OPT pass%
LDR reg,P%+12
ADD reg,pc,reg
B P%+8
EQUD addr-P%