home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / a / appsswi / ZSource / ErrorSrc (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1995-04-23  |  40KB  |  1,226 lines

  1.  ErrorWindow 0.04 - give nice error windows, on RISC OS 3.1 and above
  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=&400DF-&400C0
  5. scratchsize=256
  6. minimumbuttonwidth=166
  7. numberofbuttons=6
  8. buttonthatdeletessprites=5
  9. twospriteseparation=8
  10. buttondelay=15
  11. wimpinitver=200
  12. icon_colourbox=0
  13. icon_innerframe=2
  14. icon_message=3
  15. icon_title=4
  16. icon_titlejoin=6
  17. icon_typeicon=7
  18. icon_application=8
  19. icon_firstbutton=9
  20. OS_WriteI=256
  21. Wimp_TextOp=&400F9
  22. XOS_WriteI=&20000+OS_WriteI
  23. #XWimp_TextOp=&20000+Wimp_TextOp
  24. service_reporterror=&57
  25.  service_errorstarting=&400C0
  26. %service_errorbuttonpressed=&400C1
  27. service_errorending=&400C2
  28. os_byte_flush=21
  29. os_byte_ptrshape=106
  30. os_byte_scankeys=121
  31. $!os_byte_acknowledgeescape=126
  32. os_byte_readkeys=129
  33. os_byte_readcmos=161
  34. os_word_mouse=21
  35. os_word_mouse_bbox=1
  36. os_module_quit=4
  37. os_module_claim=6
  38. os_module_release=7
  39. os_file_load=16
  40. os_file_info=17
  41. os_spriteop_select=24
  42. os_spriteop_setpointer=36
  43. 0 os_spriteop_switchcontext=60
  44. wimp_readsysinfo_task=5
  45. wimp_readsysinfo_wimpver=7
  46. wimp_textop_stringwidth=1
  47. buffer_keyboard=0
  48. buffer_mouse=9
  49. cmos_wimpflags=197
  50. iconflag_selected=21
  51. iconflag_deleted=23
  52. modevar_xpix=11
  53. modevar_ypix=12
  54. modevar_xeig=4
  55. modevar_yeig=5
  56. fbit=26
  57. ibit=27
  58. vbit=28
  59. cbit=29
  60. zbit=30
  61. nbit=31
  62. colour_blue=8
  63. colour_red=11
  64. colour_green=13
  65. w=0 :wk_messagesblock=w
  66. w+=4:wk_windowblock=w
  67. w+=4:wk_indirblock=w
  68. w+=4:wk_scratchblock=w
  69. w+=4:wk_windowhandle=w
  70. w+=4:wk_threaded=w
  71. w+=4:wk_numberofbuttons=w
  72. w+=4:wk_buttonwidth=w
  73. w+=4:wk_firstuserbutton=w
  74. w+=4:wk_describebutton=w
  75. w+=4:wk_oldptrshape=w
  76. w+=4:wk_temptaskhandle=w
  77. V!w+=4:wk_baderrorcanceladded=w
  78.  code 100000
  79.  0,"Error in compilation, pass "+
  80. pass+": "+
  81. $+", at line "+
  82.  pass=4
  83. O%=code:P%=0
  84. [OPT pass
  85.   Equd    0
  86.   Equd    mod_init
  87.   Equd    mod_quit
  88.   Equd    mod_service
  89.   Equd    mod_title
  90.   Equd    mod_help
  91.   Equd    0
  92.   Equd    0
  93.   Equd    0
  94.   Equd    0
  95.   Equd    0
  96. .serv_errorstarting
  97. m#  Equd    service_errorstarting
  98. .serv_errorbuttonpressed
  99. p(  Equd    service_errorbuttonpressed
  100. .serv_errorending
  101. s!  Equd    service_errorending
  102. .specialfilter
  103.   Equs    "WSWI"
  104. .wimptask
  105.   Equs    "TASK"
  106. .mod_title
  107.   Equz    "3DErrorWindow"
  108.   Align
  109. .mod_help
  110. "  Equs    "3D Error Window"+
  111. "  Equz    "0.04 (27 Apr 1995)"
  112. .messagesfile
  113. &  Equz    "3DErrorWindow:Messages"
  114. .templatesfile
  115. '  Equz    "3DErrorWindow:Templates"
  116. .templatename
  117.   Equz    "Error"
  118. .t_oldtitleprefix
  119.   Equs    "TitleO="
  120. .t_newtitleprefix0
  121.   Equs    "Title0="
  122. .t_newtitleprefix1
  123.   Equs    "Title1="
  124. .t_newtitleprefix2
  125.   Equs    "Title2="
  126. .t_newtitleprefix3
  127.   Equs    "Title3="
  128. .t_newtitleprefix4
  129.   Equs    "Title4="
  130. .t_newtitleprefix5
  131.   Equs    "Title5="
  132. .t_titlefrom
  133.   Equs    "TitleFrom="
  134. .t_oldok
  135.   Equs    "OldOK="
  136. .t_newok
  137.   Equs    "NewOK="
  138. .t_cancel
  139.   Equs    "Cancel="
  140. .t_quit
  141.   Equs    "Quit="
  142. .t_describe
  143.   Equs    "Describe="
  144. .t_baderror
  145.   Equs    "BadError="
  146. .t_unknowntask
  147.   Equs    "UnknownTask="
  148. .spritetype0
  149.   Equz    "error"
  150. .spritetype1
  151.   Equz    "information"
  152. .spritetype2
  153.   Equz    "warning"
  154. .spritetype3
  155.   Equz    "program"
  156. .spritetype4
  157.   Equz    "question"
  158. .spritetype5
  159.   Equz    "watchdog"
  160. .ptr_default
  161.   Equz    "ptr_default"
  162.   Align
  163. .error_badmessages
  164.   Equd    0
  165. 3  Equz    "3DErrorWindow Messages file missing"
  166.   Align
  167. .error_nowindow
  168.   Equd    0
  169. 4  Equz    "3DErrorWindow Error template missing"
  170.   Align
  171. .mod_init
  172.   StmFd   R13!,{R0-R4,R14}
  173. !  Mov     R0,#os_module_claim
  174.   Mov     R3,#w
  175.    Add     R3,R3,#scratchsize
  176.   Swi     "XOS_Module"
  177.   AddVs   R13,R13,#4
  178. V  LdmVsFd R13!,{R1-R4,Pc}                                   ; claim some workspace
  179.   Str     R2,[R12]
  180.   Mov     R12,R2
  181.   Add     R0,R12,#w
  182. '  Str     R0,[R12,#wk_scratchblock]
  183.   Mov     R0,#0
  184. #  Str     R0,[R12,#wk_threaded]
  185. &  Str     R0,[R12,#wk_windowblock]
  186. [  Str     R0,[R12,#wk_indirblock]                           ; initialise some workspace
  187.   Mov     R0,#os_file_info
  188.   AdrL    R1,messagesfile
  189.   Swi     "XOS_File"
  190.   BVs     badinit
  191.   Teq     R0,#1
  192. "  AdrNe   R0,error_badmessages
  193.   BNe     badinit
  194. !  Mov     R0,#os_module_claim
  195.   Add     R3,R4,#1
  196.   Swi     "XOS_Module"
  197.   BVs     badinit
  198. (  Str     R2,[R12,#wk_messagesblock]
  199.   Mov     R0,#os_file_load
  200.   AdrL    R1,messagesfile
  201.   Mov     R3,#0
  202.   Swi     "XOS_File"
  203.   BVs     badinit
  204. (  Ldr     R2,[R12,#wk_messagesblock]
  205.   Mov     R0,#0
  206. ]  StrB    R0,[R2,R4]                                        ; load module's Messages file
  207.   AdrL    R1,templatesfile
  208. "  Swi     "XWimp_OpenTemplate"
  209.   BVs     badinit
  210.   Mov     R1,#0
  211.   Mov     R2,#0
  212.   Mov     R3,#0
  213.   Mvn     R4,#0
  214.   AdrL    R5,templatename
  215.   Mov     R6,#0
  216. "  Swi     "XWimp_LoadTemplate"
  217. $  BVs     badinit_closetemplates
  218.   Teq     R0,#0
  219.   AdrEq   R0,error_nowindow
  220. $  BEq     badinit_closetemplates
  221.   Add     R4,R2,#4
  222. !  Mov     R0,#os_module_claim
  223.   Add     R3,R1,#4
  224.   Swi     "XOS_Module"
  225. $  BVs     badinit_closetemplates
  226. &  Str     R2,[R12,#wk_windowblock]
  227. !  Mov     R0,#os_module_claim
  228.   Mov     R3,R4
  229.   Swi     "XOS_Module"
  230. $  BVs     badinit_closetemplates
  231. %  Str     R2,[R12,#wk_indirblock]
  232. &  Ldr     R1,[R12,#wk_windowblock]
  233.   Add     R3,R2,R4
  234.   Mvn     R4,#0
  235.   AdrL    R5,templatename
  236.   Mov     R6,#0
  237. "  Swi     "XWimp_LoadTemplate"
  238. $  BVs     badinit_closetemplates
  239. \  Swi     "XWimp_CloseTemplate"                             ; load window into workspace
  240.   Ldr     R0,specialfilter
  241.   Mov     R1,#trappedswi
  242.   Orr     R1,R1,#1<<31
  243.   Mov     R2,R12
  244.   Adr     R3,reporterror
  245.   Mov     R4,#0
  246. %$  Swi     "XWimp_RegisterFilter"
  247. &\  BVs     badinit                                           ; claim SWI Wimp_ReportError
  248.   LdmFd   R13!,{R0-R4,Pc}^
  249. .badinit_closetemplates
  250.   Mov     R4,R0
  251. +#  Swi     "XWimp_CloseTemplate"
  252.   Mov     R0,R4
  253. .badinit
  254.   Mov     R4,R0
  255. /&  Ldr     R2,[R12,#wk_windowblock]
  256.   Teq     R2,#0
  257. 1#  MovNe   R0,#os_module_release
  258.   SwiNe   "XOS_Module"
  259. 3%  Ldr     R2,[R12,#wk_indirblock]
  260.   Teq     R2,#0
  261. 5#  MovNe   R0,#os_module_release
  262.   SwiNe   "XOS_Module"
  263. 7#  Mov     R0,#os_module_release
  264.   Mov     R2,R12
  265. 9\  Swi     "XOS_Module"                                      ; free any workspace claimed
  266.   Mov     R0,R4
  267.   Add     R13,R13,#4
  268.   LdmFd   R13!,{R1-R4,R14}
  269. =R  OrrS    Pc,R14,#1<<vbit                                   ; and report error
  270. .mod_quit
  271.   StmFd   R13!,{R0-R3,R14}
  272.   Ldr     R12,[R12]
  273.   Ldr     R0,specialfilter
  274.   Mov     R1,#trappedswi
  275.   Mov     R2,R12
  276.   Adr     R3,reporterror
  277.   Mov     R4,#0
  278. G^  Swi     "XWimp_RegisterFilter"                            ; release SWI Wimp_ReportError
  279. H#  Mov     R0,#os_module_release
  280.   Mov     R2,R12
  281. JS  Swi     "XOS_Module"                                      ; release workspace
  282.   LdmFd   R13!,{R0-R3,Pc}^
  283. .mod_service
  284.   Teq     R1,#&27
  285.   MovNeS  Pc,R14
  286.   StmFd   R13!,{R0-R2,R14}
  287.   Adr     R0,callback
  288.   Adr     R12,mod_title
  289. So  LdmFd   R13!,{R0-R2,Pc}^                                  ; for various reasons, we can't survive a reset
  290. .callback
  291.   StmFd   R13!,{R0,R1,R14}
  292. W   Mov     R0,#os_module_quit
  293.   Mov     R1,R12
  294.   Swi     "XOS_Module"
  295.   LdmFd   R13!,{R0,R1,Pc}^
  296. .reporterror
  297.   StmFd   R13!,{R0-R7,R14}
  298. ^$  Ldr     R14,[R12,#wk_threaded]
  299.   Teq     R14,#0
  300.   LdmNeFd R13!,{R0-R7,Pc}^
  301.   Mov     R14,#1
  302. b$  Str     R14,[R12,#wk_threaded]
  303.   Tst     R1,#(1<<5)+(1<<6)
  304.   TstEq   R1,#1<<31
  305. eg  BNe     reporterror_passon                                ; we can't deal with these funny events
  306.   LdmFd   R13!,{R2-R7}
  307. g#  AdrL    R1,serv_errorstarting
  308.   Ldr     R1,[R1]
  309.   Swi     "XOS_ServiceCall"
  310. jq  StmFd   R13!,{R2-R7}                                      ; allow Service_ErrorStarting to change registers
  311. .anothererror_jumpin
  312.   Ldr     R1,[R13,#4]
  313.   Tst     R1,#(1<<5)+(1<<6)
  314.   TstEq   R1,#1<<31
  315. og  BNe     reporterror_passon                                ; we can't deal with these funny events
  316.   Ldr     R0,[R13]
  317.   Ldr     R0,[R0]
  318.   Tst     R0,#1<<31
  319. sp  BEq     doerrorystuff                                     ; skip this next rubbish unless a fatalish error
  320.   Tst     R1,#1<<4
  321.   LdrNe   R0,[R13,#8]
  322.   BNe     taskname_string
  323. w'  Mov     R0,#wimp_readsysinfo_task
  324. x!  Swi     "XWimp_ReadSysInfo"
  325.   BVs     doerrorystuff
  326.   Teq     R0,#0
  327. {/  SwiNe   "XTaskManager_TaskNameFromHandle"
  328.   TeqVs   R0,R0
  329.   LdrEq   R0,[R13,#8]
  330.   Cmn     R0,#1
  331.   BEq     ta