Home » Archimedes archive » Acorn User » AU 1995-06.adf » !StarInfo_StarInfo » Horman/!Stereo/!RunImage

Horman/!Stereo/!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 » Acorn User » AU 1995-06.adf » !StarInfo_StarInfo
Filename: Horman/!Stereo/!RunImage
Read OK:
File size: 2553 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > !RunImage
   20REM by David Horman
   30REM LEN 1995
   40:
   50SYS "Hourglass_On"
   60wimp%=FALSE
   70PROCinit
   80PROCload_templates
   90PROCassemble
  100PROCread_patterns
  110PROCload_pattern
  120PROCbuild_menu
  130SYS "Hourglass_Off"
  140PROCcreate_icon
  150:
  160quit%=FALSE
  170ONERRORPROCerror(REPORT$)
  180REPEAT
  190SYS "Wimp_Poll",%110000110011,block TO reason%
  200CASE reason% OF
  210WHEN 2 : SYS "Wimp_OpenWindow",,block
  220WHEN 6 : PROCclick
  230WHEN 7 : PROCsend_save
  240WHEN 8 : IF block!24<&20 OR block!24>&FF THEN SYS "Wimp_ProcessKey",block!24
  250WHEN 9 : PROCmenu_selection
  260WHEN 17,18,19 : PROCmessage
  270ENDCASE
  280UNTILquit%
  290PROCclose_down
  300:
 1000DEFPROCclick
 1010IF block!12=-2 AND block!8=2 THEN SYS "Wimp_CreateMenu",,menu,!block-64,296
 1020IF block!12=-2 AND block!8=4 AND stereo%=TRUE THEN PROCdisplay
 1030IF block!8=64 OR block!8=16 THEN click%=block!8 : PROCdrag_box
 1040IF block!12=xfer% AND block!16=0 AND block!8<>2 THEN PROCok_save
 1050ENDPROC
 1060:
 2000DEFPROCmenu_selection
 2010SYS "Wimp_GetPointerInfo",,ablock
 2020SYS "Wimp_DecodeMenu",,menu,block,STRING$(192," ") TO ,,,item$
 2030IF item$="Quit" THEN quit%=TRUE
 2040IF item$="Update" THEN PROCupdate
 2050IF item$="Display" AND stereo%=TRUE THEN CALL blitter
 2060IF block!0=2 THEN
 2070pattern%=(block!4)+1
 2080pattern$=pattern$(pattern%)
 2090PROCbuild_menu
 2100PROCload_pattern
 2110ENDIF
 2120IF ablock!8=1 THEN SYS "Wimp_CreateMenu",,menu,!block-64,296
 2130ENDPROC
 2140:
 3000DEFPROCmessage
 3010CASE block!16 OF
 3020WHEN 0 : quit%=TRUE
 3030WHEN 2 : PROCsave_ack
 3040WHEN 3,5 : PROCload
 3050ENDCASE
 3060ENDPROC
 3070:
 4000DEFPROCload
 4010IF block!16=5 AND block!40<>&128 THEN ENDPROC
 4020block!16=4
 4030block!12=block!8
 4040SYS "Wimp_SendMessage",reason%,block,block!4
 4050SYS "OS_File",13,block+44 TO type%,,,,length%,attributes%
 4060filetype%=block!40
 4070IF type%=2 THEN PROCerror("Object is a directory") : ENDPROC
 4080IF filetype%<>&FF9 AND filetype%<>&128 THEN PROCerror("Invalid filetype") : ENDPROC
 4090IF filetype%=&FF9 AND length%<163840 AND length%>164864 THEN PROCerror("Invalid sprite length (does it have a mask?)") : ENDPROC
 4100IF filetype%=&128 AND length%<1280 THEN PROCerror("Short file") : ENDPROC
 4110mode%=MODE
 4120*screensize 160k
 4130SYS "Wimp_ReadPalette",,ablock
 4140SYS "Wimp_SetMode",15 : OFF
 4150IF MODE<>15 THEN PROCerror("Not enough memory (160k of screen memory required)") : ENDPROC
 4160!ext=length%
 4170block!0=148
 4180block!4=-1
 4190SYS "OS_ReadVduVariables",block,screen
 4200IF filetype%=&128 THEN
 4210SYS "OS_File",16,block+44,bank+56,0
 4220CALL decompress
 4230CALL cls
 4240CALL stereo
 4250ELSE
 4260SYS "OS_File",16,block+44,bank+56,0
 4270!bank_ptr=bank+56+(length%-163840)
 4280CALL blitter
 4290!bank_ptr=bank+56
 4300CALL cls
 4310CALL stereo
 4320ENDIF
 4330CALL blitter
 4340*pointer 0
 4350REPEAT
 4360MOUSE x%,y%,z%
 4370UNTILz%<>0
 4380REPEAT
 4390MOUSE x%,y%,z%
 4400UNTILz%=0
 4410SYS "Wimp_SetMode",mode%
 4420SYS "Wimp_SetPalette",,ablock
 4430SYS "Wimp_ForceRedraw",-1,0,0,1280,1024
 4440*pointer 1
 4450stereo%=TRUE
 4460PROCbuild_menu
 4470ENDPROC
 4480:
 5000DEFPROCload_pattern
 5010f%=OPENIN("<Stereo$Dir>.Patterns."+pattern$)
 5020IF f%=0 THEN
 5030PROCerror("File not found")
 5040PROCupdate
 5050ENDIF
 5060CLOSE#f%
 5070f%=OPENIN("<Stereo$Dir>.Patterns."+pattern$)
 5080ext%=EXT#f%
 5090CLOSE#f%
 5100SYS "OS_File",16,"<Stereo$Dir>.Patterns."+pattern$,pattern,0
 5110!pattern_ptr=pattern+(ext%-24576)
 5120ENDPROC
 5130:
 6000DEFPROCdrag_box
 6010ablock!0=xfer%
 6020SYS "Wimp_GetWindowOutline",,ablock
 6030min_x%=ablock!4+78
 6040min_y%=ablock!8+80
 6050x%=block!0
 6060y%=block!4
 6070x_offset%=x%-min_x%
 6080y_offset%=y%-min_y%
 6090block!4=5
 6100block!8=min_x% : block!12=min_y%
 6110block!16=min_x%+68 : block!20=min_y%+68
 6120block!24=-x_offset% : block!28=-y_offset%
 6130block!32=1346-x_offset% : block!36=1088-y_offset%
 6140SYS "Wimp_DragBox",,block
 6150ENDPROC
 6160:
 7000DEFPROCsend_save
 7010SYS "Wimp_GetPointerInfo",,block
 7020ablock!0=xfer%
 7030ablock!4=2
 7040SYS "Wimp_GetIconState",,ablock
 7050stop%=0
 7060pointer%=0
 7070REPEAT
 7080IF ?(ablock!28+pointer%)=46 THEN stop%=pointer%+1
 7090pointer%+=1
 7100UNTIL?(ablock!28+pointer%)<&20
 7110pointer%=0
 7120REPEAT
 7130?(ablock+44+pointer%)=?(ablock!28+pointer%+stop%)
 7140pointer%+=1
 7150?(ablock+44+pointer%)=0
 7160UNTIL?(ablock!28+pointer%)<&20
 7170ablock!0=44+(pointer%+3)ANDNOT 3
 7180ablock!12=0
 7190ablock!16=1
 7200ablock!20=block!12
 7210ablock!24=block!16
 7220ablock!28=block!0
 7230ablock!32=block!4
 7240ablock!36=163896
 7250ablock!40=&FF9
 7260SYS "Wimp_SendMessage",18,ablock,ablock!20,ablock!24
 7270ENDPROC
 7280:
 8000DEFPROCsave_ack
 8010IF block!36<>-1 THEN
 8020error$=""
 8030SYS "OS_File",10,block+44,&FF9,,bank,bank+163896
 8040IF error$<>"" THEN PROCerror(error$) : ENDPROC
 8050IF click%=64 THEN SYS "Wimp_CreateMenu",-1
 8060ablock!0=xfer%
 8070ablock!4=2
 8080SYS "Wimp_GetIconState",,ablock
 8090pointer%=-1
 8100REPEAT
 8110pointer%+=1
 8120?(ablock!28+pointer%)=?(block+44+pointer%)
 8130UNTIL?(block+44+pointer%)=0
 8140ablock!8=0
 8150ablock!12=0
 8160SYS "Wimp_SetIconState",,ablock
 8170ENDIF
 8180ENDPROC
 8190:
 9000DEFPROCok_save
 9010ablock!0=xfer%
 9020ablock!4=2
 9030SYS "Wimp_GetIconState",,ablock
 9040stop%=FALSE
 9050pointer%=0
 9060REPEAT
 9070?(ablock+44+pointer%)=?(ablock!28+pointer%)
 9080IF ?(ablock!28+pointer%)=46 THEN stop%=TRUE
 9090pointer%+=1
 9100UNTIL?(ablock!28+pointer%)<&20
 9110?(ablock+44+pointer%)=0
 9120IF stop%=FALSE THEN PROCerror("To save, drag the file icon to a directory display") : ENDPROC
 9130SYS "OS_File",10,ablock+44,&FF9,,bank,bank+163896
 9140IF block!8=4 THEN SYS "Wimp_CreateMenu",-1
 9150ENDPROC
 9160:
10000DEFPROCdisplay
10010mode%=MODE
10020*screensize 160k
10030SYS "Wimp_ReadPalette",,ablock
10040SYS "Wimp_SetMode",15 : OFF
10050IF MODE<>15 THEN PROCerror("Not enough memory (160k of screen memory required)") : ENDPROC
10060CALL blitter
10070*pointer 0
10080REPEAT
10090MOUSE x%,y%,z%
10100UNTILz%<>0
10110REPEAT
10120MOUSE x%,y%,z%
10130UNTILz%=0
10140SYS "Wimp_SetMode",mode%
10150SYS "Wimp_SetPalette",,ablock
10160SYS "Wimp_ForceRedraw",-1,0,0,1280,1024
10170*pointer 1
10180ENDPROC
10190:
11000DEFPROCupdate
11010p%=pattern%
11020PROCread_patterns
11030pattern%=p%
11040IF no%<pattern% THEN pattern%=no%
11050pattern$=pattern$(pattern%)
11060PROCbuild_menu
11070PROCload_pattern
11080ENDPROC
11090:
12000DEFPROCinit
12010DIM pattern 32768 , block 1024 , menu 1024 , submenu 4096
12020DIM bank 164840 , ablock 1024 , error 1024
12030DIM template1 1024 , template2 1024 , indir1 1024 , indir2 1024
12040DIM pattern$(64)
12050SYS "OS_File",16,"<Stereo$Dir>.Header",bank,0
12060stereo%=FALSE
12070SYS "Wimp_Initialise",200,&4B534154,"Stereo" TO ,task_handle%
12080wimp%=TRUE
12090ENDPROC
12100:
13000DEFPROCload_templates
13010SYS "Wimp_OpenTemplate",,"<Stereo$Dir>.Templates"
13020SYS "Wimp_LoadTemplate",,template1,indir1,indir1+1024,-1,"Info",0
13030SYS "Wimp_LoadTemplate",,template2,indir2,indir2+1024,-1,"xfer_send",0
13040SYS "Wimp_CreateWindow",,template1 TO info%
13050SYS "Wimp_CreateWindow",,template2 TO xfer%
13060ENDPROC
13070:
14000DEFPROCassemble
14010DIM code 1024
14020FOR pass%=0 TO 2 STEP 2
14030P%=code
14040[Opt pass%
14050.screen EQUD 0
14060.pattern_ptr EQUD 0
14070.bank_ptr EQUD bank+56
14080.ext EQUD 0
14090.stereo
14100.plot_pattern
14110Ldr R0,bank_ptr
14120Ldr R1,pattern_ptr
14130Mov R2,#256
14140.plot_y_loop
14150Mov R3,#3
14160.plot_x_loop
14170LdmIa R1!,{R5-R12}
14180StmIa R0!,{R5-R12}
14190SubS R3,R3,#1
14200BNe plot_x_loop
14210Add R0,R0,#640
14220Sub R0,R0,#96
14230SubS R2,R2,#1
14240BNe plot_y_loop
14250:
14260.create_stereo
14270Ldr R0,screen
14280Ldr R1,bank_ptr
14290Mov R2,#96
14300.x_loop
14310Mov R3,#255
14320.y_loop
14330Mov R4,R3,Lsl#9
14340Add R4,R4,R3,Lsl#7
14350Add R5,R0,R4
14360Sub R5,R5,#96
14370Add R6,R1,R4
14380LdrB R7,[R5,R2]
14390Sub R9,R2,#96
14400Add R9,R9,R7
14410LdrB R8,[R6,R9]
14420StrB R8,[R6,R2]
14430SubS R3,R3,#1
14440BGe y_loop
14450Add R2,R2,#1
14460Cmp R2,#640
14470BNe x_loop
14480Mov PC,R14
14490:
14500.cls
14510Ldr R0,bank_ptr
14520Mov R2,#0 : Mov R3,#0 : Mov R4,#0 : Mov R5,#0 : Mov R6,#0
14530Mov R7,#0 : Mov R8,#0 : Mov R9,#0 : Mov R10,#0 : Mov R11,#0
14540Mov R12,#4096
14550.cls_loop
14560StmIa R0!,{R2-R11}
14570SubS R12,R12,#1
14580BNe cls_loop
14590Mov PC,R14
14600:
14610.blitter
14620Ldr R0,screen
14630Ldr R1,bank_ptr
14640Mov R12,#4096
14650.blitter_loop
14660LdmIa R1!,{R2-R11}
14670StmIa R0!,{R2-R11}
14680SubS R12,R12,#1
14690BNe blitter_loop
14700Mov PC,R14
14710:
14720.decompress
14730Ldr R0,screen
14740Ldr R1,bank_ptr
14750Mov R2,#0
14760Mov R3,#0
14770Ldr R11,ext
14780.decompress_loop
14790LdrB R12,[R1,R3]
14800Add R3,R3,#1
14810LdrB R5,[R1,R3]
14820Add R3,R3,#1
14830Add R12,R12,#1
14840.plot_loop
14850StrB R5,[R0,R2]
14860Add R2,R2,#1
14870SubS R12,R12,#1
14880BNe plot_loop
14890Cmp R3,R11
14900BNe decompress_loop
14910Mov PC,R14
14920] : NEXT
14930ENDPROC
14940:
15000DEFPROCread_patterns
15010SYS "OS_GBPB",10,"<Stereo$Dir>.Patterns",submenu,64,0,4096,0 TO ,,,no%
15020IF no%=0 THEN PROCerror("No patterns available") : PROCclose_down
15030sprites%=0 : pointer%=submenu : longest%=0
15040FOR loop%=1 TO no%
15050length%=pointer%!8
15060filetype%=(!pointer%>>8) AND &FFF
15070pointer%+=20
15080name$=""
15090REPEAT
15100name$+=CHR$(?pointer%)
15110pointer%+=1
15120UNTIL?pointer%=0
15130pointer%=(pointer%+4)ANDNOT 3
15140IF filetype%=&FF9 AND length%>24576 AND length%<=32768 THEN
15150sprites%+=1
15160pattern$(sprites%)=name$
15170IF LENname$>longest% THEN longest%=LENname$
15180ENDIF
15190NEXT
15200IF sprites%=0 THEN PROCerror("No valid patterns available") : PROCclose_down
15210pattern%=1 : pattern$=pattern$(pattern%)
15220ENDPROC
15230:
16000DEFPROCbuild_menu
16010$menu="Stereo"
16020menu!12=&70207
16030menu!16=128
16040menu!20=40
16050menu!24=0
16060menu_ptr%=menu+28
16070PROCmenu_item(0,info%,&7000021,"Info")
16080PROCmenu_item(0,xfer%,&7000021+((-NOTstereo%)<<22),"Save")
16090PROCmenu_item(0,submenu,&7000021,"Pattern")
16100PROCmenu_item(0,-1,&7000021,"Update")
16110PROCmenu_item(128,-1,&7000021,"Quit")
16120$submenu="Pattern"
16130submenu!12=&70207
16140submenu!16=(longest%+1)*16
16150width%=(longest%+1)*16
16160IF 128>width% THEN width%=128
16170submenu!16=width%
16180submenu!20=40
16190submenu!24=0
16200menu_ptr%=submenu+28
16210IF sprites%>1 THEN
16220FOR loop%=1 TO sprites%-1
16230PROCmenu_item(-(loop%=pattern%),-1,&7000021,pattern$(loop%))
16240NEXT
16250ENDIF
16260PROCmenu_item(128-(pattern%=sprites%),-1,&7000021,pattern$(sprites%))
16270ENDPROC
16280:
17000DEFPROCmenu_item(mflags%,submenu%,iflags%,text$)
17010!menu_ptr%=mflags%
17020menu_ptr%!4=submenu%
17030menu_ptr%!8=iflags%
17040$(menu_ptr%+12)=text$
17050menu_ptr%+=24
17060ENDPROC
17070:
18000DEFPROCcreate_icon
18010!block=-1
18020block!4=0 : block!8=0 : block!12=68 : block!16=68
18030block!20=&1700300A
18040$(block+24)="!Stereo"
18050SYS "Wimp_CreateIcon",,block TO icon_handle%
18060ENDPROC
18070:
19000DEFPROCerror(error$)
19010!error=255
19020$(error+4)=error$+CHR$(0)
19030VDU7
19040SYS "Wimp_ReportError",error,130,"Stereo"
19050ENDPROC
19060:
20000DEFPROCclose_down
20010IF wimp% THEN SYS "Wimp_CloseDown",task_handle%,&4B534154
20020END
20030ENDPROC
20040:

