home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / education / monkeys / !Monkeys+ / ShellLibRT (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-01-23  |  84KB  |  3,083 lines

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