home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / desktop / iconthang_2 / !IconThang / UnCrunched (.txt) < prev   
RISC OS BBC BASIC V Source  |  1997-09-26  |  24KB  |  1,089 lines

  1.  ><iconthang$dir>.!RunImage
  2. ?MS%=8096 : 
  3.  This is the amount of menu area, edit at will.
  4. 0NA%=256  : 
  5.  This is the max number of items
  6. ?ME%=15   : 
  7.  This is the number of icon/menus there can be.
  8. vsn$="3.49b":vsn$=vsn$
  9. taskname$="IconThang"
  10. dirname$="<iconthang$dir>"
  11. config$=dirname$+".config"
  12. maintitle$="unset"
  13. error_open% = 0
  14. clear_error_time% = 0
  15. "OS_Byte",129,0,&FF 
  16.  ,osv%:RO35%=osv%>&A4
  17. nagg(
  18. $+" at line "+
  19.  taskid% 8:$taskid%="TASK"
  20. "Wimp_Initialise",200,!taskid%,taskname$ 
  21.  version%,taskhand%
  22.  block% 1024,menuarea% MS%,menuptr%(ME%-1),mname$(ME%-1),fullname$(NA%),leaf$(NA%),items_base%(ME%-1)
  23.  indmenptr%=0:indmenlim%=2048
  24.  indmen% indmenlim%
  25. "OS_ReadModeVariable",-1,4 
  26.  ,,xeig%
  27. "OS_ReadModeVariable",-1,5 
  28.  ,,yeig%
  29. 4hires%=(xeig%=yeig%) 
  30.  (xeig%<2):title%=hires%=0
  31. .oldres%=hires%:modechanged%=
  32. :pointerin%=
  33. autoiconsprite%=
  34. openatleft%=
  35. fudge_deskfont%=
  36.  .old_desk_font$=
  37. OS_ReadVarVal("Wimp$Font")
  38. "Hourglass_On"
  39. #(sprites22%=
  40. loadsprites("Sprites22")
  41. $(sprites24%=
  42. loadsprites("Sprites24")
  43. templates
  44. initmenus
  45.  hires% 
  46.  mwin%=main% 
  47.  mwin%=mait%
  48. "Hourglass_Off"
  49. openmain(-1)
  50. +Jpollmask%=1:
  51. error_txt("My
  52. IconThang comes
  53. crashing
  54. through! "+
  55. bfree)
  56. "OS_ReadMonotonicTime" 
  57.  acurist%
  58.  error_open% 
  59.  acurist%>=clear_error_time% 
  60.    !block%=error_win%
  61. 1#   
  62. "Wimp_CloseWindow",,block%
  63.    error_open%=
  64.  pollmask% 
  65.  error_open% 
  66.  max_time%=clear_error_time%-acurist% 
  67.  max_time%=100
  68.  max_time%<0 
  69.  max_time%=1
  70.  max_time%>100 
  71.  max_time%=100
  72. "Wimp_PollIdle",0,block%,acurist%+max_time% 
  73.  reason%
  74. "Wimp_Poll",0,block% 
  75.  reason%
  76.  reason% 
  77.  0 : 
  78.  pointerin% 
  79. checkicn
  80.  1 : 
  81. redraw_window
  82.  2 : 
  83. open_window
  84.  3 : 
  85.  "Wimp_CloseWindow",,block%
  86.  9 : 
  87. menuclick(block%)
  88.  6 : 
  89. iconclicked(block%!12,block%!16)
  90.  4 : pollmask%=1:pointerin%=
  91.  5 : pollmask%=0:pointerin%=
  92.  17,18:
  93. user_message
  94.  19 : 
  95. user_message_acknowledge
  96.  pointerin%=
  97. tbareek
  98. open_window
  99. O(   
  100.  !block%=main% 
  101.  !block%=mait% 
  102. P.     
  103. openfudge                           
  104. Q.   
  105.                                       
  106. R0     
  107. "Wimp_OpenWindow",,block%            
  108. nagg(nagg$)
  109. X7   
  110. "Wimp_ReportError","    "+nagg$,1<<4,taskname$
  111. \,   
  112. "Wimp_CloseDown",taskhand%,!taskid%
  113. user_message
  114.  block%!16 
  115.  &400C1:
  116. modechange
  117. user_message_acknowledge
  118.  block%!16 
  119. j       
  120. recieve_dataopen
  121. file(where%)
  122. file$=""
  123.  ?where%>31
  124. file$+=
  125. (?where%)
  126. where%+=1
  127. =file$
  128. exists(a$)
  129. a$,1)="*" 
  130. z!   
  131. "XOS_File",17,a$ 
  132.  t%;F%
  133.  t%=2 
  134.  t%=3 
  135.  t%=0 
  136. initmenus
  137.   indmenptr%=0
  138. E  i%=
  139. initmenu(menuarea%,"IconThang "+vsn$):menuptr%(0)=menuarea%
  140. .  i%=
  141. additem(i%,"Auto sprite change",0,7)
  142.  RO35% 
  143. additem(i%,"Auto font change",0,7)
  144. "  i%=
  145. additem(i%,"On LHS",0,7)
  146. dlineprev(i%)
  147. '  i%=
  148. additem(i%,"Edit Config",0,7)
  149. )  i%=
  150. additem(i%,"Reload Config",0,7)
  151. dlineprev(i%)
  152. H  i%=
  153. additem(i%,"Force !Sprites22",0,
  154. exists("Sprites:!Sprites22"))
  155. D  i%=
  156. additem(i%,"Force !Sprites",0,
  157. exists("Sprites:!Sprites"))
  158.  RO35% 
  159. 1     i%=
  160. additem(i%,"Force outline font",0,7)
  161. 0     i%=
  162. additem(i%,"Force system font",0,7)
  163. dlineprev(i%)
  164. "  i%=
  165. additem(i%,"Quit",-1,11)
  166.   menuarea%!16=16*18+16
  167. &  menunum%=0:appctr%=0:longname%=0
  168.   file%=
  169. (config$)
  170.   menu$=
  171. getline(file%)
  172. 3  autoiconsprite%=
  173. menu$,1)="y" 
  174. menu$,1)="Y"
  175. tick(menuarea%,"Auto sprite change",autoiconsprite%)
  176.   menu$=
  177. getline(file%)
  178. /  openatleft%=
  179. menu$,1)="L" 
  180. menu$,1)="l"
  181. tick(menuarea%,"On LHS",openatleft%)
  182.   menu$=
  183. getline(file%)
  184. menu$,9)<>"Fontmung " 
  185.      fudge_deskfont%=
  186. <     fudge_deskfont%=
  187. menu$,10,1)="Y" 
  188. menu$,10,1)="y"
  189. F     
  190.  RO35% 
  191. tick(menuarea%,"Auto font change",fudge_deskfont%)
  192.      menu$=
  193. getline(file%)
  194.  "Hourglass_On"
  195. #file%
  196.     menunum%+=1
  197. M    
  198.  menunum%=ME% 
  199. #file%:
  200. nagg("Menu/Icon count overrun! -POP-"):
  201.     menuptr%(menunum%)=i%
  202.     longname%=
  203. (menu$)
  204.     sprite$=
  205. getline(file%)
  206. M    
  207. changeval(main%,menunum%+1,"s"+sprite$):
  208.  *** 3.43 *** +1 to icn num
  209. M    
  210. changeval(mait%,menunum%+1,"s"+sprite$):
  211.  *** 3.43 *** +1 to icn num
  212. (    mname$(menunum%)=
  213. getline(file%)
  214.     i%=
  215. initmenu(i%,menu$)
  216.     item$=
  217. getline(file%)
  218. 7    items_base%(menunum%) = appctr%: 
  219.  *** 3.43 ***
  220.     gotfitem%=
  221.  item$<>"**"
  222.       
  223.  (item$<>"-") 
  224.         menu_text$=""
  225.         
  226. item$,1)="\" 
  227. $           sslash%=
  228. item$,"\",2)
  229.            
  230.  ( sslash% ) 
  231. 0              menu_text$=
  232. item$,2,sslash%-2)
  233. 8              item$=
  234. item$,
  235. (item$)-
  236. (menu_text$)-2)
  237.            
  238.         
  239. :        
  240. "Hourglass_Percentage",(100*
  241. #file%)/
  242. #file%
  243. "        leaf$=
  244. leafname(item$)
  245. D        
  246.  leaf$=item$ 
  247. item$,1)="*" 
  248.  leaf$=
  249. item$,
  250. (item$)-1)
  251. J        
  252.  appctr%>NA% 
  253. #file%:
  254. nagg("Item count overrun! Bye!"):
  255. 9        leaf$(appctr%)=leaf$:fullname$(appctr%)=item$
  256. *        appctr%+=1:col%=
  257. exists(item$)
  258. .        
  259.  menu_text$="" 
  260.  menu_text$=leaf$
  261. ?        
  262. (menu_text$)>longname% 
  263.  longname%=
  264. (menu_text$)
  265. !        item$=
  266. getline(file%)
  267. 6        i%=
  268. additem(i%,menu_text$,item$="**",col%)
  269.         gotfitem%=
  270.       
  271. !        item$=
  272. getline(file%)
  273. 6        
  274.  item$<>"**" 
  275.  gotfitem% 
  276. dlineprev(i%)
  277.       
  278.         
  279. 0    !(menuptr%(menunum%)+16)=16*longname%+24
  280.     menu$=
  281. getline(file%)
  282. #file%
  283.  "Hourglass_Percentage",0
  284.  "Hourglass_Off"
  285. getline(f%)
  286.     a$=
  287.  ( a$<>"" 
  288. a$,1)<>"#" ) 
  289. a$,1)="#" 
  290.  a$="" 
  291.  ="***EOF***"
  292. popupmenu(menu%)
  293.  "Wimp_GetPointerInfo",,block%
  294. ?q=!block%:w=block%!4:w%=block%!12:i%=block%!16:w=menutop%-8
  295.  title% 
  296.  w-=4
  297.  (block%!8 
  298.  menu%<0 
  299.  menu%=0:w+=96
  300.  menu%>=0 
  301.  menu%<ME% 
  302.  "Wimp_CreateMenu",,menuptr%(menu%),q-64,w-32
  303. 2  lastmenu%=menuptr%(menu%):menx%=q-64:meny%=w
  304. frontback
  305. templates
  306. buffer%=block%
  307.  indirect% 800:wl%=indirect%+800
  308. "Wimp_OpenTemplate",,dirname$+".templates"
  309.  main window (high res)
  310. "Wimp_LoadTemplate",,buffer%,indirect%,wl%,-1,"main",0 
  311.  ,,indirect%
  312. C   buffer%!64=sprites22%:
  313. "Wimp_CreateWindow",,buffer% 
  314.  main%
  315. B   width22%=buffer%!8-buffer%!0:height22%=buffer%!12-buffer%!4
  316.  main window (low res)
  317. "Wimp_LoadTemplate",,buffer%,indirect%,wl%,-1,"maint",0 
  318.  ,,indirect%
  319. C   buffer%!64=sprites24%:
  320. "Wimp_CreateWindow",,buffer% 
  321.  mait%
  322. B   width24%=buffer%!8-buffer%!0:height24%=buffer%!12-buffer%!4
  323.  error report window
  324. "Wimp_LoadTemplate",,buffer%,indirect%,wl%,-1,"error",0 
  325.  ,,indirect%
  326. "Wimp_CreateWindow",,buffer% 
  327.  error_win%
  328. "Wimp_CloseTemplate"
  329. loadsprites(name$)
  330. file%=
  331. (dirname$+"."+name$)
  332.  file%=0 
  333. nagg("Can't find spritefile '"+name$+"'"):
  334. 5S%=(
  335. #file%)+1024:
  336.  for possible future expansion
  337. #file%
  338.  sprites% S%
  339. sprites%!0=S%
  340. sprites%!8=16
  341. "OS_SpriteOp",9+256,sprites%
  342. "OS_SpriteOp",10+256,sprites%,dirname$+"."+name$
  343. =sprites%
  344. reloadsprites(sprites%,name$)
  345. "OS_SpriteOp",10+256,sprites%,dirname$+"."+name$
  346. openmain(where%)
  347. "OS_ReadModeVariable",-1,4 
  348.  ,,xeig%
  349. "OS_ReadModeVariable",-1,5 
  350.  ,,yeig%
  351. 6  hires%=(xeig%=yeig%) 
  352.  (xeig%<2):title%=hires%=0
  353.  hires% 
  354.  mwin%=main% 
  355.  mwin%=mait%
  356.   !block%=mwin%
  357. "Wimp_GetWindowState",,block%
  358. /  mhig%=
  359. read_mode(-1,12)<<
  360. read_mode(-1,5)
  361. /  mwid%=
  362. read_mode(-1,11)<<
  363. read_mode(-1,4)
  364.  hires% 
  365. *     width%=width22%:height%=height22%
  366. *     width%=width24%:height%=height24%
  367.  width%=(block%!52)-(block%!44):REM was (block%!12)-(block%!4)
  368.  height%=(block%!56)-(block%!48):REM was (block%!16)-(block%!8)
  369.   block%!4=mwid%-width%
  370.  openatleft% 
  371.  block%!4=0 : 
  372.  **** NEW *****
  373.  !  block%!12=(block%!4)+width%
  374.   block%!8=mhig% - height%
  375.   menutop%=mhig% - height%
  376. #   block%!16=block%!8+height%
  377.  where% 
  378.  block%!28=where%
  379. "Wimp_OpenWindow",,block%
  380. openfudge
  381. )/  mhig%=
  382. read_mode(-1,12)<<
  383. read_mode(-1,5)
  384. */  mwid%=
  385. read_mode(-1,11)<<
  386. read_mode(-1,4)
  387.  hires% 
  388. ,*     width%=width22%:height%=height22%
  389. .*     width%=width24%:height%=height24%
  390.  width%=(block%!12)-(block%!4)
  391.  height%=(block%!16)-(block%!8)
  392.   block%!4=mwid%-width%
  393.  openatleft% 
  394.  block%!4=0 : 
  395.  **** NEW *****
  396. 4!  block%!12=(block%!4)+width%
  397.   block%!8=mhig% - height%
  398.   menutop%=mhig% - height%
  399. 7   block%!16=block%!8+height%
  400.   posn%=block%!28
  401. "Wimp_OpenWindow",,block%
  402.  modechanged% 
  403. ;0    
  404.  hires% 
  405.  !block%=mait% 
  406.  !block%=main%
  407. <$    
  408. "Wimp_CloseWindow",,block%
  409. openmain(posn%)
  410.     modechanged%=
  411. changeval(window%,icon%,to$)
  412. nagg(
  413. $+" changing val ("+
  414.  window%+"/"+
  415.  icon%+") to "+to$):
  416. !block%=window%
  417. block%!4=icon%
  418. "Wimp_GetIconState",,block%
  419. $(block%!32)=to$
  420. block%!8=0
  421. block%!12=0
  422. "Wimp_SetIconState",,block%
  423. menuclick(brtnd%)
  424.   menu_item%=!brtnd%
  425. Q(  menu_number% = 
  426. menunum(lastmenu%)
  427. "Wimp_GetPointerInfo",,brtnd%+32
  428.   adjust%=(brtnd%!40) 
  429.  menu_number% = 0 
  430. W9      
  431. "Wimp_DecodeMenu",,lastmenu%,block%,block%+32
  432. X       item$=
  433. file(block%+32)
  434.       
  435.  item$ 
  436.         
  437.  "Quit" :
  438. [+           
  439.  adjust%=0 
  440. (-2)=0) 
  441. \0           
  442. filer_opendir("<ICONTHANG$DIR>")
  443. ]G           
  444.  fod$="Filer_OpenDir "+FNOS_ReadVarVal("ICONTHANG$DIR")
  445. ^"           
  446.  SYS"XOS_CLI",fod$
  447.            
  448. `$        
  449.  "Auto sprite change" :
  450. a1           autoiconsprite%=
  451. (autoiconsprite%)
  452. bD           
  453. tick(lastmenu%,"Auto sprite change",autoiconsprite%)
  454.         
  455.  "On LHS" :
  456. d)           openatleft%=
  457. (openatleft%)
  458. e4           
  459. tick(lastmenu%,"On LHS",openatleft%)
  460.            
  461. openmain(0)
  462.         
  463.  "Edit Config" :
  464. h"           
  465. Filer_Run(config$)
  466.         
  467.  "Reload Config" :
  468.            
  469. "Hourglass_On"
  470.            
  471. initmenus
  472. l#           
  473. updatewindow(main%)
  474. m#           
  475. updatewindow(mait%)
  476. n5           
  477. reloadsprites(sprites22%,"Sprites22")
  478. o5           
  479. reloadsprites(sprites24%,"Sprites24")
  480. pF           
  481. error_txt("Configuration Reloaded"+
  482. 160+"OK. "+
  483. bfree)
  484.            
  485. openmain(0)
  486. r            
  487. "Hourglass_Off"
  488. s"        
  489.  "Force !Sprites22" :
  490. t.           
  491. doiconsprites("22",sprites22%)
  492. u'           
  493.  SYS"Wimp_SetMode",MODE
  494.            
  495. redraw_screen
  496. w         
  497.  "Force !Sprites" :
  498. x<           
  499. force24:
  500.  cuz Iconsprites will bugger it up.
  501. y3           
  502. error_txt("Iconsprites changed OK")
  503. z'           
  504.  SYS"Wimp_SetMode",MODE
  505.            
  506. redraw_screen
  507. |         
  508.  "Auto font change"
  509. }1           fudge_deskfont%=
  510. (fudge_deskfont%)
  511. ~B           
  512. tick(lastmenu%,"Auto font change",fudge_deskfont%)
  513. "        
  514.  "Force outline font"
  515.            
  516. fudge_font(
  517. !        
  518.  "Force system font"
  519.            
  520. fudge_font(
  521.       
  522. *      
  523. action(menu_number%,menu_item%)
  524.  adjust% 
  525. "Wimp_CreateMenu",,lastmenu%,menx%,meny%
  526. force24
  527.  "XOS_SpriteOp",36+256,sprites24%,"is_ptr",%0000001,0,0,0,0
  528.  SYS"Hourglass_Off"
  529. "XWimp_SpriteOp",11,,"Sprites:!Sprites" 
  530.  E%;F%
  531. "XOS_CLI","Pointer"
  532. error_swi(E%)
  533.  DEF PROCopenwindowxy(window%,x%,y%)
  534.  !block%=window%
  535.  SYS"Wimp_GetWindowState",,block%
  536.    !block%=window%
  537.    SYS"Wimp_GetWindowInfo",,block%
  538.    width%=(block%!12)-(block%!4)
  539.    hite%=(block%!16)-(block%!8)
  540.    block%!4=x%
  541.    block%!12=(block%!4)+width%
  542.    block%!16=y%
  543.    block%!8=(block%!16)-hite%
  544.    block%!28=-1
  545.  SYS"Wimp_OpenWindow",,block%
  546.  ENDPROC
  547. read_mode(mode%,var%)
  548.  "OS_ReadModeVariable",mode%,var% 
  549.  ,,value%
  550. =value%
  551. leafname(name$)
  552. leaf$=""
  553.  name$<>"" 
  554. name$,1)<>"." 
  555. name$,1)<>":"
  556.   leaf$=
  557. name$,1)+leaf$
  558.   name$=
  559. name$)
  560. =leaf$
  561. pad(num%)
  562. "   "+
  563. (num%),4)
  564. OS_ReadVarVal(A$)
  565.  L%,a%
  566.  "XOS_ReadVarVal",A$,block%,128,0,3 
  567.  ,,L%;F%
  568. 2A$="":a%=0:
  569.  a%<L%:A$=A$+
  570. (block%?a%):a%+=1:
  571. iconclicked(window%,icon%)
  572. icon%-=1:
  573.  *** 3.43 ***
  574.  window%=main% 
  575.  window%=mait% 
  576. popupmenu(icon%)
  577. initmenu(menu%,menuname$)
  578. (menuname$)<13 
  579. 5   $menu%=menuname$:               : 
  580.  menu title
  581.    indirect_title_flag%=
  582.  (indmenptr%+
  583. (menuname$)+1) >= indmenlim% 
  584. A      
  585. nagg("Too many menu items longer than 12 characters!")
  586.       
  587. #   menu%!0 = indmen%+indmenptr%
  588.    menu%!4 = 0
  589.    menu%!8 = 
  590. (menuname$)+1
  591. &   $(indmen%+indmenptr%)=menuname$
  592. B   indmenptr% = (indmenptr%+
  593. (menuname$)+1) : 
  594.  +5) AND NOT(3)
  595.    indirect_title_flag%=
  596. Emenu%?12=7:menu%?13=2           : 
  597.  title foreground & background
  598. Emenu%?14=7:menu%?15=0           : 
  599.  menu  foreground & background
  600. menu%!16=6*16
  601. 2menu%!20=44        : 
  602.  width & height of items
  603. @menu%!24=0                      : 
  604.  vertical gap twixt items
  605. =menu%+28
  606. additem(menu%,text$,last%,col%)
  607.  (menu%+24)>(menuarea%+MS%) 
  608. #file%:
  609. nagg("Menu area overrun! Goodbye, scnhif."):
  610.  last% 
  611.  !menu%=128 
  612.  !menu%=0
  613.  indirect_title_flag% 
  614.    !menu% = !menu% 
  615.  (1<<8)
  616.    indirect_title_flag%=
  617. menu%!4=-1
  618. 5menu%!8=&1000000*col%+&21 :
  619.  was menu%!8=&7000021
  620. (text$)<13 
  621.    $(menu%+12)=text$
  622.  (indmenptr%+
  623. (text$)+1) >= indmenlim% 
  624. A      
  625. nagg("Too many menu items longer than 12 characters!")
  626.       
  627. $   menu%!12 = indmen%+indmenptr%
  628.    menu%!16 = 0
  629.    menu%!20 = 
  630. (text$)+1
  631. "   $(indmen%+indmenptr%)=text$
  632. <   indmenptr% = (indmenptr%+
  633. (text$)+1):
  634.  +5) AND NOT(3)
  635. #   menu%!8 = (menu%!8) 
  636.  (1<<8)
  637. =menu%+24
  638. action(menu%,item%):
  639.  *** 3.43 *** (replacement)
  640. '  check% = items_base%(menu%)+item%
  641.   thing$=fullname$(check%)
  642. thing$,1)="*" 
  643.     p$=
  644. path(thing$)
  645. 6    
  646. "XWimp_StartTask",
  647. (p$)-1)+leaf$(check%)
  648. Filer_Run(thing$)
  649. path(a$)
  650. a$,1)<>"." 
  651.  a$<>"":a$=
  652. (a$)-1):
  653. title(title$)
  654.  maintitle$<>title$ 
  655.      maintitle$=title$
  656.      
  657.  hires% 
  658.         redraw_height%=32
  659. "        redraw_width%=width22%
  660.          redraw_window%=main%
  661.      
  662.         redraw_height%=40
  663. "        redraw_width%=width24%
  664.          redraw_window%=mait%
  665.      
  666. K     
  667. force_redraw(redraw_window%,4,-redraw_height%,redraw_width%-8,-4)
  668.      !block%=redraw_window%
  669.     .     
  670. "Wimp_RedrawWindow",,block% 
  671.  more%
  672.      
  673.  more% 
  674. draw_window
  675.  *****************************************************
  676.    IF maintitle$=title$ THEN ENDPROC
  677.    IF title% THEN
  678.      $maint_title_addr% = title$
  679.      !block% = mait%
  680.      SYS "Wimp_GetWindowState",,block%
  681.      winht%=block%!16-block%!8+4
  682.      SYS "Wimp_GetWindowOutline",,block%
  683.      SYS "Wimp_ForceRedraw",-1,block%!4,block%!8+winht%,block%!12,block%!16
  684.    ELSE
  685.      PROCoutput("title")
  686.      GCOL0,0:RECTANGLE FILL 0,0,658,24
  687.      GCOL0,7
  688.      xxx%=325-LEN(title$)*8
  689.      VDU5:MOVE xxx%,20:PRINT title$
  690.      PROCoutput("")
  691.      !block% = main%
  692.      block%!4 = 16
  693.      SYS "Wimp_GetIconState",,block%
  694.      winht%=block%!12
  695.      SYS "Wimp_GetWindowOutline",,block%
  696.      SYS "Wimp_ForceRedraw",-1,block%!4+12,block%!16+winht%,block%!12-12,block%!16
  697.    ENDIF
  698.    maintitle$=title$
  699.  ENDPROC
  700.  *****************************************************
  701. checkicn
  702. "Wimp_GetPointerInfo",,block%
  703. +%  winh%=block%!12:icnh%=block%!16
  704.   icnh%-=1 : 
  705.  *** 3.43 ***
  706.  ((winh%<>main%) 
  707.  (winh%<>mait%)) 
  708.  (icnh%<1) 
  709.  (icnh%>=ME%) 
  710. .4    t$="Iconthang V"+vsn$+" 
  711.  Musus Umbra '95-7"
  712. 0-    t$=mname$(icnh%):
  713.  $(menuptr%(icnh%))
  714. title(t$)
  715. output(sprite$)
  716.  sprite$="" 
  717. "OS_SpriteOp",or0%,or1%,or2%,or3%
  718. "OS_SpriteOp",256+61,sprites22%,sprite$,0 
  719.  or0%,or1%,or2%,or3%
  720. frontback
  721.  hires% 
  722.  !block%=main% 
  723.  !block%=mait%
  724. "Wimp_GetWindowState",,block%
  725. unc%=(block%!28)=-1
  726.  unc% 
  727.  block%!28=-2 
  728.  block%!28=-1
  729. "Wimp_OpenWindow",,block%
  730. modechange
  731. "OS_ReadModeVariable",-1,4 
  732.  ,,xeig%
  733. "OS_ReadModeVariable",-1,5 
  734.  ,,yeig%
  735. H6  hires%=(xeig%=yeig%) 
  736.  (xeig%<2):title%=hires%=0
  737.  hires% 
  738.  mwin%=main% 
  739.  mwin%=mait%
  740.  oldres%=hires% 
  741.   oldres%=hires%
  742.  hires% 
  743.  suffix$="22" 
  744.  suffix$="":
  745.  but I think 24 is nicer...
  746.  hires% 
  747.  psa%=sprites22% 
  748.  psa%=sprites24%
  749.  autoiconsprite% 
  750. doiconsprites(suffix$,psa%)
  751.  RO35% 
  752.  fudge_deskfont% 
  753. fudge_font(hires%)
  754. P'  modechanged%=
  755. :maintitle$="Eeek!"
  756. doiconsprites(suffix$,psa%)
  757.  "OS_SpriteOp",36+256,psa%,"is_ptr",%0000001,0,0,0,0
  758.  SYS"Hourglass_On"
  759. "XOS_CLI","Iconsprites sprites:!Sprites"+suffix$
  760. "XOS_CLI","Pointer"
  761.  SYS"Hourglass_Off"
  762. error_txt("Iconsprites changed OK")
  763. uptime
  764. "OS_ReadMonotonicTime" 
  765. T%=t%/100
  766.  3600)+"h"+
  767. qq((T%
  768. 60)+"m":
  769.  +FNqq(T%MOD60)+"s"
  770. qq(x%)=
  771.  x%,2)
  772. tbareek
  773. "Wimp_SlotSize",-1,-1 
  774.  ,next%,free%
  775.  next%>free% 
  776.  next%=free%
  777. f3t$="Next="+
  778. (next%
  779. 1024)+"/"+
  780. (free%
  781. 1024)+"K "
  782. g/t$+="Time="+
  783. $,17,5):
  784.  ,8 for seconds too!
  785. t$+=" (Up "+
  786. uptime+")"
  787. title(t$)
  788. tick(menu%,text$,tick%)
  789.   menu%+=4
  790.     menu%+=24
  791. p#    flags%=menu%!8:last%=!menu%
  792. q=    
  793.  flags% 
  794.  (1<<8) 
  795.  mt$=$(menu%!12) 
  796.  mt$=$(menu%+12)
  797.  mt$=text$ 
  798.  last%=128
  799.  mt$<>text$ 
  800. nagg("Error - can't (un)tick '"+text$+"' in menu cuz it doesn't exist!"):
  801.  tick% 
  802.  !menu%=last% 
  803.  1<<0 
  804.  !menu%=last% 
  805. (1<<0)
  806. updatewindow(window%)
  807. "Wimp_ForceRedraw",window%,0,-1E9,1E9,0
  808. dlineprev(mt%)
  809.   fptr%=mt%-24
  810.   !fptr% = !fptr% 
  811. menunum(v%)
  812.  M%<ME%
  813.  v%=menuptr%(M%) 
  814.    M%+=1
  815. "Wimp_ReportError","    Bad menu?",1
  816. Filer_Run(a$)
  817. (-1) 
  818. shift_run(a$):
  819. (-3) 
  820. alt_run(a$):
  821. filer_run(a$)
  822. filer_run(a$)
  823.  Ick!
  824. !   !block%=(44+
  825. (a$)+5) 
  826. )   block%!12 = 0 : 
  827.  original message
  828. !   block%!16 = 5 : 
  829.  DataOpen
  830.  hires% 
  831.  block%!20=main% 
  832.  block%!20=mait%
  833.  window handle of filer
  834. !   block%!28 = 0 : 
  835.  x offset
  836. !   block%!32 = 0 : 
  837.  y offset
  838.    block%!36 = 0
  839. "XOS_File",17,a$ 
  840.  t%,,l%;F%
  841. error_swi(t%):
  842.  (t%=1 
  843.  t%=3) 
  844. (-1) 
  845.  t%=1:l%=&FFFFFF00
  846.       
  847. /         
  848. error_txt("'"+a$+"' not found"):
  849.       
  850. -         
  851.  (l% 
  852.  &FFF00000) = &FFF00000 
  853. .            block%!40 = ((l% 
  854.  &FFF00)>>8)
  855.          
  856. -            block%!40 = &3000 : 
  857.  untyped
  858.          
  859.       
  860.  2,3 :
  861. *         
  862. leafname(a$),1)="!" ) 
  863. !            block%!40 = &2000
  864.          
  865. !            block%!40 = &1000
  866.          
  867.    $(block%+44)=a$+
  868. "Wimp_SendMessage",18,block%,0:
  869.  broadcast
  870. recieve_dataopen
  871.  ( block%!4 ) <> taskhand% 
  872.  ( block%!12 ) <> 0 
  873.    block%!12 = block%!8
  874.    file$=
  875. file(block%+44)
  876.    E%=0:F%=0
  877.  block%!40 
  878.       
  879.  &3000 :
  880. 5         
  881. "XWimp_StartTask","Run "+file$ 
  882.  E%;F%
  883.       
  884.  &2000 :
  885. 5         
  886. "XWimp_StartTask","Run "+file$ 
  887.  E%;F%
  888.       
  889.  &1000 :
  890. "         
  891. filer_opendir(file$)
  892. ;         
  893.  SYS"XOS_CLI","Filer_OpenDir "+file$ TO E%;F%
  894.       
  895. O         
  896. "XWimp_StartTask","@RunType_"+
  897. hex3(block%!40)+" "+file$ 
  898.  E%;F%
  899. error_swi(E%)
  900. filetype(a$)
  901. "XOS_File",17,a$ 
  902.  t%,,l%
  903.  0 : = 0
  904.  1 : 
  905.  (l% 
  906.  &FFF00000) = &FFF00000 
  907.  =((l% 
  908.  &FFF00)>>8)
  909.          =&3000 : 
  910.  untyped
  911.  2,3 :
  912. 2         
  913. leafname(a$),1)="!" ) 
  914.  = &2000
  915.          = &1000
  916. = &4000
  917. hex3(v%)=
  918. "000"+
  919. ~v%,3)
  920.  to be called in response to a poll reason code of RedrawWindow (1)
  921. redraw_window
  922. "Wimp_RedrawWindow",,block% 
  923.  more%
  924.  more% 
  925. draw_window((!block%=main%) 
  926.  (!block%=mait%))
  927. force_redraw(window%,minx%,miny%,maxx%,maxy%)
  928. "Wimp_ForceRedraw",window%,minx%,miny%,maxx%,maxy%
  929.  to be called after a Wimp_RedrawWindow or Wimp_UpdateWindow (that has
  930.  just returned a non-zero 'more' flag.  'block%' is expected to be the
  931.  block used. la-de-dah.
  932. draw_window(title%)
  933. "OS_ReadModeVariable",-1,4 
  934.  ,,xeig%
  935. "OS_ReadModeVariable",-1,5 
  936.  ,,yeig%
  937.    osw%=1<<xeig%
  938.    osh%=1<<yeig%
  939.    min_x% = block%!4
  940.    min_y% = block%!8
  941. #   max_x% = block%!12-1:
  942.  -osw%
  943. #   max_y% = block%!16-1:
  944.  -osh%
  945.    scroll_x% = block%!20
  946.    scroll_y% = block%!24
  947.  title% 
  948.      cwidth%=16/osw%
  949.      cheight%=16/osh%
  950. 5     
  951.  hires% 
  952. 23,17,7,%10,cwidth%;cheight%;0,0
  953.    more%=
  954.  more%
  955.       
  956.  title% 
  957. B         
  958.  and now we can print the title string appropriately
  959. !         
  960. "Wimp_SetColour",7
  961.           L%=16*
  962. (maintitle$)
  963. 4         
  964.  min_x%+(max_x%-min_x%-L%) 
  965. 2,max_y%-8
  966.          
  967.  maintitle$
  968.       
  969. 7      
  970.  the 3D border is identical for both windows
  971.       
  972. "Wimp_SetColour",4
  973. 9      
  974.  min_x%,min_y%:
  975.  max_x%,min_y%:
  976.  max_x%,max_y%
  977. 1      
  978.  min_x%+2,min_y%+2:
  979.  max_x%-2,min_y%+2
  980.       
  981.  max_x%-2,max_y%-2
  982.       
  983. "Wimp_SetColour",0
  984. ;      
  985.  min_x%,min_y%:
  986.  min_x%,max_y%:
  987.  max_x%-2,max_y%
  988. 4      
  989.  min_x%+2,min_y%+osh%:
  990.  min_x%+2,max_y%-2
  991.       
  992.  max_x%-4,max_y%-2
  993. /      
  994. "Wimp_GetRectangle",,block% 
  995.  more%
  996.  title% 
  997.     8      
  998.  hires% 
  999. 23,17,7,%10,cwidth%;cheight%*2;0,0
  1000. error_swi(E%)
  1001. error_txt(
  1002. file(E%+4))
  1003. error_txt(a$)
  1004.    error_open% = 
  1005. "OS_ReadMonotonicTime" 
  1006.  now%
  1007. !   clear_error_time%=now%+250
  1008.    !block%=error_win%
  1009. "Wimp_GetWindowInfo",,block%
  1010. $   $(block%!112)=
  1011. a$,block%!116)
  1012. "OS_ReadModeVariable",-1,4 
  1013.  ,,xeig%
  1014. "OS_ReadModeVariable",-1,5 
  1015.  ,,yeig%
  1016. "OS_ReadModeVariable",-1,11 
  1017.  ,,xsize%
  1018. "OS_ReadModeVariable",-1,12 
  1019.  ,,ysize%
  1020.    xsize%=xsize%<<xeig%
  1021.    ysize%=(ysize%<<yeig%)
  1022. &   ewidth%  = block%!12 - block%!4
  1023.  &   eheight% = block%!16 - block%!8
  1024. !&   block%!4 = (xsize%-ewidth%) 
  1025. "'   block%!8 = (ysize%-eheight%) 
  1026. ##   block%!12 = block%!4+ewidth%
  1027. $$   block%!16 = block%!8+eheight%
  1028.    block%!28 = -1
  1029. &"   
  1030. "Wimp_OpenWindow",,block%
  1031. fudge_font(font%)
  1032.  font% 
  1033. ,A      
  1034.  old_desk_font$<>"" 
  1035. "Set Wimp$Font "+old_desk_font$
  1036. .8      new_old_desk_font$=
  1037. OS_ReadVarVal("Wimp$Font")
  1038. /F      
  1039.  new_old_desk_font$<>"" 
  1040.  old_desk_font$=new_old_desk_font$
  1041. 0#      
  1042. "Set Wimp$Font "+
  1043. 2D   !block%=0:block%!12=0:block%!16=&400CF:
  1044.  font changed message
  1045. 33   
  1046. "Wimp_SendMessage",17,block%,0:
  1047.  broadcast
  1048. redraw_screen
  1049. 8*   
  1050. "Wimp_ForceRedraw",-1,0,0,1E9,1E9
  1051. bfree
  1052. =;="("+
  1053. )+"/"+
  1054. (indmenlim%-indmenptr%)+"
  1055. bytes
  1056. free)"
  1057. shift_run(a$)
  1058. A!   
  1059. "XOS_File",17,a$ 
  1060.  t%;F%
  1061. B"   
  1062. error_swi(t%):
  1063. D$      
  1064.  2,3 : 
  1065. filer_opendir(a$)
  1066. E       
  1067.  1   : 
  1068. filer_run(a$)
  1069. F2      
  1070.  0   : 
  1071. error_txt("'"+a$+"' not found")
  1072. alt_run(a$)
  1073.    a$=
  1074. path(a$)
  1075. shift_run(
  1076. (a$)-1))
  1077. filer_opendir(a$)
  1078. P7   
  1079. "XOS_GSTrans",a$,block%,1024+(1<<29) 
  1080.  trm%;F%
  1081. Q$   
  1082. error_swi(trm%):
  1083.    ?(trm%-1)=13:a$=$block%
  1084. S.   
  1085. "XOS_CLI","Filer_Opendir "+a$ 
  1086.  E%;F%
  1087. T    
  1088. error_swi(E%)
  1089.