� > !RunImage
� by David Horman
� � 1995
(:
2ș "Hourglass_On"
<wimp%=�
F	�init
P�load_templates
Z
�assemble
d�read_patterns
n�load_pattern
x�build_menu
�ș "Hourglass_Off"
��create_icon
�:
�quit%=�
���error(�$)
��
�0ș "Wimp_Poll",%110000110011,block � reason%
�Ȏ reason% �
�%� 2 : ș "Wimp_OpenWindow",,block
�� 6 : �click
�� 7 : �send_save
�G� 8 : � block!24<&20 � block!24>&FF � ș "Wimp_ProcessKey",block!24
�� 9 : �menu_selection
� 17,18,19 : �message
�

�quit%
"�close_down
,:
���click
�H� block!12=-2 � block!8=2 � ș "Wimp_CreateMenu",,menu,!block-64,296
�4� block!12=-2 � block!8=4 � stereo%=� � �display
:� block!8=64 � block!8=16 � click%=block!8 : �drag_box
9� block!12=xfer% � block!16=0 � block!8<>2 � �ok_save
�
$:
���menu_selection
�$ș "Wimp_GetPointerInfo",,ablock
�9ș "Wimp_DecodeMenu",,menu,block,�192," ") � ,,,item$
�� item$="Quit" � quit%=�
�� item$="Update" � �update
-� item$="Display" � stereo%=� � � blitter
� block!0=2 �
pattern%=(block!4)+1
 pattern$=pattern$(pattern%)
*�build_menu
4�load_pattern
>�
H;� ablock!8=1 � ș "Wimp_CreateMenu",,menu,!block-64,296
R�
\:
�
��message
�Ȏ block!16 �
�� 0 : quit%=�
�� 2 : �save_ack
�� 3,5 : �load
��
��
�:
�
��load
�%� block!16=5 � block!40<>&128 � �
�block!16=4
�block!12=block!8
�/ș "Wimp_SendMessage",reason%,block,block!4
�;ș "OS_File",13,block+44 � type%,,,,length%,attributes%
�filetype%=block!40
�3� type%=2 � �error("Object is a directory") : �
�H� filetype%<>&FF9 � filetype%<>&128 � �error("Invalid filetype") : �
�s� filetype%=&FF9 � length%<163840 � length%>164864 � �error("Invalid sprite length (does it have a mask?)") : �
>� filetype%=&128 � length%<1280 � �error("Short file") : �
mode%=�
*screensize 160k
"!ș "Wimp_ReadPalette",,ablock
,ș "Wimp_SetMode",15 : �
6N� �<>15 � �error("Not enough memory (160k of screen memory required)") : �
@!ext=length%
Jblock!0=148
Tblock!4=-1
^)ș "OS_ReadVduVariables",block,screen
h� filetype%=&128 �
r&ș "OS_File",16,block+44,bank+56,0
|� decompress
�	� cls
�� stereo
��
�&ș "OS_File",16,block+44,bank+56,0
�&!bank_ptr=bank+56+(length%-163840)
�
� blitter
�!bank_ptr=bank+56
�	� cls
�� stereo
��
�
� blitter
�*pointer 0
��
ȗ x%,y%,z%

�z%<>0
�
&ȗ x%,y%,z%
0	�z%=0
:ș "Wimp_SetMode",mode%
D ș "Wimp_SetPalette",,ablock
N*ș "Wimp_ForceRedraw",-1,0,0,1280,1024
X*pointer 1
b
stereo%=�
l�build_menu
v�
�:
���load_pattern
�+f%=�("<Stereo$Dir>.Patterns."+pattern$)
�� f%=0 �
��error("File not found")
��update
��
��#f%
�+f%=�("<Stereo$Dir>.Patterns."+pattern$)
�
ext%=�#f%
��#f%
�?ș "OS_File",16,"<Stereo$Dir>.Patterns."+pattern$,pattern,0
�%!pattern_ptr=pattern+(ext%-24576)
�

:
p��drag_box
zablock!0=xfer%
�&ș "Wimp_GetWindowOutline",,ablock
�min_x%=ablock!4+78
�min_y%=ablock!8+80
�x%=block!0
�y%=block!4
�x_offset%=x%-min_x%
�y_offset%=y%-min_y%
�
block!4=5
�$block!8=min_x% : block!12=min_y%
�+block!16=min_x%+68 : block!20=min_y%+68
�-block!24=-x_offset% : block!28=-y_offset%
�5block!32=1346-x_offset% : block!36=1088-y_offset%
�ș "Wimp_DragBox",,block
�
:
X��send_save
b#ș "Wimp_GetPointerInfo",,block
lablock!0=xfer%
vablock!4=2
�"ș "Wimp_GetIconState",,ablock
�stop%=0
�pointer%=0
��
�1� ?(ablock!28+pointer%)=46 � stop%=pointer%+1
�pointer%+=1
��?(ablock!28+pointer%)<&20
�pointer%=0
��
�5?(ablock+44+pointer%)=?(ablock!28+pointer%+stop%)
�pointer%+=1
�?(ablock+44+pointer%)=0
��?(ablock!28+pointer%)<&20
 ablock!0=44+(pointer%+3)�� 3
ablock!12=0
ablock!16=1
 ablock!20=block!12
