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

Horman/!Compress/!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/!Compress/!RunImage
Read OK:
File size: 11E0 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > !RunImage
   20REM by David Horman
   30REM LEN 1995
   40:
   50SYS "Hourglass_On"
   60PROCinit
   70PROCload_template
   80PROCbuild_menu
   90PROCassemble
  100SYS "Hourglass_Off"
  110PROCcreate_icon
  120:
  130quit%=FALSE
  140ONERRORPROCerror(REPORT$)
  150REPEAT
  160SYS "Wimp_Poll",%110000110011,block TO reason%
  170CASE reason% OF
  180WHEN 2 : SYS "Wimp_OpenWindow",,block
  190WHEN 6 : PROCclick
  200WHEN 9 : PROCmenu_selection
  210WHEN 17,18,19 : PROCmessage
  220ENDCASE
  230UNTILquit%
  240PROCclose_down
  250END
  260:
 1000DEFPROCclick
 1010IF block!16=icon_handle% AND block!8=2 THEN SYS "Wimp_CreateMenu",,menu,!block-64,176
 1020ENDPROC
 1030:
 2000DEFPROCmenu_selection
 2010SYS "Wimp_GetPointerInfo",,ablock
 2020SYS "Wimp_DecodeMenu",,menu,block,STRING$(192," ") TO ,,,item$
 2030IF item$="Quit" THEN quit%=TRUE
 2040IF ablock!8=1 THEN SYS "Wimp_CreateMenu",,menu,!block-64,176
 2050ENDPROC
 2060:
 3000DEFPROCmessage
 3010CASE block!16 OF
 3020WHEN 0 : quit%=TRUE
 3030WHEN 3 : PROCload
 3040ENDCASE
 3050ENDPROC
 3060:
 4000DEFPROCload
 4010SYS "OS_File",17,block+44 TO type%,,,,length%,attributes%
 4020filetype%=block!40
 4030IF type%=2 THEN PROCerror("Object is a directory") : ENDPROC
 4040IF filetype%<>&FF9 AND filetype%<>&128 THEN PROCerror("Invalid filetype") : ENDPROC
 4050IF (attributes% AND %11)<>%11 THEN PROCerror("Access error") : ENDPROC
 4060IF attributes% AND %1000 THEN PROCerror("Locked") : ENDPROC
 4070IF filetype%=&FF9 AND length%<163840 AND length%>164864 THEN PROCerror("Invalid sprite length (does it have a mask?)") : ENDPROC
 4080IF filetype%=&128 AND length%<1280 THEN PROCerror("Short file") : ENDPROC
 4090mode%=MODE
 4100*screensize 160k
 4110SYS "Wimp_ReadPalette",,ablock
 4120SYS "Wimp_SetMode",15 : OFF
 4130IF MODE<>15 THEN PROCerror("Not enough memory (160k of screen memory required)") : ENDPROC
 4140!ext=length%
 4150block!0=148
 4160block!4=-1
 4170SYS "OS_ReadVduVariables",block,screen
 4180IF filetype%=&128 THEN
 4190SYS "OS_File",16,block+44,bank+56,0
 4200CALL decompress
 4210CALL blitter
 4220!ext=163840
 4230filetype%=&FF9
 4240ELSE
 4250SYS "OS_File",16,block+44,bank+56,0
 4260!pointer=bank+56+length%-163840
 4270CALL reverse_blitter
 4280!pointer=bank+56
 4290CALL compress
 4300filetype%=&128
 4310ENDIF
 4320SYS "Wimp_SetMode",mode%
 4330SYS "Wimp_SetPalette",,ablock
 4340SYS "Wimp_ForceRedraw",-1,0,0,1280,1024
 4350*pointer 1
 4360SYS "OS_File",10,block+44,filetype%,,bank+56*-(filetype%=&128),bank+56+!ext
 4370ENDPROC
 4380:
 5000DEFPROCinit
 5010DIM bank 164864 , block 1024 , ablock 1024 , menu 1024
 5020DIM template 1024 , indir 1024
 5030OSCLI "load <Compress$Dir>.Header "+STR$~bank
 5040SYS "Wimp_Initialise",200,&4B534154,"Compressor" TO ,task_handle%
 5050ENDPROC
 5060:
 6000DEFPROCload_template
 6010SYS "Wimp_OpenTemplate",,"<Compress$Dir>.Template"
 6020SYS "Wimp_LoadTemplate",,template,indir,indir+1024,-1,"Info",0
 6030SYS "Wimp_CreateWindow",,template TO info%
 6040ENDPROC
 6050:
 7000DEFPROCassemble
 7010DIM code 1024
 7020FOR pass%=0 TO 2 STEP 2
 7030P%=code
 7040[Opt pass%
 7050.screen Equd 0
 7060.pointer Equd bank+56
 7070.ext Equd 0
 7080:
 7090.compress
 7100Ldr R0,screen
 7110Ldr R1,pointer
 7120Mov R2,#0
 7130Mov R3,#0
 7140Mvn R4,#0
 7150LdrB R5,[R0,R2]
 7160.compress_loop
 7170LdrB R6,[R0,R2]
 7180Cmp R5,R6
 7190BNe else
 7200Cmp R4,#255
 7210BGe else
 7220Mov R12,#163840
 7230Sub R12,R12,#1
 7240Cmp R2,R12
 7250BEq else
 7260Add R4,R4,#1
 7270B endif
 7280.else
 7290StrB R4,[R1,R3]
 7300Add R3,R3,#1
 7310StrB R5,[R1,R3]
 7320Add R3,R3,#1
 7330Mov R4,#0
 7340.endif
 7350Mov R5,R6
 7360Add R2,R2,#1
 7370Cmp R2,#163840
 7380BLt compress_loop
 7390Str R3,ext
 7400Mov PC,R14
 7410:
 7420.decompress
 7430Ldr R0,screen
 7440Ldr R1,pointer
 7450Mov R2,#0
 7460Mov R3,#0
 7470Ldr R11,ext
 7480.decompress_loop
 7490LdrB R12,[R1,R3]
 7500Add R3,R3,#1
 7510LdrB R5,[R1,R3]
 7520Add R3,R3,#1
 7530Add R12,R12,#1
 7540.plot_loop
 7550StrB R5,[R0,R2]
 7560Add R2,R2,#1
 7570SubS R12,R12,#1
 7580BNe plot_loop
 7590Cmp R3,R11
 7600BNe decompress_loop
 7610Mov PC,R14
 7620:
 7630.blitter
 7640Ldr R0,screen
 7650Ldr R1,pointer
 7660Mov R12,#4096
 7670.blitter_loop
 7680LdmIa R0!,{R2-R11}
 7690StmIa R1!,{R2-R11}
 7700SubS R12,R12,#1
 7710BNe blitter_loop
 7720Mov PC,R14
 7730:
 7740.reverse_blitter
 7750Ldr R0,pointer
 7760Ldr R1,screen
 7770Mov R12,#4096
 7780.reverse_blitter_loop
 7790LdmIa R0!,{R2-R11}
 7800StmIa R1!,{R2-R11}
 7810SubS R12,R12,#1
 7820BNe reverse_blitter_loop
 7830Mov PC,R14
 7840] : NEXT
 7850ENDPROC
 7860:
 8000DEFPROCbuild_menu
 8010$menu="Compressor"
 8020menu!12=&70207
 8030menu!16=176
 8040menu!20=40
 8050menu!24=0
 8060menu_ptr%=menu+28
 8070PROCmenu_item(0,info%,&7000021,"Info")
 8080PROCmenu_item(128,-1,&7000021,"Quit")
 8090ENDPROC
 8100:
 9000DEFPROCmenu_item(mflags%,submenu%,iflags%,text$)
 9010!menu_ptr%=mflags%
 9020menu_ptr%!4=submenu%
 9030menu_ptr%!8=iflags%
 9040$(menu_ptr%+12)=text$
 9050menu_ptr%+=24
 9060ENDPROC
 9070:
