home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 1995-04-23 | 3.2 KB | 101 lines |
- EigenSysInfo 0.02 - Example of WimpSWIVe post-trapping
- by AjC of DoggySoft
- Requires BAX 1.00 or later to compile. Source best viewed in a big mode, 114 column formatting
- trappedswi=&400F2-&400C0
- modevar_yeig=5
- XOS_WriteI=&20100
- vbit=28
- code 100000
- 0,"Error in compilation, pass "+
- pass+": "+
- $+", at line "+
- pass=4
- O%=code:P%=0
- [OPT pass
- Equd 0
- Equd mod_init
- Equd mod_quit
- Equd 0
- Equd mod_title
- Equd mod_help
- Equd 0
- Equd 0
- Equd 0
- Equd 0
- Equd 0
- .specialfilter
- Equs "WSWI"
- .mod_title
- Equz "EigenSysInfo"
- .mod_help
- ' Equs "Eigen SysInfo"+
- (" Equz "0.02 (27 Apr 1995)"
- .suffix_hires
- Equz "22"
- .suffix_lores
- Equz "24"
- Align
- .mod_init
- StmFd R13!,{R0-R4,R14}
- Ldr R0,specialfilter
- Mov R1,#trappedswi
- Orr R1,R1,#1<<31
- Mov R2,R12
- 8 Adr R3,pre_readsysinfo
- 9! Adr R4,post_readsysinfo
- :\ Swi "XWimp_RegisterFilter" ; claim SWI Wimp_ReadSysInfo
- AddVs R13,R13,#4
- LdmVsFd R13!,{R1-R4,Pc}
- Mov R0,#0
- >s Str R0,[R12] ; initialise single word workspace (=private word!)
- LdmFd R13!,{R0-R4,Pc}^
- .mod_quit
- StmFd R13!,{R0-R4,R14}
- Ldr R0,specialfilter
- Mov R1,#trappedswi
- Mov R2,R12
- F Adr R3,pre_readsysinfo
- G! Adr R4,post_readsysinfo
- H^ Swi "XWimp_RegisterFilter" ; release SWI Wimp_ReadSysInfo
- LdmFd R13!,{R0-R4,Pc}^
- .pre_readsysinfo
- StmFd R13!,{R14}
- Ldr R14,[R12]
- Cmp R14,#0
- AddGt R14,R14,#1
- StrGt R14,[R12]
- Qe LdmGtFd R13!,{Pc}^ ; count number of inner SysInfo calls
- Teq R0,#2
- MovEq R14,#1
- Tk StrEq R14,[R12] ; flag as signifcant if correct reason code
- LdmFd R13!,{Pc}^
- .post_readsysinfo
- StmFd R13!,{R0-R2,R14}
- Mov R0,Pc
- Ldr R14,[R12]
- Cmp R14,#1
- SubPl R14,R14,#1
- StrPl R14,[R12]
- ^l LdmNeFd R13!,{R0-R2,Pc}^ ; if SWI not flagged as significant, pass on
- Tst R0,#1<<vbit
- `b LdmNeFd R13!,{R0-R2,Pc}^ ; if SWI returned an error, ignore
- Mvn R0,#0
- Mov R1,#modevar_yeig
- c$ Swi "XOS_ReadModeVariable"
- Cmp R2,#2
- AdrMi R0,suffix_hires
- fg AdrPl R0,suffix_lores ; get our suffix for YEig mode variable
- LdmFd R13!,{R1}
- LdrB R2,[R0]
- LdrB R14,[R1]
- Teq R2,R14
- LdrEqB R2,[R0,#1]
- LdrEqB R14,[R1,#1]
- TeqEq R2,R14
- nq SwiNe XOS_WriteI+7 ; go 'beep' if our suffix didn't match the WIMP's
- oI LdmFd R13!,{R1,R2,Pc}^ ; pass on
- qA Equs
- 10+"I am in control. Obey me and be free."+
- r? Equs "And... anything below here is probably a virus."
- "OS_File",10,"<Program$Path>EigSysInfo",&FFA,,code,O%
-