home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 1995-01-18 | 6.8 KB | 264 lines |
- >PatchAll
- By The Moog
- 1995 Matthew Godbolt
- $;" at line ";
- "OS_Module",18,"WindowManager"
- ,,,WimpMod
- code% &2000
- 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
- DEQUS "PatchAll"+
- 9+"1.10 (12 Jul 1993)
- 1995 Matthew Godbolt"
- EQUB 0
- ALIGN
- .init
- STMFD R13!,{R0,R1,R14}
- MOV R1,#8
- LDR R0,[R1]
- STR R0,oldbranch
- ADR R1,myjump-8
- SUB R0,R0,R1,LSR #2
- STR R0,myjump
- ADR R0,myswihand-&10
- MOV R0,R0,LSR #2
- R R0,R0,#&EA000000
- MOV R1,#8
- STR R0,[R1]
- ADR R1,fontname
- MOV R2,#13*16
- MOV R3,#13*16
- MOV R4,#0
- MOV R5,#0
- SWI "XFont_FindFont"
- MVNVS R0,#0
- STR R0,myfonthandle
- LDMFD R13!,{R0,R1,PC}
- .zox EQUD 0
- 72.fontname EQUS"Trinity.Medium"+
- 13:ALIGN
- .myfonthandle EQUD0
- .myjump B &1F033C0
- .final
- STMFD R13!,{R0,R1,R14}
- LDR R0,oldbranch
- MOV R1,#8
- STR R0,[R1]
- LDR R0,myfonthandle
- SWI "XFont_LoseFont"
- B;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
- LDMFD R13!,{R0,R1,PC}^
- D".oldbranch EQUD &EA6051CD
- .Mow EQUD &0
- .myswihand
- STMFD R13!,{R10,R14}
- BIC R14,R14,#&FC000003
- LDR R14,[R14,#-4]
- BIC R14,R14,#&FF000000
- STR R14,Mow
- BIC R14,R14,#&20000
- N)LDR R10,ploticon:CMP R14,R10:BEQ Plot
- O&LDR R10,ospl:CMP R14,R10:BEQ Write
- P)LDR R10,ClrBack:CMP R14,R10:BEQ Clear
- LDR R10,CreateM:CMP R14,R10
- R!LDMFD R13!,{R10,R14}:B myjump
- .Swi_cm
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0-R12,R14}
- BL Jacob
- LDMFD R13!,{R0-R12,R14}
- B myjump
- .Jacob
- STMFD R13!,{R14}
- \ TST R1,#3:LDMNEFD R13!,{PC}^
- ADD R1,R1,#28
- .Flopsy
- LDR R0,[R1,#8]
- `+LDRB R2,myfonthandle:BIC R0,R0,#&FF<<24
- R R0,R0,R2,LSL #24
- R R0,R0,#1<<6
- STR R0,[R1,#8]
- dSLDR R0,[R1,#4]:MOVS R0,R0:CMNNE R0,#1:BEQ NotIndied:CMP R0,#&8000:BLT NotIndied
- e8STMFD R13!,{R1}:SWI "OS_ValidateAddress":MOVCC R1,R0
- BLCC Jacob:LDMFD R13!,{R1}
- .NotIndied
- LDR R0,[R1]
- ADD R1,R1,#24
- TST R0,#&80:BEQ Flopsy
- LDMFD R13!,{PC}^
- .ploticon EQUD &400E2
- .ClrBack EQUD 256+16
- .CreateM EQUD &400D4
- .ospl EQUD &45
- .Word EQUD &E59AE05C
- .Wind EQUS "Wind"
- .Clear
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0-R12,R14}
- CMP R0,#1:BNE Normal
- y1LDR R0,[R10]:LDR R1,Wind:CMP R0,R1:BNE Normal
- z(LDR R0,[R10,#4]:CMN R0,#1:BEQ Normal
- {(BIC R14,R14,#&FC000003:LDR R14,[R14]
- |%LDR R0,Word:CMP R0,R14:BNE Normal
- LDR R0,[R10,#88]
- ~ORSB R6,R0,#0:.shpondle ADD R14,R6,#512:CMP R14,R2:MOVLT R6,R14:BLT shpondle
- LDR R0,[R10,#92]
- MRSB R7,R0,#0:.shpondle SUB R14,R7,#256:CMP R14,R3:MOV R7,R14:BGT shpondle
- =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
- STMFD R13!,{R0-R7}
- ;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
- 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}
- STR R2,ModeLoad
- .DontLoad
- MOV R8,R4:MOV R9,R5
- MOV R0,#&22:
- R R0,R0,#&100
- LDR R1,SpriteAt
- ADR R2,Backg
- !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,#512:CMP R3,R8:BLT Loop
- /MOV R3,R6:ADD R4,R4,#256:CMP R4,R9:BLT Loop
- LDMFD R13!,{R0-R12,R14}
- MOVS PC,R14
- .Normal
- LDMFD R13!,{R0-R12,R14}
- B myjump
- %.Backg EQUS "background"+
- 0:ALIGN
- .ModeLoad EQUD -1
- .SpriteAt EQUD 0
- :.Mode0 EQUS "<Patch$Dir>.WindowDrop.Sprites0"+
- 0:ALIGN
- <.Mode12 EQUS "<Patch$Dir>.WindowDrop.Sprites12"+
- 0:ALIGN
- <.Mode15 EQUS "<Patch$Dir>.WindowDrop.Sprites15"+
- 0:ALIGN
- .Word2 LDR R14,[R12,#84]
- .Word3 EQUD &0A00000C
- .Bonga EQUD 0
- .WriteMen EQUD &70D0121
- .Write
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0-R12,R14}
- ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
- &LDR R4,Word2:CMP R4,R14:BNE Normal
- 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
- )LDR R9,WriteMen:CMP R14,R9:BEQ Normal
- STMFD R13!,{R0-R2,R14}
- BMOV R0,#&87:SWI "XOS_Byte":LDMVSFD R13!,{R0-R2,R14}:BVS Normal
- /LDRB R0,ModeLast:CMP R0,R2:STRB R2,ModeLast
- BEQ Already
- STMFD R13!,{R0-R5}
- -LDRB R0,myfonthandle:SWI "XFont_LoseFont"
- ADR R1,fontname
- MOV R2,#13*16
- MOV R3,#13*16
- MOV R4,#0
- MOV R5,#0
- SWI "XFont_FindFont"
- MVNVS R0,#0
- STR R0,myfonthandle
- LDMFD R13!,{R0-R5}
- .Already
- LDMFD R13!,{R0-R2,R14}
- #TST R14,#2:
- Q R9,#0:MOVNE R9,#8
- 1CMP R9,#0: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
- .ModeLast EQUD
- .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,[R1,#&18]:LDRB R14,[R14,#1]:CMP R14,#
- "d":BNE Normal
- ILDR R0,[R4,#4]:ADR R7,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 R7,Moglin:LDR R6,[R0,#4]
- /.SeeIfSame LDRB R5,[R7],#1:LDRB R14,[R6],#1
- "TEQ R14,#0:TEQEQ R5,#0:BEQ Yes
- (CMP R14,R5:BEQ SeeIfSame:BNE NextOne
- CLDMIA R1,{R0-R7}:ADR R6,open_dir:ADR R14,Brea:STMIA R14,{R0-R7}
- LDMFD R13!,{R0-R12,R14}
- ADR R1,Brea:B myjump
- .NextOne LDR R0,[R0]:B RepLp
- ).open_dir EQUS "sdirectoryo"+
- 0:ALIGN
- $.Brea ]:P%+=64:O%+=64:[OPT pass%
- .Moglin
- ]P%+=256:O%+=256
- "OS_File",10,"<Patch$Dir>.AllPatch",&FFA,,code%,O%
- bl(addr)
- [OPT pass%
- ADR R14,P%+16
- R R14,R14,#3
- LDR PC,P%+4
- EQUD WimpMod+addr
-