10000DEFPROCcreate_icon
10010!block=-1
10020block!4=0 : block!8=0 : block!12=68 : block!16=68
10030block!20=&1700300A
10040$(block+24)="!Compress"
10050SYS "Wimp_CreateIcon",,block TO icon_handle%
10060ENDPROC
10070:
11000DEFPROCerror(error$)
11010!block=255
11020$(block+4)=error$+CHR$(0)
11030VDU7
11040SYS "Wimp_ReportError",block,130,"Compressor"
11050ENDPROC
11060:
12000DEFPROCclose_down
12010SYS "Wimp_CloseDown",task_handle%,&4B534154
12020ENDPROC
12030:

� > !RunImage
� by David Horman
� � 1995
(:
2ș "Hourglass_On"
<	�init
F�load_template
P�build_menu
Z
�assemble
dș "Hourglass_Off"
n�create_icon
x:
�quit%=�
���error(�$)
��
�0ș "Wimp_Poll",%110000110011,block � reason%
�Ȏ reason% �
�%� 2 : ș "Wimp_OpenWindow",,block
�� 6 : �click
�� 9 : �menu_selection
�� 17,18,19 : �message
��
�
�quit%
��close_down
��
:
���click
�R� block!16=icon_handle% � block!8=2 � ș "Wimp_CreateMenu",,menu,!block-64,176
��
:
���menu_selection
�$ș "Wimp_GetPointerInfo",,ablock
�9ș "Wimp_DecodeMenu",,menu,block,�192," ") � ,,,item$
�� item$="Quit" � quit%=�
�;� ablock!8=1 � ș "Wimp_CreateMenu",,menu,!block-64,176
�
:
�
��message
�Ȏ block!16 �
�� 0 : quit%=�
�� 3 : �load
��
��
�:
�
��load
�;ș "OS_File",17,block+44 � type%,,,,length%,attributes%
�filetype%=block!40
�3� type%=2 � �error("Object is a directory") : �
�H� filetype%<>&FF9 � filetype%<>&128 � �error("Invalid filetype") : �
�;� (attributes% � %11)<>%11 � �error("Access error") : �
�0� attributes% � %1000 � �error("Locked") : �
�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 : �
"N� �<>15 � �error("Not enough memory (160k of screen memory required)") : �
,!ext=length%
6block!0=148
@block!4=-1
J)ș "OS_ReadVduVariables",block,screen
T� filetype%=&128 �
^&ș "OS_File",16,block+44,bank+56,0
h� decompress
r
� blitter
|!ext=163840
�filetype%=&FF9
��
�&ș "OS_File",16,block+44,bank+56,0
�#!pointer=bank+56+length%-163840
�� reverse_blitter
�!pointer=bank+56
�� compress
�filetype%=&128
��
�ș "Wimp_SetMode",mode%
� ș "Wimp_SetPalette",,ablock
�*ș "Wimp_ForceRedraw",-1,0,0,1280,1024
�*pointer 1
Nș "OS_File",10,block+44,filetype%,,bank+56*-(filetype%=&128),bank+56+!ext
�
:
�
��init
�8� bank 164864 , block 1024 , ablock 1024 , menu 1024
� � template 1024 , indir 1024
�*� "load <Compress$Dir>.Header "+�~bank
�Cș "Wimp_Initialise",200,&4B534154,"Compressor" � ,task_handle%
��
�:
p��load_template
z5ș "Wimp_OpenTemplate",,"<Compress$Dir>.Template"
�Aș "Wimp_LoadTemplate",,template,indir,indir+1024,-1,"Info",0
�,ș "Wimp_CreateWindow",,template � info%
��
�:
X��assemble
b� code 1024
l� pass%=0 � 2 � 2
vP%=code
�[Opt pass%
�.screen Equd 0
�.pointer Equd bank+56
�.ext Equd 0
�:
�
.compress
�Ldr R0,screen
�Ldr R1,pointer
�
Mov R2,#0
�
Mov R3,#0
�
Mvn R4,#0
�LdrB R5,[R0,R2]
�.compress_loop
LdrB R6,[R0,R2]

Cmp R5,R6
BNe else
 Cmp R4,#255
*BGe else
4Mov R12,#163840
>Sub R12,R12,#1
HCmp R2,R12
RBEq else
\Add R4,R4,#1
fB endif
p	.else
zStrB R4,[R1,R3]
�Add R3,R3,#1
�StrB R5,[R1,R3]
�Add R3,R3,#1
�
Mov R4,#0
�
.endif
�
Mov R5,R6
�Add R2,R2,#1
�Cmp R2,#163840
�BLt compress_loop
�Str R3,ext
�Mov PC,R14
�:
�.decompress
Ldr R0,screen
Ldr R1,pointer

Mov R2,#0
$
Mov R3,#0
.Ldr R11,ext
8.decompress_loop
BLdrB R12,[R1,R3]
LAdd R3,R3,#1
VLdrB R5,[R1,R3]
`Add R3,R3,#1
jAdd R12,R12,#1
t.plot_loop
~StrB R5,[R0,R2]
�Add R2,R2,#1
�SubS R12,R12,#1
�BNe plot_loop
�Cmp R3,R11
�BNe decompress_loop
�Mov PC,R14
�:
�.blitter
�Ldr R0,screen
�Ldr R1,pointer
�Mov R12,#4096
�.blitter_loop
LdmIa R0!,{R2-R11}

StmIa R1!,{R2-R11}
SubS R12,R12,#1
BNe blitter_loop
(Mov PC,R14
2:
<.reverse_blitter
FLdr R0,pointer
PLdr R1,screen
ZMov R12,#4096
d.reverse_blitter_loop
nLdmIa R0!,{R2-R11}
xStmIa R1!,{R2-R11}
�SubS R12,R12,#1
�BNe reverse_blitter_loop
�Mov PC,R14
�	] : �
��
�:
@��build_menu
J$menu="Compressor"
Tmenu!12=&70207
^menu!16=176
hmenu!20=40
r
menu!24=0
|menu_ptr%=menu+28
�'�menu_item(0,info%,&7000021,"Info")
�&�menu_item(128,-1,&7000021,"Quit")
��
�:
#(/��menu_item(mflags%,submenu%,iflags%,text$)
#2!menu_ptr%=mflags%
#<menu_ptr%!4=submenu%
#Fmenu_ptr%!8=iflags%
#P$(menu_ptr%+12)=text$
#Zmenu_ptr%+=24
#d�
#n:
'��create_icon
'
!block=-1
'$5block!4=0 : block!8=0 : block!12=68 : block!16=68
'.block!20=&1700300A
'8$(block+24)="!Compress"
'B.ș "Wimp_CreateIcon",,block � icon_handle%
'L�
'V:
*���error(error$)
+!block=255
+$(block+4)=error$+�(0)
+�7
+ 0ș "Wimp_ReportError",block,130,"Compressor"
+*�
+4:
.���close_down
.�.ș "Wimp_CloseDown",task_handle%,&4B534154
.��
.�:
�
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 09  |ourglass_On"..<.|
00000050  f2 69 6e 69 74 0d 00 46  12 f2 6c 6f 61 64 5f 74  |.init..F..load_t|
00000060  65 6d 70 6c 61 74 65 0d  00 50 0f f2 62 75 69 6c  |emplate..P..buil|
00000070  64 5f 6d 65 6e 75 0d 00  5a 0d f2 61 73 73 65 6d  |d_menu..Z..assem|
00000080  62 6c 65 0d 00 64 16 c8  99 20 22 48 6f 75 72 67  |ble..d... "Hourg|
00000090  6c 61 73 73 5f 4f 66 66  22 0d 00 6e 10 f2 63 72  |lass_Off"..n..cr|
000000a0  65 61 74 65 5f 69 63 6f  6e 0d 00 78 05 3a 0d 00  |eate_icon..x.:..|
000000b0  82 0b 71 75 69 74 25 3d  a3 0d 00 8c 10 ee 85 f2  |..quit%=........|
000000c0  65 72 72 6f 72 28 f6 24  29 0d 00 96 05 f5 0d 00  |error(.$).......|
000000d0  a0 30 c8 99 20 22 57 69  6d 70 5f 50 6f 6c 6c 22  |.0.. "Wimp_Poll"|
000000e0  2c 25 31 31 30 30 30 30  31 31 30 30 31 31 2c 62  |,%110000110011,b|
000000f0  6c 6f 63 6b 20 b8 20 72  65 61 73 6f 6e 25 0d 00  |lock . reason%..|
00000100  aa 10 c8 8e 20 72 65 61  73 6f 6e 25 20 ca 0d 00  |.... reason% ...|
00000110  b4 25 c9 20 32 20 3a 20  c8 99 20 22 57 69 6d 70  |.%. 2 : .. "Wimp|
00000120  5f 4f 70 65 6e 57 69 6e  64 6f 77 22 2c 2c 62 6c  |_OpenWindow",,bl|
00000130  6f 63 6b 0d 00 be 10 c9  20 36 20 3a 20 f2 63 6c  |ock..... 6 : .cl|
00000140  69 63 6b 0d 00 c8 19 c9  20 39 20 3a 20 f2 6d 65  |ick..... 9 : .me|
00000150  6e 75 5f 73 65 6c 65 63  74 69 6f 6e 0d 00 d2 19  |nu_selection....|
00000160  c9 20 31 37 2c 31 38 2c  31 39 20 3a 20 f2 6d 65  |. 17,18,19 : .me|
00000170  73 73 61 67 65 0d 00 dc  05 cb 0d 00 e6 0a fd 71  |ssage..........q|
00000180  75 69 74 25 0d 00 f0 0f  f2 63 6c 6f 73 65 5f 64  |uit%.....close_d|
00000190  6f 77 6e 0d 00 fa 05 e0  0d 01 04 05 3a 0d 03 e8  |own.........:...|
000001a0  0b dd f2 63 6c 69 63 6b  0d 03 f2 52 e7 20 62 6c  |...click...R. bl|
000001b0  6f 63 6b 21 31 36 3d 69  63 6f 6e 5f 68 61 6e 64  |ock!16=icon_hand|
000001c0  6c 65 25 20 80 20 62 6c  6f 63 6b 21 38 3d 32 20  |le% . block!8=2 |
000001d0  8c 20 c8 99 20 22 57 69  6d 70 5f 43 72 65 61 74  |. .. "Wimp_Creat|
000001e0  65 4d 65 6e 75 22 2c 2c  6d 65 6e 75 2c 21 62 6c  |eMenu",,menu,!bl|
000001f0  6f 63 6b 2d 36 34 2c 31  37 36 0d 03 fc 05 e1 0d  |ock-64,176......|
00000200  04 06 05 3a 0d 07 d0 14  dd f2 6d 65 6e 75 5f 73  |...:......menu_s|
00000210  65 6c 65 63 74 69 6f 6e  0d 07 da 24 c8 99 20 22  |election...$.. "|
00000220  57 69 6d 70 5f 47 65 74  50 6f 69 6e 74 65 72 49  |Wimp_GetPointerI|
00000230  6e 66 6f 22 2c 2c 61 62  6c 6f 63 6b 0d 07 e4 39  |nfo",,ablock...9|
00000240  c8 99 20 22 57 69 6d 70  5f 44 65 63 6f 64 65 4d  |.. "Wimp_DecodeM|
00000250  65 6e 75 22 2c 2c 6d 65  6e 75 2c 62 6c 6f 63 6b  |enu",,menu,block|
00000260  2c c4 31 39 32 2c 22 20  22 29 20 b8 20 2c 2c 2c  |,.192," ") . ,,,|
00000270  69 74 65 6d 24 0d 07 ee  1c e7 20 69 74 65 6d 24  |item$..... item$|
00000280  3d 22 51 75 69 74 22 20  8c 20 71 75 69 74 25 3d  |="Quit" . quit%=|
00000290  b9 0d 07 f8 3b e7 20 61  62 6c 6f 63 6b 21 38 3d  |....;. ablock!8=|
000002a0  31 20 8c 20 c8 99 20 22  57 69 6d 70 5f 43 72 65  |1 . .. "Wimp_Cre|
000002b0  61 74 65 4d 65 6e 75 22  2c 2c 6d 65 6e 75 2c 21  |ateMenu",,menu,!|
000002c0  62 6c 6f 63 6b 2d 36 34  2c 31 37 36 0d 08 02 05  |block-64,176....|
000002d0  e1 0d 08 0c 05 3a 0d 0b  b8 0d dd f2 6d 65 73 73  |.....:......mess|
000002e0  61 67 65 0d 0b c2 11 c8  8e 20 62 6c 6f 63 6b 21  |age...... block!|
000002f0  31 36 20 ca 0d 0b cc 11  c9 20 30 20 3a 20 71 75  |16 ...... 0 : qu|
00000300  69 74 25 3d b9 0d 0b d6  0f c9 20 33 20 3a 20 f2  |it%=...... 3 : .|
00000310  6c 6f 61 64 0d 0b e0 05  cb 0d 0b ea 05 e1 0d 0b  |load............|
00000320  f4 05 3a 0d 0f a0 0a dd  f2 6c 6f 61 64 0d 0f aa  |..:......load...|
00000330  3b c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 31 37  |;.. "OS_File",17|
00000340  2c 62 6c 6f 63 6b 2b 34  34 20 b8 20 74 79 70 65  |,block+44 . type|
00000350  25 2c 2c 2c 2c 6c 65 6e  67 74 68 25 2c 61 74 74  |%,,,,length%,att|
00000360  72 69 62 75 74 65 73 25  0d 0f b4 16 66 69 6c 65  |ributes%....file|
00000370  74 79 70 65 25 3d 62 6c  6f 63 6b 21 34 30 0d 0f  |type%=block!40..|
00000380  be 33 e7 20 74 79 70 65  25 3d 32 20 8c 20 f2 65  |.3. type%=2 . .e|
00000390  72 72 6f 72 28 22 4f 62  6a 65 63 74 20 69 73 20  |rror("Object is |
000003a0  61 20 64 69 72 65 63 74  6f 72 79 22 29 20 3a 20  |a directory") : |
000003b0  e1 0d 0f c8 48 e7 20 66  69 6c 65 74 79 70 65 25  |....H. filetype%|
000003c0  3c 3e 26 46 46 39 20 80  20 66 69 6c 65 74 79 70  |<>&FF9 . filetyp|
000003d0  65 25 3c 3e 26 31 32 38  20 8c 20 f2 65 72 72 6f  |e%<>&128 . .erro|
000003e0  72 28 22 49 6e 76 61 6c  69 64 20 66 69 6c 65 74  |r("Invalid filet|
000003f0  79 70 65 22 29 20 3a 20  e1 0d 0f d2 3b e7 20 28  |ype") : ....;. (|
00000400  61 74 74 72 69 62 75 74  65 73 25 20 80 20 25 31  |attributes% . %1|
00000410  31 29 3c 3e 25 31 31 20  8c 20 f2 65 72 72 6f 72  |1)<>%11 . .error|
00000420  28 22 41 63 63 65 73 73  20 65 72 72 6f 72 22 29  |("Access error")|
00000430  20 3a 20 e1 0d 0f dc 30  e7 20 61 74 74 72 69 62  | : ....0. attrib|
00000440  75 74 65 73 25 20 80 20  25 31 30 30 30 20 8c 20  |utes% . %1000 . |
00000450  f2 65 72 72 6f 72 28 22  4c 6f 63 6b 65 64 22 29  |.error("Locked")|
00000460  20 3a 20 e1 0d 0f e6 73  e7 20 66 69 6c 65 74 79  | : ....s. filety|
00000470  70 65 25 3d 26 46 46 39  20 80 20 6c 65 6e 67 74  |pe%=&FF9 . lengt|
00000480  68 25 3c 31 36 33 38 34  30 20 80 20 6c 65 6e 67  |h%<163840 . leng|
00000490  74 68 25 3e 31 36 34 38  36 34 20 8c 20 f2 65 72  |th%>164864 . .er|
000004a0  72 6f 72 28 22 49 6e 76  61 6c 69 64 20 73 70 72  |ror("Invalid spr|
000004b0  69 74 65 20 6c 65 6e 67  74 68 20 28 64 6f 65 73  |ite length (does|
000004c0  20 69 74 20 68 61 76 65  20 61 20 6d 61 73 6b 3f  | it have a mask?|
000004d0  29 22 29 20 3a 20 e1 0d  0f f0 3e e7 20 66 69 6c  |)") : ....>. fil|
000004e0  65 74 79 70 65 25 3d 26  31 32 38 20 80 20 6c 65  |etype%=&128 . le|
000004f0  6e 67 74 68 25 3c 31 32  38 30 20 8c 20 f2 65 72  |ngth%<1280 . .er|
00000500  72 6f 72 28 22 53 68 6f  72 74 20 66 69 6c 65 22  |ror("Short file"|
00000510  29 20 3a 20 e1 0d 0f fa  0b 6d 6f 64 65 25 3d eb  |) : .....mode%=.|
00000520  0d 10 04 14 2a 73 63 72  65 65 6e 73 69 7a 65 20  |....*screensize |
00000530  31 36 30 6b 0d 10 0e 21  c8 99 20 22 57 69 6d 70  |160k...!.. "Wimp|
00000540  5f 52 65 61 64 50 61 6c  65 74 74 65 22 2c 2c 61  |_ReadPalette",,a|
00000550  62 6c 6f 63 6b 0d 10 18  1c c8 99 20 22 57 69 6d  |block...... "Wim|
00000560  70 5f 53 65 74 4d 6f 64  65 22 2c 31 35 20 3a 20  |p_SetMode",15 : |
00000570  87 0d 10 22 4e e7 20 eb  3c 3e 31 35 20 8c 20 f2  |..."N. .<>15 . .|
00000580  65 72 72 6f 72 28 22 4e  6f 74 20 65 6e 6f 75 67  |error("Not enoug|
00000590  68 20 6d 65 6d 6f 72 79  20 28 31 36 30 6b 20 6f  |h memory (160k o|
000005a0  66 20 73 63 72 65 65 6e  20 6d 65 6d 6f 72 79 20  |f screen memory |
000005b0  72 65 71 75 69 72 65 64  29 22 29 20 3a 20 e1 0d  |required)") : ..|
000005c0  10 2c 10 21 65 78 74 3d  6c 65 6e 67 74 68 25 0d  |.,.!ext=length%.|
000005d0  10 36 0f 62 6c 6f 63 6b  21 30 3d 31 34 38 0d 10  |.6.block!0=148..|
000005e0  40 0e 62 6c 6f 63 6b 21  34 3d 2d 31 0d 10 4a 29  |@.block!4=-1..J)|
000005f0  c8 99 20 22 4f 53 5f 52  65 61 64 56 64 75 56 61  |.. "OS_ReadVduVa|
00000600  72 69 61 62 6c 65 73 22  2c 62 6c 6f 63 6b 2c 73  |riables",block,s|
00000610  63 72 65 65 6e 0d 10 54  16 e7 20 66 69 6c 65 74  |creen..T.. filet|
00000620  79 70 65 25 3d 26 31 32  38 20 8c 0d 10 5e 26 c8  |ype%=&128 ...^&.|
00000630  99 20 22 4f 53 5f 46 69  6c 65 22 2c 31 36 2c 62  |. "OS_File",16,b|
00000640  6c 6f 63 6b 2b 34 34 2c  62 61 6e 6b 2b 35 36 2c  |lock+44,bank+56,|
00000650  30 0d 10 68 10 d6 20 64  65 63 6f 6d 70 72 65 73  |0..h.. decompres|
00000660  73 0d 10 72 0d d6 20 62  6c 69 74 74 65 72 0d 10  |s..r.. blitter..|
00000670  7c 0f 21 65 78 74 3d 31  36 33 38 34 30 0d 10 86  ||.!ext=163840...|
00000680  12 66 69 6c 65 74 79 70  65 25 3d 26 46 46 39 0d  |.filetype%=&FF9.|
00000690  10 90 05 cc 0d 10 9a 26  c8 99 20 22 4f 53 5f 46  |.......&.. "OS_F|
000006a0  69 6c 65 22 2c 31 36 2c  62 6c 6f 63 6b 2b 34 34  |ile",16,block+44|
000006b0  2c 62 61 6e 6b 2b 35 36  2c 30 0d 10 a4 23 21 70  |,bank+56,0...#!p|
000006c0  6f 69 6e 74 65 72 3d 62  61 6e 6b 2b 35 36 2b 6c  |ointer=bank+56+l|
000006d0  65 6e 67 74 68 25 2d 31  36 33 38 34 30 0d 10 ae  |ength%-163840...|
000006e0  15 d6 20 72 65 76 65 72  73 65 5f 62 6c 69 74 74  |.. reverse_blitt|
000006f0  65 72 0d 10 b8 14 21 70  6f 69 6e 74 65 72 3d 62  |er....!pointer=b|
00000700  61 6e 6b 2b 35 36 0d 10  c2 0e d6 20 63 6f 6d 70  |ank+56..... comp|
00000710  72 65 73 73 0d 10 cc 12  66 69 6c 65 74 79 70 65  |ress....filetype|
00000720  25 3d 26 31 32 38 0d 10  d6 05 cd 0d 10 e0 1b c8  |%=&128..........|
00000730  99 20 22 57 69 6d 70 5f  53 65 74 4d 6f 64 65 22  |. "Wimp_SetMode"|
00000740  2c 6d 6f 64 65 25 0d 10  ea 20 c8 99 20 22 57 69  |,mode%... .. "Wi|
00000750  6d 70 5f 53 65 74 50 61  6c 65 74 74 65 22 2c 2c  |mp_SetPalette",,|
00000760  61 62 6c 6f 63 6b 0d 10  f4 2a c8 99 20 22 57 69  |ablock...*.. "Wi|
00000770  6d 70 5f 46 6f 72 63 65  52 65 64 72 61 77 22 2c  |mp_ForceRedraw",|
00000780  2d 31 2c 30 2c 30 2c 31  32 38 30 2c 31 30 32 34  |-1,0,0,1280,1024|
00000790  0d 10 fe 0e 2a 70 6f 69  6e 74 65 72 20 31 0d 11  |....*pointer 1..|
000007a0  08 4e c8 99 20 22 4f 53  5f 46 69 6c 65 22 2c 31  |.N.. "OS_File",1|
000007b0  30 2c 62 6c 6f 63 6b 2b  34 34 2c 66 69 6c 65 74  |0,block+44,filet|
000007c0  79 70 65 25 2c 2c 62 61  6e 6b 2b 35 36 2a 2d 28  |ype%,,bank+56*-(|
000007d0  66 69 6c 65 74 79 70 65  25 3d 26 31 32 38 29 2c  |filetype%=&128),|
000007e0  62 61 6e 6b 2b 35 36 2b  21 65 78 74 0d 11 12 05  |bank+56+!ext....|
000007f0  e1 0d 11 1c 05 3a 0d 13  88 0a dd f2 69 6e 69 74  |.....:......init|
00000800  0d 13 92 38 de 20 62 61  6e 6b 20 31 36 34 38 36  |...8. bank 16486|
00000810  34 20 2c 20 62 6c 6f 63  6b 20 31 30 32 34 20 2c  |4 , block 1024 ,|
00000820  20 61 62 6c 6f 63 6b 20  31 30 32 34 20 2c 20 6d  | ablock 1024 , m|
00000830  65 6e 75 20 31 30 32 34  0d 13 9c 20 de 20 74 65  |enu 1024... . te|
00000840  6d 70 6c 61 74 65 20 31  30 32 34 20 2c 20 69 6e  |mplate 1024 , in|
00000850  64 69 72 20 31 30 32 34  0d 13 a6 2a ff 20 22 6c  |dir 1024...*. "l|
00000860  6f 61 64 20 3c 43 6f 6d  70 72 65 73 73 24 44 69  |oad <Compress$Di|
00000870  72 3e 2e 48 65 61 64 65  72 20 22 2b c3 7e 62 61  |r>.Header "+.~ba|
00000880  6e 6b 0d 13 b0 43 c8 99  20 22 57 69 6d 70 5f 49  |nk...C.. "Wimp_I|
00000890  6e 69 74 69 61 6c 69 73  65 22 2c 32 30 30 2c 26  |nitialise",200,&|
000008a0  34 42 35 33 34 31 35 34  2c 22 43 6f 6d 70 72 65  |4B534154,"Compre|
000008b0  73 73 6f 72 22 20 b8 20  2c 74 61 73 6b 5f 68 61  |ssor" . ,task_ha|
000008c0  6e 64 6c 65 25 0d 13 ba  05 e1 0d 13 c4 05 3a 0d  |ndle%.........:.|
000008d0  17 70 13 dd f2 6c 6f 61  64 5f 74 65 6d 70 6c 61  |.p...load_templa|
000008e0  74 65 0d 17 7a 35 c8 99  20 22 57 69 6d 70 5f 4f  |te..z5.. "Wimp_O|
000008f0  70 65 6e 54 65 6d 70 6c  61 74 65 22 2c 2c 22 3c  |penTemplate",,"<|
00000900  43 6f 6d 70 72 65 73 73  24 44 69 72 3e 2e 54 65  |Compress$Dir>.Te|
00000910  6d 70 6c 61 74 65 22 0d  17 84 41 c8 99 20 22 57  |mplate"...A.. "W|
00000920  69 6d 70 5f 4c 6f 61 64  54 65 6d 70 6c 61 74 65  |imp_LoadTemplate|
00000930  22 2c 2c 74 65 6d 70 6c  61 74 65 2c 69 6e 64 69  |",,template,indi|
00000940  72 2c 69 6e 64 69 72 2b  31 30 32 34 2c 2d 31 2c  |r,indir+1024,-1,|
00000950  22 49 6e 66 6f 22 2c 30  0d 17 8e 2c c8 99 20 22  |"Info",0...,.. "|
00000960  57 69 6d 70 5f 43 72 65  61 74 65 57 69 6e 64 6f  |Wimp_CreateWindo|
00000970  77 22 2c 2c 74 65 6d 70  6c 61 74 65 20 b8 20 69  |w",,template . i|
00000980  6e 66 6f 25 0d 17 98 05  e1 0d 17 a2 05 3a 0d 1b  |nfo%.........:..|
00000990  58 0e dd f2 61 73 73 65  6d 62 6c 65 0d 1b 62 0f  |X...assemble..b.|
000009a0  de 20 63 6f 64 65 20 31  30 32 34 0d 1b 6c 15 e3  |. code 1024..l..|
000009b0  20 70 61 73 73 25 3d 30  20 b8 20 32 20 88 20 32  | pass%=0 . 2 . 2|
000009c0  0d 1b 76 0b 50 25 3d 63  6f 64 65 0d 1b 80 0e 5b  |..v.P%=code....[|
000009d0  4f 70 74 20 70 61 73 73  25 0d 1b 8a 12 2e 73 63  |Opt pass%.....sc|
000009e0  72 65 65 6e 20 45 71 75  64 20 30 0d 1b 94 19 2e  |reen Equd 0.....|
000009f0  70 6f 69 6e 74 65 72 20  45 71 75 64 20 62 61 6e  |pointer Equd ban|
00000a00  6b 2b 35 36 0d 1b 9e 0f  2e 65 78 74 20 45 71 75  |k+56.....ext Equ|
00000a10  64 20 30 0d 1b a8 05 3a  0d 1b b2 0d 2e 63 6f 6d  |d 0....:.....com|
00000a20  70 72 65 73 73 0d 1b bc  11 4c 64 72 20 52 30 2c  |press....Ldr R0,|
00000a30  73 63 72 65 65 6e 0d 1b  c6 12 4c 64 72 20 52 31  |screen....Ldr R1|
00000a40  2c 70 6f 69 6e 74 65 72  0d 1b d0 0d 4d 6f 76 20  |,pointer....Mov |
00000a50  52 32 2c 23 30 0d 1b da  0d 4d 6f 76 20 52 33 2c  |R2,#0....Mov R3,|
00000a60  23 30 0d 1b e4 0d 4d 76  6e 20 52 34 2c 23 30 0d  |#0....Mvn R4,#0.|
00000a70  1b ee 13 4c 64 72 42 20  52 35 2c 5b 52 30 2c 52  |...LdrB R5,[R0,R|
00000a80  32 5d 0d 1b f8 12 2e 63  6f 6d 70 72 65 73 73 5f  |2].....compress_|
00000a90  6c 6f 6f 70 0d 1c 02 13  4c 64 72 42 20 52 36 2c  |loop....LdrB R6,|
00000aa0  5b 52 30 2c 52 32 5d 0d  1c 0c 0d 43 6d 70 20 52  |[R0,R2]....Cmp R|
00000ab0  35 2c 52 36 0d 1c 16 0c  42 4e 65 20 65 6c 73 65  |5,R6....BNe else|
00000ac0  0d 1c 20 0f 43 6d 70 20  52 34 2c 23 32 35 35 0d  |.. .Cmp R4,#255.|
00000ad0  1c 2a 0c 42 47 65 20 65  6c 73 65 0d 1c 34 13 4d  |.*.BGe else..4.M|
00000ae0  6f 76 20 52 31 32 2c 23  31 36 33 38 34 30 0d 1c  |ov R12,#163840..|
00000af0  3e 12 53 75 62 20 52 31  32 2c 52 31 32 2c 23 31  |>.Sub R12,R12,#1|
00000b00  0d 1c 48 0e 43 6d 70 20  52 32 2c 52 31 32 0d 1c  |..H.Cmp R2,R12..|
00000b10  52 0c 42 45 71 20 65 6c  73 65 0d 1c 5c 10 41 64  |R.BEq else..\.Ad|
00000b20  64 20 52 34 2c 52 34 2c  23 31 0d 1c 66 0b 42 20  |d R4,R4,#1..f.B |
00000b30  65 6e 64 69 66 0d 1c 70  09 2e 65 6c 73 65 0d 1c  |endif..p..else..|
00000b40  7a 13 53 74 72 42 20 52  34 2c 5b 52 31 2c 52 33  |z.StrB R4,[R1,R3|
00000b50  5d 0d 1c 84 10 41 64 64  20 52 33 2c 52 33 2c 23  |]....Add R3,R3,#|
00000b60  31 0d 1c 8e 13 53 74 72  42 20 52 35 2c 5b 52 31  |1....StrB R5,[R1|
00000b70  2c 52 33 5d 0d 1c 98 10  41 64 64 20 52 33 2c 52  |,R3]....Add R3,R|
00000b80  33 2c 23 31 0d 1c a2 0d  4d 6f 76 20 52 34 2c 23  |3,#1....Mov R4,#|
00000b90  30 0d 1c ac 0a 2e 65 6e  64 69 66 0d 1c b6 0d 4d  |0.....endif....M|
00000ba0  6f 76 20 52 35 2c 52 36  0d 1c c0 10 41 64 64 20  |ov R5,R6....Add |
00000bb0  52 32 2c 52 32 2c 23 31  0d 1c ca 12 43 6d 70 20  |R2,R2,#1....Cmp |
00000bc0  52 32 2c 23 31 36 33 38  34 30 0d 1c d4 15 42 4c  |R2,#163840....BL|
00000bd0  74 20 63 6f 6d 70 72 65  73 73 5f 6c 6f 6f 70 0d  |t compress_loop.|
00000be0  1c de 0e 53 74 72 20 52  33 2c 65 78 74 0d 1c e8  |...Str R3,ext...|
00000bf0  0e 4d 6f 76 20 50 43 2c  52 31 34 0d 1c f2 05 3a  |.Mov PC,R14....:|
00000c00  0d 1c fc 0f 2e 64 65 63  6f 6d 70 72 65 73 73 0d  |.....decompress.|
00000c10  1d 06 11 4c 64 72 20 52  30 2c 73 63 72 65 65 6e  |...Ldr R0,screen|
00000c20  0d 1d 10 12 4c 64 72 20  52 31 2c 70 6f 69 6e 74  |....Ldr R1,point|
00000c30  65 72 0d 1d 1a 0d 4d 6f  76 20 52 32 2c 23 30 0d  |er....Mov R2,#0.|
00000c40  1d 24 0d 4d 6f 76 20 52  33 2c 23 30 0d 1d 2e 0f  |.$.Mov R3,#0....|
00000c50  4c 64 72 20 52 31 31 2c  65 78 74 0d 1d 38 14 2e  |Ldr R11,ext..8..|
00000c60  64 65 63 6f 6d 70 72 65  73 73 5f 6c 6f 6f 70 0d  |decompress_loop.|
00000c70  1d 42 14 4c 64 72 42 20  52 31 32 2c 5b 52 31 2c  |.B.LdrB R12,[R1,|
00000c80  52 33 5d 0d 1d 4c 10 41  64 64 20 52 33 2c 52 33  |R3]..L.Add R3,R3|
00000c90  2c 23 31 0d 1d 56 13 4c  64 72 42 20 52 35 2c 5b  |,#1..V.LdrB R5,[|
00000ca0  52 31 2c 52 33 5d 0d 1d  60 10 41 64 64 20 52 33  |R1,R3]..`.Add R3|
00000cb0  2c 52 33 2c 23 31 0d 1d  6a 12 41 64 64 20 52 31  |,R3,#1..j.Add R1|
00000cc0  32 2c 52 31 32 2c 23 31  0d 1d 74 0e 2e 70 6c 6f  |2,R12,#1..t..plo|
00000cd0  74 5f 6c 6f 6f 70 0d 1d  7e 13 53 74 72 42 20 52  |t_loop..~.StrB R|
00000ce0  35 2c 5b 52 30 2c 52 32  5d 0d 1d 88 10 41 64 64  |5,[R0,R2]....Add|
00000cf0  20 52 32 2c 52 32 2c 23  31 0d 1d 92 13 53 75 62  | R2,R2,#1....Sub|
00000d00  53 20 52 31 32 2c 52 31  32 2c 23 31 0d 1d 9c 11  |S R12,R12,#1....|
00000d10  42 4e 65 20 70 6c 6f 74  5f 6c 6f 6f 70 0d 1d a6  |BNe plot_loop...|
00000d20  0e 43 6d 70 20 52 33 2c  52 31 31 0d 1d b0 17 42  |.Cmp R3,R11....B|
00000d30  4e 65 20 64 65 63 6f 6d  70 72 65 73 73 5f 6c 6f  |Ne decompress_lo|
00000d40  6f 70 0d 1d ba 0e 4d 6f  76 20 50 43 2c 52 31 34  |op....Mov PC,R14|
00000d50  0d 1d c4 05 3a 0d 1d ce  0c 2e 62 6c 69 74 74 65  |....:.....blitte|
00000d60  72 0d 1d d8 11 4c 64 72  20 52 30 2c 73 63 72 65  |r....Ldr R0,scre|
00000d70  65 6e 0d 1d e2 12 4c 64  72 20 52 31 2c 70 6f 69  |en....Ldr R1,poi|
00000d80  6e 74 65 72 0d 1d ec 11  4d 6f 76 20 52 31 32 2c  |nter....Mov R12,|
00000d90  23 34 30 39 36 0d 1d f6  11 2e 62 6c 69 74 74 65  |#4096.....blitte|
00000da0  72 5f 6c 6f 6f 70 0d 1e  00 16 4c 64 6d 49 61 20  |r_loop....LdmIa |
00000db0  52 30 21 2c 7b 52 32 2d  52 31 31 7d 0d 1e 0a 16  |R0!,{R2-R11}....|
00000dc0  53 74 6d 49 61 20 52 31  21 2c 7b 52 32 2d 52 31  |StmIa R1!,{R2-R1|
00000dd0  31 7d 0d 1e 14 13 53 75  62 53 20 52 31 32 2c 52  |1}....SubS R12,R|
00000de0  31 32 2c 23 31 0d 1e 1e  14 42 4e 65 20 62 6c 69  |12,#1....BNe bli|
00000df0  74 74 65 72 5f 6c 6f 6f  70 0d 1e 28 0e 4d 6f 76  |tter_loop..(.Mov|
00000e00  20 50 43 2c 52 31 34 0d  1e 32 05 3a 0d 1e 3c 14  | PC,R14..2.:..<.|
00000e10  2e 72 65 76 65 72 73 65  5f 62 6c 69 74 74 65 72  |.reverse_blitter|
00000e20  0d 1e 46 12 4c 64 72 20  52 30 2c 70 6f 69 6e 74  |..F.Ldr R0,point|
00000e30  65 72 0d 1e 50 11 4c 64  72 20 52 31 2c 73 63 72  |er..P.Ldr R1,scr|
00000e40  65 65 6e 0d 1e 5a 11 4d  6f 76 20 52 31 32 2c 23  |een..Z.Mov R12,#|
00000e50  34 30 39 36 0d 1e 64 19  2e 72 65 76 65 72 73 65  |4096..d..reverse|
00000e60  5f 62 6c 69 74 74 65 72  5f 6c 6f 6f 70 0d 1e 6e  |_blitter_loop..n|
00000e70  16 4c 64 6d 49 61 20 52  30 21 2c 7b 52 32 2d 52  |.LdmIa R0!,{R2-R|
00000e80  31 31 7d 0d 1e 78 16 53  74 6d 49 61 20 52 31 21  |11}..x.StmIa R1!|
00000e90  2c 7b 52 32 2d 52 31 31  7d 0d 1e 82 13 53 75 62  |,{R2-R11}....Sub|
00000ea0  53 20 52 31 32 2c 52 31  32 2c 23 31 0d 1e 8c 1c  |S R12,R12,#1....|
00000eb0  42 4e 65 20 72 65 76 65  72 73 65 5f 62 6c 69 74  |BNe reverse_blit|
00000ec0  74 65 72 5f 6c 6f 6f 70  0d 1e 96 0e 4d 6f 76 20  |ter_loop....Mov |
00000ed0  50 43 2c 52 31 34 0d 1e  a0 09 5d 20 3a 20 ed 0d  |PC,R14....] : ..|
00000ee0  1e aa 05 e1 0d 1e b4 05  3a 0d 1f 40 10 dd f2 62  |........:..@...b|
00000ef0  75 69 6c 64 5f 6d 65 6e  75 0d 1f 4a 16 24 6d 65  |uild_menu..J.$me|
00000f00  6e 75 3d 22 43 6f 6d 70  72 65 73 73 6f 72 22 0d  |nu="Compressor".|
00000f10  1f 54 12 6d 65 6e 75 21  31 32 3d 26 37 30 32 30  |.T.menu!12=&7020|
00000f20  37 0d 1f 5e 0f 6d 65 6e  75 21 31 36 3d 31 37 36  |7..^.menu!16=176|
00000f30  0d 1f 68 0e 6d 65 6e 75  21 32 30 3d 34 30 0d 1f  |..h.menu!20=40..|
00000f40  72 0d 6d 65 6e 75 21 32  34 3d 30 0d 1f 7c 15 6d  |r.menu!24=0..|.m|
00000f50  65 6e 75 5f 70 74 72 25  3d 6d 65 6e 75 2b 32 38  |enu_ptr%=menu+28|
00000f60  0d 1f 86 27 f2 6d 65 6e  75 5f 69 74 65 6d 28 30  |...'.menu_item(0|
00000f70  2c 69 6e 66 6f 25 2c 26  37 30 30 30 30 32 31 2c  |,info%,&7000021,|
00000f80  22 49 6e 66 6f 22 29 0d  1f 90 26 f2 6d 65 6e 75  |"Info")...&.menu|
00000f90  5f 69 74 65 6d 28 31 32  38 2c 2d 31 2c 26 37 30  |_item(128,-1,&70|
00000fa0  30 30 30 32 31 2c 22 51  75 69 74 22 29 0d 1f 9a  |00021,"Quit")...|
00000fb0  05 e1 0d 1f a4 05 3a 0d  23 28 2f dd f2 6d 65 6e  |......:.#(/..men|
00000fc0  75 5f 69 74 65 6d 28 6d  66 6c 61 67 73 25 2c 73  |u_item(mflags%,s|
00000fd0  75 62 6d 65 6e 75 25 2c  69 66 6c 61 67 73 25 2c  |ubmenu%,iflags%,|
00000fe0  74 65 78 74 24 29 0d 23  32 16 21 6d 65 6e 75 5f  |text$).#2.!menu_|
00000ff0  70 74 72 25 3d 6d 66 6c  61 67 73 25 0d 23 3c 18  |ptr%=mflags%.#<.|
00001000  6d 65 6e 75 5f 70 74 72  25 21 34 3d 73 75 62 6d  |menu_ptr%!4=subm|
00001010  65 6e 75 25 0d 23 46 17  6d 65 6e 75 5f 70 74 72  |enu%.#F.menu_ptr|
00001020  25 21 38 3d 69 66 6c 61  67 73 25 0d 23 50 19 24  |%!8=iflags%.#P.$|
00001030  28 6d 65 6e 75 5f 70 74  72 25 2b 31 32 29 3d 74  |(menu_ptr%+12)=t|
00001040  65 78 74 24 0d 23 5a 11  6d 65 6e 75 5f 70 74 72  |ext$.#Z.menu_ptr|
00001050  25 2b 3d 32 34 0d 23 64  05 e1 0d 23 6e 05 3a 0d  |%+=24.#d...#n.:.|
00001060  27 10 11 dd f2 63 72 65  61 74 65 5f 69 63 6f 6e  |'....create_icon|
00001070  0d 27 1a 0d 21 62 6c 6f  63 6b 3d 2d 31 0d 27 24  |.'..!block=-1.'$|
00001080  35 62 6c 6f 63 6b 21 34  3d 30 20 3a 20 62 6c 6f  |5block!4=0 : blo|
00001090  63 6b 21 38 3d 30 20 3a  20 62 6c 6f 63 6b 21 31  |ck!8=0 : block!1|
000010a0  32 3d 36 38 20 3a 20 62  6c 6f 63 6b 21 31 36 3d  |2=68 : block!16=|
000010b0  36 38 0d 27 2e 16 62 6c  6f 63 6b 21 32 30 3d 26  |68.'..block!20=&|
000010c0  31 37 30 30 33 30 30 41  0d 27 38 1b 24 28 62 6c  |1700300A.'8.$(bl|
000010d0  6f 63 6b 2b 32 34 29 3d  22 21 43 6f 6d 70 72 65  |ock+24)="!Compre|
000010e0  73 73 22 0d 27 42 2e c8  99 20 22 57 69 6d 70 5f  |ss".'B... "Wimp_|
000010f0  43 72 65 61 74 65 49 63  6f 6e 22 2c 2c 62 6c 6f  |CreateIcon",,blo|
00001100  63 6b 20 b8 20 69 63 6f  6e 5f 68 61 6e 64 6c 65  |ck . icon_handle|
00001110  25 0d 27 4c 05 e1 0d 27  56 05 3a 0d 2a f8 13 dd  |%.'L...'V.:.*...|
00001120  f2 65 72 72 6f 72 28 65  72 72 6f 72 24 29 0d 2b  |.error(error$).+|
00001130  02 0e 21 62 6c 6f 63 6b  3d 32 35 35 0d 2b 0c 1a  |..!block=255.+..|
00001140  24 28 62 6c 6f 63 6b 2b  34 29 3d 65 72 72 6f 72  |$(block+4)=error|
00001150  24 2b bd 28 30 29 0d 2b  16 06 ef 37 0d 2b 20 30  |$+.(0).+...7.+ 0|
00001160  c8 99 20 22 57 69 6d 70  5f 52 65 70 6f 72 74 45  |.. "Wimp_ReportE|
00001170  72 72 6f 72 22 2c 62 6c  6f 63 6b 2c 31 33 30 2c  |rror",block,130,|
00001180  22 43 6f 6d 70 72 65 73  73 6f 72 22 0d 2b 2a 05  |"Compressor".+*.|
00001190  e1 0d 2b 34 05 3a 0d 2e  e0 10 dd f2 63 6c 6f 73  |..+4.:......clos|
000011a0  65 5f 64 6f 77 6e 0d 2e  ea 2e c8 99 20 22 57 69  |e_down...... "Wi|
000011b0  6d 70 5f 43 6c 6f 73 65  44 6f 77 6e 22 2c 74 61  |mp_CloseDown",ta|
000011c0  73 6b 5f 68 61 6e 64 6c  65 25 2c 26 34 42 35 33  |sk_handle%,&4B53|
000011d0  34 31 35 34 0d 2e f4 05  e1 0d 2e fe 05 3a 0d ff  |4154.........:..|
000011e0