home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
a
/
appsswi
/
ZSource
/
ErrorSrc
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1995-04-23
|
40KB
|
1,226 lines
ErrorWindow 0.04 - give nice error windows, on RISC OS 3.1 and above
by AjC of DoggySoft
Requires BAX 1.00 or later to compile. Source best viewed in a big mode, 114 column formatting
trappedswi=&400DF-&400C0
scratchsize=256
minimumbuttonwidth=166
numberofbuttons=6
buttonthatdeletessprites=5
twospriteseparation=8
buttondelay=15
wimpinitver=200
icon_colourbox=0
icon_innerframe=2
icon_message=3
icon_title=4
icon_titlejoin=6
icon_typeicon=7
icon_application=8
icon_firstbutton=9
OS_WriteI=256
Wimp_TextOp=&400F9
XOS_WriteI=&20000+OS_WriteI
#XWimp_TextOp=&20000+Wimp_TextOp
service_reporterror=&57
service_errorstarting=&400C0
%service_errorbuttonpressed=&400C1
service_errorending=&400C2
os_byte_flush=21
os_byte_ptrshape=106
os_byte_scankeys=121
$!os_byte_acknowledgeescape=126
os_byte_readkeys=129
os_byte_readcmos=161
os_word_mouse=21
os_word_mouse_bbox=1
os_module_quit=4
os_module_claim=6
os_module_release=7
os_file_load=16
os_file_info=17
os_spriteop_select=24
os_spriteop_setpointer=36
0 os_spriteop_switchcontext=60
wimp_readsysinfo_task=5
wimp_readsysinfo_wimpver=7
wimp_textop_stringwidth=1
buffer_keyboard=0
buffer_mouse=9
cmos_wimpflags=197
iconflag_selected=21
iconflag_deleted=23
modevar_xpix=11
modevar_ypix=12
modevar_xeig=4
modevar_yeig=5
fbit=26
ibit=27
vbit=28
cbit=29
zbit=30
nbit=31
colour_blue=8
colour_red=11
colour_green=13
w=0 :wk_messagesblock=w
w+=4:wk_windowblock=w
w+=4:wk_indirblock=w
w+=4:wk_scratchblock=w
w+=4:wk_windowhandle=w
w+=4:wk_threaded=w
w+=4:wk_numberofbuttons=w
w+=4:wk_buttonwidth=w
w+=4:wk_firstuserbutton=w
w+=4:wk_describebutton=w
w+=4:wk_oldptrshape=w
w+=4:wk_temptaskhandle=w
V!w+=4:wk_baderrorcanceladded=w
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 mod_service
Equd mod_title
Equd mod_help
Equd 0
Equd 0
Equd 0
Equd 0
Equd 0
.serv_errorstarting
m# Equd service_errorstarting
.serv_errorbuttonpressed
p( Equd service_errorbuttonpressed
.serv_errorending
s! Equd service_errorending
.specialfilter
Equs "WSWI"
.wimptask
Equs "TASK"
.mod_title
Equz "3DErrorWindow"
Align
.mod_help
" Equs "3D Error Window"+
" Equz "0.04 (27 Apr 1995)"
.messagesfile
& Equz "3DErrorWindow:Messages"
.templatesfile
' Equz "3DErrorWindow:Templates"
.templatename
Equz "Error"
.t_oldtitleprefix
Equs "TitleO="
.t_newtitleprefix0
Equs "Title0="
.t_newtitleprefix1
Equs "Title1="
.t_newtitleprefix2
Equs "Title2="
.t_newtitleprefix3
Equs "Title3="
.t_newtitleprefix4
Equs "Title4="
.t_newtitleprefix5
Equs "Title5="
.t_titlefrom
Equs "TitleFrom="
.t_oldok
Equs "OldOK="
.t_newok
Equs "NewOK="
.t_cancel
Equs "Cancel="
.t_quit
Equs "Quit="
.t_describe
Equs "Describe="
.t_baderror
Equs "BadError="
.t_unknowntask
Equs "UnknownTask="
.spritetype0
Equz "error"
.spritetype1
Equz "information"
.spritetype2
Equz "warning"
.spritetype3
Equz "program"
.spritetype4
Equz "question"
.spritetype5
Equz "watchdog"
.ptr_default
Equz "ptr_default"
Align
.error_badmessages
Equd 0
3 Equz "3DErrorWindow Messages file missing"
Align
.error_nowindow
Equd 0
4 Equz "3DErrorWindow Error template missing"
Align
.mod_init
StmFd R13!,{R0-R4,R14}
! Mov R0,#os_module_claim
Mov R3,#w
Add R3,R3,#scratchsize
Swi "XOS_Module"
AddVs R13,R13,#4
V LdmVsFd R13!,{R1-R4,Pc} ; claim some workspace
Str R2,[R12]
Mov R12,R2
Add R0,R12,#w
' Str R0,[R12,#wk_scratchblock]
Mov R0,#0
# Str R0,[R12,#wk_threaded]
& Str R0,[R12,#wk_windowblock]
[ Str R0,[R12,#wk_indirblock] ; initialise some workspace
Mov R0,#os_file_info
AdrL R1,messagesfile
Swi "XOS_File"
BVs badinit
Teq R0,#1
" AdrNe R0,error_badmessages
BNe badinit
! Mov R0,#os_module_claim
Add R3,R4,#1
Swi "XOS_Module"
BVs badinit
( Str R2,[R12,#wk_messagesblock]
Mov R0,#os_file_load
AdrL R1,messagesfile
Mov R3,#0
Swi "XOS_File"
BVs badinit
( Ldr R2,[R12,#wk_messagesblock]
Mov R0,#0
] StrB R0,[R2,R4] ; load module's Messages file
AdrL R1,templatesfile
" Swi "XWimp_OpenTemplate"
BVs badinit
Mov R1,#0
Mov R2,#0
Mov R3,#0
Mvn R4,#0
AdrL R5,templatename
Mov R6,#0
" Swi "XWimp_LoadTemplate"
$ BVs badinit_closetemplates
Teq R0,#0
AdrEq R0,error_nowindow
$ BEq badinit_closetemplates
Add R4,R2,#4
! Mov R0,#os_module_claim
Add R3,R1,#4
Swi "XOS_Module"
$ BVs badinit_closetemplates
& Str R2,[R12,#wk_windowblock]
! Mov R0,#os_module_claim
Mov R3,R4
Swi "XOS_Module"
$ BVs badinit_closetemplates
% Str R2,[R12,#wk_indirblock]
& Ldr R1,[R12,#wk_windowblock]
Add R3,R2,R4
Mvn R4,#0
AdrL R5,templatename
Mov R6,#0
" Swi "XWimp_LoadTemplate"
$ BVs badinit_closetemplates
\ Swi "XWimp_CloseTemplate" ; load window into workspace
Ldr R0,specialfilter
Mov R1,#trappedswi
Orr R1,R1,#1<<31
Mov R2,R12
Adr R3,reporterror
Mov R4,#0
%$ Swi "XWimp_RegisterFilter"
&\ BVs badinit ; claim SWI Wimp_ReportError
LdmFd R13!,{R0-R4,Pc}^
.badinit_closetemplates
Mov R4,R0
+# Swi "XWimp_CloseTemplate"
Mov R0,R4
.badinit
Mov R4,R0
/& Ldr R2,[R12,#wk_windowblock]
Teq R2,#0
1# MovNe R0,#os_module_release
SwiNe "XOS_Module"
3% Ldr R2,[R12,#wk_indirblock]
Teq R2,#0
5# MovNe R0,#os_module_release
SwiNe "XOS_Module"
7# Mov R0,#os_module_release
Mov R2,R12
9\ Swi "XOS_Module" ; free any workspace claimed
Mov R0,R4
Add R13,R13,#4
LdmFd R13!,{R1-R4,R14}
=R OrrS Pc,R14,#1<<vbit ; and report error
.mod_quit
StmFd R13!,{R0-R3,R14}
Ldr R12,[R12]
Ldr R0,specialfilter
Mov R1,#trappedswi
Mov R2,R12
Adr R3,reporterror
Mov R4,#0
G^ Swi "XWimp_RegisterFilter" ; release SWI Wimp_ReportError
H# Mov R0,#os_module_release
Mov R2,R12
JS Swi "XOS_Module" ; release workspace
LdmFd R13!,{R0-R3,Pc}^
.mod_service
Teq R1,#&27
MovNeS Pc,R14
StmFd R13!,{R0-R2,R14}
Adr R0,callback
Adr R12,mod_title
So LdmFd R13!,{R0-R2,Pc}^ ; for various reasons, we can't survive a reset
.callback
StmFd R13!,{R0,R1,R14}
W Mov R0,#os_module_quit
Mov R1,R12
Swi "XOS_Module"
LdmFd R13!,{R0,R1,Pc}^
.reporterror
StmFd R13!,{R0-R7,R14}
^$ Ldr R14,[R12,#wk_threaded]
Teq R14,#0
LdmNeFd R13!,{R0-R7,Pc}^
Mov R14,#1
b$ Str R14,[R12,#wk_threaded]
Tst R1,#(1<<5)+(1<<6)
TstEq R1,#1<<31
eg BNe reporterror_passon ; we can't deal with these funny events
LdmFd R13!,{R2-R7}
g# AdrL R1,serv_errorstarting
Ldr R1,[R1]
Swi "XOS_ServiceCall"
jq StmFd R13!,{R2-R7} ; allow Service_ErrorStarting to change registers
.anothererror_jumpin
Ldr R1,[R13,#4]
Tst R1,#(1<<5)+(1<<6)
TstEq R1,#1<<31
og BNe reporterror_passon ; we can't deal with these funny events
Ldr R0,[R13]
Ldr R0,[R0]
Tst R0,#1<<31
sp BEq doerrorystuff ; skip this next rubbish unless a fatalish error
Tst R1,#1<<4
LdrNe R0,[R13,#8]
BNe taskname_string
w' Mov R0,#wimp_readsysinfo_task
x! Swi "XWimp_ReadSysInfo"
BVs doerrorystuff
Teq R0,#0
{/ SwiNe "XTaskManager_TaskNameFromHandle"
TeqVs R0,R0
LdrEq R0,[R13,#8]
Cmn R0,#1
BEq ta