home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / program / d / eventshell / !ShellSys / ShellLibRT (.txt) < prev   
Encoding:
RISC OS BBC BASIC V Source  |  1993-12-07  |  80.7 KB  |  3,017 lines

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