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

  1.  EigenSysInfo 0.02 - Example of WimpSWIVe post-trapping
  2.  by AjC of DoggySoft
  3.  Requires BAX 1.00 or later to compile. Source best viewed in a big mode, 114 column formatting
  4. trappedswi=&400F2-&400C0
  5. modevar_yeig=5
  6. XOS_WriteI=&20100
  7. vbit=28
  8.  code 100000
  9.  0,"Error in compilation, pass "+
  10. pass+": "+
  11. $+", at line "+
  12.  pass=4
  13. O%=code:P%=0
  14. [OPT pass
  15.   Equd    0
  16.   Equd    mod_init
  17.   Equd    mod_quit
  18.   Equd    0
  19.   Equd    mod_title
  20.   Equd    mod_help
  21.   Equd    0
  22.   Equd    0
  23.   Equd    0
  24.   Equd    0
  25.   Equd    0
  26. .specialfilter
  27.   Equs    "WSWI"
  28. .mod_title
  29.   Equz    "EigenSysInfo"
  30. .mod_help
  31. '   Equs    "Eigen SysInfo"+
  32. ("  Equz    "0.02 (27 Apr 1995)"
  33. .suffix_hires
  34.   Equz    "22"
  35. .suffix_lores
  36.   Equz    "24"
  37.   Align
  38. .mod_init
  39.   StmFd   R13!,{R0-R4,R14}
  40.   Ldr     R0,specialfilter
  41.   Mov     R1,#trappedswi
  42.   Orr     R1,R1,#1<<31
  43.   Mov     R2,R12
  44. 8   Adr     R3,pre_readsysinfo
  45. 9!  Adr     R4,post_readsysinfo
  46. :\  Swi     "XWimp_RegisterFilter"                            ; claim SWI Wimp_ReadSysInfo
  47.   AddVs   R13,R13,#4
  48.   LdmVsFd R13!,{R1-R4,Pc}
  49.   Mov     R0,#0
  50. >s  Str     R0,[R12]                                          ; initialise single word workspace (=private word!)
  51.   LdmFd   R13!,{R0-R4,Pc}^
  52. .mod_quit
  53.   StmFd   R13!,{R0-R4,R14}
  54.   Ldr     R0,specialfilter
  55.   Mov     R1,#trappedswi
  56.   Mov     R2,R12
  57. F   Adr     R3,pre_readsysinfo
  58. G!  Adr     R4,post_readsysinfo
  59. H^  Swi     "XWimp_RegisterFilter"                            ; release SWI Wimp_ReadSysInfo
  60.   LdmFd   R13!,{R0-R4,Pc}^
  61. .pre_readsysinfo
  62.   StmFd   R13!,{R14}
  63.   Ldr     R14,[R12]
  64.   Cmp     R14,#0
  65.   AddGt   R14,R14,#1
  66.   StrGt   R14,[R12]
  67. Qe  LdmGtFd R13!,{Pc}^                                        ; count number of inner SysInfo calls
  68.   Teq     R0,#2
  69.   MovEq   R14,#1
  70. Tk  StrEq   R14,[R12]                                         ; flag as signifcant if correct reason code
  71.   LdmFd   R13!,{Pc}^
  72. .post_readsysinfo
  73.   StmFd   R13!,{R0-R2,R14}
  74.   Mov     R0,Pc
  75.   Ldr     R14,[R12]
  76.   Cmp     R14,#1
  77.   SubPl   R14,R14,#1
  78.   StrPl   R14,[R12]
  79. ^l  LdmNeFd R13!,{R0-R2,Pc}^                                  ; if SWI not flagged as significant, pass on
  80.   Tst     R0,#1<<vbit
  81. `b  LdmNeFd R13!,{R0-R2,Pc}^                                  ; if SWI returned an error, ignore
  82.   Mvn     R0,#0
  83.   Mov     R1,#modevar_yeig
  84. c$  Swi     "XOS_ReadModeVariable"
  85.   Cmp     R2,#2
  86.   AdrMi   R0,suffix_hires
  87. fg  AdrPl   R0,suffix_lores                                   ; get our suffix for YEig mode variable
  88.   LdmFd   R13!,{R1}
  89.   LdrB    R2,[R0]
  90.   LdrB    R14,[R1]
  91.   Teq     R2,R14
  92.   LdrEqB  R2,[R0,#1]
  93.   LdrEqB  R14,[R1,#1]
  94.   TeqEq   R2,R14
  95. nq  SwiNe   XOS_WriteI+7                                      ; go 'beep' if our suffix didn't match the WIMP's
  96. oI  LdmFd   R13!,{R1,R2,Pc}^                                  ; pass on
  97. qA  Equs    
  98. 10+"I am in control. Obey me and be free."+
  99. r?  Equs    "And... anything below here is probably a virus."
  100.  "OS_File",10,"<Program$Path>EigSysInfo",&FFA,,code,O%
  101.