home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / education / quote3 / !Quote3 / ShellLibRT (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-05-29  |  98KB  |  3,555 lines

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