home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / comms_networking / hearsay / !Hearsay / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1996-04-04  |  11KB  |  416 lines

  1.  > <Hearsay$Dir>.!RunImage
  2.  > A NewsBase-compatible newsreader
  3.  Chris Rutter, 1995
  4. error$="main"
  5.  debugmode%=
  6.  debugmode%=
  7. load_libraries
  8. error
  9. startup_variables
  10. open_messages_file
  11. prevariables
  12. compile_memory_stubs
  13. setup_wimp_messages
  14.  "Wimp_Initialise",310,&4B534154,taskname_long$,block% 
  15.  ,task_handle%
  16. 5initialised_functions%=initialised_functions% 
  17. postvariables
  18. load_sprites
  19. load_windows
  20. create_menus
  21. create_iconbar_icon
  22. broadcast_startup_message
  23. compile_newsbase_stubs
  24.  debugmode% 
  25. debug_message("memory_needed="+
  26. (memory_needed%))
  27.  debugmode% 
  28. debug_message("Startup complete.")
  29. wimp_error
  30.  "OS_ReadMonotonicTime" 
  31.  time%
  32.  "Wimp_Poll",1,block%,time%+12 
  33.  action%
  34.  speed enhancements
  35.  (action%=17 
  36.  action%=18) 
  37.  block%!16=NewsBase_Reply% 
  38. &5   
  39.  block%!20=100 
  40. newsbase_loggroup:action%=0
  41. '7   
  42.  block%!20=200 
  43. newsbase_logarticle:action%=0
  44. wimp_action(action%,block%)
  45.  error$<>"main" 
  46.  debugmode% 
  47. debug_message("Error stack was "+error$+" on return to main")
  48.   error$="main"
  49.  newspane_status_timeout%<>0 
  50. >newspane_status_timeout%+150 
  51. set_icon(newspane_window%,newspane_status%,"")
  52. 0   newspane_status_timeout%=0
  53.  quit%
  54.  debugmode% 
  55. debug_message("Shutting down...")
  56. clean_exit
  57. load_libraries
  58.  "HearsayLibs:Icons"
  59.  "HearsayLibs:General"
  60.  "HearsayLibs:Debug"
  61.  "HearsayLibs:Menus"
  62.  "HearsayLibs:Windows"
  63.  "HearsayLibs:NewsBase"
  64.  "HearsayLibs:Memory"
  65.  "HearsayLibs:Viewer"
  66. startup_variables
  67.  "Wimp_SlotSize",-1,-1 
  68.  slotsize%
  69. external_heapbase%=
  70. +4096
  71.  (external_heapbase% 
  72.  4)>0 
  73.  external_heapbase%-=(external_heapbase% 
  74.  heap_comments$(64)
  75. territory$="UK"
  76. error$="main"
  77. memory_needed%=0
  78.  debugmode%=
  79.  debugmode%=
  80. debug_monitor$=""
  81. article_group%=0
  82.  debugmode% 
  83.  debugwin%=
  84. verbose 
  85.  debug_history$(3200)
  86.  "Wimp_SlotSize",slotsize%+32*1024,-1 
  87.  slotsize%
  88.  debug_history$(64)
  89.  debug_pointer%=1
  90.  memory_needed%+=(128*32)
  91.  block% 2048:memory_needed%+=2048
  92. wbk%=block%+512
  93. wbk2%=wbk%+512
  94. wbk3%=wbk2%+512
  95. wbk4%=wbk3%+256
  96.  group_expanded% 128
  97.  group%
  98.  group%=0 
  99.  128 
  100.  group_expanded%!group%=0
  101.  group%
  102.  heap_anchorsfree% 256
  103.  anchor%
  104.  anchor%=0 
  105.  256 
  106. g  heap_anchorsfree%!anchor%=0
  107.  anchor%
  108.  heap_anchors% 256
  109.  anchorsheap%(64)
  110.  heapsanchor%(64)
  111.  heap_size%(64)
  112.  heap_base%(64)
  113. active_heaps%=0
  114.  (external_heapbase% 
  115.  4)<>0 
  116. pE external_heapbase%=4+external_heapbase%-(external_heapbase% 
  117. r!heaps_top%=external_heapbase%
  118. prevariables
  119. ael("prevariables")
  120.  debugmode% 
  121. debug_message("Initialising prevariables...")
  122. viewer_documentopen%=0
  123. NewsBase_Command%=&83580
  124. NewsBase_Reply%=&83581
  125. NewsBase_Update%=&83582
  126.  error% 256:memory_needed%+=256
  127. users_scanning%=
  128. newslist_scanning%=
  129. article_scanning%=
  130. Canchor_menu_users%=
  131. claim_heap_commented(28*20,"Menu of users")
  132. <anchor_users%=
  133. claim_heap_commented(32*20,"Users cache")
  134. Danchor_newslist%=
  135. claim_heap_commented(20*10,"Newsgroups cache")
  136. Panchor_newslisttext%=
  137. claim_heap_commented(20*20,"Newsgroups display cache")
  138. Manchor_newslistinfo%=
  139. claim_heap_commented(20*40,"Newsgroups info cache")
  140. Eanchor_groupanchor%=
  141. claim_heap_commented(128*16,"Group anchors")
  142. newspane_status_timeout%=0
  143. newslist_groups%=0
  144. postvariables
  145.  debugmode% 
  146. debug_message("Initialising wimp debugger...")
  147. debug_startup
  148. quit%=
  149. setup_wimp_messages
  150. ael("setup_wimp_messages")
  151.  debugmode% 
  152. debug_message("Setting up WIMP messages...")
  153. block%!0=&74f00
  154. block%!4=NewsBase_Command%
  155. block%!8=NewsBase_Reply%
  156. block%!12=NewsBase_Update%
  157. block%!16=&400c0
  158. block%!20=&feed10
  159. block%!24=&feed11
  160. block%!28=&feed12
  161. block%!32=0
  162. open_messages_file
  163. ael("open_messages_file")
  164.  message_size%,state%
  165. <>&feed 
  166.  0,"While trying to open the messages file the following error occured: "+
  167. error:
  168.  "OS_File",5,"<Hearsay$Dir>."+territory$+".Messages" 
  169.  state%,,,,message_size%
  170.  state%=0 
  171.  &feed,"Where
  172. s my Messages file gone?"
  173.  state%=2 
  174.  &feed,"My Messages file is a directory!"
  175.  message_desc% 16
  176.  message_filebuff% message_size%+16
  177.  message_buff% 256
  178. -memory_needed%+=(16+message_size%+256+16)
  179.  "MessageTrans_OpenFile",message_desc%,"<Hearsay$Dir>."+territory$+".Messages",message_filebuff%
  180. $taskname_short$=
  181. msg("TaskName")
  182. 'taskname_long$=
  183. msg("LongTaskName")
  184. #version%=
  185. msg("Version"))*100
  186. 5initialised_functions%=initialised_functions% 
  187. error
  188. ("Error Error in error trapping procedure : "+
  189. $+" at line "+
  190. clean_exit
  191.  "OS_CLI","Error An error occured during start up: "+
  192. error
  193. wimp_error
  194. ("Error Error in error trapping procedure : "+
  195. $+" at line "+
  196. !error%=
  197. =$(error%+4)=
  198. error+" (OK to continue, Cancel to quit)"+
  199.  "Wimp_ReportError",error%,(1<<0) 
  200.  (1<<1),taskname_long$ 
  201.  ,selected%
  202.  debugmode% 
  203. check_integrity
  204. enumerate_heaps
  205. enumerate_memory
  206.  debugmode% 
  207. debug_message(
  208. error)
  209.  selected%=2 
  210.  quit%=
  211. clean_exit
  212. error$="main"
  213. clean_exit
  214. ael("clean_exit")
  215.  report_copy$
  216. report_copy$=
  217. error
  218.  0,report_copy$+" [clean_exit error="+
  219. error+"]":
  220.  (initialised_functions% 
  221.  2)=2 
  222. debug_shutdown
  223.  (initialised_functions% 
  224.  1)=1 
  225.  "MessageTrans_CloseFile",message_desc%
  226.  (initialised_functions% 
  227.  8)=8 
  228. broadcast_shutdown_message
  229.  (initialised_functions% 
  230.  4)=4 
  231.  "Wimp_CloseDown",task_handle%,&4b534154
  232. initialised_functions%=0
  233. load_windows
  234.  state%
  235. ael("load_windows")
  236.  debugmode% 
  237. debug_message("Loading windows...")
  238.  "OS_File",5,"<Hearsay$Dir>."+territory$+".Templates" 
  239.  state%
  240.  state%=0 
  241. msg("NoTemplates")
  242.  state%=2 
  243. msg("TemplatesDirectory")
  244.  "Wimp_OpenTemplate",,"<Hearsay$Dir>."+territory$+".Templates"
  245. %info_window%=
  246. load_window("Info")
  247. %news_window%=
  248. load_window("News")
  249. -newspane_window%=
  250. load_window("NewsPane")
  251. )viewer_window%=
  252. load_window("Viewer")
  253.  "Wimp_CloseTemplate"
  254. set_icon(info_window%,7,
  255. msg("Version")+" ("+
  256. msg("Date")+")"+" ["+
  257. msg("InternalVersion")+"]")
  258. !wbk%=newspane_window%
  259.  "Wimp_GetWindowState",,wbk%
  260. #newspane_height%=wbk%!16-wbk%!8
  261. find_icons
  262. find_icons
  263. newspane_status%=2
  264. newspane_menu%=1
  265. newspane_user%=0
  266. create_menus
  267. ael("create_menus")
  268.  debugmode% 
  269. debug_message("Creating menus...")
  270. create_menu_main
  271. create_menu_main
  272. -menu_main%=
  273. menu_start(taskname_short$,3)
  274. menu_itemlink("#Info",info_window%)
  275. menu_itemsubmenu("#Users",1)
  276. menu_item("#Quit")
  277. menu_finish(menu_main%)
  278. create_iconbar_icon
  279.  debugmode% 
  280. debug_message("Creating iconbar icon...")
  281. block%!0=-1
  282. block%!4=0
  283. block%!8=0
  284. block%!12=76
  285. block%!16=76
  286. block%!20=&3002
  287. $(block%+24)="!hearsay"
  288.  "Wimp_CreateIcon",,block% 
  289.  iconbar_icon%
  290. wimp_action(action%,block%)
  291.  error$<>"main" 
  292. ael("wimp_action")
  293.  action% 
  294. %  !newslist_info=newslist_groups%
  295.  poll_redraw%
  296.  !block%=news_window% 
  297. "*   
  298. intercept_news_window_open(block%)
  299. $?   
  300.  !block%<>newspane_window% 
  301.  "Wimp_OpenWindow",,block%
  302.  !block%=viewer_window% 
  303. viewer_closedocument
  304. *$   
  305.  "Wimp_CloseWindow",,block%
  306. +?   
  307.  !block%=news_window% 
  308. close_window(newspane_window%)
  309.  6 : 
  310. poll_mouse(block%!0,block%!4,block%!8,block%!12,block%!16)
  311.  9 : 
  312. poll_menu(block%)
  313.  17,18 : 
  314. poll_message(block%!16,block%)
  315.  error$<>"main" 
  316. poll_menu(block%)
  317. ael("poll_menu")
  318.  debugmode% 
  319. verbose 
  320. debug_message("Menu selection "+
  321. (block%!0))
  322.  menu_last% 
  323.  menu_main%
  324.  block%!0 
  325. ;P    
  326.  block%!4>-1 
  327. change_user(
  328. menu_itemtext(!anchor_menu_users%,block%!4))
  329.  2 : quit%=
  330.  !anchor_menu_users%
  331.  block%!0>-1 
  332. change_user(
  333. menu_itemtext(!anchor_menu_users%,block%!0))
  334. poll_mouse(mouse_x%,mouse_y%,button%,window%,icon%)
  335. ael("poll_mouse")
  336.  debugmode% 
  337. verbose 
  338. debug_message("Mouse click in window "+
  339. hexadecimal(window%)+" on icon "+
  340. (icon%))
  341.  window% 
  342.  icon% 
  343.  iconbar_icon%
  344.  button% 
  345.      
  346. M,      
  347.  (initialised_functions% 
  348.  8)=8 
  349. N%       
  350. open_window(news_window%)
  351.       
  352. P%       
  353. broadcast_startup_message
  354.       
  355. R1     
  356.  2 : 
  357. menu_showbar(menu_main%,mouse_x%)
  358. S        
  359.  news_window% : 
  360. news_window_click
  361.  newspane_window%
  362.  icon%=newspane_menu% 
  363. prepare_usersmenu
  364. Y8   
  365. menu_showicon(!anchor_menu_users%,window%,icon%)
  366. poll_message(message%,block%)
  367. ael("poll_message")
  368.  debugmode% 
  369. verbose 
  370. debug_message("Incoming message...["+
  371. hexadecimal(message%)+"]")
  372.  message% 
  373.  0                : quit%=
  374.  &400c0
  375. prepare_usersmenu
  376.  "Wimp_CreateSubMenu",,!anchor_menu_users%,block%!24,block%!28
  377.  &74f00           : 
  378. debug_receivemessage
  379.  NewsBase_Reply%  : 
  380. newsbase_receivemessage
  381.  NewsBase_Update% : 
  382. newsbase_updatemessage
  383.  message%=&feed11 
  384.  message%=&feed12 
  385. l    NewsBase_Command%=&feed10
  386.    NewsBase_Reply%=&feed11
  387.    NewsBase_Update%=&feed12
  388. o%   
  389. poll_message(message%,block%)
  390.  message%=&83581 
  391.  message%=&83582 
  392.    NewsBase_Command%=&83580
  393.    NewsBase_Reply%=&83581
  394.    NewsBase_Update%=&83582
  395. u%   
  396. poll_message(message%,block%)
  397. mpad(ref%)
  398. wbk2%!0=252
  399. wbk2%!12=ref%
  400. npad(ref%)
  401. wbk2%!0=252
  402. wbk2%!12=ref%
  403. wbk2%!16=NewsBase_Command%
  404. mpadl(length%,ref%)
  405. wbk2%!0=length%
  406. wbk2%!12=ref%
  407. poll_opennewspane
  408.  word%
  409. ael("poll_opennewspane")
  410.  word%=0 
  411.  wbk%!word%=block%!word%
  412.  word%
  413. update_newspane(wbk%)
  414. block%!28=newspane_window%
  415. verbose
  416.