home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / RiscPc / Utils / AcornMenu.arc / !AcornMenu / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1996-07-01  |  7KB  |  300 lines

  1.  >!RunImage
  2.  AcornMenu v0.01
  3.  Alan Trewartha 1996
  4.  "<AcornMenu$Dir>.User"
  5. Adisplay$=""          :
  6.  holds the text shown in the title bar
  7.     0quit%=
  8.           :
  9.  set to true on quitting!
  10.  b% 900           :
  11.  the WIMP block
  12.  ws% 200          :
  13.  the WIMP workspace (I think it's empty!)
  14.  main% 6000       :
  15.  where the menus are held
  16.  m$(40)           :
  17.  the main menu entries
  18. mlimit%=40
  19. mainsize%=6000
  20. wsend%=ws%+200
  21. b%!0=0
  22.  "Wimp_Initialise",310,&4B534154,"Acorn Menu",b% 
  23.  ,task%
  24. &file%=
  25. "<AcornMenu$Dir>.Sprites24"
  26. size%=
  27. #file%+4 : 
  28. #file%
  29.  usespr% size% : !usespr%=size%: usespr%!8=16
  30.  "OS_SpriteOp",256+9,usespr%
  31.  "OS_SpriteOp",256+10,usespr%,"<AcornMenu$Dir>.Sprites24"
  32.  "Wimp_OpenTemplate",,"<AcornMenu$Dir>.Templates"
  33.  "Wimp_LoadTemplate",,b%,ws%,wsend%,-1,"display",0 
  34.  ,,ws%
  35. display%=b%!72
  36. b%!64=usespr%
  37.  "Wimp_CreateWindow",,b% 
  38.  displaywh%
  39.  "Wimp_LoadTemplate",,b%,ws%,wsend%,-1,"Info",0 
  40.  ,,ws%
  41.  "Wimp_CreateWindow",,b% 
  42.  infowh%
  43.  "Wimp_CloseTemplate"
  44. $2b%!0=displaywh% : 
  45.  "Wimp_GetWindowState",,b%
  46. %)file% = 
  47. ("<AcornMenu$Dir>.MenuData")
  48. #file% : b%!4=
  49. #file% : b%!16=
  50. maintop%=0
  51. #file%=0
  52.   m$(maintop%)=
  53. #file%
  54.  m$(maintop%)<>"" 
  55.  maintop%+=1
  56.  #file%
  57.  "Wimp_OpenWindow",,b%
  58. makemainmenu
  59. error=1 
  60. close:
  61.  "OS_ReadMonotonicTime" 
  62.  otime%
  63.  "OS_ReadMonotonicTime" 
  64.  ntime%
  65.  (ntime% - otime%) > 0:otime%+=50:
  66.  "Wimp_PollIdle",&1932,b%,otime% 
  67. display
  68. :$    
  69.  "Wimp_OpenWindow",,b%
  70. ;%    
  71.  "Wimp_CloseWindow",,b%
  72.       
  73.  b%!12 
  74.         
  75.  displaywh%:
  76.           
  77.  b%!8 
  78. @/            
  79. floatwindow:
  80. showmainmenu
  81.             
  82.           
  83.           
  84.  b%!16 
  85.             
  86. action
  87.             
  88.           
  89.         
  90.       
  91. menuclick
  92.  17,18:
  93. message
  94.  well what?
  95. floatkeys 
  96. floatwindow
  97.  quit%
  98. close
  99. close
  100. T2b%!0=displaywh% : 
  101.  "Wimp_GetWindowState",,b%
  102. U(file%= 
  103. ("<AcornMenu$Dir>.MenuData")
  104. (b%!4) :
  105.  #file%, a$
  106. (b%!16):
  107.  #file%, a$
  108.  a%=0 
  109.  maintop%-1 : 
  110.  #file%, m$(a%) : 
  111.  #file%
  112.  "Wimp_CloseDown",task%,&4B534154
  113. error
  114. _    !b%=
  115.  !b% 
  116.  1<<30:err_str$="":box%=7
  117.  1<<30+1:err_str$="":box%=6
  118. :err_str$=" at line "+
  119. :box%=1
  120. $(b%+4)=
  121. $+err_str$+
  122.  "Wimp_ReportError",b%,box%,"Acorn Menu" 
  123.  ,response%
  124. =response%
  125. message
  126.  b%!16 
  127.  0:      quit%=
  128.  3:      
  129. additem
  130.  &400c0: 
  131. submenus
  132. floatwindow
  133. t2b%!0=displaywh% : 
  134.  "Wimp_GetWindowState",,b%
  135. u'b%!28=-1 : 
  136.  "Wimp_OpenWindow",,b%
  137. display
  138.  "Wimp_WhichIcon",displaywh%,b%,1<<21,1<<21
  139.  !b% 
  140.  0: display$=
  141. ButtonOne
  142.  1: display$=
  143. ButtonTwo
  144.  2: display$=
  145. ButtonThree
  146.  $display%<>display$ 
  147.   $display%=display$
  148.   b%!0=displaywh%
  149.  "Wimp_RedrawWindow",,b% 
  150.  more%
  151.  more%
  152. *    
  153.  "Wimp_GetRectangle",,b% 
  154.  more%
  155. showmainmenu
  156. b%!0=displaywh%
  157.  "Wimp_GetWindowOutline",,b%
  158. mainx%=b%!4+2:mainy%=b%!8
  159.  "Wimp_CreateMenu",,main%+4,mainx%,mainy%
  160. makemainmenu
  161. start%=main%
  162. main%+=4
  163. $(main%)=""
  164. Dmain%!12=&00070207:main%!16=176:main%!20=44:main%!24=0:main%+=28
  165.  a%=0 
  166.  maintop%-1
  167.   a$=m$(a%)
  168.   !main%=0
  169.   main%!4=-1
  170. a$,1)="." 
  171.     !main%=8:main%!4=1
  172.     a$=
  173. (a$)-1)
  174.   main%!8=&07000001
  175. a$,".")<>0:a$=
  176. a$,".")+1):
  177.   $(main%+12)=a$
  178.   main%+=24
  179.  maintop%=0 
  180.  main%-=24 
  181.  !(main%-24)=!(main%-24) 
  182. G!main%=0 : main%!4=infowh% : main%!8=&07000001 : $(main%+12)="Info"
  183. Hmain%!24=&80 : main%!28=-1 : main%!32=&07000001 : $(main%+36)="Quit"
  184. !start%=main%+48
  185. main%=start%
  186. menuclick
  187.  "Wimp_GetPointerInfo",,b%+80
  188.  "OS_Byte",121,0 
  189. adj%=(b%!88 
  190.  b%!0=maintop%+1 
  191.  1<<30,"Are you sure you want to quit Acorn
  192. Menu?"
  193.  b%!0<maintop% 
  194.  a%=2 
  195.  (b%!4=-1) 
  196.     maintop%-=1
  197. 2    
  198.  f%=!b% 
  199.  maintop%-1:m$(f%)=m$(f%+1):
  200. makemainmenu
  201.     a$=m$(b%!0)
  202. $    
  203.  b%!4<>-1 
  204. (a$)-1)
  205.     c%=b%+4:f%=main%
  206.  !c%<>-1
  207.       f%=!f%
  208. #      a$=a$+"."+$(f%+44+24*!c%)
  209.       c%+=4
  210.         
  211. $    
  212. a$,1)="." 
  213. a$-1)
  214.  "OS_File",13,a$ 
  215.  a%=0 
  216. cleanmainmenu
  217.  "Filer_Run "+a$
  218.  adj% 
  219.   a%=0:f%=main%
  220.  !(b%+a%+4) <>-1
  221. 5    !(f%+32+24*!(b%+a%))=!(f%+32+24*!(b%+a%)) 
  222. "    !(f%+36+24*!(b%+a%))=4+!f%
  223.     f%=!f%
  224.     a%+=4
  225.  "Wimp_CreateMenu",,main%+4,mainx%,mainy%
  226.   a%=0:f%=main%
  227.  !(b%+a%+4) <>-1
  228. 5    !(f%+32+24*!(b%+a%))=!(f%+32+24*!(b%+a%)) 
  229.     f%=!f%
  230.     a%+=4
  231. submenus
  232. a$=m$(b%!32)
  233. (a$)-1): 
  234.  Get main menu path thing
  235. c%=b%+36:f%=main%
  236.  !c%<>-1
  237.   f%=!f%
  238.   a$=a$+"."+$(f%+44+24*!c%)
  239.   c%+=4
  240. subx%=b%!24:suby%=b%!28
  241. start%=!f%:sub%=start%+4
  242. $(sub%)=$(f%+44+24*!(c%-4))
  243. offset%=0
  244. ?sub%!12=&00070207:sub%!16=176:sub%!20=44:sub%!24=0:sub%+=28
  245.  "XOS_GBPB",10,a$,sub%+40,40,offset%,mainsize%-(sub%+40-main%),"*" 
  246.  ,,,a%,offset%;flag%
  247.  (flag% 
  248. cleanmainmenu
  249.   g%=sub%+40
  250.  a%>0
  251.     !sub%=0
  252.     sub%!4=-1
  253. '    
  254.  !(g%+16)=2 
  255.  !sub%=8:sub%!4=1
  256.     sub%!8=&07000021
  257. terminate(g%+20)
  258.     $(sub%+12)=$(g%+20)
  259. #    g%+=24+4*
  260. ($(sub%+12))/4)
  261.     sub%+=24
  262.     a%-=1
  263.  offset%=-1
  264.  sub%=start%+32 
  265. H  !sub%=&80:sub%!4=-1:sub%!8=&07400021:$(sub%+12)="Nothing":sub%+=24
  266. !  !(sub%-24)=&80 
  267.  !(sub%-24)
  268. !start%=sub%
  269. sub%=start%
  270.  "XWimp_CreateSubMenu",,sub%+4,subx%,suby%
  271. additem
  272. terminate(b%+44)
  273. a$=$(b%+44)
  274.  b%!40>&FFF 
  275.  a$=a$+"."
  276.  maintop%<=mlimit% 
  277.  m$(maintop%)=a$ : maintop%+=1
  278. b%!12=b%!8 : b%!16=4
  279.  "Wimp_SendMessage",17,b%,b%!4
  280. makemainmenu
  281. terminate(a%)
  282.  a%?n%>31:n%+=1:
  283. a%?n%=13
  284. cleanmainmenu
  285.  f%<maintop%
  286.   a$=m$(f%)
  287. a$,1)="." 
  288. (a$)-1)
  289.  "OS_File",13,a$ 
  290.  0: maintop%-=1:
  291.  g%=f% 
  292.  maintop%-1:m$(g%)=m$(g%+1):
  293.  1: f%+=1: 
  294.  m$(f%-1)<>a$ 
  295.  m$(f%-1)=a$
  296.  2: f%+=1
  297. makemainmenu
  298. showmainmenu
  299.  1<<30+1,"The main menu is invalid. Attempting to fix..."
  300.