home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / education / verbmaster / !VerbMast / ShellLibRT (.txt) < prev   
RISC OS BBC BASIC V Source  |  1995-06-28  |  110KB  |  3,976 lines

  1.  >EvntShell:ShellLib 
  2.  Squished by Lofty's !Shrink vsn 3.01 on 28-Jun-95 
  3. shell_LibraryVersion:=1.45*&64
  4. shell_DefineConstants:_ERRNR_NONFATAL=&D00:_ERRNR_CLAIMMEM=&903:_MSE_SELECTBUT=4:_MSE_MENUBUT=2:_MSE_ADJUSTBUT=1:_EVENT_NULL=0:_EVENT_REDRAWWIN=1:_EVENT_OPENWIN=2:_EVENT_CLOSEWIN=3:_MESSAGE_QUIT=0:_MESSAGE_DATASAVE=1:_MESSAGE_DATASAVEACK=2
  5. _MESSAGE_DATALOAD=3:_MESSAGE_DATALOADACK=4:_MESSAGE_RAMFETCH=6:_MESSAGE_RAMTRANSMIT=7:_MESSAGE_PREQUIT=8:_MESSAGE_PALETTECHANGE=9:_MESSAGE_SAVEDESKTOP=&A:_MESSAGE_SHUTDOWN=&E:_MESSAGE_HELP=&502:_MESSAGE_MENUWARNING=&400C0:_MESSAGE_MODECHANGE=&400C1
  6. _MESSAGE_TASKINIT=&400C2:_MESSAGE_TASKCLOSEDOWN=&400C3:_MESSAGE_TASKNAMEIS=&400C7:_POPUP_TYPE_TEXT=0:_POPUP_TYPE_WIMPCOLOUR=1:_POPUP_TYPE_DATEPICK=2:_POPUP_TYPE_FONTPICK=4:_POPUP_TYPE_COLOUR24=8:
  7. shell_Error:
  8. GA%,GA$:
  9. &606C2:
  10. <>_ERRNR_NONFATAL
  11. <>_ERRNR_CLAIMMEM
  12. 1<<31)
  13. shell_FatalError
  14. shell_OSCheckVersion(3)
  15. shell_FileExists("Resources:$.Resources.Edit.ThrowBack")
  16. ("Set Basic$File <"+
  17. shell_GetAppName+"$BasicFile>"):
  18. "Edit:ThrowBack"
  19. shell_ErrorBox("Unexpected error:- "+
  20. $+" (Internal error code "+
  21. +")")
  22. $:GA%=
  23. $,"in "+
  24. 34+"EvntShell:ShellLib"):
  25. GA%>0
  26. $,GA%-1)
  27. shell_ErrorBox(GA$)
  28. shell_OK(qA$):
  29. _ERRNR_NONFATAL,qA$
  30. shell_FatalError:
  31. &606C2:
  32. shell_OSCheckVersion(3)
  33. shell_FileExists("Resources:$.Resources.Edit.ThrowBack")
  34. 1<<31)
  35. shell_Exit
  36. ("Set Basic$File <"+
  37. shell_GetAppName+"$BasicFile>"):
  38. "Edit:ThrowBack"
  39. shell_ErrorBox("Unexpected error:- "+
  40. $+" Internal error code "+
  41. shell_ErrorBox(sA$):
  42. YB%,FB%:FB%=_shell_blk%:!FB%=
  43. :$(FB%+4)=sA$+
  44. =_ERRNR_NONFATAL
  45. =_ERRNR_CLAIMMEM
  46. &600DF,FB%,17,"XMessage from "+
  47. shell_GetAppName
  48. &600DF,FB%,1,
  49. shell_GetAppName
  50. shell_GetLastSecureFileName:
  51. c%:c%=_U%!80:
  52. shell_GetString(wF%):
  53. bA$,lD%:
  54. ((wF%?lD%)>31
  55. lD%<&FF):bA$+=
  56. (wF%?lD%):lD%+=1:
  57. :=bA$
  58. shell_GetEventHandler(b%,AA%,WC%):
  59. e%,i%,j%,p%,A$:
  60. b%=-1
  61. b%=-2
  62. shell_HeapBlockInfo(_U%!&C)-8:e%=0:j%=
  63. :i%=_U%!&C:A$="":
  64. (i%!e%=b%)
  65. i%!(e%+4)
  66. i%!(e%+(&C+(WC%*4)))>&8000
  67. #A$=$(i%!(e%+(&C+(WC%*4)))):j%=
  68. e%+=48
  69. i%!(e%+4)=AA%
  70. i%!(e%+(&C+(WC%*4)))>&8000
  71. #A$=$(i%!(e%+(&C+(WC%*4)))):j%=
  72. e%+=48
  73. e%+=48
  74. e%+=48
  75. ((e%>=p%)
  76. j%):=A$
  77. shell_GetEventMenu(vB%,b%,AA%):
  78. e%,i%,j%,p%,m%:
  79. b%=-1
  80. b%=-2
  81. shell_HeapBlockInfo(_U%!&C)-8:e%=0:j%=
  82. :i%=_U%!&C:A$="":
  83. (i%!e%=b%)
  84. shell_Tracef0("GetEventMenu:window handle matched.."):
  85. i%!(e%+4)=AA%
  86. "m%=i%!(e%+8):
  87. m%=-2
  88. m%=_U%!&FC
  89. :e%+=48:
  90. (e%>=p%
  91. j%):=m%
  92. shell_GetEventListOffset(b%,f%,i%,MB%,CD%):
  93. p%,e%,j%,d%,NB%,c%:
  94. (!i%=0
  95. (!i%=0)
  96. >:!i%=
  97. shell_HeapBlockFetch(MB%):c%=!i%:c%!0=0:c%!4=0:=0
  98. shell_HeapBlockInfo(!i%)-8:e%=0:j%=
  99. :d%=-1:NB%=-1:c%=!i%:
  100. NB%<0
  101. (c%!e%=0
  102. c%!e%+4=0)
  103. NB%=e%
  104. (c%!e%=b%)
  105. f%=-1
  106. d%=e%:j%=
  107. shell_Tracef0("GetEventListOffset:icon handle is not -1"):
  108. c%!(e%+4)=f%
  109. d%=e%:j%=
  110. e%+=MB%
  111. e%+=MB%
  112. ((e%>=p%)
  113. (d%=-1
  114. NB%<0
  115. oId%=p%:!i%=
  116. shell_HeapBlockExtend(!i%,MB%):c%=!i%:c%+=d%:c%!0=0:c%!4=0
  117. d%=NB%
  118. shell_AttachPane(b%,
  119. HD%,l%,pA%,rA%):
  120. a%,d%,c%,VB%,IE%:
  121. shell_Tracef0("AttachPane:Attaching Pane Handler"):IE%=
  122. shell_WindowGetFlags(HD%):
  123. 1<<5)=0
  124. shell_Tracef0("AttachPane:'Pane' bit of pane window is not set, fixing.."):
  125. shell_WindowToggleFlags(HD%,1<<5)
  126. 1<<1)
  127. shell_Tracef0("AttachPane:'Moveable' bit of pane window is set, fixing.."):
  128. shell_WindowToggleFlags(HD%,1<<1)
  129. shell_GetEventListOffset(b%,-1,_U%+92,24,
  130. shell_Tracef0("AttachPane:Creating pane event block"):d%=
  131. shell_GetEventListOffset(b%,-1,_U%+92,24,
  132. ):a%=_U%!92+d%:a%!0=b%:a%!4=-1:a%!8=
  133. shell_HeapBlockFetch(4):a%!&C=
  134. shell_HeapBlockFetch(4):a%!16=
  135. shell_HeapBlockFetch(4)
  136. aa%!20=
  137. shell_HeapBlockFetch(4):c%=a%!8:!c%=-1:c%=a%!&C:!c%=-1:c%=a%!16:!c%=-1:c%=a%!20:!c%=-1
  138. :a%=_U%!92+d%:c%=a%!8:g%=0:VB%=0:
  139. c%!g%<>-1:g%+=4:VB%+=1:
  140. :a%!8=
  141. shell_HeapBlockExtend(a%!8,4):c%=a%!8:c%!(VB%*4)=HD%:c%!((VB%+1)*4)=-1:a%!&C=
  142. shell_HeapBlockExtend(a%!&C,4):c%=a%!&C:c%!(VB%*4)=l%:c%!((VB%+1)*4)=-1
  143. a%!16=
  144. shell_HeapBlockExtend(a%!16,4):c%=a%!16:c%!(VB%*4)=pA%:c%!((VB%+1)*4)=-1:a%!20=
  145. shell_HeapBlockExtend(a%!20,4):c%=a%!20:c%!(VB%*4)=rA%:c%!((VB%+1)*4)=-1:
  146. shell_AttachDataLoad(b%,f%,x%,A$,gF%):
  147. a%,c%,d%,P$:
  148. shell_Tracef0("AttachDataLoad:Attaching DataLoad Handler"):
  149. b%=-1
  150. b%=-2
  151. x%=x%
  152. 1<<31
  153. x%=-1
  154. shell_GetEventListOffset(b%,f%,_U%+96,16,
  155. ):a%=_U%!96+d%:
  156. a%!0=0
  157. a%!4=0
  158. shell_Tracef0("AttachDataLoad:This is the first DataLoad Event..."):a%!0=b%:a%!4=f%:
  159. x%<>-1
  160. 9a%!8=
  161. shell_HeapBlockFetch(8):c%=a%!8:c%!0=x%:c%!4=-1
  162. a%!8=-1
  163. :a%!&C=
  164. shell_HeapBlockFetch(8):c%=a%!&C:c%!0=
  165. shell_HeapBlockFetch(
  166. (A$)+1):c%!4=-1:c%=c%!0:$c%=A$
  167. shell_Tracef0("AttachDataLoad:This is another DataLoad Event..."):
  168. x%=-1
  169. shell_HeapBlockReturn(a%!8):
  170. shell_HeapBlockReturn(a%!&C):a%!8=-1:c%=a%!&C:!c%=
  171. shell_HeapBlockFetch(
  172. A$+1):c%=!c%:$c%=A$
  173. a%!8=
  174. shell_HeapBlockExtend(a%!8,4):a%!&C=
  175. shell_HeapBlockExtend(a%!&C,4):g%=0:c%=a%!8:
  176. c%!g%<>-1:g%+=4:
  177. :c%!g%=x%:c%!(g%+4)=-1:c%=a%!&C:c%!g%=
  178. shell_HeapBlockFetch(
  179. A$+1):c%=c%!g%:$c%=A$
  180. shell_GetCmdLineArgs:
  181. shell_Tracef0("AttachDataLoad:cmdline  ="+P$):
  182. shell_Tracef0("AttachDataLoad:flag bit ="+
  183. ((_U%!&64
  184. 1<<5))):
  185. shell_Tracef0("AttachDataLoad:wh%      ="+
  186. ~b%):
  187. shell_Tracef0("AttachDataLoad:type%    ="+
  188. P$<>""
  189. (_U%!&64
  190. 1<<5)
  191. 1<<31
  192. c%=x%
  193. 1<<31
  194. c%=x%
  195. shell_FileType(P$)=c%
  196. shell_Tracef0("AttachDataLoad:Loading file.."):
  197. shell_MessageSendDataLoad(c%,P$):_U%!&64=_U%!&64
  198. (1<<5)
  199. shell_AttachDataSave(b%,f%,XB%,x%,HC%,A$):
  200. a%,c%,d%:
  201. shell_IconIsSprite(b%,f%)
  202. shell_OK(
  203. shell_MessageNoArgs("SHELLMSG29"))
  204. shell_IconSetButtonType(b%,f%,6):
  205. XB%=0
  206. XB%=&64
  207. shell_Tracef0("AttachDataSave:Attaching DataSave Handler to icon "+
  208. f%+" in window &"+
  209. ~b%):
  210. shell_Tracef0("AttachDataSave:Handler function is '"+A$+"'"):d%=
  211. shell_GetEventListOffset(b%,f%,_U%+72,24,
  212. ):a%=_U%!72+d%:a%!0=b%:a%!4=f%:a%!8=XB%:a%!&C=x%
  213. Ha%!16=HC%:a%!20=
  214. shell_HeapBlockFetch(
  215. (A$)+1):c%=a%!20:$c%=A$:
  216. &FF9:
  217. XB%>&8000
  218. '_U%!&88=
  219. shell_HeapBlockInfo(XB%)-8
  220. _U%!&88=XB%
  221. XB%>&8000
  222. %'_U%!&88=
  223. shell_HeapBlockInfo(XB%)-4
  224. _U%!&88=XB%
  225. :_U%!&8C=x%:_U%!&90=XB%:
  226. shell_AttachMenu(b%,AA%,m%,GB%,IB%,BC%):
  227. AA%>=0
  228. shell_IconSetButtonType(b%,AA%,3)
  229. shell_IsWindowStatic(b%)=
  230. shell_OK(
  231. shell_MessageNoArgs("SHELLMSG30"))
  232. shell_Tracef0("AttachMenu:Attaching menu handle &"+
  233. ~m%+" to window handle &"+
  234. ~b%):
  235. shell_EventAdd(b%,AA%,0,m%,""):
  236. shell_AttachMenuMaker(b%,AA%,A$):
  237. shell_Tracef0("AttachMenuMaker:Attaching menumaker function '"+A$+"'"):
  238. shell_EventAdd(b%,AA%,1,0,A$):
  239. shell_AttachMenuDBox(ZB%,e$,cA$,WA$):
  240. a%,c%,JB%:
  241. shell_WindowLoaded(e$)
  242. shell_MessageOneArg("SHELLMSG03",e$)
  243. shell_HeapBlockFetch(&C):a%!0=
  244. shell_HeapBlockFetch(
  245. e$+1):c%=a%!0:$c%=e$:a%!4=
  246. shell_HeapBlockFetch(
  247. cA$+1):c%=a%!4:$c%=cA$:a%!8=
  248. shell_HeapBlockFetch(
  249. WA$+1):c%=a%!8:$c%=WA$:
  250. &45BCE,ZB%,a%:
  251. &45BCC,,
  252. shell_AttachClickSelect(b%,AA%,A$):
  253. shell_EventAdd(b%,AA%,2,0,A$):
  254. shell_AttachClickAdjust(b%,AA%,A$):
  255. shell_EventAdd(b%,AA%,3,0,A$):
  256. shell_AttachUserRedraw(
  257. b%,A$):
  258. a%,XA%:a%=
  259. shell_HeapBlockFetch(40):!a%=b%:
  260. &400CB,,a%:XA%=a%!32:
  261. shell_HeapBlockReturn(a%):
  262. 1<<4)
  263. shell_Tracef0("AttachUserRedraw:auto redraw set!!"):
  264. shell_WindowToggleFlags(b%,1<<4)
  265. shell_EventAdd(b%,-1,4,0,A$):
  266. shell_AttachDrag(b%,AA%,ZH%,A$):
  267. shell_EventAdd(b%,AA%,6,0,A$):
  268. shell_AttachHelpTag(b%,AA%,G$):
  269. shell_EventAdd(b%,AA%,8,0,G$):
  270. shell_EventAdd(b%,AA%,WC%,m%,A$):
  271. e%,FC%,i%,p%,j%:
  272. TD%:e%=0:j%=
  273. b%=-1
  274. b%=-2
  275. shell_HeapBlockInfo(_U%!&C)-8:i%=_U%!&C:
  276. (i%!e%=b%)
  277. i%!(e%+4)=AA%
  278. e%+=48
  279. e%+=48
  280. (e%>=p%
  281. %e%=0:
  282. (i%!e%<>0):e%+=48:
  283. e%>=p%
  284. _U%!&C=
  285. shell_HeapBlockExtend(_U%!&C,48):i%=_U%!&C:i%!(e%+0)=0:i%!(e%+4)=0:i%!(e%+8)=0:i%!(e%+&C)=0:i%!(e%+16)=0:i%!(e%+20)=0:i%!(e%+24)=0:i%!(e%+28)=0:i%!(e%+32)=0:i%!(e%+36)=0:i%!(e%+40)=0:i%!(e%+44)=0
  286. :i%!(e%+0)=b%:i%!(e%+4)=AA%:
  287. m%<>0
  288. i%!(e%+8)=m%
  289. :TD%=e%+(&C+(WC%*4)):
  290. i%!TD%<>0
  291. shell_HeapBlockReturn(i%!TD%)
  292. :FC%=
  293. shell_HeapBlockFetch(
  294. A$+1):$FC%=A$:i%!TD%=FC%:
  295. shell_EventDeleteAll(b%):
  296. e%,m%,j%,p%,i%,_%:e%=0:m%=0:j%=
  297. b%=-1
  298. b%=-2
  299. shell_HeapBlockInfo(_U%!&C)-8:i%=_U%!&C:
  300. (i%!e%=b%)
  301. e%+=48
  302. (e%>=p%
  303. Ci%!(e%+0)=0:i%!(e%+4)=0:i%!(e%+8)=0:
  304. _%=&C
  305. i%!(e%+_%)<>0
  306. shell_HeapBlockReturn(i%!(e%+_%)):i%!(e%+_%)=0
  307. shell_Tracef0("EventDeleteAll:wh%=&"+
  308. ~b%):
  309. shell_DeleteEventDataSave(b%,-1):
  310. shell_DeleteEventBump(b%,-1):
  311. shell_DeleteEventSlider(b%,-1):
  312. shell_DeleteEventBump(b%,f%):
  313. d%,a%,p%,i%,c%:i%=_U%!&68:
  314. shell_GetEventListOffset(b%,f%,_U%+&68,16,
  315. shell_Tracef0("DeleteEventBump:offset%="+
  316. d%>=0
  317. f%=-1
  318. shell_Tracef0("DeleteEventBump:Deleting Bump Event (all events for window handle &"+
  319. ~b%+")")
  320. shell_Tracef0("DeleteEventBump:Deleting Bump Event (window handle was &"+
  321. ~b%+" icon handle was "+
  322. f%+")")
  323. shell_HeapBlockInfo(_U%!&68)-8:
  324. d%=p%-16
  325. UA%=i%!&C:c%=UA%!&C:
  326. shell_HeapBlockReturn(c%!&C):
  327. shell_HeapBlockReturn(c%!16):
  328. shell_HeapBlockReturn(c%):
  329. shell_HeapBlockReturn(_U%!&68):_U%!&68=0:
  330. shell_Tracef0("DeleteEventBump:No Bump events now registered")
  331. _U%!&68=
  332. shell_HeapBlockExtend(_U%!&68,-16)
  333. a%=i%+d%:a%!0=0:a%!4=0:a%!8=0:UA%=a%!&C:
  334. shell_HeapBlockReturn(UA%!&C):
  335. shell_HeapBlockReturn(UA%!16):
  336. shell_HeapBlockReturn(UA%)
  337. d%<0:
  338. shell_DeleteEventDataSave(b%,f%):
  339. d%,a%,p%:
  340. shell_GetEventListOffset(b%,f%,_U%+72,24,
  341. d%>=0
  342. f%=-1
  343. shell_Tracef0("DeleteEventDataSave:Deleting DataSave Event (all events for window handle &"+
  344. ~b%+")")
  345. shell_Tracef0("DeleteEventDataSave:Deleting DataSave Event (window handle was &"+
  346. ~b%+" icon handle was "+
  347. f%+")")
  348. shell_HeapBlockInfo(_U%!72)-8:
  349. d%=p%-24
  350. shell_HeapBlockReturn(_U%!72):_U%!72=0:
  351. shell_Tracef0("DeleteEventDataSave:No DataSave events now registered")
  352. _U%!72=
  353. shell_HeapBlockExtend(_U%!72,-24)
  354. a%=i%+d%:a%!0=0:a%!4=0:a%!8=0:a%!&C=0:a%!16=0:
  355. shell_HeapBlockReturn(a%!20):a%!20=0
  356. d%<0:
  357. shell_MessageNoArgs(G$):=
  358. shell_MessageLookup(G$,"","")
  359. shell_MessageOneArg(G$,o$):=
  360. shell_MessageLookup(G$,o$,"")
  361. shell_MessageTwoArgs(G$,o$,DA$):=
  362. shell_MessageLookup(G$,o$,DA$)
  363. shell_MessageLookup(G$,o$,DA$):
  364. l%,L%,k$,gC%,QC%:
  365. G$,8)="SHELLMSG"
  366. gC%=_U%!284:QC%=_U%!280
  367. gC%=_U%!64:QC%=_U%!68
  368. &61502,QC%,G$,gC%,256,o$,DA$
  369. ,,,L%;l%:
  370. gC%?L%=&D:k$=$(gC%)
  371. shell_WimpInit(hC%,SA$):
  372. &400C0,hC%,&4B534154,SA$
  373. hC%,kA%:
  374. _U%!&64
  375. "WimpExt_Initialise",&E,kA%
  376. :_U%!&94=kA%:=kA%
  377. shell_WimpInit_I(hC%,SA$):
  378. &400C0,hC%,&4B534154,SA$
  379. hC%,kA%:
  380. _U%!&64
  381. "WimpExt_Initialise",&E,kA%
  382. :_U%!&94=kA%:
  383. &81682,kA%:=kA%
  384. shell_WimpCloseDown_I(kA%):
  385. shell_LoseFonts:
  386. _U%!&F0<>-1
  387. "XFontMenu_Release"
  388. _U%!&64
  389. "WimpExt_Initialise",&E,kA%
  390. &600DD,kA%,&4B534154:
  391. &A1683,kA%:
  392. _U%!&64
  393. &628C5,_U%!&94
  394. WimpCloseDown(kA%):
  395. shell_LoseFonts:
  396. _U%!&F0<>-1
  397. "XFontMenu_Release"
  398. _U%!&64
  399. "WimpExt_Initialise",&E,kA%
  400. &600DD,kA%,&4B534154:
  401. _U%!&64
  402. &628C5,_U%!&94
  403. ("Unset "+_shell_AppName$+"$BasicFile"):
  404. shell_LoseFonts:
  405. _%,c%:c%=_U%!&E8:
  406. c%?_%>0:
  407. &40082,_%:c%?_%-=1:
  408. shell_FindFont(f$,lG%):
  409. XA%,oD%:oD%=_U%!&E8:
  410. &40081,,f$,lG%*16,d*16,0,0
  411. XA%:oD%?XA%+=1:
  412. oD%?XA%>=&FF
  413. shell_OK(
  414. shell_MessageNoArgs("SHELLMSG18"))
  415. shell_Init:
  416. tA%,_%,c%,P$:
  417. xA%,C$,D$,UD%:
  418. shell_DefineConstants:_SHELL_SENDDATALOAD_MY_REF%=0:_SHELL_SENDDATALOAD_FILE$="":
  419. _U%360,_shell_blk%260:_Q%=
  420. shell_HeapBlockFetch(&BB8):tA%=
  421. shell_HeapBlockFetch(48):tA%!0=0:tA%!4=0:tA%!8=0:tA%!&C=0:tA%!16=0
  422. tA%!20=0:tA%!24=0:tA%!28=0:tA%!32=0:tA%!36=0:tA%!40=0:tA%!44=0:_U%!0=0:_U%!4=0:_U%!8=0:_U%!&C=tA%:_U%!16=1:_U%!20=0:_U%!24=0:_U%!28=0:_U%!32=-1:_U%!36=0:_U%!40=0:_U%!44=-1:_U%!48=0:_U%!52=0:_U%!56=0:_U%!60=0:_U%!64=0:_U%!68=0:_U%!72=0
  423. _U%!76=
  424. shell_HeapBlockFetch(256):_U%!80=0:_U%!84=-1:_U%!88=0:_U%!92=0:_U%!96=0:_U%!&64=0:_U%!&68=0:_U%!&6C=-1:_U%!&70=-1:_U%!&74=-1:_U%!&78=-1:_U%!&7C=-1:_U%!&80=0:_U%!&84=0:_U%!&88=-1:_U%!&8C=-1:_U%!&90=-1:_U%!&94=0:_U%!&98=0:_U%!&9C=0:_U%!&A0=0
  425. _U%!&A4=0:_U%!&A8=0:_U%!&AC=0:_U%!&B0=0:_U%!&B4=0:_U%!&B8=0:_U%!&BC=0:_U%!&C0=0:_U%!&C4=0:_U%!&C8=0:_U%!&CC=0:_U%!&D0=-1:_U%!&D4=-1:_U%!&D8=0:_U%!&DC=0:_U%!&E0=0:_U%!&E4=0:_U%!&E8=
  426. shell_HeapBlockFetch(256):_U%!&EC=
  427. shell_HeapBlockFetch(256)
  428. _U%!&F0=-1:_U%!&F4=0:_U%!&F8=0:_U%!&FC=0:_U%!256=0:_U%!260=1:_U%!264=0:_U%!268=0:_U%!272=0:_U%!276=0:_U%!280=0:_U%!284=0:_U%!288=-1:_U%!292=-1:_U%!296=-1:_U%!300=0:_U%!304=0:_U%!308=0:_U%!312=0:_U%!316=0:_U%!320=0:_U%!324=0:_U%!328=0:_U%!332=0
  429. _U%!336=0:_U%!340=0:_U%!344=0:
  430. shell_MemFill(_U%!&E8,256,0):
  431. shell_MemFill(_U%!&EC,256,0):xA%=
  432. shell_HeapBlockFetch(256):C$=
  433. shell_OSVarGetVal(xA%,256,"Obey$Dir",1):
  434. shell_HeapBlockReturn(xA%):D$=
  435. shell_Leaf(C$),2)
  436. _U%!&BC=
  437. shell_HeapBlockFetch((
  438. C$)+1):_U%!&C4=
  439. shell_HeapBlockFetch((
  440. D$)+1):c%=_U%!&BC:$c%=C$:c%=_U%!&C4:$c%=D$:P$=
  441. shell_OSReadCommandArg(1):
  442. P$<>""
  443. dL_U%!&64=_U%!&64
  444. 1<<5:c%=
  445. shell_HeapBlockFetch(
  446. P$+1):$(c%)=P$:_U%!324=c%
  447. shell_OSModuleCheckVersion("WimpExtension",1.98):
  448. _U%!&64=_U%!&64
  449. n/c%=
  450. RO3_Present:
  451. _U%!&64=_U%!&64
  452. 1<<&A
  453. _U%!&64=_U%!&64
  454. 1<<&C:UD%=&64:
  455. shell_PollSetInterval(UD%):
  456. shell_PollSetPrevInterval(UD%):
  457. jD%:jD%+=UD%:
  458. shell_InitModules:
  459. shell_InitModules:
  460. k%:k%=
  461. _shell_StaticList_Init:
  462. shell_GetCmdLineArgs:
  463. _U%!324<>0
  464. P$=$(_U%!324)
  465. shell_Tracef0("GetCmdLineArgs:cmdline was "+P$):=P$
  466. shell_FileType(a$):
  467. 8,5,a$
  468. ,,x%:x%=(x%
  469. &FFF00)>>>8:=x%
  470. shell_FileExists(a$):
  471. x%,C:C=5:
  472. 8,C,a$
  473. shell_CatInfoRead(a$):
  474. x%,ND%,YD%,LB%,ZC%,B$:
  475. 8,5,a$
  476. x%,,ND%,YD%,LB%,ZC%:
  477. ="Not Found"
  478. ZC%=51
  479. B$+="WR "
  480. ZC%=&BB
  481. B$+="LWR"
  482. ZC%=&88
  483. B$+="DL "
  484. B$+=" "+
  485. shell_StringPadLeading(
  486. ~ND%,"0",8):B$+=" "+
  487. shell_StringPadLeading(
  488. ~YD%,"0",8):B$+=" "+
  489. shell_StringPadLeading(
  490. ~LB%,"0",8):=B$
  491. shell_FileGetDateStamp(a$):
  492. x%,iF%,C:C=5:
  493. 8,C,a$
  494. x%,,,iF%:
  495. shell_GetAppDir:
  496. c%:c%=_U%!&BC:=$c%
  497. shell_GetAppDataDir:
  498. c%:c%=_U%!&C0:=$c%
  499. shell_GetAppName:
  500. c%:c%=_U%!&C4:=$c%
  501. shell_ResourcesInit:
  502. IA$,c%,D$,C$,iD%:
  503. xA%,PC%,wC%:D$=
  504. shell_GetAppName:C$=
  505. shell_GetAppDir:xA%=
  506. shell_HeapBlockFetch(256):
  507. shell_OSVarExists(xA%,D$+"Res$Path")
  508. _U%!&64=_U%!&64
  509. shell_OSVarExists(xA%,D$+"Data$Dir")
  510. nIA$=
  511. shell_OSVarGetVal(xA%,256,D$+"Data$Dir",1):_U%!&C0=
  512. shell_HeapBlockFetch((
  513. IA$)+1):c%=_U%!&C0:$c%=IA$
  514. _U%!&C0=
  515. shell_HeapBlockFetch((
  516. C$)+1):c%=_U%!&C0:$c%=C$
  517. _U%!&64
  518. shell_FileExists(D$+"Res:Messages")
  519. shell_MessagesInit(D$+"Res:Messages",_U%!68,_U%!64)
  520. shell_FileExists(D$+"Res:ShellMsgs")
  521. shell_MessagesInit(D$+"Res:ShellMsgs",_U%!280,_U%!284)
  522. shell_MessagesInit("EvntShellRes:ShellMsgs",_U%!280,_U%!284)
  523. &20035,-1,4
  524. ,,wC%:
  525. &20035,-1,5
  526. ,,PC%:
  527. PC%=1
  528. shell_FileExists(D$+"Res:Sprites22")
  529. 4_U%!16=
  530. shell_SpriteAreaLoad(D$+"Res:Sprites22")
  531. shell_FileExists(D$+"Res:Sprites")
  532. 2_U%!16=
  533. shell_SpriteAreaLoad(D$+"Res:Sprites")
  534. _U%!16=1
  535. :iD%=
  536. shell_3DEnabled:
  537. shell_FileExists(D$+"Res:Templates3")
  538. shell_TemplatesInit(D$+"Res:Templates3",k%)
  539. shell_FileExists(D$+"Res:Templates")
  540. shell_TemplatesInit(D$+"Res:Templates",k%)
  541. shell_FileExists(C$+".Messages")
  542. shell_MessagesInit(C$+".Messages",_U%!68,_U%!64)
  543. shell_FileExists(C$+".ShellMsgs")
  544. shell_MessagesInit(C$+".ShellMsgs",_U%!280,_U%!284)
  545. shell_MessagesInit("EvntShellRes:ShellMsgs",_U%!280,_U%!284)
  546. &20035,-1,4
  547. ,,wC%:
  548. &20035,-1,5
  549. ,,PC%:
  550. PC%=1
  551. shell_FileExists(C$+".Sprites22")
  552. 41_U%!16=
  553. shell_SpriteAreaLoad(C$+".Sprites22")
  554. shell_FileExists(C$+".Sprites")
  555. 7/_U%!16=
  556. shell_SpriteAreaLoad(C$+".Sprites")
  557. _U%!16=1
  558. :iD%=
  559. shell_3DEnabled:
  560. shell_FileExists(C$+".Templates3")
  561. shell_TemplatesInit(C$+".Templates3",k%)
  562. shell_FileExists(C$+".Templates")
  563. shell_TemplatesInit(C$+".Templates",k%)
  564. &45BC0:
  565. shell_HeapBlockReturn(_Q%):_Q%=
  566. shell_HeapBlockFetch(&400):
  567. shell_HeapBlockReturn(xA%):
  568. shell_SpriteAreaLoad(I$):
  569. nB%,S%,T%:S%=
  570. (I$):T%=
  571. #S%+16:
  572. #S%:nB%=
  573. shell_HeapBlockFetch(T%):!nB%=T%:nB%!4=0:nB%!8=16:nB%!&C=16:
  574. 46,521,nB%:
  575. 46,522,nB%,I$:
  576. shell_Tracef0("SpriteLoad:Sprite file loaded at &"+
  577. ~nB%):=nB%
  578. shell_UserSpritesBase:=_U%!16
  579. shell_SpriteGetPtr(aC%,R$):
  580. gB%,e%:gB%=
  581. shell_HeapBlockFetch(21):$gB%=R$:
  582. 46,280,aC%,gB%
  583. ,,e%:
  584. shell_HeapBlockReturn(gB%):=e%
  585. shell_MessageExpand(h$):
  586. L$,k$,CB%:L$="":
  587. h$,"\")>0:CB%=
  588. h$,"\"):L$+=
  589. h$,CB%-1):k$=
  590. h$,CB%+1,1):h$=
  591. h$,CB%+2):
  592. "A":L$+="Click ADJUST to"
  593. "a":L$+="ADJUST"
  594. "D":L$+="Drag with SELECT to"
  595. "d":L$+="Drag with ADJUST to"
  596. "G":L$+="This option is greyed out because"
  597. "R":L$+="Move the pointer right"
  598. "S":L$+="Click SELECT to"
  599. "s":L$+="SELECT"
  600. "T":L$+="This is the"
  601. "W":L$+="This window is"
  602. "w":L$+="window"
  603. L$+="\"+k$
  604. :=L$+h$
  605. shell_OpenMenu(NA%,TA%,DB%):
  606. A$:A$=
  607. shell_GetEventHandler(_U%!28,_U%!32,1):
  608. A$<>""
  609. shell_Tracef0("OpenMenu:About to call "+"FN"+A$+"("+
  610. _U%!28+","+
  611. _U%!32+")"):k%=
  612. ("FN"+A$+"(_U%!28,_U%!32)")
  613. shell_Tracef0("OpenMenu:no menumaker function registered")
  614. DB%<>_U%!24
  615. shell_HeapBlockExists(_U%!256)
  616. shell_HeapBlockReturn(_U%!256):_U%!256=0
  617. shell_HeapBlockExists(_U%!&F4)
  618. shell_HeapBlockReturn(_U%!&F4):_U%!&F4=0
  619. DB%=_U%!&FC
  620. &400D4,,DB%,NA%-64,TA%:_U%!264=1
  621. _Q%!0=NA%:_Q%!4=TA%:
  622. &45BC5,DB%,_Q%:_U%!264=0
  623. :_U%!24=DB%:_U%!36=NA%:_U%!40=TA%:_U%!52=_U%!28:_U%!56=_U%!32:
  624. shell_MenuLastXPos:=_U%!36
  625. shell_MenuLastYPos:=_U%!40
  626. shell_MenuAttachDbox(i$):
  627. "Menu_SetSubHandle",_U%!8,
  628. shell_MenuString(i$),1:
  629. shell_Tracef0("MenuAttachDbox:Dialog box ("+i$+") attached"):
  630. shell_MessageWindow(H$,qG%,pA$,v$):
  631. JE%,FB%:FB%=
  632. shell_HeapBlockFetch(260):!FB%=0:$(FB%+4)=H$+
  633. v$=""
  634. v$="Message from "+pA$
  635. &400DF,FB%,19,v$
  636. &400DF,FB%,17,v$
  637. shell_HeapBlockReturn(FB%):=JE%
  638. shell_CreateWindow(gA$,
  639. OC%:OC%=
  640. shell_GetWB(gA$):OC%!64=_U%!16:
  641. &400C1,,OC%
  642. shell_CreateWindow2(N,l%,WH%,jG%,MH%,uA%,qD%,nA%,YB%,kB%):
  643. Q%:Q%=
  644. shell_HeapBlockFetch(&BB8):Q%!0=qD%:Q%!4=nA%:Q%!8=YB%:Q%!&C=kB%:Q%!16=0:Q%!20=0:Q%!24=-1:Q%!28=l%:Q%?32=7:Q%?33=2:Q%?34=WH%:Q%?35=jG%:Q%?36=3:Q%?37=1:Q%?38=2:Q%?39=0:Q%!40=0:Q%!44=uA%
  645. Q%!48=MH%:Q%!52=0:Q%!56=317:Q%!60=&3000:Q%!68=1:Q%!72=N:Q%!76=-1:Q%!80=
  646. $N:Q%!84=0:
  647. &400C1,,Q%
  648. shell_HeapBlockReturn(Q%):=h%
  649. shell_WindowHasTitleBar(b%):=(
  650. shell_WindowGetFlags(b%)
  651. 1<<26)
  652. shell_WindowIsMoveable(b%):=(
  653. shell_WindowGetFlags(b%)
  654. 1<<1)
  655. shell_WindowIsAPane(b%):=(
  656. shell_WindowGetFlags(b%)
  657. 1<<5)
  658. shell_WindowIsNotBounded(b%):=(
  659. shell_WindowGetFlags(b%)
  660. 1<<6)
  661. shell_WindowTrapsHotKeys(b%):=(
  662. shell_WindowGetFlags(b%)
  663. 1<<&C)
  664. shell_WindowIsOpen(b%):=(
  665. shell_WindowGetFlags(b%)
  666. 1<<16)
  667. shell_WindowIsOnTop(b%):=(
  668. shell_WindowGetFlags(b%)
  669. 1<<17)
  670. shell_WindowHasBeenToggled(b%):=(
  671. shell_WindowGetFlags(b%)
  672. 1<<18)
  673. shell_WindowHasInputFocus(b%):=(
  674. shell_WindowGetFlags(b%)
  675. 1<<20)
  676. shell_WindowHasBackIcon(b%):=(
  677. shell_WindowGetFlags(b%)
  678. 1<<24)
  679. shell_WindowHasCloseIcon(b%):=(
  680. shell_WindowGetFlags(b%)
  681. 1<<25)
  682. shell_WindowHasToggleIcon(b%):=(
  683. shell_WindowGetFlags(b%)
  684. 1<<27)
  685. shell_WindowHasVScrollBar(b%):=(
  686. shell_WindowGetFlags(b%)
  687. 1<<28)
  688. shell_WindowHasAdjustSizeIcon(b%):=(
  689. shell_WindowGetFlags(b%)
  690. 1<<29)
  691. shell_WindowHasHScrollBar(b%):=(
  692. shell_WindowGetFlags(b%)
  693. 1<<30)
  694. shell_WindowGetFlags(b%):
  695. l%,a%:a%=
  696. shell_HeapBlockFetch(36):a%!0=b%:
  697. &400CB,,a%:l%=a%!32:
  698. shell_HeapBlockReturn(a%):=l%
  699. shell_WindowGetTitleFlags(b%):
  700. l%,a%:a%=
  701. shell_HeapBlockFetch(&64+(
  702. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  703. &400CC,,a%:l%=a%!60:
  704. shell_HeapBlockReturn(a%):=l%
  705. shell_IconGetFlags(b%,f%):
  706. l%,a%:a%=
  707. shell_HeapBlockFetch(50):a%!0=b%:a%!4=f%:
  708. &400CE,,a%:l%=a%!24:
  709. shell_HeapBlockReturn(a%):=l%
  710. shell_WindowTitleFlags(b%):
  711. l%,a%:a%=
  712. shell_HeapBlockFetch(&64+(
  713. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  714. &400CC,,a%:l%=a%!60:
  715. shell_HeapBlockReturn(a%):=l%
  716. shell_WindowTitleHasBorder(b%):=(
  717. shell_WindowTitleFlags(b%)
  718. 1<<2)
  719. shell_WindowTitleIsSprite(b%):=(
  720. shell_WindowTitleFlags(b%)
  721. 1<<1)
  722. shell_WindowTitleIsText(b%):=(
  723. shell_WindowTitleFlags(b%)
  724. 1<<0)
  725. shell_WindowTitleIsHCentred(b%):=(
  726. shell_WindowTitleFlags(b%)
  727. 1<<3)
  728. shell_WindowTitleIsVCentred(b%):=(
  729. shell_WindowTitleFlags(b%)
  730. 1<<4)
  731. shell_WindowTitleIsFilled(b%):=(
  732. shell_WindowTitleFlags(b%)
  733. 1<<5)
  734. shell_WindowTitleIsAAliased(b%):=(
  735. shell_WindowTitleFlags(b%)
  736. 1<<6)
  737. shell_WindowTitleIsIndirected(b%):=(
  738. shell_WindowTitleFlags(b%)
  739. 1<<8)
  740. shell_WindowGetTitle(b%):
  741. T$,a%:a%=
  742. shell_HeapBlockFetch(&64+(
  743. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  744. &400CC,,a%:
  745. (a%!32
  746. 1<<26)
  747. ((a%!60)
  748. 256)=0
  749. T$=$(a%+76)
  750. T$=$(!(a%+76))
  751. shell_HeapBlockReturn(a%):=T$
  752. shell_WindowTitleBufferLength(b%):
  753. y%,a%:a%=
  754. shell_HeapBlockFetch(&64+(
  755. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  756. &400CC,,a%:
  757. ((a%!60)
  758. 256)=0
  759.     y%=&C
  760. y%=a%!84
  761. shell_HeapBlockReturn(a%):=y%
  762. shell_WindowMoveToIcon(b%,sE%,f%,pA%,rA%):
  763. r%,o%:r%=
  764. shell_HeapBlockFetch(50):o%=
  765. shell_HeapBlockFetch(36):o%!20=0:
  766. shell_OSCheckVersion(3)
  767. sE%=-1
  768. !o%=-2
  769. !o%=sE%
  770. &400CB,,o%
  771. :r%!0=sE%:r%!4=f%:
  772. &400CE,,r%:
  773. shell_WindowMoveTo(b%,r%!8+pA%-o%!20,r%!20+rA%):
  774. shell_HeapBlockReturn(r%):
  775. shell_HeapBlockReturn(o%):
  776. shell_WindowMoveTo(b%,NA%,TA%):
  777. sF%,qF%,d%,a%:a%=
  778. shell_HeapBlockFetch(&64+(
  779. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  780. &400CC,,a%:sF%=a%!&C-a%!4:qF%=a%!16-a%!8:a%!4=NA%:a%!8=TA%:a%!&C=NA%+sF%:a%!16=TA%+qF%:
  781. &400C5,,a%:
  782. &400C6,,a%
  783. shell_IsWindowStatic(b%)
  784. shell_OpenWindowStatic(b%)
  785. shell_OpenWindowDynamic2(b%,0,0)
  786. shell_HeapBlockReturn(a%):
  787. shell_WindowBringToTop(b%):
  788. MC%:MC%=
  789. shell_HeapBlockFetch(256):MC%!0=b%:
  790. &400CB,,MC%:MC%!28=-1:
  791. &400E7,2,MC%,b%:
  792. &400C7,0,MC%:
  793. shell_HeapBlockReturn(MC%):
  794. shell_UpdateWindow(h%,qD%,nA%,YB%,kB%):
  795. a%:a%=
  796. shell_HeapBlockFetch(60):a%!0=h%:a%!4=qD%:a%!8=nA%:a%!&C=YB%:a%!16=kB%:
  797. &400C9,,a%
  798. &400CB,,a%:
  799. shell_HeapBlockReturn(a%):
  800. shell_OpenWindowDynamic2(b%,pA%,rA%):
  801. k%,SB%:SB%=
  802. shell_HeapBlockFetch(20):_U%!20=b%:
  803. &400CF,,SB%:
  804. &400D4,,b%,SB%!0+pA%,SB%!4+rA%:
  805. shell_HeapBlockReturn(SB%):
  806. shell_ClaimKeypress:
  807. _U%!20<>0
  808. &400D4,,-1:k%=
  809. shell_DeleteWindow(_U%!20):_U%!20=0
  810. shell_OpenWindow(b%,uE%,fC%):
  811. d%,a%,w%,g%,QG%,KB%,dA%,vA%:
  812. SC%,eC%,kB%,zF%,MF%,nC%,oC%:d%=
  813. shell_GetEventListOffset(b%,-1,_U%+304,&C,
  814. d%>=0
  815. Gga%=_U%!304+d%:c%=a%!8:
  816. shell_Tracef0("OpenWindow:About to call "+"FN"+$c%):nC%=
  817. ("FN"+$c%):
  818. nC%=0
  819. :eC%=
  820. :kB%=
  821. shell_HeapBlockFetch(40):kB%!0=b%:
  822. &400CB,,kB%:
  823. (kB%!32
  824. &80000)=&80000
  825. shell_HeapBlockReturn(kB%):oC%=
  826. shell_HeapBlockFetch(20):
  827. &400CF,,oC%:_Q%!0=b%:
  828. &400CB,,_Q%
  829. &400C5,,_Q%
  830. shell_GetEventListOffset(b%,-1,_U%+92,24,
  831. d%>-1
  832. aJa%=(_U%!92)+d%:VC%=a%!8:_D%=a%!&C:JC%=a%!16:bC%=a%!20:_Q%!0=b%:
  833. fC%>0
  834. KB%=fC%
  835. KB%=-1
  836. KB%=_Q%!28
  837. &400C5,,_Q%:
  838. &400CB,,_Q%:
  839. &400C6,,_Q%
  840. shell_HeapBlockFetch(40):g%=0:
  841. VC%!g%<>-1:w%!0=VC%!g%:
  842. QG%=0
  843. QG%=w%!0
  844. {7zF%=w%!0:
  845. &400CB,,w%:
  846. oC%!16=-9
  847. oC%!16>-5
  848. SC%=_D%!g%:
  849. 0,1:dA%=w%!16-w%!8:vA%=w%!&C-w%!4:w%!4=_Q%!4+JC%!g%:w%!&C=w%!4+vA%:w%!16=_Q%!16+bC%!g%:w%!8=w%!16-dA%
  850. 2:dA%=w%!16-w%!8:vA%=_Q%!&C-_Q%!4:w%!4=_Q%!4+JC%!g%:w%!&C=_Q%!&C:w%!16=_Q%!16+bC%!g%:w%!8=w%!16-dA%
  851. 3:dA%=_Q%!16-_Q%!8:vA%=w%!&C-w%!4:w%!4=_Q%!4+JC%!g%:w%!&C=w%!4+vA%:w%!16=_Q%!16:w%!8=_Q%!8+bC%!g%
  852. 4:dA%=w%!16-w%!8:vA%=_Q%!&C-_Q%!4:w%!4=_Q%!4+JC%!g%:w%!&C=_Q%!&C:w%!16=_Q%!8+dA%+bC%!g%:w%!8=w%!16+dA%
  853. 5:dA%=_Q%!16-_Q%!8:vA%=w%!&C-w%!4:w%!4=_Q%!&C-vA%+JC%!g%:w%!&C=w%!4+vA%:w%!16=_Q%!16:w%!8=_Q%!8
  854. w%!28=KB%
  855. w%!28=MF%
  856. &400C5,,w%
  857. :MF%=w%!0:g%+=4:
  858. _Q%!28=zF%:
  859. &400C5,,_Q%
  860. shell_HeapBlockReturn(w%)
  861. _Q%!0=b%:
  862. &400CB,,_Q%
  863. KB%=-2
  864. _Q%!28=-2
  865. fC%=-1
  866. _Q%!28=-1
  867. &400C5,,_Q%
  868. shell_HeapBlockReturn(oC%):
  869. shell_CloseWindow(b%):
  870. d%,a%,VC%,_D%,JC%,bC%,q%,nC%:d%=
  871. shell_GetEventListOffset(b%,-1,_U%+308,&C,
  872. d%>=0
  873. ha%=_U%!308+d%:c%=a%!8:
  874. shell_Tracef0("CloseWindow:About to call "+"FN"+$c%):nC%=
  875. ("FN"+$c%):
  876. nC%=0
  877. shell_HeapBlockFetch(60):
  878. shell_GetEventListOffset(b%,-1,_U%+92,24,
  879. d%>-1
  880. la%=(_U%!92)+d%:_D%=a%!&C:JC%=a%!16:bC%=a%!20:g%=0:VC%=a%!8:
  881. VC%!g%<>-1:q%!0=VC%!g%:
  882. &400C6,,q%:g%+=4:
  883. :q%!0=b%:
  884. &400C6,,q%
  885. shell_HeapBlockReturn(q%):
  886. shell_GetDynamicWindowHandle:=_U%!20
  887. shell_DeleteWindow(h%):
  888. q%:q%=
  889. shell_HeapBlockFetch(20):
  890. h%<>0
  891. oktodeletew(h%)
  892. shell_EventDeleteAll(h%):
  893. shell_RemoveHandleFromWindowList(h%):
  894. h%=_U%!20
  895. _U%!20=0
  896. shell_RemoveStaticWindowFromList(h%)
  897. :q%!0=h%:
  898. &400C3,,q%:h%=0
  899. shell_HeapBlockReturn(q%):=h%
  900. oktodeletew(h%):=-1
  901. oktoclosew(h%):=-1
  902. cliprect(A,
  903. oG%):
  904. SA%,VA%:
  905. lwaorigin(A,SA%,VA%):eA%=A!24-SA%:oA%=A!28-VA%:UH%=A!32-SA%:oG%=A!36-VA%:
  906. poll(NC%,LE%):
  907. _U%!&64
  908. "WimpExt_PrePoll"
  909. &400C7,NC%,_Q%
  910. _U%!&64
  911. "WimpExt_Action",_U%!&94,_Q%,RA%
  912. shell_Poll_I(NC%,LE%):
  913. _U%!&64
  914. "WimpExt_PrePoll"
  915. &400C7,NC%,_Q%
  916. _U%!&64
  917. "WimpExt_Action",_U%!&94,_Q%,xB%
  918. &81686,xB%,,LE%:=xB%
  919. shell_PollIdle(NC%,LE%):
  920. _U%!&64
  921. "WimpExt_PrePoll"
  922. &400E1,NC%,_Q%,jD%
  923. _U%!&64
  924. "WimpExt_Action",_U%!&94,_Q%,xB%
  925. shell_PollSetInterval(aE%):jF%=aE%:
  926. shell_PollSetPrevInterval(aE%):JH%=aE%:
  927. shell_PollReadInterval:=jF%
  928. shell_PollReadPrevInterval:=JH%
  929. shell_DoBackgroundTask:
  930. shell_IconIsDraggable(b%,f%):
  931. l%:l%=
  932. shell_IconGetFlags(b%,f%):c%=(l%
  933. &6000):
  934. c%=&6000=
  935. shell_IconIsSprite(b%,f%):
  936. l%,c%:l%=
  937. shell_IconGetFlags(b%,f%):c%=(l%
  938. 1<<1):
  939. c%=(1<<1)
  940. shell_IconDragBox(b%,f%):
  941. a%,I,J,wA%,l%,XA%,hF%,UF%,XC%,FA$:
  942. HC%,R$:wA%=
  943. shell_GetEventListOffset(b%,f%,_U%+72,24,
  944. wA%>=0
  945. na%=_U%!72+wA%:HC%=a%!16:R$=
  946. shell_IconGetData(b%,HC%):
  947. R$=""
  948. shell_OK(
  949. shell_MessageNoArgs("SHELLMSG28"))
  950. shell_HeapBlockFetch(&64+(
  951. shell_WindowCountIcons(b%)*32)):!a%=b%:
  952. &400CC,,a%:I=a%!4-a%!20:J=a%!16-a%!24:UF%=a%!68:a%!4=f%:
  953. &400CE,,a%:!a%=b%:a%!4=5:l%=a%!24:XC%=a%!32:a%!8=a%!8+I:a%!&C=a%!&C+J:a%!16=a%!16+I:a%!20=a%!20+J:a%!24=0:a%!28=0
  954. Ja%!32=&7FFFFFFF:a%!36=&7FFFFFFF:
  955. 6,&A1,28
  956. ,,XA%:hF%=((XA%
  957. 2)=2):
  958. XA%=l%:
  959. &FA$=
  960. shell_IconGetCommand(XC%,"s")
  961. shell_OK(
  962. shell_MessageNoArgs("SHELLMSG19"))
  963. FA$<>""
  964. &42400,&85,UF%,FA$,a%+8:_U%!&64=_U%!&64
  965. &400D0,,a%
  966. &400D0,,a%
  967. shell_HeapBlockReturn(a%)
  968. shell_Tracef0("IconDragBox:WARNING! no user drag handler registered for this icon!"):
  969. shell_Tracef0("IconDragBox:now checking for a slider drag event.."):wA%=
  970. shell_GetEventListOffset2(b%,f%,_U%+332,32,
  971. shell_Tracef0("IconDragBox:event offset is "+
  972. wA%):
  973. wA%>=0
  974. shell_HandleSlider(b%,f%,wA%)
  975. shell_HandleAttachedMenu(_Q%,b%,f%):
  976. f%<>-1
  977. b%>-1
  978. shell_GetEventMenu(_Q%!8,b%,f%):
  979. m%<>0
  980. shell_HandleMenuOpen(_Q%,m%,b%,f%,
  981. shell_DoOLEHandling:
  982. shell_OLEInProgress
  983. shell_OLEScanLinkedFiles
  984. shell_Action(mG%):
  985. A$,m%,i$,tA$,bB%,EB%,TB%,XE%:
  986. b%,f%,k%,_temp28%,_temp32%,_temp24%,_temp%,YE%:
  987. yC%,d%,vF%:
  988. _EVENT_NULL:
  989. (vF%-jD%)>0:jD%+=jF%:
  990. shell_DoOLEHandling:
  991. shell_DoBackgroundTask:
  992. (_U%!&64
  993. 1<<&B)
  994. shell_Slider
  995. _EVENT_REDRAWWIN:
  996. shell_RedrawWindow(_Q%!0)
  997. _EVENT_OPENWIN:
  998. shell_OpenWindow(_Q%!0,
  999. _EVENT_CLOSEWIN:
  1000. shell_CloseWindow(_Q%!0)
  1001. shell_PointerLeavingWindow(_Q%)
  1002. shell_PointerEnteringWindow(_Q%)
  1003. 6:_U%!28=_Q%!&C:_U%!32=_Q%!16:EB%=_Q%!0:TB%=_Q%!4:_U%!272=_Q%!0:_U%!276=_Q%!4:_U%!320=_Q%!8:_temp28%=_Q%!&C:_temp32%=_Q%!16:f%=_Q%!16:
  1004. shell_Tracef0("Action:Mouse_Click event detected")
  1005. shell_Tracef0("Action:Window Handle was &"+
  1006. ~_Q%!&C+" Icon Handle was "+
  1007. _Q%!16):
  1008. _Q%!&C=_U%!288
  1009. _Q%!16=_U%!292
  1010. shell_HandleBumpIcons(_U%!296,_Q%!&C,_Q%!16,_Q%!8)
  1011. _U%!288=-1:_U%!292=-1:_U%!296=-1:
  1012. _Q%!16>=0
  1013. shell_GetEventListOffset2(_Q%!&C,_Q%!16,_U%+&68,16,0):
  1014. shell_Tracef0("DEBUG::bump event offset is "+
  1015. d%>=0
  1016. shell_HandleBumpIcons(d%,_Q%!&C,_Q%!16,_Q%!8)
  1017. (_Q%!8=64)
  1018. shell_IconIsDraggable(_Q%!&C,_Q%!16):
  1019. <b$="Icon is draggable":
  1020. shell_IconDragBox(_Q%!&C,_Q%!16)
  1021. b$="Icon is not draggable"
  1022. shell_Tracef0("Action:"+b$)
  1023. _Q%!8
  1024. shell_ActionSelectButton
  1025. shell_ActionMenuButton
  1026. shell_ActionAdjustButton
  1027. _U%!&64
  1028. &42401:_U%!&64=_U%!&64
  1029. :_U%!&80=0:
  1030. (_U%!&64
  1031. 1<<&B)=0
  1032.     .7A$=
  1033. shell_GetEventHandler(_U%!28,_U%!32,6):
  1034. A$<>""
  1035. shell_Tracef0("Action:Drag event detected - function is "+A$):k%=
  1036. ("FN"+A$+"(_temp28%,_temp32%)")
  1037. shell_Tracef0("Action:Drag event detected - no handler function"):
  1038. shell_SendDataSave(_U%!28,_U%!32)
  1039. _U%!&64=_U%!&64
  1040. 1<<&B
  1041. shell_Tracef0("Action:keypress is="+
  1042. _Q%!24):
  1043. _Q%!24
  1044. &D,394,398,399,410,430,431:XE%=
  1045. shell_WritableIconHandler(_Q%!0,_Q%!4,_Q%!24)
  1046. shell_HotKeyProcess(_Q%!24)
  1047. shell_Tracef0("Action:Keypress not claimed, passing it on"):
  1048. &400DC,_Q%!24
  1049. shell_Tracef0("Action:Keypress claimed by this application")
  1050. shell_ActionMenuSelect(_Q%)
  1051. shell_IconEnsureVisible(_Q%!0,_Q%!4)
  1052. 17,18:
  1053. shell_Receive(_Q%)
  1054. shell_UserMessageAcknowledge(_Q%)
  1055. shell_ActionSelectButton:
  1056. d%,PA%,S$,dG%:
  1057. shell_Tracef0("ActionSelectButton:Mouse Button was SELECT"):
  1058. _U%!32>=0
  1059.     Z=d%=
  1060. shell_GetEventListOffset2(_Q%!&C,_Q%!16,_U%+340,24,
  1061. d%=-1
  1062. d%>=0
  1063. dG%=!(_U%!340+d%+16):
  1064. _POPUP_TYPE_DATEPICK:PA%=_U%!340+d%:
  1065. PA%!&C=-1
  1066. S$=""
  1067. S$=$(PA%!&C)
  1068. shell_DatePickerOpen(PA%!0,PA%!8,PA%!4,S$)
  1069. _POPUP_TYPE_FONTPICK:PA%=_U%!340+d%:
  1070. PA%!&C=-1
  1071. S$=""
  1072. S$=$(PA%!&C)
  1073. shell_FontPickerOpen(PA%!0,PA%!8,PA%!4,S$)
  1074. _POPUP_TYPE_COLOUR24:PA%=_U%!340+d%:
  1075. PA%!&C=-1
  1076. S$=""
  1077. S$=$(PA%!&C)
  1078. shell_ColourPickerOpen(PA%!0,PA%!8,PA%!4,S$)
  1079. _POPUP_TYPE_TEXT:
  1080. shell_HandleMenuOpen(_Q%,!(_U%!340+d%+20),_Q%!&C,_Q%!16,
  1081. _POPUP_TYPE_WIMPCOLOUR:
  1082. shell_MenuTickOnly1(!(_U%!340+d%+20),
  1083. shell_IconGetBGColour(_Q%!&C,!(_U%!340+d%+8))):
  1084. shell_HandleMenuOpen(_Q%,!(_U%!340+d%+20),_Q%!&C,_Q%!16,
  1085. 99,"Unknown popup type detected"
  1086. shell_HandleAttachedMenu(_Q%,_U%!28,_U%!32):
  1087. _U%!32=0
  1088. shell_HandleAttachedDataSave(_Q%,_U%!28,_U%!32)
  1089. shell_GetEventHandler(_U%!28,_U%!32,2):
  1090. A$<>""
  1091. shell_IconSlab(4,_U%!28,_U%!32):
  1092. shell_Tracef0("ActionSelectButton:About to call "+"FN"+A$+"(&"+
  1093. ~_temp28%+","+
  1094. _temp32%+")"):k%=
  1095. ("FN"+A$+"(_temp28%,_temp32%)")
  1096. _U%!32=0
  1097. _U%!28=_U%!20
  1098. &400D4,,-1
  1099. shell_ActionMenuButton:
  1100. c%,m%,xC%,d%:xC%=
  1101. shell_Tracef0("ActionMenuButton:Mouse Button was MENU"):
  1102. _Q%!16>=0
  1103. shell_GetEventListOffset2(_Q%!&C,_Q%!16,_U%+340,24,
  1104. !(_U%!340+d%+16)=1
  1105. shell_MenuTickOnly1(!(_U%!340+d%+20),
  1106. shell_IconGetBGColour(_Q%!&C,!(_U%!340+d%+8)))
  1107. !(_U%!340+d%+16)=2
  1108. 0PA%=_U%!340+d%:
  1109. PA%!&C=-1
  1110. S$=""
  1111. S$=$(PA%!&C)
  1112. shell_DatePickerOpen(PA%!0,PA%!8,PA%!4,S$)
  1113. shell_HandleMenuOpen(_Q%,!(_U%!340+d%+20),_Q%!&C,_Q%!16,
  1114. shiftmenuclick(_Q%!&C,_Q%!16)
  1115. shell_Tracef0("ActionMenuButton:Checking menu events.."):
  1116. shell_Tracef0("ActionMenuButton:button="+
  1117. _Q%!8+" _Q%!12="+
  1118. _Q%!&C+" _Q%!16="+
  1119. _Q%!16):
  1120. _Q%!16>=0
  1121. shell_GetEventMenu(_Q%!8,_Q%!&C,_Q%!16)
  1122. (m%<>0
  1123. _Q%!&C>0
  1124. _Q%!16>=0)
  1125. shell_GetEventMenu(_Q%!8,_Q%!&C,-1)
  1126. shell_Tracef0("ActionMenuButton:Menu handle is:&"+
  1127. ~m%):
  1128. m%<>0
  1129. shell_HandleMenuOpen(_Q%,m%,_Q%!&C,_Q%!16,xC%)
  1130. shell_HandleMenuOpen(_Q%,m%,b%,f%,xC%):
  1131. r%,o%:
  1132. shell_OpenMenu(_Q%!0,_Q%!4,m%)
  1133. shell_HeapBlockFetch(50):o%=
  1134. shell_HeapBlockFetch(36):r%!0=b%:r%!4=f%:
  1135. &400CE,,r%:o%!0=b%:
  1136. &400CB,,o%:
  1137. shell_OpenMenu(o%!4+r%!16+64,_Q%!4,m%):
  1138. o%!4+r%!16+64,_Q%!4:
  1139. shell_HeapBlockReturn(r%):
  1140. shell_HeapBlockReturn(o%)
  1141. shell_ActionMenuSelect(_Q%):
  1142. jE%,bB%,yC%,YE%,k%,cD%,d%:d%=
  1143. shell_GetEventListOffset2(_U%!28,_U%!32,_U%+340,24,
  1144. d%>=0
  1145. shell_DoPopupSelect(_Q%,d%)
  1146. shell_HeapBlockFetch(256):
  1147. shell_Tracef0("ActionMenuSelect:Menu_Select event detected"):
  1148. &400CF,,_shell_blk%:bB%=
  1149. shell_HeapBlockFetch(256):
  1150. _U%!24=_U%!&FC
  1151. yC%=0:_U%!264=1
  1152. shell_CheckSelection(_Q%):
  1153. yC%>-1
  1154. _U%!264=1
  1155. _U%!264=0
  1156. _U%!264>0
  1157. "FontMenu_DecodeFontMenu",_Q%+yC%,bB%
  1158. YE%=1
  1159. shell_Tracef0("ActionMenuSelect:FontMenu selection ("+
  1160. shell_GetString(bB%)+")"):
  1161. shell_FontMenuSelectFont(
  1162. shell_GetString(bB%),_U%!260):
  1163. _shell_FontMenuSelFN$=""
  1164. &400D5,,_U%!24,_Q%,bB%:A$=
  1165. shell_GetEventHandler(_U%!52,_U%!56,0):_temp%=bB%:$_temp%=
  1166. shell_StringStripTrailing($_temp%," "):
  1167. A$<>""
  1168. ("FN"+A$+"($_temp%)")
  1169. _shell_FontMenuSelFN$<>""
  1170. ("FN"+_shell_FontMenuSelFN$+"(FNshell_FontMenuGetLastSelectedFont)")
  1171. shell_HeapBlockReturn(bB%):
  1172. _U%!264=0
  1173. &45BC4,_U%!24,_Q%
  1174. jE%,,cD%:
  1175. shell_MenuCallHandler(jE%,cD%)
  1176. _shell_blk%!8=1
  1177. shell_HeapBlockExists(_U%!&E0)
  1178.  _temp%=_U%!&E0:
  1179. $_temp%<>""
  1180. "(k%=
  1181. ("FN"+$_temp%+"(_U%!52,_U%!56)")
  1182. shell_OpenMenu(_U%!36,_U%!40,_U%!24)
  1183. _shell_FontMenuSelFN$=""
  1184. shell_HeapBlockReturn(cD%):
  1185. shell_ActionAdjustButton:
  1186. l%,A$,k%,tC%,g%:tC%=
  1187. shell_HeapBlockFetch(&C+(
  1188. shell_WindowCountIcons(_U%!28)*32)):
  1189. shell_Tracef0("Action:Mouse Button was ADJUST"):
  1190. _U%!28>0
  1191. &400D6,_U%!28,tC%,&F000,&B000:g%=0:
  1192. tC%!g%<>-1:
  1193. tC%!g%=_U%!32
  1194. shell_IconSet(_U%!28,_U%!32,1)
  1195. g%+=4:
  1196. _U%!32=0
  1197. shell_HandleAttachedDataSave(_Q%,_U%!28,_U%!32)
  1198. C7A$=
  1199. shell_GetEventHandler(_U%!28,_U%!32,3):
  1200. A$<>""
  1201. shell_IconSlab(1,_U%!28,_U%!32):k%=
  1202. ("FN"+A$+"(_temp28%,_temp32%)")
  1203. shell_HeapBlockReturn(tC%):
  1204. shiftmenuclick(b%,f%):=
  1205. shell_IconSlab(vB%,b%,f%):
  1206. a%:a%=
  1207. shell_HeapBlockFetch(50):a%!8=vB%:a%!&C=b%:a%!16=f%:
  1208. &81680,,a%:a%!8=0:
  1209. &81680,,a%:
  1210. shell_HeapBlockReturn(a%):
  1211. shell_PointerLeavingWindow(_Q%):
  1212. r%,k%:r%=
  1213. shell_HeapBlockFetch(&C):
  1214. &400D6,!_Q%,r%,&3F0000,&F<<16:
  1215. !r%<>-1
  1216. e+k%=
  1217. ("FN"+
  1218. shell_IconGetData(!_Q%,!r%))
  1219. shell_HeapBlockReturn(r%):
  1220. shell_PointerEnteringWindow(_Q%):
  1221. r%,k%,b%:b%=_Q%!0:r%=
  1222. shell_HeapBlockFetch(&C):
  1223. &400D6,b%,r%,&3F0000,&E<<16:
  1224. !r%<>-1
  1225. u)k%=
  1226. ("FN"+
  1227. shell_IconGetData(b%,!r%))
  1228. shell_HeapBlockReturn(r%):
  1229. shell_RedrawWindow(h%):
  1230. ZD%,A$,SA%,VA%,a%,r%:
  1231. shell_HeapBlockFetch(&C):
  1232. &400D6,h%,r%,&3F0000,&D<<16:
  1233. !r%<>-1
  1234. shell_IconGetData(h%,!r%)
  1235. shell_HeapBlockReturn(r%):a%=
  1236. shell_HeapBlockFetch(&64):
  1237. A$=""
  1238. shell_GetEventHandler(h%,-1,4)
  1239. shell_FatalError
  1240. Wa%!0=h%:
  1241. &400C8,,a%
  1242. ZD%:SA%=a%!4-a%!20:VA%=a%!16-a%!24:
  1243. &81681,,a%:
  1244. A$<>""
  1245. ("FN"+A$+"("+
  1246. a%+","+
  1247. SA%+","+
  1248. VA%+")")
  1249. &400CA,,a%
  1250. shell_HeapBlockReturn(a%):
  1251. shell_Receive(_Q%):
  1252. c%,k%:
  1253. _Q%!16
  1254. _MESSAGE_QUIT:
  1255. shell_Exit:
  1256. _MESSAGE_DATASAVE:
  1257. shell_DataSave(_Q%)
  1258. _MESSAGE_DATASAVEACK:
  1259. shell_DataSaveAck(_Q%)
  1260. _MESSAGE_DATALOAD:
  1261. shell_DataLoad(_Q%,
  1262. _MESSAGE_DATALOADACK:
  1263. shell_DataLoadAck(_Q%)
  1264. shell_DataLoad(_Q%,
  1265. _MESSAGE_RAMFETCH:
  1266. shell_RAMFetch(_Q%)
  1267. _MESSAGE_RAMTRANSMIT:
  1268. shell_RAMTransmit(_Q%)
  1269. _MESSAGE_PREQUIT:
  1270. shell_Message_PreQuit(_Q%)
  1271. _MESSAGE_PALETTECHANGE:
  1272. _U%!&A4>0
  1273. shell_Tracef0("Receive:PaletteChange message received"):c%=_U%!&A4:k%=
  1274. ("FN"+$c%)
  1275. _MESSAGE_SAVEDESKTOP:
  1276. shell_Message_SaveDesktop(_Q%)
  1277. _MESSAGE_SHUTDOWN:
  1278. shell_Message_Shutdown(_Q%)
  1279. _MESSAGE_HELP:
  1280. shell_InteractiveHelp(_Q%)
  1281. _MESSAGE_MENUWARNING:
  1282. shell_MenuWarning(_Q%)
  1283. _MESSAGE_MODECHANGE:
  1284. shell_Message_ModeChange(_Q%)
  1285. _MESSAGE_TASKINIT:
  1286. _U%!&A8>0
  1287. shell_Tracef0("Receive:TaskInitialise message received"):c%=_U%!&A8:k%=
  1288. ("FN"+$c%+"("+
  1289. (_Q%!4)+","+
  1290. shell_GetString(_Q%+28)+
  1291. 34+")")
  1292. _U%!&D0=-1
  1293. shell_GetString(_Q%+28)="StrongHelp"
  1294. _U%!&D0=_Q%!4:
  1295. shell_StrongHlpMsg("Help_Install -DieWithTask "+
  1296. shell_GetAppDir+"."+
  1297. shell_GetAppName):c%=_U%!&D8:
  1298. $c%<>""
  1299. shell_HelpWord($c%):
  1300. shell_HeapBlockReturn(_U%!&D8):_U%!&D8=0
  1301. _MESSAGE_TASKCLOSEDOWN:
  1302. _U%!&AC>0
  1303. shell_Tracef0("Receive:TaskCloseDown message received"):c%=_U%!&AC:k%=
  1304. ("FN"+$c%)
  1305. _Q%!4=_U%!&D0
  1306. _U%!&D0=-1
  1307. _MESSAGE_TASKNAMEIS:
  1308. shell_Tracef0("Receive:TaskNameIs message received"):
  1309. shell_GetString(_Q%+28)="StrongHelp"
  1310. _U%!&D0=_Q%!20
  1311. shell_ScanForHelp
  1312. &80140:
  1313. shell_HandlePrintFile(_Q%)
  1314. &80143:
  1315. shell_HandlePrintError(_Q%)
  1316. &80145:
  1317. shell_HandlePrintTypeOdd(_Q%)
  1318. &80147:
  1319. shell_HandleSetPrinter(_Q%)
  1320. shell_HandleUnknownMessage2(_Q%)
  1321. shell_Message_ModeChange(_Q%):
  1322. d%,g%,_B%,o%:_B%=_U%!&B8:
  1323. _U%!&A0>0
  1324. shell_Tracef0("Message_ModeChange:ModeChange message received"):c%=_U%!&A0:k%=
  1325. ("FN"+$c%)
  1326. shell_HeapBlockFetch(&64):
  1327. _B%<>0
  1328. shell_Tracef0("Message_ModeChange:Checking static window list for pane events"):
  1329. _B%!g%<>-1:d%=
  1330. shell_GetEventListOffset(_B%!g%,-1,_U%+92,24,
  1331. d%>-1
  1332. shell_Tracef0("Message_ModeChange:Static window handle found"):
  1333. shell_WindowIsOpen(_B%!g%)
  1334. shell_Tracef0("Message_ModeChange:Window is open.."):!o%=_B%!g%:
  1335. &400C6,,o%:
  1336. shell_OpenWindow(_B%!g%,0,-1)
  1337. :g%+=4:
  1338. shell_HeapBlockReturn(o%):
  1339. shell_Message_Shutdown(_Q%):
  1340. _U%!312>0
  1341. shell_Tracef0("Message_Shutdown:Shutdown message received"):c%=_U%!312:k%=
  1342. ("FN"+$c%)
  1343. shell_HandleUnknownMessage2(_Q%):
  1344. _Q%!16
  1345. &43B00:c$=$(_Q%+20):
  1346. c$,30)="EvntShellLib:ShellDBug started"
  1347. _U%!&64
  1348. Yr_U%!&64=(_U%!&64
  1349. 1<<4):
  1350. shell_BroadcastMessage(&43B00,"ShellDBug:Init Debug messages from "+
  1351. shell_GetAppName)
  1352. c$,25)="EvntShellLib:TraceInitAck"
  1353. _U%!&64=(_U%!&64
  1354. 1<<4)
  1355. c$,20)="EvntShellLib:TraceOn"
  1356. shell_TraceOn
  1357. c$,21)="EvntShellLib:TraceOff"
  1358. shell_TraceOff
  1359. c$,28)="EvntShellLib:ListClickSelect"
  1360. shell_ListClickSelect
  1361. c$,28)="EvntShellLib:ListClickAdjust"
  1362. shell_ListClickAdjust
  1363. c$,25)="EvntShellLib:ListHelpTags"
  1364. shell_ListHelpTags
  1365. shell_HandleUnknownMessage(_Q%):
  1366. shell_HandleUnknownMessage(_Q%):
  1367. shell_AttachPreQuitHandler(A$):
  1368. c%,k%:
  1369. _U%!300>0
  1370. shell_HeapBlockReturn(_U%!300)
  1371. <_U%!300=
  1372. shell_HeapBlockFetch(
  1373. A$+1):c%=_U%!300:$c%=A$:
  1374. shell_AttachShutdownHandler(A$):
  1375. c%,k%:
  1376. _U%!312>0
  1377. shell_HeapBlockReturn(_U%!312)
  1378. <_U%!312=
  1379. shell_HeapBlockFetch(
  1380. A$+1):c%=_U%!312:$c%=A$:
  1381. shell_AttachModeChangeHandler(A$):
  1382. c%,k%:
  1383. _U%!&A0>0
  1384. shell_HeapBlockReturn(_U%!&A0)
  1385. J_U%!&A0=
  1386. shell_HeapBlockFetch(
  1387. A$+1):c%=_U%!&A0:$c%=A$:k%=
  1388. ("FN"+A$):
  1389. shell_AttachPaletteChangeHandler(A$):
  1390. c%,k%:
  1391. _U%!&A4>0
  1392. shell_HeapBlockReturn(_U%!&A4)
  1393. J_U%!&A4=
  1394. shell_HeapBlockFetch(
  1395. A$+1):c%=_U%!&A4:$c%=A$:k%=
  1396. ("FN"+A$):
  1397. shell_AttachTaskInitialiseHandler(A$):
  1398. c%,k%:
  1399. _U%!&A8>0
  1400. shell_HeapBlockReturn(_U%!&A8)
  1401. <_U%!&A8=
  1402. shell_HeapBlockFetch(
  1403. A$+1):c%=_U%!&A8:$c%=A$:
  1404. shell_AttachTaskCloseDownHandler(A$):
  1405. c%,k%:
  1406. _U%!&AC>0
  1407. shell_HeapBlockReturn(_U%!&AC)
  1408. <_U%!&AC=
  1409. shell_HeapBlockFetch(
  1410. A$+1):c%=_U%!&AC:$c%=A$:
  1411. shell_RAMFetch(_Q%):
  1412. jH%,tD%,vD%:vD%=
  1413. _U%!&90>&8000
  1414. shell_Tracef0("RAMFetch:RAMFetch called.."):_Q%!&C=_Q%!8:_Q%!16=7:tD%=_U%!&88:
  1415. _U%!&8C=&FF9
  1416. _U%!&90+=4
  1417. (tD%-_U%!&80)<_Q%!24
  1418. _Q%!24=tD%-_U%!&80:vD%=
  1419. shell_Tracef0("RAMFetch:Sending block")
  1420. &400F1,_U%!&94,_U%!&90+_U%!&80,_Q%!4,_Q%!20,_Q%!24:
  1421. &400E7,17,_Q%,_Q%!4:_U%!&78=_Q%!8:_U%!&80+=_Q%!24:
  1422. _U%!&80=0
  1423. shell_RAMTransmit(_Q%):
  1424. d%,a%,YA$,c%:
  1425. _Q%!&C=_U%!&70
  1426. $_U%!&80+=_Q%!24:
  1427. _Q%!24<_U%!&84
  1428. shell_Tracef0("RAMTransmit:Last block received"):d%=
  1429. shell_GetEventListOffset(_U%!28,_U%!32,_U%+96,16,
  1430. ):a%=_U%!96+d%:
  1431. shell_Tracef0("RAMTransmit:_U%!28="+
  1432. _U%!28):
  1433. shell_Tracef0("RAMTransmit:_U%!32="+
  1434. _U%!32)
  1435. shell_Tracef0("RAMTransmit:offset%="+
  1436. d%):c%=_U%!&9C:YA$=
  1437. shell_GetString(c%+44):
  1438. shell_UserFNLoadFile(c%!40,_U%!&98,a%!8,YA$,_U%!&84,a%)
  1439. shell_Tracef0("RAMTransmit:Block received"):
  1440. _U%!&80>_U%!&84
  1441. shell_Tracef0("RAMTransmit:Increasing buffer size.."):_U%!&98=
  1442. shell_HeapBlockExtend(_U%!&98,_U%!&80,_U%!&84)
  1443. :_Q%!&C=_Q%!8:_Q%!16=6:_Q%!20=_U%!&98+_U%!&80:_Q%!24=_U%!&84:
  1444. &400E7,18,_Q%,_Q%!4:_U%!&70=_Q%!8
  1445. shell_HeapBlockReturn(_U%!&98):_U%!&98=0:
  1446. shell_OK(
  1447. shell_MessageNoArgs("SHELLMSG15"))
  1448. shell_LoadFile(aH%):
  1449. u$,pB%,KD%,UB%:u$=
  1450. shell_GetString(_Q%+44):pB%=
  1451. shell_FileLength(u$):
  1452. pB%<0
  1453. shell_OK(
  1454. shell_MessageNoArgs("SHELLMSG16"))
  1455. -PUB%=
  1456. shell_HeapBlockFetch(pB%):
  1457. &20008,16,u$,UB%,0
  1458. ;KD%:
  1459. shell_VFlag(KD%)
  1460. shell_HeapBlockReturn(UB%):
  1461. shell_OK(
  1462. shell_MessageNoArgs("SHELLMSG17"))
  1463. shell_Tracef0("LoadFile:File "+u$+" loaded ok at &"+
  1464. ~UB%)
  1465. :=UB%
  1466. shell_VFlag(KD%):=((KD%
  1467. 1)=1)
  1468. shell_CheckType(x%,cB%,AC%):
  1469. cH%,g%,j%,c%,bD%:g%=0:j%=-1:bD%=
  1470. _U%!&64
  1471. _U%!&64=_U%!&64
  1472. cB%<>-1
  1473. cB%!g%<>-1:c%=cB%!g%:
  1474. 1<<31
  1475. c%=c%
  1476. 1<<31:bD%=
  1477. c%=x%
  1478. j%=g%:
  1479. _L_U%!&64=_U%!&64
  1480. 1<<1:
  1481. shell_Tracef0("CheckType:Top Bit Load detected..")
  1482. :g%+=4:
  1483. (x%>=4096)
  1484. j%=-1
  1485. j%=0:_U%!&64=_U%!&64
  1486. j%>-1
  1487. shell_Tracef0("CheckType:File type OK "+
  1488. ~cB%!j%)
  1489. shell_Tracef0("CheckType:File type NOT ok "+
  1490. j%<>-1
  1491. shell_Exit:
  1492. QC%:QC%=_U%!68:
  1493. &61504,QC%:
  1494. &2001E,7,,QC%:
  1495. shell_Tracef0("Exit:Application closing down"):
  1496. shell_TraceExit:
  1497. &606C2:
  1498. &600D0,,-1:
  1499. shell_WimpCloseDown_I(_U%!&94):
  1500. shell_DataLoad(_Q%,AC%):
  1501. oH%,d%,a%,_temp%,cB%,x%,j$:
  1502. shell_DataOpenOKToLoad(AC%,_Q%!40)
  1503. dx%=_Q%!40:j$=
  1504. shell_GetString(_Q%+44):
  1505. shell_Tracef0("DataLoad:DataLoad message received"):
  1506. _U%!96<>0
  1507. d%=-1
  1508. shell_GetEventListOffset(_Q%!20,_Q%!24,_U%+96,16,
  1509. d%=-1
  1510. shell_GetEventListOffset(_Q%!20,-1,_U%+96,16,
  1511. d%>-1
  1512. 4a%=_U%!96+d%:
  1513. shell_CheckType(_Q%!40,a%!8,AC%)
  1514. shell_Tracef0("DataLoad:File type recognised (&"+
  1515. ~_Q%!40+")"):PH%=_Q%!&C:_Q%!&C=_Q%!8:_Q%!16=4:
  1516. &400E7,18,_Q%,_Q%!4:
  1517. _U%!&64
  1518. UB%=-1:_U%!&64=_U%!&64
  1519. shell_LoadFile(PH%=_U%!&6C)
  1520. shell_UserFNLoadFile(x%,UB%,a%!8,j$,_Q%!36,a%):
  1521. _U%!&9C<>0
  1522. shell_HeapBlockReturn(_U%!&9C):_U%!&9C=0
  1523. shell_Tracef0("DataLoad:File type NOT recognised (&"+
  1524. ~_Q%!40+")")
  1525. shell_DataOpenOKToLoad(AC%,x%):
  1526. y%,hE%,RA$,TA$:
  1527. shell_Tracef0("DataOpenOKToLoad:Message reason code was 3, normal drag load..")
  1528. shell_Tracef0("DataOpenOKToLoad:Message reason code was 5, double click load.."):hE%=
  1529. shell_HeapBlockFetch(256):RA$=
  1530. shell_OSVarGetVal(hE%,256,"Alias$@RunType_"+
  1531. ~x%,1):
  1532. shell_Tracef0("DataOpenOKToLoad:Alias$@RunType="+RA$)
  1533. shell_HeapBlockReturn(hE%):TA$=
  1534. shell_Branch(RA$):
  1535. shell_Tracef0("DataOpenOKToLoad:dbug "+TA$):
  1536. shell_Leaf(TA$)="!"+
  1537. shell_GetAppName
  1538. shell_UserFNLoadFile(x%,UB%,cB%,_filename$,_file_size%,a%):
  1539. g%,j%,c%,k%:g%=0:j%=-1:
  1540. cB%<>-1
  1541. cB%!g%<>-1:c%=cB%!g%:
  1542. 1<<31
  1543. c%=c%
  1544. 1<<31
  1545. c%=x%
  1546. j%=g%
  1547. g%+=4:
  1548. :c%=a%!&C:k%=
  1549. ("FN"+$(c%!j%)+"("+
  1550. UB%+","+
  1551. x%+",_filename$,"+
  1552. _file_size%+")"):
  1553. shell_DataSave(_Q%):
  1554. c%,d%,a%,_%:
  1555. shell_Tracef0("DataSave:DataSave message received"):
  1556. _Q%!4<>_U%!&94
  1557. shell_GetEventListOffset(_Q%!20,_Q%!24,_U%+96,16,
  1558. d%>-1
  1559. 2a%=_U%!96+d%:
  1560. shell_CheckType(_Q%!40,a%!8,
  1561. shell_Tracef0("DataSave:Filetype recognized (&"+
  1562. ~_Q%!40+")"):
  1563. shell_TopBitLoadInProgress
  1564. shell_Tracef0("DataSave:'no load' flag set"):
  1565. shell_Tracef0("DataSave:Sending Message_DataSaveAck"):_Q%!0=256:_Q%!&C=_Q%!8:_Q%!36=-1:_Q%!16=2:$(_Q%+44)=
  1566. shell_GetAppDir+".ScrapFile"+
  1567. &400E7,18,_Q%,_Q%!4
  1568. shell_HeapBlockReturn(_U%!&9C):_U%!&9C=
  1569. shell_HeapBlockFetch((_Q%!0)+8):c%=_U%!&9C:
  1570. _Q%!0
  1571. 4:c%!_%=_Q%!_%:
  1572. _%:_U%!28=_Q%!20:_U%!32=_Q%!24:_U%!&80=0:_U%!&84=_Q%!36:_U%!&98=
  1573. shell_HeapBlockFetch(_Q%!36):_Q%!0=28:_Q%!&C=_Q%!8:_Q%!16=6
  1574. _Q%!20=_U%!&98+_U%!&80:_Q%!24=_U%!&84:
  1575. &400E7,18,_Q%,_Q%!4:_U%!&70=_Q%!8:
  1576. shell_Tracef0("DataSave:Sending Message_RAMFetch")
  1577. shell_Tracef0("DataSave:Filetype NOT recognized")
  1578. shell_TopBitLoadInProgress:
  1579. _U%!&64
  1580. shell_SendDataSave(b%,f%):
  1581. a%,HA%,CC%,d%,pB%,k%:CC%=
  1582. shell_HeapBlockFetch(30):
  1583. &400CF,,CC%:d%=
  1584. shell_GetEventListOffset(b%,f%,_U%+72,24,
  1585. d%=-1
  1586. d%=-2
  1587. Mdk%=
  1588. shell_MessageWindow(
  1589. shell_MessageNoArgs("SHELLMSG13"),0,"",
  1590. shell_MessageNoArgs("warning"))
  1591. a%=(_U%!72)+d%:
  1592. a%!8>&8000
  1593. Q$pB%=
  1594. shell_HeapBlockInfo(a%!8)-4
  1595. pB%=a%!8
  1596. :HA%=_U%!76:HA%!0=256:HA%!&C=0:HA%!16=1:HA%!20=CC%!&C:HA%!24=CC%!16:HA%!28=CC%!0:HA%!32=CC%!4:HA%!36=pB%:HA%!40=a%!&C:$(HA%+44)=
  1597. shell_Leaf(
  1598. shell_IconGetData(b%,a%!16)):
  1599. &400E7,18,HA%,HA%!20,HA%!24:_U%!&78=_Q%!8:_U%!&88=pB%:_U%!&8C=a%!&C
  1600. d;_U%!&90=a%!8:_U%!&9C=a%!4:_U%!&C8=HA%!20:_U%!&CC=HA%!24
  1601. shell_HeapBlockReturn(CC%):
  1602. shell_DataSaveAck(_Q%):
  1603. _fullname$,RA%,nA%,a%,c%,k%:
  1604. shell_Tracef0("DataSaveAck:DataSaveAck message received"):RA%=0:nA%=_Q%?(44+RA%):
  1605. nA%<>0:_fullname$+=
  1606. (nA%):RA%+=1:nA%=_Q%?(44+RA%):
  1607. shell_Tracef0("DataSaveAck:Full save name is: "+_fullname$)
  1608. shell_Tracef0("DataSaveAck:task   = &"+
  1609. _Q%!4):
  1610. shell_Tracef0("DataSaveAck:mytask = &"+
  1611. _U%!&94):d%=
  1612. shell_GetEventListOffset(_U%!28,_U%!32,_U%+72,24,
  1613. shell_Tracef0("DataSaveAck:offset% = "+
  1614. d%>=0
  1615. %a%=(_U%!72)+d%:c%=a%!20:
  1616. $c%<>""
  1617. ("FN"+$c%+"(_fullname$)")
  1618. shell_HeapBlockExists(a%!8)
  1619. 8,&A,_fullname$,a%!&C,,a%!8,a%!8+
  1620. shell_HeapBlockInfo(a%!8)+1
  1621. shell_MessageNoArgs("SHELLMSG21")
  1622. _Q%!36>-1
  1623. _U%!80<>0
  1624. shell_HeapBlockReturn(_U%!80)
  1625. H_U%!80=
  1626. shell_HeapBlockFetch(
  1627. _fullname$+1):c%=_U%!80:$c%=_fullname$
  1628. :_Q%!16=3:!_Q%=256:_Q%!20=_U%!&C8:_Q%!24=_U%!&CC:_Q%!40=_U%!&8C:_Q%!36=
  1629. shell_FileLength(_fullname$):_Q%!&C=_Q%!8:
  1630. shell_Tracef0("DataSaveAck:File length is "+
  1631. _Q%!36+" bytes"):$(_Q%+44)=_fullname$+
  1632. (0):_U%!84=_Q%!8
  1633. shell_Tracef0("DataSaveAck:Sending DataLoad Message"):
  1634. &400E7,18,_Q%,_Q%!20,_Q%!24:
  1635. _U%!28<>_U%!20
  1636. shell_CloseWindow(_U%!28)
  1637. &400D4,,-1
  1638. shell_PrintSave(_fullname$,_Q%!20,_Q%!24,_Q%!8,_Q%!40):
  1639. shell_Tracef0("DEBUG:: copies = "+
  1640. (_U%!336)):
  1641. _U%!336>0
  1642. +_U%!336-=1:
  1643. shell_DoSendPrintSave(&FFF)
  1644. shell_DataSaveCheckName(b%,f%):
  1645. d%,a%,p%:a%=_U%!72:d%=0:
  1646. a%<>0
  1647. shell_HeapBlockInfo(a%)-8:
  1648. !(a%+d%)=b%
  1649. shell_IconGetData(!a%,a%!16):
  1650. R$,".")=0
  1651. shell_OK(
  1652. shell_MessageNoArgs("SHELLMSG01"))
  1653.     d%=p%
  1654. :d%+=24:
  1655. d%>=p%
  1656. shell_DataLoadAck(_Q%):
  1657. shell_Tracef0("DataLoadAck:DataLoadAck message received (file received ok)"):
  1658. shell_UserMessageAcknowledge(_Q%):
  1659. _Q%!16
  1660. shell_AckDataLoad(_Q%)
  1661. shell_AckRAMFetch(_Q%)
  1662. _Q%!8=_SHELL_SENDDATALOAD_MY_REF%
  1663. RO3_Present
  1664. ("Filer_Run "+_SHELL_SENDDATALOAD_FILE$)
  1665. ("Run "+_SHELL_SENDDATALOAD_FILE$)
  1666. shell_AckDataLoad(_Q%):
  1667. _Q%!&C<>_U%!84
  1668. &20008,6,"<Wimp$Scrap>":
  1669. &FF,"Data Transfer failed: Receiver died"
  1670. shell_AckRAMFetch(_Q%):
  1671. RF%,c%:c%=_U%!&9C:
  1672. shell_Tracef0("AckRAMFetch:AckRAMFetch called...."):
  1673. _Q%!&C<>_U%!&70
  1674. _U%!&80=0
  1675. shell_Tracef0("AckRAMFetch:Receiver does not support RAM transfer"):
  1676. &20023,"Wimp$Scrap",,-1,0,3
  1677. ,,RF%:
  1678. RF%<>0
  1679. $(c%+44)="<Wimp$Scrap>"+
  1680. (0):c%!0=(49+
  1681. shell_GetString(c%+44)))
  1682. 3:c%!&C=c%!8:c%!16=2:c%!36=-1:
  1683. &400E7,18,c%,c%!4:_U%!&6C=c%!8
  1684. shell_OK(
  1685. shell_MessageNoArgs("SHELLMSG14"))
  1686. shell_Tracef0("AckRAMFetch:RAM transfer started, but not enough data sent. Sender died?"):
  1687. shell_HeapBlockReturn(_U%!&98):_U%!&98=0:
  1688. shell_OK("SHELLMSG06")
  1689. shell_MenuWarning(_Q%):
  1690. A$,bB%,NA%,TA%,k%,_temp%,RA%,E$,DC%,a%:NA%=_Q%!24:TA%=_Q%!28:_U%!264=0:
  1691. _U%!20<>0
  1692. shell_Tracef0("MenuWarning:Removing last dynamic dbox (handle=&"+
  1693. ~_U%!20+")"):k%=
  1694. shell_DeleteWindow(_U%!20):
  1695. shell_Tracef0("MenuWarning:Last dynamic dbox removed")
  1696. _Q%!20
  1697. _U%!&E4:
  1698. shell_WindowRetitle(_U%!&E4,
  1699. shell_MessageNoArgs("warning")):
  1700. shell_IconPutData(_U%!&E4,1,
  1701. shell_MessageNoArgs("SHELLMSG07"),0):
  1702. &400E8,,_U%!&E4,NA%,TA%
  1703. shell_MenuGetItemAddress(_U%!24,_Q%+32):
  1704. shell_HeapBlockExists(DC%!4)
  1705. shell_MenuWarnDBox(DC%,NA%,TA%)
  1706. shell_HeapBlockFetch(32):
  1707. &45BC4,_U%!24,_Q%+32
  1708. ,,a%:
  1709. shell_FindMenuWarnEvent(a%!8,E$,J$):
  1710. shell_HeapBlockReturn(a%):
  1711. shell_MenuWarnSubMenu(_Q%!20,NA%,TA%,E$,J$)
  1712. shell_MenuWarnDBox(JB%,NA%,TA%):
  1713. c%,u%,k%:
  1714. c%=JB%!4:
  1715. shell_CreateWindow($c%!0,u%):
  1716. shell_Tracef0("MenuWarnDBox:Creating new dynamic dbox (handle=&"+
  1717. ~u%+")"):
  1718. $c%!4<>""
  1719. shell_Tracef0("MenuWarnDBox:Calling preopen FN '"+$c%!4+"'"):k%=
  1720. ("FN"+$c%!4+"("+
  1721. u%+")")
  1722. $c%!8<>""
  1723. shell_Tracef0("MenuWarnDBox:Calling postopen FN '"+$c%!8+"'"):k%=
  1724. ("FN"+$c%!8+"("+
  1725. u%+")")
  1726. shell_Tracef0("MenuWarnDBox:Opening dbox.."):_U%!20=u%:
  1727. &400E8,,u%,NA%,TA%:
  1728. shell_FindMenuWarnEvent(fA%,
  1729. y%,z%,c%,d%,j%,p%,CA%,g%:
  1730. EC%:EC%=0:z%=_U%!&DC:d%=0:j%=
  1731. :E$="":EC%=0:
  1732. shell_HeapBlockExists(z%)
  1733. :g%+=4:
  1734. z%!g%=-1:p%=g%:g%=0:
  1735. shell_Tracef0("FindMenuWarnEvent:list_size%="+
  1736. :c%=!(z%+d%+0):
  1737. c%<>-1
  1738. c%=fA%
  1739. :CA%=z%!(d%+4):E$=$CA%:EC%=z%!(d%+8):CA%=z%!(d%+&C):J$=$CA%:
  1740. shell_Tracef0("FindMenuWarnEvent:submenu found")
  1741. :d%+=16
  1742. d%=p%
  1743. d%>=p%
  1744. E$="":J$=""
  1745. EC%=0
  1746. shell_Tracef0("FindMenuWarnEvent:warn fn not found..")
  1747. shell_MenuWarnSubMenu(gE%,NA%,TA%,E$,J$):
  1748. k%,c%,WB%,g%:_shell_FontMenuSelFN$=J$:
  1749. shell_HeapBlockExists(_U%!&E0)
  1750. shell_HeapBlockReturn(_U%!&E0)
  1751. C_U%!&E0=
  1752. shell_HeapBlockFetch(
  1753. E$+1):c%=_U%!&E0:$c%=E$:
  1754. E$<>""
  1755. ("FN"+E$+"(_U%!52,_U%!56)"):
  1756. shell_Tracef0("MenuWarnSubMenu:Calling FN"+E$)
  1757. gE%=_U%!&FC
  1758. shell_Tracef0("MenuWarnSubMenu:FontMenu opening.."):
  1759. shell_HeapBlockExists(_U%!256)
  1760. shell_HeapBlockReturn(_U%!256)
  1761. g%=0:
  1762. :g%+=4:
  1763. !(_Q%+32+g%)=-1:g%+=4:_U%!256=
  1764. shell_HeapBlockFetch(g%):c%=_U%!256:g%=0:
  1765. :c%!g%=!(_Q%+32+g%):g%+=4:
  1766. !(_Q%+32+g%)=-1:c%!g%=!(_Q%+32+g%):c%=_U%!256
  1767. shell_Tracef0("MenuWarnSubMenu:Selecting '"+
  1768. shell_FontMenuGetLastSelectedFont+"' in FontMenu.."):
  1769. "FontMenu_Select",
  1770. shell_FontMenuGetLastSelectedFont,_U%!260
  1771. ,WB%:_U%!264=1:
  1772. WB%<>_U%!&FC
  1773. shell_FontMenuUpdatePtr(WB%):_U%!&FC=WB%:gE%=WB%
  1774. _U%!264=0
  1775. &400E8,,gE%,NA%,TA%:
  1776. shell_AttachSubMenu(ZB%,EC%,E$):
  1777. &45BCE,ZB%,EC%:
  1778. E$<>""
  1779. &45BCC,,
  1780. shell_EventListMenuWarn(ZB%,EC%,E$,"")
  1781. shell_EventListMenuWarn(ZB%,KG%,E$,J$):
  1782. c%,CA%,g%,z%:
  1783. _U%!&DC=0
  1784. _U%!&DC=
  1785. shell_HeapBlockFetch(32):c%=_U%!&DC:c%!0=ZB%:c%!4=
  1786. shell_HeapBlockFetch(
  1787. E$+1):$(c%!4)=E$:c%!8=KG%:c%!&C=
  1788. shell_HeapBlockFetch(
  1789. J$+1):$(c%!&C)=J$:c%!16=-1:c%!20=-1:c%!24=-1:c%!28=-1
  1790. shell_HeapBlockExtend(_U%!&DC,32):_U%!&DC=z%:g%=0:
  1791. :g%+=16:
  1792. z%!g%=-1:c%=_U%!&DC:c%!g%=ZB%:c%!(g%+4)=
  1793. shell_HeapBlockFetch(
  1794. E$+1):CA%=c%!(g%+4):$(CA%)=E$:c%!(g%+8)=KG%:c%!(g%+&C)=
  1795. shell_HeapBlockFetch(
  1796. J$+1):CA%=c%!(g%+&C):$(CA%)=J$
  1797. ;c%!(g%+16)=-1:c%!(g%+20)=-1:c%!(g%+24)=-1:c%!(g%+28)=-1
  1798. shell_InteractiveHelp(_Q%):
  1799. G$,b$,K$,dB%,nD%,uA$,r%,l%:r%=
  1800. shell_HeapBlockFetch(&C):
  1801. &600D6,_Q%!32,r%,&3F0000,&C<<16
  1802. !r%<>-1
  1803. shell_IconGetData(_Q%!32,!r%)
  1804. shell_HeapBlockReturn(r%):
  1805. G$=""
  1806. shell_GetEventHandler(_Q%!32,_Q%!36,8)
  1807. shell_IconGetValidation(_Q%!32,_Q%!36):
  1808. K$<>""
  1809. shell_StringUpperCase(
  1810. K$,1))="I"
  1811. K$,";"):
  1812. dB%=0
  1813. K$,2)
  1814. K$,2,dB%-2)
  1815. shell_StringUpperCase(K$),
  1816. shell_StringUpperCase(";i")):nD%=
  1817. shell_StringUpperCase(K$),
  1818. shell_StringUpperCase(";"),dB%+1):
  1819. dB%>0
  1820. nD%>0
  1821. K$,dB%+2,nD%-dB%-2)
  1822. K$,dB%+2)
  1823. G$<>""
  1824. _Q%!16=&503:_Q%!&C=_Q%!8:b$=
  1825. shell_MessageLookup(G$,"",""):b$=
  1826. shell_MessageExpand(b$):$(_Q%+20)=b$:!_Q%=(
  1827. b$+25)
  1828. &400E7,17,_Q%,_Q%!4
  1829. shell_Message_PreQuit(_Q%):
  1830. c%,pD%,a%,_%,rD%:
  1831. _U%!300>0
  1832. shell_HeapBlockFetch(256):
  1833. _Q%!0
  1834. 4:a%!_%=_Q%!_%:
  1835. shell_Tracef0("Message_PreQuit:PreQuit message received"):c%=_U%!300:pD%=a%!4:
  1836. !a%<24
  1837. rD%=0
  1838. rD%=a%!20
  1839. J2a%!&C=a%!8:
  1840. &400E7,19,a%,pD%:
  1841. ("FN"+$c%)<>0
  1842. _closedown%=
  1843. !a%=24:a%!24=508:
  1844. &400E7,8,a%,pD%:_closedown%=
  1845. shell_HeapBlockReturn(a%)
  1846. lwaorigin(A,
  1847. TA%):NA%=A!0-A!16:TA%=A!&C-A!20:
  1848. shell_Iconbar(GA%,ZA$,H$,vA%,m%,GB%,IB%,BC%):
  1849. h%,aA%,sD%,zD%:aA%=
  1850. shell_HeapBlockFetch(36):
  1851. sD%20:
  1852. zD%20:!aA%=GA%:aA%!4=0:aA%!&C=96:
  1853. H$<>""
  1854. r$aA%!8=-16:aA%!16=92:aA%!32=
  1855. aA%!8=0:aA%!16=70:aA%!32=&C
  1856. :aA%!20=&1700310B:aA%!24=sD%:aA%!28=zD%:$sD%=H$:$zD%=ZA$:
  1857. &400C2,,aA%
  1858. shell_AttachMenu(-2,h%,m%,GB%,IB%,BC%):
  1859. shell_HeapBlockReturn(aA%):=
  1860. shell_IconNewSprite(GA%,h%,ZA$)
  1861. shell_IconbarSetText(v%,bA%,iA$):
  1862. t%:t%=
  1863. shell_HeapBlockFetch(40):!t%=v%:t%!4=bA%:
  1864. &400CE,,t%:$(t%!28)=iA$:
  1865. shell_IconRedraw(v%,bA%):
  1866. shell_HeapBlockReturn(t%):
  1867. shell_WritableIconHandler(b%,f%,KA%):
  1868. qA%,qB%,rB%,g%:
  1869. dD%,fD%,CB%,EB%,TB%,bH%,s%:s%=
  1870. shell_HeapBlockFetch(&400):
  1871. &400D3,,s%:
  1872. !s%=-1
  1873. shell_HeapBlockReturn(s%):=
  1874. &400D6,b%,s%,&40E000,&E000:qB%=!s%:g%=0:
  1875. s%!g%=f%
  1876. dD%=s%!(g%-4):fD%=s%!(g%+4)
  1877. :g%+=4:
  1878. s%!g%=-1:rB%=s%!(g%-4):
  1879. shell_FakeMouseClick(b%,0,4)
  1880. 398,394:
  1881. f%=rB%
  1882. &400D2,b%,qB%,-1,-1,-1,
  1883. shell_IconGetData(b%,qB%)):
  1884. shell_IconEnsureVisible(b%,qB%)
  1885. &400D2,b%,fD%,-1,-1,-1,
  1886. shell_IconGetData(b%,fD%)):
  1887. shell_IconEnsureVisible(b%,fD%)
  1888. 399,410:
  1889. f%=qB%
  1890. &400D2,b%,rB%,-1,-1,-1,
  1891. shell_IconGetData(b%,rB%)):
  1892. shell_IconEnsureVisible(b%,rB%)
  1893. &400D2,b%,dD%,-1,-1,-1,
  1894. shell_IconGetData(b%,dD%)):
  1895. shell_IconEnsureVisible(b%,dD%)
  1896. &400D2,b%,qB%,-1,-1,-1,
  1897. shell_IconGetData(b%,qB%)):
  1898. shell_IconEnsureVisible(b%,qB%)
  1899. &400D2,b%,rB%,-1,-1,-1,
  1900. shell_IconGetData(b%,rB%)):
  1901. shell_IconEnsureVisible(b%,rB%)
  1902. shell_HeapBlockReturn(s%):=
  1903. shell_FakeMouseClick(b%,f%,vB%):
  1904. 6,&F,1:_Q%!8=vB%:_Q%!&C=b%:_Q%!16=f%:
  1905. shell_Action(6):
  1906. shell_IconHasCaret(v%,bA%):
  1907. s%,gA%,MA%:s%=
  1908. shell_HeapBlockFetch(24):
  1909. &400D3,,s%:MA%=s%!0:gA%=s%!4:
  1910. shell_HeapBlockReturn(s%):
  1911. (gA%=bA%
  1912. MA%=v%)
  1913. shell_IconCreate(b%,OB%,uA%,CH%,u%,qE%,tE%,AH%,O$,JB%,GC%,K$):
  1914. BH%,h%,XC%,t%:t%=
  1915. shell_HeapBlockFetch(40):t%!0=b%:t%!4=OB%:t%!8=uA%:t%!&C=OB%+CH%:t%!16=uA%+u%:t%!20=AH%
  1916. tE%<<28
  1917. qE%<<24:
  1918. t%!20
  1919. #BH%=
  1920. O$,","):t%!24=JB%:
  1921. K$<>""
  1922. 6XC%=
  1923. shell_HeapBlockFetch(
  1924. K$+1):$XC%=K$:t%!28=XC%
  1925. t%!28=-1
  1926. :t%!32=GC%
  1927. $(t%+24)=
  1928. O$,&B)
  1929. &400C2,,t%
  1930. shell_HeapBlockReturn(t%):=h%
  1931. shell_IconDelete(b%,f%):
  1932. shell_DoIconDelete(b%,f%,
  1933. shell_IconDelete2(b%,f%):
  1934. shell_DoIconDelete(b%,f%,
  1935. shell_DoIconDelete(b%,f%,IH%):
  1936. a%,SA%,VA%,eA%,oA%:a%=
  1937. shell_HeapBlockFetch(40):a%!0=b%:a%!4=f%:
  1938. &400CE,,a%:
  1939. &8168A,,a%+8:SA%=a%!8:VA%=a%!&C:eA%=a%!16:oA%=a%!20:
  1940. &400CE,,a%:
  1941. shell_HeapBlockExists(a%!28)
  1942. shell_HeapBlockReturn(a%!28)
  1943. shell_HeapBlockExists(a%!32)
  1944. shell_HeapBlockReturn(a%!32)
  1945. &400C4,,a%:
  1946. &400D1,b%,SA%,VA%,eA%,oA%
  1947. shell_HeapBlockReturn(a%):
  1948. shell_IconRadioSelection(v%,sB%):
  1949. fF%,DD%,lF%,pF%:DD%=
  1950. shell_HeapBlockFetch(8):fF%=(sB%<<16)+(1<<21):pF%=(31<<16)+(1<<21):
  1951. &400D6,v%,DD%,pF%,fF%:lF%=!DD%:
  1952. shell_HeapBlockReturn(DD%):=lF%
  1953. shell_IconPutData(MA%,gA%,O$,Z):
  1954. a%,dA$:
  1955. _U%!&64
  1956. "WimpExt_SetIconString",,,MA%,gA%,O$+
  1957. shell_IconGetData(MA%,gA%):
  1958. O$<>dA$
  1959. ]Sa%=
  1960. shell_HeapBlockFetch(40):a%!0=MA%:a%!4=gA%:
  1961. &400CE,,a%:
  1962. (a%!24
  1963. (1<<8))<>0
  1964. O$>a%!36
  1965. shell_MessageNoArgs("SHELLMSG12")
  1966. $(a%!28)=O$
  1967. $(a%+28)=
  1968. O$,&B)
  1969. a%!8=0:a%!&C=0:
  1970. &400CD,,a%
  1971. shell_HeapBlockReturn(a%)
  1972. shell_IconPutDataNow(MA%,gA%,O$):
  1973. a%:a%=
  1974. shell_HeapBlockFetch(50):a%!0=MA%:a%!4=gA%:
  1975. &400CE,,a%:
  1976. (a%!24
  1977. (1<<8))<>0
  1978. O$>a%!36
  1979. shell_MessageNoArgs("SHELLMSG12")
  1980. $(a%!28)=O$
  1981. $(a%+28)=
  1982. O$,&B)
  1983. :a%!8=0:a%!&C=0:
  1984. &400CD,,a%:
  1985. shell_EnsurePoll:
  1986. shell_HeapBlockReturn(a%):
  1987. shell_IconNewSprite(v%,bA%,U$):
  1988. DA%,ED%,BE%,DE%,GE%:DA%=
  1989. shell_HeapBlockFetch(40):DA%!0=v%:DA%!4=bA%:
  1990. &400CE,,DA%:
  1991. (DA%!24
  1992. (1<<1))
  1993.     BE%=
  1994. (DA%!24
  1995.     DE%=
  1996. (DA%!24
  1997. (1<<8))
  1998.     GE%=
  1999. DA%!24
  2000. $(DA%!32)="S"+U$
  2001. $(DA%!28)=U$:DA%!36=
  2002. :ED%=bA%
  2003. &400C4,,DA%:DA%!4=DA%!8:DA%!8=DA%!&C:DA%!&C=DA%!16:DA%!16=DA%!20:DA%!20=DA%!24:$(DA%+24)=U$:
  2004. &400C2,,DA%
  2005. shell_IconRedraw(v%,ED%):
  2006. shell_HeapBlockReturn(DA%):=ED%
  2007. shell_IconGetData(MA%,gA%):
  2008. M$,t%:
  2009. gA%<0
  2010. MA%<-2
  2011. _U%!&64
  2012. "WimpExt_GetIcon",,,MA%,gA%
  2013. ,,,M$
  2014. shell_HeapBlockFetch(40):t%!0=MA%:t%!4=gA%:
  2015. &400CE,,t%:
  2016. (t%!24
  2017. (1<<8))<>0
  2018. M$=$(t%!28)
  2019. M$=$(t%+28)
  2020. shell_HeapBlockReturn(t%)
  2021. shell_IconMove2(b%,f%,YG%,FF%):
  2022. BA%:BA%=
  2023. shell_HeapBlockFetch(40):!BA%=b%:BA%!4=f%:
  2024. &400CE,,BA%:BA%!8+=YG%:BA%!16+=YG%:BA%!&C+=FF%:BA%!20+=FF%:f%=
  2025. shell_IconMove(b%,f%,BA%!8,BA%!&C,BA%!16,BA%!20):
  2026. shell_HeapBlockReturn(BA%):=f%
  2027. shell_IconResize(b%,f%,SA%,VA%,eA%,oA%):=
  2028. shell_IconMove(b%,f%,SA%,VA%,eA%,oA%)
  2029. shell_IconMove(b%,f%,SA%,VA%,eA%,oA%):
  2030. r%,iH%,eH%,PB%,a%:
  2031. WF%,ZF%,bF%,dF%:r%=
  2032. shell_HeapBlockFetch(40):a%=
  2033. shell_HeapBlockFetch(40):!r%=b%:r%!4=f%:
  2034. &400CE,,r%:!a%=b%:a%!4=f%:
  2035. &400CE,,a%:
  2036. &8168A,,a%+8:tG%=r%!24:ZE%=r%+28
  2037. WF%=tG%:ZF%=ZE%!0:bF%=ZE%!4:dF%=ZE%!8:PB%=r%!8-a%!8:
  2038. &400C4,,r%:
  2039. &400D1,!r%,r%!8-PB%,r%!&C-PB%,r%!16+PB%,r%!20+PB%:f%=
  2040. shell_CreateIcon2(b%,SA%,VA%,eA%,oA%,WF%,ZF%,bF%,dF%,PB%):
  2041. shell_HeapBlockReturn(r%):
  2042. shell_HeapBlockReturn(a%):=f%
  2043. shell_CreateIcon2(h%,SA%,VA%,eA%,oA%,l%,HH%,NH%,OH%,PB%):
  2044. AA%,QA%,H$,g$,OB%,uA%:QA%=
  2045. shell_HeapBlockFetch(60):!QA%=h%:QA%!20=l%:QA%!24=HH%:QA%!28=NH%:QA%!32=OH%:H$="":g$="":
  2046. 256H$=$(QA%!24)
  2047. H$=$(QA%+24)
  2048. 4(g$=
  2049. shell_IconGetCommand(QA%!28,"S")
  2050. g$=$(QA%+24)
  2051. shell_GetMinXY(l%,H$,g$):
  2052. eA%-SA%<OB%
  2053. eA%=SA%+OB%
  2054. oA%-VA%<uA%
  2055. oA%=VA%+uA%
  2056. QA%!4=SA%:QA%!8=VA%:QA%!&C=eA%:QA%!16=oA%:
  2057. &400C2,,QA%
  2058. &400D1,!QA%,QA%!4-PB%,QA%!8-PB%,QA%!&C+PB%,QA%!16+PB%:
  2059. &400D3,,QA%:
  2060. !QA%=h%:
  2061. QA%!4=AA%:
  2062. &400D2,h%,AA%,0,0,-1,0
  2063. shell_HeapBlockReturn(QA%):=AA%
  2064. shell_GetMinXY(l%,H$,g$):
  2065. SA%,VA%,eA%,oA%,EB%,TB%:OB%=0:uA%=0:
  2066. H$<>""
  2067. &40084,l%>>24
  2068. ,,VA%,,oA%:
  2069. &40097,,
  2070. (l%>>24)+H$
  2071. ,SA%,,eA%:
  2072. &40088,,SA%
  2073. ,SA%:
  2074. &40088,,eA%
  2075. ,eA%:OB%=eA%-SA%:uA%=oA%-VA%
  2076. OB%=6*pH%+16*
  2077. H$:uA%=32
  2078. 4uA%+=2*hH%
  2079. g$<>""
  2080. &2002E,296,
  2081. shell_UserSpritesBase,g$
  2082. ,,,EB%,TB%,,EG%;P%:
  2083. &20035,EG%,4
  2084. ,,wG%:EB%=EB%<<wG%:
  2085. &20035,EG%,5
  2086. ,,yG%:TB%=TB%<<yG%:
  2087. &800 EB%=EB%/2:TB%=TB%/2
  2088. 539)=19EB%=OB%+EB%
  2089. EB%>OB%OB%=EB%
  2090. TB%>uA%uA%=TB%
  2091. shell_IconGetCommand(FD%,fA$):
  2092. I%,M$:
  2093. FD%<=0
  2094. h    M$=""
  2095. shell_StringUpperCase($FD%),";"+
  2096. shell_StringUpperCase(fA$)):
  2097. l    M$=""
  2098. $(FD%+I%),
  2099. $(FD%+I%)+";",";")-1)
  2100. shell_IconRedraw(v%,bA%):
  2101. shell_IconSetState(v%,bA%,0,0):
  2102. shell_IconGetValidation(b%,f%):
  2103. a%,K$,l%:
  2104. f%=-1
  2105. UK$="":a%=
  2106. shell_HeapBlockFetch(40):a%!0=b%:a%!4=f%:
  2107. &400CE,,a%:l%=a%!24:
  2108. a%!32>0
  2109. K$=$(a%!32)
  2110. shell_HeapBlockReturn(a%):=K$
  2111. shell_IconPutValidation(b%,f%,y$):
  2112. a%,l%:a%=
  2113. shell_HeapBlockFetch(&64):a%!0=b%:a%!4=f%:
  2114. &400CE,,a%:l%=a%!24:
  2115. $(a%!32)=y$
  2116. shell_HeapBlockReturn(a%):
  2117. shell_IsIconSelected(eB%,fB%):
  2118. shell_IconGetState(eB%,fB%):l%=_Q%!24:c%=(l%
  2119. &200000):
  2120. shell_IconSelect(eB%,fB%):
  2121. shell_IconSetState(eB%,fB%,&200000,&200000):
  2122. shell_IconDeselect(eB%,fB%):
  2123. shell_IconSetState(eB%,fB%,0,&200000):
  2124. shell_IconGetState(eB%,fB%):!_Q%=eB%:_Q%!4=fB%:
  2125. &400CE,,_Q%:
  2126. shell_IconSetSelected(b%,f%,lA%):
  2127. lA%=0
  2128. shell_IconDeselect(b%,f%)
  2129. shell_IconSelect(b%,f%)
  2130. shell_IconSet(b%,f%,lA%):
  2131. lA%=0
  2132. shell_IconDeselect(b%,f%)
  2133. shell_IconSelect(b%,f%)
  2134. shell_IconSetState(eB%,fB%,SH%,pG%):
  2135. t%:t%=
  2136. shell_HeapBlockFetch(16):!t%=eB%:t%!4=fB%:t%!8=SH%:t%!&C=pG%:
  2137. &400CD,,t%:
  2138. shell_HeapBlockReturn(t%):
  2139. shell_IconUnselectable(h%,iC%):
  2140. shell_IconSetState(h%,iC%,&400000,&40000):
  2141. shell_IconSetBGColour(b%,f%,yA%):
  2142. yA%<0
  2143. yA%>&F
  2144. shell_MessageOneArg("SHELLMSG24","PROCshell_IconSetBGColour")
  2145. shell_IconSetState(b%,f%,yA%<<28,&F0000000):
  2146. shell_IconSetFGColour(b%,f%,yA%):
  2147. yA%<0
  2148. yA%>&F
  2149. shell_MessageOneArg("SHELLMSG24","PROCshell_IconSetFGColour")
  2150. shell_IconSetState(b%,f%,yA%<<24,&F000000):
  2151. shell_CaretSetPosition(MA%,gA%,TH%,hG%,dA%,CB%):
  2152. &400D2,MA%,gA%,TH%,hG%,dA%,CB%:
  2153. shell_IconEnsureVisible(MA%,gA%):
  2154. shell_CaretReadPosition(
  2155. CB%):
  2156. s%:s%=
  2157. shell_HeapBlockFetch(24):
  2158. &400D3,,s%:MA%=s%!0:gA%=s%!4:jC%=s%!8:kC%=s%!&C:CB%=s%!20:
  2159. shell_HeapBlockReturn(s%):
  2160. shell_IconSetButtonType(b%,f%,lC%):
  2161. lC%=&C
  2162. lC%=&D
  2163. shell_MessageOneArg("SHELLMSG23","PROCshell_IconSetButtonType")
  2164. lC%<0
  2165. lC%>&F
  2166. shell_MessageOneArg("SHELLMSG22","PROCshell_IconSetButtonType")
  2167. shell_IconSetState(b%,f%,lC%<<&C,&F000):
  2168. shell_IconSetESG(b%,f%,sB%):
  2169. sB%<0
  2170. sB%>31
  2171. shell_MessageOneArg("SHELLMSG25","PROCshell_IconSetESG")
  2172. shell_IconSetState(b%,f%,sB%<<16,&1F0000):
  2173. shell_IconSetText(b%,f%,EA%):
  2174. EA%<>0
  2175. EA%=1<<0
  2176. shell_IconSetState(b%,f%,EA%,1<<0):
  2177. shell_IconSetSprite(v%,bA%,EA%):
  2178. EA%<>0
  2179. EA%=1<<1
  2180. shell_IconSetState(v%,bA%,EA%,1<<1):
  2181. shell_IconSetBorder(v%,bA%,EA%):
  2182. EA%<>0
  2183. EA%=1<<2
  2184. shell_IconSetState(v%,bA%,EA%,1<<2):
  2185. shell_IconSetHCentred(b%,f%,EA%):
  2186. shell_IconSetState(b%,f%,0,1<<9):
  2187. EA%<>0
  2188. EA%=1<<3
  2189. shell_IconSetState(b%,f%,EA%,1<<3):
  2190. shell_IconSetVCentred(b%,f%,EA%):
  2191. EA%<>0
  2192. EA%=1<<4
  2193. shell_IconSetState(b%,f%,EA%,1<<4):
  2194. shell_IconSetFilled(b%,f%,EA%):
  2195. EA%<>0
  2196. EA%=1<<5
  2197. shell_IconSetState(b%,f%,EA%,1<<5):
  2198. shell_IconSetRightJust(b%,f%,EA%):
  2199. shell_IconSetHCentred(b%,f%,0):
  2200. EA%<>0
  2201. EA%=1<<9
  2202. shell_IconSetState(b%,f%,EA%,1<<9):
  2203. shell_IconSetLeftJust(b%,f%):
  2204. shell_IconSetHCentred(b%,f%,0):
  2205. shell_IconSetRightJust(b%,f%,0):
  2206. shell_IconSetUnselectable(b%,f%,lA%):
  2207. lA%<>0
  2208. lA%=1<<22
  2209. shell_IconSetState(b%,f%,lA%,1<<22):
  2210. lA%<>0
  2211. shell_HeapBlockFetch(24):
  2212. &400D3,,s%:
  2213. !s%=b%
  2214. s%!4=f%
  2215. &400D2,-1
  2216. shell_HeapBlockReturn(s%)
  2217. shell_CaretSetRight(b%,f%):
  2218. &400D2,b%,f%,-1,-1,-1,
  2219. shell_IconGetData(b%,f%)):
  2220. print_text(G,H,H$):
  2221. in(G,H-32,G+16*
  2222. (H$),H)
  2223. in(A%,B%,C%,D%):
  2224. newvals:a=_Q%!28:U=_Q%!32:Q=_Q%!36:R=_Q%!40:W=_Q%!4:c=_Q%!8:V=_Q%!&C:P=_Q%!16:K=_Q%!20:L=_Q%!24:S=V-W:T=P-c:e=K:f=K+S:g=L:h=L-T:
  2225. max(RA%,nA%):
  2226. RA%<nA%
  2227. shell_Leaf(F$):
  2228. F$,"."):F$=
  2229. F$,".")+1):
  2230. shell_Branch(j$):
  2231. GA%,z$,c%:
  2232. j$,".")=0
  2233.     z$=""
  2234. c%=0:
  2235. :GA%=c%+1:c%=
  2236. j$,".",GA%):
  2237. c%=0:z$=
  2238. j$,GA%-2)
  2239. gname(D):_$="":
  2240. ?D<>0
  2241. ?D<>&D:_$=_$+
  2242. ?D:D+=1:
  2243. shell_WindowResize(MA%,YH%,fG%,uG%,EH%,GD%):!_Q%=YH%:_Q%!4=fG%:_Q%!8=uG%:_Q%!&C=EH%:
  2244. &400D7,MA%,_Q%:
  2245. )_Q%!0=MA%:
  2246. &400CC,,_Q%:
  2247. &400C5,,_Q%
  2248. shell_WindowRetitle(
  2249. MA%,T$):
  2250. c%,q%,h%,PG%:q%=
  2251. shell_HeapBlockFetch(&64+(
  2252. shell_WindowCountIcons(MA%)*32)):q%!0=MA%:
  2253. &400CC,,q%:
  2254. ((q%!60)
  2255. 256)=0
  2256. Ac%=q%+76:$c%=
  2257. T$,&B):
  2258. &400C3,,q%:
  2259. &400C1,,q%+4
  2260. h%<>MA%
  2261. shell_UpdateWindowHandle(MA%,h%):MA%=h%
  2262. PG%=q%!84:$(!(q%+76))=
  2263. T$,PG%-1):
  2264. ((q%!32)
  2265. (1<<16))<>0
  2266. &400D1,-1,q%!4,q%!16,q%!&C,q%!16+44
  2267. shell_HeapBlockReturn(q%)
  2268. shell_WindowTitleIndirected(SC%):
  2269. (1<<8))=(1<<8)
  2270. shell_ScreenToWindowCoords(VG%,
  2271. uD%,bG%,nH%,NF%,OF%,IC%:IC%=
  2272. shell_HeapBlockFetch(&64+(
  2273. shell_WindowCountIcons(VG%)*32)):uD%=IC%:!uD%=VG%:
  2274. &400CC,,uD%:bG%=IC%!4:kG%=IC%!16:NF%=IC%!20:OF%=IC%!24:X%=X%+(NF%-bG%):Y%=Y%+(OF%-kG%)
  2275. shell_HeapBlockReturn(IC%):
  2276. shell_WimpSlotReadEnd:
  2277. &400EC,-1,-1
  2278. YC%:=YC%
  2279. shell_WimpSlotClaimMemory(YC%,sA%):
  2280. &400EC,YC%+sA%,-1
  2281. wD%<YC%+sA%
  2282. shell_WimpSlotReleaseMemory:
  2283. &400EC,YC%,-1:
  2284. shell_MouseLimit(A,MA%):A!0=MA%:
  2285. &400CB,,A:
  2286. mouse_rectangle(A!4,A!8,A!&C-A!4,A!16-A!8):
  2287. shell_NameOfFirstSprite(rA$):
  2288. X%,N%,AA$:X%=
  2289. (rA$):
  2290. #X%=4:N%=
  2291. #X%:N%+=
  2292. #X%*256:N%+=
  2293. #X%*65536:N%+=
  2294. #X%*&1000000:
  2295. #X%=N%:AA$="":
  2296. &B:AA$+=
  2297. #X%):
  2298. #X%:=AA$
  2299. InitialiseSpriteArea(S%,_G%):!S%=_G%:S%!8=16:
  2300. 46,9+256,S%:
  2301. shell_ListEvents(b%,AA%):
  2302. m%,i$:
  2303. b%=-1
  2304. b%=-2
  2305. shell_Tracef0("MenuSelection="+
  2306. shell_GetEventHandler(b%,AA%,0)):
  2307. shell_Tracef0("MenuMaker    ="+
  2308. shell_GetEventHandler(b%,AA%,1)):
  2309. shell_Tracef0("ClickSelect  ="+
  2310. shell_GetEventHandler(b%,AA%,2))
  2311. shell_Tracef0("ClickAdjust  ="+
  2312. shell_GetEventHandler(b%,AA%,3)):
  2313. shell_Tracef0("Redraw       ="+
  2314. shell_GetEventHandler(b%,AA%,4)):
  2315. shell_Tracef0("Keypress     ="+
  2316. shell_GetEventHandler(b%,AA%,5))
  2317. shell_Tracef0("Drag         ="+
  2318. shell_GetEventHandler(b%,AA%,6)):
  2319. shell_Tracef0("Menu Warning ="+
  2320. shell_GetEventHandler(b%,AA%,7)):
  2321. shell_Tracef0("HelpTag      ="+
  2322. shell_GetEventHandler(b%,AA%,8)):m%=
  2323. shell_GetEventMenu(2,b%,AA%):
  2324. i$="None"
  2325. shell_Tracef0("Menu handle =&"+i$):
  2326. shell_HeapManagerInit(F$,LH%):
  2327. _heap_code%900:
  2328. ("LOAD "+F$+"heapcode "+
  2329. ~_heap_code%):
  2330. _heap_code%+0,LH%:
  2331. shell_HeapBlockExtend(PF%,xD%):
  2332. _heap_code%+&C,PF%,xD%:=PF%
  2333. shell_HeapBlockFetch(xD%):
  2334. _heap_code%+4,JB%,xD%:=JB%
  2335. shell_HeapBlockReturn(
  2336. RA%):
  2337. shell_HeapBlockExists(RA%)
  2338. _heap_code%+8,RA%
  2339. RA%=0:
  2340. shell_HeapBlockExists(JB%):
  2341. JB%<&8000
  2342. 99,"No heapblock defined at this address"
  2343. shell_HeapBlockInfo(JB%):
  2344. shell_HeapBlockInfo(RA%):
  2345. 29,6,!(_heap_code%+28),RA%
  2346. ,,,M:=M
  2347. shell_HeapBlockExtendMid(RA%,nA%,SF%):
  2348. VF%:VF%=
  2349. shell_HeapBlockInfo(RA%):
  2350. _heap_code%+&C,RA%,nA%:
  2351. &400F1,_U%!&94,RA%+SF%,_U%!&94,RA%+SF%+nA%,VF%-nA%:=RA%
  2352. shell_OSVarExists(gB%,BA$):
  2353. &20023,BA$,gB%,-1,0,0
  2354. shell_OSVarGetVal(gB%,sA%,BA$,X):
  2355. CA$,B,iG%:
  2356. &20023,BA$,gB%,sA%,0,-3*(X=
  2357. ,,B,iG%,x%:
  2358. B-1:CA$=CA$+
  2359. (gB%?_%):
  2360. _%:=CA$
  2361. shell_OSReadCommandArg(Y):
  2362. yD%,W$,d%:W$="":d%=0:
  2363. yD%?d%<>0:W$+=
  2364. (yD%?d%):d%+=1:
  2365. 1:W$=
  2366. 34)+1):W$=
  2367. 34)+2)
  2368. shell_StringStripTrailing(B$,X$):
  2369. B$,1)=X$:B$=
  2370. (B$)-1):
  2371. shell_StringStripLeading(B$,X$):
  2372. B$,1)=X$:B$=
  2373. B$,2):
  2374. shell_StringStripAll(B$,X$):
  2375. E,F:E=
  2376. B$,X$):
  2377. B$,F-1)+
  2378. B$,F+1)
  2379. E:=B$
  2380. shell_StringPadTrailing(B$,X$,LB%):
  2381. (B$)<LB%:B$=B$+
  2382. (B$),X$):
  2383. shell_StringPadLeading(B$,X$,LB%):
  2384. (B$)<LB%:B$=
  2385. (B$),X$)+B$:
  2386. shell_StringUpperCase(B$):
  2387. (B$)>0
  2388. (B$):
  2389. B$,_%,1)>="a"
  2390. B$,_%,1)<="z"
  2391. B$,_%,1)=
  2392. B$,_%,1))
  2393. shell_StringExchange(B$,EA$,kA$):
  2394. B$,EA$)
  2395. P0CB%=
  2396. B$,EA$):B$=
  2397. B$,CB%-1)+kA$+
  2398. B$,CB%+
  2399. shell_StringArrayGetLongest(A$(),ID%):
  2400. _%,JD%:JD%=0:
  2401. (A$(_%))>JD%
  2402. (A$(_%))
  2403. _%:=JD%
  2404. mem_to_string(aA%,d%,FH%):
  2405. aA%?d%<>FH%:B$+=
  2406. (aA%?d%):d%+=1:
  2407. shell_FileLength(a$):
  2408. x%,ND%,YD%,LB%,ZC%,B$:
  2409. 8,5,a$
  2410. x%,,ND%,YD%,LB%,ZC%:=LB%
  2411. shell_TraceOn:_U%!&64=_U%!&64
  2412. 1<<9:
  2413. shell_BroadcastMessage(&43B00,"ShellDBug:TraceOn"):
  2414. shell_TraceOff:
  2415. (_U%!&64
  2416. (1<<9))
  2417. _U%!&64=_U%!&64
  2418. (1<<9)
  2419. shell_BroadcastMessage(&43B00,"ShellDBug:TraceOff"):
  2420. shell_TraceInit(p$):
  2421. XA%,a%,D$,C$:
  2422. p$<>""
  2423. (p$):_U%!44=XA%
  2424. shell_HeapBlockFetch(256):C$=
  2425. shell_OSVarGetVal(a%,256,"Obey$Dir",1):D$=
  2426. shell_Leaf(C$),2):
  2427. shell_BroadcastMessage(&43B00,"ShellDBug:Init Debug messages from "+D$):
  2428. shell_HeapBlockReturn(a%):
  2429. _U%!&64
  2430. _U%!&64=(_U%!&64
  2431. 1<<4)
  2432. shell_TraceIsOn:
  2433. _U%!&64
  2434. (1<<9)
  2435. shell_Tracef0(VA$):
  2436. shell_TraceIsOn)
  2437. _U%!44<>-1
  2438. XA%=_U%!44:
  2439. #XA%,VA$
  2440. _U%!&94>0
  2441. shell_BroadcastMessage(&43B00,"ShellDBug:Trace "+VA$)
  2442. shell_Tracef2(JB%):
  2443. ("MEDIT "+
  2444. ~JB%):
  2445. shell_TraceExit:
  2446. _U%!44<>-1
  2447. #(_U%!44):_U%!44=-1
  2448. shell_AttachHotKey(XA$,GB%,IB%,BC%,e$,b%,Y$,Z$):
  2449. z%,d%,c%,CA%,KA%,KC%,tB%:tB%=0:
  2450. GB%<>0
  2451. tB%=tB%
  2452. IB%<>0
  2453. tB%=tB%
  2454. (1<<1)
  2455. BC%<>0
  2456. tB%=tB%
  2457. (1<<2)
  2458. _U%!60=0
  2459. 3_U%!60=
  2460. shell_HeapBlockFetch(24):d%=0:_U%!&B4=1
  2461. d%=_U%!&B4*24:_U%!60=
  2462. shell_HeapBlockExtend(_U%!60,24):_U%!&B4=(_U%!&B4)+1
  2463. :z%=_U%!60:
  2464. "F1":KA%=385
  2465. "F2":KA%=386
  2466. "F3":KA%=387
  2467. "F4":KA%=388
  2468. "F5":KA%=389
  2469. "F6":KA%=390
  2470. "F7":KA%=391
  2471. "F8":KA%=392
  2472. "F9":KA%=393
  2473. "F10":KA%=458
  2474. "F11":KA%=459
  2475. "PRINT":KA%=384
  2476. "INSERT":KA%=461
  2477. "HOME":KA%=30:KC%=
  2478. "PAGEUP":KC%=
  2479. :KA%=415:
  2480. KA%=431
  2481. KA%=399
  2482. KA%=447
  2483. "PAGEDOWN":KC%=
  2484. :KA%=414:
  2485. KA%=430
  2486. KA%=398
  2487. KA%=446
  2488. "DELETE":KA%=&7F:KC%=
  2489. KA%=(
  2490. XA$)-64:KC%=
  2491. KA%+=16
  2492. KA%+=32
  2493. :c%=z%+d%:c%!0=KA%:c%!4=tB%:c%!8=
  2494. shell_HeapBlockFetch(
  2495. e$+1):CA%=c%!8:$CA%=e$:
  2496. shell_IsWindowStatic(b%)=
  2497. shell_MessageNoArgs("SHELLMSG09")
  2498. :c%!&C=b%:c%!16=
  2499. shell_HeapBlockFetch(
  2500. Y$+1):CA%=c%!16:$CA%=Y$:c%!20=
  2501. shell_HeapBlockFetch(
  2502. Z$+1):CA%=c%!20:$CA%=Z$:
  2503. shell_HotKeyProcess(KA%):
  2504. z%,p%,j%,e%,u%,q$,Y$,Z$:
  2505. IB%,GB%,BC%,pA%,rA%,SC%,lH%,d%:
  2506. y%,q%,LC%:GB%=
  2507. (-1):IB%=
  2508. (-2):BC%=
  2509. (-3):
  2510. LC%=LC%
  2511. LC%=LC%
  2512. (1<<1)
  2513. LC%=LC%
  2514. (1<<2)
  2515. Az%=_U%!60:p%=_U%!&B4*24:j%=
  2516. :e%=0:
  2517. z%!e%=KA%
  2518. z%!(e%+4)=LC%
  2519. e%+=24
  2520. e%>=p%:
  2521. &dc%=z%+e%:q$=$(c%!8):
  2522. shell_Tracef0("HotKeyProcess:Template name is '"+q$+"'"):
  2523. (q$<>""
  2524. c%!&C=0)
  2525. shell_CreateWindow(q$,u%):
  2526. shell_Tracef0("HotKeyProcess:Creating new dynamic window (handle is &"+
  2527. ~u%+")"):q%=
  2528. shell_HeapBlockFetch(36):q%!0=u%:
  2529. &400CB,,q%:pA%=(q%!4-q%!&C)/2:rA%=(q%!16-q%!8)/2:
  2530. shell_HeapBlockReturn(q%)
  2531. :Y$=$(c%!16):
  2532. Y$<>""
  2533. shell_Tracef0("HotKeyProcess:Calling Pre-Open FN '"+Y$+"'"):
  2534. c%!&C>0
  2535. 9 k%=
  2536. ("FN"+Y$+"("+
  2537. c%!&C+")")
  2538. ("FN"+Y$+"("+
  2539. u%+")")
  2540. shell_Tracef0("HotKeyProcess:No Pre-Open FN registered")
  2541. shell_IsWindowStatic(c%!&C)
  2542. shell_OpenWindowStatic(c%!&C)
  2543. c%!&C>0
  2544. shell_MessageNoArgs("SHELLMSG09")
  2545. shell_OpenWindowDynamic2(u%,pA%,rA%)
  2546. :Z$=$(c%!20):
  2547. Z$<>""
  2548. shell_Tracef0("HotKeyProcess:Calling Post-Open FN '"+Z$+"'"):
  2549. c%!&C>0
  2550. P k%=
  2551. ("FN"+Z$+"("+
  2552. c%!&C+")")
  2553. ("FN"+Z$+"("+
  2554. u%+")")
  2555. shell_Tracef0("HotKeyProcess:No Post-Open FN registered")
  2556. q$="":Y$="":Z$="":y%=
  2557. shell_WindowCentreOnPointer(u%):
  2558. o%,mC%,pA%,rA%:mC%=
  2559. shell_HeapBlockFetch(20):
  2560. &400CF,,mC%:q%=
  2561. shell_HeapBlockFetch(36):q%!0=u%:
  2562. &400CB,,q%:pA%=(q%!4-q%!&C)/2:rA%=(q%!16-q%!8)/2:
  2563. shell_WindowMoveTo(u%,mC%!0+pA%,mC%!4-rA%)
  2564. shell_HeapBlockReturn(q%):
  2565. shell_HeapBlockReturn(mC%):
  2566. shell_WindowCentreOnScreen(u%):
  2567. o%,LD%,MD%,vA%,dA%,wC%,PC%:
  2568. &20035,-1,4
  2569. ,,wC%:
  2570. &20035,-1,5
  2571. ,,PC%:
  2572. &20035,-1,&B
  2573. ,,LD%:
  2574. &20035,-1,&C
  2575. ,,MD%:LD%=LD%<<wC%:MD%=MD%<<PC%:q%=
  2576. shell_HeapBlockFetch(36):q%!0=u%:
  2577. &400CB,,q%:vA%=(q%!&C-q%!4)
  2578. edA%=(q%!16-q%!8):
  2579. shell_WindowMoveTo(u%,(LD%/2)-(vA%/2),(MD%-dA%)/2):
  2580. shell_HeapBlockReturn(q%):
  2581. shell_OpenWindowStaticNewView(b%):
  2582. shell_OpenWindow(b%,
  2583. ,-1):
  2584. shell_OpenWindowStatic(h%):
  2585. shell_IsWindowStatic(h%)=
  2586. shell_OpenWindow(h%,0,-1)
  2587. shell_InitHelpSystem(F$,eG%):
  2588. HA$,GA%,xA%,d$,AE%,uB%:_U%!&D4=0:
  2589. _U%!&D8<>0
  2590. shell_HeapBlockReturn(_U%!&D8)
  2591. @_U%!&D8=0:
  2592. shell_ScanForHelp:
  2593. HA$=" -DieWithTask"
  2594. HA$=""
  2595. _U%!&64
  2596. F$="":xA%=
  2597. shell_HeapBlockFetch(256):d$=
  2598. shell_OSVarGetVal(xA%,256,
  2599. shell_GetAppName+"Res$Path",-1):
  2600. shell_HeapBlockReturn(xA%):
  2601. :GA%=
  2602. d$,","):
  2603. GA%>0
  2604. shell_FileExists(
  2605. d$,GA%-1)+
  2606. shell_GetAppName)
  2607. d$,GA%-1)+
  2608. shell_GetAppName:
  2609. shell_StrongHlpChkFiles(F$)
  2610. d$,GA%+1)
  2611. shell_FileExists(d$+
  2612. shell_GetAppName)
  2613. ?F$=d$+
  2614. shell_GetAppName:
  2615. shell_StrongHlpChkFiles(F$)
  2616. shell_OK(
  2617. shell_MessageOneArg("SHELLMSG26",
  2618. shell_GetAppName))
  2619. F$<>""
  2620. shell_FileExists(F$)
  2621. shell_StrongHlpChkFiles(F$)
  2622. shell_MessageOneArg("SHELLMSG33",F$)
  2623. uB%=0
  2624. shell_StrongHlpMsg("Help_Install "+F$+HA$):_U%!&64=_U%!&64
  2625. shell_HelpWord(JA$):
  2626. fH%,c%,FA%:FA%=
  2627. shell_HeapBlockFetch(512):
  2628. _U%!&D0=-1
  2629. shell_OSVarExists(FA%,"StrongHelp$Dir")
  2630. &600DE,"<StrongHelp$Dir>":
  2631. _U%!&D8<>0
  2632. shell_HeapBlockReturn(_U%!&D8)
  2633. <_U%!&D8=
  2634. shell_HeapBlockFetch(
  2635. JA$+1):c%=_U%!&D8:$c%=JA$
  2636. shell_HeapBlockReturn(FA%):
  2637. shell_OK(
  2638. shell_MessageNoArgs("SHELLMSG11"))
  2639. shell_StrongHlpMsg("Help_Word "+JA$)
  2640. shell_HeapBlockReturn(FA%):
  2641. shell_StrongHlpMsg(w$):
  2642. shell_BroadcastMessage(&43B00,w$):
  2643. shell_ScanForHelp:
  2644. hB%,OD%:hB%=
  2645. shell_HeapBlockFetch(256):
  2646. :hB%!&C=0:
  2647. &400E7,19,hB%,-2,_U%!&D4
  2648. ,,OD%:_U%!&D4=_U%!&D4+1:
  2649. OD%<>-1
  2650. (_U%!&D4)>64:
  2651. OD%<>-1
  2652. @hB%!0=24:hB%!&C=0:hB%!16=&400C6:hB%!20=OD%:
  2653. &400E7,17,hB%,0
  2654. shell_HeapBlockReturn(hB%):
  2655. shell_BroadcastMessage(zG%,w$):
  2656. BA%,CE%:CE%=(
  2657. w$+30)
  2658. 3:BA%=
  2659. shell_HeapBlockFetch(CE%):BA%!&C=0:BA%!16=zG%:$(BA%+20)=w$+
  2660. (0):BA%!0=CE%:
  2661. &600E7,17,BA%,0:
  2662. shell_HeapBlockReturn(BA%):
  2663. shell_WindowToggleBackIcon(
  2664. shell_WindowToggleFlags(b%,1<<24):
  2665. shell_WindowToggleCloseIcon(
  2666. shell_WindowToggleFlags(b%,1<<25):
  2667. shell_WindowToggleTitleBar(
  2668. shell_WindowToggleFlags(b%,1<<26):
  2669. shell_WindowToggleToggleIcon(
  2670. shell_WindowToggleFlags(b%,1<<27):
  2671. shell_WindowToggleHScrollBar(
  2672. shell_WindowToggleFlags(b%,1<<30):
  2673. shell_WindowToggleAdjustSizeIcon(
  2674. shell_WindowToggleFlags(b%,1<<29):
  2675. shell_WindowToggleVScrollBar(
  2676. shell_WindowToggleFlags(b%,1<<28):
  2677. shell_WindowToggleFlags(
  2678. b%,NC%):
  2679. a%,l%,GD%,h%:
  2680. shell_Tracef0("WindowToggleFlags:wh%=&"+
  2681. ~b%):GD%=
  2682. shell_WindowIsOpen(b%):a%=
  2683. shell_HeapBlockFetch(&64+(
  2684. shell_WindowCountIcons(b%)*32)):a%!0=b%:
  2685. &400CC,,a%:l%=a%!32:l%=(l%
  2686. NC%):a%!32=l%:
  2687. &400C3,,a%
  2688. &400C1,,a%+4
  2689. h%:!a%=h%:
  2690. &400C5,,a%
  2691. shell_HeapBlockReturn(a%):
  2692. h%<>b%
  2693. shell_UpdateWindowHandle(b%,h%):b%=h%
  2694. shell_ListClickSelect:
  2695. z%,e%,p%,c%,CA%:z%=_U%!&C:p%=
  2696. shell_HeapBlockInfo(z%):
  2697. shell_Tracef0(" "):
  2698. shell_Tracef0("List of ClickSelect events:"):
  2699. shell_Tracef0(" "):
  2700. shell_Tracef0("Window         Icon   FN")
  2701. shell_Tracef0("-----------------------------------------------------------"):e%=0:
  2702. :c%=z%!(e%+20):CA%=z%+e%:
  2703. shell_HeapBlockExists(c%)
  2704. $c%<>""
  2705. shell_Tracef0(
  2706. shell_StringPadTrailing(
  2707. shell_GetWindowIdentifier(CA%!0),".",&C)+" "+
  2708. shell_StringPadLeading(
  2709. CA%!4," ",6)+"   "+$c%)
  2710. :e%+=48:
  2711. (e%>=p%):
  2712. shell_Tracef0(" "):
  2713. shell_ListClickAdjust:
  2714. z%,e%,p%,c%,CA%:z%=_U%!&C:p%=
  2715. shell_HeapBlockInfo(z%):
  2716. shell_Tracef0(" "):
  2717. shell_Tracef0("List of ClickAdjust events:"):
  2718. shell_Tracef0(" "):
  2719. shell_Tracef0("Window         Icon   FN")
  2720. shell_Tracef0("-----------------------------------------------------------"):e%=0:
  2721. :c%=z%!(e%+24):CA%=z%+e%:
  2722. shell_HeapBlockExists(c%)
  2723. $c%<>""
  2724. shell_Tracef0(
  2725. shell_StringPadTrailing(
  2726. shell_GetWindowIdentifier(CA%!0),".",&C)+" "+
  2727. shell_StringPadLeading(
  2728. CA%!4," ",6)+"   "+$c%)
  2729. :e%+=48:
  2730. (e%>=p%):
  2731. shell_Tracef0(" "):
  2732. shell_ListHelpTags:
  2733. z%,e%,p%,c%,CA%:z%=_U%!&C:p%=
  2734. shell_HeapBlockInfo(z%):
  2735. shell_Tracef0(" "):
  2736. shell_Tracef0("List of attached help tags:"):
  2737. shell_Tracef0(" "):
  2738. shell_Tracef0("Window         Icon   Tag")
  2739. shell_Tracef0("-----------------------------------------------------------"):e%=0:
  2740. :c%=z%!(e%+44):CA%=z%+e%:
  2741. shell_HeapBlockExists(c%)
  2742. $c%<>""
  2743. shell_Tracef0(
  2744. shell_StringPadTrailing(
  2745. shell_GetWindowIdentifier(CA%!0),".",&C)+" "+
  2746. shell_StringPadLeading(
  2747. CA%!4," ",6)+"   "+$c%)
  2748. :e%+=48:
  2749. (e%>=p%):
  2750. shell_Tracef0(" "):
  2751. shell_MemFill(pC%,LG%,MG%):
  2752. I%,PD%,EE%:PD%=LG%
  2753. 4:EE%=LG%
  2754. PD%>0
  2755. (PD%*4)
  2756. 4:pC%!(I%-1)=MG%:
  2757. EE%>0
  2758. .pC%=pC%+(PD%*4):
  2759. EE%-1:pC%?I%=MG%:
  2760. shell_AttachFontMenu(b%,f%,J$,UA$):
  2761. shell_FontMenuInit:
  2762. "FontMenu_Select",""+
  2763. 0,_U%!260
  2764. ,m%:_U%!&FC=m%:
  2765. shell_EventAdd(b%,f%,0,-2,J$):
  2766. shell_Tracef0("AttachFontMenu:Attaching font menu"):
  2767. UA$<>""
  2768. shell_AttachMenuMaker(b%,f%,UA$)
  2769. shell_AttachFontSubMenu(ZB%,E$,J$):
  2770. dH%,m%,c%,g%:
  2771. shell_FontMenuInit:
  2772. "FontMenu_Select",""+
  2773. 0,_U%!260
  2774. &45BCE,ZB%,m%:
  2775. &45BCC,,
  2776. :_U%!&FC=m%:
  2777. shell_EventListMenuWarn(ZB%,m%,E$,J$):
  2778. shell_Tracef0("AttachFontSubMenu:Attaching font menu &"+
  2779. ~m%):
  2780. shell_FontMenuInit:
  2781. ("RMEnsure FontMenu 1.16 RMLoad <EvntShell$Path>FontMenu"):
  2782. ("RMEnsure FontMenu 1.16 Error Couldn't load FontMenu module"):
  2783. _U%!&F0=-1
  2784. "FontMenu_Create"
  2785. _U%!&F0
  2786. shell_FontMenuSelectFont("",
  2787. shell_FontMenuSelectFont(x$,FE%):
  2788. c%,WB%:
  2789. shell_HeapBlockExists(_U%!&F4)
  2790. shell_HeapBlockReturn(_U%!&F4)
  2791. H_U%!&F4=
  2792. shell_HeapBlockFetch(
  2793. x$+1):c%=_U%!&F4:$c%=x$:
  2794. FE%<>0
  2795. FE%=1
  2796.     B_U%!260=FE%:
  2797. "FontMenu_Select",x$,_U%!260
  2798. ,WB%:
  2799. WB%<>_U%!&FC
  2800. shell_FontMenuUpdatePtr(WB%):_U%!&FC=WB%
  2801. shell_Tracef0("FontMenuSelectFont:Font is '"+x$+"'"):
  2802. shell_FontMenuGetLastSelectedFont:
  2803. shell_HeapBlockExists(_U%!&F4)
  2804. c%=_U%!&F4:=$c%
  2805. shell_FontMenuUpdatePtr(e%):
  2806. z%,g%:
  2807. shell_Tracef0("FontMenuUpdatePtr:Started.."):
  2808. shell_HeapBlockExists(_U%!&DC)
  2809. shell_Tracef0("FontMenuUpdatePtr:HeapBlock found.."):z%=_U%!&DC:g%=0:
  2810. shell_Tracef0("FontMenuUpdatePtr:Substituting ptr.."):z%!(g%+8)=e%:g%+=&C:
  2811. z%!g%=-1
  2812. shell_MenuUpdateHandle(WG%,XG%):
  2813. p%,e%,i%,m%:p%=
  2814. shell_HeapBlockInfo(_U%!&C)-8:e%=0:j%=
  2815. :i%=_U%!&C:
  2816. :m%=i%!(e%+8):
  2817. m%=WG%
  2818. i%!(e%+8)=XG%
  2819. ?+e%+=48:
  2820. (e%>=p%):
  2821. _U%!24=WG%
  2822. _U%!24=XG%
  2823. shell_FindFont(
  2824. f$,QD%,RD%,
  2825. HE%):
  2826. shell_FontIsAvailable(f$,QD%,RD%)
  2827. f$="Trinity.Medium"
  2828. &40081,,f$,QD%*16,RD%*16,0,0
  2829. shell_FontIsAvailable(f$,QD%,RD%):
  2830. &40081,0,f$,QD%*16,RD%*16,0,0
  2831. &40082,HE%:=
  2832. shell_CheckSelection(XH%):
  2833. c%,g%:c%=_U%!256:
  2834. _U%!24=_U%!&FC
  2835. XH%!g%<>c%!g%
  2836. g%+=4:
  2837. c%!g%=-1:=g%
  2838. shell_MenuGetItemAddress(m%,cG%):
  2839. g%,DC%:
  2840. &45BC7,m%
  2841. :DC%=m%+28+((cG%!g%)*24):m%=DC%!4:g%+=4:
  2842. cG%!g%=-1:=DC%
  2843. shell_GetLastMouseXPos:=_U%!272
  2844. shell_GetLastMouseYPos:=_U%!276
  2845. shell_UpdateWindowHandle(WA%,OA%):
  2846. shell_Tracef0("UpdateWindowHandle:Updating stored window handles"):
  2847. shell_Tracef0("UpdateWindowHandle:old handle=&"+
  2848. ~WA%):
  2849. shell_Tracef0("UpdateWindowHandle:new handle=&"+
  2850. ~OA%):
  2851. OA%<>WA%
  2852. _U%!28=WA%
  2853. _U%!28=OA%
  2854. !_Q%=WA%
  2855. !_Q%=OA%
  2856. shell_FixEventBlock(WA%,OA%,_U%!&C,48):
  2857. shell_FixEventBlock(WA%,OA%,_U%!96,16):
  2858. shell_FixEventBlock(WA%,OA%,_U%!72,24):
  2859. shell_FixEventBlock(WA%,OA%,_U%!92,24):
  2860. shell_FixEventBlock2(WA%,OA%,_U%!&68,16):
  2861. shell_FixEventBlock2(WA%,OA%,_U%!332,32)
  2862. shell_UpdateStaticWindowHandle(WA%,OA%):
  2863. shell_UpdateWindowHandleList(WA%,OA%)
  2864. shell_FixEventBlock(WA%,OA%,i%,d%):
  2865. e%,p%:
  2866. shell_HeapBlockExists(i%)
  2867. shell_HeapBlockInfo(i%)-8:
  2868. (i%!e%=WA%)
  2869. i%!e%=OA%
  2870. :e%+=d%:
  2871. (e%>=p%)
  2872. shell_FixEventBlock2(WA%,OA%,i%,d%):
  2873. e%,p%:e%=4:
  2874. shell_HeapBlockExists(i%)
  2875. p%=!i%:
  2876. (i%!e%=WA%)
  2877. i%!e%=OA%
  2878. :e%+=d%:
  2879. (e%>=p%)
  2880. shell_IconSelectAll(b%):
  2881. a%,I%:a%=
  2882. shell_HeapBlockFetch(&7D0):I%=a%+64:!a%=b%:a%!8=1<<21:a%!&C=1<<21:
  2883. &400D6,!a%,I%,5<<21,0<<21:
  2884. !I%>-1:a%!4=!I%:
  2885. &400CD,,a%:I%+=4:
  2886. shell_HeapBlockReturn(a%):
  2887. shell_IconDeselectAll(b%):
  2888. a%,I%:a%=
  2889. shell_HeapBlockFetch(&7D0):I%=a%+64:!a%=b%:a%!8=0:a%!&C=1<<21:
  2890. &400D6,!a%,I%,5<<21,1<<21:
  2891. !I%>-1:a%!4=!I%:
  2892. &400CD,,a%:I%+=4:
  2893. shell_HeapBlockReturn(a%):
  2894. shell_Message_SaveDesktop(Q%):
  2895. KA$:KA$="Run "+
  2896. shell_GetAppDir+
  2897. &C,2,Q%!20,KA$,
  2898. shell_MessagesInit(I$,
  2899. GF%):
  2900. sA%,l%:
  2901. 3,"Cannot open message file '"+I$+"'"
  2902. &41500,,I$
  2903. l%,,sA%:
  2904. GF%=0
  2905. shell_HeapBlockFetch(sA%)
  2906. 30,6,,,17+
  2907. ,,SD%:$(SD%+16)=I$:
  2908. &41501,SD%,SD%+16:
  2909. shell_Tracef0("MessagesInit:Message resource file '"+I$+"' loaded"):
  2910. shell_PrinterOnLine:
  2911. HF%,IF%:HF%=
  2912. (-4):
  2913. 2,1,0,1,0,1,0:
  2914. >30:IF%=
  2915. (-4)<HF%):*FX21,3
  2916. 3:=IF%
  2917. shell_AttachBumpHandler(b%,f%,JF%,KF%,RH%,VH%,LF%,QH%,LA$,MA$):
  2918. n%,d%,c%,CA%,zA%:d%=
  2919. shell_GetEventListOffset2(b%,JF%,_U%+&68,16,
  2920. ):n%=_U%!&68+d%:n%!0=b%:n%!4=JF%:n%!8=LF%:n%!&C=
  2921. shell_HeapBlockFetch(24):zA%=n%!&C:zA%!0=f%:zA%!4=RH%:zA%!8=VH%
  2922. LA$>0
  2923.  >zA%!&C=
  2924. shell_HeapBlockFetch((
  2925. LA$)+1):CA%=zA%!&C:$CA%=LA$
  2926. zA%!&C=0
  2927. MA$>0
  2928. &>zA%!16=
  2929. shell_HeapBlockFetch((
  2930. MA$)+1):CA%=zA%!16:$CA%=MA$
  2931. zA%!16=0
  2932. QH%=-1
  2933. zA%!20=1
  2934. zA%!20=0
  2935. -od%=
  2936. shell_GetEventListOffset2(b%,KF%,_U%+&68,16,
  2937. ):n%=_U%!&68+d%:n%!0=b%:n%!4=KF%:n%!8=LF%*(-1):n%!&C=zA%:
  2938. shell_HandleBumpIcons(d%,b%,f%,_button%):
  2939. kH%,UA%,n%,qC%,_temp$,KE%:
  2940. iB%,ME%,NE%:
  2941. mH%,FC%:
  2942. _button%<>2
  2943. =Yn%=_U%!&68+d%:_U%!288=b%:_U%!292=f%:_U%!296=d%:iB%=n%!8:ME%=
  2944. (-1):NE%=
  2945. (-2):
  2946. iB%=iB%*8
  2947. iB%=iB%*2
  2948. iB%=iB%*4
  2949. :UA%=n%!&C:KE%=UA%!16:
  2950. KE%<>0
  2951. OC_temp$=
  2952. shell_IconGetData(b%,UA%!0):qC%=
  2953. ("FN"+$KE%+"(_temp$)")
  2954. shell_IconGetData(b%,UA%!0))
  2955. _button%=1
  2956. _new_val%=qC%+((iB%)*(-1))
  2957. _new_val%=qC%+iB%
  2958. UA%!20=0
  2959. _new_val%>UA%!8
  2960. _new_val%=UA%!8
  2961. _new_val%<UA%!4
  2962. _new_val%=UA%!4
  2963. _new_val%>UA%!8
  2964. _new_val%=UA%!4
  2965. _new_val%<UA%!4
  2966. _new_val%=UA%!8
  2967. :FC%=UA%!&C:
  2968. FC%<>0
  2969. e1_new_val$=
  2970. ("FN"+$FC%+"(_new_val%,_button%)")
  2971. _new_val$=
  2972. _new_val%
  2973. _new_val%<>qC%
  2974. shell_IconPutData(b%,UA%!0,_new_val$,-1)
  2975. shell_WindowSetSpriteArea(u%,OE%):
  2976. a%,OA%,iC%,PE%:a%=
  2977. shell_HeapBlockFetch(&64+(
  2978. shell_WindowCountIcons(u%)*32)):!a%=u%:
  2979. &400CC,,a%:a%!68=OE%:
  2980. shell_IconSetSpriteArea(a%!60,a%+76,OE%):
  2981. (a%!88)>0
  2982. iC%=0
  2983. (a%!88)-1:PE%=a%+92+iC%*32:
  2984. shell_IconSetSpriteArea(PE%!16,PE%+20,OE%):
  2985. &400C3,,a%:
  2986. &400C1,,a%+4
  2987. OA%<>u%
  2988. shell_UpdateWindowHandle(u%,OA%):u%=OA%
  2989. shell_HeapBlockReturn(a%):=u%
  2990. shell_IconSetSpriteArea(l%,rC%,rG%):
  2991. 3)=2)
  2992. 256)<>0)
  2993. rC%!4=rG%
  2994. shell_StrongHlpIsAvailable:
  2995. YB%,FA%:YB%=
  2996. _U%!&64
  2997. kFA%=
  2998. shell_HeapBlockFetch(256):YB%=
  2999. shell_OSVarExists(FA%,"StrongHelp$Dir"):
  3000. shell_HeapBlockReturn(FA%)
  3001. :=YB%
  3002. shell_MenuNew(T$):
  3003. shell_Tracef0("MenuNew:Creating new menu (title is '"+T$+"')"):
  3004. &45BC1,,T$
  3005. h%:=h%
  3006. shell_MenuAdd(h%,NA$,J$):
  3007. shell_Tracef0("MenuAdd:Adding item ("+NA$+")"):
  3008. J$<>""
  3009. &45BC2,h%,NA$,J$
  3010. &45BC2,h%,NA$
  3011. :=fA%
  3012. shell_MenuTick(fA%,lA%):
  3013. &45BC9,fA%,lA%:
  3014. shell_MenuTickOnly1(YA%,GA%):
  3015. &45BD1,YA%,GA%:
  3016. shell_MenuTickOnly2(fA%):
  3017. &45BD1,fA%:
  3018. shell_MenuShade(h%,lA%):
  3019. &45BCB,h%,lA%:
  3020. shell_MenuDotted(fA%,lA%):
  3021. &45BCA,fA%,lA%:
  3022. shell_MenuColours(fA%,qE%,tE%):
  3023. &45BD0,fA%,qE%,tE%:
  3024. shell_MenuWritable(fA%,lA%,sA%,y$):
  3025. &45BCD,fA%,lA%,sA%,y$:
  3026. shell_MenuPutData(fA%,O$):
  3027. &45BC8,fA%,O$:
  3028. shell_MenuCallHandler(u%,_h_blk%):
  3029. ("FN"+$u%+"(_h_blk%)")
  3030. shell_AttachOpenWindow(b%,A$):
  3031. a%,c%,d%:
  3032. shell_Tracef0("AttachOpenWindow:Attaching OpenWindow Handler"):
  3033. shell_MessageOneArg("SHELLMSG27","AttachOpenWindow")
  3034. shell_GetEventListOffset(b%,-1,_U%+304,&C,
  3035. ):a%=_U%!304+d%:a%!0=b%:a%!4=-1:a%!8=
  3036. shell_HeapBlockFetch(
  3037. (A$)+1):c%=a%!8:$c%=A$:
  3038. shell_AttachCloseWindowHandler(b%,A$):
  3039. a%,c%,d%:
  3040. shell_Tracef0("AttachCloseWindowHandler:Attaching CloseWindow Handler"):
  3041. shell_MessageOneArg("SHELLMSG27","AttachCloseWindow")
  3042. shell_GetEventListOffset(b%,-1,_U%+308,&C,
  3043. ):a%=_U%!308+d%:a%!0=b%:a%!4=-1:a%!8=
  3044. shell_HeapBlockFetch(
  3045. (A$)+1):c%=a%!8:$c%=A$:
  3046. shell_SpriteRename(aC%,lA$,nA$):
  3047. 46,512+26,aC%,
  3048. shell_SpriteGetPtr(aC%,lA$),nA$:
  3049. shell_SpriteAreaSave(aC%,I$):
  3050. 46,512+&C,aC%,I$:
  3051. shell_EnsurePoll:
  3052. :EA%=
  3053. shell_Poll_I(0,_U%!&94):
  3054. shell_Action(EA%):
  3055. EA%=0:
  3056. shell_WimpGetVersion:=_U%!316
  3057. shell_OSCheckVersion(sG%):=
  3058. shell_OSModuleCheckVersion("UtilityModule",sG%)
  3059. shell_OSModuleCheckVersion(oA$,b):
  3060. a%,GC%,M$:a%=
  3061. shell_HeapBlockFetch(256):
  3062. ("Set Module$Check Y"):
  3063. ("RMEnsure "+oA$+" "+
  3064. b+" Set Module$Check N"):
  3065. 35,"Module$Check",a%,256,0,0
  3066. ,,GC%:a%?GC%=&D:
  3067. ("Unset Module$Check"):M$=$a%
  3068. shell_HeapBlockReturn(a%):
  3069. M$="N"
  3070. shell_MessageSendDataLoad(x%,R$):
  3071. BA%:BA%=
  3072. shell_HeapBlockFetch(256):BA%!0=256:BA%!4=0:BA%!&C=0:BA%!16=5:BA%!20=0:BA%!28=0:BA%!32=0:BA%!36=0:BA%!40=x%:$(BA%+44)=R$+
  3073. &400E7,18,BA%,0:_SHELL_SENDDATALOAD_MY_REF%=BA%!8:_SHELL_SENDDATALOAD_FILE$=R$
  3074. shell_HeapBlockReturn(BA%):
  3075. shell_MenuMakeFromFile(T$,jA$,p$):
  3076. h%,X%,B$,k%:
  3077. shell_FileExists(p$)
  3078. iTh%=
  3079. shell_MenuNew(T$):X%=
  3080. (p$):
  3081. #X%:k%=
  3082. shell_MenuAdd(h%,B$,jA$):
  3083. shell_BinarySearch(_search_term$,eA$,l$,vG%,QE%):
  3084. _pos%,DB%,_wp$,VD%,gH%,RE%,SE%,QF%,j%,TE%:QE%+=1:TE%=
  3085. :DB%=QE%:VD%=0:_pos%=DB%
  3086. 2:SE%=vG%-1:RE%=QE%:
  3087. :_wp$=
  3088. ("FN"+eA$+"(_pos%)"):UE%=_pos%:
  3089. _search_term$=_wp$
  3090. ("FN"+l$+"(_search_term$,_wp$)")
  3091. +RE%=_pos%:DB%=_pos%-SE%:_pos%=DB%
  3092. 2+VD%
  3093. SE%=_pos%:VD%=_pos%:DB%=RE%-_pos%:_pos%=DB%
  3094. 2+VD%
  3095. QF%=UE%
  3096. !QF%=UE%:
  3097. shell_IconLastClicked:=_U%!32
  3098. shell_MenuGetNrItems(YA%):
  3099. m%,y%,TF%:
  3100. &45BC7,YA%
  3101. m%:m%+=28:
  3102. :y%=(m%?0
  3103. &80):TF%+=1:m%+=24:
  3104. y%:=TF%
  3105. shell_MenuGetNrDotted(YA%):
  3106. m%,y%,ID%:
  3107. &45BC7,YA%
  3108. m%:m%+=28:
  3109. :y%=(m%?0
  3110. &80):
  3111. (m%?0
  3112. ID%+=1
  3113. m%+=24:
  3114. y%=-1:=ID%
  3115. shell_MenuGetItemHandler(YA%,sC%):
  3116. hA%,e%,OA$:hA%=
  3117. shell_HeapBlockFetch(8):hA%!0=sC%:hA%!4=-1:
  3118. &45BC4,YA%,hA%
  3119. OA$=""
  3120. OA$=$(e%)
  3121. shell_HeapBlockReturn(hA%):=OA$
  3122. shell_MenuGetItemText(YA%,sC%):
  3123. hA%,e%,H$:hA%=
  3124. shell_HeapBlockFetch(8):hA%!0=sC%:hA%!4=-1:
  3125. &45BC4,YA%,hA%
  3126. ,,e%:H$=$(e%!&C):
  3127. shell_HeapBlockReturn(hA%):=H$
  3128. shell_MenuGetItemHandle(YA%,sC%):
  3129. hA%,e%,h%:hA%=
  3130. shell_HeapBlockFetch(8):hA%!0=sC%:hA%!4=-1:
  3131. &45BC4,YA%,hA%
  3132. ,,e%:h%=e%!8:
  3133. shell_HeapBlockReturn(hA%):=h%
  3134. shell_MenuGetItemHeight(YA%):
  3135. &45BC7,YA%
  3136. m%:=m%!20
  3137. shell_MenuCalculateHeight(YA%):
  3138. dA%:dA%=
  3139. shell_MenuGetNrItems(YA%)*
  3140. shell_MenuGetItemHeight(YA%):=dA%+(
  3141. shell_MenuGetNrDotted(YA%)*24)
  3142. shell_MenuSortItems(m%,hA$,gG%,pC%,VE%):
  3143. WE%:WE%=
  3144. shell_MenuGetNrItems(m%)-1:_shell_MS_handle%=m%:
  3145. VE%>WE%
  3146. VE%=WE%
  3147. &406C0:
  3148. shell_QuickSort(hA$,"_shell_MS_swap",gG%,0,VE%):
  3149. &406C1:
  3150. shell_QuickSort(l$,r$,_asc%,_start%,_end%):
  3151. _lo%,_h%,_F%,_temp%,k%:_lo%=_start%:_hi%=_end%:_F%=
  3152. :_temp%=_lo%-1+
  3153. (_hi%+1-_lo%):k%=
  3154. ("FN"+r$+"(_lo%,_temp%)"):
  3155. _asc%=0
  3156. ("FN"+l$+"(_lo%,_hi%)")
  3157. ("FN"+r$+"(_lo%,_hi%)"):_F%=
  3158. ("FN"+l$+"(_hi%,_lo%)")
  3159. ("FN"+r$+"(_hi%,_lo%)"):_F%=
  3160. _hi%=_hi%-1
  3161. _lo%=_lo%+1
  3162. _lo%=_hi%:
  3163. _start%<_lo%-1
  3164. shell_QuickSort(l$,r$,_asc%,_start%,_lo%-1)
  3165. _hi%+1<_end%
  3166. shell_QuickSort(l$,r$,_asc%,_hi%+1,_end%)
  3167. _shell_MS_swap(WD%,XD%):
  3168. s$,t$,XF%,YF%:s$=
  3169. shell_MenuGetItemText(_shell_MS_handle%,WD%):t$=
  3170. shell_MenuGetItemText(_shell_MS_handle%,XD%):XF%=
  3171. shell_MenuGetItemHandle(_shell_MS_handle%,WD%):YF%=
  3172. shell_MenuGetItemHandle(_shell_MS_handle%,XD%)
  3173. shell_MenuPutData(XF%,t$):
  3174. shell_MenuPutData(YF%,s$):=0
  3175. _shell_MS_comp(WD%,XD%):
  3176. s$,t$:s$=
  3177. shell_MenuGetItemText(_shell_MS_handle%,WD%):t$=
  3178. shell_MenuGetItemText(_shell_MS_handle%,XD%):
  3179. shell_WindowSetTitleRightJust(
  3180. o%,cA%,h%,wB%:wB%=
  3181. shell_WindowIsOpen(b%):o%=
  3182. shell_HeapBlockFetch(&64+(
  3183. shell_WindowCountIcons(b%)*32)):!o%=b%:
  3184. &400CC,,o%:cA%=o%!60:
  3185. (1<<3))
  3186. shell_Tracef0("WindowSetTitleRightJust:title flags = &"+
  3187. ~cA%):
  3188. shell_Tracef0("WindowSetTitleRightJust:Horizontally centred bit set.."):
  3189. shell_Tracef0("WindowSetTitleRightJust:Unsetting horizontally centred bit.."):cA%=cA%
  3190. (1<<3)
  3191. shell_Tracef0("WindowSetTitleRightJust:title flags = &"+
  3192. ~cA%)
  3193. shell_Tracef0("WindowSetTitleRightJust:Horizontally centred bit NOT set..")
  3194. shell_Tracef0("WindowSetTitleRightJust:Setting right justified bit.."):cA%=cA%
  3195. (1<<9):o%!60=cA%:
  3196. &400C3,,o%:
  3197. &400C1,,o%+4
  3198. b%<>h%
  3199. shell_Tracef0("WindowSetTitleRightJust:Updating window handle..."):
  3200. shell_UpdateWindowHandle(b%,h%):b%=h%
  3201. shell_OpenWindow(h%,0,0)
  3202. shell_HeapBlockReturn(o%):
  3203. shell_WindowSetTitleCentreJust(
  3204. o%,cA%,h%,wB%:wB%=
  3205. shell_WindowIsOpen(b%):o%=
  3206. shell_HeapBlockFetch(&64+(
  3207. shell_WindowCountIcons(b%)*32)):!o%=b%:
  3208. &400CC,,o%:cA%=o%!60:
  3209. shell_Tracef0("WindowSetTitleCentreJust:title flags = &"+
  3210. ~cA%)
  3211. shell_Tracef0("WindowSetTitleCentreJust:t_flags% AND (1 << 3) = "+
  3212. ~(cA%
  3213. (1<<3))):
  3214. (1<<3))=0
  3215. shell_Tracef0("WindowSetTitleCentreJust:Horizontally centred bit not set.."):
  3216. shell_Tracef0("WindowSetTitleCentreJust:Setting horizontally centred bit.."):cA%=cA%
  3217. (1<<3):
  3218. shell_Tracef0("WindowSetTitleCentreJust:title flags = &"+
  3219. ~cA%):o%!60=cA%
  3220. &400C3,,o%:
  3221. &400C1,,o%+4
  3222. b%<>h%
  3223. shell_Tracef0("WindowSetTitleCentreJust:Updating window handle..."):
  3224. shell_UpdateWindowHandle(b%,h%):b%=h%
  3225. shell_OpenWindow(h%,0,0)
  3226. shell_HeapBlockReturn(o%):
  3227. shell_IconGetSelectedIcons(b%,sB%,
  3228. aF%:aF%=(sB%<<16)+(1<<21):
  3229. &400D6,b%,r%,aF%,(sB%<<16)+(1<<21):
  3230. shell_GetLastMouseButton:=_U%!320
  3231. shell_GetLastWindowClicked:=_U%!28
  3232. shell_GetLastIconClicked:=_U%!32
  3233. shell_IconIndirSize(HB%,l%,rC%,X%):
  3234. sA%,cF%,g%,aD%:
  3235. &800100)=256
  3236. "sA%=rC%!8:
  3237. (rC%!4<>-1)
  3238. AcF%=rC%!4:
  3239. #X%=HB%+cF%:g%=0:
  3240. :aD%=
  3241. #X%:g%+=1:
  3242. aD%<32:sA%+=+g%
  3243. sA%=0
  3244. :=sA%
  3245. shell_StrongHlpChkFiles(F$):
  3246. shell_FileExists(F$+".HelpData")
  3247. <uB%=-1:
  3248. shell_MessageOneArg("SHELLMSG32","HelpData")
  3249. shell_FileExists(F$+".Index")
  3250. 9uB%=-1:
  3251. shell_MessageOneArg("SHELLMSG32","Index")
  3252. shell_CaretMoveCaret(b%,EA%):
  3253. s%,eF%,g%,e%,jB%:g%=0:e%=0:s%=
  3254. shell_HeapBlockFetch(&800):
  3255. &400D3,,s%:
  3256. s%!4<>-1
  3257. <eF%=s%!4:
  3258. &400D6,b%,s%,&40E000,&E000:
  3259. s%!g%=eF%
  3260. e%=g%
  3261. g%+=4:
  3262. s%!g%=-1:
  3263. 0:jB%=!s%
  3264. 1:jB%=s%!(g%-4)
  3265. s%!(e%+4)<>-1
  3266. jB%=s%!(e%+4)
  3267. jB%=!s%
  3268. jB%=s%!(e%-4)
  3269. jB%=s%!(g%-4)
  3270. &400D2,b%,jB%,-1,-1,-1,
  3271. shell_IconGetData(b%,jB%)):
  3272. shell_IconEnsureVisible(b%,jB%)
  3273. shell_HeapBlockReturn(s%):
  3274. shell_CaretPutFirstIcon(b%):
  3275. s%:s%=
  3276. shell_HeapBlockFetch(&800):
  3277. &400D6,b%,s%,&40E000,&E000:
  3278. !s%<>-1
  3279. shell_CaretSetRight(b%,!s%):
  3280. shell_IconEnsureVisible(b%,!s%)
  3281. shell_HeapBlockReturn(s%):
  3282. shell_CaretPutLastIcon(b%):
  3283. shell_CaretMoveCaret(b%,1):
  3284. shell_CaretPutNextIcon(b%):
  3285. shell_CaretMoveCaret(b%,2):
  3286. shell_CaretPutPrevIcon(b%):
  3287. shell_CaretMoveCaret(b%,3):
  3288. shell_TemplateFileInfo(I$,
  3289. cC%:cC%=
  3290. RO3_Present:
  3291. shell_TemplateFileInfo3(I$,_A%,IA%,y%)
  3292. shell_TemplateFileInfo2(I$,_A%,IA%,y%)
  3293. shell_TemplateFileInfo2(I$,
  3294. GA%,RC%,lB%:
  3295. FA%,X%,bE%,GH%:
  3296. g%,aD%,cE%,qA%,uC%,l%:GA%=0:IA%=0:RC%=0:lB%=0:y%=0:
  3297. shell_FileExists(I$)
  3298. y%=-1
  3299. shell_FileType(I$)<>&FEC
  3300. y%=-2
  3301. :UFA%=
  3302. shell_HeapBlockFetch(&D):X%=
  3303. (I$):
  3304. #X%=16:
  3305. &C,4,X%,FA%,4:HB%=!FA%:
  3306. HB%>0
  3307. IA%+=1:dE%=0:
  3308. &C,4,X%,FA%,4:bE%=!FA%:
  3309. &C,4,X%,FA%,4:GH%=!FA%:
  3310. &C,4,X%,FA%,&C:cE%=
  3311. #X%=HB%+56:
  3312. &C,4,X%,FA%,4:l%=!FA%:
  3313. #X%=HB%+72:
  3314. &C,4,X%,FA%,&C:dE%+=
  3315. shell_IconIndirSize(HB%,l%,FA%,X%):
  3316. #X%=HB%+84:
  3317. &C,4,X%,FA%,4:qA%=!FA%:
  3318. qA%>0
  3319. uC%=0
  3320. qA%-1:
  3321. #X%=HB%+88+(uC%*32)+16:
  3322. &C,4,X%,FA%,4:l%=!FA%:
  3323. #X%=HB%+88+(uC%*32)+20:
  3324. &C,4,X%,FA%,&C:dE%+=
  3325. shell_IconIndirSize(HB%,l%,FA%,X%):
  3326. #X%=cE%:RC%+=dE%:
  3327. bE%>lB%
  3328. lB%=bE%
  3329. HB%=0:
  3330. shell_HeapBlockReturn(FA%):_A%=lB%+RC%
  3331. shell_TemplateFileInfo3(I$,
  3332. GA%,RC%,lB%,HB%:
  3333. g%,aD%,cE%,qA%,uC%,l%:GA%=0:IA%=0:RC%=0:lB%=0:FA%=
  3334. shell_HeapBlockFetch(&D):
  3335. &400D9,,I$:
  3336. :$FA%="*":
  3337. &400DB,,-1,,,,FA%,GA%
  3338. ,_A%,KH%,,,,GA%:
  3339. GA%<>0
  3340. _A%>lB%
  3341. lB%=_A%
  3342. RC%+=KH%:IA%+=1
  3343. GA%=0:
  3344. &400DA:_A%=lB%+RC%:
  3345. shell_HeapBlockReturn(FA%):
  3346. RO3_Present:
  3347. a%,GC%,M$:a%=
  3348. shell_HeapBlockFetch(256):
  3349. ("Set RO3$Check Y"):
  3350. ("RMEnsure UtilityModule 3.00 Set RO3$Check N"):
  3351. 35,"RO3$Check",a%,256,0,0
  3352. ,,GC%:a%?GC%=&D:
  3353. ("Unset RO3$Check"):M$=$a%:
  3354. shell_HeapBlockReturn(a%):
  3355. M$="N"
  3356. shell_WindowCountIcons(b%):
  3357. mB%,cC%,qA%:
  3358. (_U%!&64
  3359. 1<<&A)
  3360. shell_Tracef0("WindowCountIcons:RISC OS 3 detected.."):
  3361. b%=-1
  3362. b%=-2
  3363. ymB%=
  3364. shell_HeapBlockFetch(88):!mB%=b%:
  3365. &400CC,,mB%+1:qA%=mB%!88:
  3366. shell_Tracef0("WindowCountIcons:nr_icons% = "+
  3367. shell_Tracef0("WindowCountIcons:RISC OS 3 NOT found.."):mB%=
  3368. shell_HeapBlockFetch(6000):
  3369. $!mB%=b%:
  3370. &400CC,,mB%:qA%=mB%!88
  3371. shell_Tracef0("WindowCountIcons:nr_icons% = "+
  3372. shell_HeapBlockReturn(mB%):=qA%
  3373. shell_SliderGetValue(h%):=(_U%!332+h%)!28
  3374. shell_HandleSlider(b%,f%,wA%):
  3375. LA%,NA%,TA%,a%,n%:
  3376. shell_Tracef0("HandleSlider:slider drag event found.."):n%=_U%!332+wA%:LA%=
  3377. shell_HeapBlockFetch(50):LA%!0=b%:LA%!4=n%!8:
  3378. &400CE,,LA%:a%=_U%!328:a%!0=0:a%!4=LA%!16-LA%!8:a%!8=f%:a%!&C=n%!&C:a%!16=n%
  3379. a%!24=n%!24:LA%!0=b%:
  3380. &400CB,,LA%:NA%=LA%!4-LA%!20:TA%=LA%!16-LA%!24:LA%!4=f%:
  3381. &400CE,,LA%:LA%!4=7:LA%!8+=NA%:LA%!&C+=TA%:LA%!16+=NA%:LA%!20+=TA%:LA%!24=LA%!8:LA%!28=LA%!&C:LA%!32=LA%!24+a%!4:LA%!36=LA%!20:
  3382. &400D0,,LA%:
  3383. shell_HeapBlockReturn(LA%)
  3384. _U%!&64=_U%!&64
  3385. 1<<&B:
  3386. shell_Slider:
  3387. SB%,a%,eD%,vC%,b%,NA%,aA$,QB%,_value%,k%:SB%=
  3388. shell_HeapBlockFetch(20):QB%=_U%!328:
  3389. &400CF,,SB%:b%=SB%!&C:vC%=QB%!8:eD%=!SB%:
  3390. eD%<>!QB%
  3391. shell_HeapBlockFetch(50):!a%=b%:
  3392. &400CB,,a%:NA%=eD%-a%!4:a%!4=vC%:
  3393. &400CE,,a%:
  3394. &400C4,,a%:a%!4=b%:a%!16=NA%:
  3395. &400C2,,a%+4:
  3396. &400D1,b%,a%!8,a%!&C,a%!8+QB%!4,a%!20:_value%=
  3397. (((NA%-a%!8)*&64)/QB%!4):c%=QB%!16:c%!28=_value%:
  3398. QB%!24<>-1
  3399. ("FN"+$(QB%!24)+"(_value%)")
  3400. QB%!&C>=0
  3401. 7aA$=
  3402. (_value%):
  3403. shell_IconPutData(b%,QB%!&C,aA$,-1)
  3404. :!QB%=eD%:
  3405. shell_HeapBlockReturn(a%)
  3406. shell_HeapBlockReturn(SB%):
  3407. shell_GetEventListOffset2(b%,f%,i%,MB%,CD%):
  3408. p%,e%,j%,d%,NB%,c%:
  3409. (!i%=0
  3410. (!i%=0)
  3411. !E!i%=
  3412. shell_HeapBlockFetch(MB%+4):c%=!i%:c%!0=MB%:c%!4=0:c%!8=0:=4
  3413. :c%=!i%:p%=!c%:
  3414. shell_Tracef0("GetEventListOffset2:list size is "+
  3415. p%):e%=4:j%=
  3416. :d%=-1:NB%=-1:c%=!i%:
  3417. shell_Tracef0("GetEventListOffset2:window handle=&"+
  3418. ~c%!e%):
  3419. NB%<0
  3420. (c%!e%=0
  3421. c%!e%+4=0)
  3422. NB%=e%
  3423. (c%!e%=b%)
  3424. f%=-1
  3425. d%=e%:j%=
  3426. c%!(e%+4)=f%
  3427. d%=e%:j%=
  3428. e%+=MB%
  3429. e%+=MB%
  3430. ((e%>=(p%+4))
  3431. (d%=-1
  3432. NB%<0
  3433. [Ud%=p%+4:!i%=
  3434. shell_HeapBlockExtend(!i%,MB%):c%=!i%:c%!0+=MB%:c%+=d%:c%!4=0:c%!8=0
  3435. d%=NB%
  3436. shell_SliderSetValue(h%,_value%):
  3437. n%,vC%,a%,kF%,eE%,fE%,gD%:
  3438. mF%,nF%:n%=_U%!332+h%:vC%=n%!4:b%=n%!0:kF%=n%!8:fE%=n%!&C:a%=
  3439. shell_HeapBlockFetch(50):a%!0=b%:a%!4=kF%:
  3440. &400CE,,a%:eE%=a%!16:gD%=a%!8:mF%=a%!&C:nF%=a%!20:a%!4=vC%:
  3441. &400CE,,a%
  3442. &400C4,,a%:a%!4=b%:
  3443. _value%>&64
  3444. _value%=&64
  3445. _value%<=0
  3446. _value%=0:a%!16=a%!8
  3447. a%!16=gD%+(eE%*(_value%/&64))-(gD%*(_value%/&64))
  3448. :n%!28=_value%:
  3449. &400C2,,a%+4:
  3450. &400D1,b%,gD%,mF%,eE%,nF%:
  3451. n%!24<>-1
  3452. ("FN"+$(n%!24)+"(_value%)")
  3453. fE%>=0
  3454. shell_IconPutData(b%,fE%,
  3455. _value%,
  3456. shell_HeapBlockReturn(a%):
  3457. shell_AttachSliderHandler(b%,oF%,dC%,TC%,hD%,iE%,Q$):
  3458. n%,d%:d%=
  3459. shell_GetEventListOffset2(b%,dC%,_U%+332,32,
  3460. ):n%=_U%!332+d%:n%!0=b%:n%!4=dC%:n%!8=oF%:n%!&C=TC%:n%!16=hD%:n%!20=iE%:
  3461. Q$<>""
  3462. 2n%!24=
  3463. shell_HeapBlockFetch(
  3464. Q$+1):$(n%!24)=Q$
  3465. n%!24=-1
  3466. :n%!28=0:
  3467. _U%!328=0
  3468. _U%!328=
  3469. shell_HeapBlockFetch(24)
  3470. shell_AttachClickSelect(b%,dC%,"_shell_icondrag"):
  3471. shell_AttachClickSelect(b%,oF%,"_shell_icondrag2"):
  3472. hD%>=0
  3473. shell_AttachClickSelect(b%,hD%,"_shell_sliderbumpupS"):
  3474. shell_AttachClickSelect(b%,iE%,"_shell_sliderbumpdownS"):
  3475. shell_AttachClickAdjust(b%,hD%,"_shell_sliderbumpdownA"):
  3476. shell_AttachClickAdjust(b%,iE%,"_shell_sliderbumpupA")
  3477. _shell_icondrag(b%,f%):
  3478. shell_IconDragBox(b%,f%):=0
  3479. _shell_icondrag2(b%,f%):
  3480. RB%,n%,iA%,j%,dC%:n%=_U%!332:RB%=!n%:iA%=4:
  3481. shell_Tracef0("Event block size is "+
  3482. RB%):
  3483. n%!(iA%+8)=f%
  3484. :dC%=n%!(iA%+4)
  3485. :iA%+=32:
  3486. iA%>=RB%
  3487. shell_IconDragBox(b%,dC%):=0
  3488. _shell_sliderbumpupS(b%,f%):
  3489. k%:k%=
  3490. _shell_sliderbumpup(b%,f%,4):=0
  3491. _shell_sliderbumpupA(b%,f%):
  3492. k%:k%=
  3493. _shell_sliderbumpup(b%,f%,1):=0
  3494. _shell_sliderbumpdownS(b%,f%):
  3495. k%:k%=
  3496. _shell_sliderbumpdown(b%,f%,4):=0
  3497. _shell_sliderbumpdownA(b%,f%):
  3498. k%:k%=
  3499. _shell_sliderbumpdown(b%,f%,1):=0
  3500. _shell_sliderbumpup(b%,f%,vB%):
  3501. RB%,n%,iA%,j%,e%,_value%,UC%:
  3502. shell_Tracef0("In sliderbumpup routine"):n%=_U%!332:RB%=!n%:iA%=4:
  3503. shell_Tracef0("Event block size is "+
  3504. RB%):
  3505. vB%=4
  3506. UC%=16
  3507. UC%=20
  3508. n%!(iA%+UC%)=f%
  3509. :e%=iA%:_value%=n%!(e%+28):
  3510. shell_Tracef0("Current slider value = "+
  3511. _value%):
  3512. shell_Tracef0("Slider handle is     = "+
  3513. :iA%+=32:
  3514. iA%>=RB%
  3515. shell_SliderSetValue(e%,_value%+1)
  3516. _shell_sliderbumpdown(b%,f%,vB%):
  3517. RB%,n%,iA%,j%,e%,_value%,UC%:
  3518. shell_Tracef0("In sliderbumpdown routine"):n%=_U%!332:RB%=!n%:iA%=4:
  3519. shell_Tracef0("Event block size is "+
  3520. RB%):
  3521. vB%=4
  3522. UC%=20
  3523. UC%=16
  3524. n%!(iA%+UC%)=f%
  3525. :e%=iA%:_value%=n%!(e%+28):
  3526. shell_Tracef0("Current slider value = "+
  3527. _value%):
  3528. shell_Tracef0("Slider handle is     = "+
  3529. :iA%+=32:
  3530. iA%>=RB%
  3531. shell_SliderSetValue(e%,_value%-1)
  3532. shell_DeleteEventSlider(b%,f%):
  3533. d%,a%,p%,i%,c%,rF%:i%=_U%!332:
  3534. shell_GetEventListOffset2(b%,f%,_U%+332,32,
  3535. shell_Tracef0("DeleteEventSlider:offset% = "+
  3536. d%>=0
  3537. f%=-1
  3538. shell_Tracef0("DeleteEventSlider:Deleting Slider Event (all events for window handle &"+
  3539. ~b%+")")
  3540. shell_Tracef0("DeleteEventSlider:Deleting Slider Event (window handle was &"+
  3541. ~b%+" icon handle was "+
  3542. f%+")")
  3543. :p%=!i%:
  3544. d%=p%-32
  3545. shell_HeapBlockReturn(i%+d%+24):
  3546. shell_HeapBlockReturn(_U%!332):_U%!332=0:
  3547. shell_Tracef0("DeleteEventSlider:No Slider events now registered")
  3548. _U%!332=
  3549. shell_HeapBlockExtend(_U%!332,-32):i%=_U%!332:!i%-=32
  3550. a%=i%+d%:a%!0=0:a%!4=0:rF%=a%+24:
  3551. shell_HeapBlockReturn(rF%)
  3552. d%<0:
  3553. shell_OpenWindowDynamic(mA$,PA$,QA$):
  3554. u%,pA%,rA%,q%:
  3555. shell_CreateWindow(mA$,u%):
  3556. shell_Tracef0("OpenWindowDynamic:Creating new dynamic window (handle is &"+
  3557. ~u%+")"):q%=
  3558. shell_HeapBlockFetch(36):q%!0=u%:
  3559. &400CB,,q%:pA%=(q%!4-q%!&C)/2
  3560. y=rA%=(q%!16-q%!8)/2:
  3561. shell_HeapBlockReturn(q%):
  3562. _U%!20<>0
  3563. &400D4,,-1:k%=
  3564. shell_DeleteWindow(_U%!20)
  3565. :_U%!20=b%:
  3566. PA$<>""
  3567. shell_Tracef0("OpenWindowDynamic:Calling Pre-Open FN '"+PA$+"'"):k%=
  3568. ("FN"+PA$+"("+
  3569. u%+")")
  3570. shell_Tracef0("OpenWindowDynamic:No Pre-Open FN")
  3571. shell_OpenWindowDynamic2(u%,pA%,rA%):
  3572. QA$<>""
  3573. shell_Tracef0("OpenWindowDynamic:Calling Post-Open FN '"+QA$+"'"):k%=
  3574. ("FN"+QA$+"("+
  3575. u%+")")
  3576. shell_Tracef0("OpenWindowDynamic:No Post-Open FN")
  3577. shell_InteractiveHelpOn:
  3578. (_U%!&64
  3579. 1<<&C)<>0
  3580. _U%!&64=_U%!&64
  3581. 1<<&C
  3582. shell_InteractiveHelpOff:
  3583. (_U%!&64
  3584. 1<<&C)<>0
  3585. _U%!&64=_U%!&64
  3586. 1<<&C
  3587. shell_MessageSendPrintSave(kE%,tF%):
  3588. tF%>1
  3589. _U%!336=tF%-1
  3590. _U%!336=0
  3591. shell_DoSendPrintSave(kE%):
  3592. shell_DoSendPrintSave(kE%):
  3593. HA%:HA%=
  3594. shell_HeapBlockFetch(256):HA%!0=256:HA%!&C=0:HA%!16=&80142:HA%!20=0:HA%!24=0:HA%!28=0:HA%!32=0:HA%!36=256:HA%!40=kE%:$(HA%+44)="PrintOut"+
  3595. shell_Tracef0("MessageSendPrintSave:Sending PrintSave message..")
  3596. &400E7,18,HA%,HA%!20,HA%!24:
  3597. shell_HeapBlockReturn(HA%):
  3598. shell_HandlePrintFile(_Q%):
  3599. shell_Tracef0("HandlePrintFile:Message_PrintFile received"):
  3600. shell_HandlePrintError(_Q%):
  3601. shell_Tracef0("HandlePrintError:Message_PrintError received"):
  3602. shell_HandlePrintTypeOdd(_Q%):
  3603. shell_Tracef0("HandlePrintTypeOdd:Message_PrintTypeOdd received"):
  3604. shell_HandleSetPrinter(_Q%):
  3605. shell_Tracef0("HandleSetPrinter:Message_SetPrinter received"):
  3606. shell_PrinterDriverLoaded:
  3607. &A0140
  3608. ;yB%:
  3609. shell_PrinterDriverGetName:
  3610. yB%,uF%:
  3611. &A0140
  3612. ,,,,uF%;yB%:
  3613. shell_GetString(uF%)
  3614. shell_IconGetBGColour(b%,f%):
  3615. yA%,t%:t%=
  3616. shell_HeapBlockFetch(40):t%!0=b%:t%!4=f%:
  3617. &400CE,,t%:yA%=(t%!24>>28)
  3618. shell_HeapBlockReturn(t%):=yA%
  3619. shell_IconGetFGColour(b%,f%):
  3620. yA%,t%:t%=
  3621. shell_HeapBlockFetch(40):t%!0=b%:t%!4=f%:
  3622. &400CE,,t%:yA%=(t%!24>>24)
  3623. shell_HeapBlockReturn(t%):=yA%
  3624. shell_AttachPopupMenu(b%,zB%,TC%,m%,Q$):
  3625. shell_DoAttachPopupHandler(b%,zB%,TC%,m%,Q$,0):
  3626. shell_AttachColourPopupMenu(b%,zB%,TC%,m%,Q$):
  3627. shell_DoAttachPopupHandler(b%,zB%,TC%,m%,Q$,1):
  3628. shell_DoAttachPopupHandler(b%,zB%,TC%,m%,Q$,SC%):
  3629. n%,d%:d%=
  3630. shell_GetEventListOffset2(b%,zB%,_U%+340,24,
  3631. ):n%=_U%!340+d%:n%!0=b%:n%!4=zB%:n%!8=TC%:
  3632. Q$<>""
  3633. B2n%!&C=
  3634. shell_HeapBlockFetch(
  3635. Q$+1):$(n%!&C)=Q$
  3636. n%!&C=-1
  3637. :n%!16=SC%:n%!20=m%:
  3638. zB%>=0
  3639. shell_IconSetButtonType(b%,zB%,3)
  3640. shell_DoPopupSelect(_Q%,d%):
  3641. n%,Q$,_item_text$,y%,zC%:
  3642. v%,lE%,mE%:n%=_U%!340+d%:v%=!n%:zC%=n%!8:nE%=n%!&C:lE%=n%!16:YA%=n%!20:mE%=!_Q%:_item_text$=
  3643. shell_MenuGetItemText(YA%,mE%):y%=0:
  3644. nE%<>-1
  3645. s<Q$=$(nE%):y%=
  3646. ("FN"+Q$+"("+
  3647. v%+","+
  3648. zC%+",_item_text$)")
  3649. y%<>0
  3650. nE%=-1
  3651. zC%>=0
  3652. _POPUP_TYPE_TEXT:
  3653. shell_IconPutData(v%,zC%,_item_text$,
  3654. _POPUP_TYPE_WIMPCOLOUR:
  3655. shell_IconSetBGColour(v%,zC%,mE%)
  3656. 99,"Unknown Popup type in DoPopupSelect (type was "+
  3657. lE%+")"
  3658. shell_3DEnabled:
  3659. xF%,_3d%:
  3660. _U%!&64
  3661. (1<<&A)
  3662. 6,&A1,&8C
  3663. ,,xF%:
  3664. _3d%=
  3665. _3d%=
  3666. _3d%=
  3667. :=_3d%
  3668. shell_MenuDelete(h%,nG%):
  3669. e%,p%,i%:
  3670. h%<>0
  3671. &65BC3,h%,nG%:p%=
  3672. shell_HeapBlockInfo(_U%!&C)-8:i%=_U%!&C:
  3673. (i%!(e%+8)=h%)
  3674. i%!(e%+8)=0
  3675. e%+=48
  3676. (e%>=p%)
  3677. shell_HandleAttachedDataSave(_Q%,b%,f%):
  3678. wA%,a%,HC%,_name$,c%,k%:
  3679. shell_DataSaveCheckName(b%,f%):wA%=
  3680. shell_GetEventListOffset(b%,-1,_U%+72,24,
  3681. wA%>=0
  3682. ia%=_U%!72+wA%:HC%=a%!16:_name$=
  3683. shell_IconGetData(b%,HC%):c%=a%!20:
  3684. $c%<>""
  3685. ("FN"+$c%+"(_name$)")
  3686. shell_WindowMoveToPopUpPos(v%,bA%,yF%):
  3687. DA%,AB%,_F%,AG%,BG%,CG%:
  3688. DG%:DA%=
  3689. shell_HeapBlockFetch(40):DA%!0=v%:DA%!4=bA%:
  3690. &400CE,,DA%:_F%=DA%!16:AG%=DA%!20:AB%=
  3691. shell_HeapBlockFetch(40):AB%!0=v%:
  3692. &400CB,,AB%:BG%=AB%!4:CG%=AB%!16:AB%!0=yF%
  3693. &400CB,,AB%:DG%=AB%!16-AB%!8:
  3694. shell_WindowMoveTo(yF%,BG%+_F%,CG%+AG%-(DG%/2)):
  3695. shell_HeapBlockReturn(DA%):
  3696. shell_HeapBlockReturn(AB%):
  3697. shell_WindowScrollTo(v%,jC%,kC%):
  3698. ZA%:ZA%=
  3699. shell_HeapBlockFetch(36):!ZA%=v%:
  3700. &400CB,,ZA%:ZA%!20=jC%:ZA%!24=kC%:
  3701. shell_WindowIsOpen(v%)
  3702. &400C5,,ZA%
  3703. &400C5,,ZA%:
  3704. &400C6,,ZA%
  3705. shell_HeapBlockReturn(ZA%):
  3706. shell_WindowScrollBy(v%,jC%,kC%):
  3707. ZA%:ZA%=
  3708. shell_HeapBlockFetch(36):!ZA%=v%:
  3709. &400CB,,ZA%:ZA%!20+=jC%:ZA%!24+=kC%:
  3710. shell_WindowIsOpen(v%)
  3711. &400C5,,ZA%
  3712. &400C5,,ZA%:
  3713. &400C6,,ZA%
  3714. shell_HeapBlockReturn(ZA%):
  3715. shell_WindowSetBackgroundColour(
  3716. u%,oE%):
  3717. o%,h%,FG%,KB%,qA%:qA%=
  3718. shell_WindowCountIcons(u%):FG%=
  3719. shell_WindowIsOpen(u%):o%=
  3720. shell_HeapBlockFetch(&64+(qA%*32)):o%!0=u%:
  3721. &400CC,,o%:o%?39=oE%:_shell_open_behind%=o%!28:KB%=o%!28:
  3722. &400C3,,o%
  3723. &400C1,,o%+4
  3724. h%:o%!0=h%:
  3725. &400CC,,o%:
  3726. u%<>h%
  3727. shell_UpdateWindowHandle(u%,h%):u%=h%
  3728. shell_OpenWindow(h%,0,KB%)
  3729. shell_HeapBlockReturn(o%):
  3730. shell_WindowSetForegroundColour(
  3731. u%,oE%):
  3732. o%,h%,wB%,KB%:wB%=
  3733. shell_WindowIsOpen(b%):o%=
  3734. shell_HeapBlockFetch(&64+(
  3735. shell_WindowCountIcons(u%)*32)):o%!0=u%:
  3736. &400CC,,o%:o%?38=oE%:_shell_open_behind%=o%!28:KB%=o%!28:
  3737. &400C3,,o%:
  3738. &400C1,,o%+4
  3739. u%<>h%
  3740. shell_Tracef0("WindowSetForegroundColour:Updating window handle..."):
  3741. shell_UpdateWindowHandle(u%,h%):u%=h%
  3742. shell_OpenWindow(h%,0,KB%)
  3743. shell_HeapBlockReturn(o%):
  3744. shell_InstallLib(V$):
  3745. kD%:kD%=
  3746. (V$):
  3747. kD%=0
  3748. #kD%:
  3749. 1,"Unable to install "+V$
  3750. #kD%:
  3751. V$:V$=
  3752. V$,&A):
  3753. V$,"."):V$=
  3754. V$,".")+1):
  3755. ("FN_shell_"+V$+"Init")
  3756. shell_TemplatesInit(m$,
  3757. xG%):
  3758. _C%,pE%,GG%,_A%:
  3759. HG%,GA%,mD%,R$,IA%,yB%,y%:
  3760. IG%,AD%:mD%=
  3761. shell_HeapBlockFetch(&C):GA%=0:IA%=0:HG%=
  3762. shell_FileLength(m$):DH%=
  3763. shell_HeapBlockFetch(HG%):_C%=DH%:
  3764. shell_TemplateFileInfo(m$,_A%,IA%,y%):
  3765. shell_HeapBlockFetch(4+(20*IA%)):_U%!4=BD%:JG%=
  3766. shell_HeapBlockFetch(_A%):pE%=JG%:GG%=JG%+_A%:IA%=0:AD%=4:
  3767. &600D9,,m$
  3768. ;yB%:
  3769. shell_MessageTwoArgs("SHELLMSG34","template",m$)
  3770. :$mD%="*":
  3771. &400DB,,_C%,pE%,GG%,_U%!&E8,mD%,GA%
  3772. ,,pE%,,,R$,GA%:
  3773. GA%<>0
  3774. BD%!AD%=_C%:$(BD%+AD%+4)=R$:BD%!(AD%+16)=-1:AD%+=20:
  3775. shell_Tracef0("TemplatesInit:  Template Loaded: "+R$):IG%=(_C%!84)*32:_C%+=(88+IG%):IA%+=1
  3776. GA%=0:
  3777. &400DA:_U%!0=IA%
  3778. shell_MessageTwoArgs("SHELLMSG35","template",m$)
  3779. shell_MessageTwoArgs("SHELLMSG36",m$,"template")
  3780. shell_HeapBlockReturn(mD%):xG%=0:!BD%=IA%:
  3781. shell_WindowLoaded(N$):
  3782. d%,rE%:d%=
  3783. shell_GetWindowListOffset(N$):
  3784. d%>=0
  3785. shell_GetWindowListOffset(N$):
  3786. d%,IA%,BB%,g%:
  3787. (N$)>&B
  3788. shell_MessageOneArg("SHELLMSG02",N$)
  3789. iIA%=
  3790. shell_GetNrTemplatesLoaded:BB%=
  3791. shell_WindowListGetAddr+4:g%=0:d%=-1:
  3792. $(((BB%)+(20*g%))+4)=N$
  3793. d%=g%*20
  3794. :g%+=1:
  3795. d%<>-1
  3796. g%>(IA%-1):=d%
  3797. shell_GetWB(N$):
  3798. d%,AB%,BB%:d%=
  3799. shell_GetWindowListOffset(N$):BB%=
  3800. shell_WindowListGetAddr+4:
  3801. d%>=0
  3802. AB%=BB%!d%
  3803. shell_MessageOneArg("SHELLMSG03",N$)
  3804. :=AB%
  3805. shell_GetWindowHandleList(N$):
  3806. d%,mA%,BB%:d%=
  3807. shell_GetWindowListOffset(N$):BB%=
  3808. shell_WindowListGetAddr+4:
  3809. d%>=0
  3810. mA%=!(BB%+d%+16)
  3811. shell_MessageOneArg("SHELLMSG03",N$)
  3812. :=mA%
  3813. shell_CreateWindowStatic(N$,
  3814. OC%:OC%=
  3815. shell_GetWB(N$):OC%!64=_U%!16:
  3816. &400C1,,OC%
  3817. shell_StaticWindowListAddHandle(v%):
  3818. shell_WindowListAddHandle(v%):
  3819. shell_WindowListAddHandle(v%):
  3820. NG%,JA%,e%:
  3821. BB%:NG%=
  3822. shell_GetWindowListOffset(N$)+16:JA%=
  3823. shell_WindowListGetAddr+4+NG%:
  3824. !JA%=-1
  3825.  %9!JA%=
  3826. shell_HeapBlockFetch(8):e%=!JA%:e%!0=v%:e%!4=-1
  3827. shell_Tracef0("DEBUG::Extending window handle list for window '"+N$+"'"):
  3828. shell_Tracef0("DEBUG::Window handle is &"+
  3829. v%):!JA%=
  3830. shell_HeapBlockExtend(!JA%,4):BB%=!JA%:e%=0:
  3831. BB%!e%<>-1:e%+=4:
  3832. :BB%!(e%+0)=v%:BB%!(e%+4)=-1
  3833. shell_GetWindowIdentifier(h%):
  3834. JA%,IA%,e%,g%,n$:IA%=
  3835. shell_GetNrTemplatesLoaded:JA%=
  3836. shell_WindowListGetAddr+4:n$="":
  3837. -1,-2:n$="iconbar"
  3838. JA%!16<>-1
  3839.  K7mA%=JA%!16:e%=0:
  3840. mA%!e%<>-1:
  3841. mA%!e%=h%
  3842. n$=$(JA%+4)
  3843. e%+=4:
  3844. :g%+=1:JA%+=20:
  3845. n$<>""
  3846. g%=IA%
  3847. n$=""
  3848. shell_MessageOneArg("SHELLMSG38",
  3849. shell_RemoveHandleFromWindowList(h%):
  3850. JA%,IA%,I%,e%:IA%=
  3851. shell_GetNrTemplatesLoaded:JA%=
  3852. shell_WindowListGetAddr+4:
  3853. JA%!16<>-1
  3854.  e4mA%=JA%!16:e%=0:
  3855. mA%!e%<>-1:
  3856. mA%!e%=h%
  3857. mA%!e%=0
  3858. e%+=4:
  3859. :JA%+=20:
  3860. shell_UpdateWindowHandleList(WA%,OA%):
  3861. JA%,IA%,I%,e%:IA%=
  3862. shell_GetNrTemplatesLoaded:JA%=
  3863. shell_WindowListGetAddr+4:
  3864. JA%!16<>-1
  3865.  z7mA%=JA%!16:e%=0:
  3866. mA%!e%<>-1:
  3867. mA%!e%=WA%
  3868. mA%!e%=OA%
  3869. e%+=4:
  3870. :JA%+=20:
  3871. shell_GetNrTemplatesLoaded:
  3872. JA%:JA%=
  3873. shell_WindowListGetAddr:=!JA%
  3874. shell_WindowListGetAddr:=_U%!4
  3875. shell_WindowListPrint:
  3876. JA%,IA%,I%,e%:IA%=
  3877. shell_GetNrTemplatesLoaded:
  3878. shell_TraceOn:JA%=
  3879. shell_WindowListGetAddr+4:
  3880. shell_Tracef0(""):
  3881. shell_Tracef0("Current Window List ("+
  3882. (IA%)+" templates)")
  3883. shell_Tracef0("-----------------------------------------"):
  3884. shell_Tracef0($(JA%+4)+":"):
  3885. JA%!16=-1
  3886. shell_Tracef0("No windows defined for this identifier")
  3887. mA%=JA%!16:e%=0:
  3888. mA%!e%<>-1:
  3889. shell_Tracef0("  window handle &"+
  3890. ~(mA%!e%)):e%+=4:
  3891. :JA%+=20:
  3892. shell_Tracef0(""):
  3893. shell_TraceOff:
  3894. _shell_StaticList_Init:jA%=0:=0
  3895. shell_StaticWindowListAddHandle(h%):
  3896. d%,g%,c%:
  3897. jA%=0
  3898. shell_Tracef0("StaticWindowListAddHandle:Creating new list"):
  3899. shell_Tracef0("StaticWindowListAddHandle:Window handle is &"+
  3900. ~h%):jA%=
  3901. shell_HeapBlockFetch(8):jA%!0=h%:jA%!4=-1
  3902. shell_Tracef0("StaticWindowListAddHandle:Searching for window handle &"+
  3903. ~h%):d%=
  3904. shell_SearchStatic(h%):
  3905. d%=-1
  3906. shell_Tracef0("StaticWindowListAddHandle:Not found - adding window handle to list"):
  3907. shell_Tracef0("StaticWindowListAddHandle:Window handle is &"+
  3908. ~h%):d%=
  3909. shell_SearchStatic(0):
  3910. d%=-1
  3911. shell_Tracef0("StaticWindowListAddHandle:Extending window handle list"):g%=0:
  3912. jA%!g%<>-1:g%+=4:
  3913. :jA%=
  3914. shell_HeapBlockExtend(jA%,4):c%=jA%+g%:c%!0=h%:c%!4=-1
  3915. shell_Tracef0("StaticWindowListAddHandle:Found unused space in list"):c%=jA%+d%:c%!0=h%
  3916. shell_RemoveStaticWindowFromList(v%):
  3917. d%,g%,j%:j%=
  3918. :g%=0:
  3919. jA%>0
  3920. jA%!g%=v%
  3921. :jA%!g%=0
  3922. :g%+=4:
  3923. jA%!g%<>-1
  3924. shell_UpdateStaticWindowHandle(WA%,OA%):
  3925. shell_Tracef0("UpdateStaticWindowHandle:Correcting static window list.."):d%=
  3926. shell_SearchStatic(WA%):jA%!d%=OA%:
  3927. shell_SearchStatic(h%):
  3928. j%,g%:j%=-1:g%=0:
  3929. jA%<>0
  3930. jA%!g%<>-1:
  3931. jA%!g%=h%
  3932. j%=g%:=j%
  3933. :g%+=4:
  3934. shell_IsWindowStatic(v%):
  3935. -1,-2:y%=
  3936. _U%!20:y%=
  3937. shell_SearchStatic(v%)>-1
  3938. shell_SpriteExists(OG%,U$):
  3939. OG%=1
  3940. vE%=40
  3941. vE%=256+40
  3942. 46,vE%,OG%,
  3943. shell_StringLowerCase(U$):=
  3944. shell_SpriteExists
  3945. shell_SpriteExistsInUserArea(U$):=
  3946. shell_SpriteExists(
  3947. shell_UserSpritesBase,U$):|*O
  3948. shell_SpriteExistsInUserArea
  3949. shell_SpriteExistsInWimpPool(U$):=
  3950. shell_SpriteExists(1,U$):|*O
  3951. shell_SpriteExistsInWimpPool
  3952. shell_IconEnsureVisible(v%,bA%):
  3953. aB%,oB%,RG%:
  3954. SG%,TG%,UG%:
  3955. wE%,xE%,yE%,zE%:
  3956. _E%,AF%:
  3957. ZG%,aG%:
  3958. BF%,CF%:
  3959. DF%,EF%:
  3960. bA%>=0
  3961. shell_HeapBlockFetch(36):oB%=
  3962. shell_HeapBlockFetch(40):!aB%=v%:
  3963. &400CB,,aB%:RG%=aB%!4:SG%=aB%!8:TG%=aB%!&C:UG%=aB%!16:_E%=aB%!20:AF%=aB%!24:aG%=TG%-RG%:ZG%=UG%-SG%:oB%!0=v%:oB%!4=bA%:
  3964. &400CE,,oB%:wE%=oB%!8:xE%=oB%!&C:yE%=oB%!16:zE%=oB%!20
  3965. 5BF%=_E%:EF%=AF%:DF%=_E%+aG%:CF%=AF%-ZG%:
  3966. xE%<CF%
  3967. shell_WindowScrollBy(v%,0,xE%-CF%)
  3968. zE%>EF%
  3969. shell_WindowScrollBy(v%,0,zE%-EF%)
  3970. yE%>DF%
  3971. shell_WindowScrollBy(v%,yE%-DF%,0)
  3972. wE%<BF%
  3973. shell_WindowScrollBy(v%,wE%-BF%,0)
  3974. shell_HeapBlockReturn(aB%):
  3975. shell_HeapBlockReturn(oB%)
  3976.