home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 1
/
ARM_CLUB_CD.iso
/
contents
/
apps
/
program
/
d
/
eventshell
/
!ShellSys
/
ShellLibRT
(
.txt
)
< prev
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
RISC OS BBC BASIC V Source
|
1993-12-07
|
80.7 KB
|
3,017 lines
>EvntShellSystem:ShellLib
Squished by Lofty's !Shrink vsn 3.01 on 07-Dec-93
shell_LibraryVersion:=1.27*&64
shell_Error:
CA%,SA$:
<>&D00
<>&903
&606C2:
shell_OSCheckVersion(3)
shell_FileExists("Resources:$.Resources.Edit.ThrowBack")
shell_Exit:
("Set Basic$File <"+
shell_GetAppName+"$BasicFile>"):
"Edit:ThrowBack"
shell_ErrorBox("Unexpected error:- "+
$+" Internal error code "+
$,"in "+
34+"EvntShellSystem:ShellLib"):
CA%>0
$,CA%-1)
shell_ErrorBox(SA$)
&606C2:
shell_OK(WA$):
&D00,WA$
shell_ErrorBox(fA$):
BB%,kA%:kA%=_shell_blk%:!kA%=
:$(kA%+4)=fA$+
=&D00
=&903
&600DF,kA%,17,"Message from "+
shell_GetAppName
&600DF,kA%,1,
shell_GetAppName
shell_GetLastSecureFileName:
c%:c%=_U%!80:
shell_GetString(BE%):
KA$,RC%:
((BE%?RC%)>31
RC%<&FF):KA$+=
(BE%?RC%):RC%+=1:
:=KA$
shell_GetEventHandler(b%,u%,fB%):
f%,i%,m%,q%,A$:
b%=-1
b%=-2
WNq%=
shell_HeapBlockInfo(_U%!&C)-8:f%=0:m%=
:i%=_U%!&C:A$="":
(i%!f%=b%)
i%!(f%+4)
i%!(f%+(&C+(fB%*4)))>&8000
e#A$=$(i%!(f%+(&C+(fB%*4)))):m%=
f%+=48
i%!(f%+4)=u%
i%!(f%+(&C+(fB%*4)))>&8000
r#A$=$(i%!(f%+(&C+(fB%*4)))):m%=
f%+=48
f%+=48
f%+=48
((f%>=q%)
m%):=A$
shell_GetEventMenu(QC%,b%,u%):
f%,i%,m%,q%,k%:
b%=-1
b%=-2
shell_HeapBlockInfo(_U%!&C)-8:f%=0:m%=
:i%=_U%!&C:A$="":
(i%!f%=b%)
shell_Tracef0("GetEventMenu:window handle matched.."):
i%!(f%+4)=u%
"k%=i%!(f%+8):
k%=-2
k%=_U%!&FC
:f%+=48:
(f%>=q%
m%):=k%
shell_GetEventListOffset(b%,g%,i%,SC%,AE%):
q%,f%,m%,d%,lB%,c%:
(!i%=0
(!i%=0)
:!i%=
shell_HeapBlockFetch(SC%):c%=!i%:c%!0=0:c%!4=0:=0
shell_HeapBlockInfo(!i%)-8:f%=0:m%=
:d%=-1:lB%=-1:c%=!i%:
lB%<0
(c%!f%=0
c%!f%+4=0)
lB%=f%
(c%!f%=b%)
g%=-1
d%=f%:m%=
shell_Tracef0("GetEventListOffset:icon handle is not -1"):
c%!(f%+4)=g%
d%=f%:m%=
f%+=SC%
f%+=SC%
((f%>=q%)
(d%=-1
lB%<0
Id%=q%:!i%=
shell_HeapBlockExtend(!i%,SC%):c%=!i%:c%+=d%:c%!0=0:c%!4=0
d%=lB%
shell_AttachPane(b%,
XC%,j%,qA%,sA%):
a%,d%,c%,xA%,BD%:
shell_Tracef0("AttachPane:Attaching Pane Handler"):BD%=
shell_WindowGetFlags(XC%):
1<<5)=0
shell_Tracef0("AttachPane:'Pane' bit of pane window is not set, fixing.."):
shell_WindowToggleFlags(XC%,1<<5)
1<<1)
shell_Tracef0("AttachPane:'Moveable' bit of pane window is set, fixing.."):
shell_WindowToggleFlags(XC%,1<<1)
shell_GetEventListOffset(b%,-1,_U%+92,24,
shell_Tracef0("AttachPane:Creating pane event block"):d%=
shell_GetEventListOffset(b%,-1,_U%+92,24,
):a%=_U%!92+d%:a%!0=b%:a%!4=-1:a%!8=
shell_HeapBlockFetch(4):a%!&C=
shell_HeapBlockFetch(4):a%!16=
shell_HeapBlockFetch(4)
aa%!20=
shell_HeapBlockFetch(4):c%=a%!8:!c%=-1:c%=a%!&C:!c%=-1:c%=a%!16:!c%=-1:c%=a%!20:!c%=-1
:a%=_U%!92+d%:c%=a%!8:e%=0:xA%=0:
c%!e%<>-1:e%+=4:xA%+=1:
:a%!8=
shell_HeapBlockExtend(a%!8,4):c%=a%!8:c%!(xA%*4)=XC%:c%!((xA%+1)*4)=-1:a%!&C=
shell_HeapBlockExtend(a%!&C,4):c%=a%!&C:c%!(xA%*4)=j%:c%!((xA%+1)*4)=-1
a%!16=
shell_HeapBlockExtend(a%!16,4):c%=a%!16:c%!(xA%*4)=qA%:c%!((xA%+1)*4)=-1:a%!20=
shell_HeapBlockExtend(a%!20,4):c%=a%!20:c%!(xA%*4)=sA%:c%!((xA%+1)*4)=-1:
shell_AttachDataLoad(b%,g%,w%,A$,HF%):
a%,c%,d%,P$:
shell_Tracef0("AttachDataLoad:Attaching DataLoad Handler"):
b%=-1
b%=-2
w%=w%
1<<31
/Pd%=
shell_GetEventListOffset(b%,g%,_U%+96,16,
):a%=_U%!96+d%:
a%!0=0
a%!4=0
shell_Tracef0("AttachDataLoad:This is the first DataLoad Event..."):a%!0=b%:a%!4=g%:a%!8=
shell_HeapBlockFetch(8):c%=a%!8:c%!0=w%:c%!4=-1:a%!&C=
shell_HeapBlockFetch(8):c%=a%!&C:c%!0=
shell_HeapBlockFetch(
(A$)+1):c%!4=-1:c%=c%!0:$c%=A$
shell_Tracef0("AttachDataLoad:This is another DataLoad Event..."):a%!8=
shell_HeapBlockExtend(a%!8,4):a%!&C=
shell_HeapBlockExtend(a%!&C,4):e%=0:c%=a%!8:
c%!e%<>-1:e%+=4:
:c%!e%=w%:c%!(e%+4)=-1:c%=a%!&C:c%!e%=
shell_HeapBlockFetch(
A$+1)
c%=c%!e%:$c%=A$
shell_GetCmdLineArgs:
P$<>""
(_U%!&64
1<<5)
1<<31
c%=w%
1<<31
c%=w%
shell_FileType(P$)=c%
shell_MessageSendDataLoad(c%,P$):_U%!&64=_U%!&64
(1<<5)
shell_AttachDataSave(b%,g%,_A%,w%,LC%,A$):
a%,c%,d%:
shell_IconIsSprite(b%,g%)
shell_OK(
shell_MessageNoArgs("SHELLMSG29"))
shell_IconSetButtonType(b%,g%,6):
_A%=0
_A%=&64
shell_Tracef0("AttachDataSave:Attaching DataSave Handler to icon "+
g%+" in window &"+
~b%):
shell_Tracef0("AttachDataSave:Handler function is '"+A$+"'"):d%=
shell_GetEventListOffset(b%,g%,_U%+72,24,
):a%=_U%!72+d%:a%!0=b%:a%!4=g%:a%!8=_A%:a%!&C=w%
sHa%!16=LC%:a%!20=
shell_HeapBlockFetch(
(A$)+1):c%=a%!20:$c%=A$:
&FF9:
_A%>&8000
{'_U%!&88=
shell_HeapBlockInfo(_A%)-8
_U%!&88=_A%
_A%>&8000
'_U%!&88=
shell_HeapBlockInfo(_A%)-4
_U%!&88=_A%
:_U%!&8C=w%:_U%!&90=_A%:
shell_AttachMenu(b%,u%,k%,cB%,gB%,nB%):
u%>=0
shell_IconSetButtonType(b%,u%,3)
shell_Tracef0("AttachMenu:Attaching menu handle &"+
~k%+" to window handle &"+
~b%):
shell_EventAdd(b%,u%,0,k%,""):
shell_AttachMenuMaker(b%,u%,A$):
shell_Tracef0("AttachMenuMaker:Attaching menumaker function '"+A$+"'"):
shell_EventAdd(b%,u%,1,0,A$):
shell_AttachMenuDBox(zA%,K$,NA$,PA$):
a%,c%,nA%:
shell_WindowLoaded(K$)
shell_MessageOneArg("SHELLMSG03",K$)
shell_HeapBlockFetch(&C):a%!0=
shell_HeapBlockFetch(
K$+1):c%=a%!0:$c%=K$:a%!4=
shell_HeapBlockFetch(
NA$+1):c%=a%!4:$c%=NA$:a%!8=
shell_HeapBlockFetch(
PA$+1):c%=a%!8:$c%=PA$:
&45BCE,zA%,a%:
&45BCC,,
shell_AttachClickSelect(b%,u%,A$):
shell_EventAdd(b%,u%,2,0,A$):
shell_AttachClickAdjust(b%,u%,A$):
shell_EventAdd(b%,u%,3,0,A$):
shell_AttachUserRedraw(
b%,A$):
a%,GA%,RA%:a%=
shell_HeapBlockFetch(40):!a%=b%:
&400CB,,a%:GA%=a%!32:
shell_HeapBlockReturn(a%):
shell_Tracef0("AttachUserRedraw:flag%=&"+
~GA%):
1<<4)
shell_Tracef0("AttachUserRedraw:auto redraw set!!"):RA%=b%:
shell_WindowToggleFlags(b%,1<<4):
b%<>RA%
shell_UpdateWindowHandle(RA%,b%)
shell_EventAdd(b%,-1,4,0,A$):
shell_AttachKeypress(b%,u%,A$):
shell_EventAdd(b%,u%,5,0,A$):
shell_AttachDrag(b%,u%,hF%,A$):
shell_EventAdd(b%,u%,6,0,A$):
shell_AttachHelpTag(b%,u%,G$):
shell_EventAdd(b%,u%,8,0,G$):
shell_EventAdd(b%,u%,fB%,k%,A$):
f%,OB%,i%,q%,m%:
mC%:f%=0:m%=
b%=-1
b%=-2
shell_HeapBlockInfo(_U%!&C)-8:i%=_U%!&C:
(i%!f%=b%)
i%!(f%+4)=u%
f%+=48
f%+=48
(f%>=q%
%f%=0:
(i%!f%<>0):f%+=48:
f%>=q%
_U%!&C=
shell_HeapBlockExtend(_U%!&C,48):i%=_U%!&C:i%!(f%+0)=0:i%!(f%+4)=0:i%!(f%+8)=0:i%!(f%+&C)=0:i%!(f%+16)=0:i%!(f%+20)=0:i%!(f%+24)=0:i%!(f%+28)=0:i%!(f%+32)=0:i%!(f%+36)=0:i%!(f%+40)=0:i%!(f%+44)=0
:i%!(f%+0)=b%:i%!(f%+4)=u%:
k%<>0
i%!(f%+8)=k%
:mC%=f%+(&C+(fB%*4)):
i%!mC%<>0
shell_HeapBlockReturn(i%!mC%)
:OB%=
shell_HeapBlockFetch(
A$+1):$OB%=A$:i%!mC%=OB%:
shell_EventDeleteAll(b%):
f%,k%,m%,q%,i%,r%:f%=0:k%=0:m%=
b%=-1
b%=-2
2>q%=
shell_HeapBlockInfo(_U%!&C)-8:i%=_U%!&C:
(i%!f%=b%)
f%+=48
(f%>=q%
<Ci%!(f%+0)=0:i%!(f%+4)=0:i%!(f%+8)=0:
r%=&C
i%!(f%+r%)<>0
shell_HeapBlockReturn(i%!(f%+r%)):i%!(f%+r%)=0
shell_Tracef0("EventDeleteAll:wh%=&"+
~b%):
shell_DeleteEventDataSave(b%,-1):
shell_DeleteEventBump(b%,-1):
shell_DeleteEventBump(b%,g%):
d%,a%,q%,i%,c%:i%=_U%!&68:
shell_GetEventListOffset(b%,g%,_U%+&68,16,
shell_Tracef0("DeleteEventBump:offset%="+
d%>=0
g%=-1
shell_Tracef0("DeleteEventBump:Deleting Bump Event (all events for window handle &"+
~b%+")")
shell_Tracef0("DeleteEventBump:Deleting Bump Event (window handle was &"+
~b%+" icon handle was "+
g%+")")
shell_HeapBlockInfo(_U%!&68)-8:
d%=q%-16
FA%=i%!&C:c%=FA%!&C:
shell_HeapBlockReturn(c%!&C):
shell_HeapBlockReturn(c%!16):
shell_HeapBlockReturn(c%):
shell_HeapBlockReturn(_U%!&68):_U%!&68=0:
shell_Tracef0("DeleteEventDataSave:No Bump events now registered")
_U%!&68=
shell_HeapBlockExtend(_U%!&68,-16)
a%=i%+d%:a%!0=0:a%!4=0:a%!8=0:FA%=a%!&C:
shell_HeapBlockReturn(FA%!&C):
shell_HeapBlockReturn(FA%!16):
shell_HeapBlockReturn(FA%)
d%<0:
shell_DeleteEventDataSave(b%,g%):
d%,a%,q%:
shell_GetEventListOffset(b%,g%,_U%+72,24,
d%>=0
g%=-1
shell_Tracef0("DeleteEventDataSave:Deleting DataSave Event (all events for window handle &"+
~b%+")")
shell_Tracef0("DeleteEventDataSave:Deleting DataSave Event (window handle was &"+
~b%+" icon handle was "+
g%+")")
shell_HeapBlockInfo(_U%!72)-8:
d%=q%-24
shell_HeapBlockReturn(_U%!72):_U%!72=0:
shell_Tracef0("DeleteEventDataSave:No DataSave events now registered")
_U%!72=
shell_HeapBlockExtend(_U%!72,-24)
a%=i%+d%:a%!0=0:a%!4=0:a%!8=0:a%!&C=0:a%!16=0:
shell_HeapBlockReturn(a%!20):a%!20=0
d%<0:
shell_MessageNoArgs(G$):=
shell_MessageLookup(G$,"","")
shell_MessageOneArg(G$,DA$):=
shell_MessageLookup(G$,DA$,"")
shell_MessageLookup(G$,DA$,cA$):
j%,L%,f$,DC%,ZB%:
G$,8)="SHELLMSG"
DC%=_U%!284:ZB%=_U%!280
DC%=_U%!64:ZB%=_U%!68
&61502,ZB%,G$,DC%,256,DA$,cA$
,,,L%;j%:
DC%?L%=&D:f$=$(DC%)
shell_WimpInit(IC%,u$):
&400C0,IC%,&4B534154,u$
IC%,jA%:_U%!&94=jA%:=jA%
shell_WimpInit_I(IC%,u$):
&400C0,IC%,&4B534154,u$
IC%,jA%:_U%!&94=jA%:
"Interface_Initialise",jA%:=jA%
shell_WimpCloseDown_I(jA%):
shell_LoseFonts:
_U%!&F0<>-1
"XFontMenu_Release"
&600DD,jA%,&4B534154:
"XInterface_CloseDown",jA%:
_U%!&64
"XImpulse_CloseDown",_U%!&94
WimpCloseDown(jA%):
shell_LoseFonts:
_U%!&F0<>-1
"XFontMenu_Release"
&600DD,jA%,&4B534154:
_U%!&64
"XImpulse_CloseDown",_U%!&94
("Unset "+_shell_AppName$+"$BasicFile"):
shell_LoseFonts:
r%,c%:c%=_U%!&E8:
c%?r%>0:
&40082,r%:c%?r%-=1:
shell_FindFont(Z$,rE%):
GA%,_C%:_C%=_U%!&E8:
&40081,,Z$,rE%*16,c*16,0,0
GA%:_C%?GA%+=1:
_C%?GA%>=&FF
shell_OK(
shell_MessageNoArgs("SHELLMSG18"))
shell_Init:
bA%,r%,c%,P$:
fA%,D$,E$:
_U%330,_shell_blk%260:_Q%=
shell_HeapBlockFetch(&BB8):bA%=
shell_HeapBlockFetch(48):bA%!0=0:bA%!4=0:bA%!8=0:bA%!&C=0:bA%!16=0:bA%!20=0:bA%!24=0:bA%!28=0:bA%!32=0:bA%!36=0:bA%!40=0:bA%!44=0:_U%!0=0:_U%!4=0:_U%!8=0
_U%!&C=bA%:_U%!16=1:_U%!20=0:_U%!24=0:_U%!28=0:_U%!32=0:_U%!36=0:_U%!40=0:_U%!44=-1:_U%!48=0:_U%!52=0:_U%!56=0:_U%!60=0:_U%!64=0:_U%!68=0:_U%!72=0:_U%!76=
shell_HeapBlockFetch(256):_U%!80=0:_U%!84=-1:_U%!88=0:_U%!92=0:_U%!96=0:_U%!&64=0:_U%!&68=0
_U%!&6C=-1:_U%!&70=-1:_U%!&74=-1:_U%!&78=-1:_U%!&7C=-1:_U%!&80=0:_U%!&84=0:_U%!&88=-1:_U%!&8C=-1:_U%!&90=-1:_U%!&94=0:_U%!&98=0:_U%!&9C=0:_U%!&A0=0:_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=
shell_HeapBlockFetch(256):_U%!&EC=
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:_U%!324=0:
shell_MemFill(_U%!&E8,256,0):
shell_MemFill(_U%!&EC,256,0):fA%=
shell_HeapBlockFetch(256)
shell_OSVarGetVal(fA%,256,"Obey$Dir",1):
shell_HeapBlockReturn(fA%):E$=
shell_Leaf(D$),2):_U%!&BC=
shell_HeapBlockFetch((
D$)+1):_U%!&C4=
shell_HeapBlockFetch((
E$)+1):c%=_U%!&BC:$c%=D$:c%=_U%!&C4:$c%=E$:P$=
shell_OSReadCommandArg(1):
P$<>""
L_U%!&64=_U%!&64
1<<5:c%=
shell_HeapBlockFetch(
P$+1):$(c%)=P$:_U%!324=c%
shell_GetCmdLineArgs:
_U%!324<>0
P$=$(_U%!324)
shell_FileType(c$):
8,5,c$
,,w%:w%=(w%
&FFF00)>>>8:=w%
shell_FileExists(c$):
shell_CatInfoRead(c$)="Not Found":=
shell_CatInfoRead(c$):
w%,ZC%,fC%,uA%,hB%,B$:
8,5,c$
w%,,ZC%,fC%,uA%,hB%:
="Not Found"
hB%=51
B$+="WR "
hB%=&BB
B$+="LWR"
hB%=&88
B$+="DL "
B$+=" "+
shell_StringPadLeading(
~ZC%,"0",8):B$+=" "+
shell_StringPadLeading(
~fC%,"0",8):B$+=" "+
shell_StringPadLeading(
~uA%,"0",8):=B$
shell_GetAppDir:
c%:c%=_U%!&BC:=$c%
shell_GetAppDataDir:
c%:c%=_U%!&C0:=$c%
shell_GetAppName:
c%:c%=_U%!&C4:=$c%
shell_ResourcesInit:
_$,c%,E$,D$:
fA%,LB%,mB%:E$=
shell_GetAppName:D$=
shell_GetAppDir:fA%=
shell_HeapBlockFetch(256):
shell_OSVarExists(fA%,E$+"Res$Path")
_U%!&64=_U%!&64
shell_OSVarExists(fA%,E$+"Data$Dir")
shell_OSVarGetVal(fA%,256,E$+"Data$Dir",1):_U%!&C0=
shell_HeapBlockFetch((
_$)+1):c%=_U%!&C0:$c%=_$
_U%!&C0=
shell_HeapBlockFetch((
D$)+1):c%=_U%!&C0:$c%=D$
_U%!&64
shell_FileExists(E$+"Res:Messages")
shell_MessagesInit(E$+"Res:Messages",_U%!68,_U%!64)
shell_FileExists(E$+"Res:ShellMsgs")
shell_MessagesInit(E$+"Res:ShellMsgs",_U%!280,_U%!284)
shell_MessagesInit("ShellSysRes:ShellMsgs",_U%!280,_U%!284)
&20035,-1,4
,,mB%:
&20035,-1,5
,,LB%:
LB%=1
shell_FileExists(E$+"Res:Sprites22")
4_U%!16=
shell_SpriteAreaLoad(E$+"Res:Sprites22")
shell_FileExists(E$+"Res:Sprites")
2_U%!16=
shell_SpriteAreaLoad(E$+"Res:Sprites")
_U%!16=1
shell_FileExists(E$+"Res:Templates")
shell_TemplatesInit(E$+"Res:Templates")
shell_FileExists(D$+".Messages")
shell_MessagesInit(D$+".Messages",_U%!68,_U%!64)
shell_FileExists(D$+".ShellMsgs")
shell_MessagesInit(D$+".ShellMsgs",_U%!280,_U%!284)
shell_MessagesInit("ShellSysRes:ShellMsgs",_U%!280,_U%!284)
&20035,-1,4
,,mB%:
&20035,-1,5
,,LB%:
LB%=1
shell_FileExists(D$+".Sprites22")
1_U%!16=
shell_SpriteAreaLoad(D$+".Sprites22")
shell_FileExists(D$+".Sprites")
/_U%!16=
shell_SpriteAreaLoad(D$+".Sprites")
_U%!16=1
shell_FileExists(D$+".Templates")
shell_TemplatesInit(D$+".Templates")
&45BC0:
shell_HeapBlockReturn(_Q%):_Q%=
shell_HeapBlockFetch(&400):
shell_HeapBlockReturn(fA%):
shell_SpriteAreaLoad(L$):
CB%,S%,T%:S%=
(L$):T%=
#S%+16:
#S%:CB%=
shell_HeapBlockFetch(T%):!CB%=T%:CB%!4=0:CB%!8=16:CB%!&C=16:
46,521,CB%:
46,522,CB%,L$:
shell_Tracef0("SpriteLoad:Sprite file loaded at &"+
~CB%):=CB%
shell_UserSpritesBase:=_U%!16
shell_SpriteGetPtr(eB%,O$):
JB%,f%:JB%=
shell_HeapBlockFetch(21):$JB%=O$:
46,280,eB%,JB%
,,f%:
shell_HeapBlockReturn(JB%):=f%
shell_TemplatesInit(L$):
pB%,xC%,HE%,X%,f%:
WE%,CA%,qB%,O$,FB%:
cA%,oD%,EE%,UB%,r$,AA%:
yB%,YB%,rB%,NC%,vB%:
qB%20:
4):qB%+=1:
:CA%=0:FB%=0:rB%=0:vB%=0:WE%=
shell_FileLength(L$):AA%=
shell_HeapBlockFetch(&D):X%=
(L$):
#X%=16:
:r$=""
&C,4,X%,AA%,4:cA%=!AA%:
shell_Tracef0("TemplatesInit:file offset% = "+
cA%):
cA%>0
FB%+=1:yB%=0:
&C,4,X%,AA%,4:oD%=!AA%:
shell_Tracef0("TemplatesInit:data_size% = "+
oD%):
&C,4,X%,AA%,4:EE%=!AA%:
&C,4,X%,AA%,&C:e%=0:
:UB%=AA%?e%:
UB%>31
e%+=1:
UB%<32:pE%=
#X%=cA%+56:
&C,4,X%,AA%,4:j%=!AA%:
#X%=cA%+72:
&C,4,X%,AA%,&C:yB%+=
shell_IconIndirSize(cA%,j%,AA%):
#X%=cA%+84:
&C,4,X%,AA%,4:YB%=!AA%:
shell_Tracef0("TemplatesInit:nr icons = "+
YB%):
YB%>0
NC%=0
YB%-1:
#X%=cA%+88+(NC%*32)+16:
&C,4,X%,AA%,4:j%=!AA%:
#X%=cA%+88+(NC%*32)+20:
&C,4,X%,AA%,&C:yB%+=
shell_IconIndirSize(cA%,j%,AA%):
#X%=pE%:
shell_Tracef0("TemplatesInit:entry_type% = "+
EE%):
shell_Tracef0("TemplatesInit:identifier$ = "+r$):
shell_Tracef0("TemplatesInit:indirected size = "+
yB%):
shell_Tracef0(" "):rB%+=yB%:
(88+(YB%*32))>vB%
vB%=(88+(YB%*32))
cA%=0:
shell_HeapBlockReturn(AA%):
shell_Tracef0("TemplatesInit:total indirected= "+
rB%):wD%=
shell_HeapBlockFetch(WE%):pB%=wD%:_U%!4=
shell_HeapBlockFetch(20*FB%):VE%=
shell_HeapBlockFetch(vB%+rB%):xC%=VE%:HE%=VE%+(vB%+rB%):FB%=0
&400D9,,L$:
:$qB%="*":
&400DB,,pB%,xC%,HE%,_U%!&E8,qB%,CA%
,,xC%,,,O$,CA%:
CA%<>0
!((_U%!4)+(16*FB%))=pB%:$(((_U%!4)+(16*FB%))+4)=O$:
shell_Tracef0("TemplatesInit: Template Loaded: "+O$):pB%+=(88+(pB%!84)*32):FB%+=1
CA%=0:
&400DA:_U%!0=FB%:
shell_Tracef0("TemplatesInit:Templates resource file loaded at &"+
~wD%+" ("+
FB%+" templates)"):
shell_WindowLoaded(K$):
r%,m%:
(K$)>&C
shell_MessageOneArg("SHELLMSG02",K$)
(_U%!0)-1:
$(((_U%!4)+(16*r%))+4)=K$
:r%=(_U%!0)-1
r%:=m%
shell_GetWB(K$):
r%,m%:
(K$)>&C
shell_MessageOneArg("SHELLMSG02",K$)
5m%=-1:
(_U%!0)-1:
$(((_U%!4)+(16*r%))+4)=K$
m%=r%:r%=(_U%!0)-1
m%>-1
=!((_U%!4)+(16*m%))
shell_MessageOneArg("SHELLMSG03",K$)
shell_MessageExpand(d$):
J$,f$,pA%:J$="":
d$,"\")>0:pA%=
d$,"\"):J$+=
d$,pA%-1):f$=
d$,pA%+1,1):d$=
d$,pA%+2):
"A":J$+="Click ADJUST to"
"a":J$+="ADJUST"
"D":J$+="Drag with SELECT to"
"d":J$+="Drag with ADJUST to"
"G":J$+="This option is greyed out because"
"R":J$+="Move the pointer right"
"S":J$+="Click SELECT to"
"s":J$+="SELECT"
"T":J$+="This is the"
"W":J$+="This window is"
"w":J$+="window"
J$+="\"+f$
:=J$+d$
shell_OpenMenu(NA%,OA%,iA%):
A$:A$=
shell_GetEventHandler(_U%!28,_U%!32,1):
A$<>""
shell_Tracef0("OpenMenu:About to call "+"FN"+A$+"("+
_U%!28+","+
_U%!32+")"):o%=
("FN"+A$+"(_U%!28,_U%!32)")
shell_Tracef0("OpenMenu:no menumaker function registered")
iA%<>_U%!24
shell_HeapBlockExists(_U%!256)
shell_HeapBlockReturn(_U%!256):_U%!256=0
shell_HeapBlockExists(_U%!&F4)
shell_HeapBlockReturn(_U%!&F4):_U%!&F4=0
iA%=_U%!&FC
&400D4,,iA%,NA%-64,OA%:_U%!264=1
_Q%!0=NA%:_Q%!4=OA%:
&45BC5,iA%,_Q%:_U%!264=0
:_U%!24=iA%:_U%!36=NA%:_U%!40=OA%:_U%!52=_U%!28:_U%!56=_U%!32:
shell_MenuLastXPos:=_U%!36
shell_MenuLastYPos:=_U%!40
shell_MenuAttachDbox(a$):
"Menu_SetSubHandle",_U%!8,
shell_MenuString(a$),1:
shell_Tracef0("MenuAttachDbox:Dialog box ("+a$+") attached"):
shell_MessageWindow(F$,CF%,dA$,m$):
zC%,kA%:kA%=
shell_HeapBlockFetch(260):!kA%=0:$(kA%+4)=F$+
m$=""
m$="Message from "+dA$
&400DF,kA%,19,m$
&400DF,kA%,17,m$
shell_HeapBlockReturn(kA%):=zC%
shell_CreateWindow(BA$,
XB%:XB%=
shell_GetWB(BA$):XB%!64=_U%!16:
&400C1,,XB%
shell_CreateWindow2(N,j%,zE%,iE%,hE%,dA%,MD%,eA%,BB%,AB%):
Q%:Q%=
shell_HeapBlockFetch(&BB8):Q%!0=MD%:Q%!4=eA%:Q%!8=BB%:Q%!&C=AB%:Q%!16=0:Q%!20=0:Q%!24=-1:Q%!28=j%:Q%?32=7:Q%?33=2:Q%?34=zE%:Q%?35=iE%:Q%?36=3:Q%?37=1:Q%?38=2:Q%?39=0:Q%!40=0:Q%!44=dA%
Q%!48=hE%:Q%!52=0:Q%!56=317:Q%!60=&3000:Q%!68=1:Q%!72=N:Q%!76=-1:Q%!80=
$N:Q%!84=0:
&400C1,,Q%
shell_HeapBlockReturn(Q%):=h%
shell_WindowHasTitleBar(b%):=(
shell_WindowGetFlags(b%)
1<<26)
shell_WindowIsMoveable(b%):=(
shell_WindowGetFlags(b%)
1<<1)
shell_WindowIsAPane(b%):=(
shell_WindowGetFlags(b%)
1<<5)
shell_WindowIsNotBounded(b%):=(
shell_WindowGetFlags(b%)
1<<6)
shell_WindowTrapsHotKeys(b%):=(
shell_WindowGetFlags(b%)
1<<&C)
shell_WindowIsOpen(b%):=(
shell_WindowGetFlags(b%)
1<<16)
shell_WindowIsOnTop(b%):=(
shell_WindowGetFlags(b%)
1<<17)
shell_WindowHasBeenToggled(b%):=(
shell_WindowGetFlags(b%)
1<<18)
shell_WindowHasInputFocus(b%):=(
shell_WindowGetFlags(b%)
1<<20)
shell_WindowHasBackIcon(b%):=(
shell_WindowGetFlags(b%)
1<<24)
shell_WindowHasCloseIcon(b%):=(
shell_WindowGetFlags(b%)
1<<25)
shell_WindowHasToggleIcon(b%):=(
shell_WindowGetFlags(b%)
1<<27)
shell_WindowHasVScrollBar(b%):=(
shell_WindowGetFlags(b%)
1<<28)
shell_WindowHasAdjustSizeIcon(b%):=(
shell_WindowGetFlags(b%)
1<<29)
shell_WindowHasHScrollBar(b%):=(
shell_WindowGetFlags(b%)
1<<30)
shell_WindowGetFlags(b%):
j%,a%:a%=
shell_HeapBlockFetch(36):a%!0=b%:
&400CB,,a%:j%=a%!32:
shell_HeapBlockReturn(a%):=j%
shell_WindowGetTitleFlags(b%):
j%,a%:a%=
shell_HeapBlockFetch(6000):a%!0=b%:
&400CC,,a%:j%=a%!60:
shell_HeapBlockReturn(a%):=j%
shell_IconGetFlags(b%,g%):
j%,a%:a%=
shell_HeapBlockFetch(50):a%!0=b%:a%!4=g%:
&400CE,,a%:j%=a%!24:
shell_HeapBlockReturn(a%):=j%
shell_WindowTitleFlags(b%):
j%,a%:a%=
shell_HeapBlockFetch(&BB8):a%!0=b%:
&400CC,,a%:j%=a%!60:
shell_HeapBlockReturn(a%):=j%
shell_WindowTitleHasBorder(b%):=(
shell_WindowTitleFlags(b%)
1<<2)
shell_WindowTitleIsSprite(b%):=(
shell_WindowTitleFlags(b%)
1<<1)
shell_WindowTitleIsText(b%):=(
shell_WindowTitleFlags(b%)
1<<0)
shell_WindowTitleIsHCentred(b%):=(
shell_WindowTitleFlags(b%)
1<<3)
shell_WindowTitleIsVCentred(b%):=(
shell_WindowTitleFlags(b%)
1<<4)
shell_WindowTitleIsFilled(b%):=(
shell_WindowTitleFlags(b%)
1<<5)
shell_WindowTitleIsAAliased(b%):=(
shell_WindowTitleFlags(b%)
1<<6)
shell_WindowTitleIsIndirected(b%):=(
shell_WindowTitleFlags(b%)
1<<8)
shell_WindowGetTitle(b%):
Q$,a%:a%=
shell_HeapBlockFetch(&BB8):a%!0=b%:
&400CC,,a%:
(a%!32
1<<26)
((a%!60)
256)=0
Q$=$(a%+76)
Q$=$(!(a%+76))
shell_HeapBlockReturn(a%):=Q$
shell_WindowTitleBufferLength(b%):
UA%,a%:a%=
shell_HeapBlockFetch(&BB8):a%!0=b%:
&400CC,,a%:
((a%!60)
256)=0
UA%=&C
UA%=a%!84
shell_HeapBlockReturn(a%):=UA%
shell_WindowMoveToIcon(b%,HD%,g%,qA%,sA%):
n%,s%:n%=
shell_HeapBlockFetch(50):s%=
shell_HeapBlockFetch(36):s%!20=0:
shell_OSCheckVersion(3)
HD%=-1
!s%=-2
!s%=HD%
&400CB,,s%
:n%!0=HD%:n%!4=g%:
&400CE,,n%:
shell_WindowMoveTo(b%,n%!8+qA%-s%!20,n%!20+sA%):
shell_HeapBlockReturn(n%):
shell_HeapBlockReturn(s%):
shell_WindowMoveTo(b%,NA%,OA%):
mD%,kD%,d%,a%:a%=
shell_HeapBlockFetch(&BB8):a%!0=b%:
&400CC,,a%:mD%=a%!&C-a%!4:kD%=a%!16-a%!8:a%!4=NA%:a%!8=OA%:a%!&C=NA%+mD%:a%!16=OA%+kD%:
&400C5,,a%:
&400C6,,a%:d%=
shell_SearchStatic(_U%!&B8,b%):
d%>-1
shell_OpenWindowStatic(b%)
shell_OpenWindowDynamic(b%,0,0)
shell_HeapBlockReturn(a%):
shell_WindowBringToTop(b%):
MB%:MB%=
shell_HeapBlockFetch(256):MB%!0=b%:
&400CB,,MB%:MB%!28=-1:
&400E7,2,MB%,b%:
&400C7,0,MB%:
shell_HeapBlockReturn(MB%):
shell_UpdateWindow(h%,MD%,eA%,BB%,AB%):
a%:a%=
shell_HeapBlockFetch(a%):a%!0=h%:a%!4=MD%:a%!8=eA%:a%!&C=BB%:a%!16=AB%:
&400C9,,a%
&400CB,,a%:
shell_HeapBlockReturn(a%):
shell_OpenWindowDynamic(b%,qA%,sA%):
o%,EC%:EC%=
shell_HeapBlockFetch(20):_U%!20=b%:
&400CF,,EC%:
&400D4,,b%,EC%!0+qA%,EC%!4+sA%:
shell_HeapBlockReturn(EC%):
shell_ClaimKeypress:
_U%!20<>0
&400D4,,-1:o%=
shell_DeleteWindow(_U%!20):_U%!20=0
shell_OpenWindow(b%,XD%,aE%):
d%,a%,t%,e%,SE%,cC%,PA%,lA%:
wB%,xB%,AB%,nD%,tD%,AC%:d%=
shell_GetEventListOffset(b%,-1,_U%+304,&C,
d%>=0
ga%=_U%!304+d%:c%=a%!8:
shell_Tracef0("OpenWindow:About to call "+"FN"+$c%):AC%=
("FN"+$c%):
AC%=0
:xB%=
:AB%=
shell_HeapBlockFetch(&64):AB%!0=b%:
&400CB,,AB%:
(AB%!32
&80000)=&80000
shell_HeapBlockReturn(AB%):_Q%!0=b%:
&400CB,,_Q%
&400C5,,_Q%
shell_GetEventListOffset(b%,-1,_U%+92,24,
d%>-1
Ya%=(_U%!92)+d%:aB%=a%!8:RD%=a%!&C:NB%=a%!16:bB%=a%!20:_Q%!0=b%:
cC%=-1
cC%=_Q%!28
&400C5,,_Q%:
&400CB,,_Q%:
&400C6,,_Q%
shell_HeapBlockFetch(&400):e%=0:
aB%!e%<>-1:t%!0=aB%!e%:
SE%=0
SE%=t%!0
+nD%=t%!0:
&400CB,,t%:wB%=RD%!e%:
0,1:PA%=t%!16-t%!8:lA%=t%!&C-t%!4:t%!4=_Q%!4+NB%!e%:t%!&C=t%!4+lA%:t%!16=_Q%!16+bB%!e%:t%!8=t%!16-PA%
2:PA%=t%!16-t%!8:lA%=_Q%!&C-_Q%!4:t%!4=_Q%!4+NB%!e%:t%!&C=_Q%!&C:t%!16=_Q%!16+bB%!e%:t%!8=t%!16-PA%
3:PA%=_Q%!16-_Q%!8:lA%=t%!&C-t%!4:t%!4=_Q%!4+NB%!e%:t%!&C=t%!4+lA%:t%!16=_Q%!16:t%!8=_Q%!8+bB%!e%
4:PA%=t%!16-t%!8:lA%=_Q%!&C-_Q%!4:t%!4=_Q%!4+NB%!e%:t%!&C=_Q%!&C:t%!16=_Q%!8+PA%+bB%!e%:t%!8=t%!16+PA%
5:PA%=_Q%!16-_Q%!8:lA%=t%!&C-t%!4:t%!4=_Q%!&C-lA%+NB%!e%:t%!&C=t%!4+lA%:t%!16=_Q%!16:t%!8=_Q%!8
t%!28=cC%
t%!28=tD%
&400C5,,t%:tD%=t%!0:e%+=4:
_Q%!28=nD%:
&400C5,,_Q%
shell_HeapBlockReturn(t%)
_Q%!0=b%:
&400CB,,_Q%
cC%=-2
_Q%!28=-2
aE%=-1
_Q%!28=-1
&400C5,,_Q%
shell_CloseWindow(b%):
d%,a%,aB%,RD%,NB%,bB%,p%,AC%:d%=
shell_GetEventListOffset(b%,-1,_U%+308,&C,
d%>=0
ha%=_U%!308+d%:c%=a%!8:
shell_Tracef0("CloseWindow:About to call "+"FN"+$c%):AC%=
("FN"+$c%):
AC%=0
shell_HeapBlockFetch(60):
';d%=
shell_GetEventListOffset(b%,-1,_U%+92,24,
d%>-1
)la%=(_U%!92)+d%:RD%=a%!&C:NB%=a%!16:bB%=a%!20:e%=0:aB%=a%!8:
aB%!e%<>-1:p%!0=aB%!e%:
&400C6,,p%:e%+=4:
:p%!0=b%:
&400C6,,p%
shell_HeapBlockReturn(p%):
shell_DeleteWindow(h%):
p%:p%=
shell_HeapBlockFetch(20):
h%<>0
oktodeletew(h%)
shell_EventDeleteAll(h%):
h%=_U%!20
_U%!20=0
G.d%=
shell_SearchStatic(_U%!&B8,h%):
d%>-1
c%=_U%!&B8+d%:c%!0=0
:p%!0=h%:
&400C3,,p%:h%=0
shell_HeapBlockReturn(p%):=h%
oktodeletew(h%):=-1
oktoclosew(h%):=-1
cliprect(A,
SF%):
EA%,HA%:
lwaorigin(A,EA%,HA%):QA%=A!24-EA%:YA%=A!28-HA%:NF%=A!32-EA%:SF%=A!36-HA%:
poll(oB%,yD%):
&400C7,oB%,_Q%
BA%:=BA%
shell_Poll_I(oB%,yD%):
&400C7,oB%,_Q%
"Interface_Poll",BA%,,yD%:=BA%
shell_DoBackgroundTask:
shell_IconIsDraggable(b%,g%):
j%:j%=
shell_IconGetFlags(b%,g%):c%=(j%
&6000):
c%=&6000=
shell_IconIsSprite(b%,g%):
j%,c%:j%=
shell_IconGetFlags(b%,g%):c%=(j%
1<<1):
c%=(1<<1)
shell_IconDragBox(b%,g%):
a%,H,J,AD%,j%,GA%,lD%,uD%,dB%,q$:
LC%,O$:AD%=
shell_GetEventListOffset(b%,g%,_U%+72,24,
AD%>=0
na%=_U%!72+AD%:LC%=a%!16:O$=
shell_IconGetData(b%,LC%):
O$=""
shell_OK(
shell_MessageNoArgs("SHELLMSG28"))
shell_HeapBlockFetch(6000):!a%=b%:
&400CC,,a%:H=a%!4-a%!20:J=a%!16-a%!24:uD%=a%!68:a%!4=g%:
&400CE,,a%:!a%=b%:a%!4=5:j%=a%!24:dB%=a%!32:a%!8=a%!8+H:a%!&C=a%!&C+J:a%!16=a%!16+H:a%!20=a%!20+J:a%!24=0:a%!28=0:a%!32=&7FFFFFFF:a%!36=&7FFFFFFF
6,&A1,28
,,GA%:lD%=((GA%
2)=2):
GA%=j%:
shell_IconGetCommand(dB%,"s")
shell_OK(
shell_MessageNoArgs("SHELLMSG19"))
q$<>""
&42400,&85,uD%,q$,a%+8:_U%!&64=_U%!&64
&400D0,,a%
&400D0,,a%
shell_HeapBlockReturn(a%)
shell_Tracef0("IconDragBox:WARNING! no drag handler registered for this icon!")
shell_HandleAttachedMenu(_Q%,b%,g%):
g%<>-1
b%>-1
shell_GetEventMenu(_Q%!8,b%,g%):
k%<>0
shell_HandleMenuOpen(_Q%,k%,b%,g%,
shell_Action(UF%):
A$,k%,a$,hA$,DB%,mA%,vA%,VD%:
b%,g%,o%,_temp28%,_temp32%,_temp24%,_temp%,eD%:
sB%,d%:
shell_DoBackgroundTask
shell_RedrawWindow(_Q%!0)
shell_OpenWindow(_Q%!0,
shell_CloseWindow(_Q%!0)
shell_PointerLeavingWindow(_Q%)
shell_PointerEnteringWindow(_Q%)
6:_U%!28=_Q%!&C:_U%!32=_Q%!16:mA%=_Q%!0:vA%=_Q%!4:_U%!272=_Q%!0:_U%!276=_Q%!4:_U%!320=_Q%!8:_temp28%=_Q%!&C:_temp32%=_Q%!16:g%=_Q%!16:
shell_Tracef0("Action:Mouse_Click event detected")
shell_Tracef0("Action:Window Handle was &"+
~_Q%!&C+" Icon Handle was "+
_Q%!16):
_Q%!&C=_U%!288
_Q%!16=_U%!292
shell_HandleBumpIcons(_U%!296,_Q%!&C,_Q%!16,_Q%!8)
_U%!288=-1:_U%!292=-1:_U%!296=-1:
_Q%!16>=0
shell_GetEventListOffset(_Q%!&C,_Q%!16,_U%+&68,16,0):
d%>=0
shell_HandleBumpIcons(d%,_Q%!&C,_Q%!16,_Q%!8)
(_Q%!8=64)
3UA%=
shell_IconIsDraggable(_Q%!&C,_Q%!16):
<U$="Icon is draggable":
shell_IconDragBox(_Q%!&C,_Q%!16)
U$="Icon is not draggable"
shell_Tracef0("Action:"+U$)
_Q%!8
shell_ActionSelectButton
shell_ActionMenuButton
shell_ActionAdjustButton
_U%!&64
&42401:_U%!&64=_U%!&64
:_U%!&80=0:A$=
shell_GetEventHandler(_U%!28,_U%!32,6):
A$<>""
shell_Tracef0("Action:Drag event detected - function is "+A$):o%=
("FN"+A$+"(_temp28%,_temp32%)")
shell_Tracef0("Action:Drag event detected - no handler function"):
shell_SendDataSave(_U%!28,_U%!32)
shell_Tracef0("Action:keypress is="+
_Q%!24):
_Q%!24
&D,394,398,399,410:VD%=
shell_WritableIconHandler(_Q%!0,_Q%!4,_Q%!24)
shell_HotKeyProcess(_Q%!24)
shell_Tracef0("Action:Keypress not claimed, passing it on"):
&400DC,_Q%!24
shell_Tracef0("Action:Keypress claimed by this application")
shell_ActionMenuSelect(_Q%)
17,18:
shell_Receive(_Q%)
shell_UserMessageAcknowledge(_Q%)
shell_ActionSelectButton:
shell_Tracef0("ActionSelectButton:Mouse Button was SELECT"):
shell_HandleAttachedMenu(_Q%,_U%!28,_U%!32):A$=
shell_GetEventHandler(_U%!28,_U%!32,2):
_U%!32=0
shell_DataSaveCheckName(_U%!28,_U%!32)
A$<>""
shell_IconSlab(4,_U%!28,_U%!32):
shell_Tracef0("ActionSelectButton:About to call "+"FN"+A$+"("+
_temp28%+","+
_temp32%+")"):o%=
("FN"+A$+"(_temp28%,_temp32%)")
_U%!32=0
_U%!28=_U%!20
&400D4,,-1
shell_ActionMenuButton:
c%,k%,tB%:tB%=
shell_Tracef0("ActionMenuButton:Mouse Button was MENU"):c%=
shiftmenuclick(_Q%!&C,_Q%!16)
shell_Tracef0("ActionMenuButton:Checking menu events.."):
shell_Tracef0("ActionMenuButton:button="+
_Q%!8+" _Q%!12="+
_Q%!&C+" _Q%!16="+
_Q%!16):k%=
shell_GetEventMenu(_Q%!8,_Q%!&C,_Q%!16):
(k%<>0
_Q%!&C>0
_Q%!16>=0)
^+k%=
shell_GetEventMenu(_Q%!8,_Q%!&C,-1)
shell_Tracef0("ActionMenuButton:Menu handle is:&"+
~k%):
k%<>0
shell_HandleMenuOpen(_Q%,k%,_Q%!&C,_Q%!16,tB%)
shell_HandleMenuOpen(_Q%,k%,b%,g%,tB%):
n%,s%:
shell_OpenMenu(_Q%!0,_Q%!4,k%)
shell_HeapBlockFetch(50):s%=
shell_HeapBlockFetch(36):n%!0=b%:n%!4=g%:
&400CE,,n%:s%!0=b%:
&400CB,,s%:
shell_OpenMenu(s%!4+n%!16+64,_Q%!4,k%):
s%!4+n%!16+64,_Q%!4:
shell_HeapBlockReturn(n%):
shell_HeapBlockReturn(s%)
shell_ActionMenuSelect(_Q%):
rC%,DB%,sB%,eD%,o%,KC%:KC%=
shell_HeapBlockFetch(256):
shell_Tracef0("ActionMenuSelect:Menu_Select event detected"):
&400CF,,_shell_blk%:DB%=
shell_HeapBlockFetch(256):
_U%!24=_U%!&FC
sB%=0:_U%!264=1
shell_CheckSelection(_Q%):
sB%>-1
_U%!264=1
_U%!264=0
_U%!264>0
"FontMenu_DecodeFontMenu",_Q%+sB%,DB%
eD%=1
shell_Tracef0("ActionMenuSelect:FontMenu selection ("+
shell_GetString(DB%)+")"):
shell_FontMenuSelectFont(
shell_GetString(DB%),_U%!260):
_shell_FontMenuSelFN$=""
&400D5,,_U%!24,_Q%,DB%:A$=
shell_GetEventHandler(_U%!52,_U%!56,0):_temp%=DB%:$_temp%=
shell_StringStripTrailing($_temp%," "):
A$<>""
("FN"+A$+"($_temp%)")
_shell_FontMenuSelFN$<>""
("FN"+_shell_FontMenuSelFN$+"(FNshell_FontMenuGetLastSelectedFont)")
shell_HeapBlockReturn(DB%):
_U%!264=0
&45BC4,_U%!24,_Q%
rC%,,KC%:
shell_MenuCallHandler(rC%,KC%)
_shell_blk%!8=1
shell_HeapBlockExists(_U%!&E0)
_temp%=_U%!&E0:
$_temp%<>""
("FN"+$_temp%+"(_U%!52,_U%!56)")
shell_OpenMenu(_U%!36,_U%!40,_U%!24)
_shell_FontMenuSelFN$=""
shell_HeapBlockReturn(KC%):
shell_ActionAdjustButton:
j%,A$,o%,uB%,e%:uB%=
shell_HeapBlockFetch(&64):
shell_Tracef0("Action:Mouse Button was ADJUST"):
&400D6,_U%!28,uB%,&F000,&B000:e%=0:
uB%!e%<>-1:
uB%!e%=_U%!32
shell_IconSet(_U%!28,_U%!32,1)
?e%+=4:
shell_GetEventHandler(_U%!28,_U%!32,3):
A$<>""
shell_IconSlab(1,_U%!28,_U%!32):o%=
("FN"+A$+"(_temp28%,_temp32%)")
shell_HeapBlockReturn(uB%):
shiftmenuclick(b%,g%):=
shell_IconSlab(QC%,b%,g%):
a%:a%=
shell_HeapBlockFetch(50):a%!8=QC%:a%!&C=b%:a%!16=g%:
"Interface_SlabButton",,a%:a%!8=0:
"Interface_SlabButton",,a%:
shell_HeapBlockReturn(a%):
shell_PointerLeavingWindow(_Q%):
n%,o%:n%=
shell_HeapBlockFetch(&C):
&400D6,!_Q%,n%,&3F0000,&F<<16:
!n%<>-1
("FN"+
shell_IconGetData(!_Q%,!n%))
shell_HeapBlockReturn(n%):
shell_PointerEnteringWindow(_Q%):
n%,o%,b%:b%=_Q%!0:n%=
shell_HeapBlockFetch(&C):
&400D6,b%,n%,&3F0000,&E<<16:
!n%<>-1
("FN"+
shell_IconGetData(b%,!n%))
shell_HeapBlockReturn(n%):
shell_RedrawWindow(h%):
gC%,A$,EA%,HA%,a%,n%:n%=
shell_HeapBlockFetch(&C):
&400D6,h%,n%,&3F0000,&D<<16:
!n%<>-1
shell_IconGetData(h%,!n%)
shell_HeapBlockReturn(n%):a%=
shell_HeapBlockFetch(&64):
A$=""
shell_GetEventHandler(h%,-1,4)
:a%!0=h%:
&400C8,,a%
gC%:EA%=a%!4-a%!20:HA%=a%!16-a%!24:
"Interface_Render3dWindow",,a%:
A$<>""
("FN"+A$+"("+
a%+","+
EA%+","+
HA%+")")
&400CA,,a%
shell_HeapBlockReturn(a%):
shell_Receive(_Q%):
c%,o%:
_Q%!16
shell_Exit:
shell_DataSave(_Q%)
shell_DataSaveAck(_Q%)
shell_DataLoad(_Q%,
shell_DataLoadAck(_Q%)
shell_DataLoad(_Q%,
shell_RAMFetch(_Q%)
shell_RAMTransmit(_Q%)
shell_Message_PreQuit(_Q%)
_U%!&A4>0
shell_Tracef0("Receive:PaletteChange message received"):c%=_U%!&A4:o%=
("FN"+$c%)
shell_Message_SaveDesktop(_Q%)
shell_Message_Shutdown(_Q%)
&502:
shell_InteractiveHelp(_Q%)
&400C0:
shell_MenuWarning(_Q%)
&400C1:
shell_Message_ModeChange(_Q%)
&400C2:
_U%!&A8>0
shell_Tracef0("Receive:TaskInitialise message received"):c%=_U%!&A8:o%=
("FN"+$c%+"("+
(_Q%!4)+","+
shell_GetString(_Q%+28)+
34+")")
_U%!&D0=-1
shell_GetString(_Q%+28)="StrongHelp"
_U%!&D0=_Q%!4:
shell_StrongHlpMsg("Help_Install -DieWithTask "+
shell_GetAppDir+"."+
shell_GetAppName):c%=_U%!&D8:
$c%<>""
shell_HelpWord($c%):
shell_HeapBlockReturn(_U%!&D8):_U%!&D8=0
&400C3:
_U%!&AC>0
shell_Tracef0("Receive:TaskCloseDown message received"):c%=_U%!&AC:o%=
("FN"+$c%)
_Q%!4=_U%!&D0
_U%!&D0=-1
&400C7:
shell_Tracef0("Receive:TaskNameIs message received"):
shell_GetString(_Q%+28)="StrongHelp"
_U%!&D0=_Q%!20
shell_ScanForHelp
shell_HandleUnknownMessage2(_Q%)
shell_Message_ModeChange(_Q%):
d%,e%,PB%,s%:PB%=_U%!&B8:
_U%!&A0>0
shell_Tracef0("Message_ModeChange:ModeChange message received"):c%=_U%!&A0:o%=
("FN"+$c%)
shell_HeapBlockFetch(&64):
PB%<>0
shell_Tracef0("Message_ModeChange:Checking static window list for pane events"):
PB%!e%<>-1:d%=
shell_GetEventListOffset(PB%!e%,-1,_U%+92,24,
d%>-1
shell_Tracef0("Message_ModeChange:Static window handle found"):
shell_WindowIsOpen(PB%!e%)
shell_Tracef0("Message_ModeChange:Window is open.."):!s%=PB%!e%:
&400C6,,s%:
shell_OpenWindow(PB%!e%,0,-1)
:e%+=4:
shell_HeapBlockReturn(s%):
shell_Message_Shutdown(_Q%):
_U%!312>0
shell_Tracef0("Message_Shutdown:Shutdown message received"):c%=_U%!312:o%=
("FN"+$c%)
shell_HandleUnknownMessage2(_Q%):
_Q%!16
&43B00:V$=$(_Q%+20):
V$,30)="EvntShellLib:ShellDBug started"
_U%!&64
r_U%!&64=(_U%!&64
1<<4):
shell_BroadcastMessage(&43B00,"ShellDBug:Init Debug messages from "+
shell_GetAppName)
V$,25)="EvntShellLib:TraceInitAck"
_U%!&64=(_U%!&64
1<<4)
V$,20)="EvntShellLib:TraceOn"
shell_TraceOn
V$,21)="EvntShellLib:TraceOff"
shell_TraceOff
V$,28)="EvntShellLib:ListClickSelect"
shell_ListClickSelect
V$,28)="EvntShellLib:ListClickAdjust"
shell_ListClickAdjust
V$,25)="EvntShellLib:ListHelpTags"
shell_ListHelpTags
shell_HandleUnknownMessage(_Q%):
shell_HandleUnknownMessage(_Q%):
shell_AttachPreQuitHandler(A$):
c%,o%:
_U%!300>0
shell_HeapBlockReturn(_U%!300)
<_U%!300=
shell_HeapBlockFetch(
A$+1):c%=_U%!300:$c%=A$:
shell_AttachShutdownHandler(A$):
c%,o%:
_U%!312>0
shell_HeapBlockReturn(_U%!312)
<_U%!312=
shell_HeapBlockFetch(
A$+1):c%=_U%!312:$c%=A$:
shell_AttachModeChangeHandler(A$):
c%,o%:
_U%!&A0>0
shell_HeapBlockReturn(_U%!&A0)
J_U%!&A0=
shell_HeapBlockFetch(
A$+1):c%=_U%!&A0:$c%=A$:o%=
("FN"+A$):
shell_AttachPaletteChangeHandler(A$):
c%,o%:
_U%!&A4>0
shell_HeapBlockReturn(_U%!&A4)
J_U%!&A4=
shell_HeapBlockFetch(
A$+1):c%=_U%!&A4:$c%=A$:o%=
("FN"+A$):
shell_AttachTaskInitialiseHandler(A$):
c%,o%:
_U%!&A8>0
shell_HeapBlockReturn(_U%!&A8)
<_U%!&A8=
shell_HeapBlockFetch(
A$+1):c%=_U%!&A8:$c%=A$:
shell_AttachTaskCloseDownHandler(A$):
c%,o%:
_U%!&AC>0
shell_HeapBlockReturn(_U%!&AC)
<_U%!&AC=
shell_HeapBlockFetch(
A$+1):c%=_U%!&AC:$c%=A$:
shell_RAMFetch(_Q%):
YF%,CD%,ID%:ID%=
_U%!&90>&8000
shell_Tracef0("RAMFetch:RAMFetch called.."):_Q%!&C=_Q%!8:_Q%!16=7:CD%=_U%!&88:
_U%!&8C=&FF9
_U%!&90+=4
(CD%-_U%!&80)<_Q%!24
_Q%!24=CD%-_U%!&80:ID%=
shell_Tracef0("RAMFetch:Sending block")
&400F1,_U%!&94,_U%!&90+_U%!&80,_Q%!4,_Q%!20,_Q%!24:
&400E7,17,_Q%,_Q%!4:_U%!&78=_Q%!8:_U%!&80+=_Q%!24:
_U%!&80=0
shell_RAMTransmit(_Q%):
d%,a%,RA$,c%:
_Q%!&C=_U%!&70
C$_U%!&80+=_Q%!24:
_Q%!24<_U%!&84
shell_Tracef0("RAMTransmit:Last block received"):d%=
shell_GetEventListOffset(_U%!28,_U%!32,_U%+96,16,
):a%=_U%!96+d%:
shell_Tracef0("RAMTransmit:_U%!28="+
_U%!28):
shell_Tracef0("RAMTransmit:_U%!32="+
_U%!32)
shell_Tracef0("RAMTransmit:offset%="+
d%):c%=_U%!&9C:RA$=
shell_GetString(c%+44):
shell_UserFNLoadFile(c%!40,_U%!&98,a%!8,RA$,_U%!&84,a%)
shell_Tracef0("RAMTransmit:Block received"):
_U%!&80>_U%!&84
shell_Tracef0("RAMTransmit:Increasing buffer size.."):_U%!&98=
shell_HeapBlockExtend(_U%!&98,_U%!&80,_U%!&84)
:_Q%!&C=_Q%!8:_Q%!16=6:_Q%!20=_U%!&98+_U%!&80:_Q%!24=_U%!&84:
&400E7,18,_Q%,_Q%!4:_U%!&70=_Q%!8
shell_HeapBlockReturn(_U%!&98):_U%!&98=0:
shell_OK(
shell_MessageNoArgs("SHELLMSG15"))
shell_LoadFile(fF%):
p$,KB%,MC%,wA%:p$=
shell_GetString(_Q%+44):KB%=
shell_FileLength(p$):
KB%<0
shell_OK(
shell_MessageNoArgs("SHELLMSG16"))
xPwA%=
shell_HeapBlockFetch(KB%):
&20008,16,p$,wA%,0
;MC%:
shell_VFlag(MC%)
shell_HeapBlockReturn(wA%):
shell_OK(
shell_MessageNoArgs("SHELLMSG17"))
shell_Tracef0("LoadFile:File "+p$+" loaded ok at &"+
~wA%)
:=wA%
shell_VFlag(MC%):=((MC%
1)=1)
shell_CheckType(w%,QB%,OC%):
cF%,e%,m%,c%,PC%:e%=0:m%=-1:PC%=
_U%!&64
_U%!&64=_U%!&64
QB%!e%<>-1:c%=QB%!e%:
1<<31
c%=c%
1<<31:PC%=
c%=w%
m%=e%:
L_U%!&64=_U%!&64
1<<1:
shell_Tracef0("CheckType:Top Bit Load detected..")
:e%+=4:
(w%>=4096)
m%=-1
m%>-1
shell_Tracef0("CheckType:File type OK "+
~QB%!m%)
shell_Tracef0("CheckType:File type NOT ok "+
m%<>-1
shell_Exit:
ZB%:ZB%=_U%!68:
&61504,ZB%:
&2001E,7,,ZB%:
shell_Tracef0("Exit:Application closing down"):
shell_TraceExit:
&606C2:
&600D0,,-1:
shell_WimpCloseDown_I(_U%!&94):
shell_DataLoad(_Q%,OC%):
dF%,d%,a%,_temp%,QB%,w%,e$:w%=_Q%!40:e$=
shell_GetString(_Q%+44):
shell_Tracef0("DataLoad:DataLoad message received"):
_U%!96<>0
d%=-1
shell_GetEventListOffset(_Q%!20,_Q%!24,_U%+96,16,
d%=-1
shell_GetEventListOffset(_Q%!20,-1,_U%+96,16,
d%>-1
4a%=_U%!96+d%:
shell_CheckType(_Q%!40,a%!8,OC%)
shell_Tracef0("DataLoad:File type recognised (&"+
~_Q%!40+")"):qE%=_Q%!&C:_Q%!&C=_Q%!8:_Q%!16=4:
&400E7,18,_Q%,_Q%!4:
_U%!&64
wA%=-1:_U%!&64=_U%!&64
shell_LoadFile(qE%=_U%!&6C)
shell_UserFNLoadFile(w%,wA%,a%!8,e$,_Q%!36,a%):
_U%!&9C<>0
shell_HeapBlockReturn(_U%!&9C):_U%!&9C=0
shell_Tracef0("DataLoad:File type NOT recognised (&"+
~_Q%!40+")")
shell_UserFNLoadFile(w%,wA%,QB%,_filename$,_file_size%,a%):
e%,m%,c%,o%:e%=0:m%=-1:
QB%!e%<>-1:c%=QB%!e%:
1<<31
c%=c%
1<<31
c%=w%
m%=e%
[e%+=4:
:c%=a%!&C:o%=
("FN"+$(c%!m%)+"("+
wA%+","+
w%+",_filename$,"+
_file_size%+")"):
shell_DataSave(_Q%):
c%,d%,a%,r%:
shell_Tracef0("DataSave:DataSave message received"):
_Q%!4<>_U%!&94
*Cd%=
shell_GetEventListOffset(_Q%!20,_Q%!24,_U%+96,16,
d%>-1
,2a%=_U%!96+d%:
shell_CheckType(_Q%!40,a%!8,
shell_Tracef0("DataSave:Filetype recognized (&"+
~_Q%!40+")"):
shell_TopBitLoadInProgress
shell_Tracef0("DataSave:'no load' flag set"):
shell_Tracef0("DataSave:Sending Message_DataSaveAck"):_Q%!0=256:_Q%!&C=_Q%!8:_Q%!36=-1:_Q%!16=2:$(_Q%+44)=
shell_GetAppDir+".ScrapFile"+
&400E7,18,_Q%,_Q%!4
shell_HeapBlockReturn(_U%!&9C):_U%!&9C=
shell_HeapBlockFetch((_Q%!0)+8):c%=_U%!&9C:
_Q%!0
4:c%!r%=_Q%!r%:
r%:_U%!28=_Q%!20:_U%!32=_Q%!24:_U%!&80=0:_U%!&84=_Q%!36:_U%!&98=
shell_HeapBlockFetch(_Q%!36):_Q%!0=28:_Q%!&C=_Q%!8:_Q%!16=6
_Q%!20=_U%!&98+_U%!&80:_Q%!24=_U%!&84:
&400E7,18,_Q%,_Q%!4:_U%!&70=_Q%!8:
shell_Tracef0("DataSave:Sending Message_RAMFetch")
shell_Tracef0("DataSave:Filetype NOT recognized")
shell_TopBitLoadInProgress:
_U%!&64
shell_SendDataSave(b%,g%):
a%,VA%,RB%,d%,KB%,o%:RB%=
shell_HeapBlockFetch(30):
&400CF,,RB%:d%=
shell_GetEventListOffset(b%,g%,_U%+72,24,
d%=-1
d%=-2
ydo%=
shell_MessageWindow(
shell_MessageNoArgs("SHELLMSG13"),0,"",
shell_MessageNoArgs("warning"))
a%=(_U%!72)+d%:
a%!8>&8000
}$KB%=
shell_HeapBlockInfo(a%!8)-4
KB%=a%!8
:VA%=_U%!76:VA%!0=256:VA%!&C=0:VA%!16=1:VA%!20=RB%!&C:VA%!24=RB%!16:VA%!28=RB%!0:VA%!32=RB%!4:VA%!36=KB%:VA%!40=a%!&C:$(VA%+44)=
shell_Leaf(
shell_IconGetData(b%,a%!16)):
&400E7,18,VA%,VA%!20,VA%!24:_U%!&78=_Q%!8:_U%!&88=KB%:_U%!&8C=a%!&C
;_U%!&90=a%!8:_U%!&9C=a%!4:_U%!&C8=VA%!20:_U%!&CC=VA%!24
shell_HeapBlockReturn(RB%):
shell_DataSaveAck(_Q%):
_fullname$,BA%,eA%,a%,c%,o%:
shell_Tracef0("DataSaveAck:DataSaveAck message received"):BA%=0:eA%=_Q%?(44+BA%):
eA%<>0:_fullname$+=
(eA%):BA%+=1:eA%=_Q%?(44+BA%):
shell_Tracef0("DataSaveAck:Full save name is: "+_fullname$)
shell_Tracef0("DataSaveAck:task="+
_Q%!4):
shell_Tracef0("DataSaveAck:mytask="+
_U%!&94):d%=
shell_GetEventListOffset(_U%!28,_U%!32,_U%+72,24,
d%=-1
d%=-2
shell_MessageNoArgs("SHELLMSG05")
%a%=(_U%!72)+d%:c%=a%!20:
$c%<>""
("FN"+$c%+"(_fullname$)")
shell_HeapBlockExists(a%!8)
8,&A,_fullname$,a%!&C,,a%!8,a%!8+
shell_HeapBlockInfo(a%!8)+1
shell_MessageNoArgs("SHELLMSG21")
_Q%!36>-1
_U%!80<>0
shell_HeapBlockReturn(_U%!80)
H_U%!80=
shell_HeapBlockFetch(
_fullname$+1):c%=_U%!80:$c%=_fullname$
:_Q%!16=3:!_Q%=256:_Q%!20=_U%!&C8:_Q%!24=_U%!&CC:_Q%!40=_U%!&8C:_Q%!36=
shell_FileLength(_fullname$):_Q%!&C=_Q%!8:
shell_Tracef0("DataSaveAck:File length is "+
_Q%!36+" bytes"):$(_Q%+44)=_fullname$+
(0):_U%!84=_Q%!8
shell_Tracef0("DataSaveAck:Sending DataLoad Message"):
&400E7,18,_Q%,_Q%!20,_Q%!24:
_U%!28<>_U%!20
shell_CloseWindow(_U%!28)
&400D4,,-1:
shell_DataSaveCheckName(b%,g%):
d%,a%,q%:a%=_U%!72:d%=0:
a%<>0
shell_HeapBlockInfo(a%)-8:
!(a%+d%)=b%
shell_IconGetData(!a%,a%!16):
O$,".")=0
shell_OK(
shell_MessageNoArgs("SHELLMSG01"))
d%=q%
:d%+=24:
d%>=q%
shell_DataLoadAck(_Q%):
shell_Tracef0("DataLoadAck:DataLoadAck message received (file received ok)"):
shell_UserMessageAcknowledge(_Q%):
_Q%!16
shell_AckDataLoad(_Q%)
shell_AckRAMFetch(_Q%)
shell_AckDataLoad(_Q%):
_Q%!&C<>_U%!84
&20008,6,"<Wimp$Scrap>":
&FF,"Data Transfer failed: Receiver died"
shell_AckRAMFetch(_Q%):
xD%,c%:c%=_U%!&9C:
shell_Tracef0("AckRAMFetch:AckRAMFetch called...."):
_Q%!&C<>_U%!&70
_U%!&80=0
shell_Tracef0("AckRAMFetch:Receiver does not support RAM transfer"):
&20023,"Wimp$Scrap",,-1,0,3
,,xD%:
xD%<>0
$(c%+44)="<Wimp$Scrap>"+
(0):c%!0=(49+
shell_GetString(c%+44)))
3:c%!&C=c%!8:c%!16=2:c%!36=-1:
&400E7,18,c%,c%!4:_U%!&6C=c%!8
shell_OK(
shell_MessageNoArgs("SHELLMSG14"))
shell_Tracef0("AckRAMFetch:RAM transfer started, but not enough data sent. Sender died?"):
shell_HeapBlockReturn(_U%!&98):_U%!&98=0:
shell_OK("SHELLMSG06")
shell_MenuWarning(_Q%):
A$,DB%,NA%,OA%,o%,_temp%,BA%,C$,SB%,a%:NA%=_Q%!24:OA%=_Q%!28:_U%!264=0:
_U%!20<>0
shell_Tracef0("MenuWarning:Removing last dynamic dbox (handle=&"+
~_U%!20+")"):o%=
shell_DeleteWindow(_U%!20):
shell_Tracef0("MenuWarning:Last dynamic dbox removed")
_Q%!20
_U%!&E4:
shell_WindowRetitle(_U%!&E4,
shell_MessageNoArgs("warning")):
shell_IconPutData(_U%!&E4,1,
shell_MessageNoArgs("SHELLMSG07"),0):
&400E8,,_U%!&E4,NA%,OA%
shell_MenuGetItemAddress(_U%!24,_Q%+32):
shell_HeapBlockExists(SB%!4)
shell_MenuWarnDBox(SB%,NA%,OA%)
shell_HeapBlockFetch(32):
&45BC4,_U%!24,_Q%+32
,,a%:
shell_FindMenuWarnEvent(a%!8,C$,H$):
shell_HeapBlockReturn(a%):
shell_MenuWarnSubMenu(_Q%!20,NA%,OA%,C$,H$)
shell_MenuWarnDBox(nA%,NA%,OA%):
c%,y%,o%:
c%=nA%!4:
shell_CreateWindow($c%!0,y%):
shell_Tracef0("MenuWarnDBox:Creating new dynamic dbox (handle=&"+
~y%+")"):
$c%!4<>""
shell_Tracef0("MenuWarnDBox:Calling preopen FN '"+$c%!4+"'"):o%=
("FN"+$c%!4+"("+
y%+")")
$c%!8<>""
shell_Tracef0("MenuWarnDBox:Calling postopen FN '"+$c%!8+"'"):o%=
("FN"+$c%!8+"("+
y%+")")
&400E8,,y%,NA%,OA%:_U%!20=y%:
shell_FindMenuWarnEvent(gA%,
UA%,v%,c%,d%,m%,q%,z%,e%:
TB%:TB%=0:v%=_U%!&DC:d%=0:m%=
:C$="":TB%=0:
shell_HeapBlockExists(v%)
:e%+=4:
v%!e%=-1:q%=e%:e%=0:
shell_Tracef0("FindMenuWarnEvent:list_size%="+
:c%=!(v%+d%+0):
c%<>-1
c%=gA%
:z%=v%!(d%+4):C$=$z%:TB%=v%!(d%+8):z%=v%!(d%+&C):H$=$z%:
shell_Tracef0("FindMenuWarnEvent:submenu found")
:d%+=16
d%=q%
d%>=q%
C$="":H$=""
TB%=0
shell_Tracef0("FindMenuWarnEvent:warn fn not found..")
shell_MenuWarnSubMenu(PD%,NA%,OA%,C$,H$):
o%,c%,yA%,e%:_shell_FontMenuSelFN$=H$:
shell_HeapBlockExists(_U%!&E0)
shell_HeapBlockReturn(_U%!&E0)
C_U%!&E0=
shell_HeapBlockFetch(
C$+1):c%=_U%!&E0:$c%=C$:
C$<>""
("FN"+C$+"(_U%!52,_U%!56)"):
shell_Tracef0("MenuWarnSubMenu:Calling FN"+C$)
PD%=_U%!&FC
shell_Tracef0("MenuWarnSubMenu:FontMenu opening.."):
shell_HeapBlockExists(_U%!256)
shell_HeapBlockReturn(_U%!256)
e%=0:
:e%+=4:
!(_Q%+32+e%)=-1:e%+=4:_U%!256=
shell_HeapBlockFetch(e%):c%=_U%!256:e%=0:
:c%!e%=!(_Q%+32+e%):e%+=4:
!(_Q%+32+e%)=-1:c%!e%=!(_Q%+32+e%):c%=_U%!256
shell_Tracef0("MenuWarnSubMenu:Selecting '"+
shell_FontMenuGetLastSelectedFont+"' in FontMenu.."):
"FontMenu_Select",
shell_FontMenuGetLastSelectedFont,_U%!260
,yA%:_U%!264=1:
yA%<>_U%!&FC
shell_FontMenuUpdatePtr(yA%):_U%!&FC=yA%:PD%=yA%
_U%!264=0
&400E8,,PD%,NA%,OA%:
shell_AttachSubMenu(zA%,TB%,C$):
&45BCE,zA%,TB%:
C$<>""
&45BCC,,
shell_EventListMenuWarn(zA%,TB%,C$,"")
shell_EventListMenuWarn(zA%,TE%,C$,H$):
c%,z%,e%,v%:
_U%!&DC=0
_U%!&DC=
shell_HeapBlockFetch(32):c%=_U%!&DC:c%!0=zA%:c%!4=
shell_HeapBlockFetch(
C$+1):$(c%!4)=C$:c%!8=TE%:c%!&C=
shell_HeapBlockFetch(
H$+1):$(c%!&C)=H$:c%!16=-1:c%!20=-1:c%!24=-1:c%!28=-1
shell_HeapBlockExtend(_U%!&DC,32):_U%!&DC=v%:e%=0:
:e%+=16:
v%!e%=-1:c%=_U%!&DC:c%!e%=zA%:c%!(e%+4)=
shell_HeapBlockFetch(
C$+1):z%=c%!(e%+4):$(z%)=C$:c%!(e%+8)=TE%:c%!(e%+&C)=
shell_HeapBlockFetch(
H$+1):z%=c%!(e%+&C):$(z%)=H$
;c%!(e%+16)=-1:c%!(e%+20)=-1:c%!(e%+24)=-1:c%!(e%+28)=-1
shell_InteractiveHelp(_Q%):
G$,U$,I$,EB%,hD%,iA$,n%:n%=
shell_HeapBlockFetch(&C):
&400D6,_Q%!32,n%,&3F0000,&C<<16:
!n%<>-1
shell_IconGetData(_Q%!32,!n%)
shell_HeapBlockReturn(n%):
G$=""
shell_GetEventHandler(_Q%!32,_Q%!36,8)
shell_IconGetValidation(_Q%!32,_Q%!36):
I$<>""
shell_StringUpperCase(
I$,1))="I"
I$,";"):
EB%=0
I$,2)
I$,2,EB%-2)
shell_StringUpperCase(I$),
shell_StringUpperCase(";i")):hD%=
shell_StringUpperCase(I$),
shell_StringUpperCase(";"),EB%+1):
EB%>0
hD%>0
I$,EB%+2,hD%-EB%-2)
I$,EB%+2)
G$<>""
_Q%!16=&503:_Q%!&C=_Q%!8:U$=
shell_MessageLookup(G$,"",""):U$=
shell_MessageExpand(U$):$(_Q%+20)=U$:!_Q%=(
U$+25)
&400E7,17,_Q%,_Q%!4
shell_Message_PreQuit(_Q%):
c%,iD%,a%,r%,jD%:
_U%!300>0
shell_HeapBlockFetch(256):
_Q%!0
4:a%!r%=_Q%!r%:
shell_Tracef0("Message_PreQuit:PreQuit message received"):c%=_U%!300:iD%=a%!4:
!a%<24
jD%=0
jD%=a%!20
T2a%!&C=a%!8:
&400E7,19,a%,iD%:
("FN"+$c%)<>0
_closedown%=
!a%=24:a%!24=508:
&400E7,8,a%,iD%:_closedown%=
shell_HeapBlockReturn(a%)
lwaorigin(A,
OA%):NA%=A!0-A!16:OA%=A!&C-A!20:
shell_Iconbar(CA%,s$,F$,sC%,k%,cB%,gB%,nB%):
F$=""
rJ!_Q%=CA%:_Q%!4=0:_Q%!8=0:_Q%!&C=70:_Q%!16=70:_Q%!20=&301A:$(_Q%+24)=s$
!_Q%=CA%:_Q%!4=0:_Q%!8=-16:_Q%!&C=sC%:_Q%!16=90:_Q%!20=&1700210B:
_Q%!24&C:
_Q%!28
(s$)+2:$(_Q%!24)=F$:$(_Q%!28)="S"+s$:_Q%!32=&C
&400C2,,_Q%
shell_AttachMenu(-2,h%,k%,cB%,gB%,nB%):=h%
shell_IconbarSetText(y%,KF%,J$):
l%,s%:l%=
shell_HeapBlockFetch(40):s%=
shell_HeapBlockFetch(36):s%!20=0:
shell_OSCheckVersion(3)
y%=-1
!s%=-2
!s%=y%
&400CB,,s%
:!l%=y%:l%!4=KF%:
&400CE,,l%:$(l%!28)=J$:
&400D1,-1,l%!8-&64-s%!20,l%!&C,l%!16+&64-s%!20,l%!20:
shell_HeapBlockReturn(l%):
shell_HeapBlockReturn(s%):
shell_WritableIconHandler(b%,g%,JA%):
YB%,TC%,UC%,e%:
tC%,uC%,pA%,mA%,vA%,bF%,KA%:KA%=
shell_HeapBlockFetch(&400):
&400D3,,KA%:
KA%!0=-1
shell_HeapBlockReturn(KA%):=
&400D6,b%,KA%,&40E000,&E000:TC%=KA%!0:e%=0:
KA%!e%=g%
!tC%=KA%!(e%-4):uC%=KA%!(e%+4)
:e%+=4:
KA%!e%=-1:UC%=KA%!(e%-4):
shell_FakeMouseClick(b%,0,4)
398,394:
g%=UC%
&400D2,b%,TC%,-1,-1,-1,
shell_IconGetData(b%,TC%))
&400D2,b%,uC%,-1,-1,-1,
shell_IconGetData(b%,uC%))
399,410:
g%=TC%
&400D2,b%,UC%,-1,-1,-1,
shell_IconGetData(b%,UC%))
&400D2,b%,tC%,-1,-1,-1,
shell_IconGetData(b%,tC%))
shell_HeapBlockReturn(KA%):=
shell_FakeMouseClick(b%,g%,QC%):
6,&F,1:_Q%!8=QC%:_Q%!&C=b%:_Q%!16=g%:
shell_Action(6):
shell_IconCreate(b%,rA%,dA%,sC%,y%,vC%,wC%,AF%,M$,nA%,VC%,I$):
oE%,h%,dB%,l%:l%=
shell_HeapBlockFetch(40):l%!0=b%:l%!4=rA%:l%!8=dA%:l%!&C=rA%+sC%:l%!16=dA%+y%:l%!20=AF%
wC%<<28
vC%<<24:
l%!20
#oE%=
M$,","):l%!24=nA%:
I$<>""
6dB%=
shell_HeapBlockFetch(
I$+1):$dB%=I$:l%!28=dB%
l%!28=-1
:l%!32=VC%
$(l%+24)=
M$,&B)
&400C2,,l%
shell_HeapBlockReturn(l%):=h%
shell_IconDelete(b%,g%):
shell_DoIconDelete(b%,g%,
shell_IconDelete2(b%,g%):
shell_DoIconDelete(b%,g%,
shell_DoIconDelete(b%,g%,uE%):
a%,EA%,HA%,QA%,YA%:a%=
shell_HeapBlockFetch(40):a%!0=b%:a%!4=g%:
&400CE,,a%:
"Interface_BoundingBox",,a%+8:EA%=a%!8:HA%=a%!&C:QA%=a%!16:YA%=a%!20:
&400CE,,a%
shell_HeapBlockExists(a%!28)
shell_HeapBlockReturn(a%!28)
shell_HeapBlockExists(a%!32)
shell_HeapBlockReturn(a%!32)
&400C4,,a%:
&400D1,b%,EA%,HA%,QA%,YA%
shell_HeapBlockReturn(a%):
shell_IconPutData(IA%,oA%,M$,I):
a%,MA$:MA$=
shell_IconGetData(IA%,oA%):
M$<>MA$
shell_HeapBlockFetch(40):a%!0=IA%:a%!4=oA%:
&400CE,,a%:
(a%!24
(1<<8))<>0
M$>a%!36
shell_MessageNoArgs("SHELLMSG12")
$(a%!28)=M$
$(a%+28)=
M$,&B)
a%!8=0:a%!&C=0:
&400CD,,a%
shell_HeapBlockReturn(a%)
shell_IconPutDataNow(IA%,oA%,M$):
a%:a%=
shell_HeapBlockFetch(50):a%!0=IA%:a%!4=oA%:
&400CE,,a%:
(a%!24
(1<<8))<>0
M$>a%!36
shell_MessageNoArgs("SHELLMSG12")
$(a%!28)=M$
$(a%+28)=
M$,&B)
:a%!8=0:a%!&C=0:
&400CD,,a%:
shell_EnsurePoll:
shell_HeapBlockReturn(a%):
shell_IconNewSprite(IA%,oA%,gA$,I):
l%:l%=
shell_HeapBlockFetch(40):l%!0=IA%:l%!4=oA%:
&400CE,,l%:
&400C4,,l%:l%!4=l%!8:l%!8=l%!&C:l%!&C=l%!16:l%!16=l%!20:l%!20=l%!24:$(l%+24)=gA$:
&400C2,,l%
&400D1,l%!0,l%!4,l%!8,l%!&C,l%!16
shell_HeapBlockReturn(l%):=oA%
shell_IconGetData(IA%,oA%):
W$,l%:l%=
shell_HeapBlockFetch(40):l%!0=IA%:l%!4=oA%:
&400CE,,l%:
(l%!24
(1<<8))<>0
W$=$(l%!28)
W$=$(l%+28)
shell_HeapBlockReturn(l%):=W$
shell_IconMove2(b%,g%,zD%,_D%):
x%:x%=
shell_HeapBlockFetch(40):!x%=b%:x%!4=g%:
&400CE,,x%:x%!8+=zD%:x%!16+=zD%:x%!&C+=_D%:x%!20+=_D%:g%=
shell_IconMove(b%,g%,x%!8,x%!&C,x%!16,x%!20):
shell_HeapBlockReturn(x%):=g%
shell_IconResize(b%,g%,EA%,HA%,QA%,YA%):=
shell_IconMove(b%,g%,EA%,HA%,QA%,YA%)
shell_IconMove(b%,g%,EA%,HA%,QA%,YA%):
n%,WF%,gF%,tA%,a%:
IE%,JE%,LE%,UE%:n%=
shell_HeapBlockFetch(40):a%=
shell_HeapBlockFetch(40):!n%=b%:n%!4=g%:
&400CE,,n%:!a%=b%:a%!4=g%:
&400CE,,a%:
"Interface_BoundingBox",,a%+8:BF%=n%!24:yC%=n%+28
IE%=BF%:JE%=yC%!0:LE%=yC%!4:UE%=yC%!8:tA%=n%!8-a%!8:
&400C4,,n%:
&400D1,!n%,n%!8-tA%,n%!&C-tA%,n%!16+tA%,n%!20+tA%:g%=
shell_CreateIcon2(b%,EA%,HA%,QA%,YA%,IE%,JE%,LE%,UE%,tA%):
shell_HeapBlockReturn(n%):
shell_HeapBlockReturn(a%):=g%
shell_CreateIcon2(h%,EA%,HA%,QA%,YA%,j%,DF%,FF%,GF%,tA%):
u%,DA%,F$,b$,rA%,dA%:DA%=
shell_HeapBlockFetch(60):!DA%=h%:DA%!20=j%:DA%!24=DF%:DA%!28=FF%:DA%!32=GF%:F$="":b$="":
256F$=$(DA%!24)
F$=$(DA%+24)
shell_IconGetCommand(DA%!28,"S")
b$=$(DA%+24)
shell_GetMinXY(j%,F$,b$):
QA%-EA%<rA%
QA%=EA%+rA%
YA%-HA%<dA%
YA%=HA%+dA%
DA%!4=EA%:DA%!8=HA%:DA%!&C=QA%:DA%!16=YA%:
&400C2,,DA%
&400D1,!DA%,DA%!4-tA%,DA%!8-tA%,DA%!&C+tA%,DA%!16+tA%:
&400D3,,DA%:
!DA%=h%:
DA%!4=u%:
&400D2,h%,u%,0,0,-1,0
shell_HeapBlockReturn(DA%):=u%
shell_GetMinXY(j%,F$,b$):
EA%,HA%,QA%,YA%,mA%,vA%:rA%=0:dA%=0:
F$<>""
&40084,j%>>24
,,HA%,,YA%:
&40097,,
(j%>>24)+F$
,EA%,,QA%:
&40088,,EA%
,EA%:
&40088,,QA%
,QA%:rA%=QA%-EA%:dA%=YA%-HA%
rA%=6*eF%+16*
F$:dA%=32
4dA%+=2*jF%
b$<>""
&2002E,296,
shell_UserSpritesBase,b$
,,,mA%,vA%,,XE%;P%:
&20035,XE%,4
,,LF%:mA%=mA%<<LF%:
&20035,XE%,5
,,MF%:vA%=vA%<<MF%:
&800mA%=mA%/2:vA%=vA%/2
539)=19mA%=rA%+mA%
mA%>rA%rA%=mA%
vA%>dA%dA%=vA%
shell_IconGetCommand(WC%,TA$):
I%,W$:
WC%<=0
W$=""
shell_StringUpperCase($WC%),";"+
shell_StringUpperCase(TA$)):
W$=""
$(WC%+I%),
$(WC%+I%)+";",";")-1)
shell_IconRedraw(b%,g%):
a%:a%=
shell_HeapBlockFetch(40):!a%=b%:a%!4=g%:
&400CE,,a%:
"Interface_BoundingBox",,a%+8:
&400D1,b%,a%!8,a%!&C,a%!16,a%!20:
shell_Action(
shell_Poll_I(0,_U%!&94)):
shell_HeapBlockReturn(a%):
shell_IconGetValidation(b%,g%):
a%,I$,j%:
g%=-1
VI$="":a%=
shell_HeapBlockFetch(&64):a%!0=b%:a%!4=g%:
&400CE,,a%:j%=a%!24:
a%!32>0
I$=$(a%!32)
shell_HeapBlockReturn(a%):=I$
shell_IconPutValidation(b%,g%,t$):
a%,j%:a%=
shell_HeapBlockFetch(&64):a%!0=b%:a%!4=g%:
&400CE,,a%:j%=a%!24:
$(a%!32)=t$
shell_HeapBlockReturn(a%):
shell_IsIconSelected(GB%,HB%):
shell_IconGetState(GB%,HB%):j%=_Q%!24:c%=(j%
&200000):
shell_IconSelect(GB%,HB%):
shell_IconSetState(GB%,HB%,&200000,&200000):
shell_IconDeselect(GB%,HB%):
shell_IconSetState(GB%,HB%,0,&200000):
shell_IconGetState(GB%,HB%):!_Q%=GB%:_Q%!4=HB%:
&400CE,,_Q%:
shell_IconSetSelected(b%,g%,WA%):
WA%=0
shell_IconDeselect(b%,g%)
shell_IconSelect(b%,g%)
shell_IconSet(b%,g%,WA%):
WA%=0
shell_IconDeselect(b%,g%)
shell_IconSelect(b%,g%)
shell_IconSetState(GB%,HB%,QF%,VF%):
l%:l%=
shell_HeapBlockFetch(16):!l%=GB%:l%!4=HB%:l%!8=QF%:l%!&C=VF%:
&400CD,,l%:
shell_HeapBlockReturn(l%):
shell_IconUnselectable(h%,zB%):
shell_IconSetState(h%,zB%,&400000,&40000):
shell_IconSetBGColour(b%,g%,VB%):
VB%<0
VB%>&F
shell_MessageOneArg("SHELLMSG24","PROCshell_IconSetBGColour")
shell_IconSetState(b%,g%,VB%<<28,&F0000000):
shell_IconSetFGColour(b%,g%,VB%):
VB%<0
VB%>&F
shell_MessageOneArg("SHELLMSG24","PROCshell_IconSetFGColour")
shell_IconSetState(b%,g%,VB%<<24,&F000000):
shell_CaretSetPosition(IA%,oA%,sE%,yE%,PA%,pA%):
&400D2,IA%,oA%,sE%,yE%,PA%,pA%:
shell_IconSetButtonType(b%,g%,_B%):
_B%=&C
_B%=&D
shell_MessageOneArg("SHELLMSG23","PROCshell_IconSetButtonType")
_B%<0
_B%>&F
shell_MessageOneArg("SHELLMSG22","PROCshell_IconSetButtonType")
shell_IconSetState(b%,g%,_B%<<&C,&F000):
shell_IconSetESG(b%,g%,iB%):
iB%<0
iB%>31
shell_MessageOneArg("SHELLMSG25","PROCshell_IconSetESG")
shell_IconSetState(b%,g%,iB%<<16,&1F0000):
shell_IconSetText(b%,g%,_%):
_%<>0
_%=1<<0
shell_IconSetState(b%,g%,_%,1<<0):
shell_IconSetSprite(b%,g%,_%):
_%<>0
_%=1<<1
shell_IconSetState(b%,g%,_%,1<<1):
shell_IconSetBorder(b%,g%,_%):
_%<>0
_%=1<<2
shell_IconSetState(b%,g%,_%,1<<2):
shell_IconSetHCentred(b%,g%,_%):
shell_IconSetState(b%,g%,0,1<<9):
_%<>0
_%=1<<3
shell_IconSetState(b%,g%,_%,1<<3):
shell_IconSetVCentred(b%,g%,_%):
_%<>0
_%=1<<4
shell_IconSetState(b%,g%,_%,1<<4):
shell_IconSetFilled(b%,g%,_%):
_%<>0
_%=1<<5
shell_IconSetState(b%,g%,_%,1<<5):
shell_IconSetRightJust(b%,g%,_%):
shell_IconSetHCentred(b%,g%,0):
_%<>0
_%=1<<9
shell_IconSetState(b%,g%,_%,1<<9):
shell_IconSetLeftJust(b%,g%):
shell_IconSetHCentred(b%,g%,0):
shell_IconSetRightJust(b%,g%,0):
shell_IconSetUnselectable(b%,g%,WA%):
WA%<>0
WA%=1<<22
shell_IconSetState(b%,g%,WA%,1<<22):
WA%<>0
BKA%=
shell_HeapBlockFetch(24):
&400D3,,KA%:
!KA%=b%
KA%!4=g%
&400D2,-1
shell_HeapBlockReturn(KA%)
shell_CaretSetRight(b%,g%):
&400D2,b%,g%,-1,-1,-1,
shell_IconGetData(b%,g%)):
print_text(F,G,F$):
in(F,G-32,F+16*
(F$),G)
in(A%,B%,C%,D%):
newvals:Y=_Q%!28:Q=_Q%!32:Z=_Q%!36:P=_Q%!40:T=_Q%!4:V=_Q%!8:U=_Q%!&C:O=_Q%!16:K=_Q%!20:L=_Q%!24:R=U-T:S=O-V:d=K:e=K+R:a=L:b=L-S:
max(BA%,eA%):
BA%<eA%
shell_Leaf(N$):
N$,"."):N$=
N$,".")+1):
shell_Branch(e$):
CA%,v$,c%:
e$,".")=0
v$=""
c%=0:
:CA%=c%+1:c%=
e$,".",CA%):
c%=0:v$=
e$,CA%-2)
gname(C):w$="":
?C<>0
?C<>&D:w$=w$+
?C:C+=1:
shell_WindowResize(IA%,PF%,TF%,gE%,lE%,YC%):!_Q%=PF%:_Q%!4=TF%:_Q%!8=gE%:_Q%!&C=lE%:
&400D7,IA%,_Q%:
)_Q%!0=IA%:
&400CC,,_Q%:
&400C5,,_Q%
shell_WindowRetitle(
IA%,Q$):
c%,p%,h%,pD%:p%=
shell_HeapBlockFetch(6000):p%!0=IA%:
&400CC,,p%:
((p%!60)
256)=0
Ac%=p%+76:$c%=
Q$,&B):
&400C3,,p%:
&400C1,,p%+4
h%<>IA%
shell_UpdateWindowHandle(IA%,h%):IA%=h%
pD%=p%!84:$(!(p%+76))=
Q$,pD%-1):
((p%!32)
(1<<16))<>0
&400D1,-1,p%!4,p%!16,p%!&C,p%!16+44
shell_HeapBlockReturn(p%)
shell_WindowTitleIndirected(wB%):
(1<<8))=(1<<8)
shell_ScreenToWindowCoords(_E%,
DD%,qD%,lF%,rD%,sD%,WB%:WB%=
shell_HeapBlockFetch(600):DD%=WB%:!DD%=_E%:
&400CC,,DD%:qD%=WB%!4:fE%=WB%!16:rD%=WB%!20:sD%=WB%!24:X%=X%+(rD%-qD%):Y%=Y%+(sD%-fE%):
shell_HeapBlockReturn(WB%):
shell_WimpSlotReadEnd:
&400EC,-1,-1
jB%:=jB%
shell_WimpSlotClaimMemory(jB%,ZA%):
&400EC,jB%+ZA%,-1
ED%<jB%+ZA%
shell_WimpSlotReleaseMemory:
&400EC,jB%,-1:
shell_MouseLimit(A,IA%):A!0=IA%:
&400CB,,A:
mouse_rectangle(A!4,A!8,A!&C-A!4,A!16-A!8):
shell_NameOfFirstSprite(UA$):
X%,N%,x$:X%=
(UA$):
#X%=4:N%=
#X%:N%+=
#X%*256:N%+=
#X%*65536:N%+=
#X%*&1000000:
#X%=N%:x$="":
&B:x$+=
#X%):
#X%:=x$
InitialiseSpriteArea(S%,jE%):!S%=jE%:S%!8=16:
46,9+256,S%:
shell_ListEvents(b%,u%):
k%,a$:
b%=-1
b%=-2
shell_Tracef0("MenuSelection="+
shell_GetEventHandler(b%,u%,0)):
shell_Tracef0("MenuMaker ="+
shell_GetEventHandler(b%,u%,1)):
shell_Tracef0("ClickSelect ="+
shell_GetEventHandler(b%,u%,2))
shell_Tracef0("ClickAdjust ="+
shell_GetEventHandler(b%,u%,3)):
shell_Tracef0("Redraw ="+
shell_GetEventHandler(b%,u%,4)):
shell_Tracef0("Keypress ="+
shell_GetEventHandler(b%,u%,5))
shell_Tracef0("Drag ="+
shell_GetEventHandler(b%,u%,6)):
shell_Tracef0("Menu Warning ="+
shell_GetEventHandler(b%,u%,7)):
shell_Tracef0("HelpTag ="+
shell_GetEventHandler(b%,u%,8)):k%=
shell_GetEventMenu(2,b%,u%):
a$="None"
shell_Tracef0("Menu handle =&"+a$):
shell_HeapManagerInit(N$,kE%):
kB%900:
("LOAD "+N$+"heapcode "+
~kB%):
kB%+0,kE%:
shell_HeapBlockExists(nA%):
nA%<&8000
99,"No heapblock defined at this address"
shell_HeapBlockInfo(nA%):
shell_HeapBlockExtend(BA%,eA%):
kB%+&C,BA%,eA%:=BA%
shell_HeapBlockFetch(BA%):
kB%+4,nA%,BA%:=nA%
shell_HeapBlockReturn(
BA%):
shell_HeapBlockExists(BA%)
kB%+8,BA%
BA%=0:
shell_HeapBlockInfo(BA%):
29,6,!(kB%+28),BA%
,,,M:=M
shell_OSVarExists(JB%,y$):
&20023,y$,JB%,-1,0,0
shell_OSVarGetVal(JB%,ZA%,y$,W):
z$,B,nE%:
&20023,y$,JB%,ZA%,0,-3*(W=
,,B,nE%,w%:
B-1:z$=z$+
(JB%?r%):
r%:=z$
shell_OSReadCommandArg(X):
FD%,S$,d%:S$="":d%=0:
FD%?d%<>0:S$+=
(FD%?d%):d%+=1:
1:S$=
34)+1):S$=
34)+2)
shell_StringStripTrailing(B$,T$):
B$,1)=T$:B$=
(B$)-1):
shell_StringStripLeading(B$,T$):
B$,1)=T$:B$=
B$,2):
shell_StringStripAll(B$,T$):
D,E:D=
B$,T$):
B$,E-1)+
B$,E+1)
D:=B$
shell_StringPadTrailing(B$,T$,uA%):
(B$)<uA%:B$=B$+
(B$),T$):
shell_StringPadLeading(B$,T$,uA%):
(B$)<uA%:B$=
(B$),T$)+B$:
shell_StringUpperCase(B$):
(B$)>0
(B$):
B$,r%,1)>="a"
B$,r%,1)<="z"
B$,r%,1)=
B$,r%,1))
shell_StringExchange(B$,AA$,VA$):
B$,AA$)
G0pA%=
B$,AA$):B$=
B$,pA%-1)+VA$+
B$,pA%+
shell_StringArrayGetLongest(A$(),aC%):
r%,bC%:bC%=0:
(A$(r%))>bC%
(A$(r%))
r%:=bC%
mem_to_string(vD%,d%,tE%):
vD%?d%<>tE%:B$+=
(vD%?d%):d%+=1:
shell_FileLength(c$):
w%,ZC%,fC%,uA%,hB%,B$:
8,5,c$
w%,,ZC%,fC%,uA%,hB%:=uA%
shell_TraceOn:_U%!48=
shell_BroadcastMessage(&43B00,"ShellDBug:TraceOn"):
shell_TraceOff:_U%!48=
shell_BroadcastMessage(&43B00,"ShellDBug:TraceOff"):
shell_TraceInit(h$):
GA%,a%,E$,D$:
h$<>""
(h$):_U%!44=GA%
shell_HeapBlockFetch(256):D$=
shell_OSVarGetVal(a%,256,"Obey$Dir",1):E$=
shell_Leaf(D$),2):
shell_BroadcastMessage(&43B00,"ShellDBug:Init Debug messages from "+E$):
shell_HeapBlockReturn(a%):
_U%!&64
_U%!&64=(_U%!&64
1<<4)
shell_TraceIsOn:=_U%!48
shell_Tracef0(LA$):
shell_TraceIsOn)
_U%!44<>-1
GA%=_U%!44:
#GA%,LA$
_U%!&94>0
shell_BroadcastMessage(&43B00,"ShellDBug:Trace "+LA$)
shell_Tracef2(nA%):
("MEDIT "+
~nA%):
shell_TraceExit:
_U%!44<>-1
#(_U%!44):_U%!44=-1
shell_AttachHotKey(JA$,cB%,gB%,nB%,K$,b%,R$,X$):
v%,d%,c%,z%,JA%,GD%:GD%=
_U%!60=0
3_U%!60=
shell_HeapBlockFetch(24):d%=0:_U%!&B4=1
d%=_U%!&B4*24:_U%!60=
shell_HeapBlockExtend(_U%!60,24):_U%!&B4=(_U%!&B4)+1
:v%=_U%!60:
"F1":JA%=385
"F2":JA%=386
"F3":JA%=387
"F4":JA%=388
"F5":JA%=389
"F6":JA%=390
"F7":JA%=391
"F8":JA%=392
"F9":JA%=393
"F10":JA%=458
"F11":JA%=459
JA%=(
JA$)-64:GD%=
JA%+=16
JA%+=32
:c%=v%+d%:c%!0=JA%:c%?4=cB%:c%?5=gB%:c%?6=nB%:c%!8=
shell_HeapBlockFetch(
K$+1):z%=c%!8:$z%=K$:
shell_SearchStatic(_U%!&B8,b%):
d%=-1
shell_MessageNoArgs("SHELLMSG09")
:c%!&C=b%:c%!16=
shell_HeapBlockFetch(
R$+1):z%=c%!16:$z%=R$:c%!20=
shell_HeapBlockFetch(
X$+1):z%=c%!20:$z%=X$:
shell_HotKeyProcess(JA%):
v%,q%,m%,f%,y%,i$,R$,X$:
gB%,cB%,nB%,qA%,sA%,wB%,ZF%,d%:
UA%,p%:v%=_U%!60:q%=_U%!&B4*24:m%=
:f%=0:
v%!f%=JA%
f%+=24
f%>=q%:
dc%=v%+f%:i$=$(c%!8):
shell_Tracef0("HotKeyProcess:Template name is '"+i$+"'"):
(i$<>""
c%!&C=0)
shell_CreateWindow(i$,y%):
shell_Tracef0("HotKeyProcess:Creating new dynamic window (handle is &"+
~y%+")"):p%=
shell_HeapBlockFetch(36):p%!0=y%:
&400CB,,p%:qA%=(p%!4-p%!&C)/2:sA%=(p%!16-p%!8)/2:
shell_HeapBlockReturn(p%)
:R$=$(c%!16):
R$<>""
shell_Tracef0("HotKeyProcess:Calling Pre-Open FN '"+R$+"'"):
c%!&C>0
("FN"+R$+"("+
c%!&C+")")
("FN"+R$+"("+
y%+")")
shell_Tracef0("HotKeyProcess:No Pre-Open FN registered")
shell_SearchStatic(_U%!&B8,c%!&C):
d%>-1
shell_OpenWindowStatic(c%!&C)
c%!&C>0
shell_MessageNoArgs("SHELLMSG09")
shell_OpenWindowDynamic(y%,qA%,sA%)
:X$=$(c%!20):
X$<>""
shell_Tracef0("HotKeyProcess:Calling Post-Open FN '"+X$+"'"):
c%!&C>0
1 o%=
("FN"+R$+"("+
c%!&C+")")
("FN"+X$+"("+
y%+")")
shell_Tracef0("HotKeyProcess:No Post-Open FN registered")
:UA%=
i$="":R$="":X$="":UA%=
:=UA%
shell_WindowCentreOnPointer(y%):
s%,BC%,qA%,sA%:BC%=
shell_HeapBlockFetch(20):
&400CF,,BC%:p%=
shell_HeapBlockFetch(36):p%!0=y%:
&400CB,,p%:qA%=(p%!4-p%!&C)/2:sA%=(p%!16-p%!8)/2:
shell_WindowMoveTo(y%,BC%!0+qA%,BC%!4-sA%)
shell_HeapBlockReturn(p%):
shell_HeapBlockReturn(BC%):
shell_WindowCentreOnScreen(y%):
s%,dC%,eC%,lA%,PA%,mB%,LB%:
&20035,-1,4
,,mB%:
&20035,-1,5
,,LB%:
&20035,-1,&B
,,dC%:
&20035,-1,&C
,,eC%:dC%=dC%<<mB%:eC%=eC%<<LB%:p%=
shell_HeapBlockFetch(36):p%!0=y%:
&400CB,,p%:lA%=(p%!&C-p%!4)
`ePA%=(p%!16-p%!8):
shell_WindowMoveTo(y%,(dC%/2)-(lA%/2),(eC%-PA%)/2):
shell_HeapBlockReturn(p%):
shell_OpenWindowStaticNewView(b%):
shell_OpenWindow(b%,
,-1):
shell_OpenWindowStatic(h%):
shell_SearchStatic(_U%!&B8,h%)>-1
shell_OpenWindow(h%,0,-1)
shell_SearchStatic(aA%,h%):
m%,e%:m%=-1:e%=0:
aA%<>0
aA%!e%<>-1:
aA%!e%=h%
m%=e%:=m%
:e%+=4:
shell_CreateWindowStatic(BA$,
XB%,aA%,c%,d%:XB%=
shell_GetWB(BA$):XB%!64=_U%!16:
&400C1,,XB%
h%:aA%=_U%!&B8:
aA%=0
shell_Tracef0("CreateWindowStatic:Empty List"):_U%!&B8=
shell_HeapBlockFetch(8):aA%=_U%!&B8:aA%!0=h%:aA%!4=-1
shell_Tracef0("CreateWindowStatic:Searching for window handle"):d%=
shell_SearchStatic(_U%!&B8,h%):
d%=-1
shell_Tracef0("CreateWindowStatic:Not found - adding window handle to list"):d%=
shell_SearchStatic(_U%!&B8,0):
d%=-1
shell_Tracef0("CreateWindowStatic:Extending window handle list"):e%=0:
aA%!e%<>-1:e%+=4:
:_U%!&B8=
shell_HeapBlockExtend(_U%!&B8,4):aA%=_U%!&B8
shell_Tracef0("CreateWindowStatic:Found unused space in list"):e%=d%
:c%=aA%+e%:c%!0=h%:c%!4=-1
shell_InitHelpSystem(N$,JF%):
CA$,CA%,fA%,Y$,JD%,KD%:_U%!&D4=0:
_U%!&D8<>0
shell_HeapBlockReturn(_U%!&D8)
@_U%!&D8=0:
shell_ScanForHelp:
CA$=" -DieWithTask"
CA$=""
_U%!&64
N$="":fA%=
shell_HeapBlockFetch(256):Y$=
shell_OSVarGetVal(fA%,256,
shell_GetAppName+"Res$Path",-1):
shell_HeapBlockReturn(fA%):
:CA%=
Y$,","):
CA%>0
shell_FileExists(
Y$,CA%-1)+
shell_GetAppName)
Y$,CA%-1)+
shell_GetAppName:JD%=
Y$,CA%+1)
shell_FileExists(Y$+
shell_GetAppName)
!N$=Y$+
shell_GetAppName:JD%=
shell_OK(
shell_MessageOneArg("SHELLMSG26",
shell_GetAppName))
N$<>""
KD%=0
shell_StrongHlpMsg("Help_Install "+N$+CA$)
shell_HelpWord(EA$):
XF%,c%,AA%:AA%=
shell_HeapBlockFetch(512):
_U%!&D0=-1
shell_OSVarExists(AA%,"StrongHelp$Dir")
&600DE,"<StrongHelp$Dir>":
_U%!&D8<>0
shell_HeapBlockReturn(_U%!&D8)
<_U%!&D8=
shell_HeapBlockFetch(
EA$+1):c%=_U%!&D8:$c%=EA$
shell_HeapBlockReturn(AA%):
shell_OK(
shell_MessageNoArgs("SHELLMSG11"))
shell_StrongHlpMsg("Help_Word "+EA$)
shell_HeapBlockReturn(AA%):
shell_StrongHlpMsg(n$):
shell_BroadcastMessage(&43B00,n$):
shell_ScanForHelp:
IB%,hC%:IB%=
shell_HeapBlockFetch(256):
:IB%!&C=0:
&400E7,19,IB%,-2,_U%!&D4
,,hC%:_U%!&D4=_U%!&D4+1:
hC%<>-1
(_U%!&D4)>64:
hC%<>-1
@IB%!0=24:IB%!&C=0:IB%!16=&400C6:IB%!20=hC%:
&400E7,17,IB%,0
shell_HeapBlockReturn(IB%):
shell_BroadcastMessage(RF%,n$):
x%,LD%:LD%=(
n$+30)
3:x%=
shell_HeapBlockFetch(LD%):x%!&C=0:x%!16=RF%:$(x%+20)=n$+
(0):x%!0=LD%:
&600E7,17,x%,0:
shell_HeapBlockReturn(x%):
shell_WindowToggleBackIcon(
shell_WindowToggleFlags(b%,1<<24):
shell_WindowToggleCloseIcon(
shell_WindowToggleFlags(b%,1<<25):
shell_WindowToggleTitleBar(
shell_WindowToggleFlags(b%,1<<26):
shell_WindowToggleToggleIcon(
shell_WindowToggleFlags(b%,1<<27):
shell_WindowToggleHScrollBar(
shell_WindowToggleFlags(b%,1<<30):
shell_WindowToggleAdjustSizeIcon(
shell_WindowToggleFlags(b%,1<<29):
shell_WindowToggleVScrollBar(
shell_WindowToggleFlags(b%,1<<28):
shell_WindowToggleFlags(
b%,oB%):
a%,j%,YC%,h%:
shell_Tracef0("WindowToggleFlags:wh%=&"+
~b%):YC%=
shell_WindowIsOpen(b%):a%=
shell_HeapBlockFetch(6000):a%!0=b%:
&400CC,,a%:j%=a%!32:j%=(j%
oB%):a%!32=j%:
&400C3,,a%:
&400C1,,a%+4
h%:!a%=h%:
&400C5,,a%
shell_HeapBlockReturn(a%):
h%<>b%
shell_UpdateWindowHandle(b%,h%):b%=h%
shell_ListClickSelect:
v%,f%,q%,c%,z%:v%=_U%!&C:q%=
shell_HeapBlockInfo(v%):
shell_Tracef0(" "):
shell_Tracef0("List of ClickSelect events:"):f%=0:
:c%=v%!(f%+20):z%=v%+f%:
shell_HeapBlockExists(c%)
$c%<>""
shell_Tracef0("&"+
shell_StringPadTrailing(
~z%!0," ",8)+" &"+
shell_StringPadTrailing(
~z%!4," ",8)+" "+$c%)
:f%+=48:
(f%>=q%):
shell_Tracef0(" "):
shell_ListClickAdjust:
v%,f%,q%,c%,z%:v%=_U%!&C:q%=
shell_HeapBlockInfo(v%):
shell_Tracef0(" "):
shell_Tracef0("List of ClickAdjust events:"):f%=0:
:c%=v%!(f%+24):z%=v%+f%:
shell_HeapBlockExists(c%)
$c%<>""
shell_Tracef0("&"+
shell_StringPadTrailing(
~z%!0," ",8)+" &"+
shell_StringPadTrailing(
~z%!4," ",8)+" "+$c%)
:f%+=48:
(f%>=q%):
shell_Tracef0(" "):
shell_ListHelpTags:
v%,f%,q%,c%,z%:v%=_U%!&C:q%=
shell_HeapBlockInfo(v%):
shell_Tracef0(" "):
shell_Tracef0("List of attached help tags:"):f%=0:
:c%=v%!(f%+44):z%=v%+f%:
shell_HeapBlockExists(c%)
$c%<>""
shell_Tracef0("&"+
shell_StringPadTrailing(
~z%!0," ",8)+" &"+
shell_StringPadTrailing(
~z%!4," ",8)+" "+$c%)
:f%+=48:
(f%>=q%):
shell_Tracef0(" "):
shell_MemFill(CC%,CE%,DE%):
I%,iC%,ND%:iC%=CE%
4:ND%=CE%
iC%>0
(iC%*4)
4:CC%!(I%-1)=DE%:
ND%>0
.CC%=CC%+(iC%*4):
ND%-1:CC%?I%=DE%:
shell_AttachFontMenu(b%,g%,H$,OA$):
shell_FontMenuInit:
"FontMenu_Select",""+
0,_U%!260
,k%:_U%!&FC=k%:
shell_EventAdd(b%,g%,0,-2,H$):
shell_Tracef0("AttachFontMenu:Attaching font menu"):
OA$<>""
shell_AttachMenuMaker(b%,g%,OA$)
shell_AttachFontSubMenu(zA%,C$,H$):
kF%,k%,c%,e%:
shell_FontMenuInit:
"FontMenu_Select",""+
0,_U%!260
&45BCE,zA%,k%:
&45BCC,,
:_U%!&FC=k%:
shell_EventListMenuWarn(zA%,k%,C$,H$):
shell_Tracef0("AttachFontSubMenu:Attaching font menu &"+
~k%):
shell_FontMenuInit:
("RMEnsure FontMenu 1.16 RMLoad <EvntShellSystem$Path>FontMenu"):
("RMEnsure FontMenu 1.16 Error Couldn't load FontMenu module"):
_U%!&F0=-1
"FontMenu_Create"
_U%!&F0
shell_FontMenuSelectFont("",
shell_FontMenuSelectFont(o$,OD%):
c%,yA%:
shell_HeapBlockExists(_U%!&F4)
shell_HeapBlockReturn(_U%!&F4)
H_U%!&F4=
shell_HeapBlockFetch(
o$+1):c%=_U%!&F4:$c%=o$:
OD%<>0
OD%=1
B_U%!260=OD%:
"FontMenu_Select",o$,_U%!260
,yA%:
yA%<>_U%!&FC
shell_FontMenuUpdatePtr(yA%):_U%!&FC=yA%
shell_Tracef0("FontMenuSelectFont:Font is '"+o$+"'"):
shell_FontMenuGetLastSelectedFont:
shell_HeapBlockExists(_U%!&F4)
c%=_U%!&F4:=$c%
shell_FontMenuUpdatePtr(f%):
v%,e%:
shell_Tracef0("FontMenuUpdatePtr:Started.."):
shell_HeapBlockExists(_U%!&DC)
shell_Tracef0("FontMenuUpdatePtr:HeapBlock found.."):v%=_U%!&DC:e%=0:
shell_Tracef0("FontMenuUpdatePtr:Substituting ptr.."):v%!(e%+8)=f%:e%+=&C:
v%!e%=-1
shell_MenuUpdateHandle(FE%,GE%):
q%,f%,i%,k%:q%=
shell_HeapBlockInfo(_U%!&C)-8:f%=0:m%=
:i%=_U%!&C:
:k%=i%!(f%+8):
k%=FE%
i%!(f%+8)=GE%
V+f%+=48:
(f%>=q%):
_U%!24=FE%
_U%!24=GE%
shell_FindFont(
Z$,jC%,kC%,
QD%):
shell_FontIsAvailable(Z$,jC%,kC%)
Z$="Trinity.Medium"
&40081,,Z$,jC%*16,kC%*16,0,0
shell_FontIsAvailable(Z$,jC%,kC%):
&40081,0,Z$,jC%*16,kC%*16,0,0
&40082,QD%:=
shell_CheckSelection(mE%):
c%,e%:c%=_U%!256:
_U%!24=_U%!&FC
mE%!e%<>c%!e%
e%+=4:
c%!e%=-1:=e%
shell_MenuGetItemAddress(k%,KE%):
e%,SB%:
&45BC7,k%
:SB%=k%+28+((KE%!e%)*24):k%=SB%!4:e%+=4:
KE%!e%=-1:=SB%
shell_GetLastMouseXPos:=_U%!272
shell_GetLastMouseYPos:=_U%!276
shell_UpdateWindowHandle(RA%,LA%):
shell_Tracef0("UpdateWindowHandle:Updating stored window handles"):
shell_Tracef0("UpdateWindowHandle:old handle=&"+
~RA%):
shell_Tracef0("UpdateWindowHandle:new handle=&"+
~LA%):
LA%<>RA%
_U%!28=RA%
_U%!28=LA%
shell_FixEventBlock(RA%,LA%,_U%!&C,48):
shell_FixEventBlock(RA%,LA%,_U%!96,16):
shell_FixEventBlock(RA%,LA%,_U%!72,24):
shell_FixEventBlock(RA%,LA%,_U%!92,24):
shell_FixEventBlock(RA%,LA%,_U%!&68,16):
shell_UpdateStaticWindows(RA%,LA%)
shell_UpdateStaticWindows(RA%,LA%):
d%,aA%:
shell_Tracef0("UpdateStaticWindows:Correcting static window list.."):aA%=_U%!&B8:d%=
shell_SearchStatic(_U%!&B8,RA%):aA%!d%=LA%:
shell_FixEventBlock(RA%,LA%,i%,d%):
f%,q%:
shell_HeapBlockExists(i%)
shell_HeapBlockInfo(i%)-8:
(i%!f%=RA%)
i%!f%=LA%
:f%+=d%:
(f%>=q%)
shell_IconSelectAll(b%):
a%,I%:a%=
shell_HeapBlockFetch(&7D0):I%=a%+64:!a%=b%:a%!8=1<<21:a%!&C=1<<21:
&400D6,!a%,I%,5<<21,0<<21:
!I%>-1:a%!4=!I%:
&400CD,,a%:I%+=4:
shell_HeapBlockReturn(a%):
shell_IconDeselectAll(b%):
a%,I%:a%=
shell_HeapBlockFetch(&7D0):I%=a%+64:!a%=b%:a%!8=0:a%!&C=1<<21:
&400D6,!a%,I%,5<<21,1<<21:
!I%>-1:a%!4=!I%:
&400CD,,a%:I%+=4:
shell_HeapBlockReturn(a%):
shell_Message_SaveDesktop(Q%):
FA$:FA$="Run "+
shell_GetAppDir+
&C,2,Q%!20,FA$,
shell_MessagesInit(L$,
ME%):
ZA%,j%:
3,"Cannot open message file '"+L$+"'"
&41500,,L$
j%,,ZA%:
ME%=0
shell_HeapBlockFetch(ZA%)
30,6,,,17+
,,lC%:$(lC%+16)=L$:
&41501,lC%,lC%+16:
shell_Tracef0("MessagesInit:Message resource file '"+L$+"' loaded"):
shell_PrinterOnLine:
NE%,OE%:NE%=
(-4):
2,1,0,1,0,1,0:
>30:OE%=
(-4)<NE%):*FX21,3
3:=OE%
shell_AttachBumpHandler(b%,g%,PE%,QE%,vE%,wE%,RE%,xE%,GA$,HA$):
XA%,d%,c%,z%,hA%:d%=
shell_GetEventListOffset(b%,PE%,_U%+&68,16,
):XA%=_U%!&68+d%:XA%!0=b%:XA%!4=PE%:XA%!8=RE%:XA%!&C=
shell_HeapBlockFetch(24):hA%=XA%!&C:hA%!0=g%:hA%!4=vE%:hA%!8=wE%
GA$>0
.<hA%!&C=
shell_HeapBlockFetch((
GA$)+1):z%=hA%!&C:$z%=GA$
hA%!&C=0
HA$>0
4<hA%!16=
shell_HeapBlockFetch((
HA$)+1):z%=hA%!16:$z%=HA$
hA%!16=0
xE%=-1
hA%!20=1
hA%!20=0
;sd%=
shell_GetEventListOffset(b%,QE%,_U%+&68,16,
):XA%=_U%!&68+d%:XA%!0=b%:XA%!4=QE%:XA%!8=RE%*(-1):XA%!&C=hA%:
shell_HandleBumpIcons(d%,b%,g%,_button%):
mF%,FA%,XA%,FC%,_temp$,SD%:
aF%,OB%:
_button%<>2
JRXA%=_U%!&68+d%:_U%!288=b%:_U%!292=g%:_U%!296=d%:FA%=XA%!&C:SD%=FA%!16:
SD%<>0
TC_temp$=
shell_IconGetData(b%,FA%!0):FC%=
("FN"+$SD%+"(_temp$)")
shell_IconGetData(b%,FA%!0))
_button%=1
[ _new_val%=FC%+((XA%!8)*(-1))
_new_val%=FC%+XA%!8
FA%!20=0
_new_val%>FA%!8
_new_val%=FA%!8
_new_val%<FA%!4
_new_val%=FA%!4
_new_val%>FA%!8
_new_val%=FA%!4
_new_val%<FA%!4
_new_val%=FA%!8
:OB%=FA%!&C:
OB%<>0
j1_new_val$=
("FN"+$OB%+"(_new_val%,_button%)")
_new_val$=
_new_val%
_new_val%<>FC%
shell_IconPutData(b%,FA%!0,_new_val$,-1)
shell_WindowSetSpriteArea(y%,TD%):
a%,LA%,zB%,UD%:a%=
shell_HeapBlockFetch(6000):!a%=y%:
&400CC,,a%:a%!68=TD%:
shell_IconSetSpriteArea(a%!60,a%+76,TD%):
(a%!88)>0
zB%=0
(a%!88)-1:UD%=a%+92+zB%*32:
shell_IconSetSpriteArea(UD%!16,UD%+20,TD%):
&400C3,,a%:
&400C1,,a%+4
LA%<>y%
shell_UpdateWindowHandle(y%,LA%):y%=LA%
shell_HeapBlockReturn(a%):=y%
shell_IconSetSpriteArea(j%,GC%,EF%):
3)=2)
256)<>0)
GC%!4=EF%
shell_StrongHlpIsAvailable:
BB%,AA%:AA%=
shell_HeapBlockFetch(256):BB%=
shell_OSVarExists(AA%,"StrongHelp$Dir"):
shell_HeapBlockReturn(AA%):=BB%
shell_MenuNew(Q$):
&45BC1,,Q$
h%:=h%
shell_MenuAdd(h%,QA$,H$):
H$<>""
&45BC2,h%,QA$,H$
&45BC2,h%,QA$
:=WD%
shell_MenuTick(gA%,WA%):
&45BC9,gA%,WA%:
shell_MenuTickOnly1(SA%,CA%):
&45BD1,SA%,CA%:
shell_MenuTickOnly2(gA%):
&45BD1,gA%:
shell_MenuShade(h%,WA%):
&45BCB,h%,WA%:
shell_MenuDotted(gA%,WA%):
&45BCA,gA%,WA%:
shell_MenuColours(gA%,vC%,wC%):
&45BD0,gA%,vC%,wC%:
shell_MenuWritable(gA%,WA%,ZA%,t$):
&45BCD,gA%,WA%,ZA%,t$:
shell_MenuPutData(gA%,M$):
&45BC8,gA%,M$:
shell_MenuCallHandler(y%,_h_blk%):
("FN"+$y%+"(_h_blk%)")
shell_AttachOpenWindow(b%,A$):
a%,c%,d%:
shell_Tracef0("AttachOpenWindow:Attaching OpenWindow Handler"):
shell_MessageOneArg("SHELLMSG27","AttachOpenWindow")
shell_GetEventListOffset(b%,-1,_U%+304,&C,
):a%=_U%!304+d%:a%!0=b%:a%!4=-1:a%!8=
shell_HeapBlockFetch(
(A$)+1):c%=a%!8:$c%=A$:
shell_AttachCloseWindowHandler(b%,A$):
a%,c%,d%:
shell_Tracef0("AttachCloseWindowHandler:Attaching CloseWindow Handler"):
shell_MessageOneArg("SHELLMSG27","AttachCloseWindow")
shell_GetEventListOffset(b%,-1,_U%+308,&C,
):a%=_U%!308+d%:a%!0=b%:a%!4=-1:a%!8=
shell_HeapBlockFetch(
(A$)+1):c%=a%!8:$c%=A$:
shell_SpriteRename(eB%,XA$,YA$):
46,512+26,eB%,
shell_SpriteGetPtr(eB%,XA$),YA$:
shell_SpriteAreaSave(eB%,L$):
46,512+&C,eB%,L$:
shell_EnsurePoll:
shell_Poll_I(0,_U%!&94):
shell_Action(_%):
_%=0:
shell_WimpGetVersion:=_U%!316
shell_OSCheckVersion(YD%):=
shell_OSModuleCheckVersion("UtilityModule",YD%)
shell_OSModuleCheckVersion(ZA$,YD%):
a%,VC%:a%=
shell_HeapBlockFetch(256):
("Set AppName$RISCOS Y"):
("RMEnsure "+ZA$+" "+
YD%+" Set AppName$RISCOS N"):
&20023,"AppName$RISCOS",a%,256,0,0
,,VC%:a%?VC%=&D:
("Unset AppName$RISCOS")
shell_HeapBlockReturn(a%):
$a%="N"
shell_MessageSendDataLoad(w%,O$):
x%:x%=
shell_HeapBlockFetch(256):x%!0=256:x%!4=0:x%!16=5:x%!20=0:x%!28=0:x%!32=0:x%!36=0:x%!40=w%:$(x%+44)=O$+
&400E7,17,x%,0:
shell_HeapBlockReturn(x%):
shell_MenuMakeFromFile(Q$,aA$,h$):
h%,X%,B$,o%:
shell_FileExists(h$)
cTh%=
shell_MenuNew(Q$):X%=
(h$):
#X%:o%=
shell_MenuAdd(h%,B$,aA$):
shell_BinarySearch(_search_term$,bA$,g$,IF%,ZD%):
_pos%,iA%,_wp$,nC%,iF%,aD%,bD%,YE%,m%,cD%:ZD%+=1:cD%=
:iA%=ZD%:nC%=0:_pos%=iA%
2:bD%=IF%-1:aD%=ZD%:
:_wp$=
("FN"+bA$+"(_pos%)"):dD%=_pos%:
_search_term$=_wp$
("FN"+g$+"(_search_term$,_wp$)")
+aD%=_pos%:iA%=_pos%-bD%:_pos%=iA%
2+nC%
bD%=_pos%:nC%=_pos%:iA%=aD%-_pos%:_pos%=iA%
2+nC%
YE%=dD%
!YE%=dD%:
shell_IconLastClicked:=_U%!32
shell_MenuGetNrItems(SA%):
k%,UA%,ZE%:
&45BC7,SA%
k%:k%+=28:
:UA%=(k%?0
&80):ZE%+=1:k%+=24:
UA%:=ZE%
shell_MenuGetNrDotted(SA%):
k%,UA%,aC%:
&45BC7,SA%
k%:k%+=28:
:UA%=(k%?0
&80):
(k%?0
aC%+=1
k%+=24:
UA%=-1:=aC%
shell_MenuGetItemHandler(SA%,HC%):
TA%,f%,IA$:TA%=
shell_HeapBlockFetch(8):TA%!0=HC%:TA%!4=-1:
&45BC4,SA%,TA%
IA$=""
IA$=$(f%)
shell_HeapBlockReturn(TA%):=IA$
shell_MenuGetItemText(SA%,HC%):
TA%,f%,F$:TA%=
shell_HeapBlockFetch(8):TA%!0=HC%:TA%!4=-1:
&45BC4,SA%,TA%
,,f%:F$=$(f%!&C):
shell_HeapBlockReturn(TA%):=F$
shell_MenuGetItemHandle(SA%,HC%):
TA%,f%,h%:TA%=
shell_HeapBlockFetch(8):TA%!0=HC%:TA%!4=-1:
&45BC4,SA%,TA%
,,f%:h%=f%!8:
shell_HeapBlockReturn(TA%):=h%
shell_MenuGetItemHeight(SA%):
&45BC7,SA%
k%:=k%!20
shell_MenuCalculateHeight(SA%):
PA%:PA%=
shell_MenuGetNrItems(SA%)*
shell_MenuGetItemHeight(SA%):=PA%+(
shell_MenuGetNrDotted(SA%)*24)
shell_MenuSortItems(k%,eA$,OF%,CC%,fD%):
gD%:gD%=
shell_MenuGetNrItems(k%)-1:_shell_MS_handle%=k%:
fD%>gD%
fD%=gD%
&406C0:
shell_QuickSort(eA$,"_shell_MS_swap",OF%,0,fD%):
&406C1:
shell_QuickSort(g$,j$,_asc%,_start%,_end%):
_lo%,_h%,_F%,_temp%,o%:_lo%=_start%:_hi%=_end%:_F%=
:_temp%=_lo%-1+
(_hi%+1-_lo%):o%=
("FN"+j$+"(_lo%,_temp%)"):
_asc%=0
("FN"+g$+"(_lo%,_hi%)")
("FN"+j$+"(_lo%,_hi%)"):_F%=
("FN"+g$+"(_hi%,_lo%)")
("FN"+j$+"(_hi%,_lo%)"):_F%=
_hi%=_hi%-1
_lo%=_lo%+1
_lo%=_hi%:
_start%<_lo%-1
shell_QuickSort(g$,j$,_asc%,_start%,_lo%-1)
_hi%+1<_end%
shell_QuickSort(g$,j$,_asc%,_hi%+1,_end%)
_shell_MS_swap(oC%,pC%):
k$,l$,bE%,cE%:k$=
shell_MenuGetItemText(_shell_MS_handle%,oC%):l$=
shell_MenuGetItemText(_shell_MS_handle%,pC%):bE%=
shell_MenuGetItemHandle(_shell_MS_handle%,oC%):cE%=
shell_MenuGetItemHandle(_shell_MS_handle%,pC%)
shell_MenuPutData(bE%,l$):
shell_MenuPutData(cE%,k$):=0
_shell_MS_comp(oC%,pC%):
k$,l$:k$=
shell_MenuGetItemText(_shell_MS_handle%,oC%):l$=
shell_MenuGetItemText(_shell_MS_handle%,pC%):
shell_WindowSetTitleRightJust(
s%,MA%,h%,JC%:JC%=
shell_WindowIsOpen(b%):s%=
shell_HeapBlockFetch(6000):!s%=b%:
&400CC,,s%:MA%=s%!60:
(1<<3))
shell_Tracef0("WindowSetTitleRightJust:title flags = &"+
~MA%):
shell_Tracef0("WindowSetTitleRightJust:Horizontally centred bit set.."):
shell_Tracef0("WindowSetTitleRightJust:Unsetting horizontally centred bit.."):MA%=MA%
(1<<3)
shell_Tracef0("WindowSetTitleRightJust:title flags = &"+
~MA%)
shell_Tracef0("WindowSetTitleRightJust:Horizontally centred bit NOT set..")
shell_Tracef0("WindowSetTitleRightJust:Setting right justified bit.."):MA%=MA%
(1<<9):s%!60=MA%:
&400C3,,s%:
&400C1,,s%+4
b%<>h%
shell_Tracef0("WindowSetTitleRightJust:Updating window handle..."):
shell_UpdateWindowHandle(b%,h%):b%=h%
shell_OpenWindow(h%,0,0)
shell_HeapBlockReturn(s%):
shell_WindowSetTitleCentreJust(
s%,MA%,h%,JC%:JC%=
shell_WindowIsOpen(b%):s%=
shell_HeapBlockFetch(6000):!s%=b%:
&400CC,,s%:MA%=s%!60:
shell_Tracef0("WindowSetTitleCentreJust:title flags = &"+
~MA%)
shell_Tracef0("WindowSetTitleCentreJust:t_flags% AND (1 << 3) = "+
~(MA%
(1<<3))):
(1<<3))=0
shell_Tracef0("WindowSetTitleCentreJust:Horizontally centred bit not set.."):
shell_Tracef0("WindowSetTitleCentreJust:Setting horizontally centred bit.."):MA%=MA%
(1<<3):
shell_Tracef0("WindowSetTitleCentreJust:title flags = &"+
~MA%):s%!60=MA%
&400C3,,s%:
&400C1,,s%+4
b%<>h%
shell_Tracef0("WindowSetTitleCentreJust:Updating window handle..."):
shell_UpdateWindowHandle(b%,h%):b%=h%
shell_OpenWindow(h%,0,0)
shell_HeapBlockReturn(s%):
shell_IconGetSelectedIcons(b%,iB%,
dE%:dE%=(iB%<<16)+(1<<21):
&400D6,b%,n%,dE%,(iB%<<16)+(1<<21):
shell_GetLastMouseButton:=_U%!320
shell_GetLastWindowClicked:=_U%!28
shell_GetLastIconClicked:=_U%!32
shell_IconIndirSize(cA%,j%,GC%):
ZA%,eE%,qC%,e%,UB%:
&800100)=256
"ZA%=GC%!8:
(GC%!4<>-1)
eE%=GC%!4:qC%=
shell_HeapBlockFetch(256):
#X%=cA%+eE%:
&C,4,X%,qC%,512:e%=0:
:UB%=qC%?e%:e%+=1:
UB%<32:ZA%=ZA%+e%:
shell_HeapBlockReturn(qC%)
ZA%=0
:=ZA%