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$+"'" <