Home » Archimedes archive » Micro User » MU 1991-04.adf » PD-Stuff » interface/!Formed/!RunImage
interface/!Formed/!RunImage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
| Tape/disk: | Home » Archimedes archive » Micro User » MU 1991-04.adf » PD-Stuff |
| Filename: | interface/!Formed/!RunImage |
| Read OK: | ✔ |
| File size: | F543 bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
� > $.!FormEd.!RunImage
A� /// Forms Editor program (for designing Wimp Templates) ///
(� Directory Structure:
2�
<� !Formed.!Boot
F� !Formed.!Run
PJ� !Formed.!RunImage (this file) - run when !Run is executed
Z� !Formed.!Palette
d� !Formed.Templates
n� !Formed.Sprites
x� !Formed.Default
��
�
� ș"OS_GetEnv"�commandstring$
�
��fontcounts%255
� �I%=0�255:fontcounts%?I%=0:�
�
�� -- Start Wimp going
�
��taskid%4:$taskid%="TASK"
�6ș"Wimp_Initialise",200,!taskid%,"FormEd"�version%
�<��errordisplay(�,�$,�):� after calling Wimp_Initialise!
�minv%=21
D�version%<minv%��1,"Window Manager >= "+�(minv%/100)+" required"
bodgeit%=(version%<18)
�bodgeit%�
"�oldfx%(8)
,0�I%=1�8:ș"OS_Byte",I%+220,2,0�,oldfx%(I%):�
6$ș"OS_Byte",219,&8A,0�,oldfx219%
@�
J
T?� -- override with our own mode (ONLY if mono-tasking Wimp)
^
h�version%<120�
r�12
| *Print <FormEd$Dir>.!Palette
�-ș"Wimp_ForceRedraw",-1,-1E8,-1E8,1E8,1E8
�*Pointer
�Ȏ��
� �0,22
�)`wbcol=&1:`tbcol=&1:`sco=&1:`mbcol=&1
�*`wfcol=&1:`tfcol=&0:`sci=&1:`tbcol2=&1
�"ș"Font_SetFontColours",,0,1,1
��1,8
�)`wbcol=&1:`tbcol=&1:`sco=&1:`mbcol=&1
�*`wfcol=&1:`tfcol=&0:`sci=&1:`tbcol2=&1
�"ș"Font_SetFontColours",,0,3,0
��2,9,12,20
�)`wbcol=&0:`tbcol=&D:`sco=&3:`mbcol=&B
*`wfcol=&7:`tfcol=&7:`sci=&1:`tbcol2=&C
"ș"Font_SetFontColours",,0,1,6
�
&�
0)`wbcol=&0:`tbcol=&D:`sco=&3:`mbcol=&B
:*`wfcol=&7:`tfcol=&7:`sci=&D:`tbcol2=&C
D�
N
X�inv%27,outv%23
b�px2%1,px4%3,px256%255
l�getmodeinfo
vswitched%=�
�
��factors%15
�+�version%>120��pixtrans%15�pixtrans%=-1
�
�� -- dimension arrays
�
�&�pal%(2),bright%(15),uncolour%(15)
�$�q%&2000,erroraddr%(4),oldq%&100
�'�indexdata%32*24+20,fontbinding%255
�maxbuf%=&3000
�$�buffer%maxbuf%:curbuff%=buffer%
�
nh%=32
�C�handle%(nh%+1),wident$(nh%),wptr%(nh%),wlink%(nh%),wflag%(nh%)
=�I%=0�nh%:handle%(I%)=I%-1:wident$(I%)="":�:handleSP%=nh%
�spritename%12
,�menufree%&1800:menuend%=menufree%+&1800
�menulist%&100
*brx%=400:bry%=740
42currentwindow%=-1:currenticon%=-1:dialogue%=-1
>spritef$=""
H?�ib_text%255,ib_sprite%12,ib_buffersize%6,ib_validation%255
R,�tb_text%40,tb_sprite%12,tb_buffersize%6
\�mb_fsize%6:$mb_fsize%="30"
f�mb_wident%12
p$�mb_renumber%5:$mb_renumber%="0"
ztemplatef$="Templates"
�"�mb_crsprite%12,mb_rnsprite%12
�nsp=80:ns%=10
�F�spw%(nsp),sph%(nsp),spwx%(nsp),minx%(nsp),miny%(nsp),spname$(nsp)
�"�spritew%(ns%+1),nsprite%(ns%)
�@�spritei%(ns%),sprxscale%(ns%),spryscale%(ns%),spriten$(ns%)
�G�I%=0�ns%:spritew%(I%)=I%-1:spriten$(I%)="":�:sprSP%=ns%:sprSP2%=-1
�Aș"OS_File",5,"<FormEd$Dir>.Sprites"�type%,,,,systemareasize%
�2�type%<>1��1,"Can't find <FormEd$Dir>.Sprites"
�systemareasize%+=4
�"�systemsprites%systemareasize%
�$systemsprites%!0=systemareasize%
�>ș"OS_SpriteOp",&10A,systemsprites%,"<FormEd$Dir>.Sprites"
�Q� SYS "OS_SpriteOp",&10F,systemsprites%,"editbuffer",0,1280/dx%,1024/dy%,MODE
;� editbuffer%=FNspriteaddr(systemsprites%,"editbuffer")
%� editbufferwidth%=(sptr%!16+1)*4
$spriteareasize%=�-�-16*1024
.�spritearea%spriteareasize%
81!spritearea%=spriteareasize%:spritearea%!8=16
B$ș"OS_SpriteOp",&109,spritearea%
L(�loadsprites("<FormEd$Dir>.Default")
Vspritef$="Sprites"
`.undoname$="":undoscreen%=-1:editbuffer%=-2
j
t� -- Create windows
~
��defaultwindows
�
�?�version%>=134��paltable%79:ș"Wimp_ReadPalette",,paltable%
�palcolour%=7
�sprcolour%=7
�.paintmode%=16:�select(palette%,paintmode%)
�'grid%=�:�grid%��select(palette%,31)
�
�� -- Create Menus
�
�m_palette%=�crmenu
�6� "#Colours,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"
i_esg%=�crmenu
2� "#ESG,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"
i_button%=�crmenu
K� "#Button type,Never,Always,Auto-repeat,Click,Release,Double click,++"
(J� "Click/Drag,Release/Drag,Double/Drag,Menu icon,Double/Click/Drag,++"
2.� "Radio,12,13,Write/Click/Drag,Writeable"
<m_fsize%=�crmenu
FE� "#Point size,10 point,12 point,14 point,20 point,$mb_fsize%(6)"
Pi_font%=�crmenu
Z� "#Text style,&"
di_text%=�crmenu
n � "#Icon text,$ib_text%(80)"
xi_sprite%=�crmenu
�$� "#Sprite name,$ib_sprite%(12)"
�i_validation=�crmenu
�(� "#Validation,$ib_validation%(255)"
�i_buffersize%=�crmenu
�7� "#Max size,$ib_buffersize%(6),Valid>i_validation"
�i_flags%=�crmenu
�E� "#Icon flags,Text>i_text%,Sprite>i_sprite%,Border,H centred,++"
�;� "V centred,Filled,Anti-aliased>i_font%,Needs help,++"
�F� "Indirected>i_buffersize%,R justified,Allow adjust,Half size,++"
�+� "Button type>i_button%,ESG>i_esg%,++"
�1� "Fg colour>m_palette%,Bg colour>m_palette%"
�t_text%=�crmenu
�!� "#Title text,$tb_text%(40)"
t_sprite%=�crmenu
$� "#Sprite name,$tb_sprite%(12)"
t_buffersize%=�crmenu
"$� "#Max size,$tb_buffersize%(6)"
,t_flags%=�crmenu
6F� "#Title flags,Text>t_text%,Sprite>t_sprite%,Border,H centred,++"
@I� "V centred,Filled,Anti-aliased>i_font%,Indirected>t_buffersize%,++"
J� "R justified"
Tw_scroll%=�crmenu
^� "Auto-repeat,Debounced"
hw_flags%=�crmenu
rN� "#W flags,Title>t_flags%,Moveable,V scroll,H scroll,Auto-redraw,Pane,++"
|C� "No bounds,No quit box,User scroll>w_scroll%,Real colours,++"
�>� "Back,Keys,Work area#>i_button%,New Format,Back icon,++"
�M� "Quit icon,Title icon>t_flags%,Toggle icon,V scroll,Size icon,H scroll"
�w_colours%=�crmenu
��� "Title fg?m_palette%,Title bg?m_palette%,Work fg?m_palette%,Work bg?m_palette%,Scroll outer?m_palette%,Scroll inner?m_palette%,Input focus?m_palette%"
�w_ident%=�crmenu
�%� "#Window name:,$mb_wident%(12)"
�i_renumber%=�crmenu
� � "#Icon #,$mb_renumber%(5)"
�i_copy%=�crmenu
� � "#Copy,left,right,up,down"
�i_move%=�crmenu
� � "#Move,left,right,up,down"
�w_general%=�crmenu
7� "#Window,Create icon,Amend icon nnnn>i_flags%,++"
J� "Renumber nnnn>i_renumber%,Copy icon>i_copy%,Move icon>i_move%,++"
� "Delete icon#,++"
&I� "Window flags>w_flags%,Colours>w_colours%,Work area>m_workarea%,++"
0)� "Identifier>w_ident%,Delete window"
:m_templates%=�crmenu
D&� "#Filename:,$mb_templates%(256)"
Nmainmenu%=�crmenu
X6� "#FormEd,Info>m_info%,Create Window>w_ident%,++"
bD� "Load templates>m_templates%,Save templates#>m_savetemp%,Quit"
lm_rowcol%=�crmenu
v� "Row,Column"
�m_sprite%=�crmenu
�M� "#Sprite,Undo,Colour>m_palette%,Transparent,Create Mask,Delete Mask,++"
�N� "Extend>m_rowcol%,Reduce>m_rowcol%,Insert>m_rowcol%,Delete>m_rowcol%,++"
�(� "Flip X,Flip Y,Blob size>m_scale%"
�m_crsprite%=�crmenu
�#� "#New name,$mb_crsprite%(12)"
�m_rnsprite%=�crmenu
�#� "#New name,$mb_rnsprite%(12)"
�m_spritef%=�crmenu
�#� "#Filename,$mb_spritef%(256)"
�m_append%=�crmenu
�� "Horizontally,Vertically"
�m_spritelist%=�crmenu
>� "#Sprites,Create>m_crsprite%,Append>m_append%,Delete,++"
?� "Copy>m_rnsprite%,Rename#>m_rnsprite%,Load>m_spritef%,++"
(� "Save>m_savespr%,Merge>m_spritef%"
*)� ic_sprite% = FNiconbar(iconbar%,0)
4)� ic_palette% = FNiconbar(iconbar%,1)
>#ic_window%=�iconbar(iconbar%,0)
H
RB� -- if command was '*FormEd <filename>', load a template file
\
f!I%=�commandstring$," -quit ")
p�I%�
zI%+=�" -quit "
�'ȕ�commandstring$,I%,1)=" ":I%+=1:�
��
�$I%=�commandstring$+" "," ",I%+1)
�&�I%+=1:��commandstring$,I%,1)<>" "
�f$=�commandstring$,I%)
�f$=�f$,�f$+" "," ")-1)
��f$<>""�
�Ȏ�filetype(f$)�
��&FEC:�loadtemplates(f$)
�'�&FF9:�loadsprites(f$): �spriteinfo
�$�-2:�1,"File '"+f$+"' not found"
�=�1,"File '"+f$+"' is not a sprite file or template file"
��
�
�f$=""
�
$
.3� -- Error handler - drops through to Wimp_Poll
8
Bsaveref%=-1:scrapref%=-1
Ldragtype%=0:pdrag%=-1
Vpaint_drag%=-1
`inerror%=�:oldhelp%=1
j��errorbox(�,�$,�)
t
~� -- Main Polling loop
��
�3�pdrag%=-1�paint_drag%=-1�flags%=&01�flags%=&00
�#ș"Wimp_Poll",flags%,q%�action%
�Ȏaction%�
��0:�paint_drag%>=0�
�ș"Wimp_GetPointerInfo",,q%
�/�paintdrag(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
��
��1:�redraw(!q%)
�9�2:�open(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28)
��3:�close(!q%)
�
�4:Ȏ!q%�
�paint_drag%>=0�
$�getw(spritew%(paint_drag%>>16))
.�dragoff:paint_drag%=paint_drag%�&80000000
(�
2�
<�5:�paint_drag%<-1�
F(h%=spritew%((paint_drag%>>16)�&7FFF)
P�!q%=h%�
Z%paint_drag%=paint_drag%�&7FFFFFFF
d+�getw(h%):�getpointer:�dragon(buttons%)
n�
x�
�.�6:�mouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
�'�7:�decodedrag(!q%,q%!4,q%!8,q%!12)
��8:key%=q%!24
��bodgeit%�
��key%=0�key%=�(0)+&100
�3�key%>=&87�key%<=&8B�key%+=&104-&10*�-1-&20*�-2
��
��processkey(q%!0,q%!4,key%)
�5�9:I%=0:�menulist%!I%=q%!I%:I%=I%+4:�q%!(I%-4)=-1
�&�decodemenu(menuhandle%,menulist%)
�#�getpointer:�buttons%�1��remenu
�L�10:�open(!q%,q%!4,q%!8,q%!12,q%!16,q%!20+q%!32*32,q%!24+q%!36*32,q%!28)
��17,18:�receive(q%)
�
��
"��receive(q%)
,"�I%=0�!q%-1�4:oldq%!I%=q%!I%:�
6Ȏq%!16�
@�0:�finish:�
J�1:Ȏq%!40�
T+�&FF9,&FEC:� do the scrap file business
^5ș"XOS_ReadVarVal","Wimp$Scrap",,-1,0,3�,,exists%
h,�exists%=0��1,"<Wimp$Scrap> not defined"
r+q%!36=-1:�string0(q%+44,"<Wimp$Scrap>")
|!q%=(48+�"<Wimp$Scrap>")��3
�6q%!12=q%!8:q%!16=2:ș"Wimp_SendMessage",17,q%,q%!4
�scrapref%=q%!8
��
�@�2:�q%!12<>saveref%��1,"Unexpected DataSave packet received"
�Ȏq%!40�
�3�&FEC:�savetemplates(�string0(q%+44),q%!36<>-1)
�1�&FF9:�savesprites(�string0(q%+44),q%!36<>-1)
�0:�1,"Unexpected DataSave filetype received"
��
�Eoldq%!12=oldq%!8:oldq%!16=3:ș"Wimp_SendMessage",17,oldq%,oldq%!4
��3:Ȏq%!40�
�)�&FEC:�loadtemplates(�string0(q%+44))
��&FF9:�q%!20=-2�
-�loadsprites(�string0(q%+44)):�spriteinfo
4��mergesprites(�string0(q%+44)):� PROCspriteinfo
�
&:�
0�
:,�oldq%!12=scrapref%�*Delete <Wimp$Scrap>
DEoldq%!12=oldq%!8:oldq%!16=4:ș"Wimp_SendMessage",17,oldq%,oldq%!4
N�&400C0:
X$�menuhandle%=w_general%�q%!32=7�
b9�I%=m_palette%+28�m_palette%+28+24*15�24:!I%=!I%��1:�
l;J%=m_palette%+28+24*((w_colours%!(36+24*q%!36)>>28)�&F)
v
!J%=!J%�1
��
�-ș"Wimp_CreateSubMenu",,q%!20,q%!24,q%!28
��&400C1:�getmodeinfo
��
��
�
���sendsave(ft%,fn%)
��filename%
�ș"Wimp_CreateMenu",,-1
�1�filename%=fn%:fn%+=�$fn%,"."):�fn%=filename%
�7�getpointer:� sets up handle%,icon%,mousex%,mousey%
�!q%=(48+�$filename%)��3
�q%!12=0:q%!16=1
9q%!20=handle%:q%!24=icon%:q%!28=mousex%:q%!32=mousey%
$q%!36=0:� file size (inaccurate)
q%!40=ft%:� file type
�string0(q%+44,$filename%)
*,ș"Wimp_SendMessage",17,q%,handle%,icon%
4saveref%=q%!8
>�
H
R5ݤstring0(a%)�a$:a$="":ȕ?a%:a$+=�?a%:a%+=1:�:=a$
\%��string0(a%,a$)$a%=a$:a%?�a$=0:�
f
p��getmodeinfo
zinv%!0=4
�inv%!4=5
�inv%!8=6
�
inv%!12=7
�inv%!16=11
�inv%!20=12
�inv%!24=-1
�&ș"OS_ReadVduVariables",inv%,outv%
�dx%=1<<(outv%!0)
�dy%=1<<(outv%!4)
�linelen%=outv%!8
�screensize%=outv%!12
�scrx1%=(outv%!16+1)*dx%
�scry1%=(outv%!20+1)*dy%
�
��redraw(handle%)
.#ș"Wimp_RedrawWindow",,q%�more%
8
ȕ more%
B ș "Wimp_BorderWindow",,q%
L#ș"Wimp_GetRectangle",,q%�more%
V�
t�
~
���testpattern
��dx%:dx%=48
�ȕmore%
�+x0%=q%!28:y0%=q%!32:x1%=q%!36:y1%=q%!40
�-minx0%=x0%-(by%-y0%):maxx0%=x1%-(by%-y1%)
�-minx1%=x0%+(by%-y1%):maxx1%=x1%+(by%-y0%)
�/minx0%=(minx0%-bx%+10000)�dx%*dx%+bx%-10000
�/minx1%=(minx1%-bx%+10000)�dx%*dx%+bx%-10000
�1�x%=minx0%�maxx0%�dx%:�x%,by%:�1,1280,-1280:�
�2�x%=minx1%�maxx1%�dx%:�x%,by%:�1,-1280,-1280:�
�#ș"Wimp_GetRectangle",,q%�more%
��
�
��drawblob
�setxy(x%,y%,$sprbuff%,"x")
(?bx%+=(sprxoff%-x%�2)��(dx%-1):by%+=(spryoff%-y%�2)��(dy%-1)
2ȕmore%
<(�0,7:�bx%,by%:�&65,bx%+x%-1,by%+y%-1
F#ș"Wimp_GetRectangle",,q%�more%
P�
Z�
d
n��front(handle%)
x+!q%=handle%:ș"Wimp_GetWindowState",,q%
�$q%!28=-1:ș"Wimp_OpenWindow",,q%
��
�
���reopen(handle%)
�C!q%=handle%:ș"Wimp_GetWindowState",,q%:ș"Wimp_OpenWindow",,q%
��
�
���getw(handle%)
�7!q%=handle%:ș"Wimp_GetWindowState",,q%:�info(q%+4)
��
�
���geti(h%,i%)
�,!q%=h%:q%!4=i%:ș"Wimp_GetIconState",,q%
.ix0%=q%!8:iy0%=q%!12:ix1%=q%!16:iy1%=q%!20
iflags%=q%!24:idata%=q%+28
�
"
,��info(p%)
6'x0%=!p%:y0%=p%!4:x1%=p%!8:y1%=p%!12
@5scx%=p%!16:scy%=p%!20:bhandle%=p%!24:flags%=p%!28
JIbx%=x0%-scx%:by%=y1%-scy%:� all drawing should be relative to bx%,by%
T�
^
h%��update(handle%,x0%,y0%,x1%,y1%)
r5!q%=handle%:q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1%
|#ș"Wimp_UpdateWindow",,q%�more%
��
�
���upicon(handle%,icon%)
�C!q%=handle%:q%!4=icon%:q%!8=0:q%!12=0:ș"Wimp_SetIconState",,q%
��
�
�6��open(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%)
��d%
��whichsprite(handle%)<>-1�
�d%=�(dx%+dx%-1)
�&x0%=x0%�d%:x1%=x1%�d%:scx%=scx%�d%
��
�!q%=handle%
)q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1%
q%!20=scx%:q%!24=scy%
q%!28=bhandle%
&ș"Wimp_OpenWindow",,q%
0�handle%=dialogue%�
:�getw(handle%)
D"ȗȓx0%,y0%,x1%-x0%,y1%-y0%+40
N�
X�
b
l��close(handle%)
v�i%
�8I%=�whichwindow(handle%):�I%<>-1��deletewindow(I%):�
�8I%=�whichsprite(handle%):�I%<>-1��deletesprite(I%):�
�U� IFhandle%=spritelist%THENWHILEsprSP2%<>-1:PROCclose(spritew%(sprSP2%)):ENDWHILE
�5�handle%=dialogue%�ȗȓ0,0,1279,1023:dialogue%=-1
�(!q%=handle%:ș"Wimp_CloseWindow",,q%
��
�
�?��mouse(mousex%,mousey%,buttons%,handle%,icon%,oldbuttons%)
�Ȏbuttons%�
��&02:� -- MENU button
�6I%=�whichwindow(handle%):�I%<>-1��windowmenu(I%):�
�6I%=�whichsprite(handle%):�I%<>-1��spritemenu(I%):�
�Ȏhandle%�
�-2
Ȏicon%�
�ic_window%:�menu(mainmenu%)
�
*%�spritelist%:�menu(m_spritelist%)
4�
>'�&01,&04:� -- SELECT/ADJUST buttons
H7I%=�whichsprite(handle%):�I%<>-1��spritepixel(I%):�
RȎhandle%�
\�-2
fȎicon%�
p�ic_window%
z1�createwindow(brx%,bry%,""):brx%+=60:bry%-=40
��bry%<340�bry%=1000
��brx%>1040�brx%=40
��
��palette%:�palette
��spritelist%
��icon%=-1�
�"�buttons%=&04��deselectsprites
��
��geti(spritelist%,icon%�1)
�*�iflags%�&400000��opensprite(icon%��1)
��
�
�m_scale%
�#�setxy(xsc%,ysc%,$sprbuff%,"x")
xs%=xsc%
Ȏicon%�
�0:�xs%<48�xs%+=dx%
$�1:�xs%>dx%�xs%-=dx%
.�
8�xs%<>xsc%�
Bys%=xs%*ysc%/xsc%
L$sprbuff%=�xs%+"x"+�ys%
V+�upicon(m_scale%,2):�upicon(m_scale%,3)
`'�changesize(currentsprite%,xs%,ys%)
j�
t�m_workarea%
~�setwork(q%,mb_workarea0%)
� �setwork(q%+8,mb_workarea1%)
�'x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12
�Ȏicon%�
�
�0:y1%+=4
�
�1:x1%+=2
�
�2:x0%-=2
�
�3:y0%-=4
�"�5:x0%+=2:�x0%>mwx0%�x0%=mwx0%
�"�6:x1%-=2:�x1%<mwx1%�x1%=mwx1%
�"�7:y1%-=4:�y1%<mwy1%�y1%=mwy1%
�"�8:y0%+=4:�y0%>mwy0%�y0%=mwy0%
��11:�xor(m_workarea%,11,6)
�setworkarea(currentwindow%)
+�(buttons%�1)=0�ș"Wimp_CreateMenu",,-1
�
w0$=�x0%+","+�y0%
(w1$=�x1%+","+�y1%
2B�w0$<>$mb_workarea0%�$mb_workarea0%=w0$:�upicon(m_workarea%,9)
<C�w1$<>$mb_workarea1%�$mb_workarea1%=w1$:�upicon(m_workarea%,10)
F�dial_delete%
PȎicon%�
Z�2:�xor(dial_delete%,2,6)
d�godeletesprites
n�close(dial_delete%)
x�3:�close(dial_delete%)
��
��m_savetemp%
�
�icon%=2�
��checkfull($mb_templates%)
�$�savetemplates($mb_templates%,�)
�)�buttons%�&01�ș"Wimp_CreateMenu",,-1
��
��m_savespr%
�
�icon%=2�
��checkfull($mb_spritef%)
� �savesprites($mb_spritef%,�)
�)�buttons%�&01�ș"Wimp_CreateMenu",,-1
��
�
(�&10,&40:� -- SELECT/ADJUST dragging
Ȏhandle%�
"D�m_savetemp%,m_savespr%:�dragicon(mousex%,mousey%,handle%,icon%)
,.:�icon%<>-1��drag(buttons%,handle%,icon%)
6�
@1�&100,&400:� -- selection if button type = 10
JȎhandle%�
T�spritelist%
^#�buttons%=&400��deselectsprites
h�geti(handle%,icon%�1)
r�(iflags%�&400000)=0�
|)�seti(spritelist%,icon%��1,&200000,0)
�(�seti(spritelist%,icon%�1,&200000,0)
��
��
��
��
�
�$��processkey(handle%,icon%,key%)
�Ȏhandle%�
��m_workarea%
�
�key%=13�
��xor(m_workarea%,11,6)
� �setworkarea(currentwindow%)
�ș"Wimp_CreateMenu",,-1
�
�
�m_savetemp%
&
�key%=13�
0�checkfull($mb_templates%)
:$�savetemplates($mb_templates%,�)
Dș"Wimp_CreateMenu",,-1
N�
X�
b�m_savespr%
l
�key%=13�
v�checkfull($mb_spritef%)
� �savesprites($mb_spritef%,�)
�ș"Wimp_CreateMenu",,-1
��
��
��
�ș"Wimp_ProcessKey",key%
��
�
�R------------------------------------------------------------------------------
�
���drag(b%,handle%,icon%)
�%I%=�whichwindow(handle%):�I%=-1��
�7currentwindow%=I%:currenticon%=icon%:�highlight(I%)
4dragtype%=b%:draghandle%=handle%:dragicon%=icon%
�getcurw
�getcuri
+cx0%+=bx%:cy0%+=by%:cx1%+=bx%:cy1%+=by%
*%x0%=0:y0%=0:x1%=scrx1%:y1%=scry1%
4�b%=&10�
>#�getminxy(flags%,text$,sprite$)
H'mx0%=mousex%-cx0%:mx1%=cx1%-mousex%
R'my0%=mousey%-cy0%:my1%=cy1%-mousey%
\2x0%=cx0%+minx%:y0%=0:x1%=scrx1%:y1%=cy1%-miny%
f8�mx0%<mx1%��swapx:x0%=0:x1%=cx0%-minx%:x0%+=1:x1%-=1
p=�my0%>my1%��swapy:y0%=cy1%+miny%:y1%=scry1%:y0%+=1:y1%-=1
z)x0%+=cx0%-cx1%:y1%+=cy1%-cy0%:� bodge
��
�%!q%=handle%:�b%=&40�q%!4=5�q%!4=6
�.q%!8=cx0%:q%!12=cy0%:q%!16=cx1%:q%!20=cy1%
�+q%!24=x0%:q%!28=y0%:q%!32=x1%:q%!36=y1%
�ș"Wimp_DragBox",,q%
��
�
�-��dragicon(mousex%,mousey%,handle%,icon%)
�%dragtype%=&FF:draghandle%=handle%
��getw(handle%)
��geti(handle%,icon%)
�!q%=handle%:q%!4=5
�>q%!8=bx%+ix0%:q%!12=by%+iy0%:q%!16=bx%+ix1%:q%!20=by%+iy1%
*q%!24=q%!8-mousex%:q%!28=q%!12-mousey%
9q%!32=scrx1%+q%!16-mousex%:q%!36=scry1%+q%!20-mousey%
ș"Wimp_DragBox",,q%
$�
.
8��swapx
B@cx0%=cx0%�cx1%:cx1%=cx1%�cx0%:cx0%=cx0%�cx1%:cx0%-=1:cx1%+=1
L�
V
`��swapy
j@cy0%=cy0%�cy1%:cy1%=cy1%�cy0%:cy0%=cy0%�cy1%:cy0%-=1:cy1%+=1
t�
~
�$��getminxy(flags%,text$,sprite$)
��x0%,y0%,x1%,y1%,mx%,my%
�minx%=0:miny%=0
��flags%�&01�
��flags%�&40�
�+ș"Font_ReadInfo",flags%>>24�,,y0%,,y1%
�:ș"Font_StringBBox",,�26+�(flags%>>24)+text$�,x0%,,x1%
�"ș"Font_ConverttoOS",,x0%�,x0%
�"ș"Font_ConverttoOS",,x1%�,x1%
�minx%=x1%-x0%:miny%=y1%-y0%
�#�minx%=6*dx%+16*�text$:miny%=32
��
�flags%�&04�miny%+=2*dy%
�
�flags%�&02�
Aș"XOS_SpriteOp",&128,spritearea%,sprite$�,,,mx%,my%,,spm%;P%
(�(P%�1)=0�
28ș"XOS_ReadModeVariable",spm%,4�,,spx%:mx%=mx%<<spx%
<8ș"XOS_ReadModeVariable",spm%,5�,,spy%:my%=my%<<spy%
F$�flags%�&800�mx%=mx%/2:my%=my%/2
P:�(flags%�&21B)=&13�mx%=minx%+mx%:� sprite+text (V~H~R)
Z�mx%>minx%�minx%=mx%
d�my%>miny%�miny%=my%
n�
x�
��
�
�%��decodedrag(cx0%,cy0%,cx1%,cy1%)
�dragtype%=0
�<�draghandle%=m_savetemp%��sendsave(&FEC,mb_templates%):�
�9�draghandle%=m_savespr%��sendsave(&FF9,mb_spritef%):�
� �geti(draghandle%,dragicon%)
�Boldflags%=iflags%:odt0%=idata%!0:odt1%=idata%!4:odt2%=idata%!8
�&�deleteicon(draghandle%,dragicon%)
��getw(draghandle%)
�+cx0%-=bx%:cy0%-=by%:cx1%-=bx%:cy1%-=by%
��cx0%>cx1%��swapx
��cy0%>cy1%��swapy
Mcurrenticon%=�cricon(!q%,cx0%,cy0%,cx1%,cy1%,oldflags%,odt0%,odt1%,odt2%)
�
";ݤcricon(handle%,x0%,y0%,x1%,y1%,flags%,dt0%,dt1%,dt2%)
,�ic%
6!q%=handle%
@1q%!20=flags%:q%!24=dt0%:q%!28=dt1%:q%!32=dt2%
J#text$=�iconstring(flags%,q%+24)
T)�getminxy(flags%,text$,text$):� bodge
^ �x1%-x0%<minx%�x1%=x0%+minx%
h �y1%-y0%<miny%�y1%=y0%+miny%
r)q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1%
|ș"Wimp_CreateIcon",,q%�ic%
�>ș"Wimp_ForceRedraw",!q%,q%!4-20,q%!8-20,q%!12+20,q%!16+20
�!ș"Wimp_GetCaretPosition",,q%
�H�!q%=handle%�q%!4=ic%:ș"Wimp_SetCaretPosition",handle%,ic%,0,0,-1,0
�=ic%
�
���deleteicon(handle%,icon%)
�4!q%=handle%:q%!4=icon%:ș"Wimp_GetIconState",,q%
�ș"Wimp_DeleteIcon",,q%
�?ș"Wimp_ForceRedraw",!q%,q%!8-20,q%!12-20,q%!16+20,q%!20+20
��
�
�R------------------------------------------------------------------------------
�
��menu(m%)
menuhandle%=m%
�encodemenu(m%)�
&�handle%=-2�
0'I%=m%!20+m%!24:J%=m%+28:K%=96-m%!24
:�K%+=I%:J%+=24:�J%!-24�&80
D#K%+=24:� dotted line separator!
N�K%=mousey%+12
X�
b3ș"Wimp_CreateMenu",,menuhandle%,mousex%-102,K%
l%oldhandle%=handle%:oldicon%=icon%
v�
��
�
���remenu
�%handle%=oldhandle%:icon%=oldicon%
��encodemenu(menuhandle%)�
�Lș"Wimp_CreateMenu",,menuhandle%,mousex%-102,mousey%+12:� default coords
��
��
�
�ݤcrmenu
�.�menufree%+28>menuend%��1,"Menu area full"
��m%,menu$,m$:�menu$
�4ȕ�menu$,2)="++":�m$:menu$=�menu$,�menu$-2)+m$:�
#�menu$,1)="="�menu$=��menu$,2)
menuptr%=menufree%
i%=0:ctr%=0
:�menu$,1)="#"�i%=1:menutitle$=�par(",")�menutitle$=""
*I%=�menutitle$,">")
4
�I%>0�
>$menuptr%!20=�(�menutitle$,I%+1))
H menutitle$=�menutitle$,I%-1)
R�menuptr%!20=40
\�
f$menuptr%=menutitle$
pJmenuptr%?12=`tfcol:menuptr%?13=2:menuptr%?14=`wfcol:menuptr%?15=`wbcol
z$menuptr%!16=196-24:menuptr%!24=0
�$menuptr%+=28:maxx%=�menutitle$-3
�ȕ�menu$,1)="~"
�menu$=�menu$,�menu$-1)
�/�item$=�par(","):�menuitem(item$):�item$=""
�
�menu$
��
�/�item$=�par(","):�menuitem(item$):�item$=""
�+�menuptr%-menufree%<=28�=-1:� null menu
�#menuptr%!-24=(menuptr%!-24)�&80
�"m%=menufree%:m%!16=maxx%*16+12
�menufree%=menuptr%
�=m%
�
��menuitem(text$)
�text$=""��
-�menuptr%+24>menuend%��1,"Menu area full"
$�text$="&"�
.&ș"Font_ListFonts",,q%,ctr%�,,ctr%
8*�ctr%>=0�text$=$q%+">m_fsize%":i%-=2��
B�
L�i%,flg%
Vflg%=&00
`i%=�text$,"?")
j"�i%<2�i%=�text$,">")�flg%+=&08
t=�i%>0�subptr%=��text$,i%+1):text$=�text$,i%-1)�subptr%=-1
~3��text$,1)="#"�text$=�text$,�text$-1):flg%+=&02
�menuptr%!0=flg%
�menuptr%!4=subptr%
�menuptr%!8=&07000021
��text$,1)="?"�
�menuptr%!8=&0700011A
�'I%=�workspace(�text$):$I%=�text$,2)
�@menuptr%!12=I%:menuptr%!16=systemsprites%:menuptr%!20=�text$
��
��text$,1)="$"�
�!menuptr%+=&04
�menuptr%!8+=&100
�i%=�text$,"(")
3�i%>0�L%=��text$,i%+1):text$=�text$,i%-1)�L%=12
8menuptr%!12=��text$,2):menuptr%!16=-1:menuptr%!20=L%
2�version%>=133��L%>15�L%=15:� icons can scroll
,text$=�L%-1," "):� 1 char was terminator
(�
2�text$<=12�
<$(menuptr%+12)=text$
F&�I%=�workspace(�text$+1):$I%=text$
P6menuptr%!12=I%:menuptr%!16=-1:menuptr%!20=�text$+1
Zmenuptr%!8=menuptr%!8�&100
d�
n�
x�text$>maxx%�maxx%=�text$
��
�menuptr%+=24
��
�
�ݤpar(sep$)
�%i1%=i%+1:i%=�menu$+sep$,sep$,i1%)
�=�menu$,i1%,i%-i1%)
�
�R------------------------------------------------------------------------------
�
���windowmenu(I%)
�%mmousex%=mousex%:mmousey%=mousey%
�$currentwindow%=I%:�highlight(I%)
(currenticon%=icon%:�menu(w_general%)
�
"��spritemenu(I%)
,7currentsprite%=I%:mmousex%=mousex%:mmousey%=mousey%
6�menu(m_sprite%)
@�
J
T��highlight(I%)
^�
h;ș"Wimp_SetCaretPosition",handle%(I%),-1,0,0,&2000000,0
r�
|
�R------------------------------------------------------------------------------
�
���encodemenu(menuhandle%)
�<�encodemenu(menuhandle%)��1,"Menu shouldn't be allowed"
��
�
�ݤencodemenu(menuhandle%)
�*�menuhandle%<&8000��1,"Bad menuhandle"
��I%
�I%=menuhandle%+28
�7�!I%=!I%��&01:I%!8=I%!8��&400000:I%+=24:�I%!-24�&80
�Ȏmenuhandle%�
��mainmenu%
,$mb_wident%="":$mb_templates%=templatef$
�i_flags%
�getcuri
&=�encodeicon(i_flags%,11,flags%,q%+28,ib_text%,ib_sprite%)
0$ib_buffersize%=�L%
:$ib_validation%=""
D�encodemenu(i_buffersize%)
N�(flags%�&01)=0�
X�shade(i_buffersize%,1)
b��flags%�&100�
l<�q%!32>0�$ib_validation%=$(q%!32):�tick(i_buffersize%,1)
v�
��
�'$(i_flags%+28+12+24*14)="Fg colour"
�'$(i_flags%+28+12+24*15)="Bg colour"
�4�flags%�&02�$(i_flags%+28+12+24*14)="EOR colour"
�4�flags%�&20�$(i_flags%+28+12+24*15)="EOR colour"
��flags%�&40�
�i_flags%?(28+11+24*14)=7
�i_flags%?(28+11+24*15)=7
�+�shade(i_flags%,14):�shade(i_flags%,15)
��
�5i_flags%?(28+11+24*14)=�foreback((flags%>>24)�&F)
�5i_flags%?(28+11+24*15)=�foreback((flags%>>28)�&F)
��
!�encodemenu(i_esg%)
!�i_esg%
!"�tick(i_esg%,(flags%>>16)�&0F)
! �i_button%
!*%�tick(i_button%,(flags%>>12)�&0F)
!4�w_general%
!>$�currentwindow%=-1�=�:� deleted!
!H'$mb_wident%=wident$(currentwindow%)
!R�getcuri
!\7�flags%�&800000�currenticon%=-1:� has been deleted!
!f�currenticon%<>-1�
!p?$(w_general%!(28+24*1+12)+�"Amend icon ")="#"+�currenticon%
!zA$(w_general%!(28+24*2+12)+�"Renumber ")="#"+û$mb_renumber%
!��encodemenu(i_flags%)
!��encodemenu(i_button%)
!�1�$(w_general%!(28+24*1+12)+�"Amend icon ")=""
!�0$(w_general%!(28+24*2+12)+�"Renumber ")=""
!�#�I%=1�4:�shade(w_general%,I%):�
!��
!��encodemenu(w_flags%)
!�($mb_workarea0%=�(q%!44)+","+�(q%!48)
!�($mb_workarea1%=�(q%!52)+","+�(q%!56)
!�$mb_minx%=�(q%!72�&FFFF)
!�$mb_miny%=�(q%!72>>16)
!�(mwx0%=q%!20:mwy0%=q%!24+(q%!8-q%!16)
!�(mwx1%=q%!20+(q%!12-q%!4):mwy1%=q%!24
"�encodepalmenu(-1)
"I%=w_colours%+28
":�J%=q%+36�q%+42:I%?11=(?J%<<4)�uncolour%(?J%):I%+=24:�
"$
�w_flags%
".!q%=handle%(currentwindow%)
"8ș"Wimp_GetWindowInfo",,q%
"B�I%=0�7
"L%�q%!32�(1<<I%)��tick(w_flags%,I%)
"V�
"`#�q%!32�(3<<8)��tick(w_flags%,8)
"j3�q%!32�(1<<10)��tick(w_flags%,9):� real colours
"t3�q%!32�(1<<11)��tick(w_flags%,10):� back window
"~1�q%!32�(1<<12)��tick(w_flags%,11):� grab keys
"��encodemenu(t_flags%)
"��currenticon%=-1�
"�'flags%=q%!64:�encodemenu(i_button%)
"���shade(w_flags%,12)
"��
"�
�I%=14�20
"�-�q%!32�(1<<(I%+24-14))��tick(w_flags%,I%)
"��
"��q%!32�&80000000�
"��tick(w_flags%,13)
"��shade(w_flags%,0)
"��shade(w_flags%,2)
# �shade(w_flags%,3)
#
�shade(w_flags%,7)
#�
##�I%=14�20:�shade(w_flags%,I%):�
#(�
#2
�t_flags%
#<0q%!60=q%!60�&24:� must be filled with border
#F;�encodeicon(t_flags%,6,q%!60,q%+76,tb_text%,tb_sprite%)
#P$tb_buffersize%=�L%
#Z!�q%!60�&100��tick(t_flags%,7)
#d!�q%!60�&200��tick(t_flags%,8)
#n�w_scroll%
#x�getcurw
#�#�flags%�&100��tick(w_scroll%,0)
#�#�flags%�&200��tick(w_scroll%,1)
#��m_sprite%
#�s$=spriten$(currentsprite%)
#�?�undoname$<>s$�undoscreen%<>editbuffer%��shade(m_sprite%,0)
#�$�getspritexy(currentsprite%,0,0)
#�%�sprcolour%=16��tick(m_sprite%,2)
#��hasmask%�
#��shade(m_sprite%,3)
#���shade(m_sprite%,2)
#��shade(m_sprite%,4)
#��
#�c%=currentsprite%
$1$sprbuff%=�sprxscale%(c%)+"x"+�spryscale%(c%)
$�encodepalmenu(sprcolour%)
$�m_spritelist%
$"*$mb_crsprite%="":$mb_spritef%=spritef$
$,iflags%=&400000
$6%�icon%<>-1��geti(handle%,icon%�1)
$@�iflags%�&400000�
$J�shade(m_spritelist%,3)
$T�shade(m_spritelist%,4)
$^�
$h-renamesprite$=�iconstring(iflags%,idata%)
$r$mb_rnsprite%=renamesprite$
$|�
$�5ș"Wimp_WhichIcon",spritelist%,q%,&200001,&200001
$�#�!q%=-1��shade(m_spritelist%,2)
$�+�!q%=-1�q%!4=-1��shade(m_spritelist%,1)
$��
$�=�
$�
$���shade(mh%,I%)
$�/mh%!(28+8+24*I%)=mh%!(28+8+24*I%)�&400000:�
$�
$���tick(mh%,I%)
$�'mh%!(28+24*I%)=mh%!(28+24*I%)�&01:�
$�
$���select(h%,i%)
%G!q%=h%:q%!4=i%:q%!8=&200000:q%!12=&200000:ș"Wimp_SetIconState",,q%
%�
%
%&��deselect(h%,i%)
%0A!q%=h%:q%!4=i%:q%!8=0:q%!12=&200000:ș"Wimp_SetIconState",,q%
%:�
%D
%N<��encodeicon(iconmenu%,nmenu%,flags%,q%,itext%,isprite%)
%X"�i_font%<0��shade(iconmenu%,6)
%b$itext%="":$isprite%=""
%l.�flags%�&01�$itext%=�iconstring(flags%,q%)
%v6�(flags%�&03)=&02�$isprite%=�iconstring(flags%,q%)
%�3�flags%�&100�L%=q%!8�L%=12:� returned to caller
%�I%=iconmenu%+28:J%=1
%�*�item%=0�nmenu%:�flags%�J%�!I%=!I%�&01
%�I%+=24:J%+=J%:�
%��
%�
%�$��decodemenu(menuhandle%,menus%)
%�Ȏmenuhandle%�
%��mainmenu%
%�Ȏ!menus%�
%��0:� info box
%��1:�getpointer
%��checkident($mb_wident%,"")
&5�createwindow(mousex%-100,mousey%+16,$mb_wident%)
&6� WHEN 1:PROCspriteinfo:PROCfront(spritelist%)
&B� WHEN 2:PROCencodepal(0,15):PROCfront(palette%):PROChtpal
& %�2:�loadtemplates($mb_templates%)
&*!�3:�checkfull($mb_templates%)
&4$�savetemplates($mb_templates%,�)
&>�4:�finish:�
&H�
&R�w_general%
&\Ȏ!menus%�
&f�0:�getcurw
&p%mx%=mmousex%-bx%:my%=mmousey%-by%
&zix%=default%!96-default%!88
&� iy%=default%!100-default%!92
&�?q%!4=mx%-ix%/2:q%!8=my%-iy%/2:q%!12=q%!4+ix%:q%!16=q%!8+iy%
&�-�I%=0�12�4:q%!(20+I%)=default%!(104+I%):�
&�(ș"Wimp_CreateIcon",,q%�currenticon%
&�2ș"Wimp_ForceRedraw",!q%,q%!4,q%!8,q%!12,q%!16
&��1:�getcuri
&��deleteicon(!q%,q%!4)
&�X�decodeicon(menus%+4,q%+24,q%+28,ib_text%,ib_sprite%,ib_buffersize%,$ib_validation%)
&�Lcurrenticon%=�cricon(!q%,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28,q%!32,q%!36)
&��2:renumber%=�$mb_renumber%
&�4�renumber(currentwindow%,currenticon%,renumber%)
&�0�renumber%<9999�$mb_renumber%=�(renumber%+1)
&��3:�getcuri
'�flags%�&100�
'+B%=�workspace(q%!36):$B%=text$:q%!28=B%
'=�q%!32>0�B%=�workspace(�$(q%!32)+1):$B%=$(q%!32):q%!32=B%
'$�
'.*x0%=q%!8:y0%=q%!12:x1%=q%!16:y1%=q%!20
'8Ȏmenus%!4�
'B�-1:copyx%=16:copyy%=-16
'L�0:copyx%=x0%-x1%:copyy%=0
'V�1:copyx%=x1%-x0%:copyy%=0
'`�2:copyx%=0:copyy%=y1%-y0%
'j�3:copyx%=0:copyy%=y0%-y1%
't�
'~3x0%+=copyx%:y0%+=copyy%:x1%+=copyx%:y1%+=copyy%
'�Ecurrenticon%=�cricon(!q%,x0%,y0%,x1%,y1%,q%!24,q%!28,q%!32,q%!36)
'�!�4:h%=handle%(currentwindow%)
'��geti(h%,currenticon%)
'�8oldf%=iflags%:o0%=idata%!0:o1%=idata%!4:o2%=idata%!8
'� �deleteicon(h%,currenticon%)
'�Ȏmenus%!4�
'��0:ix0%-=dx%:ix1%-=dx%
'��1:ix0%+=dx%:ix1%+=dx%
'��2:iy0%+=dy%:iy1%+=dy%
'��3:iy0%-=dy%:iy1%-=dy%
'��
'�Bcurrenticon%=�cricon(h%,ix0%,iy0%,ix1%,iy1%,oldf%,o0%,o1%,o2%)
( 8�5:�deleteicon(handle%(currentwindow%),currenticon%)
(
%�6:�decodemenu(w_flags%,menus%+4)
("�7:�menus%!4<>-1�menus%!8<>-1�
(!q%=handle%(currentwindow%)
((ș"Wimp_GetWindowInfo",,q%
(2q%?(36+menus%!4)=menus%!8
(<curw%=currentwindow%
(F"�crwindow(q%+4,wident$(curw%))
(P�deletewindow(curw%)
(Z�
(d#�8:�setworkarea(currentwindow%)
(n7�9:�checkident($mb_wident%,wident$(currentwindow%))
(x'wident$(currentwindow%)=$mb_wident%
(�7�10:�deletewindow(currentwindow%):currentwindow%=-1
(��
(�
�w_flags%
(��!menus%=-1��
(�!q%=handle%(currentwindow%)
(�ș"Wimp_GetWindowInfo",,q%
(�Ȏ!menus%�
(��0:�decodetitle(1)
(��1:q%!32=q%!32�&02
(��2:q%!32=q%!32�&04
(��3:q%!32=q%!32�&08
(��4:q%!32=q%!32�&10
(��5:q%!32=q%!32�&20
)�6:q%!32=q%!32�&40
)�7:q%!32=q%!32�&80
)�8:q%!32=q%!32��&300
)"Ȏmenus%!4�
),�0:q%!32=q%!32�&100
)6�1:q%!32=q%!32�&200
)@�
)J�
)T�9:q%!32=q%!32�&400
)^�10:q%!32=q%!32�&800
)h�11:q%!32=q%!32�&1000
)r*�12:�menus%!4<>-1�q%!64=(menus%!4)<<12
)|�13:q%!32=q%!32�&80000000
)�4�14,15,17,18,19,20:q%!32=q%!32�(1<<(10+!menus%))
)��16:�decodetitle(1<<26)
)��
)�curw%=currentwindow%
)�"�crwindow(q%+4,wident$(curw%))
)��deletewindow(curw%)
)��m_sprite%
)�Ȏ!menus%�
)��0:�undo(currentsprite%)
)��1:�menus%!4<>-1�
)�sprcolour%=menus%!4
)�)�unhtpal:palcolour%=sprcolour%:�htpal
)��
*�2:sprcolour%=16
*@�3:ș"OS_SpriteOp",&11D,spritearea%,spriten$(currentsprite%)
*!�updatesprite(currentsprite%)
*&@�4:ș"OS_SpriteOp",&11E,spritearea%,spriten$(currentsprite%)
*0!�updatesprite(currentsprite%)
*:;�5,6,7,8:�adjustsize(currentsprite%,!menus%-5,menus%!4)
*D�9:�flipx(currentsprite%)
*N�10:�flipy(currentsprite%)
*X�
*b�m_spritelist%
*lȎ!menus%�
*v�0:�$mb_crsprite%<>""�
*�9ș"XOS_SpriteOp",&128,spritearea%,mb_crsprite%�R0%;f%
*�(�(f%�1)=0��1,"Sprite already exists"
*�;ș"OS_SpriteOp",&10F,spritearea%,mb_crsprite%,0,16,8,12
*��spriteinfo
*��
*��1:
*�m%=menus%!4:�m%<0�m%=0
*�9ș"Wimp_WhichIcon",spritelist%,q%+&80,&200001,&200001
*�A�geti(spritelist%,q%!&80):master$=�iconstring(iflags%,idata%)
*��7
*�I%=q%+&84:ȕ!I%<>-1
*�<�geti(spritelist%,!I%):text$=�iconstring(iflags%,idata%)
*�5ș"OS_SpriteOp",&123,spritearea%,master$,text$,m%
+I%+=4:�
+�7
+�spriteinfo
+ �2:�getpointer
+*2�dialogue(dial_delete%,mousex%-100,mousey%+20)
+4%�3:�$mb_rnsprite%<>renamesprite$�
+>?ș"OS_SpriteOp",&11B,spritearea%,renamesprite$,mb_rnsprite%
+H�spriteinfo
+R�
+\%�4:�$mb_rnsprite%<>renamesprite$�
+f?ș"OS_SpriteOp",&11A,spritearea%,renamesprite$,mb_rnsprite%
+p�spriteinfo
+z�
+�-�5:�loadsprites($mb_spritef%):�spriteinfo
+�$�6:� PROCcheckfull($mb_spritef%)
+�(� PROCsavesprites($mb_spritef%,TRUE)
+�.�7:�mergesprites($mb_spritef%):�spriteinfo
+��
+��
+��
+�
+�"��loadsprites(f$)� LOCAL I%,f$
+�'ș"OS_SpriteOp",&10A,spritearea%,f$
+�#�f$<>"<Wimp$Scrap>"�spritef$=f$
+��redrawwindows
+��
,
,��savesprites(f$,safe%)
,'ș"OS_SpriteOp",&10C,spritearea%,f$
,$�safe%��
,.spritef$=f$
,8#�$spritef%<>�spfname(spritef$)�
,B $spritef%=�spfname(spritef$)
,L,!q%=spritelist%:ș"Wimp_CloseWindow",,q%
,V�front(spritelist%)
,`�
,j�
,t
,~��mergesprites(f$)
,�'ș"OS_SpriteOp",&10B,spritearea%,f$
,��redrawwindows
,��
,�
,���redrawwindows
,��I%
,�
�I%=0�nh%
,�G�handle%(I%)>nh%�ș"Wimp_ForceRedraw",handle%(I%),-1E8,-1E8,1E8,1E8
,��
,��
,�
,�ݤfiletype(f$)
-
�f%,type%
-
ș"OS_File",17,f$�type%,,f%
-�type%<>1�=-2
-&�(f%>>>20)=&FFF�=(f%>>>8)�&FFF�=-1
-(
-2��decodetitle(bit%)
-<Ȏmenus%!4�
-F�-1:q%!32=q%!32�bit%
-P:q%!32=q%!32�bit%
-Z�
-d<�menus%!4=8�menus%!4=9:� bodge for 'right-justified' bit
-n7�menus%!4=7�menus%!4=8:� bodge for 'indirected' bit
-xK�decodeicon(menus%+4,q%+60,q%+76,tb_text%,tb_sprite%,tb_buffersize%,"")
-��
-�
-���setxy(�x%,�y%,a$,sep$)
-�x%=�a$:y%=��a$,�a$,sep$)+1)
-��
-�
-���setwork(q%,v%)
-�"!q%=�$v%:q%!4=�$(v%+�$v%,","))
-��
-�
-���setworkarea(curw%)
-��h%
-�h%=handle%(curw%)
.�setwork(q%,mb_workarea0%)
. �setwork(q%+8,mb_workarea1%)
.ș"Wimp_SetExtent",h%,q%
.",min%=(�$mb_minx%�&FFFF)�(�$mb_miny%<<16)
.,%!q%=h%:ș"Wimp_GetWindowInfo",,q%
.6�q%!72<>min%�
.@9q%!72=min%:ș"Wimp_CreateWindow",,q%+4�handle%(curw%)
.J.!q%=handle%(curw%):ș"Wimp_OpenWindow",,q%
.T$!q%=h%:ș"Wimp_DeleteWindow",,q%
.^�
.h�
.r
.|��godeletesprites
.�?I%=q%+&40:ș"Wimp_WhichIcon",spritelist%,I%,&200001,&200001
.�!q%=spritelist%
.�
ȕ!I%<>-1
.�&q%!4=!I%:ș"Wimp_GetIconState",,q%
.�*ș"OS_SpriteOp",&119,spritearea%,q%+28
.�I%+=4:�
.��spriteinfo
.��
.�
.�J��decodeicon(menus%,fptr%,qptr%,mb_text%,mb_sprite%,mb_buffersize%,v$)
.�Ȏ!menus%�
.��0:oldf%=!fptr%
.�Ȏmenus%!4�
/�-1:!fptr%=!fptr%�&01
/9� IF!fptr%AND&01THEN!fptr%=!fptr%ANDNOT&02
/:!fptr%=!fptr%�&01
/&%�(oldf%�&01)=0�!fptr%=!fptr%��&02
/0�
/:/�puticonstring(oldf%,fptr%,qptr%,$mb_text%)
/D�1:oldf%=!fptr%
/NȎmenus%!4�
/X�-1:!fptr%=!fptr%�&02
/b9� IF!fptr%AND&02THEN!fptr%=!fptr%ANDNOT&01
/l:!fptr%=(!fptr%��&03)�&02
/v�
/�+�!fptr%�&01�A$=$mb_text%�A$=$mb_sprite%
/�(�p�p�constring(oldf%,fptr%,qptr%,A$)
/��2:!fptr%=!fptr%�&04
/��3:!fptr%=!fptr%�&08
/��4:!fptr%=!fptr%�&10
/��5:!fptr%=!fptr%�&20
/�C�6:ș"Wimp_DecodeMenu",,i_font%,menus%+4,�100," ")�,,,fontname$
/�0�menus%!4<>-1�menus%!8=4�fontname$+=" point"
/��fontname$=""�
/�!fptr%=!fptr%��&40
/�fptr%?3=&D7
/��!fptr%=!fptr%�&40
/���fontname$,5)="point"�
0I%=�fontname$
0"�I%=I%-1:��fontname$,I%,1)="."
0psiz%=��fontname$,I%+1)
0 fontname$=�fontname$,I%-1)
0*
�psiz%=12
04�
0>&fptr%?3=�findfont(fontname$,psiz%)
0H�
0R�7:!fptr%=!fptr%�&80
0\(�8:�!fptr%�&100�B$=$!qptr%�B$=$qptr%
0f6�menus%!4=-1�!fptr%=!fptr%�&100�!fptr%=!fptr%�&100
0p�!fptr%�&100�
0zqptr%!8=�$mb_buffersize%
0�5!qptr%=�workspace(qptr%!8):$!qptr%=�B$,qptr%!8-1)
0��v$=""�
0�qptr%!4=-1
0���(!fptr%�&03)=&02�
0�qptr%!4=spritearea%
0�,�qptr%!4=�workspace(�v$+1):$(qptr%!4)=v$
0��
0��
0��$qptr%=�B$,11)
0��
0��(!fptr%�&103)=&102�
0�!�qptr%!4>1�!fptr%=!fptr%��&02
0��
1�9:!fptr%=!fptr%�&200
1�10:!fptr%=!fptr%�&400
1�11:!fptr%=!fptr%�&800
1$+�12:!fptr%=�field(!fptr%,12,4,menus%!4)
1.+�13:!fptr%=�field(!fptr%,16,5,menus%!4)
18+�14:!fptr%=�field(!fptr%,24,4,menus%!4)
1B+�15:!fptr%=�field(!fptr%,28,4,menus%!4)
1L�
1V�
1`
1jݤfield(flg%,b0%,nb%,i%)
1t6�i%<>-1�=flg%��(((1<<nb%)-1)<<b0%)�(i%<<b0%)�=flg%
1~
1�)��puticonstring(oldf%,fptr%,qptr%,A$)
1��oldf%�&100�
1�1�(!fptr%�&03)=&02�qptr%!4=-1:� no sprite area
1��A$<qptr%!8�
1�#$!qptr%=A$:!fptr%=!fptr%�&100:�
1��
1�
��A$<12�
1�#$qptr%=A$:!fptr%=!fptr%��&100:�
1��
1��
1�!fptr%=!fptr%�&100
1�*!qptr%=�workspace(�A$+1):qptr%!8=�A$+1
2 $!qptr%=A$
2
C�(oldf%�&100)=0�qptr%!4=-1:� keep old validation string, if any
2�
2
2(R------------------------------------------------------------------------------
22
2<!��renumber(curw%,curi%,newi%)
2F
�M%,N%
2P!q%=handle%(curw%)
2Zș"Wimp_GetWindowInfo",,q%
2d/�q%!88<=newi%��1,"Icon number out of range"
2nM%=q%+4+88+32*curi%
2xN%=q%+4+88+32*newi%
2��I%=0�28�4:ȔM%!I%,N%!I%:�
2�I%=q%!88
2�
ȕI%>0
2�7�q%!(4+88+32*(I%-1)+16)�(1<<23)�I%-=1:q%!88=I%�I%=0
2��
2�"�crwindow(q%+4,wident$(curw%))
2��deletewindow(curw%)
2��
2�
2�R------------------------------------------------------------------------------
2�
2���dialogue(handle%,mx%,my%)
2��getw(handle%)
39�open(handle%,mx%,my%+y0%-y1%,mx%+x1%-x0%,my%,0,0,-1)
37ș"Wimp_SetCaretPosition",handle%,-1,0,0,&3000000,0
3�getw(handle%)
3""ȗȓx0%,y0%,x1%-x0%,y1%-y0%+40
3,dialogue%=handle%
36�
3@
3JR------------------------------------------------------------------------------
3T
3^��standardwindow(brx%,bry%)
3h*�I%=0�84�4:q%!I%=default%!I%:�:q%!84=0
3rq%!64=spritearea%
3|'I%=q%!8-q%!0:q%!0=brx%:q%!8=q%!0+I%
3�*I%=q%!4-q%!12:q%!12=bry%:q%!4=q%!12+I%
3��
3�
3�L!q%=brx%:q%!4=bry%-200:q%!8=brx%+200:q%!12=bry%:q%!16=0:q%!20=0:q%!24=-1
3�
q%!28=&1F
3�7q%?32=`tfcol:q%?33=`tbcol:q%?34=`wfcol:q%?35=`wbcol
3�.q%?36=4:q%?37=`tbcol:q%?38=`tbcol2:q%?39=0
3�*q%!40=0:q%!44=-1024:q%!48=1280:q%!52=0
3�#q%!56=&0000003D:q%!60=&00003000
3�q%!64=spritearea%:q%!68=0
3�$(q%+72)="<Untitled>"
3�q%!84=0
3��
4
4%��createwindow(brx%,bry%,wident$)
4�standardwindow(brx%,bry%)
4&�crwindow(q%,wident$)
40�
4:
4D��crwindow(q%,wident$)
4N%ș"Wimp_CreateWindow",,q%�handle%
4XAm%=handleSP%:handleSP%=handle%(handleSP%):handle%(m%)=handle%
4b!q%=handle%
4lș"Wimp_GetWindowState",,q%
4vș"Wimp_OpenWindow",,q%
4�)currentwindow%=m%:wident$(m%)=wident$
4�currenticon%=-1
4��highlight(m%)
4��
4�
4�ݤwhichwindow(handle%)
4��I%
4��handle%=-1�=-1
4�handle%(nh%+1)=handle%
4�%I%=-1:�I%+=1:�handle%(I%)=handle%
4��I%>nh%�=-1�=I%
4�
4�ݤwhichsprite(handle%)
5�handle%=-1�=-1
5spritew%(ns%+1)=handle%
5&I%=-1:�I%+=1:�spritew%(I%)=handle%
5 �I%>ns%�=-1�=I%
5*
54��deletewindow(I%)
5>!q%=handle%(I%)
5H&handle%(I%)=handleSP%:handleSP%=I%
5Rș"Wimp_DeleteWindow",,q%
5\wident$(I%)=""
5f�
5p
5z��deletesprite(I%)
5�0�((paint_drag%>>16)�&7FFF)=I%�paint_drag%=-1
5��i%
5��sprSP2%=I%�
5�sprSP2%=nsprite%(I%)
5�.�i%=sprSP2%:�i1%=i%:i%=nsprite%(i%):�i%=I%
5�nsprite%(i1%)=nsprite%(i%)
5��
5�/�seti(spritelist%,spritei%(I%)�1,0,&600000)
5�!q%=spritew%(I%)
5�!spritew%(I%)=sprSP%:sprSP%=I%
5�ș"Wimp_DeleteWindow",,q%
5��
5�
6
��getcurw
6!q%=handle%(currentwindow%)
6ș"Wimp_GetWindowState",,q%
6$�info(q%+4)
6.�
68
6B
��getcuri
6L!q%=handle%(currentwindow%)
6Vq%!4=currenticon%
6`ș"Wimp_GetIconState",,q%
6j.cx0%=q%!8:cy0%=q%!12:cx1%=q%!16:cy1%=q%!20
6tflags%=q%!24
6~.�flags%�&100�text$=$(q%!28)�text$=$(q%+28)
6�D�(flags%�&103)=&103�sprite$=�getcommand(q%!32,"S")�sprite$=text$
6��
6�
6�ݤgetcommand(v%,c$)
6��v%<=0�=""
6��I%
6�!I%=�";"+$v%,";"+c$):�I%=0�=""
6�$=�$(v%+I%),�$(v%+I%)+";",";")-1)
6�
6�
c$=�$v
6�
6�ݤiconstring(flg%,p%)
7
�i%,i$
7
8�flg%�&100�i$=$!p%�i%=p%?12:p%?12=13:i$=$p%:p%?12=i%
7=i$
7
7(��getpointer
72ș"Wimp_GetPointerInfo",,q%
7<*mousex%=!q%:mousey%=q%!4:buttons%=q%!8
7Fhandle%=q%!12:icon%=q%!16
7P�
7Z
7dR------------------------------------------------------------------------------
7n
7x��errorbox(err%,err$,erl%)
7��editoff("")
7�!Err%=err%:Err$=err$:Erl%=erl%
7�/�inerror%��-1��errordisplay(err%,err$,erl%)
7�inerror%=�
7�.ș"Wimp_DragBox",,-1:dragtype%=0:pdrag%=-1
7�$�dialogue%<>-1��close(dialogue%)
7��version%>120�
7��errbuf%255
7�6!errbuf%=err%:$(errbuf%+4)=err$:?(errbuf%+4+��$)=0
7�+ș"Wimp_ReportError",errbuf%,1,"FormEd"
7���4:�err$;
7��erl%<>0��" at line ";erl%
7��
8-ș"Wimp_ForceRedraw",-1,-1E8,-1E8,1E8,1E8
8�
8inerror%=�
8"�
8,
86#� /// old errorbox handling ///
8@�I%=1�4
8J3!q%=errorbox%:q%!4=I%:ș"Wimp_GetIconState",,q%
8Terroraddr%(I%)=q%!28:�
8^ �I%=1�4:?erroraddr%(I%)=13:�
8hmenu$=err$:I%=1:J%=0:i%=0
8r�w$=�par(" ")
8|;�J%>0�J%+1+�w$>19�I%+=1:J%=0:�I%>4��1,"Error too big":�
8��J%>0�w$=" "+w$
8�#$(erroraddr%(I%)+J%)=w$:J%+=�w$
8��w$=""�w$=" "
8� �dialogue(errorbox%,300,650)
8��
8�
8�"��errordisplay(err%,err$,erl%)
8�
8��version%>120�
8��errbuf%255
8�6!errbuf%=err%:$(errbuf%+4)=err$:?(errbuf%+4+��$)=0
8�+ș"Wimp_ReportError",errbuf%,2,"FormEd"
8���4:�err$;
9�erl%<>0��" at line ";erl%
9�
9�finish
9&�
90
9:��finish
9D
�I%=0�255
9N?ȕfontcounts%?I%>0:ș"Font_LoseFont",I%:fontcounts%?I%-=1:�
9X�
9b�bodgeit%�
9l-�I%=1�8:ș"OS_Byte",I%+220,oldfx%(I%),0:�
9vș"OS_Byte",219,oldfx219%,0
9��ș"Wimp_CloseDown"
9��
9�)�version%<120��4,26,30,17,&8F,17,0,12
9��
9�
9�� *FX 225 1
9�(� OSCLI"Key 9 LIST "+STR$erl%+"|K|M"
9�� *FX 15 1
9�#� IF erl%<>0 THEN *FX 138 0 137
9� � END
9�
9�R------------------------------------------------------------------------------
9�
:ݤworkspace(L%)
::�curbuff%+L%>buffer%+maxbuf%��1,"No more buffer space"
:curbuff%+=L%:=curbuff%-L%
:
:*R------------------------------------------------------------------------------
:4
:>ݤfindfont(f$,p)
:H�f%
:R*ș"Font_FindFont",,f$,p*16,p*16,0,0�f%
:\fontcounts%?f%+=1
:f6�fontcounts%?f%>=255��1,"Internal font table full"
:p=f%
:z
:�R------------------------------------------------------------------------------
:�
:���spriteinfo
:��I%
:�7I%=q%+4:ș"Wimp_WhichIcon",spritelist%,I%,&800000,0
:�Aȕ!I%<>-1:I%!-4=spritelist%:ș"Wimp_DeleteIcon",,I%-4:I%+=4:�
:�9i%=sprSP2%:ȕi%<>-1:spritei%(i%)=-1:i%=nsprite%(i%):�
:�,!q%=spritelist%:ș"Wimp_CloseWindow",,q%
:� $spritef%=�spfname(spritef$)
:�1ș"OS_SpriteOp",&108,spritearea%�,,,nsprites%
:�?maxspwidth%=scrx1%-80:curx%=0:cury%=0:maxw%=0:maxh%=0:ix%=0
:��nsprites%>0�
:��I%=1�nsprites%
;�readsprite(I%)
;Eflags%=&1701A429:text$=$spritename%:�getminxy(flags%,text$,text$)
;,�minx%>spw%�spwx%=minx%+32�spwx%=spw%+32
;$+�curx%+spwx%>maxspwidth%��lineofsprites
;.spwx%(ix%)=spwx%
;82�-32-sph%-miny%-8<maxh%�maxh%=-32-sph%-miny%-8
;BCspw%(ix%)=spw%:sph%(ix%)=sph%:minx%(ix%)=minx%:miny%(ix%)=miny%
;Lspname$(ix%)=$spritename%
;Vcurx%+=spwx%(ix%):ix%+=1
;`�
;j�lineofsprites
;t�
;~'!q%=0:q%!4=cury%:q%!8=maxw%:q%!12=0
;�%ș"Wimp_SetExtent",spritelist%,q%
;��front(spritelist%)
;�i%=sprSP2%:ȕi%<>-1
;�i2%=nsprite%(i%)
;��close(spritew%(i%))
;�.�spritei%(i%)>=0��opensprite(spritei%(i%))
;�i%=i2%:�
;�5ș"Wimp_ForceRedraw",spritelist%,0,-30000,30000,0
;��
;�
;�ݤspfname(sp$)
;�<�sp$>spflen%-2�="'..."+�sp$,spflen%-5)+"'"�="'"+sp$+"'"
<