home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
a
/
appsswi
/
ZSource
/
EigenSrc
(
.txt
)
next >
Wrap
RISC OS BBC BASIC V Source
|
1995-04-23
|
3KB
|
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%