*ablock!24=block!16
4ablock!28=block!0
>ablock!32=block!4
Hablock!36=163896
Rablock!40=&FF9
\7ș "Wimp_SendMessage",18,ablock,ablock!20,ablock!24
f�
p:
@��save_ack
J� block!36<>-1 �
T
error$=""
^3ș "OS_File",10,block+44,&FF9,,bank,bank+163896
h%� error$<>"" � �error(error$) : �
r)� click%=64 � ș "Wimp_CreateMenu",-1
|ablock!0=xfer%
�ablock!4=2
�"ș "Wimp_GetIconState",,ablock
�pointer%=-1
��
�pointer%+=1
�.?(ablock!28+pointer%)=?(block+44+pointer%)
��?(block+44+pointer%)=0
�ablock!8=0
�ablock!12=0
�"ș "Wimp_SetIconState",,ablock
��
��
�:
#(
��ok_save
#2ablock!0=xfer%
#<ablock!4=2
#F"ș "Wimp_GetIconState",,ablock
#Pstop%=�
#Zpointer%=0
#d�
#n/?(ablock+44+pointer%)=?(ablock!28+pointer%)
#x(� ?(ablock!28+pointer%)=46 � stop%=�
#�pointer%+=1
#��?(ablock!28+pointer%)<&20
#�?(ablock+44+pointer%)=0
#�P� stop%=� � �error("To save, drag the file icon to a directory display") : �
#�4ș "OS_File",10,ablock+44,&FF9,,bank,bank+163896
#�)� block!8=4 � ș "Wimp_CreateMenu",-1
#��
#�:
'
��display
'mode%=�
'$*screensize 160k
'.!ș "Wimp_ReadPalette",,ablock
'8ș "Wimp_SetMode",15 : �
'BN� �<>15 � �error("Not enough memory (160k of screen memory required)") : �
'L
� blitter
'V*pointer 0
'`�
'jȗ x%,y%,z%
't
�z%<>0
'~�
'�ȗ x%,y%,z%
'�	�z%=0
'�ș "Wimp_SetMode",mode%
'� ș "Wimp_SetPalette",,ablock
'�*ș "Wimp_ForceRedraw",-1,0,0,1280,1024
'�*pointer 1
'��
'�:
*���update
+p%=pattern%
+�read_patterns
+pattern%=p%
+ !� no%<pattern% � pattern%=no%
+*pattern$=pattern$(pattern%)
+4�build_menu
+>�load_pattern
+H�
+R:
.�
��init
.�;� pattern 32768 , block 1024 , menu 1024 , submenu 4096
.�,� bank 164840 , ablock 1024 , error 1024
.�A� template1 1024 , template2 1024 , indir1 1024 , indir2 1024
/� pattern$(64)
/0ș "OS_File",16,"<Stereo$Dir>.Header",bank,0
/
stereo%=�
/&?ș "Wimp_Initialise",200,&4B534154,"Stereo" � ,task_handle%
/0wimp%=�
/:�
/D:
2���load_templates
2�4ș "Wimp_OpenTemplate",,"<Stereo$Dir>.Templates"
2�Dș "Wimp_LoadTemplate",,template1,indir1,indir1+1024,-1,"Info",0
2�Iș "Wimp_LoadTemplate",,template2,indir2,indir2+1024,-1,"xfer_send",0
2�-ș "Wimp_CreateWindow",,template1 � info%
2�-ș "Wimp_CreateWindow",,template2 � xfer%
3�
3:
6���assemble
6�� code 1024
6�� pass%=0 � 2 � 2
6�P%=code
6�[Opt pass%
6�.screen EQUD 0
6�.pattern_ptr EQUD 0
6�.bank_ptr EQUD bank+56
7.ext EQUD 0
7
.stereo
7.plot_pattern
7Ldr R0,bank_ptr
7(Ldr R1,pattern_ptr
72Mov R2,#256
7<.plot_y_loop
7F
Mov R3,#3
7P.plot_x_loop
7ZLdmIa R1!,{R5-R12}
7dStmIa R0!,{R5-R12}
7nSubS R3,R3,#1
7xBNe plot_x_loop
7�Add R0,R0,#640
7�Sub R0,R0,#96
7�SubS R2,R2,#1
7�BNe plot_y_loop
7�:
7�.create_stereo
7�Ldr R0,screen
7�Ldr R1,bank_ptr
7�Mov R2,#96
7�.x_loop
7�Mov R3,#255
7�.y_loop
7�Mov R4,R3,Lsl#9
8Add R4,R4,R3,Lsl#7
8Add R5,R0,R4
8Sub R5,R5,#96
8"Add R6,R1,R4
8,LdrB R7,[R5,R2]
86Sub R9,R2,#96
8@Add R9,R9,R7
8JLdrB R8,[R6,R9]
8TStrB R8,[R6,R2]
8^SubS R3,R3,#1
8hBGe y_loop
8rAdd R2,R2,#1
8|Cmp R2,#640
8�BNe x_loop
8�Mov PC,R14
8�:
8�.cls
8�Ldr R0,bank_ptr
8�=Mov R2,#0 : Mov R3,#0 : Mov R4,#0 : Mov R5,#0 : Mov R6,#0
8�?Mov R7,#0 : Mov R8,#0 : Mov R9,#0 : Mov R10,#0 : Mov R11,#0
8�Mov R12,#4096
8�
.cls_loop
8�StmIa R0!,{R2-R11}
8�SubS R12,R12,#1
8�BNe cls_loop
8�Mov PC,R14
9:
9.blitter
9Ldr R0,screen
9&Ldr R1,bank_ptr
90Mov R12,#4096
9:.blitter_loop
9DLdmIa R1!,{R2-R11}
9NStmIa R0!,{R2-R11}
9XSubS R12,R12,#1
9bBNe blitter_loop
9lMov PC,R14
9v:
9�.decompress
9�Ldr R0,screen
9�Ldr R1,bank_ptr
9�
Mov R2,#0
9�
Mov R3,#0
9�Ldr R11,ext
9�.decompress_loop
9�LdrB R12,[R1,R3]
9�Add R3,R3,#1
9�LdrB R5,[R1,R3]
9�Add R3,R3,#1
9�Add R12,R12,#1
9�.plot_loop
:StrB R5,[R0,R2]
:Add R2,R2,#1
:SubS R12,R12,#1
: BNe plot_loop
:*Cmp R3,R11
:4BNe decompress_loop
:>Mov PC,R14
:H	] : �
:R�
:\:
:���read_patterns
:�Hș "OS_GBPB",10,"<Stereo$Dir>.Patterns",submenu,64,0,4096,0 � ,,,no%
:�;� no%=0 � �error("No patterns available") : �close_down
:�.sprites%=0 : pointer%=submenu : longest%=0
:�� loop%=1 � no%
:�length%=pointer%!8
:�#filetype%=(!pointer%>>8) � &FFF
:�pointer%+=20
:�name$=""
:��
:�name$+=�(?pointer%)
;pointer%+=1
;�?pointer%=0
;pointer%=(pointer%+4)�� 3
;$7� filetype%=&FF9 � length%>24576 � length%<=32768 �
;.sprites%+=1
;8pattern$(sprites%)=name$
;B'� �name$>longest% � longest%=�name$
;L�
;V�
;`F� sprites%=0 � �error("No valid patterns available") : �close_down
;j,pattern%=1 : pattern$=pattern$(pattern%)
;t�
;~:
>���build_menu
>�$menu="Stereo"
>�menu!12=&70207
>�menu!16=128
>�menu!20=40
>�
menu!24=0
>�menu_ptr%=menu+28
>�'�menu_item(0,info%,&7000021,"Info")
>�9�menu_item(0,xfer%,&7000021+((-�stereo%)<<22),"Save")
>�,�menu_item(0,submenu,&7000021,"Pattern")
>�&�menu_item(0,-1,&7000021,"Update")
>�&�menu_item(128,-1,&7000021,"Quit")
>�$submenu="Pattern"
?submenu!12=&70207
?submenu!16=(longest%+1)*16
?width%=(longest%+1)*16
? � 128>width% � width%=128
?*submenu!16=width%
?4submenu!20=40
?>submenu!24=0
?Hmenu_ptr%=submenu+28
?R� sprites%>1 �
?\� loop%=1 � sprites%-1
?f=�menu_item(-(loop%=pattern%),-1,&7000021,pattern$(loop%))
?p�
?z�
?�F�menu_item(128-(pattern%=sprites%),-1,&7000021,pattern$(sprites%))
?��
?�:
Bh/��menu_item(mflags%,submenu%,iflags%,text$)
Br!menu_ptr%=mflags%
B|menu_ptr%!4=submenu%
B�menu_ptr%!8=iflags%
B�$(menu_ptr%+12)=text$
B�menu_ptr%+=24
B��
B�:
FP��create_icon
FZ
!block=-1
Fd5block!4=0 : block!8=0 : block!12=68 : block!16=68
Fnblock!20=&1700300A
Fx$(block+24)="!Stereo"
F�.ș "Wimp_CreateIcon",,block � icon_handle%
F��
F�:
J8��error(error$)
JB!error=255
JL$(error+4)=error$+�(0)
JV�7
J`,ș "Wimp_ReportError",error,130,"Stereo"
Jj�
Jt:
N ��close_down
N*8� wimp% � ș "Wimp_CloseDown",task_handle%,&4B534154
N4�
N>�
NH:
�
00000000  0d 00 0a 11 f4 20 3e 20  21 52 75 6e 49 6d 61 67  |..... > !RunImag|
00000010  65 0d 00 14 15 f4 20 62  79 20 44 61 76 69 64 20  |e..... by David |
00000020  48 6f 72 6d 61 6e 0d 00  1e 0c f4 20 a9 20 31 39  |Horman..... . 19|
00000030  39 35 0d 00 28 05 3a 0d  00 32 15 c8 99 20 22 48  |95..(.:..2... "H|
00000040  6f 75 72 67 6c 61 73 73  5f 4f 6e 22 0d 00 3c 0b  |ourglass_On"..<.|
00000050  77 69 6d 70 25 3d a3 0d  00 46 09 f2 69 6e 69 74  |wimp%=...F..init|
00000060  0d 00 50 13 f2 6c 6f 61  64 5f 74 65 6d 70 6c 61  |..P..load_templa|
00000070  74 65 73 0d 00 5a 0d f2  61 73 73 65 6d 62 6c 65  |tes..Z..assemble|
00000080  0d 00 64 12 f2 72 65 61  64 5f 70 61 74 74 65 72  |..d..read_patter|
00000090  6e 73 0d 00 6e 11 f2 6c  6f 61 64 5f 70 61 74 74  |ns..n..load_patt|
000000a0  65 72 6e 0d 00 78 0f f2  62 75 69 6c 64 5f 6d 65  |ern..x..build_me|
000000b0  6e 75 0d 00 82 16 c8 99  20 22 48 6f 75 72 67 6c  |nu...... "Hourgl|
000000c0  61 73 73 5f 4f 66 66 22  0d 00 8c 10 f2 63 72 65  |ass_Off".....cre|
000000d0  61 74 65 5f 69 63 6f 6e  0d 00 96 05 3a 0d 00 a0  |ate_icon....:...|
000000e0  0b 71 75 69 74 25 3d a3  0d 00 aa 10 ee 85 f2 65  |.quit%=........e|
000000f0  72 72 6f 72 28 f6 24 29  0d 00 b4 05 f5 0d 00 be  |rror(.$)........|
00000100  30 c8 99 20 22 57 69 6d  70 5f 50 6f 6c 6c 22 2c  |0.. "Wimp_Poll",|
00000110  25 31 31 30 30 30 30 31  31 30 30 31 31 2c 62 6c  |%110000110011,bl|
00000120  6f 63 6b 20 b8 20 72 65  61 73 6f 6e 25 0d 00 c8  |ock . reason%...|
00000130  10 c8 8e 20 72 65 61 73  6f 6e 25 20 ca 0d 00 d2  |... reason% ....|
00000140  25 c9 20 32 20 3a 20 c8  99 20 22 57 69 6d 70 5f  |%. 2 : .. "Wimp_|
00000150  4f 70 65 6e 57 69 6e 64  6f 77 22 2c 2c 62 6c 6f  |OpenWindow",,blo|
00000160  63 6b 0d 00 dc 10 c9 20  36 20 3a 20 f2 63 6c 69  |ck..... 6 : .cli|
00000170  63 6b 0d 00 e6 14 c9 20  37 20 3a 20 f2 73 65 6e  |ck..... 7 : .sen|
00000180  64 5f 73 61 76 65 0d 00  f0 47 c9 20 38 20 3a 20  |d_save...G. 8 : |
00000190  e7 20 62 6c 6f 63 6b 21  32 34 3c 26 32 30 20 84  |. block!24<&20 .|
000001a0  20 62 6c 6f 63 6b 21 32  34 3e 26 46 46 20 8c 20  | block!24>&FF . |
000001b0  c8 99 20 22 57 69 6d 70  5f 50 72 6f 63 65 73 73  |.. "Wimp_Process|
000001c0  4b 65 79 22 2c 62 6c 6f  63 6b 21 32 34 0d 00 fa  |Key",block!24...|
000001d0  19 c9 20 39 20 3a 20 f2  6d 65 6e 75 5f 73 65 6c  |.. 9 : .menu_sel|
000001e0  65 63 74 69 6f 6e 0d 01  04 19 c9 20 31 37 2c 31  |ection..... 17,1|
000001f0  38 2c 31 39 20 3a 20 f2  6d 65 73 73 61 67 65 0d  |8,19 : .message.|
00000200  01 0e 05 cb 0d 01 18 0a  fd 71 75 69 74 25 0d 01  |.........quit%..|
00000210  22 0f f2 63 6c 6f 73 65  5f 64 6f 77 6e 0d 01 2c  |"..close_down..,|
00000220  05 3a 0d 03 e8 0b dd f2  63 6c 69 63 6b 0d 03 f2  |.:......click...|
00000230  48 e7 20 62 6c 6f 63 6b  21 31 32 3d 2d 32 20 80  |H. block!12=-2 .|
00000240  20 62 6c 6f 63 6b 21 38  3d 32 20 8c 20 c8 99 20  | block!8=2 . .. |
00000250  22 57 69 6d 70 5f 43 72  65 61 74 65 4d 65 6e 75  |"Wimp_CreateMenu|
00000260  22 2c 2c 6d 65 6e 75 2c  21 62 6c 6f 63 6b 2d 36  |",,menu,!block-6|
00000270  34 2c 32 39 36 0d 03 fc  34 e7 20 62 6c 6f 63 6b  |4,296...4. block|
00000280  21 31 32 3d 2d 32 20 80  20 62 6c 6f 63 6b 21 38  |!12=-2 . block!8|
00000290  3d 34 20 80 20 73 74 65  72 65 6f 25 3d b9 20 8c  |=4 . stereo%=. .|
000002a0  20 f2 64 69 73 70 6c 61  79 0d 04 06 3a e7 20 62  | .display...:. b|
000002b0  6c 6f 63 6b 21 38 3d 36  34 20 84 20 62 6c 6f 63  |lock!8=64 . bloc|
000002c0  6b 21 38 3d 31 36 20 8c  20 63 6c 69 63 6b 25 3d  |k!8=16 . click%=|
000002d0  62 6c 6f 63 6b 21 38 20  3a 20 f2 64 72 61 67 5f  |block!8 : .drag_|
000002e0  62 6f 78 0d 04 10 39 e7  20 62 6c 6f 63 6b 21 31  |box...9. block!1|
000002f0  32 3d 78 66 65 72 25 20  80 20 62 6c 6f 63 6b 21  |2=xfer% . block!|
00000300  31 36 3d 30 20 80 20 62  6c 6f 63 6b 21 38 3c 3e  |16=0 . block!8<>|
00000310  32 20 8c 20 f2 6f 6b 5f  73 61 76 65 0d 04 1a 05  |2 . .ok_save....|
00000320  e1 0d 04 24 05 3a 0d 07  d0 14 dd f2 6d 65 6e 75  |...$.:......menu|
00000330  5f 73 65 6c 65 63 74 69  6f 6e 0d 07 da 24 c8 99  |_selection...$..|
00000340  20 22 57 69 6d 70 5f 47  65 74 50 6f 69 6e 74 65  | "Wimp_GetPointe|
00000350  72 49 6e 66 6f 22 2c 2c  61 62 6c 6f 63 6b 0d 07  |rInfo",,ablock..|
00000360  e4 39 c8 99 20 22 57 69  6d 70 5f 44 65 63 6f 64  |.9.. "Wimp_Decod|
00000370  65 4d 65 6e 75 22 2c 2c  6d 65 6e 75 2c 62 6c 6f  |eMenu",,menu,blo|
00000380  63 6b 2c c4 31 39 32 2c  22 20 22 29 20 b8 20 2c  |ck,.192," ") . ,|
00000390  2c 2c 69 74 65 6d 24 0d  07 ee 1c e7 20 69 74 65  |,,item$..... ite|
000003a0  6d 24 3d 22 51 75 69 74  22 20 8c 20 71 75 69 74  |m$="Quit" . quit|
000003b0  25 3d b9 0d 07 f8 1e e7  20 69 74 65 6d 24 3d 22  |%=...... item$="|
000003c0  55 70 64 61 74 65 22 20  8c 20 f2 75 70 64 61 74  |Update" . .updat|
000003d0  65 0d 08 02 2d e7 20 69  74 65 6d 24 3d 22 44 69  |e...-. item$="Di|
000003e0  73 70 6c 61 79 22 20 80  20 73 74 65 72 65 6f 25  |splay" . stereo%|
000003f0  3d b9 20 8c 20 d6 20 62  6c 69 74 74 65 72 0d 08  |=. . . blitter..|
00000400  0c 11 e7 20 62 6c 6f 63  6b 21 30 3d 32 20 8c 0d  |... block!0=2 ..|
00000410  08 16 18 70 61 74 74 65  72 6e 25 3d 28 62 6c 6f  |...pattern%=(blo|
00000420  63 6b 21 34 29 2b 31 0d  08 20 1f 70 61 74 74 65  |ck!4)+1.. .patte|
00000430  72 6e 24 3d 70 61 74 74  65 72 6e 24 28 70 61 74  |rn$=pattern$(pat|
00000440  74 65 72 6e 25 29 0d 08  2a 0f f2 62 75 69 6c 64  |tern%)..*..build|
00000450  5f 6d 65 6e 75 0d 08 34  11 f2 6c 6f 61 64 5f 70  |_menu..4..load_p|
00000460  61 74 74 65 72 6e 0d 08  3e 05 cd 0d 08 48 3b e7  |attern..>....H;.|
00000470  20 61 62 6c 6f 63 6b 21  38 3d 31 20 8c 20 c8 99  | ablock!8=1 . ..|
00000480  20 22 57 69 6d 70 5f 43  72 65 61 74 65 4d 65 6e  | "Wimp_CreateMen|
00000490  75 22 2c 2c 6d 65 6e 75  2c 21 62 6c 6f 63 6b 2d  |u",,menu,!block-|
000004a0  36 34 2c 32 39 36 0d 08  52 05 e1 0d 08 5c 05 3a  |64,296..R....\.:|
000004b0  0d 0b b8 0d dd f2 6d 65  73 73 61 67 65 0d 0b c2  |......message...|
000004c0  11 c8 8e 20 62 6c 6f 63  6b 21 31 36 20 ca 0d 0b  |... block!16 ...|
000004d0  cc 11 c9 20 30 20 3a 20  71 75 69 74 25 3d b9 0d  |... 0 : quit%=..|
000004e0  0b d6 13 c9 20 32 20 3a  20 f2 73 61 76 65 5f 61  |.... 2 : .save_a|
000004f0  63 6b 0d 0b e0 11 c9 20  33 2c 35 20 3a 20 f2 6c  |ck..... 3,5 : .l|
00000500  6f 61 64 0d 0b ea 05 cb  0d 0b f4 05 e1 0d 0b fe  |oad.............|
00000510  05 3a 0d 0f a0 0a dd f2  6c 6f 61 64 0d 0f aa 25  |.:......load...%|
00000520  e7 20 62 6c 6f 63 6b 21  31 36 3d 35 20 80 20 62  |. block!16=5 . b|
00000530  6c 6f 63 6b 21 34 30 3c  3e 26 31 32 38 20 8c 20  |lock!40<>&128 . |
00000540  e1 0d 0f b4 0e 62 6c 6f  63 6b 21 31 36 3d 34 0d  |.....block!16=4.|
00000550  0f be 14 62 6c 6f 63 6b  21 31 32 3d 62 6c 6f 63  |...block!12=bloc|
00000560  6b 21 38 0d 0f c8 2f c8  99 20 22 57 69 6d 70 5f  |k!8.../.. "Wimp_|
00000570  53 65 6e 64 4d 65 73 73  61 67 65 22 2c 72 65 61  |SendMessage",rea|
00000580  73 6f 6e 25 2c 62 6c 6f  63 6b 2c 62 6c 6f 63 6b  |son%,block,block|
00000590  21 34 0d 0f d2 3b c8 99  20 22 4f 53 5f 46 69 6c  |!4...;.. "OS_Fil|
000005a0  65 22 2c 31 33 2c 62 6c  6f 63 6b 2b 34 34 20 b8  |e",13,block+44 .|
000005b0  20 74 79 70 65 25 2c 2c  2c 2c 6c 65 6e 67 74 68  | type%,,,,length|
000005c0  25 2c 61 74 74 72 69 62  75 74 65 73 25 0d 0f dc  |%,attributes%...|
000005d0  16 66 69 6c 65 74 79 70  65 25 3d 62 6c 6f 63 6b  |.filetype%=block|
000005e0  21 34 30 0d 0f e6 33 e7  20 74 79 70 65 25 3d 32  |!40...3. type%=2|
000005f0  20 8c 20 f2 65 72 72 6f  72 28 22 4f 62 6a 65 63  | . .error("Objec|
00000600  74 20 69 73 20 61 20 64  69 72 65 63 74 6f 72 79  |t is a directory|
00000610  22 29 20 3a 20 e1 0d 0f  f0 48 e7 20 66 69 6c 65  |") : ....H. file|
00000620  74 79 70 65 25 3c 3e 26  46 46 39 20 80 20 66 69  |type%<>&FF9 . fi|
00000630  6c 65 74 79 70 65 25 3c  3e 26 31 32 38 20 8c 20  |letype%<>&128 . |
00000640  f2 65 72 72 6f 72 28 22  49 6e 76 61 6c 69 64 20  |.error("Invalid |
00000650  66 69 6c 65 74 79 70 65  22 29 20 3a 20 e1 0d 0f  |filetype") : ...|
00000660  fa 73 e7 20 66 69 6c 65  74 79 70 65 25 3d 26 46  |.s. filetype%=&F|
00000670  46 39 20 80 20 6c 65 6e  67 74 68 25 3c 31 36 33  |F9 . length%<163|
00000680  38 34 30 20 80 20 6c 65  6e 67 74 68 25 3e 31 36  |840 . length%>16|
00000690  34 38 36 34 20 8c 20 f2  65 72 72 6f 72 28 22 49  |4864 . .error("I|
000006a0  6e 76 61 6c 69 64 20 73  70 72 69 74 65 20 6c 65  |nvalid sprite le|
000006b0  6e 67 74 68 20 28 64 6f  65 73 20 69 74 20 68 61  |ngth (does it ha|
000006c0  76 65 20 61 20 6d 61 73  6b 3f 29 22 29 20 3a 20  |ve a mask?)") : |
000006d0  e1 0d 10 04 3e e7 20 66  69 6c 65 74 79 70 65 25  |....>. filetype%|
000006e0  3d 26 31 32 38 20 80 20  6c 65 6e 67 74 68 25 3c  |=&128 . length%<|
000006f0  31 32 38 30 20 8c 20 f2  65 72 72 6f 72 28 22 53  |1280 . .error("S|
00000700  68 6f 72 74 20 66 69 6c  65 22 29 20 3a 20 e1 0d  |hort file") : ..|
00000710  10 0e 0b 6d 6f 64 65 25  3d eb 0d 10 18 14 2a 73  |...mode%=.....*s|
00000720  63 72 65 65 6e 73 69 7a  65 20 31 36 30 6b 0d 10  |creensize 160k..|
00000730  22 21 c8 99 20 22 57 69  6d 70 5f 52 65 61 64 50  |"!.. "Wimp_ReadP|
00000740  61 6c 65 74 74 65 22 2c  2c 61 62 6c 6f 63 6b 0d  |alette",,ablock.|
00000750  10 2c 1c c8 99 20 22 57  69 6d 70 5f 53 65 74 4d  |.,... "Wimp_SetM|
00000760  6f 64 65 22 2c 31 35 20  3a 20 87 0d 10 36 4e e7  |ode",15 : ...6N.|
00000770  20 eb 3c 3e 31 35 20 8c  20 f2 65 72 72 6f 72 28  | .<>15 . .error(|
00000780  22 4e 6f 74 20 65 6e 6f  75 67 68 20 6d 65 6d 6f  |"Not enough memo|
00000790  72 79 20 28 31 36 30 6b  20 6f 66 20 73 63 72 65  |ry (160k of scre|
000007a0  65 6e 20 6d 65 6d 6f 72  79 20 72 65 71 75 69 72  |en memory requir|
000007b0  65 64 29 22 29 20 3a 20  e1 0d 10 40 10 21 65 78  |ed)") : ...@.!ex|
000007c0  74 3d 6c 65 6e 67 74 68  25 0d 10 4a 0f 62 6c 6f  |t=length%..J.blo|
000007d0  63 6b 21 30 3d 31 34 38  0d 10 54 0e 62 6c 6f 63  |ck!0=148..T.bloc|
000007e0  6b 21 34 3d 2d 31 0d 10  5e 29 c8 99 20 22 4f 53  |k!4=-1..^).. "OS|
000007f0  5f 52 65 61 64 56 64 75  56 61 72 69 61 62 6c 65  |_ReadVduVariable|
00000800  73 22 2c 62 6c 6f 63 6b  2c 73 63 72 65 65 6e 0d  |s",block,screen.|
00000810  10 68 16 e7 20 66 69 6c  65 74 79 70 65 25 3d 26  |.h.. filetype%=&|
00000820  31 32 38 20 8c 0d 10 72  26 c8 99 20 22 4f 53 5f  |128 ...r&.. "OS_|
00000830  46 69 6c 65 22 2c 31 36  2c 62 6c 6f 63 6b 2b 34  |File",16,block+4|
00000840  34 2c 62 61 6e 6b 2b 35  36 2c 30 0d 10 7c 10 d6  |4,bank+56,0..|..|
00000850  20 64 65 63 6f 6d 70 72  65 73 73 0d 10 86 09 d6  | decompress.....|
00000860  20 63 6c 73 0d 10 90 0c  d6 20 73 74 65 72 65 6f  | cls..... stereo|
00000870  0d 10 9a 05 cc 0d 10 a4  26 c8 99 20 22 4f 53 5f  |........&.. "OS_|
00000880  46 69 6c 65 22 2c 31 36  2c 62 6c 6f 63 6b 2b 34  |File",16,block+4|
00000890  34 2c 62 61 6e 6b 2b 35  36 2c 30 0d 10 ae 26 21  |4,bank+56,0...&!|
000008a0  62 61 6e 6b 5f 70 74 72  3d 62 61 6e 6b 2b 35 36  |bank_ptr=bank+56|
000008b0  2b 28 6c 65 6e 67 74 68  25 2d 31 36 33 38 34 30  |+(length%-163840|
000008c0  29 0d 10 b8 0d d6 20 62  6c 69 74 74 65 72 0d 10  |)..... blitter..|
000008d0  c2 15 21 62 61 6e 6b 5f  70 74 72 3d 62 61 6e 6b  |..!bank_ptr=bank|
000008e0  2b 35 36 0d 10 cc 09 d6  20 63 6c 73 0d 10 d6 0c  |+56..... cls....|
000008f0  d6 20 73 74 65 72 65 6f  0d 10 e0 05 cd 0d 10 ea  |. stereo........|
00000900  0d d6 20 62 6c 69 74 74  65 72 0d 10 f4 0e 2a 70  |.. blitter....*p|
00000910  6f 69 6e 74 65 72 20 30  0d 10 fe 05 f5 0d 11 08  |ointer 0........|
00000920  0f c8 97 20 78 25 2c 79  25 2c 7a 25 0d 11 12 0a  |... x%,y%,z%....|
00000930  fd 7a 25 3c 3e 30 0d 11  1c 05 f5 0d 11 26 0f c8  |.z%<>0.......&..|
00000940  97 20 78 25 2c 79 25 2c  7a 25 0d 11 30 09 fd 7a  |. x%,y%,z%..0..z|
00000950  25 3d 30 0d 11 3a 1b c8  99 20 22 57 69 6d 70 5f  |%=0..:... "Wimp_|
00000960  53 65 74 4d 6f 64 65 22  2c 6d 6f 64 65 25 0d 11  |SetMode",mode%..|
00000970  44 20 c8 99 20 22 57 69  6d 70 5f 53 65 74 50 61  |D .. "Wimp_SetPa|
00000980  6c 65 74 74 65 22 2c 2c  61 62 6c 6f 63 6b 0d 11  |lette",,ablock..|
00000990  4e 2a c8 99 20 22 57 69  6d 70 5f 46 6f 72 63 65  |N*.. "Wimp_Force|
000009a0  52 65 64 72 61 77 22 2c  2d 31 2c 30 2c 30 2c 31  |Redraw",-1,0,0,1|
000009b0  32 38 30 2c 31 30 32 34  0d 11 58 0e 2a 70 6f 69  |280,1024..X.*poi|
000009c0  6e 74 65 72 20 31 0d 11  62 0d 73 74 65 72 65 6f  |nter 1..b.stereo|
000009d0  25 3d b9 0d 11 6c 0f f2  62 75 69 6c 64 5f 6d 65  |%=...l..build_me|
000009e0  6e 75 0d 11 76 05 e1 0d  11 80 05 3a 0d 13 88 12  |nu..v......:....|
000009f0  dd f2 6c 6f 61 64 5f 70  61 74 74 65 72 6e 0d 13  |..load_pattern..|
00000a00  92 2b 66 25 3d 8e 28 22  3c 53 74 65 72 65 6f 24  |.+f%=.("<Stereo$|
00000a10  44 69 72 3e 2e 50 61 74  74 65 72 6e 73 2e 22 2b  |Dir>.Patterns."+|
00000a20  70 61 74 74 65 72 6e 24  29 0d 13 9c 0c e7 20 66  |pattern$)..... f|
00000a30  25 3d 30 20 8c 0d 13 a6  1c f2 65 72 72 6f 72 28  |%=0 ......error(|
00000a40  22 46 69 6c 65 20 6e 6f  74 20 66 6f 75 6e 64 22  |"File not found"|
00000a50  29 0d 13 b0 0b f2 75 70  64 61 74 65 0d 13 ba 05  |).....update....|
00000a60  cd 0d 13 c4 08 d9 23 66  25 0d 13 ce 2b 66 25 3d  |......#f%...+f%=|
00000a70  8e 28 22 3c 53 74 65 72  65 6f 24 44 69 72 3e 2e  |.("<Stereo$Dir>.|
00000a80  50 61 74 74 65 72 6e 73  2e 22 2b 70 61 74 74 65  |Patterns."+patte|
00000a90  72 6e 24 29 0d 13 d8 0d  65 78 74 25 3d a2 23 66  |rn$)....ext%=.#f|
00000aa0  25 0d 13 e2 08 d9 23 66  25 0d 13 ec 3f c8 99 20  |%.....#f%...?.. |
00000ab0  22 4f 53 5f 46 69 6c 65  22 2c 31 36 2c 22 3c 53  |"OS_File",16,"<S|
00000ac0  74 65 72 65 6f 24 44 69  72 3e 2e 50 61 74 74 65  |tereo$Dir>.Patte|
00000ad0  72 6e 73 2e 22 2b 70 61  74 74 65 72 6e 24 2c 70  |rns."+pattern$,p|
00000ae0  61 74 74 65 72 6e 2c 30  0d 13 f6 25 21 70 61 74  |attern,0...%!pat|
00000af0  74 65 72 6e 5f 70 74 72  3d 70 61 74 74 65 72 6e  |tern_ptr=pattern|
00000b00  2b 28 65 78 74 25 2d 32  34 35 37 36 29 0d 14 00  |+(ext%-24576)...|
00000b10  05 e1 0d 14 0a 05 3a 0d  17 70 0e dd f2 64 72 61  |......:..p...dra|
00000b20  67 5f 62 6f 78 0d 17 7a  12 61 62 6c 6f 63 6b 21  |g_box..z.ablock!|
00000b30  30 3d 78 66 65 72 25 0d  17 84 26 c8 99 20 22 57  |0=xfer%...&.. "W|
00000b40  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 4f 75 74  |imp_GetWindowOut|
00000b50  6c 69 6e 65 22 2c 2c 61  62 6c 6f 63 6b 0d 17 8e  |line",,ablock...|
00000b60  16 6d 69 6e 5f 78 25 3d  61 62 6c 6f 63 6b 21 34  |.min_x%=ablock!4|
00000b70  2b 37 38 0d 17 98 16 6d  69 6e 5f 79 25 3d 61 62  |+78....min_y%=ab|
00000b80  6c 6f 63 6b 21 38 2b 38  30 0d 17 a2 0e 78 25 3d  |lock!8+80....x%=|
00000b90  62 6c 6f 63 6b 21 30 0d  17 ac 0e 79 25 3d 62 6c  |block!0....y%=bl|
00000ba0  6f 63 6b 21 34 0d 17 b6  17 78 5f 6f 66 66 73 65  |ock!4....x_offse|
00000bb0  74 25 3d 78 25 2d 6d 69  6e 5f 78 25 0d 17 c0 17  |t%=x%-min_x%....|
00000bc0  79 5f 6f 66 66 73 65 74  25 3d 79 25 2d 6d 69 6e  |y_offset%=y%-min|
00000bd0  5f 79 25 0d 17 ca 0d 62  6c 6f 63 6b 21 34 3d 35  |_y%....block!4=5|
00000be0  0d 17 d4 24 62 6c 6f 63  6b 21 38 3d 6d 69 6e 5f  |...$block!8=min_|
00000bf0  78 25 20 3a 20 62 6c 6f  63 6b 21 31 32 3d 6d 69  |x% : block!12=mi|
00000c00  6e 5f 79 25 0d 17 de 2b  62 6c 6f 63 6b 21 31 36  |n_y%...+block!16|
00000c10  3d 6d 69 6e 5f 78 25 2b  36 38 20 3a 20 62 6c 6f  |=min_x%+68 : blo|
00000c20  63 6b 21 32 30 3d 6d 69  6e 5f 79 25 2b 36 38 0d  |ck!20=min_y%+68.|
00000c30  17 e8 2d 62 6c 6f 63 6b  21 32 34 3d 2d 78 5f 6f  |..-block!24=-x_o|
00000c40  66 66 73 65 74 25 20 3a  20 62 6c 6f 63 6b 21 32  |ffset% : block!2|
00000c50  38 3d 2d 79 5f 6f 66 66  73 65 74 25 0d 17 f2 35  |8=-y_offset%...5|
00000c60  62 6c 6f 63 6b 21 33 32  3d 31 33 34 36 2d 78 5f  |block!32=1346-x_|
00000c70  6f 66 66 73 65 74 25 20  3a 20 62 6c 6f 63 6b 21  |offset% : block!|
00000c80  33 36 3d 31 30 38 38 2d  79 5f 6f 66 66 73 65 74  |36=1088-y_offset|
00000c90  25 0d 17 fc 1c c8 99 20  22 57 69 6d 70 5f 44 72  |%...... "Wimp_Dr|
00000ca0  61 67 42 6f 78 22 2c 2c  62 6c 6f 63 6b 0d 18 06  |agBox",,block...|
00000cb0  05 e1 0d 18 10 05 3a 0d  1b 58 0f dd f2 73 65 6e  |......:..X...sen|
00000cc0  64 5f 73 61 76 65 0d 1b  62 23 c8 99 20 22 57 69  |d_save..b#.. "Wi|
00000cd0  6d 70 5f 47 65 74 50 6f  69 6e 74 65 72 49 6e 66  |mp_GetPointerInf|
00000ce0  6f 22 2c 2c 62 6c 6f 63  6b 0d 1b 6c 12 61 62 6c  |o",,block..l.abl|
00000cf0  6f 63 6b 21 30 3d 78 66  65 72 25 0d 1b 76 0e 61  |ock!0=xfer%..v.a|
00000d00  62 6c 6f 63 6b 21 34 3d  32 0d 1b 80 22 c8 99 20  |block!4=2...".. |
00000d10  22 57 69 6d 70 5f 47 65  74 49 63 6f 6e 53 74 61  |"Wimp_GetIconSta|
00000d20  74 65 22 2c 2c 61 62 6c  6f 63 6b 0d 1b 8a 0b 73  |te",,ablock....s|
00000d30  74 6f 70 25 3d 30 0d 1b  94 0e 70 6f 69 6e 74 65  |top%=0....pointe|
00000d40  72 25 3d 30 0d 1b 9e 05  f5 0d 1b a8 31 e7 20 3f  |r%=0........1. ?|
00000d50  28 61 62 6c 6f 63 6b 21  32 38 2b 70 6f 69 6e 74  |(ablock!28+point|
00000d60  65 72 25 29 3d 34 36 20  8c 20 73 74 6f 70 25 3d  |er%)=46 . stop%=|
00000d70  70 6f 69 6e 74 65 72 25  2b 31 0d 1b b2 0f 70 6f  |pointer%+1....po|
00000d80  69 6e 74 65 72 25 2b 3d  31 0d 1b bc 1e fd 3f 28  |inter%+=1.....?(|
00000d90  61 62 6c 6f 63 6b 21 32  38 2b 70 6f 69 6e 74 65  |ablock!28+pointe|
00000da0  72 25 29 3c 26 32 30 0d  1b c6 0e 70 6f 69 6e 74  |r%)<&20....point|
00000db0  65 72 25 3d 30 0d 1b d0  05 f5 0d 1b da 35 3f 28  |er%=0........5?(|
00000dc0  61 62 6c 6f 63 6b 2b 34  34 2b 70 6f 69 6e 74 65  |ablock+44+pointe|
00000dd0  72 25 29 3d 3f 28 61 62  6c 6f 63 6b 21 32 38 2b  |r%)=?(ablock!28+|
00000de0  70 6f 69 6e 74 65 72 25  2b 73 74 6f 70 25 29 0d  |pointer%+stop%).|
00000df0  1b e4 0f 70 6f 69 6e 74  65 72 25 2b 3d 31 0d 1b  |...pointer%+=1..|
00000e00  ee 1b 3f 28 61 62 6c 6f  63 6b 2b 34 34 2b 70 6f  |..?(ablock+44+po|
00000e10  69 6e 74 65 72 25 29 3d  30 0d 1b f8 1e fd 3f 28  |inter%)=0.....?(|
00000e20  61 62 6c 6f 63 6b 21 32  38 2b 70 6f 69 6e 74 65  |ablock!28+pointe|
00000e30  72 25 29 3c 26 32 30 0d  1c 02 20 61 62 6c 6f 63  |r%)<&20... abloc|
00000e40  6b 21 30 3d 34 34 2b 28  70 6f 69 6e 74 65 72 25  |k!0=44+(pointer%|
00000e50  2b 33 29 80 ac 20 33 0d  1c 0c 0f 61 62 6c 6f 63  |+3).. 3....abloc|
00000e60  6b 21 31 32 3d 30 0d 1c  16 0f 61 62 6c 6f 63 6b  |k!12=0....ablock|
00000e70  21 31 36 3d 31 0d 1c 20  16 61 62 6c 6f 63 6b 21  |!16=1.. .ablock!|
00000e80  32 30 3d 62 6c 6f 63 6b  21 31 32 0d 1c 2a 16 61  |20=block!12..*.a|
00000e90  62 6c 6f 63 6b 21 32 34  3d 62 6c 6f 63 6b 21 31  |block!24=block!1|
00000ea0  36 0d 1c 34 15 61 62 6c  6f 63 6b 21 32 38 3d 62  |6..4.ablock!28=b|
00000eb0  6c 6f 63 6b 21 30 0d 1c  3e 15 61 62 6c 6f 63 6b  |lock!0..>.ablock|
00000ec0  21 33 32 3d 62 6c 6f 63  6b 21 34 0d 1c 48 14 61  |!32=block!4..H.a|
00000ed0  62 6c 6f 63 6b 21 33 36  3d 31 36 33 38 39 36 0d  |block!36=163896.|
00000ee0  1c 52 12 61 62 6c 6f 63  6b 21 34 30 3d 26 46 46  |.R.ablock!40=&FF|
00000ef0  39 0d 1c 5c 37 c8 99 20  22 57 69 6d 70 5f 53 65  |9..\7.. "Wimp_Se|
00000f00  6e 64 4d 65 73 73 61 67  65 22 2c 31 38 2c 61 62  |ndMessage",18,ab|
00000f10  6c 6f 63 6b 2c 61 62 6c  6f 63 6b 21 32 30 2c 61  |lock,ablock!20,a|
00000f20  62 6c 6f 63 6b 21 32 34  0d 1c 66 05 e1 0d 1c 70  |block!24..f....p|
00000f30  05 3a 0d 1f 40 0e dd f2  73 61 76 65 5f 61 63 6b  |.:..@...save_ack|
00000f40  0d 1f 4a 14 e7 20 62 6c  6f 63 6b 21 33 36 3c 3e  |..J.. block!36<>|
00000f50  2d 31 20 8c 0d 1f 54 0d  65 72 72 6f 72 24 3d 22  |-1 ...T.error$="|
00000f60  22 0d 1f 5e 33 c8 99 20  22 4f 53 5f 46 69 6c 65  |"..^3.. "OS_File|
00000f70  22 2c 31 30 2c 62 6c 6f  63 6b 2b 34 34 2c 26 46  |",10,block+44,&F|
00000f80  46 39 2c 2c 62 61 6e 6b  2c 62 61 6e 6b 2b 31 36  |F9,,bank,bank+16|
00000f90  33 38 39 36 0d 1f 68 25  e7 20 65 72 72 6f 72 24  |3896..h%. error$|
00000fa0  3c 3e 22 22 20 8c 20 f2  65 72 72 6f 72 28 65 72  |<>"" . .error(er|
00000fb0  72 6f 72 24 29 20 3a 20  e1 0d 1f 72 29 e7 20 63  |ror$) : ...r). c|
00000fc0  6c 69 63 6b 25 3d 36 34  20 8c 20 c8 99 20 22 57  |lick%=64 . .. "W|
00000fd0  69 6d 70 5f 43 72 65 61  74 65 4d 65 6e 75 22 2c  |imp_CreateMenu",|
00000fe0  2d 31 0d 1f 7c 12 61 62  6c 6f 63 6b 21 30 3d 78  |-1..|.ablock!0=x|
00000ff0  66 65 72 25 0d 1f 86 0e  61 62 6c 6f 63 6b 21 34  |fer%....ablock!4|
00001000  3d 32 0d 1f 90 22 c8 99  20 22 57 69 6d 70 5f 47  |=2...".. "Wimp_G|
00001010  65 74 49 63 6f 6e 53 74  61 74 65 22 2c 2c 61 62  |etIconState",,ab|
00001020  6c 6f 63 6b 0d 1f 9a 0f  70 6f 69 6e 74 65 72 25  |lock....pointer%|
00001030  3d 2d 31 0d 1f a4 05 f5  0d 1f ae 0f 70 6f 69 6e  |=-1.........poin|
00001040  74 65 72 25 2b 3d 31 0d  1f b8 2e 3f 28 61 62 6c  |ter%+=1....?(abl|
00001050  6f 63 6b 21 32 38 2b 70  6f 69 6e 74 65 72 25 29  |ock!28+pointer%)|
00001060  3d 3f 28 62 6c 6f 63 6b  2b 34 34 2b 70 6f 69 6e  |=?(block+44+poin|
00001070  74 65 72 25 29 0d 1f c2  1b fd 3f 28 62 6c 6f 63  |ter%).....?(bloc|
00001080  6b 2b 34 34 2b 70 6f 69  6e 74 65 72 25 29 3d 30  |k+44+pointer%)=0|
00001090  0d 1f cc 0e 61 62 6c 6f  63 6b 21 38 3d 30 0d 1f  |....ablock!8=0..|
000010a0  d6 0f 61 62 6c 6f 63 6b  21 31 32 3d 30 0d 1f e0  |..ablock!12=0...|
000010b0  22 c8 99 20 22 57 69 6d  70 5f 53 65 74 49 63 6f  |".. "Wimp_SetIco|
000010c0  6e 53 74 61 74 65 22 2c  2c 61 62 6c 6f 63 6b 0d  |nState",,ablock.|
000010d0  1f ea 05 cd 0d 1f f4 05  e1 0d 1f fe 05 3a 0d 23  |.............:.#|
000010e0  28 0d dd f2 6f 6b 5f 73  61 76 65 0d 23 32 12 61  |(...ok_save.#2.a|
000010f0  62 6c 6f 63 6b 21 30 3d  78 66 65 72 25 0d 23 3c  |block!0=xfer%.#<|
00001100  0e 61 62 6c 6f 63 6b 21  34 3d 32 0d 23 46 22 c8  |.ablock!4=2.#F".|
00001110  99 20 22 57 69 6d 70 5f  47 65 74 49 63 6f 6e 53  |. "Wimp_GetIconS|
00001120  74 61 74 65 22 2c 2c 61  62 6c 6f 63 6b 0d 23 50  |tate",,ablock.#P|
00001130  0b 73 74 6f 70 25 3d a3  0d 23 5a 0e 70 6f 69 6e  |.stop%=..#Z.poin|
00001140  74 65 72 25 3d 30 0d 23  64 05 f5 0d 23 6e 2f 3f  |ter%=0.#d...#n/?|
00001150  28 61 62 6c 6f 63 6b 2b  34 34 2b 70 6f 69 6e 74  |(ablock+44+point|
00001160  65 72 25 29 3d 3f 28 61  62 6c 6f 63 6b 21 32 38  |er%)=?(ablock!28|
00001170  2b 70 6f 69 6e 74 65 72  25 29 0d 23 78 28 e7 20  |+pointer%).#x(. |
00001180  3f 28 61 62 6c 6f 63 6b  21 32 38 2b 70 6f 69 6e  |?(ablock!28+poin|
00001190  74 65 72 25 29 3d 34 36  20 8c 20 73 74 6f 70 25  |ter%)=46 . stop%|
000011a0  3d b9 0d 23 82 0f 70 6f  69 6e 74 65 72 25 2b 3d  |=..#..pointer%+=|
000011b0  31 0d 23 8c 1e fd 3f 28  61 62 6c 6f 63 6b 21 32  |1.#...?(ablock!2|
000011c0  38 2b 70 6f 69 6e 74 65  72 25 29 3c 26 32 30 0d  |8+pointer%)<&20.|
000011d0  23 96 1b 3f 28 61 62 6c  6f 63 6b 2b 34 34 2b 70  |#..?(ablock+44+p|
000011e0  6f 69 6e 74 65 72 25 29  3d 30 0d 23 a0 50 e7 20  |ointer%)=0.#.P. |
000011f0  73 74 6f 70 25 3d a3 20  8c 20 f2 65 72 72 6f 72  |stop%=. . .error|
00001200  28 22 54 6f 20 73 61 76  65 2c 20 64 72 61 67 20  |("To save, drag |
00001210  74 68 65 20 66 69 6c 65  20 69 63 6f 6e 20 74 6f  |the file icon to|
00001220  20 61 20 64 69 72 65 63  74 6f 72 79 20 64 69 73  | a directory dis|
00001230  70 6c 61 79 22 29 20 3a  20 e1 0d 23 aa 34 c8 99  |play") : ..#.4..|
00001240  20 22 4f 53 5f 46 69 6c  65 22 2c 31 30 2c 61 62  | "OS_File",10,ab|
00001250  6c 6f 63 6b 2b 34 34 2c  26 46 46 39 2c 2c 62 61  |lock+44,&FF9,,ba|
00001260  6e 6b 2c 62 61 6e 6b 2b  31 36 33 38 39 36 0d 23  |nk,bank+163896.#|
00001270  b4 29 e7 20 62 6c 6f 63  6b 21 38 3d 34 20 8c 20  |.). block!8=4 . |
00001280  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 4d  |.. "Wimp_CreateM|
00001290  65 6e 75 22 2c 2d 31 0d  23 be 05 e1 0d 23 c8 05  |enu",-1.#....#..|
000012a0  3a 0d 27 10 0d dd f2 64  69 73 70 6c 61 79 0d 27  |:.'....display.'|
000012b0  1a 0b 6d 6f 64 65 25 3d  eb 0d 27 24 14 2a 73 63  |..mode%=..'$.*sc|
000012c0  72 65 65 6e 73 69 7a 65  20 31 36 30 6b 0d 27 2e  |reensize 160k.'.|
000012d0  21 c8 99 20 22 57 69 6d  70 5f 52 65 61 64 50 61  |!.. "Wimp_ReadPa|
000012e0  6c 65 74 74 65 22 2c 2c  61 62 6c 6f 63 6b 0d 27  |lette",,ablock.'|
000012f0  38 1c c8 99 20 22 57 69  6d 70 5f 53 65 74 4d 6f  |8... "Wimp_SetMo|
00001300  64 65 22 2c 31 35 20 3a  20 87 0d 27 42 4e e7 20  |de",15 : ..'BN. |
00001310  eb 3c 3e 31 35 20 8c 20  f2 65 72 72 6f 72 28 22  |.<>15 . .error("|
00001320  4e 6f 74 20 65 6e 6f 75  67 68 20 6d 65 6d 6f 72  |Not enough memor|
00001330  79 20 28 31 36 30 6b 20  6f 66 20 73 63 72 65 65  |y (160k of scree|
00001340  6e 20 6d 65 6d 6f 72 79  20 72 65 71 75 69 72 65  |n memory require|
00001350  64 29 22 29 20 3a 20 e1  0d 27 4c 0d d6 20 62 6c  |d)") : ..'L.. bl|
00001360  69 74 74 65 72 0d 27 56  0e 2a 70 6f 69 6e 74 65  |itter.'V.*pointe|
00001370  72 20 30 0d 27 60 05 f5  0d 27 6a 0f c8 97 20 78  |r 0.'`...'j... x|
00001380  25 2c 79 25 2c 7a 25 0d  27 74 0a fd 7a 25 3c 3e  |%,y%,z%.'t..z%<>|
00001390  30 0d 27 7e 05 f5 0d 27  88 0f c8 97 20 78 25 2c  |0.'~...'.... x%,|
000013a0  79 25 2c 7a 25 0d 27 92  09 fd 7a 25 3d 30 0d 27  |y%,z%.'...z%=0.'|
000013b0  9c 1b c8 99 20 22 57 69  6d 70 5f 53 65 74 4d 6f  |.... "Wimp_SetMo|
000013c0  64 65 22 2c 6d 6f 64 65  25 0d 27 a6 20 c8 99 20  |de",mode%.'. .. |
000013d0  22 57 69 6d 70 5f 53 65  74 50 61 6c 65 74 74 65  |"Wimp_SetPalette|
000013e0  22 2c 2c 61 62 6c 6f 63  6b 0d 27 b0 2a c8 99 20  |",,ablock.'.*.. |
000013f0  22 57 69 6d 70 5f 46 6f  72 63 65 52 65 64 72 61  |"Wimp_ForceRedra|
00001400  77 22 2c 2d 31 2c 30 2c  30 2c 31 32 38 30 2c 31  |w",-1,0,0,1280,1|
00001410  30 32 34 0d 27 ba 0e 2a  70 6f 69 6e 74 65 72 20  |024.'..*pointer |
00001420  31 0d 27 c4 05 e1 0d 27  ce 05 3a 0d 2a f8 0c dd  |1.'....'..:.*...|
00001430  f2 75 70 64 61 74 65 0d  2b 02 0f 70 25 3d 70 61  |.update.+..p%=pa|
00001440  74 74 65 72 6e 25 0d 2b  0c 12 f2 72 65 61 64 5f  |ttern%.+...read_|
00001450  70 61 74 74 65 72 6e 73  0d 2b 16 0f 70 61 74 74  |patterns.+..patt|
00001460  65 72 6e 25 3d 70 25 0d  2b 20 21 e7 20 6e 6f 25  |ern%=p%.+ !. no%|
00001470  3c 70 61 74 74 65 72 6e  25 20 8c 20 70 61 74 74  |<pattern% . patt|
00001480  65 72 6e 25 3d 6e 6f 25  0d 2b 2a 1f 70 61 74 74  |ern%=no%.+*.patt|
00001490  65 72 6e 24 3d 70 61 74  74 65 72 6e 24 28 70 61  |ern$=pattern$(pa|
000014a0  74 74 65 72 6e 25 29 0d  2b 34 0f f2 62 75 69 6c  |ttern%).+4..buil|
000014b0  64 5f 6d 65 6e 75 0d 2b  3e 11 f2 6c 6f 61 64 5f  |d_menu.+>..load_|
000014c0  70 61 74 74 65 72 6e 0d  2b 48 05 e1 0d 2b 52 05  |pattern.+H...+R.|
000014d0  3a 0d 2e e0 0a dd f2 69  6e 69 74 0d 2e ea 3b de  |:......init...;.|
000014e0  20 70 61 74 74 65 72 6e  20 33 32 37 36 38 20 2c  | pattern 32768 ,|
000014f0  20 62 6c 6f 63 6b 20 31  30 32 34 20 2c 20 6d 65  | block 1024 , me|
00001500  6e 75 20 31 30 32 34 20  2c 20 73 75 62 6d 65 6e  |nu 1024 , submen|
00001510  75 20 34 30 39 36 0d 2e  f4 2c de 20 62 61 6e 6b  |u 4096...,. bank|
00001520  20 31 36 34 38 34 30 20  2c 20 61 62 6c 6f 63 6b  | 164840 , ablock|
00001530  20 31 30 32 34 20 2c 20  65 72 72 6f 72 20 31 30  | 1024 , error 10|
00001540  32 34 0d 2e fe 41 de 20  74 65 6d 70 6c 61 74 65  |24...A. template|
00001550  31 20 31 30 32 34 20 2c  20 74 65 6d 70 6c 61 74  |1 1024 , templat|
00001560  65 32 20 31 30 32 34 20  2c 20 69 6e 64 69 72 31  |e2 1024 , indir1|
00001570  20 31 30 32 34 20 2c 20  69 6e 64 69 72 32 20 31  | 1024 , indir2 1|
00001580  30 32 34 0d 2f 08 12 de  20 70 61 74 74 65 72 6e  |024./... pattern|
00001590  24 28 36 34 29 0d 2f 12  30 c8 99 20 22 4f 53 5f  |$(64)./.0.. "OS_|
000015a0  46 69 6c 65 22 2c 31 36  2c 22 3c 53 74 65 72 65  |File",16,"<Stere|
000015b0  6f 24 44 69 72 3e 2e 48  65 61 64 65 72 22 2c 62  |o$Dir>.Header",b|
000015c0  61 6e 6b 2c 30 0d 2f 1c  0d 73 74 65 72 65 6f 25  |ank,0./..stereo%|
000015d0  3d a3 0d 2f 26 3f c8 99  20 22 57 69 6d 70 5f 49  |=../&?.. "Wimp_I|
000015e0  6e 69 74 69 61 6c 69 73  65 22 2c 32 30 30 2c 26  |nitialise",200,&|
000015f0  34 42 35 33 34 31 35 34  2c 22 53 74 65 72 65 6f  |4B534154,"Stereo|
00001600  22 20 b8 20 2c 74 61 73  6b 5f 68 61 6e 64 6c 65  |" . ,task_handle|
00001610  25 0d 2f 30 0b 77 69 6d  70 25 3d b9 0d 2f 3a 05  |%./0.wimp%=../:.|
00001620  e1 0d 2f 44 05 3a 0d 32  c8 14 dd f2 6c 6f 61 64  |../D.:.2....load|
00001630  5f 74 65 6d 70 6c 61 74  65 73 0d 32 d2 34 c8 99  |_templates.2.4..|
00001640  20 22 57 69 6d 70 5f 4f  70 65 6e 54 65 6d 70 6c  | "Wimp_OpenTempl|
00001650  61 74 65 22 2c 2c 22 3c  53 74 65 72 65 6f 24 44  |ate",,"<Stereo$D|
00001660  69 72 3e 2e 54 65 6d 70  6c 61 74 65 73 22 0d 32  |ir>.Templates".2|
00001670  dc 44 c8 99 20 22 57 69  6d 70 5f 4c 6f 61 64 54  |.D.. "Wimp_LoadT|
00001680  65 6d 70 6c 61 74 65 22  2c 2c 74 65 6d 70 6c 61  |emplate",,templa|
00001690  74 65 31 2c 69 6e 64 69  72 31 2c 69 6e 64 69 72  |te1,indir1,indir|
000016a0  31 2b 31 30 32 34 2c 2d  31 2c 22 49 6e 66 6f 22  |1+1024,-1,"Info"|
000016b0  2c 30 0d 32 e6 49 c8 99  20 22 57 69 6d 70 5f 4c  |,0.2.I.. "Wimp_L|
000016c0  6f 61 64 54 65 6d 70 6c  61 74 65 22 2c 2c 74 65  |oadTemplate",,te|
000016d0  6d 70 6c 61 74 65 32 2c  69 6e 64 69 72 32 2c 69  |mplate2,indir2,i|
000016e0  6e 64 69 72 32 2b 31 30  32 34 2c 2d 31 2c 22 78  |ndir2+1024,-1,"x|
000016f0  66 65 72 5f 73 65 6e 64  22 2c 30 0d 32 f0 2d c8  |fer_send",0.2.-.|
00001700  99 20 22 57 69 6d 70 5f  43 72 65 61 74 65 57 69  |. "Wimp_CreateWi|
00001710  6e 64 6f 77 22 2c 2c 74  65 6d 70 6c 61 74 65 31  |ndow",,template1|
00001720  20 b8 20 69 6e 66 6f 25  0d 32 fa 2d c8 99 20 22  | . info%.2.-.. "|
00001730  57 69 6d 70 5f 43 72 65  61 74 65 57 69 6e 64 6f  |Wimp_CreateWindo|
00001740  77 22 2c 2c 74 65 6d 70  6c 61 74 65 32 20 b8 20  |w",,template2 . |
00001750  78 66 65 72 25 0d 33 04  05 e1 0d 33 0e 05 3a 0d  |xfer%.3....3..:.|
00001760  36 b0 0e dd f2 61 73 73  65 6d 62 6c 65 0d 36 ba  |6....assemble.6.|
00001770  0f de 20 63 6f 64 65 20  31 30 32 34 0d 36 c4 15  |.. code 1024.6..|
00001780  e3 20 70 61 73 73 25 3d  30 20 b8 20 32 20 88 20  |. pass%=0 . 2 . |
00001790  32 0d 36 ce 0b 50 25 3d  63 6f 64 65 0d 36 d8 0e  |2.6..P%=code.6..|
000017a0  5b 4f 70 74 20 70 61 73  73 25 0d 36 e2 12 2e 73  |[Opt pass%.6...s|
000017b0  63 72 65 65 6e 20 45 51  55 44 20 30 0d 36 ec 17  |creen EQUD 0.6..|
000017c0  2e 70 61 74 74 65 72 6e  5f 70 74 72 20 45 51 55  |.pattern_ptr EQU|
000017d0  44 20 30 0d 36 f6 1a 2e  62 61 6e 6b 5f 70 74 72  |D 0.6...bank_ptr|
000017e0  20 45 51 55 44 20 62 61  6e 6b 2b 35 36 0d 37 00  | EQUD bank+56.7.|
000017f0  0f 2e 65 78 74 20 45 51  55 44 20 30 0d 37 0a 0b  |..ext EQUD 0.7..|
00001800  2e 73 74 65 72 65 6f 0d  37 14 11 2e 70 6c 6f 74  |.stereo.7...plot|
00001810  5f 70 61 74 74 65 72 6e  0d 37 1e 13 4c 64 72 20  |_pattern.7..Ldr |
00001820  52 30 2c 62 61 6e 6b 5f  70 74 72 0d 37 28 16 4c  |R0,bank_ptr.7(.L|
00001830  64 72 20 52 31 2c 70 61  74 74 65 72 6e 5f 70 74  |dr R1,pattern_pt|
00001840  72 0d 37 32 0f 4d 6f 76  20 52 32 2c 23 32 35 36  |r.72.Mov R2,#256|
00001850  0d 37 3c 10 2e 70 6c 6f  74 5f 79 5f 6c 6f 6f 70  |.7<..plot_y_loop|
00001860  0d 37 46 0d 4d 6f 76 20  52 33 2c 23 33 0d 37 50  |.7F.Mov R3,#3.7P|
00001870  10 2e 70 6c 6f 74 5f 78  5f 6c 6f 6f 70 0d 37 5a  |..plot_x_loop.7Z|
00001880  16 4c 64 6d 49 61 20 52  31 21 2c 7b 52 35 2d 52  |.LdmIa R1!,{R5-R|
00001890  31 32 7d 0d 37 64 16 53  74 6d 49 61 20 52 30 21  |12}.7d.StmIa R0!|
000018a0  2c 7b 52 35 2d 52 31 32  7d 0d 37 6e 11 53 75 62  |,{R5-R12}.7n.Sub|
000018b0  53 20 52 33 2c 52 33 2c  23 31 0d 37 78 13 42 4e  |S R3,R3,#1.7x.BN|
000018c0  65 20 70 6c 6f 74 5f 78  5f 6c 6f 6f 70 0d 37 82  |e plot_x_loop.7.|
000018d0  12 41 64 64 20 52 30 2c  52 30 2c 23 36 34 30 0d  |.Add R0,R0,#640.|
000018e0  37 8c 11 53 75 62 20 52  30 2c 52 30 2c 23 39 36  |7..Sub R0,R0,#96|
000018f0  0d 37 96 11 53 75 62 53  20 52 32 2c 52 32 2c 23  |.7..SubS R2,R2,#|
00001900  31 0d 37 a0 13 42 4e 65  20 70 6c 6f 74 5f 79 5f  |1.7..BNe plot_y_|
00001910  6c 6f 6f 70 0d 37 aa 05  3a 0d 37 b4 12 2e 63 72  |loop.7..:.7...cr|
00001920  65 61 74 65 5f 73 74 65  72 65 6f 0d 37 be 11 4c  |eate_stereo.7..L|
00001930  64 72 20 52 30 2c 73 63  72 65 65 6e 0d 37 c8 13  |dr R0,screen.7..|
00001940  4c 64 72 20 52 31 2c 62  61 6e 6b 5f 70 74 72 0d  |Ldr R1,bank_ptr.|
00001950  37 d2 0e 4d 6f 76 20 52  32 2c 23 39 36 0d 37 dc  |7..Mov R2,#96.7.|
00001960  0b 2e 78 5f 6c 6f 6f 70  0d 37 e6 0f 4d 6f 76 20  |..x_loop.7..Mov |
00001970  52 33 2c 23 32 35 35 0d  37 f0 0b 2e 79 5f 6c 6f  |R3,#255.7...y_lo|
00001980  6f 70 0d 37 fa 13 4d 6f  76 20 52 34 2c 52 33 2c  |op.7..Mov R4,R3,|
00001990  4c 73 6c 23 39 0d 38 04  16 41 64 64 20 52 34 2c  |Lsl#9.8..Add R4,|
000019a0  52 34 2c 52 33 2c 4c 73  6c 23 37 0d 38 0e 10 41  |R4,R3,Lsl#7.8..A|
000019b0  64 64 20 52 35 2c 52 30  2c 52 34 0d 38 18 11 53  |dd R5,R0,R4.8..S|
000019c0  75 62 20 52 35 2c 52 35  2c 23 39 36 0d 38 22 10  |ub R5,R5,#96.8".|
000019d0  41 64 64 20 52 36 2c 52  31 2c 52 34 0d 38 2c 13  |Add R6,R1,R4.8,.|
000019e0  4c 64 72 42 20 52 37 2c  5b 52 35 2c 52 32 5d 0d  |LdrB R7,[R5,R2].|
000019f0  38 36 11 53 75 62 20 52  39 2c 52 32 2c 23 39 36  |86.Sub R9,R2,#96|
00001a00  0d 38 40 10 41 64 64 20  52 39 2c 52 39 2c 52 37  |.8@.Add R9,R9,R7|
00001a10  0d 38 4a 13 4c 64 72 42  20 52 38 2c 5b 52 36 2c  |.8J.LdrB R8,[R6,|
00001a20  52 39 5d 0d 38 54 13 53  74 72 42 20 52 38 2c 5b  |R9].8T.StrB R8,[|
00001a30  52 36 2c 52 32 5d 0d 38  5e 11 53 75 62 53 20 52  |R6,R2].8^.SubS R|
00001a40  33 2c 52 33 2c 23 31 0d  38 68 0e 42 47 65 20 79  |3,R3,#1.8h.BGe y|
00001a50  5f 6c 6f 6f 70 0d 38 72  10 41 64 64 20 52 32 2c  |_loop.8r.Add R2,|
00001a60  52 32 2c 23 31 0d 38 7c  0f 43 6d 70 20 52 32 2c  |R2,#1.8|.Cmp R2,|
00001a70  23 36 34 30 0d 38 86 0e  42 4e 65 20 78 5f 6c 6f  |#640.8..BNe x_lo|
00001a80  6f 70 0d 38 90 0e 4d 6f  76 20 50 43 2c 52 31 34  |op.8..Mov PC,R14|
00001a90  0d 38 9a 05 3a 0d 38 a4  08 2e 63 6c 73 0d 38 ae  |.8..:.8...cls.8.|
00001aa0  13 4c 64 72 20 52 30 2c  62 61 6e 6b 5f 70 74 72  |.Ldr R0,bank_ptr|
00001ab0  0d 38 b8 3d 4d 6f 76 20  52 32 2c 23 30 20 3a 20  |.8.=Mov R2,#0 : |
00001ac0  4d 6f 76 20 52 33 2c 23  30 20 3a 20 4d 6f 76 20  |Mov R3,#0 : Mov |
00001ad0  52 34 2c 23 30 20 3a 20  4d 6f 76 20 52 35 2c 23  |R4,#0 : Mov R5,#|
00001ae0  30 20 3a 20 4d 6f 76 20  52 36 2c 23 30 0d 38 c2  |0 : Mov R6,#0.8.|
00001af0  3f 4d 6f 76 20 52 37 2c  23 30 20 3a 20 4d 6f 76  |?Mov R7,#0 : Mov|
00001b00  20 52 38 2c 23 30 20 3a  20 4d 6f 76 20 52 39 2c  | R8,#0 : Mov R9,|
00001b10  23 30 20 3a 20 4d 6f 76  20 52 31 30 2c 23 30 20  |#0 : Mov R10,#0 |
00001b20  3a 20 4d 6f 76 20 52 31  31 2c 23 30 0d 38 cc 11  |: Mov R11,#0.8..|
00001b30  4d 6f 76 20 52 31 32 2c  23 34 30 39 36 0d 38 d6  |Mov R12,#4096.8.|
00001b40  0d 2e 63 6c 73 5f 6c 6f  6f 70 0d 38 e0 16 53 74  |..cls_loop.8..St|
00001b50  6d 49 61 20 52 30 21 2c  7b 52 32 2d 52 31 31 7d  |mIa R0!,{R2-R11}|
00001b60  0d 38 ea 13 53 75 62 53  20 52 31 32 2c 52 31 32  |.8..SubS R12,R12|
00001b70  2c 23 31 0d 38 f4 10 42  4e 65 20 63 6c 73 5f 6c  |,#1.8..BNe cls_l|
00001b80  6f 6f 70 0d 38 fe 0e 4d  6f 76 20 50 43 2c 52 31  |oop.8..Mov PC,R1|
00001b90  34 0d 39 08 05 3a 0d 39  12 0c 2e 62 6c 69 74 74  |4.9..:.9...blitt|
00001ba0  65 72 0d 39 1c 11 4c 64  72 20 52 30 2c 73 63 72  |er.9..Ldr R0,scr|
00001bb0  65 65 6e 0d 39 26 13 4c  64 72 20 52 31 2c 62 61  |een.9&.Ldr R1,ba|
00001bc0  6e 6b 5f 70 74 72 0d 39  30 11 4d 6f 76 20 52 31  |nk_ptr.90.Mov R1|
00001bd0  32 2c 23 34 30 39 36 0d  39 3a 11 2e 62 6c 69 74  |2,#4096.9:..blit|
00001be0  74 65 72 5f 6c 6f 6f 70  0d 39 44 16 4c 64 6d 49  |ter_loop.9D.LdmI|
00001bf0  61 20 52 31 21 2c 7b 52  32 2d 52 31 31 7d 0d 39  |a R1!,{R2-R11}.9|
00001c00  4e 16 53 74 6d 49 61 20  52 30 21 2c 7b 52 32 2d  |N.StmIa R0!,{R2-|
00001c10  52 31 31 7d 0d 39 58 13  53 75 62 53 20 52 31 32  |R11}.9X.SubS R12|
00001c20  2c 52 31 32 2c 23 31 0d  39 62 14 42 4e 65 20 62  |,R12,#1.9b.BNe b|
00001c30  6c 69 74 74 65 72 5f 6c  6f 6f 70 0d 39 6c 0e 4d  |litter_loop.9l.M|
00001c40  6f 76 20 50 43 2c 52 31  34 0d 39 76 05 3a 0d 39  |ov PC,R14.9v.:.9|
00001c50  80 0f 2e 64 65 63 6f 6d  70 72 65 73 73 0d 39 8a  |...decompress.9.|
00001c60  11 4c 64 72 20 52 30 2c  73 63 72 65 65 6e 0d 39  |.Ldr R0,screen.9|
00001c70  94 13 4c 64 72 20 52 31  2c 62 61 6e 6b 5f 70 74  |..Ldr R1,bank_pt|
00001c80  72 0d 39 9e 0d 4d 6f 76  20 52 32 2c 23 30 0d 39  |r.9..Mov R2,#0.9|
00001c90  a8 0d 4d 6f 76 20 52 33  2c 23 30 0d 39 b2 0f 4c  |..Mov R3,#0.9..L|
00001ca0  64 72 20 52 31 31 2c 65  78 74 0d 39 bc 14 2e 64  |dr R11,ext.9...d|
00001cb0  65 63 6f 6d 70 72 65 73  73 5f 6c 6f 6f 70 0d 39  |ecompress_loop.9|
00001cc0  c6 14 4c 64 72 42 20 52  31 32 2c 5b 52 31 2c 52  |..LdrB R12,[R1,R|
00001cd0  33 5d 0d 39 d0 10 41 64  64 20 52 33 2c 52 33 2c  |3].9..Add R3,R3,|
00001ce0  23 31 0d 39 da 13 4c 64  72 42 20 52 35 2c 5b 52  |#1.9..LdrB R5,[R|
00001cf0  31 2c 52 33 5d 0d 39 e4  10 41 64 64 20 52 33 2c  |1,R3].9..Add R3,|
00001d00  52 33 2c 23 31 0d 39 ee  12 41 64 64 20 52 31 32  |R3,#1.9..Add R12|
00001d10  2c 52 31 32 2c 23 31 0d  39 f8 0e 2e 70 6c 6f 74  |,R12,#1.9...plot|
00001d20  5f 6c 6f 6f 70 0d 3a 02  13 53 74 72 42 20 52 35  |_loop.:..StrB R5|
00001d30  2c 5b 52 30 2c 52 32 5d  0d 3a 0c 10 41 64 64 20  |,[R0,R2].:..Add |
00001d40  52 32 2c 52 32 2c 23 31  0d 3a 16 13 53 75 62 53  |R2,R2,#1.:..SubS|
00001d50  20 52 31 32 2c 52 31 32  2c 23 31 0d 3a 20 11 42  | R12,R12,#1.: .B|
00001d60  4e 65 20 70 6c 6f 74 5f  6c 6f 6f 70 0d 3a 2a 0e  |Ne plot_loop.:*.|
00001d70  43 6d 70 20 52 33 2c 52  31 31 0d 3a 34 17 42 4e  |Cmp R3,R11.:4.BN|
00001d80  65 20 64 65 63 6f 6d 70  72 65 73 73 5f 6c 6f 6f  |e decompress_loo|
00001d90  70 0d 3a 3e 0e 4d 6f 76  20 50 43 2c 52 31 34 0d  |p.:>.Mov PC,R14.|
00001da0  3a 48 09 5d 20 3a 20 ed  0d 3a 52 05 e1 0d 3a 5c  |:H.] : ..:R...:\|
00001db0  05 3a 0d 3a 98 13 dd f2  72 65 61 64 5f 70 61 74  |.:.:....read_pat|
00001dc0  74 65 72 6e 73 0d 3a a2  48 c8 99 20 22 4f 53 5f  |terns.:.H.. "OS_|
00001dd0  47 42 50 42 22 2c 31 30  2c 22 3c 53 74 65 72 65  |GBPB",10,"<Stere|
00001de0  6f 24 44 69 72 3e 2e 50  61 74 74 65 72 6e 73 22  |o$Dir>.Patterns"|
00001df0  2c 73 75 62 6d 65 6e 75  2c 36 34 2c 30 2c 34 30  |,submenu,64,0,40|
00001e00  39 36 2c 30 20 b8 20 2c  2c 2c 6e 6f 25 0d 3a ac  |96,0 . ,,,no%.:.|
00001e10  3b e7 20 6e 6f 25 3d 30  20 8c 20 f2 65 72 72 6f  |;. no%=0 . .erro|
00001e20  72 28 22 4e 6f 20 70 61  74 74 65 72 6e 73 20 61  |r("No patterns a|
00001e30  76 61 69 6c 61 62 6c 65  22 29 20 3a 20 f2 63 6c  |vailable") : .cl|
00001e40  6f 73 65 5f 64 6f 77 6e  0d 3a b6 2e 73 70 72 69  |ose_down.:..spri|
00001e50  74 65 73 25 3d 30 20 3a  20 70 6f 69 6e 74 65 72  |tes%=0 : pointer|
00001e60  25 3d 73 75 62 6d 65 6e  75 20 3a 20 6c 6f 6e 67  |%=submenu : long|
00001e70  65 73 74 25 3d 30 0d 3a  c0 13 e3 20 6c 6f 6f 70  |est%=0.:... loop|
00001e80  25 3d 31 20 b8 20 6e 6f  25 0d 3a ca 16 6c 65 6e  |%=1 . no%.:..len|
00001e90  67 74 68 25 3d 70 6f 69  6e 74 65 72 25 21 38 0d  |gth%=pointer%!8.|
00001ea0  3a d4 23 66 69 6c 65 74  79 70 65 25 3d 28 21 70  |:.#filetype%=(!p|
00001eb0  6f 69 6e 74 65 72 25 3e  3e 38 29 20 80 20 26 46  |ointer%>>8) . &F|
00001ec0  46 46 0d 3a de 10 70 6f  69 6e 74 65 72 25 2b 3d  |FF.:..pointer%+=|
00001ed0  32 30 0d 3a e8 0c 6e 61  6d 65 24 3d 22 22 0d 3a  |20.:..name$="".:|
00001ee0  f2 05 f5 0d 3a fc 17 6e  61 6d 65 24 2b 3d bd 28  |....:..name$+=.(|
00001ef0  3f 70 6f 69 6e 74 65 72  25 29 0d 3b 06 0f 70 6f  |?pointer%).;..po|
00001f00  69 6e 74 65 72 25 2b 3d  31 0d 3b 10 10 fd 3f 70  |inter%+=1.;...?p|
00001f10  6f 69 6e 74 65 72 25 3d  30 0d 3b 1a 1d 70 6f 69  |ointer%=0.;..poi|
00001f20  6e 74 65 72 25 3d 28 70  6f 69 6e 74 65 72 25 2b  |nter%=(pointer%+|
00001f30  34 29 80 ac 20 33 0d 3b  24 37 e7 20 66 69 6c 65  |4).. 3.;$7. file|
00001f40  74 79 70 65 25 3d 26 46  46 39 20 80 20 6c 65 6e  |type%=&FF9 . len|
00001f50  67 74 68 25 3e 32 34 35  37 36 20 80 20 6c 65 6e  |gth%>24576 . len|
00001f60  67 74 68 25 3c 3d 33 32  37 36 38 20 8c 0d 3b 2e  |gth%<=32768 ..;.|
00001f70  0f 73 70 72 69 74 65 73  25 2b 3d 31 0d 3b 38 1c  |.sprites%+=1.;8.|
00001f80  70 61 74 74 65 72 6e 24  28 73 70 72 69 74 65 73  |pattern$(sprites|
00001f90  25 29 3d 6e 61 6d 65 24  0d 3b 42 27 e7 20 a9 6e  |%)=name$.;B'. .n|
00001fa0  61 6d 65 24 3e 6c 6f 6e  67 65 73 74 25 20 8c 20  |ame$>longest% . |
00001fb0  6c 6f 6e 67 65 73 74 25  3d a9 6e 61 6d 65 24 0d  |longest%=.name$.|
00001fc0  3b 4c 05 cd 0d 3b 56 05  ed 0d 3b 60 46 e7 20 73  |;L...;V...;`F. s|
00001fd0  70 72 69 74 65 73 25 3d  30 20 8c 20 f2 65 72 72  |prites%=0 . .err|
00001fe0  6f 72 28 22 4e 6f 20 76  61 6c 69 64 20 70 61 74  |or("No valid pat|
00001ff0  74 65 72 6e 73 20 61 76  61 69 6c 61 62 6c 65 22  |terns available"|
00002000  29 20 3a 20 f2 63 6c 6f  73 65 5f 64 6f 77 6e 0d  |) : .close_down.|
00002010  3b 6a 2c 70 61 74 74 65  72 6e 25 3d 31 20 3a 20  |;j,pattern%=1 : |
00002020  70 61 74 74 65 72 6e 24  3d 70 61 74 74 65 72 6e  |pattern$=pattern|
00002030  24 28 70 61 74 74 65 72  6e 25 29 0d 3b 74 05 e1  |$(pattern%).;t..|
00002040  0d 3b 7e 05 3a 0d 3e 80  10 dd f2 62 75 69 6c 64  |.;~.:.>....build|
00002050  5f 6d 65 6e 75 0d 3e 8a  12 24 6d 65 6e 75 3d 22  |_menu.>..$menu="|
00002060  53 74 65 72 65 6f 22 0d  3e 94 12 6d 65 6e 75 21  |Stereo".>..menu!|
00002070  31 32 3d 26 37 30 32 30  37 0d 3e 9e 0f 6d 65 6e  |12=&70207.>..men|
00002080  75 21 31 36 3d 31 32 38  0d 3e a8 0e 6d 65 6e 75  |u!16=128.>..menu|
00002090  21 32 30 3d 34 30 0d 3e  b2 0d 6d 65 6e 75 21 32  |!20=40.>..menu!2|
000020a0  34 3d 30 0d 3e bc 15 6d  65 6e 75 5f 70 74 72 25  |4=0.>..menu_ptr%|
000020b0  3d 6d 65 6e 75 2b 32 38  0d 3e c6 27 f2 6d 65 6e  |=menu+28.>.'.men|
000020c0  75 5f 69 74 65 6d 28 30  2c 69 6e 66 6f 25 2c 26  |u_item(0,info%,&|
000020d0  37 30 30 30 30 32 31 2c  22 49 6e 66 6f 22 29 0d  |7000021,"Info").|
000020e0  3e d0 39 f2 6d 65 6e 75  5f 69 74 65 6d 28 30 2c  |>.9.menu_item(0,|
000020f0  78 66 65 72 25 2c 26 37  30 30 30 30 32 31 2b 28  |xfer%,&7000021+(|
00002100  28 2d ac 73 74 65 72 65  6f 25 29 3c 3c 32 32 29  |(-.stereo%)<<22)|
00002110  2c 22 53 61 76 65 22 29  0d 3e da 2c f2 6d 65 6e  |,"Save").>.,.men|
00002120  75 5f 69 74 65 6d 28 30  2c 73 75 62 6d 65 6e 75  |u_item(0,submenu|
00002130  2c 26 37 30 30 30 30 32  31 2c 22 50 61 74 74 65  |,&7000021,"Patte|
00002140  72 6e 22 29 0d 3e e4 26  f2 6d 65 6e 75 5f 69 74  |rn").>.&.menu_it|
00002150  65 6d 28 30 2c 2d 31 2c  26 37 30 30 30 30 32 31  |em(0,-1,&7000021|
00002160  2c 22 55 70 64 61 74 65  22 29 0d 3e ee 26 f2 6d  |,"Update").>.&.m|
00002170  65 6e 75 5f 69 74 65 6d  28 31 32 38 2c 2d 31 2c  |enu_item(128,-1,|
00002180  26 37 30 30 30 30 32 31  2c 22 51 75 69 74 22 29  |&7000021,"Quit")|
00002190  0d 3e f8 16 24 73 75 62  6d 65 6e 75 3d 22 50 61  |.>..$submenu="Pa|
000021a0  74 74 65 72 6e 22 0d 3f  02 15 73 75 62 6d 65 6e  |ttern".?..submen|
000021b0  75 21 31 32 3d 26 37 30  32 30 37 0d 3f 0c 1e 73  |u!12=&70207.?..s|
000021c0  75 62 6d 65 6e 75 21 31  36 3d 28 6c 6f 6e 67 65  |ubmenu!16=(longe|
000021d0  73 74 25 2b 31 29 2a 31  36 0d 3f 16 1a 77 69 64  |st%+1)*16.?..wid|
000021e0  74 68 25 3d 28 6c 6f 6e  67 65 73 74 25 2b 31 29  |th%=(longest%+1)|
000021f0  2a 31 36 0d 3f 20 1d e7  20 31 32 38 3e 77 69 64  |*16.? .. 128>wid|
00002200  74 68 25 20 8c 20 77 69  64 74 68 25 3d 31 32 38  |th% . width%=128|
00002210  0d 3f 2a 15 73 75 62 6d  65 6e 75 21 31 36 3d 77  |.?*.submenu!16=w|
00002220  69 64 74 68 25 0d 3f 34  11 73 75 62 6d 65 6e 75  |idth%.?4.submenu|
00002230  21 32 30 3d 34 30 0d 3f  3e 10 73 75 62 6d 65 6e  |!20=40.?>.submen|
00002240  75 21 32 34 3d 30 0d 3f  48 18 6d 65 6e 75 5f 70  |u!24=0.?H.menu_p|
00002250  74 72 25 3d 73 75 62 6d  65 6e 75 2b 32 38 0d 3f  |tr%=submenu+28.?|
00002260  52 12 e7 20 73 70 72 69  74 65 73 25 3e 31 20 8c  |R.. sprites%>1 .|
00002270  0d 3f 5c 1a e3 20 6c 6f  6f 70 25 3d 31 20 b8 20  |.?\.. loop%=1 . |
00002280  73 70 72 69 74 65 73 25  2d 31 0d 3f 66 3d f2 6d  |sprites%-1.?f=.m|
00002290  65 6e 75 5f 69 74 65 6d  28 2d 28 6c 6f 6f 70 25  |enu_item(-(loop%|
000022a0  3d 70 61 74 74 65 72 6e  25 29 2c 2d 31 2c 26 37  |=pattern%),-1,&7|
000022b0  30 30 30 30 32 31 2c 70  61 74 74 65 72 6e 24 28  |000021,pattern$(|
000022c0  6c 6f 6f 70 25 29 29 0d  3f 70 05 ed 0d 3f 7a 05  |loop%)).?p...?z.|
000022d0  cd 0d 3f 84 46 f2 6d 65  6e 75 5f 69 74 65 6d 28  |..?.F.menu_item(|
000022e0  31 32 38 2d 28 70 61 74  74 65 72 6e 25 3d 73 70  |128-(pattern%=sp|
000022f0  72 69 74 65 73 25 29 2c  2d 31 2c 26 37 30 30 30  |rites%),-1,&7000|
00002300  30 32 31 2c 70 61 74 74  65 72 6e 24 28 73 70 72  |021,pattern$(spr|
00002310  69 74 65 73 25 29 29 0d  3f 8e 05 e1 0d 3f 98 05  |ites%)).?....?..|
00002320  3a 0d 42 68 2f dd f2 6d  65 6e 75 5f 69 74 65 6d  |:.Bh/..menu_item|
00002330  28 6d 66 6c 61 67 73 25  2c 73 75 62 6d 65 6e 75  |(mflags%,submenu|
00002340  25 2c 69 66 6c 61 67 73  25 2c 74 65 78 74 24 29  |%,iflags%,text$)|
00002350  0d 42 72 16 21 6d 65 6e  75 5f 70 74 72 25 3d 6d  |.Br.!menu_ptr%=m|
00002360  66 6c 61 67 73 25 0d 42  7c 18 6d 65 6e 75 5f 70  |flags%.B|.menu_p|
00002370  74 72 25 21 34 3d 73 75  62 6d 65 6e 75 25 0d 42  |tr%!4=submenu%.B|
00002380  86 17 6d 65 6e 75 5f 70  74 72 25 21 38 3d 69 66  |..menu_ptr%!8=if|
00002390  6c 61 67 73 25 0d 42 90  19 24 28 6d 65 6e 75 5f  |lags%.B..$(menu_|
000023a0  70 74 72 25 2b 31 32 29  3d 74 65 78 74 24 0d 42  |ptr%+12)=text$.B|
000023b0  9a 11 6d 65 6e 75 5f 70  74 72 25 2b 3d 32 34 0d  |..menu_ptr%+=24.|
000023c0  42 a4 05 e1 0d 42 ae 05  3a 0d 46 50 11 dd f2 63  |B....B..:.FP...c|
000023d0  72 65 61 74 65 5f 69 63  6f 6e 0d 46 5a 0d 21 62  |reate_icon.FZ.!b|
000023e0  6c 6f 63 6b 3d 2d 31 0d  46 64 35 62 6c 6f 63 6b  |lock=-1.Fd5block|
000023f0  21 34 3d 30 20 3a 20 62  6c 6f 63 6b 21 38 3d 30  |!4=0 : block!8=0|
00002400  20 3a 20 62 6c 6f 63 6b  21 31 32 3d 36 38 20 3a  | : block!12=68 :|
00002410  20 62 6c 6f 63 6b 21 31  36 3d 36 38 0d 46 6e 16  | block!16=68.Fn.|
00002420  62 6c 6f 63 6b 21 32 30  3d 26 31 37 30 30 33 30  |block!20=&170030|
00002430  30 41 0d 46 78 19 24 28  62 6c 6f 63 6b 2b 32 34  |0A.Fx.$(block+24|
00002440  29 3d 22 21 53 74 65 72  65 6f 22 0d 46 82 2e c8  |)="!Stereo".F...|
00002450  99 20 22 57 69 6d 70 5f  43 72 65 61 74 65 49 63  |. "Wimp_CreateIc|
00002460  6f 6e 22 2c 2c 62 6c 6f  63 6b 20 b8 20 69 63 6f  |on",,block . ico|
00002470  6e 5f 68 61 6e 64 6c 65  25 0d 46 8c 05 e1 0d 46  |n_handle%.F....F|
00002480  96 05 3a 0d 4a 38 13 dd  f2 65 72 72 6f 72 28 65  |..:.J8...error(e|
00002490  72 72 6f 72 24 29 0d 4a  42 0e 21 65 72 72 6f 72  |rror$).JB.!error|
000024a0  3d 32 35 35 0d 4a 4c 1a  24 28 65 72 72 6f 72 2b  |=255.JL.$(error+|
000024b0  34 29 3d 65 72 72 6f 72  24 2b bd 28 30 29 0d 4a  |4)=error$+.(0).J|
000024c0  56 06 ef 37 0d 4a 60 2c  c8 99 20 22 57 69 6d 70  |V..7.J`,.. "Wimp|
000024d0  5f 52 65 70 6f 72 74 45  72 72 6f 72 22 2c 65 72  |_ReportError",er|
000024e0  72 6f 72 2c 31 33 30 2c  22 53 74 65 72 65 6f 22  |ror,130,"Stereo"|
000024f0  0d 4a 6a 05 e1 0d 4a 74  05 3a 0d 4e 20 10 dd f2  |.Jj...Jt.:.N ...|
00002500  63 6c 6f 73 65 5f 64 6f  77 6e 0d 4e 2a 38 e7 20  |close_down.N*8. |
00002510  77 69 6d 70 25 20 8c 20  c8 99 20 22 57 69 6d 70  |wimp% . .. "Wimp|
00002520  5f 43 6c 6f 73 65 44 6f  77 6e 22 2c 74 61 73 6b  |_CloseDown",task|
00002530  5f 68 61 6e 64 6c 65 25  2c 26 34 42 35 33 34 31  |_handle%,&4B5341|
00002540  35 34 0d 4e 34 05 e0 0d  4e 3e 05 e1 0d 4e 48 05  |54.N4...N>...NH.|
00002550  3a 0d ff                                          |:..|
00002553