Home » Archimedes archive » Acorn Computing » 1994 03 subscription disc.adf » 9403s » FreeSoft/Samples/!Compress/!RunImage

FreeSoft/Samples/!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 Computing » 1994 03 subscription disc.adf » 9403s
Filename: FreeSoft/Samples/!Compress/!RunImage
Read OK:
File size: 5934 bytes
Load address: 0000
Exec address: 0000
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
   10REM > :4.$.MyPD.!Compress.!RunImage
   20
   30filetype%=&350
   40ft$=STR$~filetype%
   50PROCinit
   60$block%="TASK"
   70SYS "Wimp_Initialise",200,!block%,"Compressor" TO ,task%
   80PROCtemplates
   90PROCicon
  100PROCkillstatus
  110quit%=FALSE
  120
  130control%=0
  140ON ERROR PROCerror
  150REPEAT
  160SYS "Wimp_Poll",mask%,poll% TO r%
  170CASE r% OF
  180WHEN 0
  190   oldcontrol%=control%
  200   IF control%=1 THEN PROCdocompress
  210   IF control%=2 THEN PROCdoexpand
  220   IF control%=0 THEN mask%=mask% OR 1
  230   IF oldcontrol%>0 AND control%=0 THEN SYS "Wimp_SlotSize",slotsize%,-1:$icontext%="!compress":PROCstate(-1,taskicon%,0,0):PROCkillstatus
  240WHEN 2
  250   SYS "Wimp_OpenWindow",,poll%
  260WHEN 3
  270   IF !poll%=savewin% AND control%=0 THEN SYS"Wimp_SlotSize",slotsize%,-1
  280   SYS "Wimp_CloseWindow",,poll%
  290WHEN 6:PROCclick(poll%)
  300WHEN 7:PROCdragdone
  310WHEN 9:PROCmenuselect(poll%)
  320WHEN 17,18:PROCmessage(poll%)
  330ENDCASE
  340UNTIL quit%
  350SYS "Wimp_SlotSize",slotsize%,-1:REM \\\\
  360SYS "Wimp_CloseDown"
  370END
  380
  390DEF PROCinit
  400DIM block% &4000,menu% 1024,poll% 256
  410DIM buffer% 20*1024,table3% 256,idir% 1024
  420DIM table4% 256
  430quit%=FALSE:iptr%=idir%
  440mask%=&1831
  450control%=0:REM 0 - do nothing, 1 - compress, 2 - decompress
  460res%=8:enhance%=0
  470prevopen%=0
  480SYS "Wimp_SlotSize",-1,-1 TO slotsize%
  490SYS "Sound_Configure" TO ,,,a%:a%=a%!8
  500N%=-1
  510FOR A%=0 TO 127
  520I%=(a%?(A%<<5)) /2
  530WHILE I%>N%
  540N%+=1
  550table4%?(N%*2)=A%
  560table4%?((N%*2)+1)=256-A%
  570ENDWHILE
  580NEXT
  590
  600PROCassem
  610firstwrite%=0
  620ENDPROC
  630
  640DEF PROCerror
  650SYS "XWimp_DragBox",,-1
  660SYS "XWimp_CreateMenu",,-1
  670SYS "XHourglass_Smash"
  680!block%=ERR:$(block%+4)=REPORT$+CHR$0
  690SYS "Wimp_ReportError",block%,1,"Compressor"
  700IF control%>0 THEN PROCabort
  710ENDPROC
  720
  730DEF PROCmessage(p%)
  740CASE p%!16 OF
  750WHEN 0:quit%=TRUE
  760WHEN 1:PROCdatasave(p%)
  770WHEN 2:PROCsaveack(p%)
  780WHEN 3:PROCdataload(p%)
  790WHEN 8:IF control%>0 THEN PROCtestquit
  800ENDCASE
  810ENDPROC
  820
  830DEF PROCdatasave(p%)
  840REM called when an application saves to us
  850IF p%!4=task% THEN ENDPROC
  860p%!36=-1
  870$(p%+44)="<Wimp$Scrap>"+CHR$0
  880!p%=60:p%!16=2:p%!12=p%!8
  890IF p%!40=filetype% OR p%!40=&D3C THEN SYS "Wimp_SendMessage",17,p%,p%!4
  900ENDPROC
  910
  920DEF PROCdataload(p%)
  930REM called when a file is dragged here from the filer
  940REM or when another application has saved to <Wimp$Scrap>
  950IF p%!40<>&D3C AND p%!40<>filetype% THEN ENDPROC
  960IF control%>0 THEN ENDPROC
  970u%=p%+44:WHILE ?u%<>0:u%+=1:ENDWHILE:?u%=13
  980IF $(p%+44)="" THEN ENDPROC
  990SYS "OS_File",17,p%+44 TO a%,,,,b%
 1000IF a%<>1 OR b%<=1 THEN ENDPROC
 1010SYS "Wimp_SlotSize",slotsize%+b%,-1 TO a%
 1020IF a%-slotsize%<b% PROCcancelbox("Not enough memory available"):!block%=savewin%:SYS "Wimp_CloseWindow",,block%:SYS "Wimp_SlotSize",slotsize%,-1:ENDPROC
 1030infilelen%=b%
 1040SYS "Hourglass_On"
 1050SYS "XOS_File",16,p%+44,HIMEM TO a%;b%
 1060IF $(p%+44)="<Wimp$Scrap>" THEN SYS "XOS_File",6,p%+44
 1070IF (b% AND 1)<>0 THENu%=a%+4:a$="":WHILE ?u%<>0:a$+=CHR$(?u%):u%+=1:ENDWHILE:PROCcancelbox(a$):!block%=savewin%:SYS "Wimp_CloseWindow",,block%:SYS "Wimp_SlotSize",slotsize%,-1:ENDPROC
 1080SYS "Hourglass_Off"
 1090WHILE INSTR($(p%+44),":")>0:$(p%+44)=MID$($(p%+44),INSTR($(p%+44),":")+1):ENDWHILE
 1100WHILE INSTR($(p%+44),".")>0:$(p%+44)=MID$($(p%+44),INSTR($(p%+44),".")+1):ENDWHILE
 1110IF $(p%+44)="<Wimp$Scrap>" THEN$savetextptr%="" ELSE$savetextptr%=$(p%+44)
 1120IF p%!40=&D3C THEN
 1130$filetypeptr%="Sfile_"+ft$
 1140IF $savetextptr%="" THEN $savetextptr%="Compressed"
 1150$modeptr%="Compressing..."
 1160$bytesptr%=STR$(infilelen%-1)
 1170ELSE
 1180$filetypeptr%="Sfile_D3C"
 1190IF $savetextptr%="" THEN $savetextptr%="Sample"
 1200$modeptr%="Decompressing..."
 1210$bytesptr%=STR$(((!HIMEM) AND &7FFFFFFF)*16)
 1220ENDIF
 1230PROCtext(0,"")
 1240PROCtext(1,"")
 1250PROCstate(statuswin%,6,0,0)
 1260PROCstate(statuswin%,11,0,0)
 1270PROCstate(savewin%,1,0,0):PROCstate(savewin%,0,0,0)
 1280infiletype%=p%!40
 1290!block%=savewin%
 1300SYS "Wimp_GetWindowState",,block%
 1310block%!28=-1
 1320a%=block%!12-block%!4
 1330b%=block%!16-block%!8
 1340block%!4=p%!28-a%/2
 1350block%!8=p%!32-b%/2
 1360block%!12=block%!4+a%
 1370block%!16=block%!8+b%
 1380SYS "Wimp_OpenWindow",,block%
 1390SYS "Wimp_SetCaretPosition",savewin%,1,0,0,-1,LEN($savetextptr%)
 1400p%!12=p%!8
 1410p%!16=4
 1420SYS "Wimp_SendMessage",17,p%,p%!4
 1430ENDPROC
 1440
 1450DEF PROCtestquit
 1460!block%=0
 1470$(block%+4)="An operation is in progress - are you sure you want to quit?"+CHR$0
 1480SYS "Wimp_ReportError",block%,&07,"Compressor" TO ,ok%
 1490IF ok%<2 THEN PROCabort:ENDPROC
 1500poll%!12=poll%!8
 1510SYS "Wimp_SendMessage",19,poll%,poll%!4
 1520ENDPROC
 1530
 1540DEF PROCcancelbox(a$)
 1550$(block%+4)=a$+CHR$0:!block%=0
 1560SYS "Wimp_ReportError",block%,6,"Compressor"
 1570ENDPROC
 1580
 1590DEF PROCtemplates
 1600SYS "Wimp_OpenTemplate",,"<Compress$Dir>.Templates"
 1610SYS "Wimp_LoadTemplate",,block%,iptr%,idir%+1024,-1,"infowin" TO,,iptr%
 1620SYS "Wimp_CreateWindow",,block% TO infowin%
 1630SYS "Wimp_LoadTemplate",,block%,iptr%,idir%+1024,-1,"status" TO,,iptr%
 1640SYS "Wimp_CreateWindow",,block% TO statuswin%
 1650SYS "Wimp_LoadTemplate",,block%,iptr%,idir%+1024,-1,"saveas" TO,,iptr%
 1660SYS "Wimp_CreateWindow",,block% TO savewin%
 1670SYS "Wimp_CloseTemplate"
 1680resptr%=FNgetidirptr(statuswin%,9,0)
 1690rateptr%=FNgetidirptr(statuswin%,10,0)
 1700modeptr%=FNgetidirptr(statuswin%,6,0)
 1710bytesptr%=FNgetidirptr(statuswin%,11,0)
 1720text1ptr%=FNgetidirptr(statuswin%,7,0)
 1730text2ptr%=FNgetidirptr(statuswin%,8,0)
 1740savetextptr%=FNgetidirptr(savewin%,1,0)
 1750filetypeptr%=FNgetidirptr(savewin%,0,4)
 1760ENDPROC
 1770
 1780DEF FNgetidirptr(!block%,block%!4,o%)
 1790SYS "Wimp_GetIconState",,block%
 1800=block%!(28+o%)
 1810
 1820DEF PROCicon
 1830!block%=-1
 1840block%!4=0:block%!8=0
 1850block%!12=72:block%!16=68
 1860block%!20=&3102
 1870$iptr%="!compress"
 1880block%!24=iptr%
 1890block%!28=1
 1900block%!32=LEN"squishwait"
 1910icontext%=iptr%
 1920iptr%+=LEN"squishwait"+1
 1930SYS "Wimp_CreateIcon",,block% TO taskicon%
 1940ENDPROC
 1950
 1960DEF PROCclick(p%)
 1970IF p%!8=2 THEN
 1980   IF p%!12=-2 THEN PROCiconbarmenu(!p%) ELSE PROCmainmenu(!p%,p%!4)
 1990ENDIF
 2000IF p%!8=2 THEN ENDPROC
 2010IF p%!16=-1 THEN ENDPROC
 2020CASE p%!12 OF
 2030WHEN -2:PROCiconbarclick(p%!16,p%)
 2040WHEN savewin%:PROCsaveclick(p%!16,p%)
 2050WHEN statuswin%:PROCstatusclick(p%!16,p%)
 2060ENDCASE
 2070ENDPROC
 2080
 2090DEF PROCiconbarclick(i%,p%)
 2100PROCopenmainwindow
 2110ENDPROC
 2120
 2130DEF PROCopenmainwindow
 2140!block%=statuswin%
 2150SYS "Wimp_GetWindowState",,block%
 2160block%!28=-1
 2170SYS "Wimp_OpenWindow",,block%
 2180ENDPROC
 2190
 2200DEF FNselect(!block%,block%!4)
 2210SYS "Wimp_GetIconState",,block%
 2220=((block%!24 AND (1<<21))<>0)
 2230
 2240DEF PROCstate(!block%,block%!4,block%!12,block%!8)
 2250block%!8=block%!8 AND block%!12
 2260SYS "Wimp_SetIconState",,block%
 2270ENDPROC
 2280
 2290DEF PROCkillstatus
 2300$modeptr%="Waiting...":PROCstate(statuswin%,6,0,0)
 2310$resptr%="-":PROCstate(statuswin%,9,0,0)
 2320$rateptr%="-":PROCstate(statuswin%,10,0,0)
 2330$bytesptr%="":PROCstate(statuswin%,11,0,0)
 2340PROCstate(statuswin%,12,1<<22,-1)
 2350ENDPROC
 2360
 2370DEF PROCstatusclick(i%,p%)
 2380CASE i% OF
 2390WHEN 18,19,20,21,22:res%=i%-14:IF FNselect(statuswin%,i%)=0 THEN PROCstate(statuswin%,i%,1<<21,TRUE)
 2400WHEN 15:enhance%=FNselect(statuswin%,i%)
 2410ENDCASE
 2420IF i%<>12 THEN ENDPROC
 2430IF control%=0 THEN ENDPROC
 2440!block%=0
 2450$(block%+4)="Are you sure you want to abort the operation?"+CHR$0
 2460SYS "Wimp_ReportError",block%,&07,"Compressor" TO ,ok%
 2470IF ok%=1 THEN PROCabort
 2480ENDPROC
 2490
 2500DEF PROCabort
 2510REM close and delete output file
 2520a%=filehandle%:filehandle%=0
 2530IF a%<>0 THEN CLOSE #a%
 2540IF a%<>0 THEN SYS "OS_File",6,savetextptr%
 2550SYS "Wimp_SlotSize",slotsize%,-1
 2560$icontext%="!compress"
 2570PROCstate(-1,taskicon%,0,0)
 2580PROCkillstatus
 2590control%=0:mask%=mask% OR 1
 2600PROCtext(0,"")
 2610PROCtext(1,"")
 2620ENDPROC
 2630
 2640DEF PROCsaveclick(i%,p%)
 2650CASE i% OF
 2660WHEN 0
 2670   !block%=savewin%
 2680   SYS "Wimp_GetWindowState",,block%
 2690   block%!256=savewin%
 2700   block%!260=0
 2710   SYS "Wimp_GetIconState",,block%+256
 2720   a%=block%!4+block%!264
 2730   b%=block%!16+block%!268+4
 2740   block%!8=a%:block%!12=b%
 2750   block%!16=a%+70:block%!20=b%+68
 2760   block%!4=5
 2770   block%!24=&80000000
 2780   block%!28=&80000000
 2790   block%!32=&7FFFFFFF
 2800   block%!36=&7FFFFFFF
 2810   SYS "Wimp_DragBox",,block%
 2820WHEN 2
 2830   PROCcancelbox("To save, drag the file icon to a directory viewer")
 2840ENDCASE
 2850ENDPROC
 2860
 2870DEF PROCdragdone
 2880SYS "Wimp_GetPointerInfo",,block%
 2890WHILE INSTR($savetextptr%,".")>0
 2900$savetextptr%=MID$($savetextptr%,INSTR($savetextptr%,".")+1)
 2910ENDWHILE
 2920WHILE INSTR($savetextptr%,":")>0
 2930$savetextptr%=MID$($savetextptr%,INSTR($savetextptr%,":")+1)
 2940ENDWHILE
 2950block%!20=block%!12
 2960block%!24=block%!16
 2970block%!28=!block%
 2980block%!32=block%!4
 2990IF infiletype%=filetype% THEN block%!40=&D3C ELSE block%!40=filetype%
 3000IF infiletype%=filetype% THEN block%!36=((!HIMEM) AND &7FFFFFFF)*16+1 ELSE block%!36=infilelen%
 3010$(block%+44)=$savetextptr%+CHR$0
 3020block%!16=1
 3030block%!12=0
 3040!block%=44+LEN($savetextptr%)+1:!block%+=(4-(!block% AND3))AND 3
 3050SYS "Wimp_SendMessage",17,block%,block%!20,block%!24
 3060ENDPROC
 3070
 3080DEF PROCsaveack(p%)
 3090REM called after a save drag to tell us the filename to save under
 3100IF p%!4=task% THEN ENDPROC
 3110myref%=p%!8:tasksend%=p%!4
 3120destwin%=p%!20:destic%=p%!24:destx%=p%!28:desty%=p%!32
 3130PROCdosave(p%+44)
 3140ENDPROC
 3150
 3160DEF PROCtext(f%,a$)
 3170IF f%=0 THEN $text1ptr%=a$ ELSE $text2ptr%=a$
 3180PROCstate(statuswin%,f%+7,0,0)
 3190ENDPROC
 3200
 3210DEF PROCdosave(nameptr%)
 3220u%=nameptr%:WHILE ?u%<>0 AND ?u%<>13:u%+=1:ENDWHILE:?u%=13
 3230$savetextptr%=$nameptr%
 3240mask%=mask% AND &FFFFFFFE
 3250IF infiletype%=filetype% THEN control%=2 ELSE control%=1
 3260!block%=savewin%
 3270SYS "Wimp_CloseWindow",,block%
 3280IF infiletype%=&D3C THEN $resptr%=STR$res%+" bits" ELSE $resptr%="-"
 3290IF infiletype%=&D3C THEN $rateptr%=STR$(?HIMEM)+"us" ELSE $rateptr%=STR$(?(HIMEM+4))+"us"
 3300$icontext%="squishwait"
 3310PROCstate(-1,taskicon%,0,0)
 3320PROCstate(statuswin%,9,0,0)
 3330PROCstate(statuswin%,10,0,0)
 3340IF infiletype%=&D3C THEN outfiletype%=filetype% ELSE outfiletype%=&D3C
 3350SYS "XOS_File",11,savetextptr%,&FFD TO filehandle%;f%
 3360IF (f% AND1)=0 THEN SYS "XOS_Find",&CF,savetextptr% TO filehandle%;f%
 3370IF (f% AND1)<>0 THEN
 3380   i%=filehandle%+4:WHILE ?i%>0:i%+=1:ENDWHILE:?i%=13
 3390   PROCcancelbox($(filehandle%+4)):filehandle%=0
 3400   PROCabort
 3410ELSE
 3420   IF infiletype%=&D3C THEN
 3430      ptr%=HIMEM+1
 3440      IF ((infilelen%-1) MOD16)<>0 THEN
 3450         a%=infilelen%
 3460         infilelen%+=(16-((infilelen%-1) AND 15))AND15
 3470         SYS "Wimp_SlotSize",slotsize%+infilelen%,-1
 3480         FOR T%=a% TO infilelen%-1:?(HIMEM+T%)=0:NEXT
 3490      ENDIF
 3500      count%=infilelen%-1
 3510      outptr%=buffer%
 3520      PROCstartcomp
 3530   ELSE
 3540      PROCtext(0,""):PROCtext(1,"")
 3550      ptr%=HIMEM+5
 3560      IF (?(HIMEM+3) AND 128)<>0 THEN en%=TRUE ELSE en%=FALSE
 3570      IF en% THEN
 3580         FOR T%=1 TO ?ptr%:table3%?(T%-1)=ptr%?T%:NEXT
 3590      ELSE
 3600         FOR T%=1 TO ?ptr%:table3%?(T%-1)=table4%?(ptr%?T%):NEXT
 3610      ENDIF
 3620      ptr%+=?ptr%+1
 3630      count%=(!HIMEM) AND &7FFFFFFF
 3640      !decompinptr=ptr%:!bit=256
 3650      !lastbyte=0
 3660      outptr%=buffer%+1
 3670      ?buffer%=?(HIMEM+4)
 3680   ENDIF
 3690   firstwrite%=TRUE
 3700   PROCstate(statuswin%,12,1<<22,0)
 3710ENDIF
 3720ENDPROC
 3730
 3740DEF PROCdoexpand
 3750IF (outptr%=buffer%+20*1024) OR (count%=0 AND outptr%>buffer%) OR firstwrite% THEN SYS "OS_GBPB",2,filehandle%,buffer%,outptr%-buffer%:outptr%=buffer%:SYS "OS_Args",255,filehandle%:SYS "OS_File",18,savetextptr%,&FFD
 3760firstwrite%=0
 3770IF count%=0 THEN PROCfinish:ENDPROC
 3780IF count%<16 THEN
 3790!decompoutptr=outptr%:CALL decompress:outptr%=!decompoutptr
 3800count%-=1
 3810ELSE
 3820!decompoutptr=outptr%:FOR T%=1 TO16:CALL decompress:NEXT:outptr%=!decompoutptr
 3830count%-=16
 3840ENDIF
 3850$bytesptr%=STR$(count%*16):PROCstate(statuswin%,11,0,0):ENDPROC
 3860
 3870DEF PROCfinish
 3880block%!36=EXT#filehandle%
 3890block%!40=outfiletype%
 3900SYS "OS_File",18,savetextptr%,outfiletype%
 3910control%=0:CLOSE #filehandle%
 3920PROCtext(0,"")
 3930block%!12=myref%
 3940!block%=44+LEN$savetextptr%+1
 3950!block%+=(4-(!block% AND 3))AND 3
 3960$(block%+44)=$savetextptr%+CHR$0
 3970block%!16=3
 3980block%!20=destwin%
 3990block%!24=destic%
 4000block%!28=destx%
 4010block%!32=desty%
 4020SYS "Wimp_SendMessage",17,block%,tasksend%
 4030ENDPROC
 4040
 4050DEF FNbuildmenu
 4060READ $ptr%:count%=0
 4070ptr%!12=&00070207
 4080ptr%!20=44
 4090ptr%!24=0
 4100o%=ptr%+28
 4110w%=LEN$ptr%
 4120REPEAT
 4130READ a$
 4140IF a$<>"" THEN
 4150   !o%=0
 4160   o%!4=-1
 4170   o%!8=&07000021
 4180   IF LEFT$(a$,1)="$" THEN
 4190      !o%=!o%+4
 4200      o%!8=o%!8 OR &100
 4210      $(type%+5)="A0-9"
 4220      o%!12=type%
 4230      o%!16=type%+5
 4240      o%!20=3
 4250      IF w%<2 THEN w%=2
 4260      $type%=STR$FNgetother
 4270   ENDIF
 4280   IF INSTR(a$,"->")>0 THEN
 4290      o%!4=EVAL(MID$(a$,INSTR(a$,"->")+2))
 4300      a$=LEFT$(a$,INSTR(a$,"->")-1)
 4310   ENDIF
 4320   IF INSTR(a$,"@")>0 THEN
 4330      b$=MID$(a$,INSTR(a$,"@")+1)
 4340      a$=LEFT$(a$,INSTR(a$,"@")-1)
 4350      IF EVAL(b$)<>0 THEN !o%=!o% OR 1
 4360   ENDIF
 4370   IF a$<>"$" THEN $(o%+12)=a$:IF LENa$>w% THEN w%=LENa$
 4380   o%+=24
 4390   count%+=1
 4400ENDIF
 4410UNTIL a$=""
 4420i%=o%-24:!i%=!i% OR 128
 4430ptr%!16=w%*16+16
 4440SWAP ptr%,o%
 4450=o%
 4460
 4470DEF PROCmenuselect(p%)
 4480SYS "Wimp_GetPointerInfo",,block%
 4490button%=block%!8
 4500IF !p%=1 AND control%=0 THEN quit%=TRUE
 4510IF !p%=1 AND control%>0 THEN
 4520!block%=0
 4530$(block%+4)="An operation is in progress - are you sure you want to quit?"+CHR$0
 4540SYS "Wimp_ReportError",block%,&07,"Compressor" TO ,ok%
 4550IF ok%<2 THEN PROCabort:quit%=TRUE
 4560ENDIF
 4570IF (button% AND 1)<>0 THEN PROCiconbarmenu(0)
 4580ENDPROC
 4590
 4600DEF PROCiconbarmenu(x%)
 4610PROCmakemenu
 4620SYS "Wimp_CreateMenu",,mainmenu%,x%-64,96+44*count%
 4630ENDPROC
 4640
 4650DEF PROCmainmenu(x%,y%)
 4660PROCmakemenu
 4670SYS "Wimp_CreateMenu",,mainmenu%,x%-64,y%+16
 4680ENDPROC
 4690
 4700DEF PROCmakemenu
 4710RESTORE +0
 4720ptr%=menu%
 4730mainmenu%=FNbuildmenu
 4740ENDPROC
 4750
 4760DATA Compress,Info->infowin%,Quit,""
 4770
 4780DEF PROCdocompress
 4790stage%+=1
 4800CASE stage% OF
 4810   WHEN 1:IF !shift>0 THEN PROChon:CALL convertto7bits:PROChoff
 4820      IF !enhance=0 THEN PROCtext(0,"Converting to logarithmic format")
 4830      IF !enhance>0 AND !shift=0 THEN PROCtext(0,"Scaling into range")
 4840      IF !enhance>0 AND !shift>1 THEN PROCtext(0,"")
 4850   WHEN 2:IF !enhance=0 THEN PROChon:CALL converttolog:PROChoff ELSE IF !shift=0 THEN PROChon:CALL mirror:PROChoff
 4860      PROCtext(0,"Building tables")
 4870   WHEN 3:PROChon:CALL buildtable1:PROChoff
 4880   WHEN 4:PROChon
 4890      IF !enhance THEN CALL buildtable2lin ELSE CALL buildtable2log
 4900      PROChoff
 4910      outptr%?5=!table3len
 4920      outptr%+=6
 4930      FOR T%=1 TO !table3len:?outptr%=table3%?(T%-1):outptr%+=1:NEXT
 4940      !outptr=outptr%
 4950      PROCtext(1,STR$(!table3len/256*100)+"% of D/A values used")
 4960      PROCtext(0,"Converting to new format")
 4970   WHEN 5:PROChon:CALL converttonewformat:PROChoff
 4980      PROCtext(0,"Calculating differences")
 4990   WHEN 6:PROChon:CALL calculatedifferences:PROChoff
 5000      PROCtext(0,"Compressing sample")
 5010      PROCtext(1,"")
 5020   WHEN 7:PROCcompresssampledata
 5030      IF !samplelen>0 THEN stage%-=1
 5040   WHEN 8:IF !bit>1 THEN C%=!byte:CALL putbyte
 5050      IF !outptr>buffer% THEN CALL writelump
 5060      PROCtext(1,STR$(EXT#!filehandle/infilelen%*100)+"% of original size")
 5070      PROCfinish
 5080ENDCASE
 5090ENDPROC
 5100
 5110DEF PROChon:SYS "XHourglass_On":ENDPROC
 5120DEF PROChoff:SYS "XHourglass_Off":ENDPROC
 5130
 5140DEF PROCcompresssampledata
 5150CALL control
 5160PROCtext(1,STR$((EXT#!filehandle+!outptr-buffer%)/(!pointer-HIMEM)*100)+"% of original size")
 5170$bytesptr%=STR$(HIMEM+infilelen%-!pointer):PROCstate(statuswin%,11,0,0)
 5180ENDPROC
 5190
 5200DEF PROCstartcomp
 5210!shift=8-res%
 5220!enhance=enhance% AND1
 5230!pointer=ptr%
 5240!samplelen=infilelen%-1
 5250!filehandle=filehandle%
 5260stage%=0
 5270SYS "Sound_Configure" TO ,,,log%:!logptr=log%!8
 5280PROCtext(0,"Converting to "+STR$res%+" bits")
 5290PROCtext(1,"")
 5300!outptr%=(count% DIV 16) OR (!enhance<<31)
 5310!outbuffstart=buffer%
 5320!filenameptr=savetextptr%
 5330!outbuffend=buffer%+20*1024
 5340outptr%?4=?HIMEM
 5350!byte=0:!bit=1:!count=0
 5360ENDPROC
 5370
 5380DEF PROCassem
 5390REM table 1 is a table of flags saying whether a value is used
 5400REM table 2 is for converting the sample to a more compressed version
 5410REM table 3 is for the compressed version back again
 5420
 5430DIM code% &4000,table1% 256,table2% 256,table3% 256,buff% 16
 5440FOR PASS=0 TO 2 STEP 2
 5450P%=code%:[OPT PASS
 5460
 5470\ --------------------------
 5480
 5490.convertto7bits
 5500LDR R0,pointer
 5510LDR R1,samplelen
 5520LDR R4,shift
 5530.bit7loop
 5540LDRB R2,[R0]
 5550MOV R2,R2,LSR R4
 5560MOV R2,R2,LSL R4
 5570STRB R2,[R0],#1
 5580SUBS R1,R1,#1
 5590BNE bit7loop
 5600MOVS PC,R14
 5610
 5620\ --------------------------
 5630
 5640.mirror
 5650LDR R0,pointer
 5660LDR R1,samplelen
 5670MVN R3,#126
 5680.mirrorloop
 5690LDRB R2,[R0],#1
 5700CMP R2,#128
 5710STREQB R3,[R0,#-1]
 5720SUBS R1,R1,#1
 5730BNE mirrorloop
 5740MOVS PC,R14
 5750
 5760\ --------------------------
 5770
 5780.converttolog
 5790LDR R0,pointer
 5800LDR R1,samplelen
 5810LDR R2,logptr
 5820.converttologloop
 5830LDRB R3,[R0]
 5840LDRB R3,[R2,R3,LSL #5]
 5850STRB R3,[R0],#1
 5860SUBS R1,R1,#1
 5870BNE converttologloop
 5880MOVS PC,R14
 5890
 5900\ --------------------------
 5910
 5920.buildtable1
 5930LDR R0,pointer
 5940LDR R1,samplelen
 5950LDR R2,flagtable
 5960MOV R4,#0
 5970MOV R3,#255
 5980.buildtable1loop1
 5990STRB R4,[R2,R3]
 6000SUBS R3,R3,#1
 6010BPL buildtable1loop1
 6020MOV R4,#&FF
 6030.buildtable1loop2
 6040LDRB R3,[R0],#1
 6050STRB R4,[R2,R3]
 6060SUBS R1,R1,#1
 6070BNE buildtable1loop2
 6080MOVS PC,R14
 6090
 6100\ -
 6110
 6120.buildtable2lin
 6130LDR R2,flagtable
 6140LDR R3,table2ptr
 6150LDR R4,table3ptr
 6160MOV R0,#0
 6170MOV R6,#0
 6180.buildtable2linloop
 6190EOR R1,R0,#128
 6200LDRB R5,[R2,R1]
 6210TEQ R5,#0
 6220STRNEB R6,[R3,R1]
 6230STRNEB R1,[R4,R6]
 6240ADDNE R6,R6,#1
 6250ADD R0,R0,#1
 6260CMP R0,#256
 6270BLT buildtable2linloop
 6280STR R6,table3len
 6290MOVS PC,R14
 6300
 6310\ -
 6320
 6330.buildtable2log
 6340LDR R2,flagtable
 6350LDR R3,table2ptr
 6360LDR R4,table3ptr
 6370LDRB R0,[R2,#1]
 6380LDRB R1,[R2,#0]
 6390ORR R0,R0,R1
 6400STRB R0,[R2,#1]
 6410STRB R0,[R2,#0]
 6420MOV R0,#1
 6430MOV R6,#0
 6440.buildtable2logloop
 6450SUBS R1,R0,#128
 6460RSBMI R1,R1,#0
 6470MOV R1,R1,LSL #1
 6480ORRMI R1,R1,#1
 6490LDRB R5,[R2,R1]
 6500TEQ R5,#0
 6510STRNEB R6,[R3,R1]
 6520STRNEB R1,[R4,R6]
 6530ADDNE R6,R6,#1
 6540ADD R0,R0,#1
 6550CMP R0,#256
 6560BLT buildtable2logloop
 6570STR R6,table3len
 6580MOVS PC,R14
 6590
 6600\ --------------------------
 6610
 6620.converttonewformat
 6630LDR R0,pointer
 6640LDR R1,samplelen
 6650LDR R2,table2ptr
 6660.newformatloop
 6670LDRB R3,[R0]
 6680LDRB R3,[R2,R3]
 6690STRB R3,[R0],#1
 6700SUBS R1,R1,#1
 6710BNE newformatloop
 6720MOVS PC,R14
 6730
 6740\ --------------------------
 6750
 6760.calculatedifferences
 6770LDR R0,pointer
 6780LDR R1,samplelen
 6790MOV R2,#0
 6800MOV R5,#0
 6810MVN R6,#126:\ =-127
 6820.calculatedifferencesloop
 6830LDRB R3,[R0]
 6840SUB R4,R3,R2
 6850ADD R4,R4,R5
 6860MOV R5,#0
 6870MOV R2,R3
 6880CMP R4,#127
 6890SUBGT R5,R4,#127
 6900MOVGT R4,#127
 6910CMP R4,R6
 6920SUBLT R5,R4,R6
 6930MOVLT R4,R6
 6940STRB R4,[R0],#1
 6950SUBS R1,R1,#1
 6960BNE calculatedifferencesloop
 6970MOVS PC,R14
 6980
 6990\ --------------------------
 7000
 7010.pointer EQUD 0
 7020.flagtable EQUD table1%
 7030.table2ptr EQUD table2%
 7040.table3ptr EQUD table3%
 7050.table3len EQUD 0
 7060.logptr EQUD 0
 7070.samplelen EQUD 0
 7080.filehandle EQUD 0
 7090.buffptr EQUD buff%
 7100.count EQUD 0
 7110.byte EQUD 0
 7120.bit EQUD 0
 7130.maxbit EQUD 0
 7140.sign EQUD 0
 7150.shift EQUD 0
 7160.kilobyte EQUD 0
 7170.kiloleft EQUD 0
 7180.enhance EQUD 0
 7190.outptr EQUD 0
 7200.outbuffstart EQUD 0
 7210.outbuffend EQUD 0
 7220.filenameptr EQUD 0
 7230
 7240\ ---------------------------
 7250\      Compression...
 7260\ ---------------------------
 7270
 7280.writelump
 7290STMFD R13!,{R0-R5,R14}
 7300MOV R0,#2
 7310LDR R1,filehandle
 7320LDR R2,outbuffstart
 7330LDR R3,outptr
 7340SUB R3,R3,R2
 7350SWI "OS_GBPB"
 7360LDR R2,outbuffstart
 7370STR R2,outptr
 7380LDR R1,filehandle
 7390MOV R0,#255
 7400SWI "OS_Args"
 7410MOV R0,#18
 7420MOV R2,#&FF0
 7430ORR R2,R2,#&D
 7440LDR R1,filenameptr
 7450SWI "OS_File"
 7460LDMFD R13!,{R0-R5,PC}
 7470
 7480\ ---------------------------
 7490
 7500.putbyte:\ preserve everything, data in R2
 7510STMFD R13!,{R0-R1}
 7520LDR R0,outptr
 7530LDR R1,outbuffend
 7540STRB R2,[R0],#1
 7550STR R0,outptr
 7560CMP R0,R1
 7570LDMFD R13!,{R0-R1}
 7580MOVLT PC,R14
 7590B writelump
 7600
 7610\ ---------------------------
 7620
 7630.putbits
 7640\ r0 = value to write
 7650\ r1 = num of bits
 7660STMFD R13!,{R1-R4,R14}
 7670LDR R2,byte
 7680LDR R3,bit
 7690MOV R4,#1
 7700.putloop
 7710TST R0,R4
 7720ORRNE R2,R2,R3
 7730MOV R3,R3,LSL #1
 7740TEQ R3,#256
 7750BNE nextbit
 7760MOV R3,#1
 7770BL putbyte:\ preserve everything, data in R2
 7780MOV R2,#0
 7790.nextbit
 7800MOV R4,R4,LSL #1
 7810SUBS R1,R1,#1
 7820BNE putloop
 7830STR R2,byte
 7840STR R3,bit
 7850LDMFD R13!,{R1-R4,PC}
 7860
 7870\ --------------------------
 7880
 7890.getmaxbit
 7900STMFD R13!,{R14}
 7910LDR R0,count
 7920ADD R0,R0,#1
 7930STR R0,count
 7940MOV R0,#0:\ maxbit
 7950MOV R1,#1:\ maxval
 7960MOV R2,#0:\ sign
 7970MOV R3,#16
 7980LDR R4,pointer
 7990.getmaxbitloop
 8000LDRB R5,[R4],#1
 8010TST R5,#128
 8020MOVNE R5,R5,LSL #24
 8030MOVNE R5,R5,ASR #24
 8040RSBNE R5,R5,#0
 8050.whileloop
 8060CMP R5,R1
 8070MOVGE R1,R1,LSL #1
 8080ADDGE R0,R0,#1
 8090BGE whileloop
 8100.endwhile
 8110SUBS R3,R3,#1
 8120BNE getmaxbitloop
 8130
 8140.signscan
 8150LDR R4,pointer
 8160LDRB R5,[R4],#1
 8170TST R5,#128
 8180MOVNE R2,#2
 8190MOVEQ R2,#1
 8200MOV R3,#15
 8210.signscanloop
 8220LDRB R5,[R4],#1
 8230TST R5,#128
 8240TEQEQ R2,#2
 8250MOVEQ R2,#0
 8260BEQ signscanout
 8270TST R5,#128
 8280TEQNE R2,#2
 8290MOVNE R2,#0
 8300BNE signscanout
 8310SUBS R3,R3,#1
 8320BNE signscanloop
 8330.signscanout
 8340STR R2,sign
 8350STR R0,maxbit
 8360
 8370MOV R1,#4
 8380TEQ R2,#0
 8390ORREQ R0,R0,#8
 8400MOV R5,R0
 8410BL putbits
 8420TEQ R5,#0
 8430BEQ writeout
 8440LDR R4,pointer
 8450MOV R3,#16
 8460
 8470TEQ R2,#0
 8480BEQ writesigned
 8490
 8500.writeunsigned
 8510SUB R0,R2,#1
 8520MOV R1,#1
 8530BL putbits
 8540LDR R1,maxbit
 8550.unsignedloop
 8560LDRB R0,[R4],#1
 8570TST R0,#128
 8580RSBNE R0,R0,#0
 8590AND R0,R0,#255
 8600BL putbits
 8610SUBS R3,R3,#1
 8620BNE unsignedloop
 8630B writeout
 8640
 8650.writesigned
 8660LDR R1,maxbit
 8670MOV R6,#1
 8680MOV R6,R6,LSL R1
 8690ADD R1,R1,#1
 8700.signedloop
 8710LDRB R0,[R4],#1
 8720TST R0,#128
 8730RSBNE R0,R0,#0
 8740AND R0,R0,#255
 8750ORRNE R0,R0,R6
 8760BL putbits
 8770SUBS R3,R3,#1
 8780BNE signedloop
 8790
 8800.writeout
 8810LDR R0,pointer
 8820LDR R1,samplelen
 8830ADD R0,R0,#16
 8840SUB R1,R1,#16
 8850STR R0,pointer
 8860STR R1,samplelen
 8870LDMFD R13!,{PC}
 8880
 8890\ sign = 0  \ signed
 8900\      = 1  \ all positive
 8910\      = 2  \ all negative
 8920
 8930\ -------------------------
 8940
 8950.control
 8960STMFD R13!,{R14}
 8970MOV R0,#4096
 8980STR R0,kilobyte
 8990.controlloop
 9000BL getmaxbit
 9010LDR R0,samplelen
 9020CMP R0,#0
 9030LDMLEFD R13!,{PC}
 9040LDR R3,kilobyte
 9050SUBS R3,R3,#16
 9060STR R3,kilobyte
 9070BGT controlloop
 9080LDMFD R13!,{PC}
 9090
 9100\ -------------------------
 9110\     Decompression...
 9120\ -------------------------
 9130
 9140.decompinptr EQUD 0
 9150.decompoutptr EQUD 0
 9160.lastbyte EQUD 0
 9170
 9180.getbits
 9190STMFD R13!,{R0,R2-R4,R14}
 9200\ r6 = source ptr
 9210MOV R1,#0:\ outbyte%
 9220MOV R2,#1:\ output%
 9230LDR R3,bit
 9240LDR R4,byte
 9250.getbitloop
 9260TEQ R3,#256
 9270LDREQB R4,[R6],#1
 9280MOVEQ R3,#1
 9290TST R4,R3
 9300ORRNE R1,R1,R2
 9310MOV R2,R2,LSL #1
 9320MOV R3,R3,LSL #1
 9330SUBS R0,R0,#1
 9340BNE getbitloop
 9350STR R3,bit
 9360STR R4,byte
 9370LDMFD R13!,{R0,R2-R4,PC}
 9380
 9390.decompress
 9400STMFD R13!,{R14}
 9410LDR R3,lastbyte
 9420LDR R6,decompinptr
 9430LDR R4,table3ptr
 9440LDR R8,decompoutptr
 9450\ r6 = ptr to read from
 9460\ r8 = ptr to write to
 9470\ r4 = converttable
 9480\ r3 = last byte
 9490MOV R0,#4
 9500BL getbits
 9510TEQ R1,#0
 9520BEQ unpackzero
 9530TST R1,#8
 9540BNE unpacksigned
 9550.unpackunsigned
 9560MOV R2,R1
 9570MOV R0,#1
 9580BL getbits
 9590MOV R0,R2
 9600TEQ R1,#0
 9610BEQ unpackpositive
 9620
 9630.unpacknegative
 9640MOV R2,#16
 9650.unpacknegloop
 9660BL getbits
 9670RSB R1,R1,#0
 9680ADD R3,R3,R1
 9690LDRB R1,[R4,R3]
 9700STRB R1,[R8],#1
 9710SUBS R2,R2,#1
 9720BNE unpacknegloop
 9730B unpackdone
 9740
 9750.unpackpositive
 9760MOV R2,#16
 9770.unpackposloop
 9780BL getbits
 9790ADD R3,R3,R1
 9800LDRB R1,[R4,R3]
 9810STRB R1,[R8],#1
 9820SUBS R2,R2,#1
 9830BNE unpackposloop
 9840B unpackdone
 9850
 9860.unpackzero
 9870MOV R2,#16
 9880LDRB R1,[R4,R3]
 9890.zeroloop
 9900STRB R1,[R8],#1
 9910SUBS R2,R2,#1
 9920BNE zeroloop
 9930B unpackdone
 9940
 9950.unpacksigned
 9960AND R0,R1,#7
 9970MOV R10,#1
 9980MOV R10,R10,LSL R0
 9990SUB R11,R10,#1
10000ADD R0,R0,#1
10010MOV R2,#16
10020.unpacksignedloop
10030BL getbits
10040TST R1,R10
10050AND R1,R1,R11
10060RSBNE R1,R1,#0
10070ADD R3,R3,R1
10080LDRB R1,[R4,R3]
10090STRB R1,[R8],#1
10100SUBS R2,R2,#1
10110BNE unpacksignedloop
10120
10130.unpackdone
10140STR R3,lastbyte
10150STR R6,decompinptr
10160STR R4,table3ptr
10170STR R8,decompoutptr
10180LDMFD R13!,{PC}
10190
10200]NEXT
10210ENDPROC

%� > :4.$.MyPD.!Compress.!RunImage

filetype%=&350
(ft$=�~filetype%
2	�init
<$block%="TASK"
F:ș "Wimp_Initialise",200,!block%,"Compressor" � ,task%
P�templates
Z	�icon
d�killstatus
nquit%=�
x
�control%=0
�� � �error
��
�#ș "Wimp_Poll",mask%,poll% � r%
�Ȏ r% �
�� 0
�   oldcontrol%=control%
�!   � control%=1 � �docompress
�   � control%=2 � �doexpand
�%   � control%=0 � mask%=mask% � 1
�   � oldcontrol%>0 � control%=0 � ș "Wimp_SlotSize",slotsize%,-1:$icontext%="!compress":�state(-1,taskicon%,0,0):�killstatus
�� 2
�"   ș "Wimp_OpenWindow",,poll%
� 3
F   � !poll%=savewin% � control%=0 � ș"Wimp_SlotSize",slotsize%,-1
#   ș "Wimp_CloseWindow",,poll%
"� 6:�click(poll%)
,� 7:�dragdone
6� 9:�menuselect(poll%)
@� 17,18:�message(poll%)
J�
T� quit%
^*ș "Wimp_SlotSize",slotsize%,-1:� \\\\
hș "Wimp_CloseDown"
r�
|
�� �init
�'� block% &4000,menu% 1024,poll% 256
�,� buffer% 20*1024,table3% 256,idir% 1024
�� table4% 256
�quit%=�:iptr%=idir%
�mask%=&1831
�=control%=0:� 0 - do nothing, 1 - compress, 2 - decompress
�res%=8:enhance%=0
�prevopen%=0
�(ș "Wimp_SlotSize",-1,-1 � slotsize%
�(ș "Sound_Configure" � ,,,a%:a%=a%!8
�	N%=-1
�� A%=0 � 127
I%=(a%?(A%<<5)) /2
ȕ I%>N%
	N%+=1
&table4%?(N%*2)=A%
0table4%?((N%*2)+1)=256-A%
:�
D�
N
X
�assem
bfirstwrite%=0
l�
v
�� �error
�ș "XWimp_DragBox",,-1
�ș "XWimp_CreateMenu",,-1
�ș "XHourglass_Smash"
�!block%=�:$(block%+4)=�$+�0
�/ș "Wimp_ReportError",block%,1,"Compressor"
�� control%>0 � �abort
��
�
�� �message(p%)
�Ȏ p%!16 �
�� 0:quit%=�
�� 1:�datasave(p%)
� 2:�saveack(p%)
� 3:�dataload(p%)
 � 8:� control%>0 � �testquit
 �
*�
4
>� �datasave(p%)
H,� called when an application saves to us
R� p%!4=task% � �
\p%!36=-1
f$(p%+44)="<Wimp$Scrap>"+�0
p!p%=60:p%!16=2:p%!12=p%!8
zE� p%!40=filetype% � p%!40=&D3C � ș "Wimp_SendMessage",17,p%,p%!4
��
�
�� �dataload(p%)
�7� called when a file is dragged here from the filer
�;� or when another application has saved to <Wimp$Scrap>
�(� p%!40<>&D3C � p%!40<>filetype% � �
�� control%>0 � �
�%u%=p%+44:ȕ ?u%<>0:u%+=1:�:?u%=13
�� $(p%+44)="" � �
�$ș "OS_File",17,p%+44 � a%,,,,b%
�� a%<>1 � b%<=1 � �
�+ș "Wimp_SlotSize",slotsize%+b%,-1 � a%
��� a%-slotsize%<b% �cancelbox("Not enough memory available"):!block%=savewin%:ș "Wimp_CloseWindow",,block%:ș "Wimp_SlotSize",slotsize%,-1:�
infilelen%=b%
ș "Hourglass_On"
$ș "XOS_File",16,p%+44,� � a%;b%
$5� $(p%+44)="<Wimp$Scrap>" � ș "XOS_File",6,p%+44
.�� (b% � 1)<>0 �u%=a%+4:a$="":ȕ ?u%<>0:a$+=�(?u%):u%+=1:�:�cancelbox(a$):!block%=savewin%:ș "Wimp_CloseWindow",,block%:ș "Wimp_SlotSize",slotsize%,-1:�
8ș "Hourglass_Off"
B>ȕ �$(p%+44),":")>0:$(p%+44)=�$(p%+44),�$(p%+44),":")+1):�
L>ȕ �$(p%+44),".")>0:$(p%+44)=�$(p%+44),�$(p%+44),".")+1):�
VG� $(p%+44)="<Wimp$Scrap>" �$savetextptr%="" �$savetextptr%=$(p%+44)
`� p%!40=&D3C �
j$filetypeptr%="Sfile_"+ft$
t3� $savetextptr%="" � $savetextptr%="Compressed"
~$modeptr%="Compressing..."
�$bytesptr%=�(infilelen%-1)
��
�$filetypeptr%="Sfile_D3C"
�/� $savetextptr%="" � $savetextptr%="Sample"
� $modeptr%="Decompressing..."
�'$bytesptr%=�(((!�) � &7FFFFFFF)*16)
��
��text(0,"")
��text(1,"")
��state(statuswin%,6,0,0)
��state(statuswin%,11,0,0)
�1�state(savewin%,1,0,0):�state(savewin%,0,0,0)
infiletype%=p%!40

!block%=savewin%
$ș "Wimp_GetWindowState",,block%
block%!28=-1
(a%=block%!12-block%!4
2b%=block%!16-block%!8
<block%!4=p%!28-a%/2
Fblock%!8=p%!32-b%/2
Pblock%!12=block%!4+a%
Zblock%!16=block%!8+b%
d ș "Wimp_OpenWindow",,block%
nAș "Wimp_SetCaretPosition",savewin%,1,0,0,-1,�($savetextptr%)
xp%!12=p%!8
�p%!16=4
�$ș "Wimp_SendMessage",17,p%,p%!4
��
�
�� �testquit
�
!block%=0
�Q$(block%+4)="An operation is in progress - are you sure you want to quit?"+�0
�8ș "Wimp_ReportError",block%,&07,"Compressor" � ,ok%
�� ok%<2 � �abort:�
�poll%!12=poll%!8
�*ș "Wimp_SendMessage",19,poll%,poll%!4
��
�
� �cancelbox(a$)
$(block%+4)=a$+�0:!block%=0
/ș "Wimp_ReportError",block%,6,"Compressor"
"�
,
6� �templates
@6ș "Wimp_OpenTemplate",,"<Compress$Dir>.Templates"
JIș "Wimp_LoadTemplate",,block%,iptr%,idir%+1024,-1,"infowin" �,,iptr%
T-ș "Wimp_CreateWindow",,block% � infowin%
^Hș "Wimp_LoadTemplate",,block%,iptr%,idir%+1024,-1,"status" �,,iptr%
h/ș "Wimp_CreateWindow",,block% � statuswin%
rHș "Wimp_LoadTemplate",,block%,iptr%,idir%+1024,-1,"saveas" �,,iptr%
|-ș "Wimp_CreateWindow",,block% � savewin%
�ș "Wimp_CloseTemplate"
�'resptr%=�getidirptr(statuswin%,9,0)
�)rateptr%=�getidirptr(statuswin%,10,0)
�(modeptr%=�getidirptr(statuswin%,6,0)
�*bytesptr%=�getidirptr(statuswin%,11,0)
�)text1ptr%=�getidirptr(statuswin%,7,0)
�)text2ptr%=�getidirptr(statuswin%,8,0)
�*savetextptr%=�getidirptr(savewin%,1,0)
�*filetypeptr%=�getidirptr(savewin%,0,4)
��
�
�&� �getidirptr(!block%,block%!4,o%)
�"ș "Wimp_GetIconState",,block%
=block%!(28+o%)

� �icon
&!block%=-1
0block%!4=0:block%!8=0
:block%!12=72:block%!16=68
Dblock%!20=&3102
N$iptr%="!compress"
Xblock%!24=iptr%
bblock%!28=1
lblock%!32=�"squishwait"
vicontext%=iptr%
�iptr%+=�"squishwait"+1
�,ș "Wimp_CreateIcon",,block% � taskicon%
��
�
�� �click(p%)
�� p%!8=2 �
�;   � p%!12=-2 � �iconbarmenu(!p%) � �mainmenu(!p%,p%!4)
��
�� p%!8=2 � �
�� p%!16=-1 � �
�Ȏ p%!12 �
� � -2:�iconbarclick(p%!16,p%)
�#� savewin%:�saveclick(p%!16,p%)
'� statuswin%:�statusclick(p%!16,p%)
�
�
 
*� �iconbarclick(i%,p%)
4�openmainwindow
>�
H
R� �openmainwindow
\!block%=statuswin%
f$ș "Wimp_GetWindowState",,block%
pblock%!28=-1
z ș "Wimp_OpenWindow",,block%
��
�
�� �select(!block%,block%!4)
�"ș "Wimp_GetIconState",,block%
�=((block%!24 � (1<<21))<>0)
�
�1� �state(!block%,block%!4,block%!12,block%!8)
�!block%!8=block%!8 � block%!12
�"ș "Wimp_SetIconState",,block%
��
�
�� �killstatus
�3$modeptr%="Waiting...":�state(statuswin%,6,0,0)
	)$resptr%="-":�state(statuswin%,9,0,0)
	+$rateptr%="-":�state(statuswin%,10,0,0)
	+$bytesptr%="":�state(statuswin%,11,0,0)
	$"�state(statuswin%,12,1<<22,-1)
	.�
	8
	B� �statusclick(i%,p%)
	LȎ i% �
	VZ� 18,19,20,21,22:res%=i%-14:� �select(statuswin%,i%)=0 � �state(statuswin%,i%,1<<21,�)
	`(� 15:enhance%=�select(statuswin%,i%)
	j�
	t� i%<>12 � �
	~� control%=0 � �
	�
!block%=0
	�B$(block%+4)="Are you sure you want to abort the operation?"+�0
	�8ș "Wimp_ReportError",block%,&07,"Compressor" � ,ok%
	�� ok%=1 � �abort
	��
	�
	�� �abort
	�"� close and delete output file
	� a%=filehandle%:filehandle%=0
	�� a%<>0 � � #a%
	�)� a%<>0 � ș "OS_File",6,savetextptr%
	�#ș "Wimp_SlotSize",slotsize%,-1
$icontext%="!compress"

�state(-1,taskicon%,0,0)
�killstatus
control%=0:mask%=mask% � 1
(�text(0,"")
2�text(1,"")
<�
F
P� �saveclick(i%,p%)
ZȎ i% �
d� 0
n   !block%=savewin%
x'   ș "Wimp_GetWindowState",,block%
�   block%!256=savewin%
�   block%!260=0
�)   ș "Wimp_GetIconState",,block%+256
�   a%=block%!4+block%!264
�    b%=block%!16+block%!268+4
�   block%!8=a%:block%!12=b%
�&   block%!16=a%+70:block%!20=b%+68
�   block%!4=5
�   block%!24=&80000000
�   block%!28=&80000000
�   block%!32=&7FFFFFFF
�   block%!36=&7FFFFFFF
�    ș "Wimp_DragBox",,block%
� 2
F   �cancelbox("To save, drag the file icon to a directory viewer")
�
"�
,
6� �dragdone
@$ș "Wimp_GetPointerInfo",,block%
Jȕ �$savetextptr%,".")>0
T7$savetextptr%=�$savetextptr%,�$savetextptr%,".")+1)
^�
hȕ �$savetextptr%,":")>0
r7$savetextptr%=�$savetextptr%,�$savetextptr%,":")+1)
|�
�block%!20=block%!12
�block%!24=block%!16
�block%!28=!block%
�block%!32=block%!4
�B� infiletype%=filetype% � block%!40=&D3C � block%!40=filetype%
�V� infiletype%=filetype% � block%!36=((!�) � &7FFFFFFF)*16+1 � block%!36=infilelen%
�!$(block%+44)=$savetextptr%+�0
�block%!16=1
�block%!12=0
�>!block%=44+�($savetextptr%)+1:!block%+=(4-(!block% �3))� 3
�7ș "Wimp_SendMessage",17,block%,block%!20,block%!24
��
�
� �saveack(p%)
D� called after a save drag to tell us the filename to save under
� p%!4=task% � �
&myref%=p%!8:tasksend%=p%!4
0:destwin%=p%!20:destic%=p%!24:destx%=p%!28:desty%=p%!32
:�dosave(p%+44)
D�
N
X� �text(f%,a$)
b*� f%=0 � $text1ptr%=a$ � $text2ptr%=a$
l�state(statuswin%,f%+7,0,0)
v�
�
�� �dosave(nameptr%)
�2u%=nameptr%:ȕ ?u%<>0 � ?u%<>13:u%+=1:�:?u%=13
�$savetextptr%=$nameptr%
�mask%=mask% � &FFFFFFFE
�5� infiletype%=filetype% � control%=2 � control%=1
�!block%=savewin%
�!ș "Wimp_CloseWindow",,block%
�>� infiletype%=&D3C � $resptr%=�res%+" bits" � $resptr%="-"
�H� infiletype%=&D3C � $rateptr%=�(?�)+"us" � $rateptr%=�(?(�+4))+"us"
�$icontext%="squishwait"
��state(-1,taskicon%,0,0)
��state(statuswin%,9,0,0)

�state(statuswin%,10,0,0)

C� infiletype%=&D3C � outfiletype%=filetype% � outfiletype%=&D3C

7ș "XOS_File",11,savetextptr%,&FFD � filehandle%;f%

 A� (f% �1)=0 � ș "XOS_Find",&CF,savetextptr% � filehandle%;f%

*� (f% �1)<>0 �

4/   i%=filehandle%+4:ȕ ?i%>0:i%+=1:�:?i%=13

>1   �cancelbox($(filehandle%+4)):filehandle%=0

H
   �abort

R�

\   � infiletype%=&D3C �

f      ptr%=�+1

p%      � ((infilelen%-1) �16)<>0 �

z         a%=infilelen%

�6         infilelen%+=(16-((infilelen%-1) � 15))�15

�7         ș "Wimp_SlotSize",slotsize%+infilelen%,-1

�/         � T%=a% � infilelen%-1:?(�+T%)=0:�

�      �

�      count%=infilelen%-1

�      outptr%=buffer%

�      �startcomp

�   �

�!      �text(0,""):�text(1,"")

�      ptr%=�+5

�-      � (?(�+3) � 128)<>0 � en%=� � en%=�

�      � en% �

�4         � T%=1 � ?ptr%:table3%?(T%-1)=ptr%?T%:�
      �
>         � T%=1 � ?ptr%:table3%?(T%-1)=table4%?(ptr%?T%):�
      �
$      ptr%+=?ptr%+1
.!      count%=(!�) � &7FFFFFFF
8$      !decompinptr=ptr%:!bit=256
B      !lastbyte=0
L      outptr%=buffer%+1
V      ?buffer%=?(�+4)
`   �
j   firstwrite%=�
t$   �state(statuswin%,12,1<<22,0)
~�
��
�
�� �doexpand
��� (outptr%=buffer%+20*1024) � (count%=0 � outptr%>buffer%) � firstwrite% � ș "OS_GBPB",2,filehandle%,buffer%,outptr%-buffer%:outptr%=buffer%:ș "OS_Args",255,filehandle%:ș "OS_File",18,savetextptr%,&FFD
�firstwrite%=0
�� count%=0 � �finish:�
�� count%<16 �
�<!decompoutptr=outptr%:� decompress:outptr%=!decompoutptr
�
count%-=1
��
�I!decompoutptr=outptr%:� T%=1 �16:� decompress:�:outptr%=!decompoutptr
�count%-=16
�

7$bytesptr%=�(count%*16):�state(statuswin%,11,0,0):�


� �finish
(block%!36=�#filehandle%
2block%!40=outfiletype%
<-ș "OS_File",18,savetextptr%,outfiletype%
Fcontrol%=0:� #filehandle%
P�text(0,"")
Zblock%!12=myref%
d!block%=44+�$savetextptr%+1
n!!block%+=(4-(!block% � 3))� 3
x!$(block%+44)=$savetextptr%+�0
�block%!16=3
�block%!20=destwin%
�block%!24=destic%
�block%!28=destx%
�block%!32=desty%
�-ș "Wimp_SendMessage",17,block%,tasksend%
��
�
�� �buildmenu
�� $ptr%:count%=0
�ptr%!12=&00070207
�ptr%!20=44
�
ptr%!24=0
o%=ptr%+28

w%=�$ptr%
�
"� a$
,� a$<>"" �
6   !o%=0
@   o%!4=-1
J   o%!8=&07000021
T   � �a$,1)="$" �
^      !o%=!o%+4
h      o%!8=o%!8 � &100
r      $(type%+5)="A0-9"
|      o%!12=type%
�      o%!16=type%+5
�      o%!20=3
�      � w%<2 � w%=2
�      $type%=ägetother
�   �
�   � �a$,"->")>0 �
�"      o%!4=�(�a$,�a$,"->")+2))
�      a$=�a$,�a$,"->")-1)
�   �
�   � �a$,"@")>0 �
�      b$=�a$,�a$,"@")+1)
�      a$=�a$,�a$,"@")-1)
�"      � �(b$)<>0 � !o%=!o% � 1
   �
0   � a$<>"$" � $(o%+12)=a$:� �a$>w% � w%=�a$

   o%+=24
&   count%+=1
0�
:� a$=""
Di%=o%-24:!i%=!i% � 128
Nptr%!16=w%*16+16
XȔ ptr%,o%
b=o%
l
v� �menuselect(p%)
�$ș "Wimp_GetPointerInfo",,block%
�button%=block%!8
�"� !p%=1 � control%=0 � quit%=�
�� !p%=1 � control%>0 �
�
!block%=0
�Q$(block%+4)="An operation is in progress - are you sure you want to quit?"+�0
�8ș "Wimp_ReportError",block%,&07,"Compressor" � ,ok%
�� ok%<2 � �abort:quit%=�
��
�(� (button% � 1)<>0 � �iconbarmenu(0)
��
�
�� �iconbarmenu(x%)

�makemenu
6ș "Wimp_CreateMenu",,mainmenu%,x%-64,96+44*count%
�
 
*� �mainmenu(x%,y%)
4
�makemenu
>/ș "Wimp_CreateMenu",,mainmenu%,x%-64,y%+16
H�
R
\� �makemenu
f� +0
pptr%=menu%
zmainmenu%=�buildmenu
��
�
�%� Compress,Info->infowin%,Quit,""
�
�� �docompress
�
stage%+=1
�Ȏ stage% �
�3   � 1:� !shift>0 � �hon:� convertto7bits:�hoff
�D      � !enhance=0 � �text(0,"Converting to logarithmic format")
�A      � !enhance>0 � !shift=0 � �text(0,"Scaling into range")
�/      � !enhance>0 � !shift>1 � �text(0,"")
�V   � 2:� !enhance=0 � �hon:� converttolog:�hoff � � !shift=0 � �hon:� mirror:�hoff
�$      �text(0,"Building tables")
#   � 3:�hon:� buildtable1:�hoff
   � 4:�hon
:      � !enhance � � buildtable2lin � � buildtable2log
$      �hoff
.      outptr%?5=!table3len
8      outptr%+=6
BB      � T%=1 � !table3len:?outptr%=table3%?(T%-1):outptr%+=1:�
L      !outptr=outptr%
V?      �text(1,�(!table3len/256*100)+"% of D/A values used")
`-      �text(0,"Converting to new format")
j*   � 5:�hon:� converttonewformat:�hoff
t,      �text(0,"Calculating differences")
~,   � 6:�hon:� calculatedifferences:�hoff
�'      �text(0,"Compressing sample")
�      �text(1,"")
�   � 7:�compresssampledata
�$      � !samplelen>0 � stage%-=1
�(   � 8:� !bit>1 � C%=!byte:� putbyte
�)      � !outptr>buffer% � � writelump
�G      �text(1,�(�#!filehandle/infilelen%*100)+"% of original size")
�      �finish
��
��
�
�� �hon:ș "XHourglass_On":�
!� �hoff:ș "XHourglass_Off":�


� �compresssampledata

� control
(U�text(1,�((�#!filehandle+!outptr-buffer%)/(!pointer-�)*100)+"% of original size")
2A$bytesptr%=�(�+infilelen%-!pointer):�state(statuswin%,11,0,0)
<�
F
P� �startcomp
Z!shift=8-res%
d!enhance=enhance% �1
n!pointer=ptr%
x!samplelen=infilelen%-1
�!filehandle=filehandle%
�stage%=0
�1ș "Sound_Configure" � ,,,log%:!logptr=log%!8
�+�text(0,"Converting to "+�res%+" bits")
��text(1,"")
�+!outptr%=(count% � 16) � (!enhance<<31)
�!outbuffstart=buffer%
�!filenameptr=savetextptr%
�!outbuffend=buffer%+20*1024
�outptr%?4=?�
�!byte=0:!bit=1:!count=0
��
�
� �assem
@� table 1 is a table of flags saying whether a value is used
G� table 2 is for converting the sample to a more compressed version
"6� table 3 is for the compressed version back again
,
6>� code% &4000,table1% 256,table2% 256,table3% 256,buff% 16
@� PASS=0 � 2 � 2
JP%=code%:[OPT PASS
T
^ \ --------------------------
h
r.convertto7bits
|LDR R0,pointer
�LDR R1,samplelen
�LDR R4,shift
�
.bit7loop
�LDRB R2,[R0]
�MOV R2,R2,LSR R4
�MOV R2,R2,LSL R4
�STRB R2,[R0],#1
�SUBS R1,R1,#1
�BNE bit7loop
�MOVS PC,R14
�
� \ --------------------------
�
.mirror
LDR R0,pointer
LDR R1,samplelen
&MVN R3,#126
0.mirrorloop
:LDRB R2,[R0],#1
DCMP R2,#128
NSTREQB R3,[R0,#-1]
XSUBS R1,R1,#1
bBNE mirrorloop
lMOVS PC,R14
v
� \ --------------------------
�
�.converttolog
�LDR R0,pointer
�LDR R1,samplelen
�LDR R2,logptr
�.converttologloop
�LDRB R3,[R0]
�LDRB R3,[R2,R3,LSL #5]
�STRB R3,[R0],#1
�SUBS R1,R1,#1
�BNE converttologloop
�MOVS PC,R14

 \ --------------------------

 .buildtable1
*LDR R0,pointer
4LDR R1,samplelen
>LDR R2,flagtable
H
MOV R4,#0
RMOV R3,#255
\.buildtable1loop1
fSTRB R4,[R2,R3]
pSUBS R3,R3,#1
zBPL buildtable1loop1
�MOV R4,#&FF
�.buildtable1loop2
�LDRB R3,[R0],#1
�STRB R4,[R2,R3]
�SUBS R1,R1,#1
�BNE buildtable1loop2
�MOVS PC,R14
�
�\ -
�
�.buildtable2lin
�LDR R2,flagtable
�LDR R3,table2ptr
LDR R4,table3ptr

MOV R0,#0

MOV R6,#0
$.buildtable2linloop
.� R1,R0,#128
8LDRB R5,[R2,R1]
B
TEQ R5,#0
LSTRNEB R6,[R3,R1]
VSTRNEB R1,[R4,R6]
`ADDNE R6,R6,#1
jADD R0,R0,#1
tCMP R0,#256
~BLT buildtable2linloop
�STR R6,table3len
�MOVS PC,R14
�
�\ -
�
�.buildtable2log
�LDR R2,flagtable
�LDR R3,table2ptr
�LDR R4,table3ptr
�LDRB R0,[R2,#1]
�LDRB R1,[R2,#0]
��R R0,R0,R1
STRB R0,[R2,#1]

STRB R0,[R2,#0]

MOV R0,#1

MOV R6,#0
(.buildtable2logloop
2SUBS R1,R0,#128
<RSBMI R1,R1,#0
FMOV R1,R1,LSL #1
P�RMI R1,R1,#1
ZLDRB R5,[R2,R1]
d
TEQ R5,#0
nSTRNEB R6,[R3,R1]
xSTRNEB R1,[R4,R6]
�ADDNE R6,R6,#1
�ADD R0,R0,#1
�CMP R0,#256
�BLT buildtable2logloop
�STR R6,table3len
�MOVS PC,R14
�
� \ --------------------------
�
�.converttonewformat
�LDR R0,pointer
�LDR R1,samplelen
�LDR R2,table2ptr
.newformatloop
LDRB R3,[R0]
LDRB R3,[R2,R3]
"STRB R3,[R0],#1
,SUBS R1,R1,#1
6BNE newformatloop
@MOVS PC,R14
J
T \ --------------------------
^
h.calculatedifferences
rLDR R0,pointer
|LDR R1,samplelen
�
MOV R2,#0
�
MOV R5,#0
�MVN R6,#126:\ =-127
�.calculatedifferencesloop
�LDRB R3,[R0]
�SUB R4,R3,R2
�ADD R4,R4,R5
�
MOV R5,#0
�
MOV R2,R3
�CMP R4,#127
�SUBGT R5,R4,#127
�MOVGT R4,#127
�
CMP R4,R6
SUBLT R5,R4,R6
MOVLT R4,R6
STRB R4,[R0],#1
&SUBS R1,R1,#1
0 BNE calculatedifferencesloop
:MOVS PC,R14
D
N \ --------------------------
X
b.pointer EQUD 0
l.flagtable EQUD table1%
v.table2ptr EQUD table2%
�.table3ptr EQUD table3%
�.table3len EQUD 0
�.logptr EQUD 0
�.samplelen EQUD 0
�.filehandle EQUD 0
�.buffptr EQUD buff%
�.count EQUD 0
�.byte EQUD 0
�.bit EQUD 0
�.maxbit EQUD 0
�.sign EQUD 0
�.shift EQUD 0
�.kilobyte EQUD 0
.kiloleft EQUD 0
.enhance EQUD 0
.outptr EQUD 0
 .outbuffstart EQUD 0
*.outbuffend EQUD 0
4.filenameptr EQUD 0
>
H!\ ---------------------------
R\      Compression...
\!\ ---------------------------
f
p.writelump
zSTMFD R13!,{R0-R5,R14}
�
MOV R0,#2
�LDR R1,filehandle
�LDR R2,outbuffstart
�LDR R3,outptr
�SUB R3,R3,R2
�SWI "OS_GBPB"
�LDR R2,outbuffstart
�STR R2,outptr
�LDR R1,filehandle
�MOV R0,#255
�SWI "OS_Args"
�MOV R0,#18
�MOV R2,#&FF0
�R R2,R2,#&D
LDR R1,filenameptr
SWI "OS_File"
$LDMFD R13!,{R0-R5,PC}
.
8!\ ---------------------------
B
L..putbyte:\ preserve everything, data in R2
VSTMFD R13!,{R0-R1}
`LDR R0,outptr
jLDR R1,outbuffend
tSTRB R2,[R0],#1
~STR R0,outptr
�
CMP R0,R1
�LDMFD R13!,{R0-R1}
�MOVLT PC,R14
�B writelump
�
�!\ ---------------------------
�
�.putbits
�\ r0 = value to write
�\ r1 = num of bits
�STMFD R13!,{R1-R4,R14}
�LDR R2,byte
LDR R3,bit


MOV R4,#1
.putloop

TST R0,R4
(�RNE R2,R2,R3
2MOV R3,R3,LSL #1
<TEQ R3,#256
FBNE nextbit
P
MOV R3,#1
Z0BL putbyte:\ preserve everything, data in R2
d
MOV R2,#0
n.nextbit
xMOV R4,R4,LSL #1
�SUBS R1,R1,#1
�BNE putloop
�STR R2,byte
�STR R3,bit
�LDMFD R13!,{R1-R4,PC}
�
� \ --------------------------
�
�.getmaxbit
�STMFD R13!,{R14}
�LDR R0,count
�ADD R0,R0,#1
�STR R0,count
MOV R0,#0:\ maxbit
MOV R1,#1:\ maxval
MOV R2,#0:\ sign
"MOV R3,#16
,LDR R4,pointer
6.getmaxbitloop
@LDRB R5,[R4],#1
JTST R5,#128
TMOVNE R5,R5,LSL #24
^MOVNE R5,R5,ASR #24
hRSBNE R5,R5,#0
r.whileloop
|
CMP R5,R1
�MOVGE R1,R1,LSL #1
�ADDGE R0,R0,#1
�BGE whileloop
�
.endwhile
�SUBS R3,R3,#1
�BNE getmaxbitloop
�
�
.signscan
�LDR R4,pointer
�LDRB R5,[R4],#1
�TST R5,#128
�MOVNE R2,#2
��Q R2,#1
 MOV R3,#15
 .signscanloop
 LDRB R5,[R4],#1
 &TST R5,#128
 0TEQEQ R2,#2
 :�Q R2,#0
 DBEQ signscanout
 NTST R5,#128
 XTEQNE R2,#2
 bMOVNE R2,#0
 lBNE signscanout
 vSUBS R3,R3,#1
 �BNE signscanloop
 �.signscanout
 �STR R2,sign
 �STR R0,maxbit
 �
 �
MOV R1,#4
 �
TEQ R2,#0
 ��REQ R0,R0,#8
 �
MOV R5,R0
 �BL putbits
 �
TEQ R5,#0
 �BEQ writeout
 �LDR R4,pointer
!MOV R3,#16
!
!
TEQ R2,#0
! BEQ writesigned
!*
!4.writeunsigned
!>SUB R0,R2,#1
!H
MOV R1,#1
!RBL putbits
!\LDR R1,maxbit
!f.unsignedloop
!pLDRB R0,[R4],#1
!zTST R0,#128
!�RSBNE R0,R0,#0
!�� R0,R0,#255
!�BL putbits
!�SUBS R3,R3,#1
!�BNE unsignedloop
!�B writeout
!�
!�.writesigned
!�LDR R1,maxbit
!�
MOV R6,#1
!�MOV R6,R6,LSL R1
!�ADD R1,R1,#1
!�.signedloop
"LDRB R0,[R4],#1
"TST R0,#128
"RSBNE R0,R0,#0
"$� R0,R0,#255
".�RNE R0,R0,R6
"8BL putbits
"BSUBS R3,R3,#1
"LBNE signedloop
"V
"`
.writeout
"jLDR R0,pointer
"tLDR R1,samplelen
"~ADD R0,R0,#16
"�SUB R1,R1,#16
"�STR R0,pointer
"�STR R1,samplelen
"�LDMFD R13!,{PC}
"�
"�\ sign = 0  \ signed
"�\      = 1  \ all positive
"�\      = 2  \ all negative
"�
"�\ -------------------------
"�
"�.control
#STMFD R13!,{R14}
#
MOV R0,#4096
#STR R0,kilobyte
#.controlloop
#(BL getmaxbit
#2LDR R0,samplelen
#<
CMP R0,#0
#FLDMLEFD R13!,{PC}
#PLDR R3,kilobyte
#ZSUBS R3,R3,#16
#dSTR R3,kilobyte
#nBGT controlloop
#xLDMFD R13!,{PC}
#�
#�\ -------------------------
#�\     Decompression...
#�\ -------------------------
#�
#�.decompinptr EQUD 0
#�.decompoutptr EQUD 0
#�.lastbyte EQUD 0
#�
#�.getbits
#�STMFD R13!,{R0,R2-R4,R14}
#�\ r6 = source ptr
#�MOV R1,#0:\ outbyte%
$MOV R2,#1:\ output%
$LDR R3,bit
$LDR R4,byte
$".getbitloop
$,TEQ R3,#256
$6LDREQB R4,[R6],#1
$@�Q R3,#1
$J
TST R4,R3
$T�RNE R1,R1,R2
$^MOV R2,R2,LSL #1
$hMOV R3,R3,LSL #1
$rSUBS R0,R0,#1
$|BNE getbitloop
$�STR R3,bit
$�STR R4,byte
$�LDMFD R13!,{R0,R2-R4,PC}
$�
$�.decompress
$�STMFD R13!,{R14}
$�LDR R3,lastbyte
$�LDR R6,decompinptr
$�LDR R4,table3ptr
$�LDR R8,decompoutptr
$�\ r6 = ptr to read from
$�\ r8 = ptr to write to
$�\ r4 = converttable
%\ r3 = last byte
%
MOV R0,#4
%BL getbits
%&
TEQ R1,#0
%0BEQ unpackzero
%:
TST R1,#8
%DBNE unpacksigned
%N.unpackunsigned
%X
MOV R2,R1
%b
MOV R0,#1
%lBL getbits
%v
MOV R0,R2
%�
TEQ R1,#0
%�BEQ unpackpositive
%�
%�.unpacknegative
%�MOV R2,#16
%�.unpacknegloop
%�BL getbits
%�RSB R1,R1,#0
%�ADD R3,R3,R1
%�LDRB R1,[R4,R3]
%�STRB R1,[R8],#1
%�SUBS R2,R2,#1
%�BNE unpacknegloop
&B unpackdone
&
&.unpackpositive
& MOV R2,#16
&*.unpackposloop
&4BL getbits
&>ADD R3,R3,R1
&HLDRB R1,[R4,R3]
&RSTRB R1,[R8],#1
&\SUBS R2,R2,#1
&fBNE unpackposloop
&pB unpackdone
&z
&�.unpackzero
&�MOV R2,#16
&�LDRB R1,[R4,R3]
&�
.zeroloop
&�STRB R1,[R8],#1
&�SUBS R2,R2,#1
&�BNE zeroloop
&�B unpackdone
&�
&�.unpacksigned
&�� R0,R1,#7
&�MOV R10,#1
&�MOV R10,R10,LSL R0
'SUB R11,R10,#1
'ADD R0,R0,#1
'MOV R2,#16
'$.unpacksignedloop
'.BL getbits
'8TST R1,R10
'B� R1,R1,R11
'LRSBNE R1,R1,#0
'VADD R3,R3,R1
'`LDRB R1,[R4,R3]
'jSTRB R1,[R8],#1
'tSUBS R2,R2,#1
'~BNE unpacksignedloop
'�
'�.unpackdone
'�STR R3,lastbyte
'�STR R6,decompinptr
'�STR R4,table3ptr
'�STR R8,decompoutptr
'�LDMFD R13!,{PC}
'�
'�]�
'��
�
00000000  0d 00 0a 25 f4 20 3e 20  3a 34 2e 24 2e 4d 79 50  |...%. > :4.$.MyP|
00000010  44 2e 21 43 6f 6d 70 72  65 73 73 2e 21 52 75 6e  |D.!Compress.!Run|
00000020  49 6d 61 67 65 0d 00 14  04 0d 00 1e 12 66 69 6c  |Image........fil|
00000030  65 74 79 70 65 25 3d 26  33 35 30 0d 00 28 13 66  |etype%=&350..(.f|
00000040  74 24 3d c3 7e 66 69 6c  65 74 79 70 65 25 0d 00  |t$=.~filetype%..|
00000050  32 09 f2 69 6e 69 74 0d  00 3c 12 24 62 6c 6f 63  |2..init..<.$bloc|
00000060  6b 25 3d 22 54 41 53 4b  22 0d 00 46 3a c8 99 20  |k%="TASK"..F:.. |
00000070  22 57 69 6d 70 5f 49 6e  69 74 69 61 6c 69 73 65  |"Wimp_Initialise|
00000080  22 2c 32 30 30 2c 21 62  6c 6f 63 6b 25 2c 22 43  |",200,!block%,"C|
00000090  6f 6d 70 72 65 73 73 6f  72 22 20 b8 20 2c 74 61  |ompressor" . ,ta|
000000a0  73 6b 25 0d 00 50 0e f2  74 65 6d 70 6c 61 74 65  |sk%..P..template|
000000b0  73 0d 00 5a 09 f2 69 63  6f 6e 0d 00 64 0f f2 6b  |s..Z..icon..d..k|
000000c0  69 6c 6c 73 74 61 74 75  73 0d 00 6e 0b 71 75 69  |illstatus..n.qui|
000000d0  74 25 3d a3 0d 00 78 04  0d 00 82 0e 63 6f 6e 74  |t%=...x.....cont|
000000e0  72 6f 6c 25 3d 30 0d 00  8c 0e ee 20 85 20 f2 65  |rol%=0..... . .e|
000000f0  72 72 6f 72 0d 00 96 05  f5 0d 00 a0 23 c8 99 20  |rror........#.. |
00000100  22 57 69 6d 70 5f 50 6f  6c 6c 22 2c 6d 61 73 6b  |"Wimp_Poll",mask|
00000110  25 2c 70 6f 6c 6c 25 20  b8 20 72 25 0d 00 aa 0b  |%,poll% . r%....|
00000120  c8 8e 20 72 25 20 ca 0d  00 b4 07 c9 20 30 0d 00  |.. r% ...... 0..|
00000130  be 1b 20 20 20 6f 6c 64  63 6f 6e 74 72 6f 6c 25  |..   oldcontrol%|
00000140  3d 63 6f 6e 74 72 6f 6c  25 0d 00 c8 21 20 20 20  |=control%...!   |
00000150  e7 20 63 6f 6e 74 72 6f  6c 25 3d 31 20 8c 20 f2  |. control%=1 . .|
00000160  64 6f 63 6f 6d 70 72 65  73 73 0d 00 d2 1f 20 20  |docompress....  |
00000170  20 e7 20 63 6f 6e 74 72  6f 6c 25 3d 32 20 8c 20  | . control%=2 . |
00000180  f2 64 6f 65 78 70 61 6e  64 0d 00 dc 25 20 20 20  |.doexpand...%   |
00000190  e7 20 63 6f 6e 74 72 6f  6c 25 3d 30 20 8c 20 6d  |. control%=0 . m|
000001a0  61 73 6b 25 3d 6d 61 73  6b 25 20 84 20 31 0d 00  |ask%=mask% . 1..|
000001b0  e6 81 20 20 20 e7 20 6f  6c 64 63 6f 6e 74 72 6f  |..   . oldcontro|
000001c0  6c 25 3e 30 20 80 20 63  6f 6e 74 72 6f 6c 25 3d  |l%>0 . control%=|
000001d0  30 20 8c 20 c8 99 20 22  57 69 6d 70 5f 53 6c 6f  |0 . .. "Wimp_Slo|
000001e0  74 53 69 7a 65 22 2c 73  6c 6f 74 73 69 7a 65 25  |tSize",slotsize%|
000001f0  2c 2d 31 3a 24 69 63 6f  6e 74 65 78 74 25 3d 22  |,-1:$icontext%="|
00000200  21 63 6f 6d 70 72 65 73  73 22 3a f2 73 74 61 74  |!compress":.stat|
00000210  65 28 2d 31 2c 74 61 73  6b 69 63 6f 6e 25 2c 30  |e(-1,taskicon%,0|
00000220  2c 30 29 3a f2 6b 69 6c  6c 73 74 61 74 75 73 0d  |,0):.killstatus.|
00000230  00 f0 07 c9 20 32 0d 00  fa 22 20 20 20 c8 99 20  |.... 2..."   .. |
00000240  22 57 69 6d 70 5f 4f 70  65 6e 57 69 6e 64 6f 77  |"Wimp_OpenWindow|
00000250  22 2c 2c 70 6f 6c 6c 25  0d 01 04 07 c9 20 33 0d  |",,poll%..... 3.|
00000260  01 0e 46 20 20 20 e7 20  21 70 6f 6c 6c 25 3d 73  |..F   . !poll%=s|
00000270  61 76 65 77 69 6e 25 20  80 20 63 6f 6e 74 72 6f  |avewin% . contro|
00000280  6c 25 3d 30 20 8c 20 c8  99 22 57 69 6d 70 5f 53  |l%=0 . .."Wimp_S|
00000290  6c 6f 74 53 69 7a 65 22  2c 73 6c 6f 74 73 69 7a  |lotSize",slotsiz|
000002a0  65 25 2c 2d 31 0d 01 18  23 20 20 20 c8 99 20 22  |e%,-1...#   .. "|
000002b0  57 69 6d 70 5f 43 6c 6f  73 65 57 69 6e 64 6f 77  |Wimp_CloseWindow|
000002c0  22 2c 2c 70 6f 6c 6c 25  0d 01 22 15 c9 20 36 3a  |",,poll%..".. 6:|
000002d0  f2 63 6c 69 63 6b 28 70  6f 6c 6c 25 29 0d 01 2c  |.click(poll%)..,|
000002e0  11 c9 20 37 3a f2 64 72  61 67 64 6f 6e 65 0d 01  |.. 7:.dragdone..|
000002f0  36 1a c9 20 39 3a f2 6d  65 6e 75 73 65 6c 65 63  |6.. 9:.menuselec|
00000300  74 28 70 6f 6c 6c 25 29  0d 01 40 1b c9 20 31 37  |t(poll%)..@.. 17|
00000310  2c 31 38 3a f2 6d 65 73  73 61 67 65 28 70 6f 6c  |,18:.message(pol|
00000320  6c 25 29 0d 01 4a 05 cb  0d 01 54 0b fd 20 71 75  |l%)..J....T.. qu|
00000330  69 74 25 0d 01 5e 2a c8  99 20 22 57 69 6d 70 5f  |it%..^*.. "Wimp_|
00000340  53 6c 6f 74 53 69 7a 65  22 2c 73 6c 6f 74 73 69  |SlotSize",slotsi|
00000350  7a 65 25 2c 2d 31 3a f4  20 5c 5c 5c 5c 0d 01 68  |ze%,-1:. \\\\..h|
00000360  17 c8 99 20 22 57 69 6d  70 5f 43 6c 6f 73 65 44  |... "Wimp_CloseD|
00000370  6f 77 6e 22 0d 01 72 05  e0 0d 01 7c 04 0d 01 86  |own"..r....|....|
00000380  0b dd 20 f2 69 6e 69 74  0d 01 90 27 de 20 62 6c  |.. .init...'. bl|
00000390  6f 63 6b 25 20 26 34 30  30 30 2c 6d 65 6e 75 25  |ock% &4000,menu%|
000003a0  20 31 30 32 34 2c 70 6f  6c 6c 25 20 32 35 36 0d  | 1024,poll% 256.|
000003b0  01 9a 2c de 20 62 75 66  66 65 72 25 20 32 30 2a  |..,. buffer% 20*|
000003c0  31 30 32 34 2c 74 61 62  6c 65 33 25 20 32 35 36  |1024,table3% 256|
000003d0  2c 69 64 69 72 25 20 31  30 32 34 0d 01 a4 11 de  |,idir% 1024.....|
000003e0  20 74 61 62 6c 65 34 25  20 32 35 36 0d 01 ae 17  | table4% 256....|
000003f0  71 75 69 74 25 3d a3 3a  69 70 74 72 25 3d 69 64  |quit%=.:iptr%=id|
00000400  69 72 25 0d 01 b8 0f 6d  61 73 6b 25 3d 26 31 38  |ir%....mask%=&18|
00000410  33 31 0d 01 c2 3d 63 6f  6e 74 72 6f 6c 25 3d 30  |31...=control%=0|
00000420  3a f4 20 30 20 2d 20 64  6f 20 6e 6f 74 68 69 6e  |:. 0 - do nothin|
00000430  67 2c 20 31 20 2d 20 63  6f 6d 70 72 65 73 73 2c  |g, 1 - compress,|
00000440  20 32 20 2d 20 64 65 63  6f 6d 70 72 65 73 73 0d  | 2 - decompress.|
00000450  01 cc 15 72 65 73 25 3d  38 3a 65 6e 68 61 6e 63  |...res%=8:enhanc|
00000460  65 25 3d 30 0d 01 d6 0f  70 72 65 76 6f 70 65 6e  |e%=0....prevopen|
00000470  25 3d 30 0d 01 e0 28 c8  99 20 22 57 69 6d 70 5f  |%=0...(.. "Wimp_|
00000480  53 6c 6f 74 53 69 7a 65  22 2c 2d 31 2c 2d 31 20  |SlotSize",-1,-1 |
00000490  b8 20 73 6c 6f 74 73 69  7a 65 25 0d 01 ea 28 c8  |. slotsize%...(.|
000004a0  99 20 22 53 6f 75 6e 64  5f 43 6f 6e 66 69 67 75  |. "Sound_Configu|
000004b0  72 65 22 20 b8 20 2c 2c  2c 61 25 3a 61 25 3d 61  |re" . ,,,a%:a%=a|
000004c0  25 21 38 0d 01 f4 09 4e  25 3d 2d 31 0d 01 fe 10  |%!8....N%=-1....|
000004d0  e3 20 41 25 3d 30 20 b8  20 31 32 37 0d 02 08 16  |. A%=0 . 127....|
000004e0  49 25 3d 28 61 25 3f 28  41 25 3c 3c 35 29 29 20  |I%=(a%?(A%<<5)) |
000004f0  2f 32 0d 02 12 0c c8 95  20 49 25 3e 4e 25 0d 02  |/2...... I%>N%..|
00000500  1c 09 4e 25 2b 3d 31 0d  02 26 15 74 61 62 6c 65  |..N%+=1..&.table|
00000510  34 25 3f 28 4e 25 2a 32  29 3d 41 25 0d 02 30 1d  |4%?(N%*2)=A%..0.|
00000520  74 61 62 6c 65 34 25 3f  28 28 4e 25 2a 32 29 2b  |table4%?((N%*2)+|
00000530  31 29 3d 32 35 36 2d 41  25 0d 02 3a 05 ce 0d 02  |1)=256-A%..:....|
00000540  44 05 ed 0d 02 4e 04 0d  02 58 0a f2 61 73 73 65  |D....N...X..asse|
00000550  6d 0d 02 62 11 66 69 72  73 74 77 72 69 74 65 25  |m..b.firstwrite%|
00000560  3d 30 0d 02 6c 05 e1 0d  02 76 04 0d 02 80 0c dd  |=0..l....v......|
00000570  20 f2 65 72 72 6f 72 0d  02 8a 1a c8 99 20 22 58  | .error...... "X|
00000580  57 69 6d 70 5f 44 72 61  67 42 6f 78 22 2c 2c 2d  |Wimp_DragBox",,-|
00000590  31 0d 02 94 1d c8 99 20  22 58 57 69 6d 70 5f 43  |1...... "XWimp_C|
000005a0  72 65 61 74 65 4d 65 6e  75 22 2c 2c 2d 31 0d 02  |reateMenu",,-1..|
000005b0  9e 19 c8 99 20 22 58 48  6f 75 72 67 6c 61 73 73  |.... "XHourglass|
000005c0  5f 53 6d 61 73 68 22 0d  02 a8 1f 21 62 6c 6f 63  |_Smash"....!bloc|
000005d0  6b 25 3d 9f 3a 24 28 62  6c 6f 63 6b 25 2b 34 29  |k%=.:$(block%+4)|
000005e0  3d f6 24 2b bd 30 0d 02  b2 2f c8 99 20 22 57 69  |=.$+.0.../.. "Wi|
000005f0  6d 70 5f 52 65 70 6f 72  74 45 72 72 6f 72 22 2c  |mp_ReportError",|
00000600  62 6c 6f 63 6b 25 2c 31  2c 22 43 6f 6d 70 72 65  |block%,1,"Compre|
00000610  73 73 6f 72 22 0d 02 bc  19 e7 20 63 6f 6e 74 72  |ssor"..... contr|
00000620  6f 6c 25 3e 30 20 8c 20  f2 61 62 6f 72 74 0d 02  |ol%>0 . .abort..|
00000630  c6 05 e1 0d 02 d0 04 0d  02 da 12 dd 20 f2 6d 65  |............ .me|
00000640  73 73 61 67 65 28 70 25  29 0d 02 e4 0e c8 8e 20  |ssage(p%)...... |
00000650  70 25 21 31 36 20 ca 0d  02 ee 0f c9 20 30 3a 71  |p%!16 ...... 0:q|
00000660  75 69 74 25 3d b9 0d 02  f8 15 c9 20 31 3a f2 64  |uit%=...... 1:.d|
00000670  61 74 61 73 61 76 65 28  70 25 29 0d 03 02 14 c9  |atasave(p%).....|
00000680  20 32 3a f2 73 61 76 65  61 63 6b 28 70 25 29 0d  | 2:.saveack(p%).|
00000690  03 0c 15 c9 20 33 3a f2  64 61 74 61 6c 6f 61 64  |.... 3:.dataload|
000006a0  28 70 25 29 0d 03 16 20  c9 20 38 3a e7 20 63 6f  |(p%)... . 8:. co|
000006b0  6e 74 72 6f 6c 25 3e 30  20 8c 20 f2 74 65 73 74  |ntrol%>0 . .test|
000006c0  71 75 69 74 0d 03 20 05  cb 0d 03 2a 05 e1 0d 03  |quit.. ....*....|
000006d0  34 04 0d 03 3e 13 dd 20  f2 64 61 74 61 73 61 76  |4...>.. .datasav|
000006e0  65 28 70 25 29 0d 03 48  2c f4 20 63 61 6c 6c 65  |e(p%)..H,. calle|
000006f0  64 20 77 68 65 6e 20 61  6e 20 61 70 70 6c 69 63  |d when an applic|
00000700  61 74 69 6f 6e 20 73 61  76 65 73 20 74 6f 20 75  |ation saves to u|
00000710  73 0d 03 52 14 e7 20 70  25 21 34 3d 74 61 73 6b  |s..R.. p%!4=task|
00000720  25 20 8c 20 e1 0d 03 5c  0c 70 25 21 33 36 3d 2d  |% . ...\.p%!36=-|
00000730  31 0d 03 66 1e 24 28 70  25 2b 34 34 29 3d 22 3c  |1..f.$(p%+44)="<|
00000740  57 69 6d 70 24 53 63 72  61 70 3e 22 2b bd 30 0d  |Wimp$Scrap>"+.0.|
00000750  03 70 1d 21 70 25 3d 36  30 3a 70 25 21 31 36 3d  |.p.!p%=60:p%!16=|
00000760  32 3a 70 25 21 31 32 3d  70 25 21 38 0d 03 7a 45  |2:p%!12=p%!8..zE|
00000770  e7 20 70 25 21 34 30 3d  66 69 6c 65 74 79 70 65  |. p%!40=filetype|
00000780  25 20 84 20 70 25 21 34  30 3d 26 44 33 43 20 8c  |% . p%!40=&D3C .|
00000790  20 c8 99 20 22 57 69 6d  70 5f 53 65 6e 64 4d 65  | .. "Wimp_SendMe|
000007a0  73 73 61 67 65 22 2c 31  37 2c 70 25 2c 70 25 21  |ssage",17,p%,p%!|
000007b0  34 0d 03 84 05 e1 0d 03  8e 04 0d 03 98 13 dd 20  |4.............. |
000007c0  f2 64 61 74 61 6c 6f 61  64 28 70 25 29 0d 03 a2  |.dataload(p%)...|
000007d0  37 f4 20 63 61 6c 6c 65  64 20 77 68 65 6e 20 61  |7. called when a|
000007e0  20 66 69 6c 65 20 69 73  20 64 72 61 67 67 65 64  | file is dragged|
000007f0  20 68 65 72 65 20 66 72  6f 6d 20 74 68 65 20 66  | here from the f|
00000800  69 6c 65 72 0d 03 ac 3b  f4 20 6f 72 20 77 68 65  |iler...;. or whe|
00000810  6e 20 61 6e 6f 74 68 65  72 20 61 70 70 6c 69 63  |n another applic|
00000820  61 74 69 6f 6e 20 68 61  73 20 73 61 76 65 64 20  |ation has saved |
00000830  74 6f 20 3c 57 69 6d 70  24 53 63 72 61 70 3e 0d  |to <Wimp$Scrap>.|
00000840  03 b6 28 e7 20 70 25 21  34 30 3c 3e 26 44 33 43  |..(. p%!40<>&D3C|
00000850  20 80 20 70 25 21 34 30  3c 3e 66 69 6c 65 74 79  | . p%!40<>filety|
00000860  70 65 25 20 8c 20 e1 0d  03 c0 14 e7 20 63 6f 6e  |pe% . ...... con|
00000870  74 72 6f 6c 25 3e 30 20  8c 20 e1 0d 03 ca 25 75  |trol%>0 . ....%u|
00000880  25 3d 70 25 2b 34 34 3a  c8 95 20 3f 75 25 3c 3e  |%=p%+44:.. ?u%<>|
00000890  30 3a 75 25 2b 3d 31 3a  ce 3a 3f 75 25 3d 31 33  |0:u%+=1:.:?u%=13|
000008a0  0d 03 d4 15 e7 20 24 28  70 25 2b 34 34 29 3d 22  |..... $(p%+44)="|
000008b0  22 20 8c 20 e1 0d 03 de  24 c8 99 20 22 4f 53 5f  |" . ....$.. "OS_|
000008c0  46 69 6c 65 22 2c 31 37  2c 70 25 2b 34 34 20 b8  |File",17,p%+44 .|
000008d0  20 61 25 2c 2c 2c 2c 62  25 0d 03 e8 17 e7 20 61  | a%,,,,b%..... a|
000008e0  25 3c 3e 31 20 84 20 62  25 3c 3d 31 20 8c 20 e1  |%<>1 . b%<=1 . .|
000008f0  0d 03 f2 2b c8 99 20 22  57 69 6d 70 5f 53 6c 6f  |...+.. "Wimp_Slo|
00000900  74 53 69 7a 65 22 2c 73  6c 6f 74 73 69 7a 65 25  |tSize",slotsize%|
00000910  2b 62 25 2c 2d 31 20 b8  20 61 25 0d 03 fc 90 e7  |+b%,-1 . a%.....|
00000920  20 61 25 2d 73 6c 6f 74  73 69 7a 65 25 3c 62 25  | a%-slotsize%<b%|
00000930  20 f2 63 61 6e 63 65 6c  62 6f 78 28 22 4e 6f 74  | .cancelbox("Not|
00000940  20 65 6e 6f 75 67 68 20  6d 65 6d 6f 72 79 20 61  | enough memory a|
00000950  76 61 69 6c 61 62 6c 65  22 29 3a 21 62 6c 6f 63  |vailable"):!bloc|
00000960  6b 25 3d 73 61 76 65 77  69 6e 25 3a c8 99 20 22  |k%=savewin%:.. "|
00000970  57 69 6d 70 5f 43 6c 6f  73 65 57 69 6e 64 6f 77  |Wimp_CloseWindow|
00000980  22 2c 2c 62 6c 6f 63 6b  25 3a c8 99 20 22 57 69  |",,block%:.. "Wi|
00000990  6d 70 5f 53 6c 6f 74 53  69 7a 65 22 2c 73 6c 6f  |mp_SlotSize",slo|
000009a0  74 73 69 7a 65 25 2c 2d  31 3a e1 0d 04 06 11 69  |tsize%,-1:.....i|
000009b0  6e 66 69 6c 65 6c 65 6e  25 3d 62 25 0d 04 10 15  |nfilelen%=b%....|
000009c0  c8 99 20 22 48 6f 75 72  67 6c 61 73 73 5f 4f 6e  |.. "Hourglass_On|
000009d0  22 0d 04 1a 24 c8 99 20  22 58 4f 53 5f 46 69 6c  |"...$.. "XOS_Fil|
000009e0  65 22 2c 31 36 2c 70 25  2b 34 34 2c 93 20 b8 20  |e",16,p%+44,. . |
000009f0  61 25 3b 62 25 0d 04 24  35 e7 20 24 28 70 25 2b  |a%;b%..$5. $(p%+|
00000a00  34 34 29 3d 22 3c 57 69  6d 70 24 53 63 72 61 70  |44)="<Wimp$Scrap|
00000a10  3e 22 20 8c 20 c8 99 20  22 58 4f 53 5f 46 69 6c  |>" . .. "XOS_Fil|
00000a20  65 22 2c 36 2c 70 25 2b  34 34 0d 04 2e 9d e7 20  |e",6,p%+44..... |
00000a30  28 62 25 20 80 20 31 29  3c 3e 30 20 8c 75 25 3d  |(b% . 1)<>0 .u%=|
00000a40  61 25 2b 34 3a 61 24 3d  22 22 3a c8 95 20 3f 75  |a%+4:a$="":.. ?u|
00000a50  25 3c 3e 30 3a 61 24 2b  3d bd 28 3f 75 25 29 3a  |%<>0:a$+=.(?u%):|
00000a60  75 25 2b 3d 31 3a ce 3a  f2 63 61 6e 63 65 6c 62  |u%+=1:.:.cancelb|
00000a70  6f 78 28 61 24 29 3a 21  62 6c 6f 63 6b 25 3d 73  |ox(a$):!block%=s|
00000a80  61 76 65 77 69 6e 25 3a  c8 99 20 22 57 69 6d 70  |avewin%:.. "Wimp|
00000a90  5f 43 6c 6f 73 65 57 69  6e 64 6f 77 22 2c 2c 62  |_CloseWindow",,b|
00000aa0  6c 6f 63 6b 25 3a c8 99  20 22 57 69 6d 70 5f 53  |lock%:.. "Wimp_S|
00000ab0  6c 6f 74 53 69 7a 65 22  2c 73 6c 6f 74 73 69 7a  |lotSize",slotsiz|
00000ac0  65 25 2c 2d 31 3a e1 0d  04 38 16 c8 99 20 22 48  |e%,-1:...8... "H|
00000ad0  6f 75 72 67 6c 61 73 73  5f 4f 66 66 22 0d 04 42  |ourglass_Off"..B|
00000ae0  3e c8 95 20 a7 24 28 70  25 2b 34 34 29 2c 22 3a  |>.. .$(p%+44),":|
00000af0  22 29 3e 30 3a 24 28 70  25 2b 34 34 29 3d c1 24  |")>0:$(p%+44)=.$|
00000b00  28 70 25 2b 34 34 29 2c  a7 24 28 70 25 2b 34 34  |(p%+44),.$(p%+44|
00000b10  29 2c 22 3a 22 29 2b 31  29 3a ce 0d 04 4c 3e c8  |),":")+1):...L>.|
00000b20  95 20 a7 24 28 70 25 2b  34 34 29 2c 22 2e 22 29  |. .$(p%+44),".")|
00000b30  3e 30 3a 24 28 70 25 2b  34 34 29 3d c1 24 28 70  |>0:$(p%+44)=.$(p|
00000b40  25 2b 34 34 29 2c a7 24  28 70 25 2b 34 34 29 2c  |%+44),.$(p%+44),|
00000b50  22 2e 22 29 2b 31 29 3a  ce 0d 04 56 47 e7 20 24  |".")+1):...VG. $|
00000b60  28 70 25 2b 34 34 29 3d  22 3c 57 69 6d 70 24 53  |(p%+44)="<Wimp$S|
00000b70  63 72 61 70 3e 22 20 8c  24 73 61 76 65 74 65 78  |crap>" .$savetex|
00000b80  74 70 74 72 25 3d 22 22  20 8b 24 73 61 76 65 74  |tptr%="" .$savet|
00000b90  65 78 74 70 74 72 25 3d  24 28 70 25 2b 34 34 29  |extptr%=$(p%+44)|
00000ba0  0d 04 60 12 e7 20 70 25  21 34 30 3d 26 44 33 43  |..`.. p%!40=&D3C|
00000bb0  20 8c 0d 04 6a 1e 24 66  69 6c 65 74 79 70 65 70  | ...j.$filetypep|
00000bc0  74 72 25 3d 22 53 66 69  6c 65 5f 22 2b 66 74 24  |tr%="Sfile_"+ft$|
00000bd0  0d 04 74 33 e7 20 24 73  61 76 65 74 65 78 74 70  |..t3. $savetextp|
00000be0  74 72 25 3d 22 22 20 8c  20 24 73 61 76 65 74 65  |tr%="" . $savete|
00000bf0  78 74 70 74 72 25 3d 22  43 6f 6d 70 72 65 73 73  |xtptr%="Compress|
00000c00  65 64 22 0d 04 7e 1e 24  6d 6f 64 65 70 74 72 25  |ed"..~.$modeptr%|
00000c10  3d 22 43 6f 6d 70 72 65  73 73 69 6e 67 2e 2e 2e  |="Compressing...|
00000c20  22 0d 04 88 1e 24 62 79  74 65 73 70 74 72 25 3d  |"....$bytesptr%=|
00000c30  c3 28 69 6e 66 69 6c 65  6c 65 6e 25 2d 31 29 0d  |.(infilelen%-1).|
00000c40  04 92 05 cc 0d 04 9c 1d  24 66 69 6c 65 74 79 70  |........$filetyp|
00000c50  65 70 74 72 25 3d 22 53  66 69 6c 65 5f 44 33 43  |eptr%="Sfile_D3C|
00000c60  22 0d 04 a6 2f e7 20 24  73 61 76 65 74 65 78 74  |".../. $savetext|
00000c70  70 74 72 25 3d 22 22 20  8c 20 24 73 61 76 65 74  |ptr%="" . $savet|
00000c80  65 78 74 70 74 72 25 3d  22 53 61 6d 70 6c 65 22  |extptr%="Sample"|
00000c90  0d 04 b0 20 24 6d 6f 64  65 70 74 72 25 3d 22 44  |... $modeptr%="D|
00000ca0  65 63 6f 6d 70 72 65 73  73 69 6e 67 2e 2e 2e 22  |ecompressing..."|
00000cb0  0d 04 ba 27 24 62 79 74  65 73 70 74 72 25 3d c3  |...'$bytesptr%=.|
00000cc0  28 28 28 21 93 29 20 80  20 26 37 46 46 46 46 46  |(((!.) . &7FFFFF|
00000cd0  46 46 29 2a 31 36 29 0d  04 c4 05 cd 0d 04 ce 0f  |FF)*16).........|
00000ce0  f2 74 65 78 74 28 30 2c  22 22 29 0d 04 d8 0f f2  |.text(0,"").....|
00000cf0  74 65 78 74 28 31 2c 22  22 29 0d 04 e2 1c f2 73  |text(1,"").....s|
00000d00  74 61 74 65 28 73 74 61  74 75 73 77 69 6e 25 2c  |tate(statuswin%,|
00000d10  36 2c 30 2c 30 29 0d 04  ec 1d f2 73 74 61 74 65  |6,0,0).....state|
00000d20  28 73 74 61 74 75 73 77  69 6e 25 2c 31 31 2c 30  |(statuswin%,11,0|
00000d30  2c 30 29 0d 04 f6 31 f2  73 74 61 74 65 28 73 61  |,0)...1.state(sa|
00000d40  76 65 77 69 6e 25 2c 31  2c 30 2c 30 29 3a f2 73  |vewin%,1,0,0):.s|
00000d50  74 61 74 65 28 73 61 76  65 77 69 6e 25 2c 30 2c  |tate(savewin%,0,|
00000d60  30 2c 30 29 0d 05 00 15  69 6e 66 69 6c 65 74 79  |0,0)....infilety|
00000d70  70 65 25 3d 70 25 21 34  30 0d 05 0a 14 21 62 6c  |pe%=p%!40....!bl|
00000d80  6f 63 6b 25 3d 73 61 76  65 77 69 6e 25 0d 05 14  |ock%=savewin%...|
00000d90  24 c8 99 20 22 57 69 6d  70 5f 47 65 74 57 69 6e  |$.. "Wimp_GetWin|
00000da0  64 6f 77 53 74 61 74 65  22 2c 2c 62 6c 6f 63 6b  |dowState",,block|
00000db0  25 0d 05 1e 10 62 6c 6f  63 6b 25 21 32 38 3d 2d  |%....block%!28=-|
00000dc0  31 0d 05 28 19 61 25 3d  62 6c 6f 63 6b 25 21 31  |1..(.a%=block%!1|
00000dd0  32 2d 62 6c 6f 63 6b 25  21 34 0d 05 32 19 62 25  |2-block%!4..2.b%|
00000de0  3d 62 6c 6f 63 6b 25 21  31 36 2d 62 6c 6f 63 6b  |=block%!16-block|
00000df0  25 21 38 0d 05 3c 17 62  6c 6f 63 6b 25 21 34 3d  |%!8..<.block%!4=|
00000e00  70 25 21 32 38 2d 61 25  2f 32 0d 05 46 17 62 6c  |p%!28-a%/2..F.bl|
00000e10  6f 63 6b 25 21 38 3d 70  25 21 33 32 2d 62 25 2f  |ock%!8=p%!32-b%/|
00000e20  32 0d 05 50 19 62 6c 6f  63 6b 25 21 31 32 3d 62  |2..P.block%!12=b|
00000e30  6c 6f 63 6b 25 21 34 2b  61 25 0d 05 5a 19 62 6c  |lock%!4+a%..Z.bl|
00000e40  6f 63 6b 25 21 31 36 3d  62 6c 6f 63 6b 25 21 38  |ock%!16=block%!8|
00000e50  2b 62 25 0d 05 64 20 c8  99 20 22 57 69 6d 70 5f  |+b%..d .. "Wimp_|
00000e60  4f 70 65 6e 57 69 6e 64  6f 77 22 2c 2c 62 6c 6f  |OpenWindow",,blo|
00000e70  63 6b 25 0d 05 6e 41 c8  99 20 22 57 69 6d 70 5f  |ck%..nA.. "Wimp_|
00000e80  53 65 74 43 61 72 65 74  50 6f 73 69 74 69 6f 6e  |SetCaretPosition|
00000e90  22 2c 73 61 76 65 77 69  6e 25 2c 31 2c 30 2c 30  |",savewin%,1,0,0|
00000ea0  2c 2d 31 2c a9 28 24 73  61 76 65 74 65 78 74 70  |,-1,.($savetextp|
00000eb0  74 72 25 29 0d 05 78 0e  70 25 21 31 32 3d 70 25  |tr%)..x.p%!12=p%|
00000ec0  21 38 0d 05 82 0b 70 25  21 31 36 3d 34 0d 05 8c  |!8....p%!16=4...|
00000ed0  24 c8 99 20 22 57 69 6d  70 5f 53 65 6e 64 4d 65  |$.. "Wimp_SendMe|
00000ee0  73 73 61 67 65 22 2c 31  37 2c 70 25 2c 70 25 21  |ssage",17,p%,p%!|
00000ef0  34 0d 05 96 05 e1 0d 05  a0 04 0d 05 aa 0f dd 20  |4.............. |
00000f00  f2 74 65 73 74 71 75 69  74 0d 05 b4 0d 21 62 6c  |.testquit....!bl|
00000f10  6f 63 6b 25 3d 30 0d 05  be 51 24 28 62 6c 6f 63  |ock%=0...Q$(bloc|
00000f20  6b 25 2b 34 29 3d 22 41  6e 20 6f 70 65 72 61 74  |k%+4)="An operat|
00000f30  69 6f 6e 20 69 73 20 69  6e 20 70 72 6f 67 72 65  |ion is in progre|
00000f40  73 73 20 2d 20 61 72 65  20 79 6f 75 20 73 75 72  |ss - are you sur|
00000f50  65 20 79 6f 75 20 77 61  6e 74 20 74 6f 20 71 75  |e you want to qu|
00000f60  69 74 3f 22 2b bd 30 0d  05 c8 38 c8 99 20 22 57  |it?"+.0...8.. "W|
00000f70  69 6d 70 5f 52 65 70 6f  72 74 45 72 72 6f 72 22  |imp_ReportError"|
00000f80  2c 62 6c 6f 63 6b 25 2c  26 30 37 2c 22 43 6f 6d  |,block%,&07,"Com|
00000f90  70 72 65 73 73 6f 72 22  20 b8 20 2c 6f 6b 25 0d  |pressor" . ,ok%.|
00000fa0  05 d2 16 e7 20 6f 6b 25  3c 32 20 8c 20 f2 61 62  |.... ok%<2 . .ab|
00000fb0  6f 72 74 3a e1 0d 05 dc  14 70 6f 6c 6c 25 21 31  |ort:.....poll%!1|
00000fc0  32 3d 70 6f 6c 6c 25 21  38 0d 05 e6 2a c8 99 20  |2=poll%!8...*.. |
00000fd0  22 57 69 6d 70 5f 53 65  6e 64 4d 65 73 73 61 67  |"Wimp_SendMessag|
00000fe0  65 22 2c 31 39 2c 70 6f  6c 6c 25 2c 70 6f 6c 6c  |e",19,poll%,poll|
00000ff0  25 21 34 0d 05 f0 05 e1  0d 05 fa 04 0d 06 04 14  |%!4.............|
00001000  dd 20 f2 63 61 6e 63 65  6c 62 6f 78 28 61 24 29  |. .cancelbox(a$)|
00001010  0d 06 0e 1f 24 28 62 6c  6f 63 6b 25 2b 34 29 3d  |....$(block%+4)=|
00001020  61 24 2b bd 30 3a 21 62  6c 6f 63 6b 25 3d 30 0d  |a$+.0:!block%=0.|
00001030  06 18 2f c8 99 20 22 57  69 6d 70 5f 52 65 70 6f  |../.. "Wimp_Repo|
00001040  72 74 45 72 72 6f 72 22  2c 62 6c 6f 63 6b 25 2c  |rtError",block%,|
00001050  36 2c 22 43 6f 6d 70 72  65 73 73 6f 72 22 0d 06  |6,"Compressor"..|
00001060  22 05 e1 0d 06 2c 04 0d  06 36 10 dd 20 f2 74 65  |"....,...6.. .te|
00001070  6d 70 6c 61 74 65 73 0d  06 40 36 c8 99 20 22 57  |mplates..@6.. "W|
00001080  69 6d 70 5f 4f 70 65 6e  54 65 6d 70 6c 61 74 65  |imp_OpenTemplate|
00001090  22 2c 2c 22 3c 43 6f 6d  70 72 65 73 73 24 44 69  |",,"<Compress$Di|
000010a0  72 3e 2e 54 65 6d 70 6c  61 74 65 73 22 0d 06 4a  |r>.Templates"..J|
000010b0  49 c8 99 20 22 57 69 6d  70 5f 4c 6f 61 64 54 65  |I.. "Wimp_LoadTe|
000010c0  6d 70 6c 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 2c  |mplate",,block%,|
000010d0  69 70 74 72 25 2c 69 64  69 72 25 2b 31 30 32 34  |iptr%,idir%+1024|
000010e0  2c 2d 31 2c 22 69 6e 66  6f 77 69 6e 22 20 b8 2c  |,-1,"infowin" .,|
000010f0  2c 69 70 74 72 25 0d 06  54 2d c8 99 20 22 57 69  |,iptr%..T-.. "Wi|
00001100  6d 70 5f 43 72 65 61 74  65 57 69 6e 64 6f 77 22  |mp_CreateWindow"|
00001110  2c 2c 62 6c 6f 63 6b 25  20 b8 20 69 6e 66 6f 77  |,,block% . infow|
00001120  69 6e 25 0d 06 5e 48 c8  99 20 22 57 69 6d 70 5f  |in%..^H.. "Wimp_|
00001130  4c 6f 61 64 54 65 6d 70  6c 61 74 65 22 2c 2c 62  |LoadTemplate",,b|
00001140  6c 6f 63 6b 25 2c 69 70  74 72 25 2c 69 64 69 72  |lock%,iptr%,idir|
00001150  25 2b 31 30 32 34 2c 2d  31 2c 22 73 74 61 74 75  |%+1024,-1,"statu|
00001160  73 22 20 b8 2c 2c 69 70  74 72 25 0d 06 68 2f c8  |s" .,,iptr%..h/.|
00001170  99 20 22 57 69 6d 70 5f  43 72 65 61 74 65 57 69  |. "Wimp_CreateWi|
00001180  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 25 20 b8 20  |ndow",,block% . |
00001190  73 74 61 74 75 73 77 69  6e 25 0d 06 72 48 c8 99  |statuswin%..rH..|
000011a0  20 22 57 69 6d 70 5f 4c  6f 61 64 54 65 6d 70 6c  | "Wimp_LoadTempl|
000011b0  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 2c 69 70 74  |ate",,block%,ipt|
000011c0  72 25 2c 69 64 69 72 25  2b 31 30 32 34 2c 2d 31  |r%,idir%+1024,-1|
000011d0  2c 22 73 61 76 65 61 73  22 20 b8 2c 2c 69 70 74  |,"saveas" .,,ipt|
000011e0  72 25 0d 06 7c 2d c8 99  20 22 57 69 6d 70 5f 43  |r%..|-.. "Wimp_C|
000011f0  72 65 61 74 65 57 69 6e  64 6f 77 22 2c 2c 62 6c  |reateWindow",,bl|
00001200  6f 63 6b 25 20 b8 20 73  61 76 65 77 69 6e 25 0d  |ock% . savewin%.|
00001210  06 86 1b c8 99 20 22 57  69 6d 70 5f 43 6c 6f 73  |..... "Wimp_Clos|
00001220  65 54 65 6d 70 6c 61 74  65 22 0d 06 90 27 72 65  |eTemplate"...'re|
00001230  73 70 74 72 25 3d a4 67  65 74 69 64 69 72 70 74  |sptr%=.getidirpt|
00001240  72 28 73 74 61 74 75 73  77 69 6e 25 2c 39 2c 30  |r(statuswin%,9,0|
00001250  29 0d 06 9a 29 72 61 74  65 70 74 72 25 3d a4 67  |)...)rateptr%=.g|
00001260  65 74 69 64 69 72 70 74  72 28 73 74 61 74 75 73  |etidirptr(status|
00001270  77 69 6e 25 2c 31 30 2c  30 29 0d 06 a4 28 6d 6f  |win%,10,0)...(mo|
00001280  64 65 70 74 72 25 3d a4  67 65 74 69 64 69 72 70  |deptr%=.getidirp|
00001290  74 72 28 73 74 61 74 75  73 77 69 6e 25 2c 36 2c  |tr(statuswin%,6,|
000012a0  30 29 0d 06 ae 2a 62 79  74 65 73 70 74 72 25 3d  |0)...*bytesptr%=|
000012b0  a4 67 65 74 69 64 69 72  70 74 72 28 73 74 61 74  |.getidirptr(stat|
000012c0  75 73 77 69 6e 25 2c 31  31 2c 30 29 0d 06 b8 29  |uswin%,11,0)...)|
000012d0  74 65 78 74 31 70 74 72  25 3d a4 67 65 74 69 64  |text1ptr%=.getid|
000012e0  69 72 70 74 72 28 73 74  61 74 75 73 77 69 6e 25  |irptr(statuswin%|
000012f0  2c 37 2c 30 29 0d 06 c2  29 74 65 78 74 32 70 74  |,7,0)...)text2pt|
00001300  72 25 3d a4 67 65 74 69  64 69 72 70 74 72 28 73  |r%=.getidirptr(s|
00001310  74 61 74 75 73 77 69 6e  25 2c 38 2c 30 29 0d 06  |tatuswin%,8,0)..|
00001320  cc 2a 73 61 76 65 74 65  78 74 70 74 72 25 3d a4  |.*savetextptr%=.|
00001330  67 65 74 69 64 69 72 70  74 72 28 73 61 76 65 77  |getidirptr(savew|
00001340  69 6e 25 2c 31 2c 30 29  0d 06 d6 2a 66 69 6c 65  |in%,1,0)...*file|
00001350  74 79 70 65 70 74 72 25  3d a4 67 65 74 69 64 69  |typeptr%=.getidi|
00001360  72 70 74 72 28 73 61 76  65 77 69 6e 25 2c 30 2c  |rptr(savewin%,0,|
00001370  34 29 0d 06 e0 05 e1 0d  06 ea 04 0d 06 f4 26 dd  |4)............&.|
00001380  20 a4 67 65 74 69 64 69  72 70 74 72 28 21 62 6c  | .getidirptr(!bl|
00001390  6f 63 6b 25 2c 62 6c 6f  63 6b 25 21 34 2c 6f 25  |ock%,block%!4,o%|
000013a0  29 0d 06 fe 22 c8 99 20  22 57 69 6d 70 5f 47 65  |)...".. "Wimp_Ge|
000013b0  74 49 63 6f 6e 53 74 61  74 65 22 2c 2c 62 6c 6f  |tIconState",,blo|
000013c0  63 6b 25 0d 07 08 13 3d  62 6c 6f 63 6b 25 21 28  |ck%....=block%!(|
000013d0  32 38 2b 6f 25 29 0d 07  12 04 0d 07 1c 0b dd 20  |28+o%)......... |
000013e0  f2 69 63 6f 6e 0d 07 26  0e 21 62 6c 6f 63 6b 25  |.icon..&.!block%|
000013f0  3d 2d 31 0d 07 30 19 62  6c 6f 63 6b 25 21 34 3d  |=-1..0.block%!4=|
00001400  30 3a 62 6c 6f 63 6b 25  21 38 3d 30 0d 07 3a 1d  |0:block%!8=0..:.|
00001410  62 6c 6f 63 6b 25 21 31  32 3d 37 32 3a 62 6c 6f  |block%!12=72:blo|
00001420  63 6b 25 21 31 36 3d 36  38 0d 07 44 13 62 6c 6f  |ck%!16=68..D.blo|
00001430  63 6b 25 21 32 30 3d 26  33 31 30 32 0d 07 4e 16  |ck%!20=&3102..N.|
00001440  24 69 70 74 72 25 3d 22  21 63 6f 6d 70 72 65 73  |$iptr%="!compres|
00001450  73 22 0d 07 58 13 62 6c  6f 63 6b 25 21 32 34 3d  |s"..X.block%!24=|
00001460  69 70 74 72 25 0d 07 62  0f 62 6c 6f 63 6b 25 21  |iptr%..b.block%!|
00001470  32 38 3d 31 0d 07 6c 1b  62 6c 6f 63 6b 25 21 33  |28=1..l.block%!3|
00001480  32 3d a9 22 73 71 75 69  73 68 77 61 69 74 22 0d  |2=."squishwait".|
00001490  07 76 13 69 63 6f 6e 74  65 78 74 25 3d 69 70 74  |.v.icontext%=ipt|
000014a0  72 25 0d 07 80 1a 69 70  74 72 25 2b 3d a9 22 73  |r%....iptr%+=."s|
000014b0  71 75 69 73 68 77 61 69  74 22 2b 31 0d 07 8a 2c  |quishwait"+1...,|
000014c0  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 49  |.. "Wimp_CreateI|
000014d0  63 6f 6e 22 2c 2c 62 6c  6f 63 6b 25 20 b8 20 74  |con",,block% . t|
000014e0  61 73 6b 69 63 6f 6e 25  0d 07 94 05 e1 0d 07 9e  |askicon%........|
000014f0  04 0d 07 a8 10 dd 20 f2  63 6c 69 63 6b 28 70 25  |...... .click(p%|
00001500  29 0d 07 b2 0e e7 20 70  25 21 38 3d 32 20 8c 0d  |)..... p%!8=2 ..|
00001510  07 bc 3b 20 20 20 e7 20  70 25 21 31 32 3d 2d 32  |..;   . p%!12=-2|
00001520  20 8c 20 f2 69 63 6f 6e  62 61 72 6d 65 6e 75 28  | . .iconbarmenu(|
00001530  21 70 25 29 20 8b 20 f2  6d 61 69 6e 6d 65 6e 75  |!p%) . .mainmenu|
00001540  28 21 70 25 2c 70 25 21  34 29 0d 07 c6 05 cd 0d  |(!p%,p%!4)......|
00001550  07 d0 10 e7 20 70 25 21  38 3d 32 20 8c 20 e1 0d  |.... p%!8=2 . ..|
00001560  07 da 12 e7 20 70 25 21  31 36 3d 2d 31 20 8c 20  |.... p%!16=-1 . |
00001570  e1 0d 07 e4 0e c8 8e 20  70 25 21 31 32 20 ca 0d  |....... p%!12 ..|
00001580  07 ee 20 c9 20 2d 32 3a  f2 69 63 6f 6e 62 61 72  |.. . -2:.iconbar|
00001590  63 6c 69 63 6b 28 70 25  21 31 36 2c 70 25 29 0d  |click(p%!16,p%).|
000015a0  07 f8 23 c9 20 73 61 76  65 77 69 6e 25 3a f2 73  |..#. savewin%:.s|
000015b0  61 76 65 63 6c 69 63 6b  28 70 25 21 31 36 2c 70  |aveclick(p%!16,p|
000015c0  25 29 0d 08 02 27 c9 20  73 74 61 74 75 73 77 69  |%)...'. statuswi|
000015d0  6e 25 3a f2 73 74 61 74  75 73 63 6c 69 63 6b 28  |n%:.statusclick(|
000015e0  70 25 21 31 36 2c 70 25  29 0d 08 0c 05 cb 0d 08  |p%!16,p%).......|
000015f0  16 05 e1 0d 08 20 04 0d  08 2a 1a dd 20 f2 69 63  |..... ...*.. .ic|
00001600  6f 6e 62 61 72 63 6c 69  63 6b 28 69 25 2c 70 25  |onbarclick(i%,p%|
00001610  29 0d 08 34 13 f2 6f 70  65 6e 6d 61 69 6e 77 69  |)..4..openmainwi|
00001620  6e 64 6f 77 0d 08 3e 05  e1 0d 08 48 04 0d 08 52  |ndow..>....H...R|
00001630  15 dd 20 f2 6f 70 65 6e  6d 61 69 6e 77 69 6e 64  |.. .openmainwind|
00001640  6f 77 0d 08 5c 16 21 62  6c 6f 63 6b 25 3d 73 74  |ow..\.!block%=st|
00001650  61 74 75 73 77 69 6e 25  0d 08 66 24 c8 99 20 22  |atuswin%..f$.. "|
00001660  57 69 6d 70 5f 47 65 74  57 69 6e 64 6f 77 53 74  |Wimp_GetWindowSt|
00001670  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 08 70 10  |ate",,block%..p.|
00001680  62 6c 6f 63 6b 25 21 32  38 3d 2d 31 0d 08 7a 20  |block%!28=-1..z |
00001690  c8 99 20 22 57 69 6d 70  5f 4f 70 65 6e 57 69 6e  |.. "Wimp_OpenWin|
000016a0  64 6f 77 22 2c 2c 62 6c  6f 63 6b 25 0d 08 84 05  |dow",,block%....|
000016b0  e1 0d 08 8e 04 0d 08 98  1f dd 20 a4 73 65 6c 65  |.......... .sele|
000016c0  63 74 28 21 62 6c 6f 63  6b 25 2c 62 6c 6f 63 6b  |ct(!block%,block|
000016d0  25 21 34 29 0d 08 a2 22  c8 99 20 22 57 69 6d 70  |%!4)...".. "Wimp|
000016e0  5f 47 65 74 49 63 6f 6e  53 74 61 74 65 22 2c 2c  |_GetIconState",,|
000016f0  62 6c 6f 63 6b 25 0d 08  ac 1f 3d 28 28 62 6c 6f  |block%....=((blo|
00001700  63 6b 25 21 32 34 20 80  20 28 31 3c 3c 32 31 29  |ck%!24 . (1<<21)|
00001710  29 3c 3e 30 29 0d 08 b6  04 0d 08 c0 31 dd 20 f2  |)<>0).......1. .|
00001720  73 74 61 74 65 28 21 62  6c 6f 63 6b 25 2c 62 6c  |state(!block%,bl|
00001730  6f 63 6b 25 21 34 2c 62  6c 6f 63 6b 25 21 31 32  |ock%!4,block%!12|
00001740  2c 62 6c 6f 63 6b 25 21  38 29 0d 08 ca 21 62 6c  |,block%!8)...!bl|
00001750  6f 63 6b 25 21 38 3d 62  6c 6f 63 6b 25 21 38 20  |ock%!8=block%!8 |
00001760  80 20 62 6c 6f 63 6b 25  21 31 32 0d 08 d4 22 c8  |. block%!12...".|
00001770  99 20 22 57 69 6d 70 5f  53 65 74 49 63 6f 6e 53  |. "Wimp_SetIconS|
00001780  74 61 74 65 22 2c 2c 62  6c 6f 63 6b 25 0d 08 de  |tate",,block%...|
00001790  05 e1 0d 08 e8 04 0d 08  f2 11 dd 20 f2 6b 69 6c  |........... .kil|
000017a0  6c 73 74 61 74 75 73 0d  08 fc 33 24 6d 6f 64 65  |lstatus...3$mode|
000017b0  70 74 72 25 3d 22 57 61  69 74 69 6e 67 2e 2e 2e  |ptr%="Waiting...|
000017c0  22 3a f2 73 74 61 74 65  28 73 74 61 74 75 73 77  |":.state(statusw|
000017d0  69 6e 25 2c 36 2c 30 2c  30 29 0d 09 06 29 24 72  |in%,6,0,0)...)$r|
000017e0  65 73 70 74 72 25 3d 22  2d 22 3a f2 73 74 61 74  |esptr%="-":.stat|
000017f0  65 28 73 74 61 74 75 73  77 69 6e 25 2c 39 2c 30  |e(statuswin%,9,0|
00001800  2c 30 29 0d 09 10 2b 24  72 61 74 65 70 74 72 25  |,0)...+$rateptr%|
00001810  3d 22 2d 22 3a f2 73 74  61 74 65 28 73 74 61 74  |="-":.state(stat|
00001820  75 73 77 69 6e 25 2c 31  30 2c 30 2c 30 29 0d 09  |uswin%,10,0,0)..|
00001830  1a 2b 24 62 79 74 65 73  70 74 72 25 3d 22 22 3a  |.+$bytesptr%="":|
00001840  f2 73 74 61 74 65 28 73  74 61 74 75 73 77 69 6e  |.state(statuswin|
00001850  25 2c 31 31 2c 30 2c 30  29 0d 09 24 22 f2 73 74  |%,11,0,0)..$".st|
00001860  61 74 65 28 73 74 61 74  75 73 77 69 6e 25 2c 31  |ate(statuswin%,1|
00001870  32 2c 31 3c 3c 32 32 2c  2d 31 29 0d 09 2e 05 e1  |2,1<<22,-1).....|
00001880  0d 09 38 04 0d 09 42 19  dd 20 f2 73 74 61 74 75  |..8...B.. .statu|
00001890  73 63 6c 69 63 6b 28 69  25 2c 70 25 29 0d 09 4c  |sclick(i%,p%)..L|
000018a0  0b c8 8e 20 69 25 20 ca  0d 09 56 5a c9 20 31 38  |... i% ...VZ. 18|
000018b0  2c 31 39 2c 32 30 2c 32  31 2c 32 32 3a 72 65 73  |,19,20,21,22:res|
000018c0  25 3d 69 25 2d 31 34 3a  e7 20 a4 73 65 6c 65 63  |%=i%-14:. .selec|
000018d0  74 28 73 74 61 74 75 73  77 69 6e 25 2c 69 25 29  |t(statuswin%,i%)|
000018e0  3d 30 20 8c 20 f2 73 74  61 74 65 28 73 74 61 74  |=0 . .state(stat|
000018f0  75 73 77 69 6e 25 2c 69  25 2c 31 3c 3c 32 31 2c  |uswin%,i%,1<<21,|
00001900  b9 29 0d 09 60 28 c9 20  31 35 3a 65 6e 68 61 6e  |.)..`(. 15:enhan|
00001910  63 65 25 3d a4 73 65 6c  65 63 74 28 73 74 61 74  |ce%=.select(stat|
00001920  75 73 77 69 6e 25 2c 69  25 29 0d 09 6a 05 cb 0d  |uswin%,i%)..j...|
00001930  09 74 10 e7 20 69 25 3c  3e 31 32 20 8c 20 e1 0d  |.t.. i%<>12 . ..|
00001940  09 7e 14 e7 20 63 6f 6e  74 72 6f 6c 25 3d 30 20  |.~.. control%=0 |
00001950  8c 20 e1 0d 09 88 0d 21  62 6c 6f 63 6b 25 3d 30  |. .....!block%=0|
00001960  0d 09 92 42 24 28 62 6c  6f 63 6b 25 2b 34 29 3d  |...B$(block%+4)=|
00001970  22 41 72 65 20 79 6f 75  20 73 75 72 65 20 79 6f  |"Are you sure yo|
00001980  75 20 77 61 6e 74 20 74  6f 20 61 62 6f 72 74 20  |u want to abort |
00001990  74 68 65 20 6f 70 65 72  61 74 69 6f 6e 3f 22 2b  |the operation?"+|
000019a0  bd 30 0d 09 9c 38 c8 99  20 22 57 69 6d 70 5f 52  |.0...8.. "Wimp_R|
000019b0  65 70 6f 72 74 45 72 72  6f 72 22 2c 62 6c 6f 63  |eportError",bloc|
000019c0  6b 25 2c 26 30 37 2c 22  43 6f 6d 70 72 65 73 73  |k%,&07,"Compress|
000019d0  6f 72 22 20 b8 20 2c 6f  6b 25 0d 09 a6 14 e7 20  |or" . ,ok%..... |
000019e0  6f 6b 25 3d 31 20 8c 20  f2 61 62 6f 72 74 0d 09  |ok%=1 . .abort..|
000019f0  b0 05 e1 0d 09 ba 04 0d  09 c4 0c dd 20 f2 61 62  |............ .ab|
00001a00  6f 72 74 0d 09 ce 22 f4  20 63 6c 6f 73 65 20 61  |ort...". close a|
00001a10  6e 64 20 64 65 6c 65 74  65 20 6f 75 74 70 75 74  |nd delete output|
00001a20  20 66 69 6c 65 0d 09 d8  20 61 25 3d 66 69 6c 65  | file... a%=file|
00001a30  68 61 6e 64 6c 65 25 3a  66 69 6c 65 68 61 6e 64  |handle%:filehand|
00001a40  6c 65 25 3d 30 0d 09 e2  13 e7 20 61 25 3c 3e 30  |le%=0..... a%<>0|
00001a50  20 8c 20 d9 20 23 61 25  0d 09 ec 29 e7 20 61 25  | . . #a%...). a%|
00001a60  3c 3e 30 20 8c 20 c8 99  20 22 4f 53 5f 46 69 6c  |<>0 . .. "OS_Fil|
00001a70  65 22 2c 36 2c 73 61 76  65 74 65 78 74 70 74 72  |e",6,savetextptr|
00001a80  25 0d 09 f6 23 c8 99 20  22 57 69 6d 70 5f 53 6c  |%...#.. "Wimp_Sl|
00001a90  6f 74 53 69 7a 65 22 2c  73 6c 6f 74 73 69 7a 65  |otSize",slotsize|
00001aa0  25 2c 2d 31 0d 0a 00 1a  24 69 63 6f 6e 74 65 78  |%,-1....$icontex|
00001ab0  74 25 3d 22 21 63 6f 6d  70 72 65 73 73 22 0d 0a  |t%="!compress"..|
00001ac0  0a 1c f2 73 74 61 74 65  28 2d 31 2c 74 61 73 6b  |...state(-1,task|
00001ad0  69 63 6f 6e 25 2c 30 2c  30 29 0d 0a 14 0f f2 6b  |icon%,0,0).....k|
00001ae0  69 6c 6c 73 74 61 74 75  73 0d 0a 1e 1e 63 6f 6e  |illstatus....con|
00001af0  74 72 6f 6c 25 3d 30 3a  6d 61 73 6b 25 3d 6d 61  |trol%=0:mask%=ma|
00001b00  73 6b 25 20 84 20 31 0d  0a 28 0f f2 74 65 78 74  |sk% . 1..(..text|
00001b10  28 30 2c 22 22 29 0d 0a  32 0f f2 74 65 78 74 28  |(0,"")..2..text(|
00001b20  31 2c 22 22 29 0d 0a 3c  05 e1 0d 0a 46 04 0d 0a  |1,"")..<....F...|
00001b30  50 17 dd 20 f2 73 61 76  65 63 6c 69 63 6b 28 69  |P.. .saveclick(i|
00001b40  25 2c 70 25 29 0d 0a 5a  0b c8 8e 20 69 25 20 ca  |%,p%)..Z... i% .|
00001b50  0d 0a 64 07 c9 20 30 0d  0a 6e 17 20 20 20 21 62  |..d.. 0..n.   !b|
00001b60  6c 6f 63 6b 25 3d 73 61  76 65 77 69 6e 25 0d 0a  |lock%=savewin%..|
00001b70  78 27 20 20 20 c8 99 20  22 57 69 6d 70 5f 47 65  |x'   .. "Wimp_Ge|
00001b80  74 57 69 6e 64 6f 77 53  74 61 74 65 22 2c 2c 62  |tWindowState",,b|
00001b90  6c 6f 63 6b 25 0d 0a 82  1a 20 20 20 62 6c 6f 63  |lock%....   bloc|
00001ba0  6b 25 21 32 35 36 3d 73  61 76 65 77 69 6e 25 0d  |k%!256=savewin%.|
00001bb0  0a 8c 13 20 20 20 62 6c  6f 63 6b 25 21 32 36 30  |...   block%!260|
00001bc0  3d 30 0d 0a 96 29 20 20  20 c8 99 20 22 57 69 6d  |=0...)   .. "Wim|
00001bd0  70 5f 47 65 74 49 63 6f  6e 53 74 61 74 65 22 2c  |p_GetIconState",|
00001be0  2c 62 6c 6f 63 6b 25 2b  32 35 36 0d 0a a0 1d 20  |,block%+256.... |
00001bf0  20 20 61 25 3d 62 6c 6f  63 6b 25 21 34 2b 62 6c  |  a%=block%!4+bl|
00001c00  6f 63 6b 25 21 32 36 34  0d 0a aa 20 20 20 20 62  |ock%!264...    b|
00001c10  25 3d 62 6c 6f 63 6b 25  21 31 36 2b 62 6c 6f 63  |%=block%!16+bloc|
00001c20  6b 25 21 32 36 38 2b 34  0d 0a b4 1f 20 20 20 62  |k%!268+4....   b|
00001c30  6c 6f 63 6b 25 21 38 3d  61 25 3a 62 6c 6f 63 6b  |lock%!8=a%:block|
00001c40  25 21 31 32 3d 62 25 0d  0a be 26 20 20 20 62 6c  |%!12=b%...&   bl|
00001c50  6f 63 6b 25 21 31 36 3d  61 25 2b 37 30 3a 62 6c  |ock%!16=a%+70:bl|
00001c60  6f 63 6b 25 21 32 30 3d  62 25 2b 36 38 0d 0a c8  |ock%!20=b%+68...|
00001c70  11 20 20 20 62 6c 6f 63  6b 25 21 34 3d 35 0d 0a  |.   block%!4=5..|
00001c80  d2 1a 20 20 20 62 6c 6f  63 6b 25 21 32 34 3d 26  |..   block%!24=&|
00001c90  38 30 30 30 30 30 30 30  0d 0a dc 1a 20 20 20 62  |80000000....   b|
00001ca0  6c 6f 63 6b 25 21 32 38  3d 26 38 30 30 30 30 30  |lock%!28=&800000|
00001cb0  30 30 0d 0a e6 1a 20 20  20 62 6c 6f 63 6b 25 21  |00....   block%!|
00001cc0  33 32 3d 26 37 46 46 46  46 46 46 46 0d 0a f0 1a  |32=&7FFFFFFF....|
00001cd0  20 20 20 62 6c 6f 63 6b  25 21 33 36 3d 26 37 46  |   block%!36=&7F|
00001ce0  46 46 46 46 46 46 0d 0a  fa 20 20 20 20 c8 99 20  |FFFFFF...    .. |
00001cf0  22 57 69 6d 70 5f 44 72  61 67 42 6f 78 22 2c 2c  |"Wimp_DragBox",,|
00001d00  62 6c 6f 63 6b 25 0d 0b  04 07 c9 20 32 0d 0b 0e  |block%..... 2...|
00001d10  46 20 20 20 f2 63 61 6e  63 65 6c 62 6f 78 28 22  |F   .cancelbox("|
00001d20  54 6f 20 73 61 76 65 2c  20 64 72 61 67 20 74 68  |To save, drag th|
00001d30  65 20 66 69 6c 65 20 69  63 6f 6e 20 74 6f 20 61  |e file icon to a|
00001d40  20 64 69 72 65 63 74 6f  72 79 20 76 69 65 77 65  | directory viewe|
00001d50  72 22 29 0d 0b 18 05 cb  0d 0b 22 05 e1 0d 0b 2c  |r")......."....,|
00001d60  04 0d 0b 36 0f dd 20 f2  64 72 61 67 64 6f 6e 65  |...6.. .dragdone|
00001d70  0d 0b 40 24 c8 99 20 22  57 69 6d 70 5f 47 65 74  |..@$.. "Wimp_Get|
00001d80  50 6f 69 6e 74 65 72 49  6e 66 6f 22 2c 2c 62 6c  |PointerInfo",,bl|
00001d90  6f 63 6b 25 0d 0b 4a 1c  c8 95 20 a7 24 73 61 76  |ock%..J... .$sav|
00001da0  65 74 65 78 74 70 74 72  25 2c 22 2e 22 29 3e 30  |etextptr%,".")>0|
00001db0  0d 0b 54 37 24 73 61 76  65 74 65 78 74 70 74 72  |..T7$savetextptr|
00001dc0  25 3d c1 24 73 61 76 65  74 65 78 74 70 74 72 25  |%=.$savetextptr%|
00001dd0  2c a7 24 73 61 76 65 74  65 78 74 70 74 72 25 2c  |,.$savetextptr%,|
00001de0  22 2e 22 29 2b 31 29 0d  0b 5e 05 ce 0d 0b 68 1c  |".")+1)..^....h.|
00001df0  c8 95 20 a7 24 73 61 76  65 74 65 78 74 70 74 72  |.. .$savetextptr|
00001e00  25 2c 22 3a 22 29 3e 30  0d 0b 72 37 24 73 61 76  |%,":")>0..r7$sav|
00001e10  65 74 65 78 74 70 74 72  25 3d c1 24 73 61 76 65  |etextptr%=.$save|
00001e20  74 65 78 74 70 74 72 25  2c a7 24 73 61 76 65 74  |textptr%,.$savet|
00001e30  65 78 74 70 74 72 25 2c  22 3a 22 29 2b 31 29 0d  |extptr%,":")+1).|
00001e40  0b 7c 05 ce 0d 0b 86 17  62 6c 6f 63 6b 25 21 32  |.|......block%!2|
00001e50  30 3d 62 6c 6f 63 6b 25  21 31 32 0d 0b 90 17 62  |0=block%!12....b|
00001e60  6c 6f 63 6b 25 21 32 34  3d 62 6c 6f 63 6b 25 21  |lock%!24=block%!|
00001e70  31 36 0d 0b 9a 15 62 6c  6f 63 6b 25 21 32 38 3d  |16....block%!28=|
00001e80  21 62 6c 6f 63 6b 25 0d  0b a4 16 62 6c 6f 63 6b  |!block%....block|
00001e90  25 21 33 32 3d 62 6c 6f  63 6b 25 21 34 0d 0b ae  |%!32=block%!4...|
00001ea0  42 e7 20 69 6e 66 69 6c  65 74 79 70 65 25 3d 66  |B. infiletype%=f|
00001eb0  69 6c 65 74 79 70 65 25  20 8c 20 62 6c 6f 63 6b  |iletype% . block|
00001ec0  25 21 34 30 3d 26 44 33  43 20 8b 20 62 6c 6f 63  |%!40=&D3C . bloc|
00001ed0  6b 25 21 34 30 3d 66 69  6c 65 74 79 70 65 25 0d  |k%!40=filetype%.|
00001ee0  0b b8 56 e7 20 69 6e 66  69 6c 65 74 79 70 65 25  |..V. infiletype%|
00001ef0  3d 66 69 6c 65 74 79 70  65 25 20 8c 20 62 6c 6f  |=filetype% . blo|
00001f00  63 6b 25 21 33 36 3d 28  28 21 93 29 20 80 20 26  |ck%!36=((!.) . &|
00001f10  37 46 46 46 46 46 46 46  29 2a 31 36 2b 31 20 8b  |7FFFFFFF)*16+1 .|
00001f20  20 62 6c 6f 63 6b 25 21  33 36 3d 69 6e 66 69 6c  | block%!36=infil|
00001f30  65 6c 65 6e 25 0d 0b c2  21 24 28 62 6c 6f 63 6b  |elen%...!$(block|
00001f40  25 2b 34 34 29 3d 24 73  61 76 65 74 65 78 74 70  |%+44)=$savetextp|
00001f50  74 72 25 2b bd 30 0d 0b  cc 0f 62 6c 6f 63 6b 25  |tr%+.0....block%|
00001f60  21 31 36 3d 31 0d 0b d6  0f 62 6c 6f 63 6b 25 21  |!16=1....block%!|
00001f70  31 32 3d 30 0d 0b e0 3e  21 62 6c 6f 63 6b 25 3d  |12=0...>!block%=|
00001f80  34 34 2b a9 28 24 73 61  76 65 74 65 78 74 70 74  |44+.($savetextpt|
00001f90  72 25 29 2b 31 3a 21 62  6c 6f 63 6b 25 2b 3d 28  |r%)+1:!block%+=(|
00001fa0  34 2d 28 21 62 6c 6f 63  6b 25 20 80 33 29 29 80  |4-(!block% .3)).|
00001fb0  20 33 0d 0b ea 37 c8 99  20 22 57 69 6d 70 5f 53  | 3...7.. "Wimp_S|
00001fc0  65 6e 64 4d 65 73 73 61  67 65 22 2c 31 37 2c 62  |endMessage",17,b|
00001fd0  6c 6f 63 6b 25 2c 62 6c  6f 63 6b 25 21 32 30 2c  |lock%,block%!20,|
00001fe0  62 6c 6f 63 6b 25 21 32  34 0d 0b f4 05 e1 0d 0b  |block%!24.......|
00001ff0  fe 04 0d 0c 08 12 dd 20  f2 73 61 76 65 61 63 6b  |....... .saveack|
00002000  28 70 25 29 0d 0c 12 44  f4 20 63 61 6c 6c 65 64  |(p%)...D. called|
00002010  20 61 66 74 65 72 20 61  20 73 61 76 65 20 64 72  | after a save dr|
00002020  61 67 20 74 6f 20 74 65  6c 6c 20 75 73 20 74 68  |ag to tell us th|
00002030  65 20 66 69 6c 65 6e 61  6d 65 20 74 6f 20 73 61  |e filename to sa|
00002040  76 65 20 75 6e 64 65 72  0d 0c 1c 14 e7 20 70 25  |ve under..... p%|
00002050  21 34 3d 74 61 73 6b 25  20 8c 20 e1 0d 0c 26 1e  |!4=task% . ...&.|
00002060  6d 79 72 65 66 25 3d 70  25 21 38 3a 74 61 73 6b  |myref%=p%!8:task|
00002070  73 65 6e 64 25 3d 70 25  21 34 0d 0c 30 3a 64 65  |send%=p%!4..0:de|
00002080  73 74 77 69 6e 25 3d 70  25 21 32 30 3a 64 65 73  |stwin%=p%!20:des|
00002090  74 69 63 25 3d 70 25 21  32 34 3a 64 65 73 74 78  |tic%=p%!24:destx|
000020a0  25 3d 70 25 21 32 38 3a  64 65 73 74 79 25 3d 70  |%=p%!28:desty%=p|
000020b0  25 21 33 32 0d 0c 3a 12  f2 64 6f 73 61 76 65 28  |%!32..:..dosave(|
000020c0  70 25 2b 34 34 29 0d 0c  44 05 e1 0d 0c 4e 04 0d  |p%+44)..D....N..|
000020d0  0c 58 12 dd 20 f2 74 65  78 74 28 66 25 2c 61 24  |.X.. .text(f%,a$|
000020e0  29 0d 0c 62 2a e7 20 66  25 3d 30 20 8c 20 24 74  |)..b*. f%=0 . $t|
000020f0  65 78 74 31 70 74 72 25  3d 61 24 20 8b 20 24 74  |ext1ptr%=a$ . $t|
00002100  65 78 74 32 70 74 72 25  3d 61 24 0d 0c 6c 1f f2  |ext2ptr%=a$..l..|
00002110  73 74 61 74 65 28 73 74  61 74 75 73 77 69 6e 25  |state(statuswin%|
00002120  2c 66 25 2b 37 2c 30 2c  30 29 0d 0c 76 05 e1 0d  |,f%+7,0,0)..v...|
00002130  0c 80 04 0d 0c 8a 17 dd  20 f2 64 6f 73 61 76 65  |........ .dosave|
00002140  28 6e 61 6d 65 70 74 72  25 29 0d 0c 94 32 75 25  |(nameptr%)...2u%|
00002150  3d 6e 61 6d 65 70 74 72  25 3a c8 95 20 3f 75 25  |=nameptr%:.. ?u%|
00002160  3c 3e 30 20 80 20 3f 75  25 3c 3e 31 33 3a 75 25  |<>0 . ?u%<>13:u%|
00002170  2b 3d 31 3a ce 3a 3f 75  25 3d 31 33 0d 0c 9e 1b  |+=1:.:?u%=13....|
00002180  24 73 61 76 65 74 65 78  74 70 74 72 25 3d 24 6e  |$savetextptr%=$n|
00002190  61 6d 65 70 74 72 25 0d  0c a8 1b 6d 61 73 6b 25  |ameptr%....mask%|
000021a0  3d 6d 61 73 6b 25 20 80  20 26 46 46 46 46 46 46  |=mask% . &FFFFFF|
000021b0  46 45 0d 0c b2 35 e7 20  69 6e 66 69 6c 65 74 79  |FE...5. infilety|
000021c0  70 65 25 3d 66 69 6c 65  74 79 70 65 25 20 8c 20  |pe%=filetype% . |
000021d0  63 6f 6e 74 72 6f 6c 25  3d 32 20 8b 20 63 6f 6e  |control%=2 . con|
000021e0  74 72 6f 6c 25 3d 31 0d  0c bc 14 21 62 6c 6f 63  |trol%=1....!bloc|
000021f0  6b 25 3d 73 61 76 65 77  69 6e 25 0d 0c c6 21 c8  |k%=savewin%...!.|
00002200  99 20 22 57 69 6d 70 5f  43 6c 6f 73 65 57 69 6e  |. "Wimp_CloseWin|
00002210  64 6f 77 22 2c 2c 62 6c  6f 63 6b 25 0d 0c d0 3e  |dow",,block%...>|
00002220  e7 20 69 6e 66 69 6c 65  74 79 70 65 25 3d 26 44  |. infiletype%=&D|
00002230  33 43 20 8c 20 24 72 65  73 70 74 72 25 3d c3 72  |3C . $resptr%=.r|
00002240  65 73 25 2b 22 20 62 69  74 73 22 20 8b 20 24 72  |es%+" bits" . $r|
00002250  65 73 70 74 72 25 3d 22  2d 22 0d 0c da 48 e7 20  |esptr%="-"...H. |
00002260  69 6e 66 69 6c 65 74 79  70 65 25 3d 26 44 33 43  |infiletype%=&D3C|
00002270  20 8c 20 24 72 61 74 65  70 74 72 25 3d c3 28 3f  | . $rateptr%=.(?|
00002280  93 29 2b 22 75 73 22 20  8b 20 24 72 61 74 65 70  |.)+"us" . $ratep|
00002290  74 72 25 3d c3 28 3f 28  93 2b 34 29 29 2b 22 75  |tr%=.(?(.+4))+"u|
000022a0  73 22 0d 0c e4 1b 24 69  63 6f 6e 74 65 78 74 25  |s"....$icontext%|
000022b0  3d 22 73 71 75 69 73 68  77 61 69 74 22 0d 0c ee  |="squishwait"...|
000022c0  1c f2 73 74 61 74 65 28  2d 31 2c 74 61 73 6b 69  |..state(-1,taski|
000022d0  63 6f 6e 25 2c 30 2c 30  29 0d 0c f8 1c f2 73 74  |con%,0,0).....st|
000022e0  61 74 65 28 73 74 61 74  75 73 77 69 6e 25 2c 39  |ate(statuswin%,9|
000022f0  2c 30 2c 30 29 0d 0d 02  1d f2 73 74 61 74 65 28  |,0,0).....state(|
00002300  73 74 61 74 75 73 77 69  6e 25 2c 31 30 2c 30 2c  |statuswin%,10,0,|
00002310  30 29 0d 0d 0c 43 e7 20  69 6e 66 69 6c 65 74 79  |0)...C. infilety|
00002320  70 65 25 3d 26 44 33 43  20 8c 20 6f 75 74 66 69  |pe%=&D3C . outfi|
00002330  6c 65 74 79 70 65 25 3d  66 69 6c 65 74 79 70 65  |letype%=filetype|
00002340  25 20 8b 20 6f 75 74 66  69 6c 65 74 79 70 65 25  |% . outfiletype%|
00002350  3d 26 44 33 43 0d 0d 16  37 c8 99 20 22 58 4f 53  |=&D3C...7.. "XOS|
00002360  5f 46 69 6c 65 22 2c 31  31 2c 73 61 76 65 74 65  |_File",11,savete|
00002370  78 74 70 74 72 25 2c 26  46 46 44 20 b8 20 66 69  |xtptr%,&FFD . fi|
00002380  6c 65 68 61 6e 64 6c 65  25 3b 66 25 0d 0d 20 41  |lehandle%;f%.. A|
00002390  e7 20 28 66 25 20 80 31  29 3d 30 20 8c 20 c8 99  |. (f% .1)=0 . ..|
000023a0  20 22 58 4f 53 5f 46 69  6e 64 22 2c 26 43 46 2c  | "XOS_Find",&CF,|
000023b0  73 61 76 65 74 65 78 74  70 74 72 25 20 b8 20 66  |savetextptr% . f|
000023c0  69 6c 65 68 61 6e 64 6c  65 25 3b 66 25 0d 0d 2a  |ilehandle%;f%..*|
000023d0  12 e7 20 28 66 25 20 80  31 29 3c 3e 30 20 8c 0d  |.. (f% .1)<>0 ..|
000023e0  0d 34 2f 20 20 20 69 25  3d 66 69 6c 65 68 61 6e  |.4/   i%=filehan|
000023f0  64 6c 65 25 2b 34 3a c8  95 20 3f 69 25 3e 30 3a  |dle%+4:.. ?i%>0:|
00002400  69 25 2b 3d 31 3a ce 3a  3f 69 25 3d 31 33 0d 0d  |i%+=1:.:?i%=13..|
00002410  3e 31 20 20 20 f2 63 61  6e 63 65 6c 62 6f 78 28  |>1   .cancelbox(|
00002420  24 28 66 69 6c 65 68 61  6e 64 6c 65 25 2b 34 29  |$(filehandle%+4)|
00002430  29 3a 66 69 6c 65 68 61  6e 64 6c 65 25 3d 30 0d  |):filehandle%=0.|
00002440  0d 48 0d 20 20 20 f2 61  62 6f 72 74 0d 0d 52 05  |.H.   .abort..R.|
00002450  cc 0d 0d 5c 1b 20 20 20  e7 20 69 6e 66 69 6c 65  |...\.   . infile|
00002460  74 79 70 65 25 3d 26 44  33 43 20 8c 0d 0d 66 12  |type%=&D3C ...f.|
00002470  20 20 20 20 20 20 70 74  72 25 3d 93 2b 31 0d 0d  |      ptr%=.+1..|
00002480  70 25 20 20 20 20 20 20  e7 20 28 28 69 6e 66 69  |p%      . ((infi|
00002490  6c 65 6c 65 6e 25 2d 31  29 20 83 31 36 29 3c 3e  |lelen%-1) .16)<>|
000024a0  30 20 8c 0d 0d 7a 1a 20  20 20 20 20 20 20 20 20  |0 ...z.         |
000024b0  61 25 3d 69 6e 66 69 6c  65 6c 65 6e 25 0d 0d 84  |a%=infilelen%...|
000024c0  36 20 20 20 20 20 20 20  20 20 69 6e 66 69 6c 65  |6         infile|
000024d0  6c 65 6e 25 2b 3d 28 31  36 2d 28 28 69 6e 66 69  |len%+=(16-((infi|
000024e0  6c 65 6c 65 6e 25 2d 31  29 20 80 20 31 35 29 29  |lelen%-1) . 15))|
000024f0  80 31 35 0d 0d 8e 37 20  20 20 20 20 20 20 20 20  |.15...7         |
00002500  c8 99 20 22 57 69 6d 70  5f 53 6c 6f 74 53 69 7a  |.. "Wimp_SlotSiz|
00002510  65 22 2c 73 6c 6f 74 73  69 7a 65 25 2b 69 6e 66  |e",slotsize%+inf|
00002520  69 6c 65 6c 65 6e 25 2c  2d 31 0d 0d 98 2f 20 20  |ilelen%,-1.../  |
00002530  20 20 20 20 20 20 20 e3  20 54 25 3d 61 25 20 b8  |       . T%=a% .|
00002540  20 69 6e 66 69 6c 65 6c  65 6e 25 2d 31 3a 3f 28  | infilelen%-1:?(|
00002550  93 2b 54 25 29 3d 30 3a  ed 0d 0d a2 0b 20 20 20  |.+T%)=0:.....   |
00002560  20 20 20 cd 0d 0d ac 1d  20 20 20 20 20 20 63 6f  |   .....      co|
00002570  75 6e 74 25 3d 69 6e 66  69 6c 65 6c 65 6e 25 2d  |unt%=infilelen%-|
00002580  31 0d 0d b6 19 20 20 20  20 20 20 6f 75 74 70 74  |1....      outpt|
00002590  72 25 3d 62 75 66 66 65  72 25 0d 0d c0 14 20 20  |r%=buffer%....  |
000025a0  20 20 20 20 f2 73 74 61  72 74 63 6f 6d 70 0d 0d  |    .startcomp..|
000025b0  ca 08 20 20 20 cc 0d 0d  d4 21 20 20 20 20 20 20  |..   ....!      |
000025c0  f2 74 65 78 74 28 30 2c  22 22 29 3a f2 74 65 78  |.text(0,""):.tex|
000025d0  74 28 31 2c 22 22 29 0d  0d de 12 20 20 20 20 20  |t(1,"")....     |
000025e0  20 70 74 72 25 3d 93 2b  35 0d 0d e8 2d 20 20 20  | ptr%=.+5...-   |
000025f0  20 20 20 e7 20 28 3f 28  93 2b 33 29 20 80 20 31  |   . (?(.+3) . 1|
00002600  32 38 29 3c 3e 30 20 8c  20 65 6e 25 3d b9 20 8b  |28)<>0 . en%=. .|
00002610  20 65 6e 25 3d a3 0d 0d  f2 11 20 20 20 20 20 20  | en%=.....      |
00002620  e7 20 65 6e 25 20 8c 0d  0d fc 34 20 20 20 20 20  |. en% ....4     |
00002630  20 20 20 20 e3 20 54 25  3d 31 20 b8 20 3f 70 74  |    . T%=1 . ?pt|
00002640  72 25 3a 74 61 62 6c 65  33 25 3f 28 54 25 2d 31  |r%:table3%?(T%-1|
00002650  29 3d 70 74 72 25 3f 54  25 3a ed 0d 0e 06 0b 20  |)=ptr%?T%:..... |
00002660  20 20 20 20 20 cc 0d 0e  10 3e 20 20 20 20 20 20  |     ....>      |
00002670  20 20 20 e3 20 54 25 3d  31 20 b8 20 3f 70 74 72  |   . T%=1 . ?ptr|
00002680  25 3a 74 61 62 6c 65 33  25 3f 28 54 25 2d 31 29  |%:table3%?(T%-1)|
00002690  3d 74 61 62 6c 65 34 25  3f 28 70 74 72 25 3f 54  |=table4%?(ptr%?T|
000026a0  25 29 3a ed 0d 0e 1a 0b  20 20 20 20 20 20 cd 0d  |%):.....      ..|
000026b0  0e 24 17 20 20 20 20 20  20 70 74 72 25 2b 3d 3f  |.$.      ptr%+=?|
000026c0  70 74 72 25 2b 31 0d 0e  2e 21 20 20 20 20 20 20  |ptr%+1...!      |
000026d0  63 6f 75 6e 74 25 3d 28  21 93 29 20 80 20 26 37  |count%=(!.) . &7|
000026e0  46 46 46 46 46 46 46 0d  0e 38 24 20 20 20 20 20  |FFFFFFF..8$     |
000026f0  20 21 64 65 63 6f 6d 70  69 6e 70 74 72 3d 70 74  | !decompinptr=pt|
00002700  72 25 3a 21 62 69 74 3d  32 35 36 0d 0e 42 15 20  |r%:!bit=256..B. |
00002710  20 20 20 20 20 21 6c 61  73 74 62 79 74 65 3d 30  |     !lastbyte=0|
00002720  0d 0e 4c 1b 20 20 20 20  20 20 6f 75 74 70 74 72  |..L.      outptr|
00002730  25 3d 62 75 66 66 65 72  25 2b 31 0d 0e 56 19 20  |%=buffer%+1..V. |
00002740  20 20 20 20 20 3f 62 75  66 66 65 72 25 3d 3f 28  |     ?buffer%=?(|
00002750  93 2b 34 29 0d 0e 60 08  20 20 20 cd 0d 0e 6a 14  |.+4)..`.   ...j.|
00002760  20 20 20 66 69 72 73 74  77 72 69 74 65 25 3d b9  |   firstwrite%=.|
00002770  0d 0e 74 24 20 20 20 f2  73 74 61 74 65 28 73 74  |..t$   .state(st|
00002780  61 74 75 73 77 69 6e 25  2c 31 32 2c 31 3c 3c 32  |atuswin%,12,1<<2|
00002790  32 2c 30 29 0d 0e 7e 05  cd 0d 0e 88 05 e1 0d 0e  |2,0)..~.........|
000027a0  92 04 0d 0e 9c 0f dd 20  f2 64 6f 65 78 70 61 6e  |....... .doexpan|
000027b0  64 0d 0e a6 d0 e7 20 28  6f 75 74 70 74 72 25 3d  |d..... (outptr%=|
000027c0  62 75 66 66 65 72 25 2b  32 30 2a 31 30 32 34 29  |buffer%+20*1024)|
000027d0  20 84 20 28 63 6f 75 6e  74 25 3d 30 20 80 20 6f  | . (count%=0 . o|
000027e0  75 74 70 74 72 25 3e 62  75 66 66 65 72 25 29 20  |utptr%>buffer%) |
000027f0  84 20 66 69 72 73 74 77  72 69 74 65 25 20 8c 20  |. firstwrite% . |
00002800  c8 99 20 22 4f 53 5f 47  42 50 42 22 2c 32 2c 66  |.. "OS_GBPB",2,f|
00002810  69 6c 65 68 61 6e 64 6c  65 25 2c 62 75 66 66 65  |ilehandle%,buffe|
00002820  72 25 2c 6f 75 74 70 74  72 25 2d 62 75 66 66 65  |r%,outptr%-buffe|
00002830  72 25 3a 6f 75 74 70 74  72 25 3d 62 75 66 66 65  |r%:outptr%=buffe|
00002840  72 25 3a c8 99 20 22 4f  53 5f 41 72 67 73 22 2c  |r%:.. "OS_Args",|
00002850  32 35 35 2c 66 69 6c 65  68 61 6e 64 6c 65 25 3a  |255,filehandle%:|
00002860  c8 99 20 22 4f 53 5f 46  69 6c 65 22 2c 31 38 2c  |.. "OS_File",18,|
00002870  73 61 76 65 74 65 78 74  70 74 72 25 2c 26 46 46  |savetextptr%,&FF|
00002880  44 0d 0e b0 11 66 69 72  73 74 77 72 69 74 65 25  |D....firstwrite%|
00002890  3d 30 0d 0e ba 1a e7 20  63 6f 75 6e 74 25 3d 30  |=0..... count%=0|
000028a0  20 8c 20 f2 66 69 6e 69  73 68 3a e1 0d 0e c4 11  | . .finish:.....|
000028b0  e7 20 63 6f 75 6e 74 25  3c 31 36 20 8c 0d 0e ce  |. count%<16 ....|
000028c0  3c 21 64 65 63 6f 6d 70  6f 75 74 70 74 72 3d 6f  |<!decompoutptr=o|
000028d0  75 74 70 74 72 25 3a d6  20 64 65 63 6f 6d 70 72  |utptr%:. decompr|
000028e0  65 73 73 3a 6f 75 74 70  74 72 25 3d 21 64 65 63  |ess:outptr%=!dec|
000028f0  6f 6d 70 6f 75 74 70 74  72 0d 0e d8 0d 63 6f 75  |ompoutptr....cou|
00002900  6e 74 25 2d 3d 31 0d 0e  e2 05 cc 0d 0e ec 49 21  |nt%-=1........I!|
00002910  64 65 63 6f 6d 70 6f 75  74 70 74 72 3d 6f 75 74  |decompoutptr=out|
00002920  70 74 72 25 3a e3 20 54  25 3d 31 20 b8 31 36 3a  |ptr%:. T%=1 .16:|
00002930  d6 20 64 65 63 6f 6d 70  72 65 73 73 3a ed 3a 6f  |. decompress:.:o|
00002940  75 74 70 74 72 25 3d 21  64 65 63 6f 6d 70 6f 75  |utptr%=!decompou|
00002950  74 70 74 72 0d 0e f6 0e  63 6f 75 6e 74 25 2d 3d  |tptr....count%-=|
00002960  31 36 0d 0f 00 05 cd 0d  0f 0a 37 24 62 79 74 65  |16........7$byte|
00002970  73 70 74 72 25 3d c3 28  63 6f 75 6e 74 25 2a 31  |sptr%=.(count%*1|
00002980  36 29 3a f2 73 74 61 74  65 28 73 74 61 74 75 73  |6):.state(status|
00002990  77 69 6e 25 2c 31 31 2c  30 2c 30 29 3a e1 0d 0f  |win%,11,0,0):...|
000029a0  14 04 0d 0f 1e 0d dd 20  f2 66 69 6e 69 73 68 0d  |....... .finish.|
000029b0  0f 28 1b 62 6c 6f 63 6b  25 21 33 36 3d a2 23 66  |.(.block%!36=.#f|
000029c0  69 6c 65 68 61 6e 64 6c  65 25 0d 0f 32 1a 62 6c  |ilehandle%..2.bl|
000029d0  6f 63 6b 25 21 34 30 3d  6f 75 74 66 69 6c 65 74  |ock%!40=outfilet|
000029e0  79 70 65 25 0d 0f 3c 2d  c8 99 20 22 4f 53 5f 46  |ype%..<-.. "OS_F|
000029f0  69 6c 65 22 2c 31 38 2c  73 61 76 65 74 65 78 74  |ile",18,savetext|
00002a00  70 74 72 25 2c 6f 75 74  66 69 6c 65 74 79 70 65  |ptr%,outfiletype|
00002a10  25 0d 0f 46 1d 63 6f 6e  74 72 6f 6c 25 3d 30 3a  |%..F.control%=0:|
00002a20  d9 20 23 66 69 6c 65 68  61 6e 64 6c 65 25 0d 0f  |. #filehandle%..|
00002a30  50 0f f2 74 65 78 74 28  30 2c 22 22 29 0d 0f 5a  |P..text(0,"")..Z|
00002a40  14 62 6c 6f 63 6b 25 21  31 32 3d 6d 79 72 65 66  |.block%!12=myref|
00002a50  25 0d 0f 64 1f 21 62 6c  6f 63 6b 25 3d 34 34 2b  |%..d.!block%=44+|
00002a60  a9 24 73 61 76 65 74 65  78 74 70 74 72 25 2b 31  |.$savetextptr%+1|
00002a70  0d 0f 6e 21 21 62 6c 6f  63 6b 25 2b 3d 28 34 2d  |..n!!block%+=(4-|
00002a80  28 21 62 6c 6f 63 6b 25  20 80 20 33 29 29 80 20  |(!block% . 3)). |
00002a90  33 0d 0f 78 21 24 28 62  6c 6f 63 6b 25 2b 34 34  |3..x!$(block%+44|
00002aa0  29 3d 24 73 61 76 65 74  65 78 74 70 74 72 25 2b  |)=$savetextptr%+|
00002ab0  bd 30 0d 0f 82 0f 62 6c  6f 63 6b 25 21 31 36 3d  |.0....block%!16=|
00002ac0  33 0d 0f 8c 16 62 6c 6f  63 6b 25 21 32 30 3d 64  |3....block%!20=d|
00002ad0  65 73 74 77 69 6e 25 0d  0f 96 15 62 6c 6f 63 6b  |estwin%....block|
00002ae0  25 21 32 34 3d 64 65 73  74 69 63 25 0d 0f a0 14  |%!24=destic%....|
00002af0  62 6c 6f 63 6b 25 21 32  38 3d 64 65 73 74 78 25  |block%!28=destx%|
00002b00  0d 0f aa 14 62 6c 6f 63  6b 25 21 33 32 3d 64 65  |....block%!32=de|
00002b10  73 74 79 25 0d 0f b4 2d  c8 99 20 22 57 69 6d 70  |sty%...-.. "Wimp|
00002b20  5f 53 65 6e 64 4d 65 73  73 61 67 65 22 2c 31 37  |_SendMessage",17|
00002b30  2c 62 6c 6f 63 6b 25 2c  74 61 73 6b 73 65 6e 64  |,block%,tasksend|
00002b40  25 0d 0f be 05 e1 0d 0f  c8 04 0d 0f d2 10 dd 20  |%.............. |
00002b50  a4 62 75 69 6c 64 6d 65  6e 75 0d 0f dc 14 f3 20  |.buildmenu..... |
00002b60  24 70 74 72 25 3a 63 6f  75 6e 74 25 3d 30 0d 0f  |$ptr%:count%=0..|
00002b70  e6 15 70 74 72 25 21 31  32 3d 26 30 30 30 37 30  |..ptr%!12=&00070|
00002b80  32 30 37 0d 0f f0 0e 70  74 72 25 21 32 30 3d 34  |207....ptr%!20=4|
00002b90  34 0d 0f fa 0d 70 74 72  25 21 32 34 3d 30 0d 10  |4....ptr%!24=0..|
00002ba0  04 0e 6f 25 3d 70 74 72  25 2b 32 38 0d 10 0e 0d  |..o%=ptr%+28....|
00002bb0  77 25 3d a9 24 70 74 72  25 0d 10 18 05 f5 0d 10  |w%=.$ptr%.......|
00002bc0  22 08 f3 20 61 24 0d 10  2c 0e e7 20 61 24 3c 3e  |".. a$..,.. a$<>|
00002bd0  22 22 20 8c 0d 10 36 0c  20 20 20 21 6f 25 3d 30  |"" ...6.   !o%=0|
00002be0  0d 10 40 0e 20 20 20 6f  25 21 34 3d 2d 31 0d 10  |..@.   o%!4=-1..|
00002bf0  4a 15 20 20 20 6f 25 21  38 3d 26 30 37 30 30 30  |J.   o%!8=&07000|
00002c00  30 32 31 0d 10 54 15 20  20 20 e7 20 c0 61 24 2c  |021..T.   . .a$,|
00002c10  31 29 3d 22 24 22 20 8c  0d 10 5e 13 20 20 20 20  |1)="$" ...^.    |
00002c20  20 20 21 6f 25 3d 21 6f  25 2b 34 0d 10 68 1a 20  |  !o%=!o%+4..h. |
00002c30  20 20 20 20 20 6f 25 21  38 3d 6f 25 21 38 20 84  |     o%!8=o%!8 .|
00002c40  20 26 31 30 30 0d 10 72  1b 20 20 20 20 20 20 24  | &100..r.      $|
00002c50  28 74 79 70 65 25 2b 35  29 3d 22 41 30 2d 39 22  |(type%+5)="A0-9"|
00002c60  0d 10 7c 15 20 20 20 20  20 20 6f 25 21 31 32 3d  |..|.      o%!12=|
00002c70  74 79 70 65 25 0d 10 86  17 20 20 20 20 20 20 6f  |type%....      o|
00002c80  25 21 31 36 3d 74 79 70  65 25 2b 35 0d 10 90 11  |%!16=type%+5....|
00002c90  20 20 20 20 20 20 6f 25  21 32 30 3d 33 0d 10 9a  |      o%!20=3...|
00002ca0  17 20 20 20 20 20 20 e7  20 77 25 3c 32 20 8c 20  |.      . w%<2 . |
00002cb0  77 25 3d 32 0d 10 a4 1b  20 20 20 20 20 20 24 74  |w%=2....      $t|
00002cc0  79 70 65 25 3d c3 a4 67  65 74 6f 74 68 65 72 0d  |ype%=..getother.|
00002cd0  10 ae 08 20 20 20 cd 0d  10 b8 16 20 20 20 e7 20  |...   .....   . |
00002ce0  a7 61 24 2c 22 2d 3e 22  29 3e 30 20 8c 0d 10 c2  |.a$,"->")>0 ....|
00002cf0  22 20 20 20 20 20 20 6f  25 21 34 3d a0 28 c1 61  |"      o%!4=.(.a|
00002d00  24 2c a7 61 24 2c 22 2d  3e 22 29 2b 32 29 29 0d  |$,.a$,"->")+2)).|
00002d10  10 cc 1d 20 20 20 20 20  20 61 24 3d c0 61 24 2c  |...      a$=.a$,|
00002d20  a7 61 24 2c 22 2d 3e 22  29 2d 31 29 0d 10 d6 08  |.a$,"->")-1)....|
00002d30  20 20 20 cd 0d 10 e0 15  20 20 20 e7 20 a7 61 24  |   .....   . .a$|
00002d40  2c 22 40 22 29 3e 30 20  8c 0d 10 ea 1c 20 20 20  |,"@")>0 .....   |
00002d50  20 20 20 62 24 3d c1 61  24 2c a7 61 24 2c 22 40  |   b$=.a$,.a$,"@|
00002d60  22 29 2b 31 29 0d 10 f4  1c 20 20 20 20 20 20 61  |")+1)....      a|
00002d70  24 3d c0 61 24 2c a7 61  24 2c 22 40 22 29 2d 31  |$=.a$,.a$,"@")-1|
00002d80  29 0d 10 fe 22 20 20 20  20 20 20 e7 20 a0 28 62  |)..."      . .(b|
00002d90  24 29 3c 3e 30 20 8c 20  21 6f 25 3d 21 6f 25 20  |$)<>0 . !o%=!o% |
00002da0  84 20 31 0d 11 08 08 20  20 20 cd 0d 11 12 30 20  |. 1....   ....0 |
00002db0  20 20 e7 20 61 24 3c 3e  22 24 22 20 8c 20 24 28  |  . a$<>"$" . $(|
00002dc0  6f 25 2b 31 32 29 3d 61  24 3a e7 20 a9 61 24 3e  |o%+12)=a$:. .a$>|
00002dd0  77 25 20 8c 20 77 25 3d  a9 61 24 0d 11 1c 0d 20  |w% . w%=.a$.... |
00002de0  20 20 6f 25 2b 3d 32 34  0d 11 26 10 20 20 20 63  |  o%+=24..&.   c|
00002df0  6f 75 6e 74 25 2b 3d 31  0d 11 30 05 cd 0d 11 3a  |ount%+=1..0....:|
00002e00  0b fd 20 61 24 3d 22 22  0d 11 44 1a 69 25 3d 6f  |.. a$=""..D.i%=o|
00002e10  25 2d 32 34 3a 21 69 25  3d 21 69 25 20 84 20 31  |%-24:!i%=!i% . 1|
00002e20  32 38 0d 11 4e 14 70 74  72 25 21 31 36 3d 77 25  |28..N.ptr%!16=w%|
00002e30  2a 31 36 2b 31 36 0d 11  58 0e c8 94 20 70 74 72  |*16+16..X... ptr|
00002e40  25 2c 6f 25 0d 11 62 07  3d 6f 25 0d 11 6c 04 0d  |%,o%..b.=o%..l..|
00002e50  11 76 15 dd 20 f2 6d 65  6e 75 73 65 6c 65 63 74  |.v.. .menuselect|
00002e60  28 70 25 29 0d 11 80 24  c8 99 20 22 57 69 6d 70  |(p%)...$.. "Wimp|
00002e70  5f 47 65 74 50 6f 69 6e  74 65 72 49 6e 66 6f 22  |_GetPointerInfo"|
00002e80  2c 2c 62 6c 6f 63 6b 25  0d 11 8a 14 62 75 74 74  |,,block%....butt|
00002e90  6f 6e 25 3d 62 6c 6f 63  6b 25 21 38 0d 11 94 22  |on%=block%!8..."|
00002ea0  e7 20 21 70 25 3d 31 20  80 20 63 6f 6e 74 72 6f  |. !p%=1 . contro|
00002eb0  6c 25 3d 30 20 8c 20 71  75 69 74 25 3d b9 0d 11  |l%=0 . quit%=...|
00002ec0  9e 1a e7 20 21 70 25 3d  31 20 80 20 63 6f 6e 74  |... !p%=1 . cont|
00002ed0  72 6f 6c 25 3e 30 20 8c  0d 11 a8 0d 21 62 6c 6f  |rol%>0 .....!blo|
00002ee0  63 6b 25 3d 30 0d 11 b2  51 24 28 62 6c 6f 63 6b  |ck%=0...Q$(block|
00002ef0  25 2b 34 29 3d 22 41 6e  20 6f 70 65 72 61 74 69  |%+4)="An operati|
00002f00  6f 6e 20 69 73 20 69 6e  20 70 72 6f 67 72 65 73  |on is in progres|
00002f10  73 20 2d 20 61 72 65 20  79 6f 75 20 73 75 72 65  |s - are you sure|
00002f20  20 79 6f 75 20 77 61 6e  74 20 74 6f 20 71 75 69  | you want to qui|
00002f30  74 3f 22 2b bd 30 0d 11  bc 38 c8 99 20 22 57 69  |t?"+.0...8.. "Wi|
00002f40  6d 70 5f 52 65 70 6f 72  74 45 72 72 6f 72 22 2c  |mp_ReportError",|
00002f50  62 6c 6f 63 6b 25 2c 26  30 37 2c 22 43 6f 6d 70  |block%,&07,"Comp|
00002f60  72 65 73 73 6f 72 22 20  b8 20 2c 6f 6b 25 0d 11  |ressor" . ,ok%..|
00002f70  c6 1c e7 20 6f 6b 25 3c  32 20 8c 20 f2 61 62 6f  |... ok%<2 . .abo|
00002f80  72 74 3a 71 75 69 74 25  3d b9 0d 11 d0 05 cd 0d  |rt:quit%=.......|
00002f90  11 da 28 e7 20 28 62 75  74 74 6f 6e 25 20 80 20  |..(. (button% . |
00002fa0  31 29 3c 3e 30 20 8c 20  f2 69 63 6f 6e 62 61 72  |1)<>0 . .iconbar|
00002fb0  6d 65 6e 75 28 30 29 0d  11 e4 05 e1 0d 11 ee 04  |menu(0).........|
00002fc0  0d 11 f8 16 dd 20 f2 69  63 6f 6e 62 61 72 6d 65  |..... .iconbarme|
00002fd0  6e 75 28 78 25 29 0d 12  02 0d f2 6d 61 6b 65 6d  |nu(x%).....makem|
00002fe0  65 6e 75 0d 12 0c 36 c8  99 20 22 57 69 6d 70 5f  |enu...6.. "Wimp_|
00002ff0  43 72 65 61 74 65 4d 65  6e 75 22 2c 2c 6d 61 69  |CreateMenu",,mai|
00003000  6e 6d 65 6e 75 25 2c 78  25 2d 36 34 2c 39 36 2b  |nmenu%,x%-64,96+|
00003010  34 34 2a 63 6f 75 6e 74  25 0d 12 16 05 e1 0d 12  |44*count%.......|
00003020  20 04 0d 12 2a 16 dd 20  f2 6d 61 69 6e 6d 65 6e  | ...*.. .mainmen|
00003030  75 28 78 25 2c 79 25 29  0d 12 34 0d f2 6d 61 6b  |u(x%,y%)..4..mak|
00003040  65 6d 65 6e 75 0d 12 3e  2f c8 99 20 22 57 69 6d  |emenu..>/.. "Wim|
00003050  70 5f 43 72 65 61 74 65  4d 65 6e 75 22 2c 2c 6d  |p_CreateMenu",,m|
00003060  61 69 6e 6d 65 6e 75 25  2c 78 25 2d 36 34 2c 79  |ainmenu%,x%-64,y|
00003070  25 2b 31 36 0d 12 48 05  e1 0d 12 52 04 0d 12 5c  |%+16..H....R...\|
00003080  0f dd 20 f2 6d 61 6b 65  6d 65 6e 75 0d 12 66 08  |.. .makemenu..f.|
00003090  f7 20 2b 30 0d 12 70 0e  70 74 72 25 3d 6d 65 6e  |. +0..p.ptr%=men|
000030a0  75 25 0d 12 7a 18 6d 61  69 6e 6d 65 6e 75 25 3d  |u%..z.mainmenu%=|
000030b0  a4 62 75 69 6c 64 6d 65  6e 75 0d 12 84 05 e1 0d  |.buildmenu......|
000030c0  12 8e 04 0d 12 98 25 dc  20 43 6f 6d 70 72 65 73  |......%. Compres|
000030d0  73 2c 49 6e 66 6f 2d 3e  69 6e 66 6f 77 69 6e 25  |s,Info->infowin%|
000030e0  2c 51 75 69 74 2c 22 22  0d 12 a2 04 0d 12 ac 11  |,Quit,""........|
000030f0  dd 20 f2 64 6f 63 6f 6d  70 72 65 73 73 0d 12 b6  |. .docompress...|
00003100  0d 73 74 61 67 65 25 2b  3d 31 0d 12 c0 0f c8 8e  |.stage%+=1......|
00003110  20 73 74 61 67 65 25 20  ca 0d 12 ca 33 20 20 20  | stage% ....3   |
00003120  c9 20 31 3a e7 20 21 73  68 69 66 74 3e 30 20 8c  |. 1:. !shift>0 .|
00003130  20 f2 68 6f 6e 3a d6 20  63 6f 6e 76 65 72 74 74  | .hon:. convertt|
00003140  6f 37 62 69 74 73 3a f2  68 6f 66 66 0d 12 d4 44  |o7bits:.hoff...D|
00003150  20 20 20 20 20 20 e7 20  21 65 6e 68 61 6e 63 65  |      . !enhance|
00003160  3d 30 20 8c 20 f2 74 65  78 74 28 30 2c 22 43 6f  |=0 . .text(0,"Co|
00003170  6e 76 65 72 74 69 6e 67  20 74 6f 20 6c 6f 67 61  |nverting to loga|
00003180  72 69 74 68 6d 69 63 20  66 6f 72 6d 61 74 22 29  |rithmic format")|
00003190  0d 12 de 41 20 20 20 20  20 20 e7 20 21 65 6e 68  |...A      . !enh|
000031a0  61 6e 63 65 3e 30 20 80  20 21 73 68 69 66 74 3d  |ance>0 . !shift=|
000031b0  30 20 8c 20 f2 74 65 78  74 28 30 2c 22 53 63 61  |0 . .text(0,"Sca|
000031c0  6c 69 6e 67 20 69 6e 74  6f 20 72 61 6e 67 65 22  |ling into range"|
000031d0  29 0d 12 e8 2f 20 20 20  20 20 20 e7 20 21 65 6e  |).../      . !en|
000031e0  68 61 6e 63 65 3e 30 20  80 20 21 73 68 69 66 74  |hance>0 . !shift|
000031f0  3e 31 20 8c 20 f2 74 65  78 74 28 30 2c 22 22 29  |>1 . .text(0,"")|
00003200  0d 12 f2 56 20 20 20 c9  20 32 3a e7 20 21 65 6e  |...V   . 2:. !en|
00003210  68 61 6e 63 65 3d 30 20  8c 20 f2 68 6f 6e 3a d6  |hance=0 . .hon:.|
00003220  20 63 6f 6e 76 65 72 74  74 6f 6c 6f 67 3a f2 68  | converttolog:.h|
00003230  6f 66 66 20 8b 20 e7 20  21 73 68 69 66 74 3d 30  |off . . !shift=0|
00003240  20 8c 20 f2 68 6f 6e 3a  d6 20 6d 69 72 72 6f 72  | . .hon:. mirror|
00003250  3a f2 68 6f 66 66 0d 12  fc 24 20 20 20 20 20 20  |:.hoff...$      |
00003260  f2 74 65 78 74 28 30 2c  22 42 75 69 6c 64 69 6e  |.text(0,"Buildin|
00003270  67 20 74 61 62 6c 65 73  22 29 0d 13 06 23 20 20  |g tables")...#  |
00003280  20 c9 20 33 3a f2 68 6f  6e 3a d6 20 62 75 69 6c  | . 3:.hon:. buil|
00003290  64 74 61 62 6c 65 31 3a  f2 68 6f 66 66 0d 13 10  |dtable1:.hoff...|
000032a0  0f 20 20 20 c9 20 34 3a  f2 68 6f 6e 0d 13 1a 3a  |.   . 4:.hon...:|
000032b0  20 20 20 20 20 20 e7 20  21 65 6e 68 61 6e 63 65  |      . !enhance|
000032c0  20 8c 20 d6 20 62 75 69  6c 64 74 61 62 6c 65 32  | . . buildtable2|
000032d0  6c 69 6e 20 8b 20 d6 20  62 75 69 6c 64 74 61 62  |lin . . buildtab|
000032e0  6c 65 32 6c 6f 67 0d 13  24 0f 20 20 20 20 20 20  |le2log..$.      |
000032f0  f2 68 6f 66 66 0d 13 2e  1e 20 20 20 20 20 20 6f  |.hoff....      o|
00003300  75 74 70 74 72 25 3f 35  3d 21 74 61 62 6c 65 33  |utptr%?5=!table3|
00003310  6c 65 6e 0d 13 38 14 20  20 20 20 20 20 6f 75 74  |len..8.      out|
00003320  70 74 72 25 2b 3d 36 0d  13 42 42 20 20 20 20 20  |ptr%+=6..BB     |
00003330  20 e3 20 54 25 3d 31 20  b8 20 21 74 61 62 6c 65  | . T%=1 . !table|
00003340  33 6c 65 6e 3a 3f 6f 75  74 70 74 72 25 3d 74 61  |3len:?outptr%=ta|
00003350  62 6c 65 33 25 3f 28 54  25 2d 31 29 3a 6f 75 74  |ble3%?(T%-1):out|
00003360  70 74 72 25 2b 3d 31 3a  ed 0d 13 4c 19 20 20 20  |ptr%+=1:...L.   |
00003370  20 20 20 21 6f 75 74 70  74 72 3d 6f 75 74 70 74  |   !outptr=outpt|
00003380  72 25 0d 13 56 3f 20 20  20 20 20 20 f2 74 65 78  |r%..V?      .tex|
00003390  74 28 31 2c c3 28 21 74  61 62 6c 65 33 6c 65 6e  |t(1,.(!table3len|
000033a0  2f 32 35 36 2a 31 30 30  29 2b 22 25 20 6f 66 20  |/256*100)+"% of |
000033b0  44 2f 41 20 76 61 6c 75  65 73 20 75 73 65 64 22  |D/A values used"|
000033c0  29 0d 13 60 2d 20 20 20  20 20 20 f2 74 65 78 74  |)..`-      .text|
000033d0  28 30 2c 22 43 6f 6e 76  65 72 74 69 6e 67 20 74  |(0,"Converting t|
000033e0  6f 20 6e 65 77 20 66 6f  72 6d 61 74 22 29 0d 13  |o new format")..|
000033f0  6a 2a 20 20 20 c9 20 35  3a f2 68 6f 6e 3a d6 20  |j*   . 5:.hon:. |
00003400  63 6f 6e 76 65 72 74 74  6f 6e 65 77 66 6f 72 6d  |converttonewform|
00003410  61 74 3a f2 68 6f 66 66  0d 13 74 2c 20 20 20 20  |at:.hoff..t,    |
00003420  20 20 f2 74 65 78 74 28  30 2c 22 43 61 6c 63 75  |  .text(0,"Calcu|
00003430  6c 61 74 69 6e 67 20 64  69 66 66 65 72 65 6e 63  |lating differenc|
00003440  65 73 22 29 0d 13 7e 2c  20 20 20 c9 20 36 3a f2  |es")..~,   . 6:.|
00003450  68 6f 6e 3a d6 20 63 61  6c 63 75 6c 61 74 65 64  |hon:. calculated|
00003460  69 66 66 65 72 65 6e 63  65 73 3a f2 68 6f 66 66  |ifferences:.hoff|
00003470  0d 13 88 27 20 20 20 20  20 20 f2 74 65 78 74 28  |...'      .text(|
00003480  30 2c 22 43 6f 6d 70 72  65 73 73 69 6e 67 20 73  |0,"Compressing s|
00003490  61 6d 70 6c 65 22 29 0d  13 92 15 20 20 20 20 20  |ample")....     |
000034a0  20 f2 74 65 78 74 28 31  2c 22 22 29 0d 13 9c 1e  | .text(1,"")....|
000034b0  20 20 20 c9 20 37 3a f2  63 6f 6d 70 72 65 73 73  |   . 7:.compress|
000034c0  73 61 6d 70 6c 65 64 61  74 61 0d 13 a6 24 20 20  |sampledata...$  |
000034d0  20 20 20 20 e7 20 21 73  61 6d 70 6c 65 6c 65 6e  |    . !samplelen|
000034e0  3e 30 20 8c 20 73 74 61  67 65 25 2d 3d 31 0d 13  |>0 . stage%-=1..|
000034f0  b0 28 20 20 20 c9 20 38  3a e7 20 21 62 69 74 3e  |.(   . 8:. !bit>|
00003500  31 20 8c 20 43 25 3d 21  62 79 74 65 3a d6 20 70  |1 . C%=!byte:. p|
00003510  75 74 62 79 74 65 0d 13  ba 29 20 20 20 20 20 20  |utbyte...)      |
00003520  e7 20 21 6f 75 74 70 74  72 3e 62 75 66 66 65 72  |. !outptr>buffer|
00003530  25 20 8c 20 d6 20 77 72  69 74 65 6c 75 6d 70 0d  |% . . writelump.|
00003540  13 c4 47 20 20 20 20 20  20 f2 74 65 78 74 28 31  |..G      .text(1|
00003550  2c c3 28 a2 23 21 66 69  6c 65 68 61 6e 64 6c 65  |,.(.#!filehandle|
00003560  2f 69 6e 66 69 6c 65 6c  65 6e 25 2a 31 30 30 29  |/infilelen%*100)|
00003570  2b 22 25 20 6f 66 20 6f  72 69 67 69 6e 61 6c 20  |+"% of original |
00003580  73 69 7a 65 22 29 0d 13  ce 11 20 20 20 20 20 20  |size")....      |
00003590  f2 66 69 6e 69 73 68 0d  13 d8 05 cb 0d 13 e2 05  |.finish.........|
000035a0  e1 0d 13 ec 04 0d 13 f6  1f dd 20 f2 68 6f 6e 3a  |.......... .hon:|
000035b0  c8 99 20 22 58 48 6f 75  72 67 6c 61 73 73 5f 4f  |.. "XHourglass_O|
000035c0  6e 22 3a e1 0d 14 00 21  dd 20 f2 68 6f 66 66 3a  |n":....!. .hoff:|
000035d0  c8 99 20 22 58 48 6f 75  72 67 6c 61 73 73 5f 4f  |.. "XHourglass_O|
000035e0  66 66 22 3a e1 0d 14 0a  04 0d 14 14 19 dd 20 f2  |ff":.......... .|
000035f0  63 6f 6d 70 72 65 73 73  73 61 6d 70 6c 65 64 61  |compresssampleda|
00003600  74 61 0d 14 1e 0d d6 20  63 6f 6e 74 72 6f 6c 0d  |ta..... control.|
00003610  14 28 55 f2 74 65 78 74  28 31 2c c3 28 28 a2 23  |.(U.text(1,.((.#|
00003620  21 66 69 6c 65 68 61 6e  64 6c 65 2b 21 6f 75 74  |!filehandle+!out|
00003630  70 74 72 2d 62 75 66 66  65 72 25 29 2f 28 21 70  |ptr-buffer%)/(!p|
00003640  6f 69 6e 74 65 72 2d 93  29 2a 31 30 30 29 2b 22  |ointer-.)*100)+"|
00003650  25 20 6f 66 20 6f 72 69  67 69 6e 61 6c 20 73 69  |% of original si|
00003660  7a 65 22 29 0d 14 32 41  24 62 79 74 65 73 70 74  |ze")..2A$bytespt|
00003670  72 25 3d c3 28 93 2b 69  6e 66 69 6c 65 6c 65 6e  |r%=.(.+infilelen|
00003680  25 2d 21 70 6f 69 6e 74  65 72 29 3a f2 73 74 61  |%-!pointer):.sta|
00003690  74 65 28 73 74 61 74 75  73 77 69 6e 25 2c 31 31  |te(statuswin%,11|
000036a0  2c 30 2c 30 29 0d 14 3c  05 e1 0d 14 46 04 0d 14  |,0,0)..<....F...|
000036b0  50 10 dd 20 f2 73 74 61  72 74 63 6f 6d 70 0d 14  |P.. .startcomp..|
000036c0  5a 11 21 73 68 69 66 74  3d 38 2d 72 65 73 25 0d  |Z.!shift=8-res%.|
000036d0  14 64 18 21 65 6e 68 61  6e 63 65 3d 65 6e 68 61  |.d.!enhance=enha|
000036e0  6e 63 65 25 20 80 31 0d  14 6e 11 21 70 6f 69 6e  |nce% .1..n.!poin|
000036f0  74 65 72 3d 70 74 72 25  0d 14 78 1b 21 73 61 6d  |ter=ptr%..x.!sam|
00003700  70 6c 65 6c 65 6e 3d 69  6e 66 69 6c 65 6c 65 6e  |plelen=infilelen|
00003710  25 2d 31 0d 14 82 1b 21  66 69 6c 65 68 61 6e 64  |%-1....!filehand|
00003720  6c 65 3d 66 69 6c 65 68  61 6e 64 6c 65 25 0d 14  |le=filehandle%..|
00003730  8c 0c 73 74 61 67 65 25  3d 30 0d 14 96 31 c8 99  |..stage%=0...1..|
00003740  20 22 53 6f 75 6e 64 5f  43 6f 6e 66 69 67 75 72  | "Sound_Configur|
00003750  65 22 20 b8 20 2c 2c 2c  6c 6f 67 25 3a 21 6c 6f  |e" . ,,,log%:!lo|
00003760  67 70 74 72 3d 6c 6f 67  25 21 38 0d 14 a0 2b f2  |gptr=log%!8...+.|
00003770  74 65 78 74 28 30 2c 22  43 6f 6e 76 65 72 74 69  |text(0,"Converti|
00003780  6e 67 20 74 6f 20 22 2b  c3 72 65 73 25 2b 22 20  |ng to "+.res%+" |
00003790  62 69 74 73 22 29 0d 14  aa 0f f2 74 65 78 74 28  |bits").....text(|
000037a0  31 2c 22 22 29 0d 14 b4  2b 21 6f 75 74 70 74 72  |1,"")...+!outptr|
000037b0  25 3d 28 63 6f 75 6e 74  25 20 81 20 31 36 29 20  |%=(count% . 16) |
000037c0  84 20 28 21 65 6e 68 61  6e 63 65 3c 3c 33 31 29  |. (!enhance<<31)|
000037d0  0d 14 be 19 21 6f 75 74  62 75 66 66 73 74 61 72  |....!outbuffstar|
000037e0  74 3d 62 75 66 66 65 72  25 0d 14 c8 1d 21 66 69  |t=buffer%....!fi|
000037f0  6c 65 6e 61 6d 65 70 74  72 3d 73 61 76 65 74 65  |lenameptr=savete|
00003800  78 74 70 74 72 25 0d 14  d2 1f 21 6f 75 74 62 75  |xtptr%....!outbu|
00003810  66 66 65 6e 64 3d 62 75  66 66 65 72 25 2b 32 30  |ffend=buffer%+20|
00003820  2a 31 30 32 34 0d 14 dc  10 6f 75 74 70 74 72 25  |*1024....outptr%|
00003830  3f 34 3d 3f 93 0d 14 e6  1b 21 62 79 74 65 3d 30  |?4=?.....!byte=0|
00003840  3a 21 62 69 74 3d 31 3a  21 63 6f 75 6e 74 3d 30  |:!bit=1:!count=0|
00003850  0d 14 f0 05 e1 0d 14 fa  04 0d 15 04 0c dd 20 f2  |.............. .|
00003860  61 73 73 65 6d 0d 15 0e  40 f4 20 74 61 62 6c 65  |assem...@. table|
00003870  20 31 20 69 73 20 61 20  74 61 62 6c 65 20 6f 66  | 1 is a table of|
00003880  20 66 6c 61 67 73 20 73  61 79 69 6e 67 20 77 68  | flags saying wh|
00003890  65 74 68 65 72 20 61 20  76 61 6c 75 65 20 69 73  |ether a value is|
000038a0  20 75 73 65 64 0d 15 18  47 f4 20 74 61 62 6c 65  | used...G. table|
000038b0  20 32 20 69 73 20 66 6f  72 20 63 6f 6e 76 65 72  | 2 is for conver|
000038c0  74 69 6e 67 20 74 68 65  20 73 61 6d 70 6c 65 20  |ting the sample |
000038d0  74 6f 20 61 20 6d 6f 72  65 20 63 6f 6d 70 72 65  |to a more compre|
000038e0  73 73 65 64 20 76 65 72  73 69 6f 6e 0d 15 22 36  |ssed version.."6|
000038f0  f4 20 74 61 62 6c 65 20  33 20 69 73 20 66 6f 72  |. table 3 is for|
00003900  20 74 68 65 20 63 6f 6d  70 72 65 73 73 65 64 20  | the compressed |
00003910  76 65 72 73 69 6f 6e 20  62 61 63 6b 20 61 67 61  |version back aga|
00003920  69 6e 0d 15 2c 04 0d 15  36 3e de 20 63 6f 64 65  |in..,...6>. code|
00003930  25 20 26 34 30 30 30 2c  74 61 62 6c 65 31 25 20  |% &4000,table1% |
00003940  32 35 36 2c 74 61 62 6c  65 32 25 20 32 35 36 2c  |256,table2% 256,|
00003950  74 61 62 6c 65 33 25 20  32 35 36 2c 62 75 66 66  |table3% 256,buff|
00003960  25 20 31 36 0d 15 40 14  e3 20 50 41 53 53 3d 30  |% 16..@.. PASS=0|
00003970  20 b8 20 32 20 88 20 32  0d 15 4a 16 50 25 3d 63  | . 2 . 2..J.P%=c|
00003980  6f 64 65 25 3a 5b 4f 50  54 20 50 41 53 53 0d 15  |ode%:[OPT PASS..|
00003990  54 04 0d 15 5e 20 5c 20  2d 2d 2d 2d 2d 2d 2d 2d  |T...^ \ --------|
000039a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000039b0  2d 2d 0d 15 68 04 0d 15  72 13 2e 63 6f 6e 76 65  |--..h...r..conve|
000039c0  72 74 74 6f 37 62 69 74  73 0d 15 7c 12 4c 44 52  |rtto7bits..|.LDR|
000039d0  20 52 30 2c 70 6f 69 6e  74 65 72 0d 15 86 14 4c  | R0,pointer....L|
000039e0  44 52 20 52 31 2c 73 61  6d 70 6c 65 6c 65 6e 0d  |DR R1,samplelen.|
000039f0  15 90 10 4c 44 52 20 52  34 2c 73 68 69 66 74 0d  |...LDR R4,shift.|
00003a00  15 9a 0d 2e 62 69 74 37  6c 6f 6f 70 0d 15 a4 10  |....bit7loop....|
00003a10  4c 44 52 42 20 52 32 2c  5b 52 30 5d 0d 15 ae 14  |LDRB R2,[R0]....|
00003a20  4d 4f 56 20 52 32 2c 52  32 2c 4c 53 52 20 52 34  |MOV R2,R2,LSR R4|
00003a30  0d 15 b8 14 4d 4f 56 20  52 32 2c 52 32 2c 4c 53  |....MOV R2,R2,LS|
00003a40  4c 20 52 34 0d 15 c2 13  53 54 52 42 20 52 32 2c  |L R4....STRB R2,|
00003a50  5b 52 30 5d 2c 23 31 0d  15 cc 11 53 55 42 53 20  |[R0],#1....SUBS |
00003a60  52 31 2c 52 31 2c 23 31  0d 15 d6 10 42 4e 45 20  |R1,R1,#1....BNE |
00003a70  62 69 74 37 6c 6f 6f 70  0d 15 e0 0f 4d 4f 56 53  |bit7loop....MOVS|
00003a80  20 50 43 2c 52 31 34 0d  15 ea 04 0d 15 f4 20 5c  | PC,R14....... \|
00003a90  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00003aa0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 15 fe 04 0d  |-----------.....|
00003ab0  16 08 0b 2e 6d 69 72 72  6f 72 0d 16 12 12 4c 44  |....mirror....LD|
00003ac0  52 20 52 30 2c 70 6f 69  6e 74 65 72 0d 16 1c 14  |R R0,pointer....|
00003ad0  4c 44 52 20 52 31 2c 73  61 6d 70 6c 65 6c 65 6e  |LDR R1,samplelen|
00003ae0  0d 16 26 0f 4d 56 4e 20  52 33 2c 23 31 32 36 0d  |..&.MVN R3,#126.|
00003af0  16 30 0f 2e 6d 69 72 72  6f 72 6c 6f 6f 70 0d 16  |.0..mirrorloop..|
00003b00  3a 13 4c 44 52 42 20 52  32 2c 5b 52 30 5d 2c 23  |:.LDRB R2,[R0],#|
00003b10  31 0d 16 44 0f 43 4d 50  20 52 32 2c 23 31 32 38  |1..D.CMP R2,#128|
00003b20  0d 16 4e 16 53 54 52 45  51 42 20 52 33 2c 5b 52  |..N.STREQB R3,[R|
00003b30  30 2c 23 2d 31 5d 0d 16  58 11 53 55 42 53 20 52  |0,#-1]..X.SUBS R|
00003b40  31 2c 52 31 2c 23 31 0d  16 62 12 42 4e 45 20 6d  |1,R1,#1..b.BNE m|
00003b50  69 72 72 6f 72 6c 6f 6f  70 0d 16 6c 0f 4d 4f 56  |irrorloop..l.MOV|
00003b60  53 20 50 43 2c 52 31 34  0d 16 76 04 0d 16 80 20  |S PC,R14..v.... |
00003b70  5c 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |\ --------------|
00003b80  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 16 8a 04  |------------....|
00003b90  0d 16 94 11 2e 63 6f 6e  76 65 72 74 74 6f 6c 6f  |.....converttolo|
00003ba0  67 0d 16 9e 12 4c 44 52  20 52 30 2c 70 6f 69 6e  |g....LDR R0,poin|
00003bb0  74 65 72 0d 16 a8 14 4c  44 52 20 52 31 2c 73 61  |ter....LDR R1,sa|
00003bc0  6d 70 6c 65 6c 65 6e 0d  16 b2 11 4c 44 52 20 52  |mplelen....LDR R|
00003bd0  32 2c 6c 6f 67 70 74 72  0d 16 bc 15 2e 63 6f 6e  |2,logptr.....con|
00003be0  76 65 72 74 74 6f 6c 6f  67 6c 6f 6f 70 0d 16 c6  |verttologloop...|
00003bf0  10 4c 44 52 42 20 52 33  2c 5b 52 30 5d 0d 16 d0  |.LDRB R3,[R0]...|
00003c00  1a 4c 44 52 42 20 52 33  2c 5b 52 32 2c 52 33 2c  |.LDRB R3,[R2,R3,|
00003c10  4c 53 4c 20 23 35 5d 0d  16 da 13 53 54 52 42 20  |LSL #5]....STRB |
00003c20  52 33 2c 5b 52 30 5d 2c  23 31 0d 16 e4 11 53 55  |R3,[R0],#1....SU|
00003c30  42 53 20 52 31 2c 52 31  2c 23 31 0d 16 ee 18 42  |BS R1,R1,#1....B|
00003c40  4e 45 20 63 6f 6e 76 65  72 74 74 6f 6c 6f 67 6c  |NE converttologl|
00003c50  6f 6f 70 0d 16 f8 0f 4d  4f 56 53 20 50 43 2c 52  |oop....MOVS PC,R|
00003c60  31 34 0d 17 02 04 0d 17  0c 20 5c 20 2d 2d 2d 2d  |14....... \ ----|
00003c70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00003c80  2d 2d 2d 2d 2d 2d 0d 17  16 04 0d 17 20 10 2e 62  |------...... ..b|
00003c90  75 69 6c 64 74 61 62 6c  65 31 0d 17 2a 12 4c 44  |uildtable1..*.LD|
00003ca0  52 20 52 30 2c 70 6f 69  6e 74 65 72 0d 17 34 14  |R R0,pointer..4.|
00003cb0  4c 44 52 20 52 31 2c 73  61 6d 70 6c 65 6c 65 6e  |LDR R1,samplelen|
00003cc0  0d 17 3e 14 4c 44 52 20  52 32 2c 66 6c 61 67 74  |..>.LDR R2,flagt|
00003cd0  61 62 6c 65 0d 17 48 0d  4d 4f 56 20 52 34 2c 23  |able..H.MOV R4,#|
00003ce0  30 0d 17 52 0f 4d 4f 56  20 52 33 2c 23 32 35 35  |0..R.MOV R3,#255|
00003cf0  0d 17 5c 15 2e 62 75 69  6c 64 74 61 62 6c 65 31  |..\..buildtable1|
00003d00  6c 6f 6f 70 31 0d 17 66  13 53 54 52 42 20 52 34  |loop1..f.STRB R4|
00003d10  2c 5b 52 32 2c 52 33 5d  0d 17 70 11 53 55 42 53  |,[R2,R3]..p.SUBS|
00003d20  20 52 33 2c 52 33 2c 23  31 0d 17 7a 18 42 50 4c  | R3,R3,#1..z.BPL|
00003d30  20 62 75 69 6c 64 74 61  62 6c 65 31 6c 6f 6f 70  | buildtable1loop|
00003d40  31 0d 17 84 0f 4d 4f 56  20 52 34 2c 23 26 46 46  |1....MOV R4,#&FF|
00003d50  0d 17 8e 15 2e 62 75 69  6c 64 74 61 62 6c 65 31  |.....buildtable1|
00003d60  6c 6f 6f 70 32 0d 17 98  13 4c 44 52 42 20 52 33  |loop2....LDRB R3|
00003d70  2c 5b 52 30 5d 2c 23 31  0d 17 a2 13 53 54 52 42  |,[R0],#1....STRB|
00003d80  20 52 34 2c 5b 52 32 2c  52 33 5d 0d 17 ac 11 53  | R4,[R2,R3]....S|
00003d90  55 42 53 20 52 31 2c 52  31 2c 23 31 0d 17 b6 18  |UBS R1,R1,#1....|
00003da0  42 4e 45 20 62 75 69 6c  64 74 61 62 6c 65 31 6c  |BNE buildtable1l|
00003db0  6f 6f 70 32 0d 17 c0 0f  4d 4f 56 53 20 50 43 2c  |oop2....MOVS PC,|
00003dc0  52 31 34 0d 17 ca 04 0d  17 d4 07 5c 20 2d 0d 17  |R14........\ -..|
00003dd0  de 04 0d 17 e8 13 2e 62  75 69 6c 64 74 61 62 6c  |.......buildtabl|
00003de0  65 32 6c 69 6e 0d 17 f2  14 4c 44 52 20 52 32 2c  |e2lin....LDR R2,|
00003df0  66 6c 61 67 74 61 62 6c  65 0d 17 fc 14 4c 44 52  |flagtable....LDR|
00003e00  20 52 33 2c 74 61 62 6c  65 32 70 74 72 0d 18 06  | R3,table2ptr...|
00003e10  14 4c 44 52 20 52 34 2c  74 61 62 6c 65 33 70 74  |.LDR R4,table3pt|
00003e20  72 0d 18 10 0d 4d 4f 56  20 52 30 2c 23 30 0d 18  |r....MOV R0,#0..|
00003e30  1a 0d 4d 4f 56 20 52 36  2c 23 30 0d 18 24 17 2e  |..MOV R6,#0..$..|
00003e40  62 75 69 6c 64 74 61 62  6c 65 32 6c 69 6e 6c 6f  |buildtable2linlo|
00003e50  6f 70 0d 18 2e 10 82 20  52 31 2c 52 30 2c 23 31  |op..... R1,R0,#1|
00003e60  32 38 0d 18 38 13 4c 44  52 42 20 52 35 2c 5b 52  |28..8.LDRB R5,[R|
00003e70  32 2c 52 31 5d 0d 18 42  0d 54 45 51 20 52 35 2c  |2,R1]..B.TEQ R5,|
00003e80  23 30 0d 18 4c 15 53 54  52 4e 45 42 20 52 36 2c  |#0..L.STRNEB R6,|
00003e90  5b 52 33 2c 52 31 5d 0d  18 56 15 53 54 52 4e 45  |[R3,R1]..V.STRNE|
00003ea0  42 20 52 31 2c 5b 52 34  2c 52 36 5d 0d 18 60 12  |B R1,[R4,R6]..`.|
00003eb0  41 44 44 4e 45 20 52 36  2c 52 36 2c 23 31 0d 18  |ADDNE R6,R6,#1..|
00003ec0  6a 10 41 44 44 20 52 30  2c 52 30 2c 23 31 0d 18  |j.ADD R0,R0,#1..|
00003ed0  74 0f 43 4d 50 20 52 30  2c 23 32 35 36 0d 18 7e  |t.CMP R0,#256..~|
00003ee0  1a 42 4c 54 20 62 75 69  6c 64 74 61 62 6c 65 32  |.BLT buildtable2|
00003ef0  6c 69 6e 6c 6f 6f 70 0d  18 88 14 53 54 52 20 52  |linloop....STR R|
00003f00  36 2c 74 61 62 6c 65 33  6c 65 6e 0d 18 92 0f 4d  |6,table3len....M|
00003f10  4f 56 53 20 50 43 2c 52  31 34 0d 18 9c 04 0d 18  |OVS PC,R14......|
00003f20  a6 07 5c 20 2d 0d 18 b0  04 0d 18 ba 13 2e 62 75  |..\ -.........bu|
00003f30  69 6c 64 74 61 62 6c 65  32 6c 6f 67 0d 18 c4 14  |ildtable2log....|
00003f40  4c 44 52 20 52 32 2c 66  6c 61 67 74 61 62 6c 65  |LDR R2,flagtable|
00003f50  0d 18 ce 14 4c 44 52 20  52 33 2c 74 61 62 6c 65  |....LDR R3,table|
00003f60  32 70 74 72 0d 18 d8 14  4c 44 52 20 52 34 2c 74  |2ptr....LDR R4,t|
00003f70  61 62 6c 65 33 70 74 72  0d 18 e2 13 4c 44 52 42  |able3ptr....LDRB|
00003f80  20 52 30 2c 5b 52 32 2c  23 31 5d 0d 18 ec 13 4c  | R0,[R2,#1]....L|
00003f90  44 52 42 20 52 31 2c 5b  52 32 2c 23 30 5d 0d 18  |DRB R1,[R2,#0]..|
00003fa0  f6 0f 84 52 20 52 30 2c  52 30 2c 52 31 0d 19 00  |...R R0,R0,R1...|
00003fb0  13 53 54 52 42 20 52 30  2c 5b 52 32 2c 23 31 5d  |.STRB R0,[R2,#1]|
00003fc0  0d 19 0a 13 53 54 52 42  20 52 30 2c 5b 52 32 2c  |....STRB R0,[R2,|
00003fd0  23 30 5d 0d 19 14 0d 4d  4f 56 20 52 30 2c 23 31  |#0]....MOV R0,#1|
00003fe0  0d 19 1e 0d 4d 4f 56 20  52 36 2c 23 30 0d 19 28  |....MOV R6,#0..(|
00003ff0  17 2e 62 75 69 6c 64 74  61 62 6c 65 32 6c 6f 67  |..buildtable2log|
00004000  6c 6f 6f 70 0d 19 32 13  53 55 42 53 20 52 31 2c  |loop..2.SUBS R1,|
00004010  52 30 2c 23 31 32 38 0d  19 3c 12 52 53 42 4d 49  |R0,#128..<.RSBMI|
00004020  20 52 31 2c 52 31 2c 23  30 0d 19 46 14 4d 4f 56  | R1,R1,#0..F.MOV|
00004030  20 52 31 2c 52 31 2c 4c  53 4c 20 23 31 0d 19 50  | R1,R1,LSL #1..P|
00004040  11 84 52 4d 49 20 52 31  2c 52 31 2c 23 31 0d 19  |..RMI R1,R1,#1..|
00004050  5a 13 4c 44 52 42 20 52  35 2c 5b 52 32 2c 52 31  |Z.LDRB R5,[R2,R1|
00004060  5d 0d 19 64 0d 54 45 51  20 52 35 2c 23 30 0d 19  |]..d.TEQ R5,#0..|
00004070  6e 15 53 54 52 4e 45 42  20 52 36 2c 5b 52 33 2c  |n.STRNEB R6,[R3,|
00004080  52 31 5d 0d 19 78 15 53  54 52 4e 45 42 20 52 31  |R1]..x.STRNEB R1|
00004090  2c 5b 52 34 2c 52 36 5d  0d 19 82 12 41 44 44 4e  |,[R4,R6]....ADDN|
000040a0  45 20 52 36 2c 52 36 2c  23 31 0d 19 8c 10 41 44  |E R6,R6,#1....AD|
000040b0  44 20 52 30 2c 52 30 2c  23 31 0d 19 96 0f 43 4d  |D R0,R0,#1....CM|
000040c0  50 20 52 30 2c 23 32 35  36 0d 19 a0 1a 42 4c 54  |P R0,#256....BLT|
000040d0  20 62 75 69 6c 64 74 61  62 6c 65 32 6c 6f 67 6c  | buildtable2logl|
000040e0  6f 6f 70 0d 19 aa 14 53  54 52 20 52 36 2c 74 61  |oop....STR R6,ta|
000040f0  62 6c 65 33 6c 65 6e 0d  19 b4 0f 4d 4f 56 53 20  |ble3len....MOVS |
00004100  50 43 2c 52 31 34 0d 19  be 04 0d 19 c8 20 5c 20  |PC,R14....... \ |
00004110  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00004120  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 19 d2 04 0d 19  |----------......|
00004130  dc 17 2e 63 6f 6e 76 65  72 74 74 6f 6e 65 77 66  |...converttonewf|
00004140  6f 72 6d 61 74 0d 19 e6  12 4c 44 52 20 52 30 2c  |ormat....LDR R0,|
00004150  70 6f 69 6e 74 65 72 0d  19 f0 14 4c 44 52 20 52  |pointer....LDR R|
00004160  31 2c 73 61 6d 70 6c 65  6c 65 6e 0d 19 fa 14 4c  |1,samplelen....L|
00004170  44 52 20 52 32 2c 74 61  62 6c 65 32 70 74 72 0d  |DR R2,table2ptr.|
00004180  1a 04 12 2e 6e 65 77 66  6f 72 6d 61 74 6c 6f 6f  |....newformatloo|
00004190  70 0d 1a 0e 10 4c 44 52  42 20 52 33 2c 5b 52 30  |p....LDRB R3,[R0|
000041a0  5d 0d 1a 18 13 4c 44 52  42 20 52 33 2c 5b 52 32  |]....LDRB R3,[R2|
000041b0  2c 52 33 5d 0d 1a 22 13  53 54 52 42 20 52 33 2c  |,R3]..".STRB R3,|
000041c0  5b 52 30 5d 2c 23 31 0d  1a 2c 11 53 55 42 53 20  |[R0],#1..,.SUBS |
000041d0  52 31 2c 52 31 2c 23 31  0d 1a 36 15 42 4e 45 20  |R1,R1,#1..6.BNE |
000041e0  6e 65 77 66 6f 72 6d 61  74 6c 6f 6f 70 0d 1a 40  |newformatloop..@|
000041f0  0f 4d 4f 56 53 20 50 43  2c 52 31 34 0d 1a 4a 04  |.MOVS PC,R14..J.|
00004200  0d 1a 54 20 5c 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..T \ ----------|
00004210  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00004220  0d 1a 5e 04 0d 1a 68 19  2e 63 61 6c 63 75 6c 61  |..^...h..calcula|
00004230  74 65 64 69 66 66 65 72  65 6e 63 65 73 0d 1a 72  |tedifferences..r|
00004240  12 4c 44 52 20 52 30 2c  70 6f 69 6e 74 65 72 0d  |.LDR R0,pointer.|
00004250  1a 7c 14 4c 44 52 20 52  31 2c 73 61 6d 70 6c 65  |.|.LDR R1,sample|
00004260  6c 65 6e 0d 1a 86 0d 4d  4f 56 20 52 32 2c 23 30  |len....MOV R2,#0|
00004270  0d 1a 90 0d 4d 4f 56 20  52 35 2c 23 30 0d 1a 9a  |....MOV R5,#0...|
00004280  17 4d 56 4e 20 52 36 2c  23 31 32 36 3a 5c 20 3d  |.MVN R6,#126:\ =|
00004290  2d 31 32 37 0d 1a a4 1d  2e 63 61 6c 63 75 6c 61  |-127.....calcula|
000042a0  74 65 64 69 66 66 65 72  65 6e 63 65 73 6c 6f 6f  |tedifferencesloo|
000042b0  70 0d 1a ae 10 4c 44 52  42 20 52 33 2c 5b 52 30  |p....LDRB R3,[R0|
000042c0  5d 0d 1a b8 10 53 55 42  20 52 34 2c 52 33 2c 52  |]....SUB R4,R3,R|
000042d0  32 0d 1a c2 10 41 44 44  20 52 34 2c 52 34 2c 52  |2....ADD R4,R4,R|
000042e0  35 0d 1a cc 0d 4d 4f 56  20 52 35 2c 23 30 0d 1a  |5....MOV R5,#0..|
000042f0  d6 0d 4d 4f 56 20 52 32  2c 52 33 0d 1a e0 0f 43  |..MOV R2,R3....C|
00004300  4d 50 20 52 34 2c 23 31  32 37 0d 1a ea 14 53 55  |MP R4,#127....SU|
00004310  42 47 54 20 52 35 2c 52  34 2c 23 31 32 37 0d 1a  |BGT R5,R4,#127..|
00004320  f4 11 4d 4f 56 47 54 20  52 34 2c 23 31 32 37 0d  |..MOVGT R4,#127.|
00004330  1a fe 0d 43 4d 50 20 52  34 2c 52 36 0d 1b 08 12  |...CMP R4,R6....|
00004340  53 55 42 4c 54 20 52 35  2c 52 34 2c 52 36 0d 1b  |SUBLT R5,R4,R6..|
00004350  12 0f 4d 4f 56 4c 54 20  52 34 2c 52 36 0d 1b 1c  |..MOVLT R4,R6...|
00004360  13 53 54 52 42 20 52 34  2c 5b 52 30 5d 2c 23 31  |.STRB R4,[R0],#1|
00004370  0d 1b 26 11 53 55 42 53  20 52 31 2c 52 31 2c 23  |..&.SUBS R1,R1,#|
00004380  31 0d 1b 30 20 42 4e 45  20 63 61 6c 63 75 6c 61  |1..0 BNE calcula|
00004390  74 65 64 69 66 66 65 72  65 6e 63 65 73 6c 6f 6f  |tedifferencesloo|
000043a0  70 0d 1b 3a 0f 4d 4f 56  53 20 50 43 2c 52 31 34  |p..:.MOVS PC,R14|
000043b0  0d 1b 44 04 0d 1b 4e 20  5c 20 2d 2d 2d 2d 2d 2d  |..D...N \ ------|
000043c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000043d0  2d 2d 2d 2d 0d 1b 58 04  0d 1b 62 13 2e 70 6f 69  |----..X...b..poi|
000043e0  6e 74 65 72 20 45 51 55  44 20 30 0d 1b 6c 1b 2e  |nter EQUD 0..l..|
000043f0  66 6c 61 67 74 61 62 6c  65 20 45 51 55 44 20 74  |flagtable EQUD t|
00004400  61 62 6c 65 31 25 0d 1b  76 1b 2e 74 61 62 6c 65  |able1%..v..table|
00004410  32 70 74 72 20 45 51 55  44 20 74 61 62 6c 65 32  |2ptr EQUD table2|
00004420  25 0d 1b 80 1b 2e 74 61  62 6c 65 33 70 74 72 20  |%.....table3ptr |
00004430  45 51 55 44 20 74 61 62  6c 65 33 25 0d 1b 8a 15  |EQUD table3%....|
00004440  2e 74 61 62 6c 65 33 6c  65 6e 20 45 51 55 44 20  |.table3len EQUD |
00004450  30 0d 1b 94 12 2e 6c 6f  67 70 74 72 20 45 51 55  |0.....logptr EQU|
00004460  44 20 30 0d 1b 9e 15 2e  73 61 6d 70 6c 65 6c 65  |D 0.....samplele|
00004470  6e 20 45 51 55 44 20 30  0d 1b a8 16 2e 66 69 6c  |n EQUD 0.....fil|
00004480  65 68 61 6e 64 6c 65 20  45 51 55 44 20 30 0d 1b  |ehandle EQUD 0..|
00004490  b2 17 2e 62 75 66 66 70  74 72 20 45 51 55 44 20  |...buffptr EQUD |
000044a0  62 75 66 66 25 0d 1b bc  11 2e 63 6f 75 6e 74 20  |buff%.....count |
000044b0  45 51 55 44 20 30 0d 1b  c6 10 2e 62 79 74 65 20  |EQUD 0.....byte |
000044c0  45 51 55 44 20 30 0d 1b  d0 0f 2e 62 69 74 20 45  |EQUD 0.....bit E|
000044d0  51 55 44 20 30 0d 1b da  12 2e 6d 61 78 62 69 74  |QUD 0.....maxbit|
000044e0  20 45 51 55 44 20 30 0d  1b e4 10 2e 73 69 67 6e  | EQUD 0.....sign|
000044f0  20 45 51 55 44 20 30 0d  1b ee 11 2e 73 68 69 66  | EQUD 0.....shif|
00004500  74 20 45 51 55 44 20 30  0d 1b f8 14 2e 6b 69 6c  |t EQUD 0.....kil|
00004510  6f 62 79 74 65 20 45 51  55 44 20 30 0d 1c 02 14  |obyte EQUD 0....|
00004520  2e 6b 69 6c 6f 6c 65 66  74 20 45 51 55 44 20 30  |.kiloleft EQUD 0|
00004530  0d 1c 0c 13 2e 65 6e 68  61 6e 63 65 20 45 51 55  |.....enhance EQU|
00004540  44 20 30 0d 1c 16 12 2e  6f 75 74 70 74 72 20 45  |D 0.....outptr E|
00004550  51 55 44 20 30 0d 1c 20  18 2e 6f 75 74 62 75 66  |QUD 0.. ..outbuf|
00004560  66 73 74 61 72 74 20 45  51 55 44 20 30 0d 1c 2a  |fstart EQUD 0..*|
00004570  16 2e 6f 75 74 62 75 66  66 65 6e 64 20 45 51 55  |..outbuffend EQU|
00004580  44 20 30 0d 1c 34 17 2e  66 69 6c 65 6e 61 6d 65  |D 0..4..filename|
00004590  70 74 72 20 45 51 55 44  20 30 0d 1c 3e 04 0d 1c  |ptr EQUD 0..>...|
000045a0  48 21 5c 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |H!\ ------------|
000045b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
000045c0  1c 52 19 5c 20 20 20 20  20 20 43 6f 6d 70 72 65  |.R.\      Compre|
000045d0  73 73 69 6f 6e 2e 2e 2e  0d 1c 5c 21 5c 20 2d 2d  |ssion.....\!\ --|
000045e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000045f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 1c 66 04 0d 1c 70  |---------..f...p|
00004600  0e 2e 77 72 69 74 65 6c  75 6d 70 0d 1c 7a 1a 53  |..writelump..z.S|
00004610  54 4d 46 44 20 52 31 33  21 2c 7b 52 30 2d 52 35  |TMFD R13!,{R0-R5|
00004620  2c 52 31 34 7d 0d 1c 84  0d 4d 4f 56 20 52 30 2c  |,R14}....MOV R0,|
00004630  23 32 0d 1c 8e 15 4c 44  52 20 52 31 2c 66 69 6c  |#2....LDR R1,fil|
00004640  65 68 61 6e 64 6c 65 0d  1c 98 17 4c 44 52 20 52  |ehandle....LDR R|
00004650  32 2c 6f 75 74 62 75 66  66 73 74 61 72 74 0d 1c  |2,outbuffstart..|
00004660  a2 11 4c 44 52 20 52 33  2c 6f 75 74 70 74 72 0d  |..LDR R3,outptr.|
00004670  1c ac 10 53 55 42 20 52  33 2c 52 33 2c 52 32 0d  |...SUB R3,R3,R2.|
00004680  1c b6 11 53 57 49 20 22  4f 53 5f 47 42 50 42 22  |...SWI "OS_GBPB"|
00004690  0d 1c c0 17 4c 44 52 20  52 32 2c 6f 75 74 62 75  |....LDR R2,outbu|
000046a0  66 66 73 74 61 72 74 0d  1c ca 11 53 54 52 20 52  |ffstart....STR R|
000046b0  32 2c 6f 75 74 70 74 72  0d 1c d4 15 4c 44 52 20  |2,outptr....LDR |
000046c0  52 31 2c 66 69 6c 65 68  61 6e 64 6c 65 0d 1c de  |R1,filehandle...|
000046d0  0f 4d 4f 56 20 52 30 2c  23 32 35 35 0d 1c e8 11  |.MOV R0,#255....|
000046e0  53 57 49 20 22 4f 53 5f  41 72 67 73 22 0d 1c f2  |SWI "OS_Args"...|
000046f0  0e 4d 4f 56 20 52 30 2c  23 31 38 0d 1c fc 10 4d  |.MOV R0,#18....M|
00004700  4f 56 20 52 32 2c 23 26  46 46 30 0d 1d 06 10 84  |OV R2,#&FF0.....|
00004710  52 20 52 32 2c 52 32 2c  23 26 44 0d 1d 10 16 4c  |R R2,R2,#&D....L|
00004720  44 52 20 52 31 2c 66 69  6c 65 6e 61 6d 65 70 74  |DR R1,filenamept|
00004730  72 0d 1d 1a 11 53 57 49  20 22 4f 53 5f 46 69 6c  |r....SWI "OS_Fil|
00004740  65 22 0d 1d 24 19 4c 44  4d 46 44 20 52 31 33 21  |e"..$.LDMFD R13!|
00004750  2c 7b 52 30 2d 52 35 2c  50 43 7d 0d 1d 2e 04 0d  |,{R0-R5,PC}.....|
00004760  1d 38 21 5c 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.8!\ -----------|
00004770  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00004780  0d 1d 42 04 0d 1d 4c 2e  2e 70 75 74 62 79 74 65  |..B...L..putbyte|
00004790  3a 5c 20 70 72 65 73 65  72 76 65 20 65 76 65 72  |:\ preserve ever|
000047a0  79 74 68 69 6e 67 2c 20  64 61 74 61 20 69 6e 20  |ything, data in |
000047b0  52 32 0d 1d 56 16 53 54  4d 46 44 20 52 31 33 21  |R2..V.STMFD R13!|
000047c0  2c 7b 52 30 2d 52 31 7d  0d 1d 60 11 4c 44 52 20  |,{R0-R1}..`.LDR |
000047d0  52 30 2c 6f 75 74 70 74  72 0d 1d 6a 15 4c 44 52  |R0,outptr..j.LDR|
000047e0  20 52 31 2c 6f 75 74 62  75 66 66 65 6e 64 0d 1d  | R1,outbuffend..|
000047f0  74 13 53 54 52 42 20 52  32 2c 5b 52 30 5d 2c 23  |t.STRB R2,[R0],#|
00004800  31 0d 1d 7e 11 53 54 52  20 52 30 2c 6f 75 74 70  |1..~.STR R0,outp|
00004810  74 72 0d 1d 88 0d 43 4d  50 20 52 30 2c 52 31 0d  |tr....CMP R0,R1.|
00004820  1d 92 16 4c 44 4d 46 44  20 52 31 33 21 2c 7b 52  |...LDMFD R13!,{R|
00004830  30 2d 52 31 7d 0d 1d 9c  10 4d 4f 56 4c 54 20 50  |0-R1}....MOVLT P|
00004840  43 2c 52 31 34 0d 1d a6  0f 42 20 77 72 69 74 65  |C,R14....B write|
00004850  6c 75 6d 70 0d 1d b0 04  0d 1d ba 21 5c 20 2d 2d  |lump.......!\ --|
00004860  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00004870  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 1d c4 04 0d 1d ce  |---------.......|
00004880  0c 2e 70 75 74 62 69 74  73 0d 1d d8 19 5c 20 72  |..putbits....\ r|
00004890  30 20 3d 20 76 61 6c 75  65 20 74 6f 20 77 72 69  |0 = value to wri|
000048a0  74 65 0d 1d e2 16 5c 20  72 31 20 3d 20 6e 75 6d  |te....\ r1 = num|
000048b0  20 6f 66 20 62 69 74 73  0d 1d ec 1a 53 54 4d 46  | of bits....STMF|
000048c0  44 20 52 31 33 21 2c 7b  52 31 2d 52 34 2c 52 31  |D R13!,{R1-R4,R1|
000048d0  34 7d 0d 1d f6 0f 4c 44  52 20 52 32 2c 62 79 74  |4}....LDR R2,byt|
000048e0  65 0d 1e 00 0e 4c 44 52  20 52 33 2c 62 69 74 0d  |e....LDR R3,bit.|
000048f0  1e 0a 0d 4d 4f 56 20 52  34 2c 23 31 0d 1e 14 0c  |...MOV R4,#1....|
00004900  2e 70 75 74 6c 6f 6f 70  0d 1e 1e 0d 54 53 54 20  |.putloop....TST |
00004910  52 30 2c 52 34 0d 1e 28  11 84 52 4e 45 20 52 32  |R0,R4..(..RNE R2|
00004920  2c 52 32 2c 52 33 0d 1e  32 14 4d 4f 56 20 52 33  |,R2,R3..2.MOV R3|
00004930  2c 52 33 2c 4c 53 4c 20  23 31 0d 1e 3c 0f 54 45  |,R3,LSL #1..<.TE|
00004940  51 20 52 33 2c 23 32 35  36 0d 1e 46 0f 42 4e 45  |Q R3,#256..F.BNE|
00004950  20 6e 65 78 74 62 69 74  0d 1e 50 0d 4d 4f 56 20  | nextbit..P.MOV |
00004960  52 33 2c 23 31 0d 1e 5a  30 42 4c 20 70 75 74 62  |R3,#1..Z0BL putb|
00004970  79 74 65 3a 5c 20 70 72  65 73 65 72 76 65 20 65  |yte:\ preserve e|
00004980  76 65 72 79 74 68 69 6e  67 2c 20 64 61 74 61 20  |verything, data |
00004990  69 6e 20 52 32 0d 1e 64  0d 4d 4f 56 20 52 32 2c  |in R2..d.MOV R2,|
000049a0  23 30 0d 1e 6e 0c 2e 6e  65 78 74 62 69 74 0d 1e  |#0..n..nextbit..|
000049b0  78 14 4d 4f 56 20 52 34  2c 52 34 2c 4c 53 4c 20  |x.MOV R4,R4,LSL |
000049c0  23 31 0d 1e 82 11 53 55  42 53 20 52 31 2c 52 31  |#1....SUBS R1,R1|
000049d0  2c 23 31 0d 1e 8c 0f 42  4e 45 20 70 75 74 6c 6f  |,#1....BNE putlo|
000049e0  6f 70 0d 1e 96 0f 53 54  52 20 52 32 2c 62 79 74  |op....STR R2,byt|
000049f0  65 0d 1e a0 0e 53 54 52  20 52 33 2c 62 69 74 0d  |e....STR R3,bit.|
00004a00  1e aa 19 4c 44 4d 46 44  20 52 31 33 21 2c 7b 52  |...LDMFD R13!,{R|
00004a10  31 2d 52 34 2c 50 43 7d  0d 1e b4 04 0d 1e be 20  |1-R4,PC}....... |
00004a20  5c 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |\ --------------|
00004a30  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 1e c8 04  |------------....|
00004a40  0d 1e d2 0e 2e 67 65 74  6d 61 78 62 69 74 0d 1e  |.....getmaxbit..|
00004a50  dc 14 53 54 4d 46 44 20  52 31 33 21 2c 7b 52 31  |..STMFD R13!,{R1|
00004a60  34 7d 0d 1e e6 10 4c 44  52 20 52 30 2c 63 6f 75  |4}....LDR R0,cou|
00004a70  6e 74 0d 1e f0 10 41 44  44 20 52 30 2c 52 30 2c  |nt....ADD R0,R0,|
00004a80  23 31 0d 1e fa 10 53 54  52 20 52 30 2c 63 6f 75  |#1....STR R0,cou|
00004a90  6e 74 0d 1f 04 16 4d 4f  56 20 52 30 2c 23 30 3a  |nt....MOV R0,#0:|
00004aa0  5c 20 6d 61 78 62 69 74  0d 1f 0e 16 4d 4f 56 20  |\ maxbit....MOV |
00004ab0  52 31 2c 23 31 3a 5c 20  6d 61 78 76 61 6c 0d 1f  |R1,#1:\ maxval..|
00004ac0  18 14 4d 4f 56 20 52 32  2c 23 30 3a 5c 20 73 69  |..MOV R2,#0:\ si|
00004ad0  67 6e 0d 1f 22 0e 4d 4f  56 20 52 33 2c 23 31 36  |gn..".MOV R3,#16|
00004ae0  0d 1f 2c 12 4c 44 52 20  52 34 2c 70 6f 69 6e 74  |..,.LDR R4,point|
00004af0  65 72 0d 1f 36 12 2e 67  65 74 6d 61 78 62 69 74  |er..6..getmaxbit|
00004b00  6c 6f 6f 70 0d 1f 40 13  4c 44 52 42 20 52 35 2c  |loop..@.LDRB R5,|
00004b10  5b 52 34 5d 2c 23 31 0d  1f 4a 0f 54 53 54 20 52  |[R4],#1..J.TST R|
00004b20  35 2c 23 31 32 38 0d 1f  54 17 4d 4f 56 4e 45 20  |5,#128..T.MOVNE |
00004b30  52 35 2c 52 35 2c 4c 53  4c 20 23 32 34 0d 1f 5e  |R5,R5,LSL #24..^|
00004b40  17 4d 4f 56 4e 45 20 52  35 2c 52 35 2c 41 53 52  |.MOVNE R5,R5,ASR|
00004b50  20 23 32 34 0d 1f 68 12  52 53 42 4e 45 20 52 35  | #24..h.RSBNE R5|
00004b60  2c 52 35 2c 23 30 0d 1f  72 0e 2e 77 68 69 6c 65  |,R5,#0..r..while|
00004b70  6c 6f 6f 70 0d 1f 7c 0d  43 4d 50 20 52 35 2c 52  |loop..|.CMP R5,R|
00004b80  31 0d 1f 86 16 4d 4f 56  47 45 20 52 31 2c 52 31  |1....MOVGE R1,R1|
00004b90  2c 4c 53 4c 20 23 31 0d  1f 90 12 41 44 44 47 45  |,LSL #1....ADDGE|
00004ba0  20 52 30 2c 52 30 2c 23  31 0d 1f 9a 11 42 47 45  | R0,R0,#1....BGE|
00004bb0  20 77 68 69 6c 65 6c 6f  6f 70 0d 1f a4 0d 2e 65  | whileloop.....e|
00004bc0  6e 64 77 68 69 6c 65 0d  1f ae 11 53 55 42 53 20  |ndwhile....SUBS |
00004bd0  52 33 2c 52 33 2c 23 31  0d 1f b8 15 42 4e 45 20  |R3,R3,#1....BNE |
00004be0  67 65 74 6d 61 78 62 69  74 6c 6f 6f 70 0d 1f c2  |getmaxbitloop...|
00004bf0  04 0d 1f cc 0d 2e 73 69  67 6e 73 63 61 6e 0d 1f  |......signscan..|
00004c00  d6 12 4c 44 52 20 52 34  2c 70 6f 69 6e 74 65 72  |..LDR R4,pointer|
00004c10  0d 1f e0 13 4c 44 52 42  20 52 35 2c 5b 52 34 5d  |....LDRB R5,[R4]|
00004c20  2c 23 31 0d 1f ea 0f 54  53 54 20 52 35 2c 23 31  |,#1....TST R5,#1|
00004c30  32 38 0d 1f f4 0f 4d 4f  56 4e 45 20 52 32 2c 23  |28....MOVNE R2,#|
00004c40  32 0d 1f fe 0c ec 51 20  52 32 2c 23 31 0d 20 08  |2.....Q R2,#1. .|
00004c50  0e 4d 4f 56 20 52 33 2c  23 31 35 0d 20 12 11 2e  |.MOV R3,#15. ...|
00004c60  73 69 67 6e 73 63 61 6e  6c 6f 6f 70 0d 20 1c 13  |signscanloop. ..|
00004c70  4c 44 52 42 20 52 35 2c  5b 52 34 5d 2c 23 31 0d  |LDRB R5,[R4],#1.|
00004c80  20 26 0f 54 53 54 20 52  35 2c 23 31 32 38 0d 20  | &.TST R5,#128. |
00004c90  30 0f 54 45 51 45 51 20  52 32 2c 23 32 0d 20 3a  |0.TEQEQ R2,#2. :|
00004ca0  0c ec 51 20 52 32 2c 23  30 0d 20 44 13 42 45 51  |..Q R2,#0. D.BEQ|
00004cb0  20 73 69 67 6e 73 63 61  6e 6f 75 74 0d 20 4e 0f  | signscanout. N.|
00004cc0  54 53 54 20 52 35 2c 23  31 32 38 0d 20 58 0f 54  |TST R5,#128. X.T|
00004cd0  45 51 4e 45 20 52 32 2c  23 32 0d 20 62 0f 4d 4f  |EQNE R2,#2. b.MO|
00004ce0  56 4e 45 20 52 32 2c 23  30 0d 20 6c 13 42 4e 45  |VNE R2,#0. l.BNE|
00004cf0  20 73 69 67 6e 73 63 61  6e 6f 75 74 0d 20 76 11  | signscanout. v.|
00004d00  53 55 42 53 20 52 33 2c  52 33 2c 23 31 0d 20 80  |SUBS R3,R3,#1. .|
00004d10  14 42 4e 45 20 73 69 67  6e 73 63 61 6e 6c 6f 6f  |.BNE signscanloo|
00004d20  70 0d 20 8a 10 2e 73 69  67 6e 73 63 61 6e 6f 75  |p. ...signscanou|
00004d30  74 0d 20 94 0f 53 54 52  20 52 32 2c 73 69 67 6e  |t. ..STR R2,sign|
00004d40  0d 20 9e 11 53 54 52 20  52 30 2c 6d 61 78 62 69  |. ..STR R0,maxbi|
00004d50  74 0d 20 a8 04 0d 20 b2  0d 4d 4f 56 20 52 31 2c  |t. ... ..MOV R1,|
00004d60  23 34 0d 20 bc 0d 54 45  51 20 52 32 2c 23 30 0d  |#4. ..TEQ R2,#0.|
00004d70  20 c6 11 84 52 45 51 20  52 30 2c 52 30 2c 23 38  | ...REQ R0,R0,#8|
00004d80  0d 20 d0 0d 4d 4f 56 20  52 35 2c 52 30 0d 20 da  |. ..MOV R5,R0. .|
00004d90  0e 42 4c 20 70 75 74 62  69 74 73 0d 20 e4 0d 54  |.BL putbits. ..T|
00004da0  45 51 20 52 35 2c 23 30  0d 20 ee 10 42 45 51 20  |EQ R5,#0. ..BEQ |
00004db0  77 72 69 74 65 6f 75 74  0d 20 f8 12 4c 44 52 20  |writeout. ..LDR |
00004dc0  52 34 2c 70 6f 69 6e 74  65 72 0d 21 02 0e 4d 4f  |R4,pointer.!..MO|
00004dd0  56 20 52 33 2c 23 31 36  0d 21 0c 04 0d 21 16 0d  |V R3,#16.!...!..|
00004de0  54 45 51 20 52 32 2c 23  30 0d 21 20 13 42 45 51  |TEQ R2,#0.! .BEQ|
00004df0  20 77 72 69 74 65 73 69  67 6e 65 64 0d 21 2a 04  | writesigned.!*.|
00004e00  0d 21 34 12 2e 77 72 69  74 65 75 6e 73 69 67 6e  |.!4..writeunsign|
00004e10  65 64 0d 21 3e 10 53 55  42 20 52 30 2c 52 32 2c  |ed.!>.SUB R0,R2,|
00004e20  23 31 0d 21 48 0d 4d 4f  56 20 52 31 2c 23 31 0d  |#1.!H.MOV R1,#1.|
00004e30  21 52 0e 42 4c 20 70 75  74 62 69 74 73 0d 21 5c  |!R.BL putbits.!\|
00004e40  11 4c 44 52 20 52 31 2c  6d 61 78 62 69 74 0d 21  |.LDR R1,maxbit.!|
00004e50  66 11 2e 75 6e 73 69 67  6e 65 64 6c 6f 6f 70 0d  |f..unsignedloop.|
00004e60  21 70 13 4c 44 52 42 20  52 30 2c 5b 52 34 5d 2c  |!p.LDRB R0,[R4],|
00004e70  23 31 0d 21 7a 0f 54 53  54 20 52 30 2c 23 31 32  |#1.!z.TST R0,#12|
00004e80  38 0d 21 84 12 52 53 42  4e 45 20 52 30 2c 52 30  |8.!..RSBNE R0,R0|
00004e90  2c 23 30 0d 21 8e 10 80  20 52 30 2c 52 30 2c 23  |,#0.!... R0,R0,#|
00004ea0  32 35 35 0d 21 98 0e 42  4c 20 70 75 74 62 69 74  |255.!..BL putbit|
00004eb0  73 0d 21 a2 11 53 55 42  53 20 52 33 2c 52 33 2c  |s.!..SUBS R3,R3,|
00004ec0  23 31 0d 21 ac 14 42 4e  45 20 75 6e 73 69 67 6e  |#1.!..BNE unsign|
00004ed0  65 64 6c 6f 6f 70 0d 21  b6 0e 42 20 77 72 69 74  |edloop.!..B writ|
00004ee0  65 6f 75 74 0d 21 c0 04  0d 21 ca 10 2e 77 72 69  |eout.!...!...wri|
00004ef0  74 65 73 69 67 6e 65 64  0d 21 d4 11 4c 44 52 20  |tesigned.!..LDR |
00004f00  52 31 2c 6d 61 78 62 69  74 0d 21 de 0d 4d 4f 56  |R1,maxbit.!..MOV|
00004f10  20 52 36 2c 23 31 0d 21  e8 14 4d 4f 56 20 52 36  | R6,#1.!..MOV R6|
00004f20  2c 52 36 2c 4c 53 4c 20  52 31 0d 21 f2 10 41 44  |,R6,LSL R1.!..AD|
00004f30  44 20 52 31 2c 52 31 2c  23 31 0d 21 fc 0f 2e 73  |D R1,R1,#1.!...s|
00004f40  69 67 6e 65 64 6c 6f 6f  70 0d 22 06 13 4c 44 52  |ignedloop."..LDR|
00004f50  42 20 52 30 2c 5b 52 34  5d 2c 23 31 0d 22 10 0f  |B R0,[R4],#1."..|
00004f60  54 53 54 20 52 30 2c 23  31 32 38 0d 22 1a 12 52  |TST R0,#128."..R|
00004f70  53 42 4e 45 20 52 30 2c  52 30 2c 23 30 0d 22 24  |SBNE R0,R0,#0."$|
00004f80  10 80 20 52 30 2c 52 30  2c 23 32 35 35 0d 22 2e  |.. R0,R0,#255.".|
00004f90  11 84 52 4e 45 20 52 30  2c 52 30 2c 52 36 0d 22  |..RNE R0,R0,R6."|
00004fa0  38 0e 42 4c 20 70 75 74  62 69 74 73 0d 22 42 11  |8.BL putbits."B.|
00004fb0  53 55 42 53 20 52 33 2c  52 33 2c 23 31 0d 22 4c  |SUBS R3,R3,#1."L|
00004fc0  12 42 4e 45 20 73 69 67  6e 65 64 6c 6f 6f 70 0d  |.BNE signedloop.|
00004fd0  22 56 04 0d 22 60 0d 2e  77 72 69 74 65 6f 75 74  |"V.."`..writeout|
00004fe0  0d 22 6a 12 4c 44 52 20  52 30 2c 70 6f 69 6e 74  |."j.LDR R0,point|
00004ff0  65 72 0d 22 74 14 4c 44  52 20 52 31 2c 73 61 6d  |er."t.LDR R1,sam|
00005000  70 6c 65 6c 65 6e 0d 22  7e 11 41 44 44 20 52 30  |plelen."~.ADD R0|
00005010  2c 52 30 2c 23 31 36 0d  22 88 11 53 55 42 20 52  |,R0,#16."..SUB R|
00005020  31 2c 52 31 2c 23 31 36  0d 22 92 12 53 54 52 20  |1,R1,#16."..STR |
00005030  52 30 2c 70 6f 69 6e 74  65 72 0d 22 9c 14 53 54  |R0,pointer."..ST|
00005040  52 20 52 31 2c 73 61 6d  70 6c 65 6c 65 6e 0d 22  |R R1,samplelen."|
00005050  a6 13 4c 44 4d 46 44 20  52 31 33 21 2c 7b 50 43  |..LDMFD R13!,{PC|
00005060  7d 0d 22 b0 04 0d 22 ba  18 5c 20 73 69 67 6e 20  |}."..."..\ sign |
00005070  3d 20 30 20 20 5c 20 73  69 67 6e 65 64 0d 22 c4  |= 0  \ signed.".|
00005080  1e 5c 20 20 20 20 20 20  3d 20 31 20 20 5c 20 61  |.\      = 1  \ a|
00005090  6c 6c 20 70 6f 73 69 74  69 76 65 0d 22 ce 1e 5c  |ll positive."..\|
000050a0  20 20 20 20 20 20 3d 20  32 20 20 5c 20 61 6c 6c  |      = 2  \ all|
000050b0  20 6e 65 67 61 74 69 76  65 0d 22 d8 04 0d 22 e2  | negative."...".|
000050c0  1f 5c 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.\ -------------|
000050d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 22 ec 04  |------------."..|
000050e0  0d 22 f6 0c 2e 63 6f 6e  74 72 6f 6c 0d 23 00 14  |."...control.#..|
000050f0  53 54 4d 46 44 20 52 31  33 21 2c 7b 52 31 34 7d  |STMFD R13!,{R14}|
00005100  0d 23 0a 10 4d 4f 56 20  52 30 2c 23 34 30 39 36  |.#..MOV R0,#4096|
00005110  0d 23 14 13 53 54 52 20  52 30 2c 6b 69 6c 6f 62  |.#..STR R0,kilob|
00005120  79 74 65 0d 23 1e 10 2e  63 6f 6e 74 72 6f 6c 6c  |yte.#...controll|
00005130  6f 6f 70 0d 23 28 10 42  4c 20 67 65 74 6d 61 78  |oop.#(.BL getmax|
00005140  62 69 74 0d 23 32 14 4c  44 52 20 52 30 2c 73 61  |bit.#2.LDR R0,sa|
00005150  6d 70 6c 65 6c 65 6e 0d  23 3c 0d 43 4d 50 20 52  |mplelen.#<.CMP R|
00005160  30 2c 23 30 0d 23 46 15  4c 44 4d 4c 45 46 44 20  |0,#0.#F.LDMLEFD |
00005170  52 31 33 21 2c 7b 50 43  7d 0d 23 50 13 4c 44 52  |R13!,{PC}.#P.LDR|
00005180  20 52 33 2c 6b 69 6c 6f  62 79 74 65 0d 23 5a 12  | R3,kilobyte.#Z.|
00005190  53 55 42 53 20 52 33 2c  52 33 2c 23 31 36 0d 23  |SUBS R3,R3,#16.#|
000051a0  64 13 53 54 52 20 52 33  2c 6b 69 6c 6f 62 79 74  |d.STR R3,kilobyt|
000051b0  65 0d 23 6e 13 42 47 54  20 63 6f 6e 74 72 6f 6c  |e.#n.BGT control|
000051c0  6c 6f 6f 70 0d 23 78 13  4c 44 4d 46 44 20 52 31  |loop.#x.LDMFD R1|
000051d0  33 21 2c 7b 50 43 7d 0d  23 82 04 0d 23 8c 1f 5c  |3!,{PC}.#...#..\|
000051e0  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
000051f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 23 96 1a 5c 20  |----------.#..\ |
00005200  20 20 20 20 44 65 63 6f  6d 70 72 65 73 73 69 6f  |    Decompressio|
00005210  6e 2e 2e 2e 0d 23 a0 1f  5c 20 2d 2d 2d 2d 2d 2d  |n....#..\ ------|
00005220  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00005230  2d 2d 2d 0d 23 aa 04 0d  23 b4 17 2e 64 65 63 6f  |---.#...#...deco|
00005240  6d 70 69 6e 70 74 72 20  45 51 55 44 20 30 0d 23  |mpinptr EQUD 0.#|
00005250  be 18 2e 64 65 63 6f 6d  70 6f 75 74 70 74 72 20  |...decompoutptr |
00005260  45 51 55 44 20 30 0d 23  c8 14 2e 6c 61 73 74 62  |EQUD 0.#...lastb|
00005270  79 74 65 20 45 51 55 44  20 30 0d 23 d2 04 0d 23  |yte EQUD 0.#...#|
00005280  dc 0c 2e 67 65 74 62 69  74 73 0d 23 e6 1d 53 54  |...getbits.#..ST|
00005290  4d 46 44 20 52 31 33 21  2c 7b 52 30 2c 52 32 2d  |MFD R13!,{R0,R2-|
000052a0  52 34 2c 52 31 34 7d 0d  23 f0 15 5c 20 72 36 20  |R4,R14}.#..\ r6 |
000052b0  3d 20 73 6f 75 72 63 65  20 70 74 72 0d 23 fa 18  |= source ptr.#..|
000052c0  4d 4f 56 20 52 31 2c 23  30 3a 5c 20 6f 75 74 62  |MOV R1,#0:\ outb|
000052d0  79 74 65 25 0d 24 04 17  4d 4f 56 20 52 32 2c 23  |yte%.$..MOV R2,#|
000052e0  31 3a 5c 20 6f 75 74 70  75 74 25 0d 24 0e 0e 4c  |1:\ output%.$..L|
000052f0  44 52 20 52 33 2c 62 69  74 0d 24 18 0f 4c 44 52  |DR R3,bit.$..LDR|
00005300  20 52 34 2c 62 79 74 65  0d 24 22 0f 2e 67 65 74  | R4,byte.$"..get|
00005310  62 69 74 6c 6f 6f 70 0d  24 2c 0f 54 45 51 20 52  |bitloop.$,.TEQ R|
00005320  33 2c 23 32 35 36 0d 24  36 15 4c 44 52 45 51 42  |3,#256.$6.LDREQB|
00005330  20 52 34 2c 5b 52 36 5d  2c 23 31 0d 24 40 0c ec  | R4,[R6],#1.$@..|
00005340  51 20 52 33 2c 23 31 0d  24 4a 0d 54 53 54 20 52  |Q R3,#1.$J.TST R|
00005350  34 2c 52 33 0d 24 54 11  84 52 4e 45 20 52 31 2c  |4,R3.$T..RNE R1,|
00005360  52 31 2c 52 32 0d 24 5e  14 4d 4f 56 20 52 32 2c  |R1,R2.$^.MOV R2,|
00005370  52 32 2c 4c 53 4c 20 23  31 0d 24 68 14 4d 4f 56  |R2,LSL #1.$h.MOV|
00005380  20 52 33 2c 52 33 2c 4c  53 4c 20 23 31 0d 24 72  | R3,R3,LSL #1.$r|
00005390  11 53 55 42 53 20 52 30  2c 52 30 2c 23 31 0d 24  |.SUBS R0,R0,#1.$|
000053a0  7c 12 42 4e 45 20 67 65  74 62 69 74 6c 6f 6f 70  ||.BNE getbitloop|
000053b0  0d 24 86 0e 53 54 52 20  52 33 2c 62 69 74 0d 24  |.$..STR R3,bit.$|
000053c0  90 0f 53 54 52 20 52 34  2c 62 79 74 65 0d 24 9a  |..STR R4,byte.$.|
000053d0  1c 4c 44 4d 46 44 20 52  31 33 21 2c 7b 52 30 2c  |.LDMFD R13!,{R0,|
000053e0  52 32 2d 52 34 2c 50 43  7d 0d 24 a4 04 0d 24 ae  |R2-R4,PC}.$...$.|
000053f0  0f 2e 64 65 63 6f 6d 70  72 65 73 73 0d 24 b8 14  |..decompress.$..|
00005400  53 54 4d 46 44 20 52 31  33 21 2c 7b 52 31 34 7d  |STMFD R13!,{R14}|
00005410  0d 24 c2 13 4c 44 52 20  52 33 2c 6c 61 73 74 62  |.$..LDR R3,lastb|
00005420  79 74 65 0d 24 cc 16 4c  44 52 20 52 36 2c 64 65  |yte.$..LDR R6,de|
00005430  63 6f 6d 70 69 6e 70 74  72 0d 24 d6 14 4c 44 52  |compinptr.$..LDR|
00005440  20 52 34 2c 74 61 62 6c  65 33 70 74 72 0d 24 e0  | R4,table3ptr.$.|
00005450  17 4c 44 52 20 52 38 2c  64 65 63 6f 6d 70 6f 75  |.LDR R8,decompou|
00005460  74 70 74 72 0d 24 ea 1b  5c 20 72 36 20 3d 20 70  |tptr.$..\ r6 = p|
00005470  74 72 20 74 6f 20 72 65  61 64 20 66 72 6f 6d 0d  |tr to read from.|
00005480  24 f4 1a 5c 20 72 38 20  3d 20 70 74 72 20 74 6f  |$..\ r8 = ptr to|
00005490  20 77 72 69 74 65 20 74  6f 0d 24 fe 17 5c 20 72  | write to.$..\ r|
000054a0  34 20 3d 20 63 6f 6e 76  65 72 74 74 61 62 6c 65  |4 = converttable|
000054b0  0d 25 08 14 5c 20 72 33  20 3d 20 6c 61 73 74 20  |.%..\ r3 = last |
000054c0  62 79 74 65 0d 25 12 0d  4d 4f 56 20 52 30 2c 23  |byte.%..MOV R0,#|
000054d0  34 0d 25 1c 0e 42 4c 20  67 65 74 62 69 74 73 0d  |4.%..BL getbits.|
000054e0  25 26 0d 54 45 51 20 52  31 2c 23 30 0d 25 30 12  |%&.TEQ R1,#0.%0.|
000054f0  42 45 51 20 75 6e 70 61  63 6b 7a 65 72 6f 0d 25  |BEQ unpackzero.%|
00005500  3a 0d 54 53 54 20 52 31  2c 23 38 0d 25 44 14 42  |:.TST R1,#8.%D.B|
00005510  4e 45 20 75 6e 70 61 63  6b 73 69 67 6e 65 64 0d  |NE unpacksigned.|
00005520  25 4e 13 2e 75 6e 70 61  63 6b 75 6e 73 69 67 6e  |%N..unpackunsign|
00005530  65 64 0d 25 58 0d 4d 4f  56 20 52 32 2c 52 31 0d  |ed.%X.MOV R2,R1.|
00005540  25 62 0d 4d 4f 56 20 52  30 2c 23 31 0d 25 6c 0e  |%b.MOV R0,#1.%l.|
00005550  42 4c 20 67 65 74 62 69  74 73 0d 25 76 0d 4d 4f  |BL getbits.%v.MO|
00005560  56 20 52 30 2c 52 32 0d  25 80 0d 54 45 51 20 52  |V R0,R2.%..TEQ R|
00005570  31 2c 23 30 0d 25 8a 16  42 45 51 20 75 6e 70 61  |1,#0.%..BEQ unpa|
00005580  63 6b 70 6f 73 69 74 69  76 65 0d 25 94 04 0d 25  |ckpositive.%...%|
00005590  9e 13 2e 75 6e 70 61 63  6b 6e 65 67 61 74 69 76  |...unpacknegativ|
000055a0  65 0d 25 a8 0e 4d 4f 56  20 52 32 2c 23 31 36 0d  |e.%..MOV R2,#16.|
000055b0  25 b2 12 2e 75 6e 70 61  63 6b 6e 65 67 6c 6f 6f  |%...unpacknegloo|
000055c0  70 0d 25 bc 0e 42 4c 20  67 65 74 62 69 74 73 0d  |p.%..BL getbits.|
000055d0  25 c6 10 52 53 42 20 52  31 2c 52 31 2c 23 30 0d  |%..RSB R1,R1,#0.|
000055e0  25 d0 10 41 44 44 20 52  33 2c 52 33 2c 52 31 0d  |%..ADD R3,R3,R1.|
000055f0  25 da 13 4c 44 52 42 20  52 31 2c 5b 52 34 2c 52  |%..LDRB R1,[R4,R|
00005600  33 5d 0d 25 e4 13 53 54  52 42 20 52 31 2c 5b 52  |3].%..STRB R1,[R|
00005610  38 5d 2c 23 31 0d 25 ee  11 53 55 42 53 20 52 32  |8],#1.%..SUBS R2|
00005620  2c 52 32 2c 23 31 0d 25  f8 15 42 4e 45 20 75 6e  |,R2,#1.%..BNE un|
00005630  70 61 63 6b 6e 65 67 6c  6f 6f 70 0d 26 02 10 42  |packnegloop.&..B|
00005640  20 75 6e 70 61 63 6b 64  6f 6e 65 0d 26 0c 04 0d  | unpackdone.&...|
00005650  26 16 13 2e 75 6e 70 61  63 6b 70 6f 73 69 74 69  |&...unpackpositi|
00005660  76 65 0d 26 20 0e 4d 4f  56 20 52 32 2c 23 31 36  |ve.& .MOV R2,#16|
00005670  0d 26 2a 12 2e 75 6e 70  61 63 6b 70 6f 73 6c 6f  |.&*..unpackposlo|
00005680  6f 70 0d 26 34 0e 42 4c  20 67 65 74 62 69 74 73  |op.&4.BL getbits|
00005690  0d 26 3e 10 41 44 44 20  52 33 2c 52 33 2c 52 31  |.&>.ADD R3,R3,R1|
000056a0  0d 26 48 13 4c 44 52 42  20 52 31 2c 5b 52 34 2c  |.&H.LDRB R1,[R4,|
000056b0  52 33 5d 0d 26 52 13 53  54 52 42 20 52 31 2c 5b  |R3].&R.STRB R1,[|
000056c0  52 38 5d 2c 23 31 0d 26  5c 11 53 55 42 53 20 52  |R8],#1.&\.SUBS R|
000056d0  32 2c 52 32 2c 23 31 0d  26 66 15 42 4e 45 20 75  |2,R2,#1.&f.BNE u|
000056e0  6e 70 61 63 6b 70 6f 73  6c 6f 6f 70 0d 26 70 10  |npackposloop.&p.|
000056f0  42 20 75 6e 70 61 63 6b  64 6f 6e 65 0d 26 7a 04  |B unpackdone.&z.|
00005700  0d 26 84 0f 2e 75 6e 70  61 63 6b 7a 65 72 6f 0d  |.&...unpackzero.|
00005710  26 8e 0e 4d 4f 56 20 52  32 2c 23 31 36 0d 26 98  |&..MOV R2,#16.&.|
00005720  13 4c 44 52 42 20 52 31  2c 5b 52 34 2c 52 33 5d  |.LDRB R1,[R4,R3]|
00005730  0d 26 a2 0d 2e 7a 65 72  6f 6c 6f 6f 70 0d 26 ac  |.&...zeroloop.&.|
00005740  13 53 54 52 42 20 52 31  2c 5b 52 38 5d 2c 23 31  |.STRB R1,[R8],#1|
00005750  0d 26 b6 11 53 55 42 53  20 52 32 2c 52 32 2c 23  |.&..SUBS R2,R2,#|
00005760  31 0d 26 c0 10 42 4e 45  20 7a 65 72 6f 6c 6f 6f  |1.&..BNE zeroloo|
00005770  70 0d 26 ca 10 42 20 75  6e 70 61 63 6b 64 6f 6e  |p.&..B unpackdon|
00005780  65 0d 26 d4 04 0d 26 de  11 2e 75 6e 70 61 63 6b  |e.&...&...unpack|
00005790  73 69 67 6e 65 64 0d 26  e8 0e 80 20 52 30 2c 52  |signed.&... R0,R|
000057a0  31 2c 23 37 0d 26 f2 0e  4d 4f 56 20 52 31 30 2c  |1,#7.&..MOV R10,|
000057b0  23 31 0d 26 fc 16 4d 4f  56 20 52 31 30 2c 52 31  |#1.&..MOV R10,R1|
000057c0  30 2c 4c 53 4c 20 52 30  0d 27 06 12 53 55 42 20  |0,LSL R0.'..SUB |
000057d0  52 31 31 2c 52 31 30 2c  23 31 0d 27 10 10 41 44  |R11,R10,#1.'..AD|
000057e0  44 20 52 30 2c 52 30 2c  23 31 0d 27 1a 0e 4d 4f  |D R0,R0,#1.'..MO|
000057f0  56 20 52 32 2c 23 31 36  0d 27 24 15 2e 75 6e 70  |V R2,#16.'$..unp|
00005800  61 63 6b 73 69 67 6e 65  64 6c 6f 6f 70 0d 27 2e  |acksignedloop.'.|
00005810  0e 42 4c 20 67 65 74 62  69 74 73 0d 27 38 0e 54  |.BL getbits.'8.T|
00005820  53 54 20 52 31 2c 52 31  30 0d 27 42 0f 80 20 52  |ST R1,R10.'B.. R|
00005830  31 2c 52 31 2c 52 31 31  0d 27 4c 12 52 53 42 4e  |1,R1,R11.'L.RSBN|
00005840  45 20 52 31 2c 52 31 2c  23 30 0d 27 56 10 41 44  |E R1,R1,#0.'V.AD|
00005850  44 20 52 33 2c 52 33 2c  52 31 0d 27 60 13 4c 44  |D R3,R3,R1.'`.LD|
00005860  52 42 20 52 31 2c 5b 52  34 2c 52 33 5d 0d 27 6a  |RB R1,[R4,R3].'j|
00005870  13 53 54 52 42 20 52 31  2c 5b 52 38 5d 2c 23 31  |.STRB R1,[R8],#1|
00005880  0d 27 74 11 53 55 42 53  20 52 32 2c 52 32 2c 23  |.'t.SUBS R2,R2,#|
00005890  31 0d 27 7e 18 42 4e 45  20 75 6e 70 61 63 6b 73  |1.'~.BNE unpacks|
000058a0  69 67 6e 65 64 6c 6f 6f  70 0d 27 88 04 0d 27 92  |ignedloop.'...'.|
000058b0  0f 2e 75 6e 70 61 63 6b  64 6f 6e 65 0d 27 9c 13  |..unpackdone.'..|
000058c0  53 54 52 20 52 33 2c 6c  61 73 74 62 79 74 65 0d  |STR R3,lastbyte.|
000058d0  27 a6 16 53 54 52 20 52  36 2c 64 65 63 6f 6d 70  |'..STR R6,decomp|
000058e0  69 6e 70 74 72 0d 27 b0  14 53 54 52 20 52 34 2c  |inptr.'..STR R4,|
000058f0  74 61 62 6c 65 33 70 74  72 0d 27 ba 17 53 54 52  |table3ptr.'..STR|
00005900  20 52 38 2c 64 65 63 6f  6d 70 6f 75 74 70 74 72  | R8,decompoutptr|
00005910  0d 27 c4 13 4c 44 4d 46  44 20 52 31 33 21 2c 7b  |.'..LDMFD R13!,{|
00005920  50 43 7d 0d 27 ce 04 0d  27 d8 06 5d ed 0d 27 e2  |PC}.'...'..]..'.|
00005930  05 e1 0d ff                                       |....|
00005934