home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / utilities / utilsa / backload / !BackLoad / !RunImage (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  1995-02-17  |  16.8 KB  |  658 lines

  1.  >IDEFS::4.$.!BackLoad.!RunImage
  2.  RunImage code for !BackLoad system booter utility
  3.  The Unbroken Circle, 1995
  4.  Program code by Tim Wiser
  5.  WIMP support code by Joe Taylor & Archimedes World
  6.  Version 1.00
  7. Wimp_Start("System bootup",0,0)
  8. User_SetInitialData
  9. Create_Windows
  10. Create_Menus
  11. Wimp_WaitForEvent
  12. Wimp_CloseDown
  13. User_SetInitialData
  14.  "Hourglass_Start",1
  15. /file=
  16. ("<BackgroundLoader$Dir>.BootScript")
  17.  line$(100):
  18.  l%=1:
  19.  beep=
  20.  byte=
  21. #file
  22.  byte=35 
  23.  l%=l%-1
  24.  byte<>10 
  25.  line$(l%)+=
  26. (byte)
  27.  byte=10 
  28. nextline
  29. #file
  30.  endoffile%=l%-1
  31. #file
  32.  "Hourglass_Off"
  33. nextline
  34.  line$(l%)="-nobeep" 
  35.  beep=
  36. l%=l%+1
  37. Create_Windows
  38. Event_Save(window%)=
  39. Event_Sprites(window%)=sprites%
  40. Create_Menus
  41. Event_Menu(window%)
  42. Event_WindowClose(window%,buttons%)
  43. Event_Draw(window%,x_origin%,y_origin%)
  44. Event_MouseClick(window%,icon%,button%,x%,y%)
  45.  window% 
  46. Event_KeyPress(window%,icon%,key%)
  47. Event_MenuChoice(menu%)
  48. Event_LoadFile(file$,type$)
  49. Event_SaveFile(file$,window%)
  50. Wimp_WindowAlert(title$,message$)
  51. Wimp_WindowAlertBox(title$,message$,0)
  52. Wimp_WindowAlertBox(title$,message$,button%)
  53.  response%
  54. $(wimp%+4)=message$
  55.  button% 
  56.  2    : response%=1
  57.  1    : response%=15
  58.  3    : response%=(1<<5)+16
  59.  4    : response%=(1<<6)+16
  60.  : response%=16
  61.  "Wimp_ReportError",wimp%,response%,title$ 
  62.  ,response%
  63. Wimp_WindowCancel(title$,message$)
  64. $(wimp%+4)=message$
  65. response%=23
  66.  "Wimp_ReportError",wimp%,response%,title$ 
  67.  ,response%
  68. =response%-2
  69. Wimp_WindowErrorBox(title$,message$)
  70. Wimp_WindowAlertBox(title$,message$,2)
  71. Wimp_WindowTitle(window%)
  72. wimp%!0=window%
  73.  "Wimp_GetWindInfo",,wimp%
  74.  ((wimp%!60)
  75. &100)=0 
  76.  1,"Title isn't indirected"
  77. =$(wimp%!76)
  78. Wimp_WindowLoad(window$)
  79. Wimp_WindowLoadFrom(window$,"<Obey$Dir>.Templates")
  80. Wimp_WindowLoadFrom(window$,template$)
  81.  c%,i%,n%,j%,sp$,sp2$
  82.  "Wimp_OpenTemplate",,template$
  83.  "Wimp_LoadTemplate",,wimp%,icons%,icon_memory%,-1,window$,0 
  84.  ,,icons%
  85.  sprites% 
  86.  1    : wimp%!64=sprites%
  87.  : wimp%!64=
  88. Event_Sprites(window%)
  89.  "Wimp_CreateWindow",,wimp% 
  90.  "Wimp_CloseTemplate"
  91.  "Wimp_WhichIcon",c%,wimp%+40,1+2+(1<<8),2+(1<<8)
  92.  wimp%!40 
  93.  -1   :
  94.  : i%=40
  95. m$   wimp%!4=wimp%!i% : wimp%!0=c%
  96. n$   
  97.  "Wimp_GetIconState",,wimp%
  98. o-   sp$=
  99. Wimp_GetStringAtAddress(wimp%!28)
  100. p"   
  101.  "Wimp_DeleteIcon",,wimp%
  102.  sprites% 
  103.  1    : wimp%!32=1
  104. t/     
  105.  "OS_SpriteOp",&108,sprites% 
  106.  ,,,n%
  107.      j%=0
  108.      
  109.  : j%+=1
  110. w=      
  111.  "OS_SpriteOp",&10D,sprites%,pointer_block%,20,j%
  112. x7      sp2$=
  113. Wimp_GetStringAtAddress(pointer_block%)
  114.      
  115.  j%=n% 
  116.  sp$=sp2$
  117. z4     
  118.  sp$=sp2$ 
  119.  wimp%!32=sprites% 
  120.  wimp%!32=1
  121.    wimp%!4=c%
  122. }.   
  123.  "Wimp_CreateIcon",,wimp%+4 
  124.  handle%
  125.    i%+=4
  126.  (wimp%!i%)=-1
  127. Wimp_WindowBringToTop(window%)
  128. !wimp%=window%
  129.  "Wimp_GetWindowState",,wimp%
  130. wimp%!28=-1
  131.  "Wimp_OpenWindow",,wimp%
  132. Wimp_WindowClose(window%)
  133. !wimp%=window%
  134.  "Wimp_CloseWindow",,wimp%
  135. Wimp_WindowForceDraw(window%)
  136.  window% 
  137.  -1   : 
  138.  "Wimp_ForceRedraw",-1,0,0,2*1280,2*1024
  139.  "Wimp_ForceRedraw",window%,0,-2*1024,2*1280,0
  140. Wimp_WindowOpen(window%)
  141. !wimp%=window%
  142.  "Wimp_GetWindowState",,wimp%
  143.  "Wimp_OpenWindow",,wimp%
  144. Wimp_WindowInterface
  145. "Wimp_BorderWindow",,wimp%
  146. Wimp_IconBar(Sprite$)
  147.  icon%
  148. wimp%!0=-1
  149. wimp%!4=0     : wimp%!8=0
  150. wimp%!12=68 : wimp%!16=68
  151. wimp%!20=&3002
  152. $(wimp%+24)=Sprite$
  153.  "Wimp_CreateIcon",,wimp% 
  154.  icon%
  155. =icon%
  156. Wimp_IconCaret(window%,icon%,chars%)
  157.  "Wimp_SetCaretPosition",window%,icon%,,,-1,chars%
  158. Wimp_IconText(window%,icon%)
  159. #wimp%!0=window% : wimp%!4=icon%
  160.  "Wimp_GetIconState",,wimp%
  161.  ((wimp%!24) 
  162.  &100)=0 
  163.  1,"Icon isn't indirected"
  164. =$(wimp%!28)
  165. Wimp_IconValidation(window%,icon%)
  166. #wimp%!0=window% : wimp%!4=icon%
  167.  "Wimp_GetIconState",,wimp%
  168.  ((wimp%!24) 
  169.  &100)=0 
  170.  1,"Icon isn't indirected"
  171. =$(wimp%!32)
  172. Wimp_IconDisable(window%,icon%)
  173. #wimp%!0=window% : wimp%!4=icon%
  174. $wimp%!8=1<<22   : wimp%!12=1<<22
  175.  "Wimp_SetIconState",,wimp%
  176. Wimp_IconEnable(window%,icon%)
  177. #wimp%!0=window% : wimp%!4=icon%
  178. $wimp%!8=0       : wimp%!12=1<<22
  179.  "Wimp_SetIconState",,wimp%
  180. Wimp_IconPutSprite(window%,icon%,sprite$)
  181. !wimp%!0=window%:wimp%!4=icon%
  182.  "Wimp_GetIconState",,wimp%
  183.  "Wimp_DeleteIcon",,wimp%
  184. =wimp%!4=wimp%!8   : wimp%!8=wimp%!12  : wimp%!12=wimp%!16
  185. ?wimp%!16=wimp%!20 : wimp%!20=wimp%!24 : $(wimp%+24)=sprite$
  186.  "Wimp_CreateIcon",,wimp% 
  187.  icon%
  188. =icon%
  189. Wimp_IconPutText(window%,icon%,text$)
  190. #wimp%!0=window% : wimp%!4=icon%
  191.  "Wimp_GetIconState",,wimp%
  192.  ((wimp%!24) 
  193.  &100)=0 
  194.  1,"Icon isn't indirected"
  195. $(wimp%!28)=text$
  196. #wimp%!0=window% : wimp%!4=icon%
  197. wimp%!8=0 : wimp%!12=0
  198.  "Wimp_SetIconState",,wimp%
  199. Wimp_IconInterfaceStart
  200. "Wimp_BorderIcon",,wimp%
  201. Wimp_IconInterfaceFinish
  202. wimp%!8=0
  203. "Wimp_BorderIcon",,wimp%
  204. Wimp_MenuAdjustOn(menu%)
  205.  "Wimp_GetPointerInfo",,pointer_block%
  206.  ((pointer_block%!8)
  207. 1)=1 
  208.  "Wimp_CreateMenu",,menu%,pointer_block%!0,pointer_block%!4
  209. Wimp_MenuChoice(level%)
  210. =(wimp%!(4*level%))+1
  211. Wimp_MenuCreate(menu$)
  212.  menu$="Colours" 
  213. Wimp_MenuColours
  214.  menu%,index%,width%,length%,k%,s%
  215.  menu% 28+
  216. Wimp_MenuNoOfEntries(menu$)*24
  217. 7menu%?12=7   : menu%?13=2  : menu%?14=7 :menu%?15=0
  218. +menu%!16=140 : menu%!20=44 : menu%!24=0
  219. index%=menu%+28
  220.  $menu%=
  221. menu$,
  222. menu$,"\")-1)
  223. #width%=
  224. menu$,
  225. menu$,"\")-1))
  226. $menu$+="\" : Menu_NoOfEntries%=0
  227.  menu$<>""
  228. menu$=
  229. menu$,
  230. menu$,"\")+1)
  231.  menu$ 
  232. 1  !index%=0 : index%!4=-1 : index%!8=&7000021
  233.   length%=
  234. menu$,"\")-1
  235.   k%=
  236. menu$,length%),">")
  237. %    s%=
  238. menu$,k%+1,length%-k%))
  239.     index%!4=s%
  240.     length%=k%-1
  241. "  $(index%+12)=
  242. menu$,length%)
  243.  length%>width% 
  244.  width%=length%
  245.   index%+=24
  246. menu%!16=16*(width%+1)
  247. (index%!-24=index%!-24 
  248.  &80 : =menu%
  249. Wimp_MenuColours
  250. Wimp_MenuCreateColours(" ")
  251. Wimp_MenuCreateColours(title$)
  252.  x$,men%,j%,i%
  253. 6x$=title$+"\0\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15"
  254. men%=
  255. Wimp_MenuCreate(x$)
  256.  i%=0 
  257.  i%<4,i%=9,i%=12,i%=14,i%=15 : j%=7
  258.  : j%=0
  259. men%?(39+i%*24)=i%*16+j%
  260. Wimp_MenuCentre(men%,i%+1)
  261.     =men%
  262. Wimp_MenuNoOfEntries(menu$)
  263.  n% ,j% : n%=0 : j%=0
  264. menu$,"\",j%+1)
  265.  j%<>0 
  266.  n%+=1
  267.  j%=0
  268. Wimp_MenuBackGroundColour(menu%,item%,colour%)
  269.  fore%,i%
  270. !&fore%=(menu%?(39+(item%-1)*24))
  271. "(i%=((menu%?(39+(item%-1)*24))
  272. #/menu%?(39+(item%-1)*24)=fore%+16*colour%+i%
  273. Wimp_MenuCentre(menu%,item%)
  274. ':menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
  275. (1<<3)
  276. Wimp_MenuClose
  277.  "Wimp_CreateMenu",-1
  278. Wimp_MenuDisable(menu%,item%)
  279. .;menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
  280. (1<<22)
  281. Wimp_MenuDottedLine(menu%,item%)
  282. 17menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
  283. Wimp_MenuEnable(menu%,item%)
  284. Wimp_MenuDisable(menu%,item%)
  285. 5;menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
  286. (1<<22)
  287. Wimp_MenuForegroundColour(menu%,item%,colour%)
  288. 8Emenu%?(39+(item%-1)*24)=colour%+16*((menu%?(39+(item%-1)*24))
  289. Wimp_MenuGlue(menu1%,item%,menu2%)
  290. menu1%!(8+item%*24)=menu2%
  291. Wimp_MenuItem(menu%,item%,item$)
  292. >,$(menu%+(40+(item%-1)*24))=
  293. item$,12)+
  294. Wimp_MenuMessage(menu%,item%)
  295. A<menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
  296. (1<<3)
  297. Wimp_MenuPopUp(Menu%,x%,y%)
  298. menu%=Menu%
  299.  "Wimp_CreateMenu",,menu%,x%-64,y%+20
  300. Wimp_MenuPopUpBar(x%,y%)
  301.  n% : n%=0
  302.  ((Bar_Menu%!(28+n%*24))
  303. %10000000)=0
  304. J    n%+=1
  305.  "Wimp_CreateMenu",,Bar_Menu%,x%-64,96+n%*44
  306. menu%=Bar_Menu%
  307. Wimp_MenuTick(menu%,item%)
  308. P7menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
  309. Wimp_MenuTitle(menu%,title$)
  310. $menu%=
  311. title$,12)+
  312. Wimp_MenuWrite(menu%,item%,buffer%,val%,BufferLength%)
  313. V7menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
  314. W8menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
  315. X#menu%!(40+(item%-1)*24)=buffer%
  316. Y menu%!(44+(item%-1)*24)=val%
  317. Z)menu%!(48+(item%-1)*24)=BufferLength%
  318. Wimp_SpritesLoad
  319. Wimp_SpritesPathLoad("<Obey$Dir>.Sprites")
  320. direct_sprites%=sprites%
  321. Wimp_SpritesPathLoad(pathname$)
  322. S%,T%
  323. b,S%=
  324. "<Obey$Dir>.Sprites":T%=
  325. #S%+16:
  326. sprites%T%,spname%12
  327. !sprites%=T%:sprites%!8=0
  328. "OS_SpriteOp",&109,sprites%
  329. "OS_SpriteOp",&10A,sprites%,pathname$
  330. Wimp_FileType(type%)
  331. type%
  332. &FFF:="Text"
  333. &FFD:="Data"
  334. &FFB:="Basic"
  335. &FF9:="Sprite"
  336. &FED:="Palette"
  337. &FEC:="Template"
  338. &AFF:="Draw"
  339. &1000:="Folder"
  340. &2000:="Application"
  341. ~(type%)
  342. Wimp_GetFilePathName
  343. Wimp_GetStringAtAddress(wimp%+44)
  344. Wimp_FileLoad(pathname$)
  345. S%,T%,file%
  346. pathname$
  347. #S%+16
  348. file%T%
  349. ("LOAD"+pathname$+""+
  350. ~file%)
  351. =file%
  352. Wimp_GetStringAtAddress(array%)
  353. s$:s$=""
  354. (?array%<>13)
  355. (?array%<>0):s$+=
  356. (?array%):array%+=1:
  357. Wimp_GetFileFromPathname(f$)
  358. f$,".") 
  359.  0    :=f$
  360. Wimp_GetFileFromPathname(
  361. (f$)-
  362. f$,".")))
  363. Wimp_SendToEdit(file$)
  364. wimp%!4=&6CC01C0C
  365. wimp%!16=5
  366. wimp%!36=0
  367. wimp%!40=&FFF
  368. $(wimp%+44)=file$+
  369. file$+45
  370.  !wimp%=4+(n%>>2)<<2 
  371.  !wimp%=n%
  372.  "Wimp_SendMessage",17,wimp%,0
  373. Wimp_Start(TaskName$,wimp_memory%,icon%)
  374.  wimp% wimp_memory%,icons% icon%
  375.  wimp_memory%<256 
  376.  wimp_memory%=256
  377. icon_memory%=icons%+icon%
  378. task$=TaskName$
  379. +indirect_sprites%=1 : direct_sprites%=1
  380. Wimp_SetEventVariables
  381. Wimp_Error:
  382. "Wimp_Initialise",200,&4B534154,TaskName$ 
  383.  version%,task%
  384. Wimp_BASICParameters
  385.  com$,param$,I%
  386.  "OS_GetEnv" 
  387.  com$
  388.  params$=""
  389. com$," -quit ")
  390.  params$=
  391. com$,
  392. com$," ",I%+
  393. " -quit ")+1)
  394. =params$
  395. Wimp_SetEventVariables
  396.  pointer_block% 20
  397. interface%=
  398. .null%=1  :draw%=2 :  pointer_leaving%=1<<4
  399. 1pointer_entering%=1<<5:mouse%=1<<6:drag%=1<<7
  400. &key%=1<<8:menu%=1<<9:scroll%=1<<10
  401. @lose_caret%=1<<11:gain_caret%=1<<12:message%=(1<<17)+(1<<18)
  402. 0recorder%=1<<18:acknowledge%=1<<19:window%=0
  403. !sprites%=1:version%=0:task%=0
  404. *Bar_Window%=-2:Bar_Icon%=0:Bar_Menu%=0
  405. *x_origin%=0:y_origin%=0:SaveWindow%=-3
  406. 3message_quit%=0:message_save%=2:message_load%=3
  407. !mouse_button%=2:save_event%=0
  408.  top_line%=0 : bottom_line%=0
  409. Wimp_Error
  410.  "Hourglass_Smash"
  411. X$,x%
  412. $+"atline"+
  413. 10)+" parsing line "+
  414. line%
  415. ErrorMsg%36
  416. EErrorMsg%!0=36:ErrorMsg%!12=0:ErrorMsg%!16=&81080:ErrorMsg%!20=x%
  417. $(ErrorMsg%+24)="!RunImage"
  418. "Wimp_SendMessage",17,ErrorMsg%
  419. Wimp_WindowAlert(task$,X$)
  420. Wimp_CloseDown
  421. Wimp_CloseDown
  422. "Wimp_CloseDown",task%,"TASK"
  423. Wimp_Quit
  424. finished%=
  425. Wimp_ReadVariable(Variable$)
  426. len%,result%,variable%
  427. $wimp%=Variable$
  428. "OS_ReadVarVal",wimp%,wimp%+255,255,,3
  429. ,,len%
  430. wimp%?(len%+255)=13
  431. =$(wimp%+255)
  432. Wimp_WaitForEvent
  433.  mask%,event%
  434.  line%=1:
  435.  starttimer=
  436. finished%=
  437. mask%=%111000011001
  438. :col=1
  439. "Wimp_Poll",,wimp% 
  440.  event%
  441.  event% 
  442.  1 : 
  443. Wimp_PollDrawWindow
  444.  2 : 
  445.  "Wimp_OpenWindow",,wimp%
  446.  3 : 
  447. Wimp_PollCloseWindow
  448.  6 : 
  449. Wimp_PollMouseClick
  450.  7 : 
  451. Wimp_PollSaveMessage
  452.  8 : 
  453. Wimp_PollKeyPress
  454.  9 : 
  455. Event_MenuChoice(menu%)
  456.  17,18: 
  457. Wimp_PollMessages
  458.  X,Y,Z
  459.  Z=7 
  460. Wimp_WindowAlert("Message from Background Loader","Boot-up aborted"):finished%=
  461.  starttimer=
  462. timer
  463.  starttimer=
  464. do_next_line
  465.  finished%
  466.  beep=
  467. timer
  468. >t+10 
  469.  starttimer=
  470. do_next_line
  471.  line%=line%+1
  472.  line$(line%)<>"-nobeep"+
  473. (10) 
  474. "WimpTask "+line$(line%)
  475.  line%=endoffile% 
  476.  finished%=
  477.  col 
  478.  1  : 
  479.  0,11:
  480.  col=0
  481.  0  : 
  482.  0,4:
  483.  col=1
  484.  50,1000
  485.  "System booting"
  486.  starttimer=
  487. Wimp_PollDrawWindow
  488.  more%
  489. "Wimp_RedrawWindow",,wimp%
  490. more%
  491. window%=wimp%!0
  492. Ax_origin%=16+wimp%!4-wimp%!20:y_origin%=-16+wimp%!16-wimp%!24
  493. more%
  494.  interface% 
  495. "Wimp_BorderWindow",,wimp%
  496. Event_Draw(window%,x_origin%,y_origin%)
  497. "Wimp_GetRectangle",,wimp%
  498. more%
  499. Wimp_PollCloseWindow
  500.  "Wimp_GetPointerInfo",,wimp%
  501. )  window%=wimp%!12 : buttons%=wimp%!8
  502. Event_WindowClose(window%,buttons%)
  503. 2 !wimp%=window% : 
  504.  "Wimp_CloseWindow",,wimp%
  505. Wimp_PollMouseClick
  506. J button%=wimp%!8:window%=wimp%!12:icon%=wimp%!16:x%=wimp%!0:y%=wimp%!4
  507.  button% 
  508. 2    : 
  509. Wimp_PollMenuPopUp
  510. Event_Save(window%) 
  511. ,               
  512. Wimp_PollMouseSave
  513. 1               
  514. Wimp_PollEventMouseClick
  515.               
  516. Wimp_PollMenuPopUp
  517. menu%=
  518. Event_Menu(window%)
  519.  menu%  
  520.      
  521.  window% 
  522.       
  523.  -2   : n%=0
  524. %3        
  525.  ((Bar_Menu%!(28+n%*24))
  526. %10000000)=0
  527.          n%+=1
  528.         
  529. (:        
  530.  "Wimp_CreateMenu",,Bar_Menu%,x%-64,96+n%*44
  531. )4      
  532. "Wimp_CreateMenu",,menu%,x%-64,y%+20
  533.      
  534. Wimp_PollMouseSave
  535.  icon% 
  536.  0 : 
  537.  button% 
  538.  &50 
  539. Wimp_PollDragBox(window%)
  540.  2 : 
  541.  button% 
  542. Wimp_PollSaveFile(window%)
  543. Wimp_PollEventMouseClick
  544.  interface% 
  545. "Wimp_BorderIcon",,wimp%
  546. Event_MouseClick(window%,icon%,button%,x%,y%)
  547.   interface% 
  548. 8(   wimp%!0=x%:wimp%!4=y% : wimp%!8=0
  549. 9(   wimp%!12=window% : wimp%!16=icon%
  550. :!   
  551. "Wimp_BorderIcon",,wimp%
  552. Wimp_PollSaveFile(window%)
  553. file$
  554. ?@ wimp%!0=window% : wimp%!4=1 : 
  555.  "Wimp_GetIconState",,wimp%
  556.  file$=$(wimp%!28)
  557. file$,".") 
  558.  0   :
  559. C@   $(wimp%+4)="To save, drag the icon to a directory window"
  560. D+   
  561.  "Wimp_ReportError",wimp%,16,task$
  562. F%   
  563. Event_SaveFile(file$,window%)
  564. "Wimp_CreateMenu",-1
  565. Wimp_PollDragBox(window%)
  566. x%,y%
  567.  save%=window%
  568.  !wimp%=window%
  569. "Wimp_GetWindowState",,wimp%
  570. O- x%=wimp%!4-wimp%!20:y%=wimp%!16-wimp%!24
  571.  wimp%!4=0
  572. "Wimp_GetIconState",,wimp%
  573.  !wimp%=window%
  574.  wimp%!4=5
  575. T, wimp%!8=x%+wimp%!8:wimp%!12=y%+wimp%!12
  576. U. wimp%!16=x%+wimp%!16:wimp%!20=y%+wimp%!20
  577.  wimp%!24=0:wimp%!28=0
  578. W* wimp%!32=&7FFFFFFF:wimp%!36=&7FFFFFFF
  579. "Wimp_DragBox",,wimp%
  580. Wimp_PollKeyPress
  581. [1  window%=wimp%!0:icon%=wimp%!4:key%=wimp%!24
  582. Event_Save(window%) 
  583. ](   
  584. WimpPoll_SaveFile(window%)
  585. ^/   
  586. Event_KeyPress(window%,icon%,key%)
  587. Wimp_PollSaveMessage
  588. file$,window%,icon%,x%,y%
  589. "Wimp_GetPointerInfo",,wimp%
  590. d: window%=wimp%!12:icon%=wimp%!16:x%=wimp%!0:y%=wimp%!4
  591. e> wimp%!0=save% : wimp%!4=1 : 
  592.  "Wimp_GetIconState",,wimp%
  593.  file$=$(wimp%!28)
  594. g+ file$=
  595. Wimp_GetFileFromPathname(file$)
  596.  wimp%!20=window%
  597.  wimp%!24=icon%
  598.  wimp%!28=x%:wimp%!32=y%
  599.  wimp%!36=length%
  600.  wimp%!0=64
  601.  wimp%!12=0
  602.  wimp%!16=1
  603.  wimp%!40=&FFF
  604.  $(wimp%+44)=file$
  605. "Wimp_SendMessage",17,wimp%,wimp%!20,wimp%!24
  606. Wimp_PollMessages
  607.  file$
  608. u,file$=
  609. Wimp_GetStringAtAddress(wimp%+44)
  610.  wimp%!16 
  611.      
  612.  0 : finished%=
  613.      
  614.      
  615. z/      
  616.  PROCWimp_IconPutText(save%,1,file$)
  617. {C      wimp%!0=save% : wimp%!4=1 : 
  618.  "Wimp_GetIconState",,wimp%
  619.       $(wimp%!28)=file$
  620. }<      wimp%!0=save% : wimp%!4=1 : wimp%!8=0 : wimp%!12=0
  621. ~'      
  622.  "Wimp_SetIconState",,wimp%
  623. 0      
  624.  PROCWimp_IconCaret(save%,1,LENfile$)
  625. 8      
  626.  "Wimp_SetCaretPosition",save%,1,,,-1,
  627. file$
  628. &      
  629. Event_SaveFile(file$,save%)
  630.      
  631. G      type$=
  632. Wimp_FileType(wimp%!40) : 
  633. Event_LoadFile(file$,type$)
  634.         
  635. Wimp_GetStringAtAddress(array%)
  636. s$:s$=""
  637. (?array%<>13)
  638. (?array%<>0):s$+=
  639. (?array%):array%+=1:
  640. Wimp_GetFileFromPathname(f$)
  641. f$,".") 
  642.  0    :=f$
  643. Wimp_GetFileFromPathname(
  644. (f$)-
  645. f$,".")))
  646. Wimp_FileType(type%)
  647. type%
  648. &FFF:="Text"
  649. &FFD:="Data"
  650. &FFB:="Basic"
  651. &FF9:="Sprite"
  652. &FED:="Palette"
  653. &FEC:="Template"
  654. &AFF:="Draw"
  655. &1000:="Folder"
  656. &2000:="Application"
  657. ~(type%)
  658.