home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / keyboard / wimpkeys_1 / !WimpKeys / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-03-27  |  9KB  |  406 lines

  1.  ><WimpKeys>!RunImage
  2.  Another amazing program by Garry, garry@goldhill.demon.co.uk
  3.  Copyright Garry, garry@goldhill.demon.co.uk 1994
  4.  Real men use WIMPs without line numbers !
  5.  version$="1.00 (14 March 1994)"
  6. .version$="1.00" +
  7. (223)+" (27 March 1994)"
  8.  "Hourglass_On"
  9. error:
  10. loadsprites
  11.  block% 3855
  12.  block2% 20
  13.  databuff% 1024
  14.  iconsp% 12
  15.  icontext$(12)
  16.  ind% 2079
  17.  mb1% &100
  18.  q% &500
  19.  r% &500
  20. close%=
  21. icontxt$=""
  22. indend%=ind%+2079
  23. 8mask%=0+(1<<4)+(1<<5)+(1<<7)+(1<<10)+(1<<11)+(1<<12)
  24. quit%=
  25. shaded%=1<<22
  26. text$=""
  27.  "OS_FSControl",28,"<WimpKeys$DIR>.WimpKeys.*" 
  28.  ,,,numwkeys%
  29. numwkeys%+=1
  30.  wimpkeydef$(numwkeys%,18)
  31.  wimpkeyicon$(numwkeys%,18)
  32. wkeyset%=1
  33. keyset%=1
  34.  "Wimp_Initialise",200,&4B534154,"WimpKeys" 
  35.  ,task%
  36.  "Wimp_OpenTemplate",,"<WimpKeys$DIR>.Templates"
  37. indtemp%=ind%
  38. infohdl%=
  39. template("info")
  40. keyshdl%=
  41. template("keys")
  42. *#wkeyshdl%=
  43. template("wimpkeys")
  44.  "Wimp_CloseTemplate"
  45. iconbar%=
  46. iconbar
  47. seticontext(15,infohdl%,version$)
  48. getwkeys
  49. wimperror
  50.  close%=
  51. close:
  52.  "Hourglass_Off"
  53. *POINTER
  54.  "Wimp_Poll",mask%,block% 
  55.  reason%,block%
  56.  reason% 
  57.  "Wimp_RedrawWindow",,block%
  58.  "Wimp_OpenWindow",,block%
  59. closewindow(block%!0)
  60. mouse_click(block%)
  61. keypress
  62. menu_action(block%)
  63.  17,18:
  64. receive(block%)
  65.  quit%=
  66. close
  67. template(name$)
  68.  "Wimp_LoadTemplate",,block%,indtemp%,indend%,-1,name$,0 
  69.  ,,indtemp%
  70.  "Wimp_CreateWindow",,block% 
  71.  hdl%
  72. H    =hdl%
  73. getwkeys
  74. wkeys%=0
  75. wkeys%+=1
  76. NIloadwkeys%=
  77. loadwkeyfile("<WimpKeys$DIR>.WimpKeys."+
  78. (wkeys%),wkeys%)
  79.  loadwkeys%=
  80. loadwkeyfile(file$,wkeyset%)
  81.  "OS_File",5,file$ 
  82.  type%
  83.  type% 
  84.     icon%=1
  85.     channel%=
  86. (file$)
  87.     nokey%=
  88. Z        
  89.       byte1%=
  90. #(channel%)
  91.       
  92.  byte1%=124 
  93.         
  94. ^           byte%=
  95. #(channel%)
  96. _0        
  97. #(channel%) 
  98.  byte%=10 
  99.  byte%=13
  100.       
  101.  byte1%<>124
  102. #channel%=
  103. #channel%-1
  104.     wkey%=1
  105. d        
  106. e/      
  107. settext(wimpkeydef$(wkeyset%,wkey%))
  108. f0      
  109. settext(wimpkeyicon$(wkeyset%,wkey%))
  110.       wkey%+=1
  111.  nokey%=
  112.  wkey%>9
  113. #(channel%)
  114.     =
  115. settext(
  116.  tkey$)
  117. tkey$=""
  118.   byte%=
  119. #(channel%)
  120.   tkey$=tkey$+
  121. (byte%)
  122. #(channel%) 
  123.  byte%=10 
  124.  byte%=13
  125. #(channel%) 
  126.  nokey%=
  127. tkey$=
  128. tkey$)+
  129. closewindow(hdl%)
  130.  hdl%=infohdl% 
  131.  "Wimp_CreateMenu",,-1
  132.   block%!0=hdl%
  133.  "Wimp_CloseWindow",,block%
  134. loadsprites
  135. "<WimpKeys$DIR>.!Sprites":T%=
  136. #S%+16:
  137.  sprites% T%
  138. *sprites%!0=T% :
  139.  Length of sprite file
  140. sprites%!4=0
  141. .sprites%!8=16 :
  142.  first free sprite counter
  143. 'sprites%!12=16:
  144.  free space counter
  145.  "OS_SpriteOp",&109,sprites%
  146.  "OS_SpriteOp",&10A,sprites%,"<WimpKeys$DIR>.!Sprites"
  147. iconbar
  148.  window handle=-1 (icon bar utils):box (0,0) to (68,68)
  149.  flags:icon is sprite, indirected, button type 2
  150. 6!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=&2102
  151. $iconsp%="!WimpKeys"
  152. 4q%!24=iconsp%:q%!28=sprites%:q%!32=
  153. ($iconsp%)+1
  154.  "Wimp_CreateIcon",,q% 
  155. '!q%=-2:q%!4=iconbar%:q%!8=0:q%!12=0
  156.  "Wimp_SetIconState",,q%
  157. geticontext(icon%,hdl%,
  158.  icontxt$)
  159. block%!0=hdl%
  160. block%!4=icon%
  161.  &400CE,,block%
  162. icontxt$=$(block%!28)+
  163. mouse_click(block%)
  164. mousex%=block%!0
  165. mousey%=block%!4
  166. buttonstate%=block%!8
  167. hdl%=block%!12
  168. iconclick%=block%!16
  169.  buttonstate% 
  170.  iconclick%=iconbar% 
  171. wkeys
  172.  hdl% 
  173. %      
  174.  wkeyshdl%:
  175. wkeychange(-1)
  176. !      
  177.  keyshdl%:
  178. newdefs(-1)
  179.         
  180. )    
  181.  iconclick%=iconbar% 
  182.  hdl%=-2 
  183.       
  184. menu_setup(mb1%,5)
  185. "      
  186. create_menu("WimpKeys")
  187.       menu%=1
  188. 4      
  189.  "Wimp_CreateMenu",,mb1%,mousex%-100,216
  190.         
  191. &    
  192.  iconclick%=iconbar% 
  193. wkeys
  194.  hdl% 
  195. -      
  196.  infohdl%:
  197.  "Wimp_CreateMenu",,-1
  198. $      
  199.  wkeyshdl%:
  200. wkeychange(1)
  201.        
  202.  keyshdl%:
  203. newdefs(1)
  204.         
  205. newdefs(step%)
  206.  iconclick% 
  207. showdefs(step%)
  208. updatewkeys
  209. L    junk%=
  210. loadwkeyfile("<WimpKeys$DIR>.WimpKeys."+
  211. (wkeyset%),wkeyset%)
  212.  icon%=1 
  213. C      
  214. seticontext(icon%,wkeyshdl%,wimpkeyicon$(keyset%,icon%))
  215. B      
  216. seticontext(icon%,keyshdl%,wimpkeyicon$(keyset%,icon%))
  217. D      
  218. seticontext(icon%+18,keyshdl%,wimpkeydef$(keyset%,icon%))
  219.  icon%
  220. savewkeys
  221. showdefs(step%)
  222.  "Hourglass_On"
  223. block%!0=keyshdl%
  224.  "Wimp_GetWindowState",,block%
  225. block%!28=-1
  226.  "Wimp_OpenWindow",,block%
  227. keyset%+=step%
  228.  keyset%>numwkeys% 
  229.  keyset%=1
  230.  keyset%<1 
  231.  keyset%=numwkeys%
  232. seticontext(38,keyshdl%,
  233. (keyset%))
  234.  icon%=1 
  235. seticontext(icon%,keyshdl%,
  236. wimpkeyicon$(keyset%,icon%))) 
  237. seticontext(icon%+18,keyshdl%,
  238. wimpkeydef$(keyset%,icon%))) 
  239.  icon%
  240.  "Hourglass_Off"
  241. wkeys
  242. block%!0=wkeyshdl%
  243.  "Wimp_GetWindowState",,block%
  244. block%!28=-1
  245.  "Wimp_OpenWindow",,block%
  246.  icon%=1 
  247. seticontext(0,wkeyshdl%,
  248. (wkeyset%))
  249. seticontext(icon%,wkeyshdl%,
  250. wimpkeyicon$(wkeyset%,icon%)))
  251.  icon%
  252. out(text$)
  253.  charout%=1 
  254. (text$)
  255. !  byte%=
  256. text$,charout%,1))
  257.  byte% 
  258. )    
  259. controlcode(text$,charout%)
  260.      
  261.  "OS_Byte",138,0,byte%
  262.  charout%
  263. controlcode(text$,counter%)
  264. text$,counter%+3,1)="]" 
  265.  "OS_Byte",138,0,
  266. text$,counter%+1,2))
  267.  "OS_Byte",138,0,byte%
  268. counter%+=3
  269. charout%=counter%
  270. receive(block%)
  271. message%=block%!16
  272.  message% 
  273.  0:quit%=
  274. seticontext(icon%,hdl%,icontxt$)
  275.  block%!0=hdl%:block%!4=icon%
  276.  &400CE,,block%
  277. 3textpointer%=block%!28:$(textpointer%)=icontxt$
  278. block%!8=0:block%!12=0
  279.     *FX19
  280.  &400CD,,block%
  281. wkeychange(step%)
  282. geticontext(0,wkeyshdl%,wkeyset$)
  283. wkeyset%=
  284. (wkeyset$)
  285.  iconclick% 
  286.   wkeyset%+=step%
  287.  wkeyset%>numwkeys% 
  288.  wkeyset%=1
  289.  wkeyset%<1 
  290.  wkeyset%=numwkeys%
  291.  icon%=1 
  292. -    
  293. seticontext(0,wkeyshdl%,
  294. (wkeyset%))
  295. D    
  296. seticontext(icon%,wkeyshdl%,
  297. wimpkeyicon$(wkeyset%,icon%)))
  298.  icon%
  299. wimpkeydef$(wkeyset%,iconclick%)))
  300.  step%=-1 
  301. closewindow(hdl%)
  302. savewkeys
  303. !/file$="<WimpKeys$DIR>.WimpKeys."+
  304. (keyset%)
  305.  "OS_File",6,(file$)
  306. channel%=
  307. (file$)
  308.  icon%=1 
  309. geticontext(icon%+18,keyshdl%,wimpkeydef$(keyset%,icon%))
  310. &2  keystore$=
  311. wimpkeydef$(keyset%,icon%))+
  312. #channel%,keystore$;
  313. geticontext(icon%,keyshdl%,wimpkeyicon$(keyset%,icon%))
  314. )3  keystore$=
  315. wimpkeyicon$(keyset%,icon%))+
  316. #channel%,keystore$;
  317. seticontext(icon%,wkeyshdl%,wimpkeyicon$(keyset%,icon%))
  318.  icon%
  319. #channel%
  320.  "OS_File",18,file$,&fff
  321. updatewkeys
  322.  icon%=1 
  323. geticontext(icon%,keyshdl%,wimpkeyicon$(keyset%,icon%))
  324. seticontext(icon%,wkeyshdl%,wimpkeyicon$(keyset%,icon%))
  325. geticontext(icon%+18,keyshdl%,wimpkeydef$(keyset%,icon%))
  326.  icon%
  327. keypress
  328. hdl%=block%!0
  329. key%=block%!24
  330.  key% 
  331.  "Wimp_ProcessKey",key%
  332. menu_setup(mb%,itemwidth%)
  333. mb%?12=7
  334. mb%?13=2
  335. mb%?14=7
  336. mb%?15=0
  337. mb%!16=itemwidth%*16
  338. mb%!20=40
  339. mb%!24=0
  340. create_menu(title$)
  341. $mb1%=title$
  342. flags%=mb1%+28
  343. submenu%=flags%+4
  344. menuicon%=flags%+8
  345. menutext%=flags%+12
  346. flags%!0=&00
  347. submenu%!0=infohdl%
  348. menuicon%!0=%110001+(7<<24)
  349. $(menutext%)="Info"
  350. flags%=mb1%+52
  351. submenu%=flags%+4
  352. menuicon%=flags%+8
  353. menutext%=flags%+12
  354. flags%!0=&00
  355. submenu%!0=-1
  356. menuicon%!0=%110001+(7<<24)
  357. $(menutext%)="Defs"
  358. flags%=mb1%+76
  359. submenu%=flags%+4
  360. menuicon%=flags%+8
  361. menutext%=flags%+12
  362. flags%!0=&80
  363. submenu%!0=-1
  364. menuicon%!0=%110001+(7<<24)
  365. $(menutext%)="Quit"
  366. menu_action(block%)
  367. level0%=block%!0
  368. level1%=block%!4
  369. level2%=block%!8
  370.  "Wimp_GetPointerInfo",,block%
  371. mouse%=block%!8
  372.  level0% 
  373.     block%!0=keyshdl%
  374. y(    
  375.  "Wimp_GetWindowState",,block%
  376.     block%!28=-1
  377. {$    
  378.  "Wimp_OpenWindow",,block%
  379. showdefs(0)
  380.  2:quit%=
  381. sayerror(message$)
  382. !block%=
  383. $(block%+4)=message$+
  384.  "Wimp_ReportError",block%,%10001,"WimpKeys"
  385. error
  386.  "Wimp_CommandWindow",99
  387. $;" at line ";
  388. wimperror
  389. !block%=
  390. =222 
  391. =248 
  392. >&FFFF 
  393. <&20000) 
  394. sayerror("Filing system error")
  395. 2  $(block%+4)=
  396. $+" at line "+
  397. +" ("+
  398. +")"+
  399.  "Wimp_ReportError",block%,%10001,"WimpKeys"
  400. close:close%=
  401.  "Hourglass_Smash"
  402. close
  403. $block%="TASK"
  404.  "XWimp_CloseTemplate"
  405.  "Wimp_CloseDown",task%,!block%
  406.