home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / education / b / monarchs / !Monarchs / ShellLibRT (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1995-02-05  |  107KB  |  3,859 lines

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