Home » Archimedes archive » Acorn Computing » 1993 04 Mega Disk.adf » !_93_04 » PD/!PackDir/!RunImage
PD/!PackDir/!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 » 1993 04 Mega Disk.adf » !_93_04 |
Filename: | PD/!PackDir/!RunImage |
Read OK: | ✔ |
File size: | 600D bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >!RunImage 20REMLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOG 30REM Archives/unarchives directories 40REM Version date : Sun,20 Oct 1991.22:06:50 50REM LEN 1991 Zeridajh software 60REM by John Kortink 70REMLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOG 80ON ERROR PROCerror(ERR,REPORT$+" (code "+STR$ERL+")"):PROCdie 90MaxDepth%=256:REM Maximum subdir nesting 100DIM Window &800,Poll 256,Block 256,Ibl 256,Err 256 110DIM Dum% 256,Fdata% 256,Icon%(32,2),Dir%(MaxDepth%,2),BufI% 256,Sval%(2,1) 120Progneed%=70*1024:REM Estimated space needed for program+vars 130LowHeap%=1024:REM Lowest size for heap 140Totalfree%=HIMEM-PAGE:REM Total free for program+vars+sprbuf 150MidHimem%=PAGE+Progneed%:REM Pseudo HIMEM (top of prog, start of heap) 160Heap%=MidHimem%:HeapSize%=Totalfree%-Progneed%:REM Set heap + size 170IFHeapSize%<LowHeap% THEN ERROR 1,"No room to start up PackDir" 180HIMEM=MidHimem%:REM Lower himem to below file buffers 190PROCinitialise:REM Initialise application 200in$=FNOSvar("PackDir$File"):IFin$<>"" THEN SYS "OS_CLI","Unset PackDir$File":SYS "OS_File",5,in$ TO ,,l%:IF(l%>>>20)=&FFF THEN IF((l%>>8)AND&FFF)=&68E THEN PROCdo(in$,&68E) 210ON ERROR PROCerror(ERR,REPORT$+" (code "+STR$ERL+")") 220REM Poll and action 230IFDataLoadRef% THEN pollmask%=48 ELSE pollmask%=49:REM No nulls if wasted 240CASE FNpoll(pollmask%) OF 250 WHEN 0 : PROCnull 260 WHEN 2 : PROCopen 270 WHEN 3 : PROCclose 280 WHEN 6 : PROCmouseclick 290 WHEN 7 : PROCdragdrop 300 WHEN 8 : PROCkey 310 WHEN 9 : PROCmenuselect 320 WHEN 17,18 : PROCmessage 330ENDCASE 340IFAction THEN 350 Act=Action:Action=0:REM Reset action flag 360 SlotDown=TRUE:END=&1000000:PROCnew_slot:HIMEM=MidHimem%:REM Claim max 370 CASE Act OF 380 WHEN ActArc,ActUnarc : REM (De)archive 390 IFFNallocate_heap THEN 400 PROChour_on 410 CASE Act OF 420 WHEN ActArc : PROCarchive(Input$,Output$,error$) 430 WHEN ActUnarc : PROCunarchive(Input$,Output$,error$) 440 ENDCASE 450 PROChour_off 460 IFerror$<>"" THEN 470 PROCclosef:REM Ensure files closed 480 IFerror$="!SAMEFILE" THEN error$="I cannot use the same file/directory for output !" ELSE IFAct=ActArc THEN SYS "XOS_File",6,Output$:REM Kill output archive if error 490 PROCerror(-1,error$):REM Report error 500 ENDIF 510 ENDIF 520 ENDCASE 530ENDIF 540IFSlotDown THEN 550 END=MidHimem%:PROCnew_slot:HIMEM=MidHimem%:REM Give back memory 560 SlotDown=FALSE 570ENDIF 580GOTO 220:REM Sorry, I have to. Current BASIC restrictions with END=. 590 600DEFPROCnew_slot 610REM Slot changed, reset info 620HeapSize%=HIMEM-MidHimem%:REM New size of heap 630ENDPROC 640 650DEFFNallocate_heap 660REM Allocates heap 670REM Returns TRUE if all is well, else FALSE 680Free%=HeapSize%-256:Store%=Heap%:REM Init allocation 690CASE Act OF 700 WHEN ActArc : REM Archiving allocation 710 lzwents%=2^FNobits:LZWtableSize%=12*lzwents%:LZWstack%=-1 720 WHEN ActUnarc : REM Dearchiving allocation 730 In=OPENINInput$:PTR#In=5:format%=BGET#In OR BGET#In<<8 OR BGET#In<<16 OR BGET#In<<24:CLOSE#In:IFformat%<0 OR format%>4 THEN PROCerror(-1,"I cannot read format #"+STR$format%+" archives !"):=FALSE ELSE LZWibits=12+format% 740 lzwents%=2^LZWibits 750 IFFNallocate(LZWstack%,lzwents%) ELSE PROCerror(-1,"No room for LZW string stack"):=FALSE 760 LZWtableSize%=8*lzwents% 770ENDCASE 780IFFNallocate(LZWtable%,LZWtableSize%) ELSE PROCerror(-1,"No room for LZW tables"):=FALSE 790halve%=((Free%-256)DIV2)ANDNOT3:REM Half of what's left 800IFhalve%<256 THEN PROCerror(-1,"No room for file buffers"):=FALSE 810REM In/out file buffer sizes 820IF(FNorec=2) OR (FNorec=3) OR (FNosto=2) THEN InBufSize%=256 ELSE InBufSize%=halve% 830IF(FNorec=2) OR (FNorec=3) THEN OutBufSize%=256 ELSE OutBufSize%=halve% 840IFFNallocate(OutBuf%,OutBufSize%) ELSE PROCerror(-1,"No room for output file buffer"):=FALSE 850IFFNallocate(InBuf%,InBufSize%) ELSE PROCerror(-1,"No room for input file buffer"):=FALSE 860!BufI%=LZWtable%:BufI%!4=LZWtableSize%:BufI%!8=LZWstack%:BufI%!12=lzwents%:BufI%!16=InBuf%:BufI%!20=InBufSize%:BufI%!24=OutBuf%:BufI%!28=OutBufSize%:REM Set buffer info block 870=TRUE 880 890DEFFNallocate(RETURN var%,bytes%) 900REM Allocates bytes% bytes from the heap 910REM Returns TRUE and base in var% if succesful, else FALSE 920IF(bytes%<0)OR(bytes%>16*1024*1024) THEN PROCerror(-1,"Are you NUTS ?"):=FALSE:REM Enormous or erroneous amount asked 930bytes%=FNalign(bytes%):REM Word-align 940IFFree%<bytes% THEN =FALSE:REM Do I need 8 meg after all ? 950var%=Store%:REM Return base 960Store%+=bytes%:Free%-=bytes%:REM Deallocate storage used 970=TRUE 980 990DEFFNalign(val%) 1000REM Returns next-up word aligned value of val% 1010=(val%+3)ANDNOT3 1020 1030DEFPROCmenuselect 1040REM Menu selection 1050SYS WDecodeM%,,Menu1,Poll,STRING$(100," ") TO ,,,select$:REM Selection 1060p%=INSTR(select$,"."):IFp%>0 THEN select2$=MID$(select$,p%+1):select$=LEFT$(select$,p%-1) ELSE select2$="" 1070CASE select$ OF 1080 WHEN "" : REM Do nothing 1090 WHEN "Quit" : REM Quit program 1100 PROCdie:REM Tidy up and exit 1110 WHEN "Control" : REM Control window 1120 PROCopen_window(win_control%,3) 1130ENDCASE 1140SYS WGetPI%,,Block:REM Get pointer info 1150IF((Block!8)AND1)>0 THEN PROCmain_menu:REM Adjust -> re-open 1160ENDPROC 1170 1180DEFPROCclose 1190PROCclose_window(Poll!0):REM Close window 1200ENDPROC 1210 1220DEFPROCopen 1230PROCopen_window(0,Poll):REM Open window 1240ENDPROC 1250 1260DEFPROCnull 1270IFDataLoadRef% THEN 1280 DataLoadRef%=FALSE:SYS "OS_File",6,Output$:REM Delete file saved 1290 PROCerror(-1,"Bad data transfer, receiver dead"):REM No DataLoadAck 1300ENDIF 1310ENDPROC 1320 1330DEFPROCkey 1340win%=Poll!0:ico%=Poll!4:char%=Poll!24:REM Window, icon, key pressed 1350IF(win%=win_file%) AND (ico%=IcoFtype%) THEN 1360 CASE char% OF 1370 WHEN 13 : REM Return pressed 1380 PROCerror(-1,"Please drag the file icon to a directory viewer") 1390 WHEN 27 : REM Escape pressed 1400 PROCclose_window(win_file%) 1410 ENDCASE 1420ENDIF 1430ENDPROC 1440 1450DEFPROCmessage 1460REM Ignore messages originating from myself 1470IF(Poll!4)=TaskHandle% THEN msgnr%=-1 ELSE msgnr%=Poll!16 1480CASE msgnr% OF 1490 WHEN -1 : REM Don't react 1500 WHEN 0 : PROCdie:REM Request to terminate task 1510 WHEN 1 : REM DataSave, transfer via scrap file 1520 scrap$=FNOSvar("Wimp$Scrap"):REM Read scrap filename 1530 IFscrap$<>"" THEN Poll!12=Poll!8:Poll!16=2:Poll!36=-1:$(Poll+44)=scrap$+CHR$0:Poll!0=44+(LENscrap$+1+3)ANDNOT3:SYS WSendMsg%,18,Poll,Poll!4 ELSE PROCerror(-1,"Wimp$Scrap not defined"):REM Send DataSaveAck if scrap file defined 1540 WHEN 2 : REM DataSaveAck, save file 1550 Output$=FNstring(Poll+44):REM Read path-name of file to create 1560 Poll!12=Poll!8:Poll!16=3:REM Amend data block for DataLoad 1570 SYS WSendMsg%,18,Poll,Poll!4:REM Send DataLoad 1580 DataLoadRef%=Poll!8:REM Await a DataLoadAck, remember myref 1590 IFInType=&68E THEN Action=ActUnarc ELSE Action=ActArc:REM Pending (de)archive 1600 WHEN 3,5 : REM DataLoad/Open, check if directory or archive file 1610 type%=Poll!40:REM Filetype 1620 IF(type%>=&1000 AND msgnr%=3) OR type%=&68E THEN 1630 IFtype%>=&1000 THEN type%=&1000 1640 Poll!12=Poll!8:Poll!16=4:SYS WSendMsg%,17,Poll,Poll!4:REM DataLoadAck 1650 PROCdo(FNstring(Poll+44),type%):REM Attempt load 1660 ENDIF 1670 WHEN 4 : REM DataLoadAck, check or ignore 1680 IFDataLoadRef% THEN IFPoll!12=DataLoadRef% THEN DataLoadRef%=FALSE 1690ENDCASE 1700ENDPROC 1710 1720DEFPROCdo(in$,type%) 1730REM Initiates (un)archive 1740IFtype%=&1000 THEN IFINKEY-2 THEN in$=FNhead(in$) 1750Input$=in$:InType=type%:REM Filename & type 1760Leaf$=FNleaf(Input$):IFLeaf$="$" THEN Leaf$="Root":REM Leafname 1770PROCdic(DSfn%,Leaf$):REM Same leafname for output 1780CASE type% OF 1790 WHEN &68E : REM Archive to dir 1800 IFFNunto=2 THEN Output$="":Action=ActUnarc:ENDPROC:REM Restore pending 1810 PROCdic(DSsn%,"directory") 1820 WHEN &1000 : REM Dir to archive 1830 PROCdic(DSsn%,"file_68e") 1840ENDCASE 1850PROCopen_window(win_file%,-1):REM Open save file window 1860SYS WSetCa%,win_file%,1,,,-1,LEN(Leaf$):REM Gain caret in it 1870ENDPROC 1880 1890DEFPROCmouseclick 1900but%=Poll!8:win%=Poll!12:ico%=Poll!16:REM Buttons/window/icon 1910CASE win% OF 1920 WHEN -2 : REM Click on iconbar 1930 IFico%<>IcoBar% ELSE IF(but%AND7)=2 THEN PROCmain_menu ELSE IF(but%AND7) THEN PROCopen_window(win_fileinfo%,3) 1940 WHEN win_file% : REM Click on save file window 1950 IFico%=IcoFtype% THEN 1960 CASE but% AND &7F OF 1970 WHEN 16,64 : REM Drag,calculate drag box and create it 1980 ScrW%=FNmode_var(MODE,11)<<FNmode_var(MODE,4):ScrH%=FNmode_var(MODE,12)<<FNmode_var(MODE,5):REM Screen width and height in OS-units 1990 b=Block:!b=win%:SYS WGetWS%,,b:x%=b!4:y%=b!8:b!4=ico%:SYS WGetIS%,,b:!b=win%:b!4=5:b!8+=x%:b!12+=y%:b!16=b!8+68:b!20=b!12+68:b!24=0:b!28=0:b!32=ScrW%:b!36=ScrH% 2000 SYS WDragB%,,Block:REM Create drag box 2010 ENDCASE 2020 ENDIF 2030ENDCASE 2040ENDPROC 2050 2060DEFPROCdragdrop 2070SYS WGetPI%,,Block:REM Get pointer position 2080dropwin%=Block!12:dropico%=Block!16:REM Window/icon where box dropped 2090filename$=FNdic(DSfn%):REM Filename for save 2100b=Block:b!20=b!12:b!24=b!16:b!28=b!0:b!32=b!4:b!12=0:b!16=1:b!36=0:b!40=0:$(b+44)=filename$+CHR$0:!b=(44+LENfilename$+4)ANDNOT3 2110SYS WSendMsg%,17,Block,dropwin%,dropico%:REM Send DataSave 2120DataSaveRef%=Block!8:REM Remember myref for DataSave 2130PROCclose_window(win_file%):REM Close save file window 2140ENDPROC 2150 2160DEFPROCarchive(InDir$,OutFile$,RETURN error$) 2170REM Archives directory 2180REM Returns error in error$ if error occured, else "" 2190LOCAL ERROR 2200ON ERROR LOCAL error$=REPORT$+" (code "+STR$ERL+")":ENDPROC 2210IFInDir$=OutFile$ THEN error$="!SAMEFILE":ENDPROC 2220error$="":REM No errors (yet) 2230Store=FNosto:REM Store what ? 2240PROCfileinfo("Archiving",InDir$,"-","","0","0%","0%",STR$FNobits,"0","0","0") 2250SYS "OS_File",5,InDir$ TO type%,,load%,exec%,len%,attr%:REM Check root 2260IFtype%<>2 THEN error$="'"+InDir$+"' is not a directory":ENDPROC 2270icount%=0:lcount%=0:PROCdir_count(InDir$):REM Get total items/file length 2280PROCdic(DFcl%,STR$lcount%):REM Show total file data length 2290Out=OPENOUTOutFile$:REM Open archive 2300SYS "FileBuffer_Open",Out,OutBuf%,OutBufSize%,1 TO Obnr% 2310PROCos("PACK"):REM Write signature 2320PROCow(FNobits-12):REM Write archive format 2330PROCos(InDir$):REM Write original full path 2340objs%=FNdir_ents(InDir$):REM Entries in root 2350PROCow(load%):PROCow(exec%):PROCow(objs%):PROCow(attr%):REM Info 2360dirpath$="":REM Path yet 2370Dir%(0,0)=objs%:Dir%(0,1)=0:Dir%(0,2)=0:REM Root dir info 2380depth%=0:REM Init dir recurse counter 2390inf%=0:ind%=0:inl%=0:ina%=0:int%=1:REM Init counters 2400WHILE int%<=icount% 2410WHILE Dir%(depth%,0)<=0:dirpath$=LEFT$(dirpath$,Dir%(depth%,1)):depth%-=1:ENDWHILE:REM Ascend to non-empty parent 2420Dir%(depth%,0)-=1:REM Decrement entries in current dir 2430SYS "OS_GBPB",10,LEFT$(InDir$+"."+dirpath$),Fdata%,1,Dir%(depth%,2),256,"*" TO ,,,,Dir%(depth%,2):REM Read entry 2440p%=Fdata%:load%=!p%:exec%=p%!4:len%=p%!8:attr%=p%!12:info%=p%!16:p%+=20:name$="":WHILE?p%<>0:name$+=CHR$?p%:p%+=1:ENDWHILE:REM Extract info 2450fpath$=InDir$+"."+dirpath$+name$:REM Full path 2460dir=(info%<>1):IFdir THEN code%=1:len%=FNdir_ents(fpath$) ELSE code%=0 2470PROCos(name$):PROCow(load%):PROCow(exec%):PROCow(len%):PROCow(attr%):PROCow(code%):REM Output item's info 2480PROCdic(DFfn%,dirpath$+name$):REM Show local path 2490IFdir THEN 2500 ind%+=1 2510 PROCdic(DFlen%,STR$len%+" files") 2520 depth%+=1:Dir%(depth%,0)=len%:Dir%(depth%,1)=LENdirpath$:Dir%(depth%,2)=0:dirpath$+=name$+"." 2530 clen%=0 2540ELSE inf%+=1 2550 PROCslider(2,inl%/lcount%,len%/lcount%) 2560 PROCdic(DFlen%,STR$len%) 2570 cptr%=FNoptr:IFStore=2 THEN PROCow(-2) ELSE PROCow(0) 2580 IF(len%>0) AND (Store<>2) THEN 2590 In=OPENINfpath$:SYS "FileBuffer_Open",In,InBuf%,InBufSize%,0 TO Ibnr% 2600 SYS "LZWB_Compress",0,Ibnr%,Obnr%,,,FNobits,BufI% TO ,,,,,clen%:REM Add 2610 SYS "FileBuffer_Close",Ibnr%:CLOSE#In 2620 eptr%=FNoptr:PROCoptr(cptr%) 2630 IFclen%>=len% THEN clen%=len%:PROCow(-1):PROCstore(fpath$) ELSE PROCow(clen%):PROCoptr(eptr%) 2640 ELSE clen%=len% 2650 ENDIF 2660 inl%+=len%:ina%+=clen% 2670ENDIF 2680int%+=1 2690SYS "Hourglass_Percentage",FNperc(inl%,lcount%) 2700PROCdic(DFcompf%,STR$(FNperc(clen%,len%))+"%") 2710PROCdic(DFcompt%,STR$(FNperc(ina%,inl%))+"%") 2720PROCdic(DFca%,STR$ina%) 2730PROCdic(DFitems%,STR$int%) 2740PROCslider(1,ina%/lcount%,0):PROCslider(2,inl%/lcount%,0) 2750ENDWHILE 2760PROCos(""):REM End of archive marker 2770eofptr%=FNoptr:REM Size of archive 2780SYS "FileBuffer_Close",Obnr%:REM Close buffer 2790SYS "OS_Args",3,Out,eofptr%:REM Ensure right size 2800CLOSE#Out:REM Close archive 2810SYS "OS_File",18,OutFile$,&68E:REM Set correct filetype 2820ENDPROC 2830 2840DEFPROCow(v%) 2850!Dum%=v%:SYS "FileBuffer_Write",Obnr%,Dum%,4 2860ENDPROC 2870 2880DEFPROCos(v$) 2890$Dum%=v$+CHR$0:SYS "FileBuffer_Write",Obnr%,Dum%,LENv$+1 2900ENDPROC 2910 2920DEFFNoptr 2930LOCAL ptr% 2940SYS "FileBuffer_ReadPTR",Obnr% TO ,ptr% 2950=ptr% 2960 2970DEFPROCoptr(ptr%) 2980SYS "FileBuffer_WritePTR",Obnr%,ptr% 2990ENDPROC 3000 3010DEFPROCdir_count(d$) 3020REM Counts total file length in a directory 3030LOCAL off%,n$ 3040off%=0 3050REPEAT SYS "OS_GBPB",10,d$,Fdata%,1,off%,256,"*" TO ,,p%,,off% 3060IFoff%=-1 ELSE icount%+=1:IF(p%!16)=2 THEN p%+=20:n$="":WHILE?p%<>0:n$+=CHR$?p%:p%+=1:ENDWHILE:PROCdir_count(d$+"."+n$) ELSE lcount%+=p%!8:p%=p%+20:WHILE?p%<>0:p%+=1:ENDWHILE 3070UNTIL off%=-1 3080ENDPROC 3090 3100DEFFNdir_ents(dir$) 3110REM Returns number of entries in a directory 3120LOCAL off%,i% 3130off%=0:i%=0:REPEAT i%+=1:SYS "OS_GBPB",9,dir$,Fdata%,1,off%,256,"*" TO ,,,,off%:UNTIL off%=-1 3140=i%-1 3150 3160DEFPROCstore(f$) 3170REM Stores file in archive without compression 3180LOCAL In,len%,left%,bytes% 3190In=OPENINf$:len%=EXT#In:left%=len% 3200WHILE left%>0 3210IFleft%<InBufSize% THEN bytes%=left% ELSE bytes%=InBufSize% 3220SYS "OS_GBPB",4,In,InBuf%,bytes%:REM Read chunk 3230SYS "FileBuffer_Write",Obnr%,InBuf%,bytes%:REM Write chunk 3240left%-=bytes% 3250ENDWHILE 3260CLOSE#In 3270ENDPROC 3280 3290DEFPROCunarchive(InFile$,RETURN OutDir$,RETURN error$) 3300REM Unarchives archived directory 3310REM Returns error in error$ if error occured, else "" 3320LOCAL ERROR 3330ON ERROR LOCAL error$=REPORT$+" (code "+STR$ERL+")":ENDPROC 3340error$="":REM No errors (yet) 3350Recreate=FNorec:REM Recreate what ? 3360In=OPENIN(InFile$):REM Open input file 3370SYS "FileBuffer_Open",In,InBuf%,InBufSize%,0 TO Ibnr% 3380sig$=FNis:IFsig$<>"PACK" THEN error$="This is not something I can read !":ENDPROC:REM Signature 3390format%=FNiw:IFformat%<0 OR format%>4 THEN error$="I cannot read format #"+STR$format%+" archives !"):ENDPROC:REM Archive format version 3400origpath$=FNis:REM Original header path 3410IFFNunto=2 THEN OutDir$=origpath$ 3420IFInFile$=OutDir$ THEN error$="!SAMEFILE":ENDPROC 3430PROCfileinfo("Extracting",origpath$,OutDir$,"","0","0%","-",STR$LZWibits,"0","0","0") 3440load%=FNiw:exec%=FNiw:len%=FNiw:attr%=FNiw:REM Dir's original info 3450SYS "OS_File",8,OutDir$:REM Create root 3460SYS "OS_File",1,OutDir$,load%,exec%,,attr%:REM Restore file info 3470asize%=EXT#In:REM Total size of archive 3480dirpath$="":REM Path yet 3490Dir%(0,0)=len%:REM Root dir info 3500depth%=0:REM Init dir recurse counter 3510inf%=0:ind%=0:inl%=0:ina%=0:int%=1:REM Init counters 3520name$=FNis:REM Name of first entry 3530WHILE name$<>"" 3540WHILE Dir%(depth%,0)<=0:dirpath$=LEFT$(dirpath$,Dir%(depth%,1)):depth%-=1:ENDWHILE:REM Ascend to non-empty parent 3550Dir%(depth%,0)-=1:REM Decrement entries in current dir 3560load%=FNiw:exec%=FNiw:len%=FNiw:attr%=FNiw:code%=FNiw:dir=(code%AND1):REM Read entry 3570PROCdic(DFfn%,dirpath$+name$):REM Show local path 3580fpath$=OutDir$+"."+dirpath$+name$:REM Full path 3590IFdir THEN 3600 ind%+=1 3610 PROCdic(DFlen%,STR$len%+" files"):PROCdic(DFcompf%,"100%") 3620 SYS "OS_File",8,fpath$:REM Recreate directory 3630 depth%+=1:Dir%(depth%,0)=len%:Dir%(depth%,1)=LENdirpath$:dirpath$+=name$+"." 3640ELSE inf%+=1 3650 clen%=FNiw:uncomp=(clen%=-1):nodata=(clen%=-2) 3660 IFuncomp THEN clen%=len% ELSE IFnodata THEN clen%=0 3670 IFlen%=0 THEN prc%=100 ELSE prc%=INT(clen%/len%*100) 3680 PROCdic(DFlen%,STR$len%):PROCdic(DFcompf%,STR$prc%+"%") 3690 cptr%=clen%+FNiptr:REM PTR to next file 3700 PROCslider(1,FNiptr/asize%,clen%/asize%) 3710 IF(Recreate=3) OR (len%=0) THEN do%=1 ELSE IF(Recreate=2) OR nodata THEN do%=2 ELSE IFuncomp THEN do%=3 ELSE do%=4 3720 CASE do% OF 3730 WHEN 1 : SYS "OS_File",7,fpath$ 3740 WHEN 2 : SYS "OS_File",7,fpath$,,,,len% 3750 WHEN 3 : PROCrestore(fpath$,len%) 3760 WHEN 4 : Out=OPENOUTfpath$:SYS "FileBuffer_Open",Out,OutBuf%,OutBufSize%,1 TO Obnr%:SYS "LZWB_Decompress",0,Ibnr%,Obnr%,,,LZWibits,BufI%:SYS "FileBuffer_Close",Obnr%:CLOSE#Out:REM Extract 3770 ENDCASE 3780 inl%+=len%:ina%+=clen% 3790 PROCiptr(cptr%):REM Go to next file 3800ENDIF 3810SYS "OS_File",1,fpath$,load%,exec%,,attr%:REM Restore file info 3820name$=FNis:REM Name of next entry 3830int%+=1 3840SYS "Hourglass_Percentage",FNperc(FNiptr,asize%) 3850PROCdic(DFcl%,STR$inl%) 3860PROCdic(DFca%,STR$ina%) 3870PROCdic(DFitems%,STR$int%) 3880PROCslider(1,FNiptr/asize%,0) 3890ENDWHILE 3900PROCdic(DFcompt%,STR$(FNperc(ina%,inl%))+"%") 3910SYS "FileBuffer_Close",Ibnr% 3920CLOSE#In:REM Close archive 3930ENDPROC 3940 3950DEFFNiw 3960SYS "FileBuffer_Read",Ibnr%,Dum%,4 3970=!Dum% 3980 3990DEFFNis 4000LOCAL v$,c% 4010v$="":REPEAT SYS "FileBuffer_ReadByte",Ibnr% TO ,c%:v$+=CHR$c%:UNTIL c%=0 4020=LEFT$(v$) 4030 4040DEFFNiptr 4050LOCAL ptr% 4060SYS "FileBuffer_ReadPTR",Ibnr% TO ,ptr% 4070=ptr% 4080 4090DEFPROCiptr(ptr%) 4100SYS "FileBuffer_WritePTR",Ibnr%,ptr% 4110ENDPROC 4120 4130DEFPROCrestore(f$,len%) 4140REM Restores uncompressed file in archive 4150LOCAL Out,left%,bytes% 4160Out=OPENOUTf$:left%=len% 4170WHILE left%>0 4180IFleft%<OutBufSize% THEN bytes%=left% ELSE bytes%=OutBufSize% 4190SYS "FileBuffer_Read",Ibnr%,OutBuf%,bytes%:REM Read chunk 4200SYS "OS_GBPB",2,Out,OutBuf%,bytes%:REM Write chunk 4210left%-=bytes% 4220ENDWHILE 4230CLOSE#Out 4240ENDPROC 4250 4260DEFPROCclosef 4270REM Closes files on error 4280IFIn THEN SYS "XOS_Find",,In:In=0 4290IFOut THEN SYS "XOS_Find",,Out:Out=0 4300ENDPROC 4310 4320DEFPROCmain_menu 4330REM Creates main menu 4340LOCAL x%,y% 4350PROCmain_menu_set:REM Set flags & data 4360PROCmouse(x%,_%,_%):y%=96+3*40 4370Menu1=MenuMain%:SYS WCreateM%,,Menu1,x%-64,y% 4380ENDPROC 4390 4400DEFPROCmain_menu_set 4410REM Writes current flags & icon data in main menu 4420ENDPROC 4430 4440DEFPROCifl(fl%,t%,d%) 4450REM Sets menu icon flags 4460t%=-(t%<>0):d%=-(d%<>0) 4470!fl%=((!fl%)ANDNOT1)+t%:REM Tick 4480fl%!8=((fl%!8)ANDNOT(1<<22))+(d%<<22):REM Shaded 4490ENDPROC 4500 4510DEFPROCopen_window(handle%,info%) 4520REM Opens window with handle handle% 4530REM If info%>=&100 then info% is ready at info%, else get info 4540REM and if bit0=1 pop at top, bit1=1 window has no scroll bars, 4550REM bit2=1 pop at mouse pointer 4560LOCAL b%,px%,py%,_%,xs%,ys% 4570IFinfo%>=&100 THEN 4580 FOR b%=0 TO 31 STEP 4:Block!b%=info%!b%:NEXT 4590ELSE !Block=handle%:SYS WGetWS%,,Block 4600 IFinfo%AND1 THEN Block!28=-1:REM Pop up at top ? 4610 IFinfo%AND4 THEN PROCmouse(px%,py%,_%):xs%=Block!12-Block!4:ys%=Block!16-Block!8:Block!4=px%-64:Block!8=py%-ys%+16:Block!12=Block!4+xs%:Block!16=Block!8+ys%:REM Pop up at mouse 4620ENDIF 4630SYS WOpenW%,,Block 4640ENDPROC 4650 4660DEFPROCclose_window(handle%) 4670REM Closes window with handle handle% 4680!Block=handle%:SYS WCloseW%,,Block 4690ENDPROC 4700 4710DEFFNpoll(mask%) 4720REM Returns poll reason code, masking with mask%, data at Poll 4730LOCAL reasoncode 4740SYS WPoll%,mask%,Poll TO reasoncode 4750=reasoncode 4760 4770DEFPROCinitialise 4780REM Initialises program 4790applname$="PackDir":REM Name of application 4800SYS "Wimp_Initialise",200,&4B534154,applname$ TO version,TaskHandle% 4810IFversion<200 THEN ERROR 1,"I cannot work with WIMP pre-2.00" 4820SYS "LZWB_TaskStart":SYS "FileBuffer_TaskStart":REM Register to modules 4830W%=FNswi_to_nr("Wimp_Initialise"):REM Base SWI number 4840WCreateW%=W%+1:WCreateI%=W%+2:WOpenW%=W%+5:WCloseW%=W%+6:WPoll%=W%+7:WGetWS%=W%+11:WSetIS%=W%+13:WGetIS%=W%+14:WGetPI%=W%+15:WDragB%=W%+16 4850WSetCa%=W%+18:WCreateM%=W%+20:WDecodeM%=W%+21:WLoadT%=W%+27:WReport%=W%+31:WSendMsg%=W%+39 4860OSSpop%=FNswi_to_nr("OS_SpriteOp"):REM Sprite op SWI number 4870tf%=7:tb%=2:wf%=7:wb%=0:si%=1:so%=3:REM Window/menu colours 4880!Block=-1:Block!4=0:Block!8=0:Block!12=68:Block!16=68:Block!20=&27003002:$(Block+24)="!packdir":SYS WCreateI%,,Block TO IcoBar%:REM Iconbar icon 4890REM Load icon sprites 4900SYS "OS_File",5,"<PackDir$Dir>.Sprites" TO ,,,,len%:len%+=16 4910DIM IconSpr len%:!IconSpr=len%:IconSpr!4=0:IconSpr!8=16:IconSpr!12=16 4920SYS OSSpop%,10+256,IconSpr,"<PackDir$Dir>.Sprites" 4930REM Load templates 4940SYS "Wimp_OpenTemplate",,"<PackDir$Dir>.Templates" 4950DIM ic 2048,ie 1:REM Indirected icon data workspace 4960Nr%=0:REM Initialise icon counter 4970PROCloadwin("save",win_file%,&103) 4980w%=win_file%:IcoFtype%=0:PROCaddic(DSsn%,w%,IcoFtype%,11):PROCaddic(DSfn%,w%,1,10) 4990PROCloadwin("info",win_info%,0) 5000PROCloadwin("fileinfo",win_fileinfo%,2) 5010w%=win_fileinfo%:PROCaddic(DFor%,w%,1,255):PROCaddic(DFnw%,w%,3,255):PROCaddic(DFac%,w%,4,11):PROCaddic(DFfn%,w%,5,255):PROCaddic(DFlen%,w%,7,11) 5020PROCaddic(DFbits%,w%,9,2):PROCaddic(DFcompf%,w%,12,5):PROCaddic(DFcompt%,w%,14,5):PROCaddic(DFitems%,w%,16,11):IcoSl1%=18:PROCaddic(DFca%,w%,19,11) 5030IcoSl2%=21:PROCaddic(DFcl%,w%,22,11) 5040PROCloadwin("control",win_control%,2) 5050w%=win_control%:PROCaddic(RBits%,w%,1,5):PROCaddic(RStore%,w%,7,2):PROCaddic(RUnTo%,w%,10,2):PROCaddic(RRecreate%,w%,13,3) 5060SYS "Wimp_CloseTemplate" 5070REM Load menu structure 5080SYS "OS_File",5,"<PackDir$Dir>.MenuStruct" TO ,,,,slen% 5090DIM MenuStruct% slen% 5100SYS "OS_File",255,"<PackDir$Dir>.MenuStruct",MenuStruct% 5110SYS "OS_File",5,"<PackDir$Dir>.MenuData" TO ,,,,dlen% 5120DIM MenuData% dlen% 5130SYS "OS_File",255,"<PackDir$Dir>.MenuData",MenuData% 5140FOR a%=MenuStruct%+4 TO a%+slen%-8 STEP 4 5150d%=!a%:IF(d%AND&FFF00000)<>&DEA00000 ELSE k%=(d%>>16)AND&F:d%=d%AND&FFFF:IFk%=1 THEN !a%=d%+MenuStruct% ELSE IFk%=2 THEN !a%=d%+MenuData% ELSE IFd%=1 THEN !a%=win_info% ELSE IFd%=2 THEN !a%=win_control% 5160NEXT 5170Vars=OPENIN"<PackDir$Dir>.MenuVars":WHILE NOTEOF#Vars:vn$=GET$#Vars:d%=BGET#Vars:vv$=GET$#Vars:d%=BGET#Vars:IFLEFT$(vn$,2)="id" THEN vv%=MenuData%+VALvv$ ELSE vv%=MenuStruct%+VALvv$ 5180d%=EVAL("FNcvar("+vn$+","+STR$vv%+")"):ENDWHILE:CLOSE#Vars 5190MenuMain%=MenuStruct%+!MenuStruct% 5200REM Initialise variables 5210Output$="":Input$="":DataLoadRef%=FALSE:DataSaveRef%=-1:InType=0:Action=FALSE:ActUnarc=1:ActArc=2:SlotDown=FALSE:In=0:Out=0:Sval%()=0 5220LZWibits=13:REM LZW maxbits 5230PROCfileinfo("Dormant","","","","-","-","-","-","-","-","-"):PROCric(RBits%,2):PROCric(RStore%,1):PROCric(RUnTo%,1):PROCric(RRecreate%,1) 5240ENDPROC 5250 5260DEFPROCloadwin(name$,RETURN win%,set%) 5270REM Loads window template (see PROCinitialise) 5280LOCAL ico% 5290$Dum%=name$:SYS WLoadT%,,Window,ic,ie,-1,Dum%,0 TO ,,ic 5300IFset%>=&100 THEN 5310 ico%=(set%>>>8)-1:Window!(88+32*ico%+24)=1:set%=set%AND&FF 5320ENDIF 5330CASE set% OF 5340 WHEN 2 : Window!64=IconSpr:REM Local areaptr 5350 WHEN 3 : Window!64=1:REM WIMP areaptr 5360ENDCASE 5370SYS WCreateW%,,Window TO win% 5380ENDPROC 5390 5400DEFFNaicon(win%,ico%) 5410REM Returns indirected icon's data address 5420!Block=win%:Block!4=ico%:SYS WGetIS%,,Block:REM Get icon info 5430=Block!28 5440 5450DEFPROCaddic(RETURN inr%,win%,ico%,info%) 5460REM Adds icon to icon list 5470inr%=FNnr:Icon%(inr%,0)=win%:Icon%(inr%,1)=ico%:Icon%(inr%,2)=info% 5480ENDPROC 5490 5500DEFPROCric(nr%,ics%) 5510REM Sets radio icon state 5520LOCAL i%,f% 5530FOR i%=1 TO Icon%(nr%,2) 5540IFi%=ics% THEN f%=1 ELSE f%=0 5550!Ibl=Icon%(nr%,0):Ibl!4=i%+Icon%(nr%,1)-1:Ibl!8=f%<<21:Ibl!12=1<<21 5560SYS WSetIS%,,Ibl:REM Set icon selection state 5570NEXT 5580ENDPROC 5590 5600DEFFNric(nr%) 5610REM Returns radio icon state 5620LOCAL i%,n%,v% 5630FOR i%=1 TO Icon%(nr%,2) 5640!Ibl=Icon%(nr%,0):Ibl!4=i%+Icon%(nr%,1)-1 5650SYS WGetIS%,,Ibl:REM Get icon state 5660IF((Ibl!24) AND (1<<21))>0 THEN v%=i%:REM On ? 5670NEXT 5680=v% 5690 5700DEFFNobits=11+FNric(RBits%) 5710DEFFNunto=FNric(RUnTo%) 5720DEFFNorec=FNric(RRecreate%) 5730DEFFNosto=FNric(RStore%) 5740 5750DEFPROCdic(nr%,d$) 5760REM Sets data icon state 5770LOCAL a%,l% 5780!Ibl=Icon%(nr%,0):Ibl!4=Icon%(nr%,1) 5790SYS WGetIS%,,Ibl:REM Get icon state 5800a%=Ibl!28:l%=Ibl!36-1:REM Address & allocated length 5810IFIcon%(nr%,2)<l% THEN l%=Icon%(nr%,2):REM Limit length 5820$a%=LEFT$(d$,l%):REM Write data 5830Ibl!8=0:Ibl!12=0:SYS WSetIS%,,Ibl:REM Update icon 5840ENDPROC 5850 5860DEFFNdic(nr%) 5870REM Returns data icon state 5880LOCAL a%,l% 5890!Ibl=Icon%(nr%,0):Ibl!4=Icon%(nr%,1) 5900SYS WGetIS%,,Ibl:REM Get icon state 5910a%=Ibl!28:l%=Icon%(nr%,2) 5920=LEFT$(FNstring(a%),l%) 5930 5940DEFPROCfileinfo(ac$,or$,nw$,fi$,l$,rf$,rt$,bi$,cl$,ca$,it$) 5950REM Sets basic info in file info window 5960PROCdic(DFac%,ac$):PROCdic(DFor%,or$):PROCdic(DFnw%,nw$):PROCdic(DFfn%,fi$):PROCdic(DFlen%,l$):PROCdic(DFcompf%,rf$):PROCdic(DFcompt%,rt$) 5970PROCdic(DFbits%,bi$):PROCdic(DFcl%,cl$):PROCdic(DFca%,ca$):PROCdic(DFitems%,it$):PROCslider(1,-1,-1):PROCslider(2,-1,-1) 5980ENDPROC 5990 6000DEFPROCslider(nr%,val1,val2) 6010REM Adjusts slider to new value 6020LOCAL r0,r1,r2,r3,ico%,col%,v1%,v2% 6030v1%=val1*400:v2%=val2*400 6040IFv1%=Sval%(nr%,0) THEN IFv2%=Sval%(nr%,1) THEN ENDPROC 6050Sval%(nr%,0)=v1%:Sval%(nr%,1)=v2% 6060IFnr%=1 THEN ico%=IcoSl1%:col%=10 ELSE ico%=IcoSl2%:col%=11 6070SYS OSSpop%,60+256,IconSpr,"slider"+STR$nr%,0 TO r0,r1,r2,r3 6080IF(val1=-1) AND (val2=-1) THEN 6090 GCOL 0,0:MOVE 16,16:PLOT 97,800,18 6100ELSE MOVE 16,16 6110 IFv1%>0 THEN GCOL 0,col%:PLOT 97,v1%*2,18:PLOT 0,2,-18 6120 IFv2%>0 THEN GCOL 0,12:PLOT 97,v2%*2,18 6130ENDIF 6140SYS OSSpop%,r0,r1,r2,r3 6150!Ibl=win_fileinfo%:Ibl!4=ico%:Ibl!8=0:Ibl!12=0:SYS WSetIS%,,Ibl 6160ENDPROC 6170 6180DEFFNnr 6190REM Increments Nr% & returns it 6200Nr%+=1:=Nr% 6210 6220DEFFNcvar(RETURN var%,val%) 6230REM Creates new variable var%, value val% 6240var%=val%:=0 6250 6260DEFFNmode_var(mode%,var%) 6270REM Returns mode variable 6280LOCAL val% 6290SYS "OS_ReadModeVariable",mode%,var% TO ,,val% 6300=val% 6310 6320DEFFNleaf(p$) 6330REM Returns leaf of pathname 6340LOCAL p%,pd 6350p%=LENp$:REPEAT p%-=1:pd=(MID$(p$,p%,1)="."):UNTIL (p%=1) OR pd:IFpd THEN =RIGHT$(p$,LENp$-p%) ELSE ="" 6360 6370DEFFNhead(p$) 6380REM Returns head of pathname 6390LOCAL p%,pd 6400p%=LENp$:REPEAT p%-=1:pd=(MID$(p$,p%,1)="."):UNTIL (p%=1) OR pd:IFpd THEN =LEFT$(p$,p%-1) ELSE =p$ 6410 6420DEFFNperc(m%,d%) 6430REM Returns 'safe' percentage 100*m%/d% 6440IFd%=0 THEN =100 ELSE =INT(100*m%/d%) 6450 6460DEFFNstring(addr%) 6470REM Returns CTRL-char terminated string at addr% 6480LOCAL _%,_c%,_$ 6490_%=-1:REPEAT _%+=1:UNTIL addr%?_%<32 6500_c%=addr%?_%:addr%?_%=13:_$=$addr%:addr%?_%=_c% 6510=_$ 6520 6530DEFPROCmouse(RETURN x%,RETURN y%,RETURN but%) 6540REM Returns x,y and button state of mouse 6550MOUSE x%,y%,but% 6560ENDPROC 6570 6580DEFPROChour_on 6590REM Turns hourglass on 6600SYS "Hourglass_On" 6610SYS "Hourglass_Percentage",0 6620ENDPROC 6630 6640DEFPROChour_off 6650REM Turns hourglass off 6660SYS "Hourglass_Off" 6670ENDPROC 6680 6690DEFFNOSvar(name$) 6700REM Attempts to return OS-var's string value 6710LOCAL _r$,_l% 6720_r$=STRING$(100," "):SYS "XOS_ReadVarVal",name$,_r$,LEN_r$,0,3 TO ,_r$,_l% 6730=LEFT$(_r$,_l%) 6740 6750DEFFNswi_to_nr(swi$) 6760REM Returns SWI number of SWI call swi$ 6770LOCAL swinr% 6780SYS "XOS_SWINumberFromString",,swi$ TO swinr% 6790=swinr% 6800 6810DEFPROCerror(errnr,errmsg$) 6820REM Handles errors 6830LOCAL but%,opt% 6840IFerrnr=-1 THEN errnr=1:opt%=1 ELSE opt%=3 6850!Err=errnr:$(Err+4)=errmsg$ 6860SYS WReport%,Err,opt%,applname$ TO ,but% 6870IFbut%<>1 THEN PROCdie 6880ENDPROC 6890 6900DEFPROCfinish 6910REM Tidies up 6920REM Kill modules if no other tasks are using them 6930SYS "LZWB_TaskQuit" TO tasks%:IFtasks%<=0 THEN SYS "XOS_Module",4,"LZW" 6940SYS "FileBuffer_TaskQuit" TO tasks%:IFtasks%<=0 THEN SYS "XOS_Module",4,"FileBuffer" 6950SYS "Wimp_CloseDown",TaskHandle%,&4B534154 6960ENDPROC 6970 6980DEFPROCdie 6990REM Tidies up and exits 7000PROCfinish 7010SYS "OS_Exit" 7020ENDPROC
� >!RunImage K�������������������������������������������������������������������� %� Archives/unarchives directories (-� Version date : Sun,20 Oct 1991.22:06:50 2� � 1991 Zeridajh software <� by John Kortink FK�������������������������������������������������������������������� P*� � �error(�,�$+" (code "+Þ+")"):�die Z*MaxDepth%=256:� Maximum subdir nesting d4� Window &800,Poll 256,Block 256,Ibl 256,Err 256 nL� Dum% 256,Fdata% 256,Icon%(32,2),Dir%(MaxDepth%,2),BufI% 256,Sval%(2,1) x?Progneed%=70*1024:� Estimated space needed for program+vars �(LowHeap%=1024:� Lowest size for heap �7Totalfree%=�-�:� Total free for program+vars+sprbuf �EMidHimem%=�+Progneed%:� Pseudo HIMEM (top of prog, start of heap) �DHeap%=MidHimem%:HeapSize%=Totalfree%-Progneed%:� Set heap + size �;�HeapSize%<LowHeap% � � 1,"No room to start up PackDir" �3�=MidHimem%:� Lower himem to below file buffers �(�initialise:� Initialise application țin$=�OSvar("PackDir$File"):�in$<>"" � ș "OS_CLI","Unset PackDir$File":ș "OS_File",5,in$ � ,,l%:�(l%>>>20)=&FFF � �((l%>>8)�&FFF)=&68E � �do(in$,&68E) �%� � �error(�,�$+" (code "+Þ+")") �� Poll and action �D�DataLoadRef% � pollmask%=48 � pollmask%=49:� No nulls if wasted �Ȏ �poll(pollmask%) � � � 0 : �null � 2 : �open � 3 : �close � 6 : �mouseclick " � 7 : �dragdrop , � 8 : �key 6 � 9 : �menuselect @ � 17,18 : �message J� T �Action � ^, Act=Action:Action=0:� Reset action flag h< SlotDown=�:�=&1000000:�new_slot:�=MidHimem%:� Claim max r Ȏ Act � |' � ActArc,ActUnarc : � (De)archive � �allocate_heap � � �hour_on � Ȏ Act � �3 � ActArc : �archive(Input$,Output$,error$) �7 � ActUnarc : �unarchive(Input$,Output$,error$) � � � �hour_off � �error$<>"" � �& �closef:� Ensure files closed � �error$="!SAMEFILE" � error$="I cannot use the same file/directory for output !" � �Act=ActArc � ș "XOS_File",6,Output$:� Kill output archive if error �) �error(-1,error$):� Report error � � � � � � �SlotDown � &9 �=MidHimem%:�new_slot:�=MidHimem%:� Give back memory 0 SlotDown=� :� DD� �d\@:� Sorry, I have to. Current BASIC restrictions with END=. N X��new_slot b� Slot changed, reset info l,HeapSize%=�-MidHimem%:� New size of heap v� � �ݤallocate_heap �� Allocates heap �-� Returns TRUE if all is well, else FALSE �6Free%=HeapSize%-256:Store%=Heap%:� Init allocation �Ȏ Act � �& � ActArc : � Archiving allocation �> lzwents%=2^�obits:LZWtableSize%=12*lzwents%:LZWstack%=-1 �* � ActUnarc : � Dearchiving allocation ڶ In=�Input$:�#In=5:format%=�#In � �#In<<8 � �#In<<16 � �#In<<24:�#In:�format%<0 � format%>4 � �error(-1,"I cannot read format #"+�format%+" archives !"):=� � LZWibits=12+format% � lzwents%=2^LZWibits �S �allocate(LZWstack%,lzwents%) � �error(-1,"No room for LZW string stack"):=� � LZWtableSize%=8*lzwents% � P�allocate(LZWtable%,LZWtableSize%) � �error(-1,"No room for LZW tables"):=� 3halve%=((Free%-256)�2)��3:� Half of what's left :�halve%<256 � �error(-1,"No room for file buffers"):=� *� In/out file buffer sizes 4K�(�orec=2) � (�orec=3) � (�osto=2) � InBufSize%=256 � InBufSize%=halve% >A�(�orec=2) � (�orec=3) � OutBufSize%=256 � OutBufSize%=halve% HT�allocate(OutBuf%,OutBufSize%) � �error(-1,"No room for output file buffer"):=� RQ�allocate(InBuf%,InBufSize%) � �error(-1,"No room for input file buffer"):=� \�!BufI%=LZWtable%:BufI%!4=LZWtableSize%:BufI%!8=LZWstack%:BufI%!12=lzwents%:BufI%!16=InBuf%:BufI%!20=InBufSize%:BufI%!24=OutBuf%:BufI%!28=OutBufSize%:� Set buffer info block f=� p zݤallocate(� var%,bytes%) �*� Allocates bytes% bytes from the heap �<� Returns TRUE and base in var% if succesful, else FALSE �k�(bytes%<0)�(bytes%>16*1024*1024) � �error(-1,"Are you NUTS ?"):=�:� Enormous or erroneous amount asked �&bytes%=�align(bytes%):� Word-align �4�Free%<bytes% � =�:� Do I need 8 meg after all ? �var%=Store%:� Return base �:Store%+=bytes%:Free%-=bytes%:� Deallocate storage used �=� � �ݤalign(val%) �0� Returns next-up word aligned value of val% �=(val%+3)��3 � ��menuselect � Menu selection ?ș WDecodeM%,,Menu1,Poll,�100," ") � ,,,select$:� Selection $Yp%=�select$,"."):�p%>0 � select2$=�select$,p%+1):select$=�select$,p%-1) � select2$="" .Ȏ select$ � 8 � "" : � Do nothing B � "Quit" : � Quit program L �die:� Tidy up and exit V# � "Control" : � Control window `" �open_window(win_control%,3) j� t(ș WGetPI%,,Block:� Get pointer info ~5�((Block!8)�1)>0 � �main_menu:� Adjust -> re-open �� � ���close �(�close_window(Poll!0):� Close window �� � � ��open �&�open_window(0,Poll):� Open window �� � � ��null ��DataLoadRef% � > DataLoadRef%=�:ș "OS_File",6,Output$:� Delete file saved C �error(-1,"Bad data transfer, receiver dead"):� No DataLoadAck � � ( 2 ��key <Ewin%=Poll!0:ico%=Poll!4:char%=Poll!24:� Window, icon, key pressed F*�(win%=win_file%) � (ico%=IcoFtype%) � P Ȏ char% � Z � 13 : � Return pressed dC �error(-1,"Please drag the file icon to a directory viewer") n � 27 : � Escape pressed x �close_window(win_file%) � � �� �� � � ��message �-� Ignore messages originating from myself �6�(Poll!4)=TaskHandle% � msgnr%=-1 � msgnr%=Poll!16 �Ȏ msgnr% � � � -1 : � Don't react �+ � 0 : �die:� Request to terminate task �. � 1 : � DataSave, transfer via scrap file �7 scrap$=�OSvar("Wimp$Scrap"):� Read scrap filename �� �scrap$<>"" � Poll!12=Poll!8:Poll!16=2:Poll!36=-1:$(Poll+44)=scrap$+�0:Poll!0=44+(�scrap$+1+3)��3:ș WSendMsg%,18,Poll,Poll!4 � �error(-1,"Wimp$Scrap not defined"):� Send DataSaveAck if scrap file defined # � 2 : � DataSaveAck, save file A Output$=�string(Poll+44):� Read path-name of file to create > Poll!12=Poll!8:Poll!16=3:� Amend data block for DataLoad "1 ș WSendMsg%,18,Poll,Poll!4:� Send DataLoad ,? DataLoadRef%=Poll!8:� Await a DataLoadAck, remember myref 6J �InType=&68E � Action=ActUnarc � Action=ActArc:� Pending (de)archive @@ � 3,5 : � DataLoad/Open, check if directory or archive file J type%=Poll!40:� Filetype T/ �(type%>=&1000 � msgnr%=3) � type%=&68E � ^" �type%>=&1000 � type%=&1000 hI Poll!12=Poll!8:Poll!16=4:ș WSendMsg%,17,Poll,Poll!4:� DataLoadAck r1 �do(�string(Poll+44),type%):� Attempt load | � �) � 4 : � DataLoadAck, check or ignore �< �DataLoadRef% � �Poll!12=DataLoadRef% � DataLoadRef%=� �� �� � ���do(in$,type%) �� Initiates (un)archive �(�type%=&1000 � �-2 � in$=�head(in$) �-Input$=in$:InType=type%:� Filename & type �<Leaf$=�leaf(Input$):�Leaf$="$" � Leaf$="Root":� Leafname �0�dic(DSfn%,Leaf$):� Same leafname for output �Ȏ type% � � � &68E : � Archive to dir ? �unto=2 � Output$="":Action=ActUnarc:�:� Restore pending �dic(DSsn%,"directory") � &1000 : � Dir to archive & �dic(DSsn%,"file_68e") 0� :6�open_window(win_file%,-1):� Open save file window D;ș WSetCa%,win_file%,1,,,-1,�(Leaf$):� Gain caret in it N� X b��mouseclick l?but%=Poll!8:win%=Poll!12:ico%=Poll!16:� Buttons/window/icon v Ȏ win% � � � -2 : � Click on iconbar �[ �ico%<>IcoBar% � �(but%�7)=2 � �main_menu � �(but%�7) � �open_window(win_fileinfo%,3) �. � win_file% : � Click on save file window � �ico%=IcoFtype% � � Ȏ but% � &7F � �9 � 16,64 : � Drag,calculate drag box and create it �z ScrW%=�mode_var(�,11)<<�mode_var(�,4):ScrH%=�mode_var(�,12)<<�mode_var(�,5):� Screen width and height in OS-units Ƨ b=Block:!b=win%:ș WGetWS%,,b:x%=b!4:y%=b!8:b!4=ico%:ș WGetIS%,,b:!b=win%:b!4=5:b!8+=x%:b!12+=y%:b!16=b!8+68:b!20=b!12+68:b!24=0:b!28=0:b!32=ScrW%:b!36=ScrH% �, ș WDragB%,,Block:� Create drag box � � � � �� �� ��dragdrop ,ș WGetPI%,,Block:� Get pointer position Gdropwin%=Block!12:dropico%=Block!16:� Window/icon where box dropped *-filename$=�dic(DSfn%):� Filename for save 4zb=Block:b!20=b!12:b!24=b!16:b!28=b!0:b!32=b!4:b!12=0:b!16=1:b!36=0:b!40=0:$(b+44)=filename$+�0:!b=(44+�filename$+4)��3 >;ș WSendMsg%,17,Block,dropwin%,dropico%:� Send DataSave H6DataSaveRef%=Block!8:� Remember myref for DataSave R5�close_window(win_file%):� Close save file window \� f p'��archive(InDir$,OutFile$,� error$) z� Archives directory �7� Returns error in error$ if error occured, else "" �� � �&� � � error$=�$+" (code "+Þ+")":� �+�InDir$=OutFile$ � error$="!SAMEFILE":� �error$="":� No errors (yet) �Store=�osto:� Store what ? �J�fileinfo("Archiving",InDir$,"-","","0","0%","0%",äobits,"0","0","0") �Fș "OS_File",5,InDir$ � type%,,load%,exec%,len%,attr%:� Check root �:�type%<>2 � error$="'"+InDir$+"' is not a directory":� �Hicount%=0:lcount%=0:�dir_count(InDir$):� Get total items/file length �6�dic(DFcl%,�lcount%):� Show total file data length � Out=�OutFile$:� Open archive �:ș "FileBuffer_Open",Out,OutBuf%,OutBufSize%,1 � Obnr% !�os("PACK"):� Write signature )�ow(�obits-12):� Write archive format *�os(InDir$):� Write original full path $-objs%=�dir_ents(InDir$):� Entries in root .6�ow(load%):�ow(exec%):�ow(objs%):�ow(attr%):� Info 8dirpath$="":� Path yet B;Dir%(0,0)=objs%:Dir%(0,1)=0:Dir%(0,2)=0:� Root dir info L'depth%=0:� Init dir recurse counter V6inf%=0:ind%=0:inl%=0:ina%=0:int%=1:� Init counters `ȕ int%<=icount% jdȕ Dir%(depth%,0)<=0:dirpath$=�dirpath$,Dir%(depth%,1)):depth%-=1:�:� Ascend to non-empty parent t8Dir%(depth%,0)-=1:� Decrement entries in current dir ~kș "OS_GBPB",10,�InDir$+"."+dirpath$),Fdata%,1,Dir%(depth%,2),256,"*" � ,,,,Dir%(depth%,2):� Read entry ��p%=Fdata%:load%=!p%:exec%=p%!4:len%=p%!8:attr%=p%!12:info%=p%!16:p%+=20:name$="":ȕ?p%<>0:name$+=�?p%:p%+=1:�:� Extract info �0fpath$=InDir$+"."+dirpath$+name$:� Full path �Bdir=(info%<>1):�dir � code%=1:len%=�dir_ents(fpath$) � code%=0 �Y�os(name$):�ow(load%):�ow(exec%):�ow(len%):�ow(attr%):�ow(code%):� Output item's info �0�dic(DFfn%,dirpath$+name$):� Show local path � �dir � � ind%+=1 � �dic(DFlen%,�len%+" files") �` depth%+=1:Dir%(depth%,0)=len%:Dir%(depth%,1)=�dirpath$:Dir%(depth%,2)=0:dirpath$+=name$+"." � clen%=0 � � inf%+=1 �) �slider(2,inl%/lcount%,len%/lcount%) �dic(DFlen%,�len%) , cptr%=�optr:�Store=2 � �ow(-2) � �ow(0) �(len%>0) � (Store<>2) � D In=�fpath$:ș "FileBuffer_Open",In,InBuf%,InBufSize%,0 � Ibnr% (H ș "LZWB_Compress",0,Ibnr%,Obnr%,,,�obits,BufI% � ,,,,,clen%:� Add 2& ș "FileBuffer_Close",Ibnr%:�#In < eptr%=�optr:�optr(cptr%) FP �clen%>=len% � clen%=len%:�ow(-1):�store(fpath$) � �ow(clen%):�optr(eptr%) P � clen%=len% Z � d inl%+=len%:ina%+=clen% n� xint%+=1 �1ș "Hourglass_Percentage",�perc(inl%,lcount%) �+�dic(DFcompf%,�(�perc(clen%,len%))+"%") �*�dic(DFcompt%,�(�perc(ina%,inl%))+"%") ��dic(DFca%,�ina%) ��dic(DFitems%,�int%) �7�slider(1,ina%/lcount%,0):�slider(2,inl%/lcount%,0) �� �#�os(""):� End of archive marker �#eofptr%=�optr:� Size of archive �.ș "FileBuffer_Close",Obnr%:� Close buffer �2ș "OS_Args",3,Out,eofptr%:� Ensure right size ��#Out:� Close archive �8ș "OS_File",18,OutFile$,&68E:� Set correct filetype � ��ow(v%) "/!Dum%=v%:ș "FileBuffer_Write",Obnr%,Dum%,4 ,� 6 @��os(v$) J6$Dum%=v$+�0:ș "FileBuffer_Write",Obnr%,Dum%,�v$+1 T� ^ h ݤoptr r � ptr% |)ș "FileBuffer_ReadPTR",Obnr% � ,ptr% � =ptr% � ���optr(ptr%) �'ș "FileBuffer_WritePTR",Obnr%,ptr% �� � ���dir_count(d$) �-� Counts total file length in a directory � � off%,n$ � off%=0 �;� ș "OS_GBPB",10,d$,Fdata%,1,off%,256,"*" � ,,p%,,off% ��off%=-1 � icount%+=1:�(p%!16)=2 � p%+=20:n$="":ȕ?p%<>0:n$+=�?p%:p%+=1:�:�dir_count(d$+"."+n$) � lcount%+=p%!8:p%=p%+20:ȕ?p%<>0:p%+=1:� � � off%=-1 � ݤdir_ents(dir$) &.� Returns number of entries in a directory 0 � off%,i% :Voff%=0:i%=0:� i%+=1:ș "OS_GBPB",9,dir$,Fdata%,1,off%,256,"*" � ,,,,off%:� off%=-1 D =i%-1 N X��store(f$) b0� Stores file in archive without compression l� In,len%,left%,bytes% vIn=�f$:len%=�#In:left%=len% �ȕ left%>0 �8�left%<InBufSize% � bytes%=left% � bytes%=InBufSize% �0ș "OS_GBPB",4,In,InBuf%,bytes%:� Read chunk �;ș "FileBuffer_Write",Obnr%,InBuf%,bytes%:� Write chunk �left%-=bytes% �� ��#In �� � �+��unarchive(InFile$,� OutDir$,� error$) �#� Unarchives archived directory �7� Returns error in error$ if error occured, else "" �� � &� � � error$=�$+" (code "+Þ+")":� error$="":� No errors (yet) $Recreate=�orec:� Recreate what ? #In=�(InFile$):� Open input file *7ș "FileBuffer_Open",In,InBuf%,InBufSize%,0 � Ibnr% 4Vsig$=�is:�sig$<>"PACK" � error$="This is not something I can read !":�:� Signature >{format%=�iw:�format%<0 � format%>4 � error$="I cannot read format #"+�format%+" archives !"):�:� Archive format version H(origpath$=�is:� Original header path R �unto=2 � OutDir$=origpath$ \+�InFile$=OutDir$ � error$="!SAMEFILE":� fS�fileinfo("Extracting",origpath$,OutDir$,"","0","0%","-",�LZWibits,"0","0","0") p@load%=�iw:exec%=�iw:len%=�iw:attr%=�iw:� Dir's original info z(ș "OS_File",8,OutDir$:� Create root �Aș "OS_File",1,OutDir$,load%,exec%,,attr%:� Restore file info �'asize%=�#In:� Total size of archive �dirpath$="":� Path yet �"Dir%(0,0)=len%:� Root dir info �'depth%=0:� Init dir recurse counter �6inf%=0:ind%=0:inl%=0:ina%=0:int%=1:� Init counters �#name$=�is:� Name of first entry �ȕ name$<>"" �dȕ Dir%(depth%,0)<=0:dirpath$=�dirpath$,Dir%(depth%,1)):depth%-=1:�:� Ascend to non-empty parent �8Dir%(depth%,0)-=1:� Decrement entries in current dir �Oload%=�iw:exec%=�iw:len%=�iw:attr%=�iw:code%=�iw:dir=(code%�1):� Read entry �0�dic(DFfn%,dirpath$+name$):� Show local path �1fpath$=OutDir$+"."+dirpath$+name$:� Full path �dir � ind%+=1 6 �dic(DFlen%,�len%+" files"):�dic(DFcompf%,"100%") $/ ș "OS_File",8,fpath$:� Recreate directory .O depth%+=1:Dir%(depth%,0)=len%:Dir%(depth%,1)=�dirpath$:dirpath$+=name$+"." 8 � inf%+=1 B2 clen%=�iw:uncomp=(clen%=-1):nodata=(clen%=-2) L- �uncomp � clen%=len% � �nodata � clen%=0 V0 �len%=0 � prc%=100 � prc%=�(clen%/len%*100) `0 �dic(DFlen%,�len%):�dic(DFcompf%,�prc%+"%") j) cptr%=clen%+�iptr:� PTR to next file t) �slider(1,�iptr/asize%,clen%/asize%) ~` �(Recreate=3) � (len%=0) � do%=1 � �(Recreate=2) � nodata � do%=2 � �uncomp � do%=3 � do%=4 � Ȏ do% � �! � 1 : ș "OS_File",7,fpath$ �) � 2 : ș "OS_File",7,fpath$,,,,len% �! � 3 : �restore(fpath$,len%) �� � 4 : Out=�fpath$:ș "FileBuffer_Open",Out,OutBuf%,OutBufSize%,1 � Obnr%:ș "LZWB_Decompress",0,Ibnr%,Obnr%,,,LZWibits,BufI%:ș "FileBuffer_Close",Obnr%:�#Out:� Extract � � � inl%+=len%:ina%+=clen% �# �iptr(cptr%):� Go to next file �� �@ș "OS_File",1,fpath$,load%,exec%,,attr%:� Restore file info �"name$=�is:� Name of next entry �int%+=1 1ș "Hourglass_Percentage",�perc(�iptr,asize%) �dic(DFcl%,�inl%) �dic(DFca%,�ina%) �dic(DFitems%,�int%) (�slider(1,�iptr/asize%,0) 2� <*�dic(DFcompt%,�(�perc(ina%,inl%))+"%") Fș "FileBuffer_Close",Ibnr% P�#In:� Close archive Z� d nݤiw x%ș "FileBuffer_Read",Ibnr%,Dum%,4 � =!Dum% � �ݤis �� v$,c% �?v$="":� ș "FileBuffer_ReadByte",Ibnr% � ,c%:v$+=�c%:� c%=0 � =�v$) � � ݤiptr � � ptr% �)ș "FileBuffer_ReadPTR",Ibnr% � ,ptr% � =ptr% � ���iptr(ptr%) 'ș "FileBuffer_WritePTR",Ibnr%,ptr% � "��restore(f$,len%) ,+� Restores uncompressed file in archive 6� Out,left%,bytes% @Out=�f$:left%=len% Jȕ left%>0 T:�left%<OutBufSize% � bytes%=left% � bytes%=OutBufSize% ^:ș "FileBuffer_Read",Ibnr%,OutBuf%,bytes%:� Read chunk h3ș "OS_GBPB",2,Out,OutBuf%,bytes%:� Write chunk rleft%-=bytes% |� � �#Out �� � ���closef �� Closes files on error � �In � ș "XOS_Find",,In:In=0 �#�Out � ș "XOS_Find",,Out:Out=0 �� � ���main_menu �� Creates main menu �� x%,y% �%�main_menu_set:� Set flags & data �mouse(x%,_%,_%):y%=96+3*40 0Menu1=MenuMain%:ș WCreateM%,,Menu1,x%-64,y% � & 0��main_menu_set :3� Writes current flags & icon data in main menu D� N X��ifl(fl%,t%,d%) b� Sets menu icon flags lt%=-(t%<>0):d%=-(d%<>0) v!fl%=((!fl%)��1)+t%:� Tick �.fl%!8=((fl%!8)��(1<<22))+(d%<<22):� Shaded �� � � ��open_window(handle%,info%) �&� Opens window with handle handle% �@� If info%>=&100 then info% is ready at info%, else get info �A� and if bit0=1 pop at top, bit1=1 window has no scroll bars, �!� bit2=1 pop at mouse pointer �� b%,px%,py%,_%,xs%,ys% ��info%>=&100 � �( � b%=0 � 31 � 4:Block!b%=info%!b%:� �&� !Block=handle%:ș WGetWS%,,Block �- �info%�1 � Block!28=-1:� Pop up at top ? � �info%�4 � �mouse(px%,py%,_%):xs%=Block!12-Block!4:ys%=Block!16-Block!8:Block!4=px%-64:Block!8=py%-ys%+16:Block!12=Block!4+xs%:Block!16=Block!8+ys%:� Pop up at mouse � ș WOpenW%,,Block � * 4��close_window(handle%) >'� Closes window with handle handle% H%!Block=handle%:ș WCloseW%,,Block R� \ fݤpoll(mask%) p@� Returns poll reason code, masking with mask%, data at Poll z� reasoncode �%ș WPoll%,mask%,Poll � reasoncode �=reasoncode � ���initialise �� Initialises program �-applname$="PackDir":� Name of application �Fș "Wimp_Initialise",200,&4B534154,applname$ � version,TaskHandle% �9�version<200 � � 1,"I cannot work with WIMP pre-2.00" �Gș "LZWB_TaskStart":ș "FileBuffer_TaskStart":� Register to modules �6W%=�swi_to_nr("Wimp_Initialise"):� Base SWI number �WCreateW%=W%+1:WCreateI%=W%+2:WOpenW%=W%+5:WCloseW%=W%+6:WPoll%=W%+7:WGetWS%=W%+11:WSetIS%=W%+13:WGetIS%=W%+14:WGetPI%=W%+15:WDragB%=W%+16 �^WSetCa%=W%+18:WCreateM%=W%+20:WDecodeM%=W%+21:WLoadT%=W%+27:WReport%=W%+31:WSendMsg%=W%+39 �<OSSpop%=�swi_to_nr("OS_SpriteOp"):� Sprite op SWI number =tf%=7:tb%=2:wf%=7:wb%=0:si%=1:so%=3:� Window/menu colours �!Block=-1:Block!4=0:Block!8=0:Block!12=68:Block!16=68:Block!20=&27003002:$(Block+24)="!packdir":ș WCreateI%,,Block � IcoBar%:� Iconbar icon � Load icon sprites $>ș "OS_File",5,"<PackDir$Dir>.Sprites" � ,,,,len%:len%+=16 .G� IconSpr len%:!IconSpr=len%:IconSpr!4=0:IconSpr!8=16:IconSpr!12=16 85ș OSSpop%,10+256,IconSpr,"<PackDir$Dir>.Sprites" B� Load templates L5ș "Wimp_OpenTemplate",,"<PackDir$Dir>.Templates" V3� ic 2048,ie 1:� Indirected icon data workspace `#Nr%=0:� Initialise icon counter j#�loadwin("save",win_file%,&103) tPw%=win_file%:IcoFtype%=0:�addic(DSsn%,w%,IcoFtype%,11):�addic(DSfn%,w%,1,10) ~ �loadwin("info",win_info%,0) �(�loadwin("fileinfo",win_fileinfo%,2) ��w%=win_fileinfo%:�addic(DFor%,w%,1,255):�addic(DFnw%,w%,3,255):�addic(DFac%,w%,4,11):�addic(DFfn%,w%,5,255):�addic(DFlen%,w%,7,11) ���addic(DFbits%,w%,9,2):�addic(DFcompf%,w%,12,5):�addic(DFcompt%,w%,14,5):�addic(DFitems%,w%,16,11):IcoSl1%=18:�addic(DFca%,w%,19,11) �%IcoSl2%=21:�addic(DFcl%,w%,22,11) �&�loadwin("control",win_control%,2) �rw%=win_control%:�addic(RBits%,w%,1,5):�addic(RStore%,w%,7,2):�addic(RUnTo%,w%,10,2):�addic(RRecreate%,w%,13,3) �ș "Wimp_CloseTemplate" �� Load menu structure �9ș "OS_File",5,"<PackDir$Dir>.MenuStruct" � ,,,,slen% �� MenuStruct% slen% �;ș "OS_File",255,"<PackDir$Dir>.MenuStruct",MenuStruct% �7ș "OS_File",5,"<PackDir$Dir>.MenuData" � ,,,,dlen% � MenuData% dlen% 7ș "OS_File",255,"<PackDir$Dir>.MenuData",MenuData% '� a%=MenuStruct%+4 � a%+slen%-8 � 4 �d%=!a%:�(d%�&FFF00000)<>&DEA00000 � k%=(d%>>16)�&F:d%=d%�&FFFF:�k%=1 � !a%=d%+MenuStruct% � �k%=2 � !a%=d%+MenuData% � �d%=1 � !a%=win_info% � �d%=2 � !a%=win_control% (� 2�Vars=�"<PackDir$Dir>.MenuVars":ȕ ��#Vars:vn$=�#Vars:d%=�#Vars:vv$=�#Vars:d%=�#Vars:�vn$,2)="id" � vv%=MenuData%+�vv$ � vv%=MenuStruct%+�vv$ <-d%=�("FNcvar("+vn$+","+�vv%+")"):�:�#Vars F&MenuMain%=MenuStruct%+!MenuStruct% P� Initialise variables Z}Output$="":Input$="":DataLoadRef%=�:DataSaveRef%=-1:InType=0:Action=�:ActUnarc=1:ActArc=2:SlotDown=�:In=0:Out=0:Sval%()=0 dLZWibits=13:� LZW maxbits n~�fileinfo("Dormant","","","","-","-","-","-","-","-","-"):�ric(RBits%,2):�ric(RStore%,1):�ric(RUnTo%,1):�ric(RRecreate%,1) x� � � ��loadwin(name$,� win%,set%) �0� Loads window template (see PROCinitialise) � � ico% �9$Dum%=name$:ș WLoadT%,,Window,ic,ie,-1,Dum%,0 � ,,ic ��set%>=&100 � �= ico%=(set%>>>8)-1:Window!(88+32*ico%+24)=1:set%=set%�&FF �� � Ȏ set% � �, � 2 : Window!64=IconSpr:� Local areaptr �% � 3 : Window!64=1:� WIMP areaptr �� �ș WCreateW%,,Window � win% � ݤaicon(win%,ico%) ",� Returns indirected icon's data address ,>!Block=win%:Block!4=ico%:ș WGetIS%,,Block:� Get icon info 6 =Block!28 @ J#��addic(� inr%,win%,ico%,info%) T� Adds icon to icon list ^Finr%=�nr:Icon%(inr%,0)=win%:Icon%(inr%,1)=ico%:Icon%(inr%,2)=info% h� r |��ric(nr%,ics%) �� Sets radio icon state �� i%,f% �� i%=1 � Icon%(nr%,2) ��i%=ics% � f%=1 � f%=0 �G!Ibl=Icon%(nr%,0):Ibl!4=i%+Icon%(nr%,1)-1:Ibl!8=f%<<21:Ibl!12=1<<21 �.ș WSetIS%,,Ibl:� Set icon selection state �� �� � �ݤric(nr%) �� Returns radio icon state �� i%,n%,v% �� i%=1 � Icon%(nr%,2) -!Ibl=Icon%(nr%,0):Ibl!4=i%+Icon%(nr%,1)-1 $ș WGetIS%,,Ibl:� Get icon state *�((Ibl!24) � (1<<21))>0 � v%=i%:� On ? &� 0=v% : Dݤobits=11+�ric(RBits%) Nݤunto=�ric(RUnTo%) Xݤorec=�ric(RRecreate%) bݤosto=�ric(RStore%) l v��dic(nr%,d$) �� Sets data icon state �� a%,l% �(!Ibl=Icon%(nr%,0):Ibl!4=Icon%(nr%,1) �$ș WGetIS%,,Ibl:� Get icon state �6a%=Ibl!28:l%=Ibl!36-1:� Address & allocated length �5�Icon%(nr%,2)<l% � l%=Icon%(nr%,2):� Limit length �$a%=�d$,l%):� Write data �2Ibl!8=0:Ibl!12=0:ș WSetIS%,,Ibl:� Update icon �� � �ݤdic(nr%) �� Returns data icon state �� a%,l% (!Ibl=Icon%(nr%,0):Ibl!4=Icon%(nr%,1) $ș WGetIS%,,Ibl:� Get icon state a%=Ibl!28:l%=Icon%(nr%,2) =��string(a%),l%) * 4:��fileinfo(ac$,or$,nw$,fi$,l$,rf$,rt$,bi$,cl$,ca$,it$) >)� Sets basic info in file info window Hy�dic(DFac%,ac$):�dic(DFor%,or$):�dic(DFnw%,nw$):�dic(DFfn%,fi$):�dic(DFlen%,l$):�dic(DFcompf%,rf$):�dic(DFcompt%,rt$) Rj�dic(DFbits%,bi$):�dic(DFcl%,cl$):�dic(DFca%,ca$):�dic(DFitems%,it$):�slider(1,-1,-1):�slider(2,-1,-1) \� f p��slider(nr%,val1,val2) z!� Adjusts slider to new value �#� r0,r1,r2,r3,ico%,col%,v1%,v2% �v1%=val1*400:v2%=val2*400 �-�v1%=Sval%(nr%,0) � �v2%=Sval%(nr%,1) � � �%Sval%(nr%,0)=v1%:Sval%(nr%,1)=v2% �8�nr%=1 � ico%=IcoSl1%:col%=10 � ico%=IcoSl2%:col%=11 �;ș OSSpop%,60+256,IconSpr,"slider"+�nr%,0 � r0,r1,r2,r3 ��(val1=-1) � (val2=-1) � � � 0,0:� 16,16:� 97,800,18 � � � 16,16 �. �v1%>0 � � 0,col%:� 97,v1%*2,18:� 0,2,-18 �" �v2%>0 � � 0,12:� 97,v2%*2,18 �� �ș OSSpop%,r0,r1,r2,r3 B!Ibl=win_fileinfo%:Ibl!4=ico%:Ibl!8=0:Ibl!12=0:ș WSetIS%,,Ibl � $ݤnr .!� Increments Nr% & returns it 8Nr%+=1:=Nr% B Lݤcvar(� var%,val%) V+� Creates new variable var%, value val% `var%=val%:=0 j tݤmode_var(mode%,var%) ~� Returns mode variable � � val% �0ș "OS_ReadModeVariable",mode%,var% � ,,val% � =val% � �ݤleaf(p$) �� Returns leaf of pathname �� p%,pd �Lp%=�p$:� p%-=1:pd=(�p$,p%,1)="."):� (p%=1) � pd:�pd � =�p$,�p$-p%) � ="" � �ݤhead(p$) �� Returns head of pathname �� p%,pd Jp%=�p$:� p%-=1:pd=(�p$,p%,1)="."):� (p%=1) � pd:�pd � =�p$,p%-1) � =p$ ݤperc(m%,d%) )� Returns 'safe' percentage 100*m%/d% ( �d%=0 � =100 � =�(100*m%/d%) 2 <ݤstring(addr%) F2� Returns CTRL-char terminated string at addr% P� _%,_c%,_$ Z_%=-1:� _%+=1:� addr%?_%<32 d3_c%=addr%?_%:addr%?_%=13:_$=$addr%:addr%?_%=_c% n=_$ x ���mouse(� x%,� y%,� but%) �+� Returns x,y and button state of mouse �ȗ x%,y%,but% �� � � ��hour_on �� Turns hourglass on �ș "Hourglass_On" �ș "Hourglass_Percentage",0 �� � ���hour_off �� Turns hourglass off ș "Hourglass_Off" � "ݤOSvar(name$) ,.� Attempts to return OS-var's string value 6 � _r$,_l% @C_r$=�100," "):ș "XOS_ReadVarVal",name$,_r$,�_r$,0,3 � ,_r$,_l% J=�_r$,_l%) T ^ݤswi_to_nr(swi$) h)� Returns SWI number of SWI call swi$ r� swinr% |/ș "XOS_SWINumberFromString",,swi$ � swinr% �=swinr% � ���error(errnr,errmsg$) �� Handles errors �� but%,opt% �'�errnr=-1 � errnr=1:opt%=1 � opt%=3 �!Err=errnr:$(Err+4)=errmsg$ �*ș WReport%,Err,opt%,applname$ � ,but% ��but%<>1 � �die �� � ���finish �� Tidies up 3� Kill modules if no other tasks are using them Dș "LZWB_TaskQuit" � tasks%:�tasks%<=0 � ș "XOS_Module",4,"LZW" Qș "FileBuffer_TaskQuit" � tasks%:�tasks%<=0 � ș "XOS_Module",4,"FileBuffer" &-ș "Wimp_CloseDown",TaskHandle%,&4B534154 0� : D ��die N� Tidies up and exits X�finish bș "OS_Exit" l� �
00000000 0d 00 0a 10 f4 20 3e 21 52 75 6e 49 6d 61 67 65 |..... >!RunImage| 00000010 0d 00 14 4b f4 ab ab ab ab ab ab ab ab ab ab ab |...K............| 00000020 ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab |................| * 00000050 ab ab ab ab ab ab ab ab ab ab ab 0d 00 1e 25 f4 |..............%.| 00000060 20 41 72 63 68 69 76 65 73 2f 75 6e 61 72 63 68 | Archives/unarch| 00000070 69 76 65 73 20 64 69 72 65 63 74 6f 72 69 65 73 |ives directories| 00000080 0d 00 28 2d f4 20 56 65 72 73 69 6f 6e 20 64 61 |..(-. Version da| 00000090 74 65 20 3a 20 53 75 6e 2c 32 30 20 4f 63 74 20 |te : Sun,20 Oct | 000000a0 31 39 39 31 2e 32 32 3a 30 36 3a 35 30 0d 00 32 |1991.22:06:50..2| 000000b0 1e f4 20 a9 20 31 39 39 31 20 5a 65 72 69 64 61 |.. . 1991 Zerida| 000000c0 6a 68 20 73 6f 66 74 77 61 72 65 0d 00 3c 15 f4 |jh software..<..| 000000d0 20 62 79 20 4a 6f 68 6e 20 4b 6f 72 74 69 6e 6b | by John Kortink| 000000e0 0d 00 46 4b f4 ab ab ab ab ab ab ab ab ab ab ab |..FK............| 000000f0 ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab |................| * 00000120 ab ab ab ab ab ab ab ab ab ab ab 0d 00 50 2a ee |.............P*.| 00000130 20 85 20 f2 65 72 72 6f 72 28 9f 2c f6 24 2b 22 | . .error(.,.$+"| 00000140 20 28 63 6f 64 65 20 22 2b c3 9e 2b 22 29 22 29 | (code "+..+")")| 00000150 3a f2 64 69 65 0d 00 5a 2a 4d 61 78 44 65 70 74 |:.die..Z*MaxDept| 00000160 68 25 3d 32 35 36 3a f4 20 4d 61 78 69 6d 75 6d |h%=256:. Maximum| 00000170 20 73 75 62 64 69 72 20 6e 65 73 74 69 6e 67 0d | subdir nesting.| 00000180 00 64 34 de 20 57 69 6e 64 6f 77 20 26 38 30 30 |.d4. Window &800| 00000190 2c 50 6f 6c 6c 20 32 35 36 2c 42 6c 6f 63 6b 20 |,Poll 256,Block | 000001a0 32 35 36 2c 49 62 6c 20 32 35 36 2c 45 72 72 20 |256,Ibl 256,Err | 000001b0 32 35 36 0d 00 6e 4c de 20 44 75 6d 25 20 32 35 |256..nL. Dum% 25| 000001c0 36 2c 46 64 61 74 61 25 20 32 35 36 2c 49 63 6f |6,Fdata% 256,Ico| 000001d0 6e 25 28 33 32 2c 32 29 2c 44 69 72 25 28 4d 61 |n%(32,2),Dir%(Ma| 000001e0 78 44 65 70 74 68 25 2c 32 29 2c 42 75 66 49 25 |xDepth%,2),BufI%| 000001f0 20 32 35 36 2c 53 76 61 6c 25 28 32 2c 31 29 0d | 256,Sval%(2,1).| 00000200 00 78 3f 50 72 6f 67 6e 65 65 64 25 3d 37 30 2a |.x?Progneed%=70*| 00000210 31 30 32 34 3a f4 20 45 73 74 69 6d 61 74 65 64 |1024:. Estimated| 00000220 20 73 70 61 63 65 20 6e 65 65 64 65 64 20 66 6f | space needed fo| 00000230 72 20 70 72 6f 67 72 61 6d 2b 76 61 72 73 0d 00 |r program+vars..| 00000240 82 28 4c 6f 77 48 65 61 70 25 3d 31 30 32 34 3a |.(LowHeap%=1024:| 00000250 f4 20 4c 6f 77 65 73 74 20 73 69 7a 65 20 66 6f |. Lowest size fo| 00000260 72 20 68 65 61 70 0d 00 8c 37 54 6f 74 61 6c 66 |r heap...7Totalf| 00000270 72 65 65 25 3d 93 2d 90 3a f4 20 54 6f 74 61 6c |ree%=.-.:. Total| 00000280 20 66 72 65 65 20 66 6f 72 20 70 72 6f 67 72 61 | free for progra| 00000290 6d 2b 76 61 72 73 2b 73 70 72 62 75 66 0d 00 96 |m+vars+sprbuf...| 000002a0 45 4d 69 64 48 69 6d 65 6d 25 3d 90 2b 50 72 6f |EMidHimem%=.+Pro| 000002b0 67 6e 65 65 64 25 3a f4 20 50 73 65 75 64 6f 20 |gneed%:. Pseudo | 000002c0 48 49 4d 45 4d 20 28 74 6f 70 20 6f 66 20 70 72 |HIMEM (top of pr| 000002d0 6f 67 2c 20 73 74 61 72 74 20 6f 66 20 68 65 61 |og, start of hea| 000002e0 70 29 0d 00 a0 44 48 65 61 70 25 3d 4d 69 64 48 |p)...DHeap%=MidH| 000002f0 69 6d 65 6d 25 3a 48 65 61 70 53 69 7a 65 25 3d |imem%:HeapSize%=| 00000300 54 6f 74 61 6c 66 72 65 65 25 2d 50 72 6f 67 6e |Totalfree%-Progn| 00000310 65 65 64 25 3a f4 20 53 65 74 20 68 65 61 70 20 |eed%:. Set heap | 00000320 2b 20 73 69 7a 65 0d 00 aa 3b e7 48 65 61 70 53 |+ size...;.HeapS| 00000330 69 7a 65 25 3c 4c 6f 77 48 65 61 70 25 20 8c 20 |ize%<LowHeap% . | 00000340 85 20 31 2c 22 4e 6f 20 72 6f 6f 6d 20 74 6f 20 |. 1,"No room to | 00000350 73 74 61 72 74 20 75 70 20 50 61 63 6b 44 69 72 |start up PackDir| 00000360 22 0d 00 b4 33 d3 3d 4d 69 64 48 69 6d 65 6d 25 |"...3.=MidHimem%| 00000370 3a f4 20 4c 6f 77 65 72 20 68 69 6d 65 6d 20 74 |:. Lower himem t| 00000380 6f 20 62 65 6c 6f 77 20 66 69 6c 65 20 62 75 66 |o below file buf| 00000390 66 65 72 73 0d 00 be 28 f2 69 6e 69 74 69 61 6c |fers...(.initial| 000003a0 69 73 65 3a f4 20 49 6e 69 74 69 61 6c 69 73 65 |ise:. Initialise| 000003b0 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 00 c8 9b | application....| 000003c0 69 6e 24 3d a4 4f 53 76 61 72 28 22 50 61 63 6b |in$=.OSvar("Pack| 000003d0 44 69 72 24 46 69 6c 65 22 29 3a e7 69 6e 24 3c |Dir$File"):.in$<| 000003e0 3e 22 22 20 8c 20 c8 99 20 22 4f 53 5f 43 4c 49 |>"" . .. "OS_CLI| 000003f0 22 2c 22 55 6e 73 65 74 20 50 61 63 6b 44 69 72 |","Unset PackDir| 00000400 24 46 69 6c 65 22 3a c8 99 20 22 4f 53 5f 46 69 |$File":.. "OS_Fi| 00000410 6c 65 22 2c 35 2c 69 6e 24 20 b8 20 2c 2c 6c 25 |le",5,in$ . ,,l%| 00000420 3a e7 28 6c 25 3e 3e 3e 32 30 29 3d 26 46 46 46 |:.(l%>>>20)=&FFF| 00000430 20 8c 20 e7 28 28 6c 25 3e 3e 38 29 80 26 46 46 | . .((l%>>8).&FF| 00000440 46 29 3d 26 36 38 45 20 8c 20 f2 64 6f 28 69 6e |F)=&68E . .do(in| 00000450 24 2c 26 36 38 45 29 0d 00 d2 25 ee 20 85 20 f2 |$,&68E)...%. . .| 00000460 65 72 72 6f 72 28 9f 2c f6 24 2b 22 20 28 63 6f |error(.,.$+" (co| 00000470 64 65 20 22 2b c3 9e 2b 22 29 22 29 0d 00 dc 15 |de "+..+")")....| 00000480 f4 20 50 6f 6c 6c 20 61 6e 64 20 61 63 74 69 6f |. Poll and actio| 00000490 6e 0d 00 e6 44 e7 44 61 74 61 4c 6f 61 64 52 65 |n...D.DataLoadRe| 000004a0 66 25 20 8c 20 70 6f 6c 6c 6d 61 73 6b 25 3d 34 |f% . pollmask%=4| 000004b0 38 20 8b 20 70 6f 6c 6c 6d 61 73 6b 25 3d 34 39 |8 . pollmask%=49| 000004c0 3a f4 20 4e 6f 20 6e 75 6c 6c 73 20 69 66 20 77 |:. No nulls if w| 000004d0 61 73 74 65 64 0d 00 f0 19 c8 8e 20 a4 70 6f 6c |asted...... .pol| 000004e0 6c 28 70 6f 6c 6c 6d 61 73 6b 25 29 20 ca 0d 00 |l(pollmask%) ...| 000004f0 fa 10 20 c9 20 30 20 3a 20 f2 6e 75 6c 6c 0d 01 |.. . 0 : .null..| 00000500 04 10 20 c9 20 32 20 3a 20 f2 6f 70 65 6e 0d 01 |.. . 2 : .open..| 00000510 0e 11 20 c9 20 33 20 3a 20 f2 63 6c 6f 73 65 0d |.. . 3 : .close.| 00000520 01 18 16 20 c9 20 36 20 3a 20 f2 6d 6f 75 73 65 |... . 6 : .mouse| 00000530 63 6c 69 63 6b 0d 01 22 14 20 c9 20 37 20 3a 20 |click..". . 7 : | 00000540 f2 64 72 61 67 64 72 6f 70 0d 01 2c 0f 20 c9 20 |.dragdrop..,. . | 00000550 38 20 3a 20 f2 6b 65 79 0d 01 36 16 20 c9 20 39 |8 : .key..6. . 9| 00000560 20 3a 20 f2 6d 65 6e 75 73 65 6c 65 63 74 0d 01 | : .menuselect..| 00000570 40 17 20 c9 20 31 37 2c 31 38 20 3a 20 f2 6d 65 |@. . 17,18 : .me| 00000580 73 73 61 67 65 0d 01 4a 05 cb 0d 01 54 0d e7 41 |ssage..J....T..A| 00000590 63 74 69 6f 6e 20 8c 0d 01 5e 2c 20 41 63 74 3d |ction ...^, Act=| 000005a0 41 63 74 69 6f 6e 3a 41 63 74 69 6f 6e 3d 30 3a |Action:Action=0:| 000005b0 f4 20 52 65 73 65 74 20 61 63 74 69 6f 6e 20 66 |. Reset action f| 000005c0 6c 61 67 0d 01 68 3c 20 53 6c 6f 74 44 6f 77 6e |lag..h< SlotDown| 000005d0 3d b9 3a e0 3d 26 31 30 30 30 30 30 30 3a f2 6e |=.:.=&1000000:.n| 000005e0 65 77 5f 73 6c 6f 74 3a d3 3d 4d 69 64 48 69 6d |ew_slot:.=MidHim| 000005f0 65 6d 25 3a f4 20 43 6c 61 69 6d 20 6d 61 78 0d |em%:. Claim max.| 00000600 01 72 0d 20 c8 8e 20 41 63 74 20 ca 0d 01 7c 27 |.r. .. Act ...|'| 00000610 20 20 c9 20 41 63 74 41 72 63 2c 41 63 74 55 6e | . ActArc,ActUn| 00000620 61 72 63 20 3a 20 f4 20 28 44 65 29 61 72 63 68 |arc : . (De)arch| 00000630 69 76 65 0d 01 86 18 20 20 20 e7 a4 61 6c 6c 6f |ive.... ..allo| 00000640 63 61 74 65 5f 68 65 61 70 20 8c 0d 01 90 10 20 |cate_heap ..... | 00000650 20 20 20 f2 68 6f 75 72 5f 6f 6e 0d 01 9a 10 20 | .hour_on.... | 00000660 20 20 20 c8 8e 20 41 63 74 20 ca 0d 01 a4 33 20 | .. Act ....3 | 00000670 20 20 20 20 c9 20 41 63 74 41 72 63 20 3a 20 f2 | . ActArc : .| 00000680 61 72 63 68 69 76 65 28 49 6e 70 75 74 24 2c 4f |archive(Input$,O| 00000690 75 74 70 75 74 24 2c 65 72 72 6f 72 24 29 0d 01 |utput$,error$)..| 000006a0 ae 37 20 20 20 20 20 c9 20 41 63 74 55 6e 61 72 |.7 . ActUnar| 000006b0 63 20 3a 20 f2 75 6e 61 72 63 68 69 76 65 28 49 |c : .unarchive(I| 000006c0 6e 70 75 74 24 2c 4f 75 74 70 75 74 24 2c 65 72 |nput$,Output$,er| 000006d0 72 6f 72 24 29 0d 01 b8 09 20 20 20 20 cb 0d 01 |ror$).... ...| 000006e0 c2 11 20 20 20 20 f2 68 6f 75 72 5f 6f 66 66 0d |.. .hour_off.| 000006f0 01 cc 15 20 20 20 20 e7 65 72 72 6f 72 24 3c 3e |... .error$<>| 00000700 22 22 20 8c 0d 01 d6 26 20 20 20 20 20 f2 63 6c |"" ....& .cl| 00000710 6f 73 65 66 3a f4 20 45 6e 73 75 72 65 20 66 69 |osef:. Ensure fi| 00000720 6c 65 73 20 63 6c 6f 73 65 64 0d 01 e0 a0 20 20 |les closed.... | 00000730 20 20 20 e7 65 72 72 6f 72 24 3d 22 21 53 41 4d | .error$="!SAM| 00000740 45 46 49 4c 45 22 20 8c 20 65 72 72 6f 72 24 3d |EFILE" . error$=| 00000750 22 49 20 63 61 6e 6e 6f 74 20 75 73 65 20 74 68 |"I cannot use th| 00000760 65 20 73 61 6d 65 20 66 69 6c 65 2f 64 69 72 65 |e same file/dire| 00000770 63 74 6f 72 79 20 66 6f 72 20 6f 75 74 70 75 74 |ctory for output| 00000780 20 21 22 20 8b 20 e7 41 63 74 3d 41 63 74 41 72 | !" . .Act=ActAr| 00000790 63 20 8c 20 c8 99 20 22 58 4f 53 5f 46 69 6c 65 |c . .. "XOS_File| 000007a0 22 2c 36 2c 4f 75 74 70 75 74 24 3a f4 20 4b 69 |",6,Output$:. Ki| 000007b0 6c 6c 20 6f 75 74 70 75 74 20 61 72 63 68 69 76 |ll output archiv| 000007c0 65 20 69 66 20 65 72 72 6f 72 0d 01 ea 29 20 20 |e if error...) | 000007d0 20 20 20 f2 65 72 72 6f 72 28 2d 31 2c 65 72 72 | .error(-1,err| 000007e0 6f 72 24 29 3a f4 20 52 65 70 6f 72 74 20 65 72 |or$):. Report er| 000007f0 72 6f 72 0d 01 f4 09 20 20 20 20 cd 0d 01 fe 08 |ror.... .....| 00000800 20 20 20 cd 0d 02 08 06 20 cb 0d 02 12 05 cd 0d | ..... .......| 00000810 02 1c 0f e7 53 6c 6f 74 44 6f 77 6e 20 8c 0d 02 |....SlotDown ...| 00000820 26 39 20 e0 3d 4d 69 64 48 69 6d 65 6d 25 3a f2 |&9 .=MidHimem%:.| 00000830 6e 65 77 5f 73 6c 6f 74 3a d3 3d 4d 69 64 48 69 |new_slot:.=MidHi| 00000840 6d 65 6d 25 3a f4 20 47 69 76 65 20 62 61 63 6b |mem%:. Give back| 00000850 20 6d 65 6d 6f 72 79 0d 02 30 0f 20 53 6c 6f 74 | memory..0. Slot| 00000860 44 6f 77 6e 3d a3 0d 02 3a 05 cd 0d 02 44 44 e5 |Down=...:....DD.| 00000870 20 8d 64 5c 40 3a f4 20 53 6f 72 72 79 2c 20 49 | .d\@:. Sorry, I| 00000880 20 68 61 76 65 20 74 6f 2e 20 43 75 72 72 65 6e | have to. Curren| 00000890 74 20 42 41 53 49 43 20 72 65 73 74 72 69 63 74 |t BASIC restrict| 000008a0 69 6f 6e 73 20 77 69 74 68 20 45 4e 44 3d 2e 0d |ions with END=..| 000008b0 02 4e 05 20 0d 02 58 0e dd f2 6e 65 77 5f 73 6c |.N. ..X...new_sl| 000008c0 6f 74 0d 02 62 1e f4 20 53 6c 6f 74 20 63 68 61 |ot..b.. Slot cha| 000008d0 6e 67 65 64 2c 20 72 65 73 65 74 20 69 6e 66 6f |nged, reset info| 000008e0 0d 02 6c 2c 48 65 61 70 53 69 7a 65 25 3d 93 2d |..l,HeapSize%=.-| 000008f0 4d 69 64 48 69 6d 65 6d 25 3a f4 20 4e 65 77 20 |MidHimem%:. New | 00000900 73 69 7a 65 20 6f 66 20 68 65 61 70 0d 02 76 05 |size of heap..v.| 00000910 e1 0d 02 80 04 0d 02 8a 13 dd a4 61 6c 6c 6f 63 |...........alloc| 00000920 61 74 65 5f 68 65 61 70 0d 02 94 14 f4 20 41 6c |ate_heap..... Al| 00000930 6c 6f 63 61 74 65 73 20 68 65 61 70 0d 02 9e 2d |locates heap...-| 00000940 f4 20 52 65 74 75 72 6e 73 20 54 52 55 45 20 69 |. Returns TRUE i| 00000950 66 20 61 6c 6c 20 69 73 20 77 65 6c 6c 2c 20 65 |f all is well, e| 00000960 6c 73 65 20 46 41 4c 53 45 0d 02 a8 36 46 72 65 |lse FALSE...6Fre| 00000970 65 25 3d 48 65 61 70 53 69 7a 65 25 2d 32 35 36 |e%=HeapSize%-256| 00000980 3a 53 74 6f 72 65 25 3d 48 65 61 70 25 3a f4 20 |:Store%=Heap%:. | 00000990 49 6e 69 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 0d |Init allocation.| 000009a0 02 b2 0c c8 8e 20 41 63 74 20 ca 0d 02 bc 26 20 |..... Act ....& | 000009b0 c9 20 41 63 74 41 72 63 20 3a 20 f4 20 41 72 63 |. ActArc : . Arc| 000009c0 68 69 76 69 6e 67 20 61 6c 6c 6f 63 61 74 69 6f |hiving allocatio| 000009d0 6e 0d 02 c6 3e 20 20 6c 7a 77 65 6e 74 73 25 3d |n...> lzwents%=| 000009e0 32 5e a4 6f 62 69 74 73 3a 4c 5a 57 74 61 62 6c |2^.obits:LZWtabl| 000009f0 65 53 69 7a 65 25 3d 31 32 2a 6c 7a 77 65 6e 74 |eSize%=12*lzwent| 00000a00 73 25 3a 4c 5a 57 73 74 61 63 6b 25 3d 2d 31 0d |s%:LZWstack%=-1.| 00000a10 02 d0 2a 20 c9 20 41 63 74 55 6e 61 72 63 20 3a |..* . ActUnarc :| 00000a20 20 f4 20 44 65 61 72 63 68 69 76 69 6e 67 20 61 | . Dearchiving a| 00000a30 6c 6c 6f 63 61 74 69 6f 6e 0d 02 da b6 20 20 49 |llocation.... I| 00000a40 6e 3d 8e 49 6e 70 75 74 24 3a cf 23 49 6e 3d 35 |n=.Input$:.#In=5| 00000a50 3a 66 6f 72 6d 61 74 25 3d 9a 23 49 6e 20 84 20 |:format%=.#In . | 00000a60 9a 23 49 6e 3c 3c 38 20 84 20 9a 23 49 6e 3c 3c |.#In<<8 . .#In<<| 00000a70 31 36 20 84 20 9a 23 49 6e 3c 3c 32 34 3a d9 23 |16 . .#In<<24:.#| 00000a80 49 6e 3a e7 66 6f 72 6d 61 74 25 3c 30 20 84 20 |In:.format%<0 . | 00000a90 66 6f 72 6d 61 74 25 3e 34 20 8c 20 f2 65 72 72 |format%>4 . .err| 00000aa0 6f 72 28 2d 31 2c 22 49 20 63 61 6e 6e 6f 74 20 |or(-1,"I cannot | 00000ab0 72 65 61 64 20 66 6f 72 6d 61 74 20 23 22 2b c3 |read format #"+.| 00000ac0 66 6f 72 6d 61 74 25 2b 22 20 61 72 63 68 69 76 |format%+" archiv| 00000ad0 65 73 20 21 22 29 3a 3d a3 20 8b 20 4c 5a 57 69 |es !"):=. . LZWi| 00000ae0 62 69 74 73 3d 31 32 2b 66 6f 72 6d 61 74 25 0d |bits=12+format%.| 00000af0 02 e4 19 20 20 6c 7a 77 65 6e 74 73 25 3d 32 5e |... lzwents%=2^| 00000b00 4c 5a 57 69 62 69 74 73 0d 02 ee 53 20 20 e7 a4 |LZWibits...S ..| 00000b10 61 6c 6c 6f 63 61 74 65 28 4c 5a 57 73 74 61 63 |allocate(LZWstac| 00000b20 6b 25 2c 6c 7a 77 65 6e 74 73 25 29 20 8b 20 f2 |k%,lzwents%) . .| 00000b30 65 72 72 6f 72 28 2d 31 2c 22 4e 6f 20 72 6f 6f |error(-1,"No roo| 00000b40 6d 20 66 6f 72 20 4c 5a 57 20 73 74 72 69 6e 67 |m for LZW string| 00000b50 20 73 74 61 63 6b 22 29 3a 3d a3 0d 02 f8 1e 20 | stack"):=..... | 00000b60 20 4c 5a 57 74 61 62 6c 65 53 69 7a 65 25 3d 38 | LZWtableSize%=8| 00000b70 2a 6c 7a 77 65 6e 74 73 25 0d 03 02 05 cb 0d 03 |*lzwents%.......| 00000b80 0c 50 e7 a4 61 6c 6c 6f 63 61 74 65 28 4c 5a 57 |.P..allocate(LZW| 00000b90 74 61 62 6c 65 25 2c 4c 5a 57 74 61 62 6c 65 53 |table%,LZWtableS| 00000ba0 69 7a 65 25 29 20 8b 20 f2 65 72 72 6f 72 28 2d |ize%) . .error(-| 00000bb0 31 2c 22 4e 6f 20 72 6f 6f 6d 20 66 6f 72 20 4c |1,"No room for L| 00000bc0 5a 57 20 74 61 62 6c 65 73 22 29 3a 3d a3 0d 03 |ZW tables"):=...| 00000bd0 16 33 68 61 6c 76 65 25 3d 28 28 46 72 65 65 25 |.3halve%=((Free%| 00000be0 2d 32 35 36 29 81 32 29 80 ac 33 3a f4 20 48 61 |-256).2)..3:. Ha| 00000bf0 6c 66 20 6f 66 20 77 68 61 74 27 73 20 6c 65 66 |lf of what's lef| 00000c00 74 0d 03 20 3a e7 68 61 6c 76 65 25 3c 32 35 36 |t.. :.halve%<256| 00000c10 20 8c 20 f2 65 72 72 6f 72 28 2d 31 2c 22 4e 6f | . .error(-1,"No| 00000c20 20 72 6f 6f 6d 20 66 6f 72 20 66 69 6c 65 20 62 | room for file b| 00000c30 75 66 66 65 72 73 22 29 3a 3d a3 0d 03 2a 1e f4 |uffers"):=...*..| 00000c40 20 49 6e 2f 6f 75 74 20 66 69 6c 65 20 62 75 66 | In/out file buf| 00000c50 66 65 72 20 73 69 7a 65 73 0d 03 34 4b e7 28 a4 |fer sizes..4K.(.| 00000c60 6f 72 65 63 3d 32 29 20 84 20 28 a4 6f 72 65 63 |orec=2) . (.orec| 00000c70 3d 33 29 20 84 20 28 a4 6f 73 74 6f 3d 32 29 20 |=3) . (.osto=2) | 00000c80 8c 20 49 6e 42 75 66 53 69 7a 65 25 3d 32 35 36 |. InBufSize%=256| 00000c90 20 8b 20 49 6e 42 75 66 53 69 7a 65 25 3d 68 61 | . InBufSize%=ha| 00000ca0 6c 76 65 25 0d 03 3e 41 e7 28 a4 6f 72 65 63 3d |lve%..>A.(.orec=| 00000cb0 32 29 20 84 20 28 a4 6f 72 65 63 3d 33 29 20 8c |2) . (.orec=3) .| 00000cc0 20 4f 75 74 42 75 66 53 69 7a 65 25 3d 32 35 36 | OutBufSize%=256| 00000cd0 20 8b 20 4f 75 74 42 75 66 53 69 7a 65 25 3d 68 | . OutBufSize%=h| 00000ce0 61 6c 76 65 25 0d 03 48 54 e7 a4 61 6c 6c 6f 63 |alve%..HT..alloc| 00000cf0 61 74 65 28 4f 75 74 42 75 66 25 2c 4f 75 74 42 |ate(OutBuf%,OutB| 00000d00 75 66 53 69 7a 65 25 29 20 8b 20 f2 65 72 72 6f |ufSize%) . .erro| 00000d10 72 28 2d 31 2c 22 4e 6f 20 72 6f 6f 6d 20 66 6f |r(-1,"No room fo| 00000d20 72 20 6f 75 74 70 75 74 20 66 69 6c 65 20 62 75 |r output file bu| 00000d30 66 66 65 72 22 29 3a 3d a3 0d 03 52 51 e7 a4 61 |ffer"):=...RQ..a| 00000d40 6c 6c 6f 63 61 74 65 28 49 6e 42 75 66 25 2c 49 |llocate(InBuf%,I| 00000d50 6e 42 75 66 53 69 7a 65 25 29 20 8b 20 f2 65 72 |nBufSize%) . .er| 00000d60 72 6f 72 28 2d 31 2c 22 4e 6f 20 72 6f 6f 6d 20 |ror(-1,"No room | 00000d70 66 6f 72 20 69 6e 70 75 74 20 66 69 6c 65 20 62 |for input file b| 00000d80 75 66 66 65 72 22 29 3a 3d a3 0d 03 5c b0 21 42 |uffer"):=...\.!B| 00000d90 75 66 49 25 3d 4c 5a 57 74 61 62 6c 65 25 3a 42 |ufI%=LZWtable%:B| 00000da0 75 66 49 25 21 34 3d 4c 5a 57 74 61 62 6c 65 53 |ufI%!4=LZWtableS| 00000db0 69 7a 65 25 3a 42 75 66 49 25 21 38 3d 4c 5a 57 |ize%:BufI%!8=LZW| 00000dc0 73 74 61 63 6b 25 3a 42 75 66 49 25 21 31 32 3d |stack%:BufI%!12=| 00000dd0 6c 7a 77 65 6e 74 73 25 3a 42 75 66 49 25 21 31 |lzwents%:BufI%!1| 00000de0 36 3d 49 6e 42 75 66 25 3a 42 75 66 49 25 21 32 |6=InBuf%:BufI%!2| 00000df0 30 3d 49 6e 42 75 66 53 69 7a 65 25 3a 42 75 66 |0=InBufSize%:Buf| 00000e00 49 25 21 32 34 3d 4f 75 74 42 75 66 25 3a 42 75 |I%!24=OutBuf%:Bu| 00000e10 66 49 25 21 32 38 3d 4f 75 74 42 75 66 53 69 7a |fI%!28=OutBufSiz| 00000e20 65 25 3a f4 20 53 65 74 20 62 75 66 66 65 72 20 |e%:. Set buffer | 00000e30 69 6e 66 6f 20 62 6c 6f 63 6b 0d 03 66 06 3d b9 |info block..f.=.| 00000e40 0d 03 70 04 0d 03 7a 1d dd a4 61 6c 6c 6f 63 61 |..p...z...alloca| 00000e50 74 65 28 f8 20 76 61 72 25 2c 62 79 74 65 73 25 |te(. var%,bytes%| 00000e60 29 0d 03 84 2a f4 20 41 6c 6c 6f 63 61 74 65 73 |)...*. Allocates| 00000e70 20 62 79 74 65 73 25 20 62 79 74 65 73 20 66 72 | bytes% bytes fr| 00000e80 6f 6d 20 74 68 65 20 68 65 61 70 0d 03 8e 3c f4 |om the heap...<.| 00000e90 20 52 65 74 75 72 6e 73 20 54 52 55 45 20 61 6e | Returns TRUE an| 00000ea0 64 20 62 61 73 65 20 69 6e 20 76 61 72 25 20 69 |d base in var% i| 00000eb0 66 20 73 75 63 63 65 73 66 75 6c 2c 20 65 6c 73 |f succesful, els| 00000ec0 65 20 46 41 4c 53 45 0d 03 98 6b e7 28 62 79 74 |e FALSE...k.(byt| 00000ed0 65 73 25 3c 30 29 84 28 62 79 74 65 73 25 3e 31 |es%<0).(bytes%>1| 00000ee0 36 2a 31 30 32 34 2a 31 30 32 34 29 20 8c 20 f2 |6*1024*1024) . .| 00000ef0 65 72 72 6f 72 28 2d 31 2c 22 41 72 65 20 79 6f |error(-1,"Are yo| 00000f00 75 20 4e 55 54 53 20 3f 22 29 3a 3d a3 3a f4 20 |u NUTS ?"):=.:. | 00000f10 45 6e 6f 72 6d 6f 75 73 20 6f 72 20 65 72 72 6f |Enormous or erro| 00000f20 6e 65 6f 75 73 20 61 6d 6f 75 6e 74 20 61 73 6b |neous amount ask| 00000f30 65 64 0d 03 a2 26 62 79 74 65 73 25 3d a4 61 6c |ed...&bytes%=.al| 00000f40 69 67 6e 28 62 79 74 65 73 25 29 3a f4 20 57 6f |ign(bytes%):. Wo| 00000f50 72 64 2d 61 6c 69 67 6e 0d 03 ac 34 e7 46 72 65 |rd-align...4.Fre| 00000f60 65 25 3c 62 79 74 65 73 25 20 8c 20 3d a3 3a f4 |e%<bytes% . =.:.| 00000f70 20 44 6f 20 49 20 6e 65 65 64 20 38 20 6d 65 67 | Do I need 8 meg| 00000f80 20 61 66 74 65 72 20 61 6c 6c 20 3f 0d 03 b6 1d | after all ?....| 00000f90 76 61 72 25 3d 53 74 6f 72 65 25 3a f4 20 52 65 |var%=Store%:. Re| 00000fa0 74 75 72 6e 20 62 61 73 65 0d 03 c0 3a 53 74 6f |turn base...:Sto| 00000fb0 72 65 25 2b 3d 62 79 74 65 73 25 3a 46 72 65 65 |re%+=bytes%:Free| 00000fc0 25 2d 3d 62 79 74 65 73 25 3a f4 20 44 65 61 6c |%-=bytes%:. Deal| 00000fd0 6c 6f 63 61 74 65 20 73 74 6f 72 61 67 65 20 75 |locate storage u| 00000fe0 73 65 64 0d 03 ca 06 3d b9 0d 03 d4 04 0d 03 de |sed....=........| 00000ff0 11 dd a4 61 6c 69 67 6e 28 76 61 6c 25 29 0d 03 |...align(val%)..| 00001000 e8 30 f4 20 52 65 74 75 72 6e 73 20 6e 65 78 74 |.0. Returns next| 00001010 2d 75 70 20 77 6f 72 64 20 61 6c 69 67 6e 65 64 |-up word aligned| 00001020 20 76 61 6c 75 65 20 6f 66 20 76 61 6c 25 0d 03 | value of val%..| 00001030 f2 10 3d 28 76 61 6c 25 2b 33 29 80 ac 33 0d 03 |..=(val%+3)..3..| 00001040 fc 05 20 0d 04 06 10 dd f2 6d 65 6e 75 73 65 6c |.. ......menusel| 00001050 65 63 74 0d 04 10 14 f4 20 4d 65 6e 75 20 73 65 |ect..... Menu se| 00001060 6c 65 63 74 69 6f 6e 0d 04 1a 3f c8 99 20 57 44 |lection...?.. WD| 00001070 65 63 6f 64 65 4d 25 2c 2c 4d 65 6e 75 31 2c 50 |ecodeM%,,Menu1,P| 00001080 6f 6c 6c 2c c4 31 30 30 2c 22 20 22 29 20 b8 20 |oll,.100," ") . | 00001090 2c 2c 2c 73 65 6c 65 63 74 24 3a f4 20 53 65 6c |,,,select$:. Sel| 000010a0 65 63 74 69 6f 6e 0d 04 24 59 70 25 3d a7 73 65 |ection..$Yp%=.se| 000010b0 6c 65 63 74 24 2c 22 2e 22 29 3a e7 70 25 3e 30 |lect$,"."):.p%>0| 000010c0 20 8c 20 73 65 6c 65 63 74 32 24 3d c1 73 65 6c | . select2$=.sel| 000010d0 65 63 74 24 2c 70 25 2b 31 29 3a 73 65 6c 65 63 |ect$,p%+1):selec| 000010e0 74 24 3d c0 73 65 6c 65 63 74 24 2c 70 25 2d 31 |t$=.select$,p%-1| 000010f0 29 20 8b 20 73 65 6c 65 63 74 32 24 3d 22 22 0d |) . select2$="".| 00001100 04 2e 10 c8 8e 20 73 65 6c 65 63 74 24 20 ca 0d |..... select$ ..| 00001110 04 38 18 20 c9 20 22 22 20 3a 20 f4 20 44 6f 20 |.8. . "" : . Do | 00001120 6e 6f 74 68 69 6e 67 0d 04 42 1e 20 c9 20 22 51 |nothing..B. . "Q| 00001130 75 69 74 22 20 3a 20 f4 20 51 75 69 74 20 70 72 |uit" : . Quit pr| 00001140 6f 67 72 61 6d 0d 04 4c 1d 20 20 f2 64 69 65 3a |ogram..L. .die:| 00001150 f4 20 54 69 64 79 20 75 70 20 61 6e 64 20 65 78 |. Tidy up and ex| 00001160 69 74 0d 04 56 23 20 c9 20 22 43 6f 6e 74 72 6f |it..V# . "Contro| 00001170 6c 22 20 3a 20 f4 20 43 6f 6e 74 72 6f 6c 20 77 |l" : . Control w| 00001180 69 6e 64 6f 77 0d 04 60 22 20 20 f2 6f 70 65 6e |indow..`" .open| 00001190 5f 77 69 6e 64 6f 77 28 77 69 6e 5f 63 6f 6e 74 |_window(win_cont| 000011a0 72 6f 6c 25 2c 33 29 0d 04 6a 05 cb 0d 04 74 28 |rol%,3)..j....t(| 000011b0 c8 99 20 57 47 65 74 50 49 25 2c 2c 42 6c 6f 63 |.. WGetPI%,,Bloc| 000011c0 6b 3a f4 20 47 65 74 20 70 6f 69 6e 74 65 72 20 |k:. Get pointer | 000011d0 69 6e 66 6f 0d 04 7e 35 e7 28 28 42 6c 6f 63 6b |info..~5.((Block| 000011e0 21 38 29 80 31 29 3e 30 20 8c 20 f2 6d 61 69 6e |!8).1)>0 . .main| 000011f0 5f 6d 65 6e 75 3a f4 20 41 64 6a 75 73 74 20 2d |_menu:. Adjust -| 00001200 3e 20 72 65 2d 6f 70 65 6e 0d 04 88 05 e1 0d 04 |> re-open.......| 00001210 92 04 0d 04 9c 0b dd f2 63 6c 6f 73 65 0d 04 a6 |........close...| 00001220 28 f2 63 6c 6f 73 65 5f 77 69 6e 64 6f 77 28 50 |(.close_window(P| 00001230 6f 6c 6c 21 30 29 3a f4 20 43 6c 6f 73 65 20 77 |oll!0):. Close w| 00001240 69 6e 64 6f 77 0d 04 b0 05 e1 0d 04 ba 04 0d 04 |indow...........| 00001250 c4 0a dd f2 6f 70 65 6e 0d 04 ce 26 f2 6f 70 65 |....open...&.ope| 00001260 6e 5f 77 69 6e 64 6f 77 28 30 2c 50 6f 6c 6c 29 |n_window(0,Poll)| 00001270 3a f4 20 4f 70 65 6e 20 77 69 6e 64 6f 77 0d 04 |:. Open window..| 00001280 d8 05 e1 0d 04 e2 04 0d 04 ec 0a dd f2 6e 75 6c |.............nul| 00001290 6c 0d 04 f6 13 e7 44 61 74 61 4c 6f 61 64 52 65 |l.....DataLoadRe| 000012a0 66 25 20 8c 0d 05 00 3e 20 44 61 74 61 4c 6f 61 |f% ....> DataLoa| 000012b0 64 52 65 66 25 3d a3 3a c8 99 20 22 4f 53 5f 46 |dRef%=.:.. "OS_F| 000012c0 69 6c 65 22 2c 36 2c 4f 75 74 70 75 74 24 3a f4 |ile",6,Output$:.| 000012d0 20 44 65 6c 65 74 65 20 66 69 6c 65 20 73 61 76 | Delete file sav| 000012e0 65 64 0d 05 0a 43 20 f2 65 72 72 6f 72 28 2d 31 |ed...C .error(-1| 000012f0 2c 22 42 61 64 20 64 61 74 61 20 74 72 61 6e 73 |,"Bad data trans| 00001300 66 65 72 2c 20 72 65 63 65 69 76 65 72 20 64 65 |fer, receiver de| 00001310 61 64 22 29 3a f4 20 4e 6f 20 44 61 74 61 4c 6f |ad"):. No DataLo| 00001320 61 64 41 63 6b 0d 05 14 05 cd 0d 05 1e 05 e1 0d |adAck...........| 00001330 05 28 04 0d 05 32 09 dd f2 6b 65 79 0d 05 3c 45 |.(...2...key..<E| 00001340 77 69 6e 25 3d 50 6f 6c 6c 21 30 3a 69 63 6f 25 |win%=Poll!0:ico%| 00001350 3d 50 6f 6c 6c 21 34 3a 63 68 61 72 25 3d 50 6f |=Poll!4:char%=Po| 00001360 6c 6c 21 32 34 3a f4 20 57 69 6e 64 6f 77 2c 20 |ll!24:. Window, | 00001370 69 63 6f 6e 2c 20 6b 65 79 20 70 72 65 73 73 65 |icon, key presse| 00001380 64 0d 05 46 2a e7 28 77 69 6e 25 3d 77 69 6e 5f |d..F*.(win%=win_| 00001390 66 69 6c 65 25 29 20 80 20 28 69 63 6f 25 3d 49 |file%) . (ico%=I| 000013a0 63 6f 46 74 79 70 65 25 29 20 8c 0d 05 50 0f 20 |coFtype%) ...P. | 000013b0 c8 8e 20 63 68 61 72 25 20 ca 0d 05 5a 1d 20 20 |.. char% ...Z. | 000013c0 c9 20 31 33 20 3a 20 f4 20 52 65 74 75 72 6e 20 |. 13 : . Return | 000013d0 70 72 65 73 73 65 64 0d 05 64 43 20 20 20 f2 65 |pressed..dC .e| 000013e0 72 72 6f 72 28 2d 31 2c 22 50 6c 65 61 73 65 20 |rror(-1,"Please | 000013f0 64 72 61 67 20 74 68 65 20 66 69 6c 65 20 69 63 |drag the file ic| 00001400 6f 6e 20 74 6f 20 61 20 64 69 72 65 63 74 6f 72 |on to a director| 00001410 79 20 76 69 65 77 65 72 22 29 0d 05 6e 1d 20 20 |y viewer")..n. | 00001420 c9 20 32 37 20 3a 20 f4 20 45 73 63 61 70 65 20 |. 27 : . Escape | 00001430 70 72 65 73 73 65 64 0d 05 78 1f 20 20 20 f2 63 |pressed..x. .c| 00001440 6c 6f 73 65 5f 77 69 6e 64 6f 77 28 77 69 6e 5f |lose_window(win_| 00001450 66 69 6c 65 25 29 0d 05 82 06 20 cb 0d 05 8c 05 |file%).... .....| 00001460 cd 0d 05 96 05 e1 0d 05 a0 04 0d 05 aa 0d dd f2 |................| 00001470 6d 65 73 73 61 67 65 0d 05 b4 2d f4 20 49 67 6e |message...-. Ign| 00001480 6f 72 65 20 6d 65 73 73 61 67 65 73 20 6f 72 69 |ore messages ori| 00001490 67 69 6e 61 74 69 6e 67 20 66 72 6f 6d 20 6d 79 |ginating from my| 000014a0 73 65 6c 66 0d 05 be 36 e7 28 50 6f 6c 6c 21 34 |self...6.(Poll!4| 000014b0 29 3d 54 61 73 6b 48 61 6e 64 6c 65 25 20 8c 20 |)=TaskHandle% . | 000014c0 6d 73 67 6e 72 25 3d 2d 31 20 8b 20 6d 73 67 6e |msgnr%=-1 . msgn| 000014d0 72 25 3d 50 6f 6c 6c 21 31 36 0d 05 c8 0f c8 8e |r%=Poll!16......| 000014e0 20 6d 73 67 6e 72 25 20 ca 0d 05 d2 19 20 c9 20 | msgnr% ..... . | 000014f0 2d 31 20 3a 20 f4 20 44 6f 6e 27 74 20 72 65 61 |-1 : . Don't rea| 00001500 63 74 0d 05 dc 2b 20 c9 20 30 20 3a 20 f2 64 69 |ct...+ . 0 : .di| 00001510 65 3a f4 20 52 65 71 75 65 73 74 20 74 6f 20 74 |e:. Request to t| 00001520 65 72 6d 69 6e 61 74 65 20 74 61 73 6b 0d 05 e6 |erminate task...| 00001530 2e 20 c9 20 31 20 3a 20 f4 20 44 61 74 61 53 61 |. . 1 : . DataSa| 00001540 76 65 2c 20 74 72 61 6e 73 66 65 72 20 76 69 61 |ve, transfer via| 00001550 20 73 63 72 61 70 20 66 69 6c 65 0d 05 f0 37 20 | scrap file...7 | 00001560 20 73 63 72 61 70 24 3d a4 4f 53 76 61 72 28 22 | scrap$=.OSvar("| 00001570 57 69 6d 70 24 53 63 72 61 70 22 29 3a f4 20 52 |Wimp$Scrap"):. R| 00001580 65 61 64 20 73 63 72 61 70 20 66 69 6c 65 6e 61 |ead scrap filena| 00001590 6d 65 0d 05 fa d2 20 20 e7 73 63 72 61 70 24 3c |me.... .scrap$<| 000015a0 3e 22 22 20 8c 20 50 6f 6c 6c 21 31 32 3d 50 6f |>"" . Poll!12=Po| 000015b0 6c 6c 21 38 3a 50 6f 6c 6c 21 31 36 3d 32 3a 50 |ll!8:Poll!16=2:P| 000015c0 6f 6c 6c 21 33 36 3d 2d 31 3a 24 28 50 6f 6c 6c |oll!36=-1:$(Poll| 000015d0 2b 34 34 29 3d 73 63 72 61 70 24 2b bd 30 3a 50 |+44)=scrap$+.0:P| 000015e0 6f 6c 6c 21 30 3d 34 34 2b 28 a9 73 63 72 61 70 |oll!0=44+(.scrap| 000015f0 24 2b 31 2b 33 29 80 ac 33 3a c8 99 20 57 53 65 |$+1+3)..3:.. WSe| 00001600 6e 64 4d 73 67 25 2c 31 38 2c 50 6f 6c 6c 2c 50 |ndMsg%,18,Poll,P| 00001610 6f 6c 6c 21 34 20 8b 20 f2 65 72 72 6f 72 28 2d |oll!4 . .error(-| 00001620 31 2c 22 57 69 6d 70 24 53 63 72 61 70 20 6e 6f |1,"Wimp$Scrap no| 00001630 74 20 64 65 66 69 6e 65 64 22 29 3a f4 20 53 65 |t defined"):. Se| 00001640 6e 64 20 44 61 74 61 53 61 76 65 41 63 6b 20 69 |nd DataSaveAck i| 00001650 66 20 73 63 72 61 70 20 66 69 6c 65 20 64 65 66 |f scrap file def| 00001660 69 6e 65 64 0d 06 04 23 20 c9 20 32 20 3a 20 f4 |ined...# . 2 : .| 00001670 20 44 61 74 61 53 61 76 65 41 63 6b 2c 20 73 61 | DataSaveAck, sa| 00001680 76 65 20 66 69 6c 65 0d 06 0e 41 20 20 4f 75 74 |ve file...A Out| 00001690 70 75 74 24 3d a4 73 74 72 69 6e 67 28 50 6f 6c |put$=.string(Pol| 000016a0 6c 2b 34 34 29 3a f4 20 52 65 61 64 20 70 61 74 |l+44):. Read pat| 000016b0 68 2d 6e 61 6d 65 20 6f 66 20 66 69 6c 65 20 74 |h-name of file t| 000016c0 6f 20 63 72 65 61 74 65 0d 06 18 3e 20 20 50 6f |o create...> Po| 000016d0 6c 6c 21 31 32 3d 50 6f 6c 6c 21 38 3a 50 6f 6c |ll!12=Poll!8:Pol| 000016e0 6c 21 31 36 3d 33 3a f4 20 41 6d 65 6e 64 20 64 |l!16=3:. Amend d| 000016f0 61 74 61 20 62 6c 6f 63 6b 20 66 6f 72 20 44 61 |ata block for Da| 00001700 74 61 4c 6f 61 64 0d 06 22 31 20 20 c8 99 20 57 |taLoad.."1 .. W| 00001710 53 65 6e 64 4d 73 67 25 2c 31 38 2c 50 6f 6c 6c |SendMsg%,18,Poll| 00001720 2c 50 6f 6c 6c 21 34 3a f4 20 53 65 6e 64 20 44 |,Poll!4:. Send D| 00001730 61 74 61 4c 6f 61 64 0d 06 2c 3f 20 20 44 61 74 |ataLoad..,? Dat| 00001740 61 4c 6f 61 64 52 65 66 25 3d 50 6f 6c 6c 21 38 |aLoadRef%=Poll!8| 00001750 3a f4 20 41 77 61 69 74 20 61 20 44 61 74 61 4c |:. Await a DataL| 00001760 6f 61 64 41 63 6b 2c 20 72 65 6d 65 6d 62 65 72 |oadAck, remember| 00001770 20 6d 79 72 65 66 0d 06 36 4a 20 20 e7 49 6e 54 | myref..6J .InT| 00001780 79 70 65 3d 26 36 38 45 20 8c 20 41 63 74 69 6f |ype=&68E . Actio| 00001790 6e 3d 41 63 74 55 6e 61 72 63 20 8b 20 41 63 74 |n=ActUnarc . Act| 000017a0 69 6f 6e 3d 41 63 74 41 72 63 3a f4 20 50 65 6e |ion=ActArc:. Pen| 000017b0 64 69 6e 67 20 28 64 65 29 61 72 63 68 69 76 65 |ding (de)archive| 000017c0 0d 06 40 40 20 c9 20 33 2c 35 20 3a 20 f4 20 44 |..@@ . 3,5 : . D| 000017d0 61 74 61 4c 6f 61 64 2f 4f 70 65 6e 2c 20 63 68 |ataLoad/Open, ch| 000017e0 65 63 6b 20 69 66 20 64 69 72 65 63 74 6f 72 79 |eck if directory| 000017f0 20 6f 72 20 61 72 63 68 69 76 65 20 66 69 6c 65 | or archive file| 00001800 0d 06 4a 1e 20 20 74 79 70 65 25 3d 50 6f 6c 6c |..J. type%=Poll| 00001810 21 34 30 3a f4 20 46 69 6c 65 74 79 70 65 0d 06 |!40:. Filetype..| 00001820 54 2f 20 20 e7 28 74 79 70 65 25 3e 3d 26 31 30 |T/ .(type%>=&10| 00001830 30 30 20 80 20 6d 73 67 6e 72 25 3d 33 29 20 84 |00 . msgnr%=3) .| 00001840 20 74 79 70 65 25 3d 26 36 38 45 20 8c 0d 06 5e | type%=&68E ...^| 00001850 22 20 20 20 e7 74 79 70 65 25 3e 3d 26 31 30 30 |" .type%>=&100| 00001860 30 20 8c 20 74 79 70 65 25 3d 26 31 30 30 30 0d |0 . type%=&1000.| 00001870 06 68 49 20 20 20 50 6f 6c 6c 21 31 32 3d 50 6f |.hI Poll!12=Po| 00001880 6c 6c 21 38 3a 50 6f 6c 6c 21 31 36 3d 34 3a c8 |ll!8:Poll!16=4:.| 00001890 99 20 57 53 65 6e 64 4d 73 67 25 2c 31 37 2c 50 |. WSendMsg%,17,P| 000018a0 6f 6c 6c 2c 50 6f 6c 6c 21 34 3a f4 20 44 61 74 |oll,Poll!4:. Dat| 000018b0 61 4c 6f 61 64 41 63 6b 0d 06 72 31 20 20 20 f2 |aLoadAck..r1 .| 000018c0 64 6f 28 a4 73 74 72 69 6e 67 28 50 6f 6c 6c 2b |do(.string(Poll+| 000018d0 34 34 29 2c 74 79 70 65 25 29 3a f4 20 41 74 74 |44),type%):. Att| 000018e0 65 6d 70 74 20 6c 6f 61 64 0d 06 7c 07 20 20 cd |empt load..|. .| 000018f0 0d 06 86 29 20 c9 20 34 20 3a 20 f4 20 44 61 74 |...) . 4 : . Dat| 00001900 61 4c 6f 61 64 41 63 6b 2c 20 63 68 65 63 6b 20 |aLoadAck, check | 00001910 6f 72 20 69 67 6e 6f 72 65 0d 06 90 3c 20 20 e7 |or ignore...< .| 00001920 44 61 74 61 4c 6f 61 64 52 65 66 25 20 8c 20 e7 |DataLoadRef% . .| 00001930 50 6f 6c 6c 21 31 32 3d 44 61 74 61 4c 6f 61 64 |Poll!12=DataLoad| 00001940 52 65 66 25 20 8c 20 44 61 74 61 4c 6f 61 64 52 |Ref% . DataLoadR| 00001950 65 66 25 3d a3 0d 06 9a 05 cb 0d 06 a4 05 e1 0d |ef%=............| 00001960 06 ae 04 0d 06 b8 13 dd f2 64 6f 28 69 6e 24 2c |.........do(in$,| 00001970 74 79 70 65 25 29 0d 06 c2 1b f4 20 49 6e 69 74 |type%)..... Init| 00001980 69 61 74 65 73 20 28 75 6e 29 61 72 63 68 69 76 |iates (un)archiv| 00001990 65 0d 06 cc 28 e7 74 79 70 65 25 3d 26 31 30 30 |e...(.type%=&100| 000019a0 30 20 8c 20 e7 a6 2d 32 20 8c 20 69 6e 24 3d a4 |0 . ..-2 . in$=.| 000019b0 68 65 61 64 28 69 6e 24 29 0d 06 d6 2d 49 6e 70 |head(in$)...-Inp| 000019c0 75 74 24 3d 69 6e 24 3a 49 6e 54 79 70 65 3d 74 |ut$=in$:InType=t| 000019d0 79 70 65 25 3a f4 20 46 69 6c 65 6e 61 6d 65 20 |ype%:. Filename | 000019e0 26 20 74 79 70 65 0d 06 e0 3c 4c 65 61 66 24 3d |& type...<Leaf$=| 000019f0 a4 6c 65 61 66 28 49 6e 70 75 74 24 29 3a e7 4c |.leaf(Input$):.L| 00001a00 65 61 66 24 3d 22 24 22 20 8c 20 4c 65 61 66 24 |eaf$="$" . Leaf$| 00001a10 3d 22 52 6f 6f 74 22 3a f4 20 4c 65 61 66 6e 61 |="Root":. Leafna| 00001a20 6d 65 0d 06 ea 30 f2 64 69 63 28 44 53 66 6e 25 |me...0.dic(DSfn%| 00001a30 2c 4c 65 61 66 24 29 3a f4 20 53 61 6d 65 20 6c |,Leaf$):. Same l| 00001a40 65 61 66 6e 61 6d 65 20 66 6f 72 20 6f 75 74 70 |eafname for outp| 00001a50 75 74 0d 06 f4 0e c8 8e 20 74 79 70 65 25 20 ca |ut...... type% .| 00001a60 0d 06 fe 1e 20 c9 20 26 36 38 45 20 3a 20 f4 20 |.... . &68E : . | 00001a70 41 72 63 68 69 76 65 20 74 6f 20 64 69 72 0d 07 |Archive to dir..| 00001a80 08 3f 20 20 e7 a4 75 6e 74 6f 3d 32 20 8c 20 4f |.? ..unto=2 . O| 00001a90 75 74 70 75 74 24 3d 22 22 3a 41 63 74 69 6f 6e |utput$="":Action| 00001aa0 3d 41 63 74 55 6e 61 72 63 3a e1 3a f4 20 52 65 |=ActUnarc:.:. Re| 00001ab0 73 74 6f 72 65 20 70 65 6e 64 69 6e 67 0d 07 12 |store pending...| 00001ac0 1d 20 20 f2 64 69 63 28 44 53 73 6e 25 2c 22 64 |. .dic(DSsn%,"d| 00001ad0 69 72 65 63 74 6f 72 79 22 29 0d 07 1c 1f 20 c9 |irectory").... .| 00001ae0 20 26 31 30 30 30 20 3a 20 f4 20 44 69 72 20 74 | &1000 : . Dir t| 00001af0 6f 20 61 72 63 68 69 76 65 0d 07 26 1c 20 20 f2 |o archive..&. .| 00001b00 64 69 63 28 44 53 73 6e 25 2c 22 66 69 6c 65 5f |dic(DSsn%,"file_| 00001b10 36 38 65 22 29 0d 07 30 05 cb 0d 07 3a 36 f2 6f |68e")..0....:6.o| 00001b20 70 65 6e 5f 77 69 6e 64 6f 77 28 77 69 6e 5f 66 |pen_window(win_f| 00001b30 69 6c 65 25 2c 2d 31 29 3a f4 20 4f 70 65 6e 20 |ile%,-1):. Open | 00001b40 73 61 76 65 20 66 69 6c 65 20 77 69 6e 64 6f 77 |save file window| 00001b50 0d 07 44 3b c8 99 20 57 53 65 74 43 61 25 2c 77 |..D;.. WSetCa%,w| 00001b60 69 6e 5f 66 69 6c 65 25 2c 31 2c 2c 2c 2d 31 2c |in_file%,1,,,-1,| 00001b70 a9 28 4c 65 61 66 24 29 3a f4 20 47 61 69 6e 20 |.(Leaf$):. Gain | 00001b80 63 61 72 65 74 20 69 6e 20 69 74 0d 07 4e 05 e1 |caret in it..N..| 00001b90 0d 07 58 04 0d 07 62 10 dd f2 6d 6f 75 73 65 63 |..X...b...mousec| 00001ba0 6c 69 63 6b 0d 07 6c 3f 62 75 74 25 3d 50 6f 6c |lick..l?but%=Pol| 00001bb0 6c 21 38 3a 77 69 6e 25 3d 50 6f 6c 6c 21 31 32 |l!8:win%=Poll!12| 00001bc0 3a 69 63 6f 25 3d 50 6f 6c 6c 21 31 36 3a f4 20 |:ico%=Poll!16:. | 00001bd0 42 75 74 74 6f 6e 73 2f 77 69 6e 64 6f 77 2f 69 |Buttons/window/i| 00001be0 63 6f 6e 0d 07 76 0d c8 8e 20 77 69 6e 25 20 ca |con..v... win% .| 00001bf0 0d 07 80 1e 20 c9 20 2d 32 20 3a 20 f4 20 43 6c |.... . -2 : . Cl| 00001c00 69 63 6b 20 6f 6e 20 69 63 6f 6e 62 61 72 0d 07 |ick on iconbar..| 00001c10 8a 5b 20 20 e7 69 63 6f 25 3c 3e 49 63 6f 42 61 |.[ .ico%<>IcoBa| 00001c20 72 25 20 8b 20 e7 28 62 75 74 25 80 37 29 3d 32 |r% . .(but%.7)=2| 00001c30 20 8c 20 f2 6d 61 69 6e 5f 6d 65 6e 75 20 8b 20 | . .main_menu . | 00001c40 e7 28 62 75 74 25 80 37 29 20 8c 20 f2 6f 70 65 |.(but%.7) . .ope| 00001c50 6e 5f 77 69 6e 64 6f 77 28 77 69 6e 5f 66 69 6c |n_window(win_fil| 00001c60 65 69 6e 66 6f 25 2c 33 29 0d 07 94 2e 20 c9 20 |einfo%,3).... . | 00001c70 77 69 6e 5f 66 69 6c 65 25 20 3a 20 f4 20 43 6c |win_file% : . Cl| 00001c80 69 63 6b 20 6f 6e 20 73 61 76 65 20 66 69 6c 65 |ick on save file| 00001c90 20 77 69 6e 64 6f 77 0d 07 9e 17 20 20 e7 69 63 | window.... .ic| 00001ca0 6f 25 3d 49 63 6f 46 74 79 70 65 25 20 8c 0d 07 |o%=IcoFtype% ...| 00001cb0 a8 16 20 20 20 c8 8e 20 62 75 74 25 20 80 20 26 |.. .. but% . &| 00001cc0 37 46 20 ca 0d 07 b2 39 20 20 20 20 c9 20 31 36 |7F ....9 . 16| 00001cd0 2c 36 34 20 3a 20 f4 20 44 72 61 67 2c 63 61 6c |,64 : . Drag,cal| 00001ce0 63 75 6c 61 74 65 20 64 72 61 67 20 62 6f 78 20 |culate drag box | 00001cf0 61 6e 64 20 63 72 65 61 74 65 20 69 74 0d 07 bc |and create it...| 00001d00 7a 20 20 20 20 20 53 63 72 57 25 3d a4 6d 6f 64 |z ScrW%=.mod| 00001d10 65 5f 76 61 72 28 eb 2c 31 31 29 3c 3c a4 6d 6f |e_var(.,11)<<.mo| 00001d20 64 65 5f 76 61 72 28 eb 2c 34 29 3a 53 63 72 48 |de_var(.,4):ScrH| 00001d30 25 3d a4 6d 6f 64 65 5f 76 61 72 28 eb 2c 31 32 |%=.mode_var(.,12| 00001d40 29 3c 3c a4 6d 6f 64 65 5f 76 61 72 28 eb 2c 35 |)<<.mode_var(.,5| 00001d50 29 3a f4 20 53 63 72 65 65 6e 20 77 69 64 74 68 |):. Screen width| 00001d60 20 61 6e 64 20 68 65 69 67 68 74 20 69 6e 20 4f | and height in O| 00001d70 53 2d 75 6e 69 74 73 0d 07 c6 a7 20 20 20 20 20 |S-units.... | 00001d80 62 3d 42 6c 6f 63 6b 3a 21 62 3d 77 69 6e 25 3a |b=Block:!b=win%:| 00001d90 c8 99 20 57 47 65 74 57 53 25 2c 2c 62 3a 78 25 |.. WGetWS%,,b:x%| 00001da0 3d 62 21 34 3a 79 25 3d 62 21 38 3a 62 21 34 3d |=b!4:y%=b!8:b!4=| 00001db0 69 63 6f 25 3a c8 99 20 57 47 65 74 49 53 25 2c |ico%:.. WGetIS%,| 00001dc0 2c 62 3a 21 62 3d 77 69 6e 25 3a 62 21 34 3d 35 |,b:!b=win%:b!4=5| 00001dd0 3a 62 21 38 2b 3d 78 25 3a 62 21 31 32 2b 3d 79 |:b!8+=x%:b!12+=y| 00001de0 25 3a 62 21 31 36 3d 62 21 38 2b 36 38 3a 62 21 |%:b!16=b!8+68:b!| 00001df0 32 30 3d 62 21 31 32 2b 36 38 3a 62 21 32 34 3d |20=b!12+68:b!24=| 00001e00 30 3a 62 21 32 38 3d 30 3a 62 21 33 32 3d 53 63 |0:b!28=0:b!32=Sc| 00001e10 72 57 25 3a 62 21 33 36 3d 53 63 72 48 25 0d 07 |rW%:b!36=ScrH%..| 00001e20 d0 2c 20 20 20 20 20 c8 99 20 57 44 72 61 67 42 |., .. WDragB| 00001e30 25 2c 2c 42 6c 6f 63 6b 3a f4 20 43 72 65 61 74 |%,,Block:. Creat| 00001e40 65 20 64 72 61 67 20 62 6f 78 0d 07 da 08 20 20 |e drag box.... | 00001e50 20 cb 0d 07 e4 07 20 20 cd 0d 07 ee 05 cb 0d 07 | ..... ........| 00001e60 f8 05 e1 0d 08 02 04 0d 08 0c 0e dd f2 64 72 61 |.............dra| 00001e70 67 64 72 6f 70 0d 08 16 2c c8 99 20 57 47 65 74 |gdrop...,.. WGet| 00001e80 50 49 25 2c 2c 42 6c 6f 63 6b 3a f4 20 47 65 74 |PI%,,Block:. Get| 00001e90 20 70 6f 69 6e 74 65 72 20 70 6f 73 69 74 69 6f | pointer positio| 00001ea0 6e 0d 08 20 47 64 72 6f 70 77 69 6e 25 3d 42 6c |n.. Gdropwin%=Bl| 00001eb0 6f 63 6b 21 31 32 3a 64 72 6f 70 69 63 6f 25 3d |ock!12:dropico%=| 00001ec0 42 6c 6f 63 6b 21 31 36 3a f4 20 57 69 6e 64 6f |Block!16:. Windo| 00001ed0 77 2f 69 63 6f 6e 20 77 68 65 72 65 20 62 6f 78 |w/icon where box| 00001ee0 20 64 72 6f 70 70 65 64 0d 08 2a 2d 66 69 6c 65 | dropped..*-file| 00001ef0 6e 61 6d 65 24 3d a4 64 69 63 28 44 53 66 6e 25 |name$=.dic(DSfn%| 00001f00 29 3a f4 20 46 69 6c 65 6e 61 6d 65 20 66 6f 72 |):. Filename for| 00001f10 20 73 61 76 65 0d 08 34 7a 62 3d 42 6c 6f 63 6b | save..4zb=Block| 00001f20 3a 62 21 32 30 3d 62 21 31 32 3a 62 21 32 34 3d |:b!20=b!12:b!24=| 00001f30 62 21 31 36 3a 62 21 32 38 3d 62 21 30 3a 62 21 |b!16:b!28=b!0:b!| 00001f40 33 32 3d 62 21 34 3a 62 21 31 32 3d 30 3a 62 21 |32=b!4:b!12=0:b!| 00001f50 31 36 3d 31 3a 62 21 33 36 3d 30 3a 62 21 34 30 |16=1:b!36=0:b!40| 00001f60 3d 30 3a 24 28 62 2b 34 34 29 3d 66 69 6c 65 6e |=0:$(b+44)=filen| 00001f70 61 6d 65 24 2b bd 30 3a 21 62 3d 28 34 34 2b a9 |ame$+.0:!b=(44+.| 00001f80 66 69 6c 65 6e 61 6d 65 24 2b 34 29 80 ac 33 0d |filename$+4)..3.| 00001f90 08 3e 3b c8 99 20 57 53 65 6e 64 4d 73 67 25 2c |.>;.. WSendMsg%,| 00001fa0 31 37 2c 42 6c 6f 63 6b 2c 64 72 6f 70 77 69 6e |17,Block,dropwin| 00001fb0 25 2c 64 72 6f 70 69 63 6f 25 3a f4 20 53 65 6e |%,dropico%:. Sen| 00001fc0 64 20 44 61 74 61 53 61 76 65 0d 08 48 36 44 61 |d DataSave..H6Da| 00001fd0 74 61 53 61 76 65 52 65 66 25 3d 42 6c 6f 63 6b |taSaveRef%=Block| 00001fe0 21 38 3a f4 20 52 65 6d 65 6d 62 65 72 20 6d 79 |!8:. Remember my| 00001ff0 72 65 66 20 66 6f 72 20 44 61 74 61 53 61 76 65 |ref for DataSave| 00002000 0d 08 52 35 f2 63 6c 6f 73 65 5f 77 69 6e 64 6f |..R5.close_windo| 00002010 77 28 77 69 6e 5f 66 69 6c 65 25 29 3a f4 20 43 |w(win_file%):. C| 00002020 6c 6f 73 65 20 73 61 76 65 20 66 69 6c 65 20 77 |lose save file w| 00002030 69 6e 64 6f 77 0d 08 5c 05 e1 0d 08 66 04 0d 08 |indow..\....f...| 00002040 70 27 dd f2 61 72 63 68 69 76 65 28 49 6e 44 69 |p'..archive(InDi| 00002050 72 24 2c 4f 75 74 46 69 6c 65 24 2c f8 20 65 72 |r$,OutFile$,. er| 00002060 72 6f 72 24 29 0d 08 7a 18 f4 20 41 72 63 68 69 |ror$)..z.. Archi| 00002070 76 65 73 20 64 69 72 65 63 74 6f 72 79 0d 08 84 |ves directory...| 00002080 37 f4 20 52 65 74 75 72 6e 73 20 65 72 72 6f 72 |7. Returns error| 00002090 20 69 6e 20 65 72 72 6f 72 24 20 69 66 20 65 72 | in error$ if er| 000020a0 72 6f 72 20 6f 63 63 75 72 65 64 2c 20 65 6c 73 |ror occured, els| 000020b0 65 20 22 22 0d 08 8e 07 ea 20 85 0d 08 98 26 ee |e ""..... ....&.| 000020c0 20 85 20 ea 20 65 72 72 6f 72 24 3d f6 24 2b 22 | . . error$=.$+"| 000020d0 20 28 63 6f 64 65 20 22 2b c3 9e 2b 22 29 22 3a | (code "+..+")":| 000020e0 e1 0d 08 a2 2b e7 49 6e 44 69 72 24 3d 4f 75 74 |....+.InDir$=Out| 000020f0 46 69 6c 65 24 20 8c 20 65 72 72 6f 72 24 3d 22 |File$ . error$="| 00002100 21 53 41 4d 45 46 49 4c 45 22 3a e1 0d 08 ac 1f |!SAMEFILE":.....| 00002110 65 72 72 6f 72 24 3d 22 22 3a f4 20 4e 6f 20 65 |error$="":. No e| 00002120 72 72 6f 72 73 20 28 79 65 74 29 0d 08 b6 1e 53 |rrors (yet)....S| 00002130 74 6f 72 65 3d a4 6f 73 74 6f 3a f4 20 53 74 6f |tore=.osto:. Sto| 00002140 72 65 20 77 68 61 74 20 3f 0d 08 c0 4a f2 66 69 |re what ?...J.fi| 00002150 6c 65 69 6e 66 6f 28 22 41 72 63 68 69 76 69 6e |leinfo("Archivin| 00002160 67 22 2c 49 6e 44 69 72 24 2c 22 2d 22 2c 22 22 |g",InDir$,"-",""| 00002170 2c 22 30 22 2c 22 30 25 22 2c 22 30 25 22 2c c3 |,"0","0%","0%",.| 00002180 a4 6f 62 69 74 73 2c 22 30 22 2c 22 30 22 2c 22 |.obits,"0","0","| 00002190 30 22 29 0d 08 ca 46 c8 99 20 22 4f 53 5f 46 69 |0")...F.. "OS_Fi| 000021a0 6c 65 22 2c 35 2c 49 6e 44 69 72 24 20 b8 20 74 |le",5,InDir$ . t| 000021b0 79 70 65 25 2c 2c 6c 6f 61 64 25 2c 65 78 65 63 |ype%,,load%,exec| 000021c0 25 2c 6c 65 6e 25 2c 61 74 74 72 25 3a f4 20 43 |%,len%,attr%:. C| 000021d0 68 65 63 6b 20 72 6f 6f 74 0d 08 d4 3a e7 74 79 |heck root...:.ty| 000021e0 70 65 25 3c 3e 32 20 8c 20 65 72 72 6f 72 24 3d |pe%<>2 . error$=| 000021f0 22 27 22 2b 49 6e 44 69 72 24 2b 22 27 20 69 73 |"'"+InDir$+"' is| 00002200 20 6e 6f 74 20 61 20 64 69 72 65 63 74 6f 72 79 | not a directory| 00002210 22 3a e1 0d 08 de 48 69 63 6f 75 6e 74 25 3d 30 |":....Hicount%=0| 00002220 3a 6c 63 6f 75 6e 74 25 3d 30 3a f2 64 69 72 5f |:lcount%=0:.dir_| 00002230 63 6f 75 6e 74 28 49 6e 44 69 72 24 29 3a f4 20 |count(InDir$):. | 00002240 47 65 74 20 74 6f 74 61 6c 20 69 74 65 6d 73 2f |Get total items/| 00002250 66 69 6c 65 20 6c 65 6e 67 74 68 0d 08 e8 36 f2 |file length...6.| 00002260 64 69 63 28 44 46 63 6c 25 2c c3 6c 63 6f 75 6e |dic(DFcl%,.lcoun| 00002270 74 25 29 3a f4 20 53 68 6f 77 20 74 6f 74 61 6c |t%):. Show total| 00002280 20 66 69 6c 65 20 64 61 74 61 20 6c 65 6e 67 74 | file data lengt| 00002290 68 0d 08 f2 20 4f 75 74 3d ae 4f 75 74 46 69 6c |h... Out=.OutFil| 000022a0 65 24 3a f4 20 4f 70 65 6e 20 61 72 63 68 69 76 |e$:. Open archiv| 000022b0 65 0d 08 fc 3a c8 99 20 22 46 69 6c 65 42 75 66 |e...:.. "FileBuf| 000022c0 66 65 72 5f 4f 70 65 6e 22 2c 4f 75 74 2c 4f 75 |fer_Open",Out,Ou| 000022d0 74 42 75 66 25 2c 4f 75 74 42 75 66 53 69 7a 65 |tBuf%,OutBufSize| 000022e0 25 2c 31 20 b8 20 4f 62 6e 72 25 0d 09 06 21 f2 |%,1 . Obnr%...!.| 000022f0 6f 73 28 22 50 41 43 4b 22 29 3a f4 20 57 72 69 |os("PACK"):. Wri| 00002300 74 65 20 73 69 67 6e 61 74 75 72 65 0d 09 10 29 |te signature...)| 00002310 f2 6f 77 28 a4 6f 62 69 74 73 2d 31 32 29 3a f4 |.ow(.obits-12):.| 00002320 20 57 72 69 74 65 20 61 72 63 68 69 76 65 20 66 | Write archive f| 00002330 6f 72 6d 61 74 0d 09 1a 2a f2 6f 73 28 49 6e 44 |ormat...*.os(InD| 00002340 69 72 24 29 3a f4 20 57 72 69 74 65 20 6f 72 69 |ir$):. Write ori| 00002350 67 69 6e 61 6c 20 66 75 6c 6c 20 70 61 74 68 0d |ginal full path.| 00002360 09 24 2d 6f 62 6a 73 25 3d a4 64 69 72 5f 65 6e |.$-objs%=.dir_en| 00002370 74 73 28 49 6e 44 69 72 24 29 3a f4 20 45 6e 74 |ts(InDir$):. Ent| 00002380 72 69 65 73 20 69 6e 20 72 6f 6f 74 0d 09 2e 36 |ries in root...6| 00002390 f2 6f 77 28 6c 6f 61 64 25 29 3a f2 6f 77 28 65 |.ow(load%):.ow(e| 000023a0 78 65 63 25 29 3a f2 6f 77 28 6f 62 6a 73 25 29 |xec%):.ow(objs%)| 000023b0 3a f2 6f 77 28 61 74 74 72 25 29 3a f4 20 49 6e |:.ow(attr%):. In| 000023c0 66 6f 0d 09 38 1a 64 69 72 70 61 74 68 24 3d 22 |fo..8.dirpath$="| 000023d0 22 3a f4 20 50 61 74 68 20 79 65 74 0d 09 42 3b |":. Path yet..B;| 000023e0 44 69 72 25 28 30 2c 30 29 3d 6f 62 6a 73 25 3a |Dir%(0,0)=objs%:| 000023f0 44 69 72 25 28 30 2c 31 29 3d 30 3a 44 69 72 25 |Dir%(0,1)=0:Dir%| 00002400 28 30 2c 32 29 3d 30 3a f4 20 52 6f 6f 74 20 64 |(0,2)=0:. Root d| 00002410 69 72 20 69 6e 66 6f 0d 09 4c 27 64 65 70 74 68 |ir info..L'depth| 00002420 25 3d 30 3a f4 20 49 6e 69 74 20 64 69 72 20 72 |%=0:. Init dir r| 00002430 65 63 75 72 73 65 20 63 6f 75 6e 74 65 72 0d 09 |ecurse counter..| 00002440 56 36 69 6e 66 25 3d 30 3a 69 6e 64 25 3d 30 3a |V6inf%=0:ind%=0:| 00002450 69 6e 6c 25 3d 30 3a 69 6e 61 25 3d 30 3a 69 6e |inl%=0:ina%=0:in| 00002460 74 25 3d 31 3a f4 20 49 6e 69 74 20 63 6f 75 6e |t%=1:. Init coun| 00002470 74 65 72 73 0d 09 60 14 c8 95 20 69 6e 74 25 3c |ters..`... int%<| 00002480 3d 69 63 6f 75 6e 74 25 0d 09 6a 64 c8 95 20 44 |=icount%..jd.. D| 00002490 69 72 25 28 64 65 70 74 68 25 2c 30 29 3c 3d 30 |ir%(depth%,0)<=0| 000024a0 3a 64 69 72 70 61 74 68 24 3d c0 64 69 72 70 61 |:dirpath$=.dirpa| 000024b0 74 68 24 2c 44 69 72 25 28 64 65 70 74 68 25 2c |th$,Dir%(depth%,| 000024c0 31 29 29 3a 64 65 70 74 68 25 2d 3d 31 3a ce 3a |1)):depth%-=1:.:| 000024d0 f4 20 41 73 63 65 6e 64 20 74 6f 20 6e 6f 6e 2d |. Ascend to non-| 000024e0 65 6d 70 74 79 20 70 61 72 65 6e 74 0d 09 74 38 |empty parent..t8| 000024f0 44 69 72 25 28 64 65 70 74 68 25 2c 30 29 2d 3d |Dir%(depth%,0)-=| 00002500 31 3a f4 20 44 65 63 72 65 6d 65 6e 74 20 65 6e |1:. Decrement en| 00002510 74 72 69 65 73 20 69 6e 20 63 75 72 72 65 6e 74 |tries in current| 00002520 20 64 69 72 0d 09 7e 6b c8 99 20 22 4f 53 5f 47 | dir..~k.. "OS_G| 00002530 42 50 42 22 2c 31 30 2c c0 49 6e 44 69 72 24 2b |BPB",10,.InDir$+| 00002540 22 2e 22 2b 64 69 72 70 61 74 68 24 29 2c 46 64 |"."+dirpath$),Fd| 00002550 61 74 61 25 2c 31 2c 44 69 72 25 28 64 65 70 74 |ata%,1,Dir%(dept| 00002560 68 25 2c 32 29 2c 32 35 36 2c 22 2a 22 20 b8 20 |h%,2),256,"*" . | 00002570 2c 2c 2c 2c 44 69 72 25 28 64 65 70 74 68 25 2c |,,,,Dir%(depth%,| 00002580 32 29 3a f4 20 52 65 61 64 20 65 6e 74 72 79 0d |2):. Read entry.| 00002590 09 88 80 70 25 3d 46 64 61 74 61 25 3a 6c 6f 61 |...p%=Fdata%:loa| 000025a0 64 25 3d 21 70 25 3a 65 78 65 63 25 3d 70 25 21 |d%=!p%:exec%=p%!| 000025b0 34 3a 6c 65 6e 25 3d 70 25 21 38 3a 61 74 74 72 |4:len%=p%!8:attr| 000025c0 25 3d 70 25 21 31 32 3a 69 6e 66 6f 25 3d 70 25 |%=p%!12:info%=p%| 000025d0 21 31 36 3a 70 25 2b 3d 32 30 3a 6e 61 6d 65 24 |!16:p%+=20:name$| 000025e0 3d 22 22 3a c8 95 3f 70 25 3c 3e 30 3a 6e 61 6d |="":..?p%<>0:nam| 000025f0 65 24 2b 3d bd 3f 70 25 3a 70 25 2b 3d 31 3a ce |e$+=.?p%:p%+=1:.| 00002600 3a f4 20 45 78 74 72 61 63 74 20 69 6e 66 6f 0d |:. Extract info.| 00002610 09 92 30 66 70 61 74 68 24 3d 49 6e 44 69 72 24 |..0fpath$=InDir$| 00002620 2b 22 2e 22 2b 64 69 72 70 61 74 68 24 2b 6e 61 |+"."+dirpath$+na| 00002630 6d 65 24 3a f4 20 46 75 6c 6c 20 70 61 74 68 0d |me$:. Full path.| 00002640 09 9c 42 64 69 72 3d 28 69 6e 66 6f 25 3c 3e 31 |..Bdir=(info%<>1| 00002650 29 3a e7 64 69 72 20 8c 20 63 6f 64 65 25 3d 31 |):.dir . code%=1| 00002660 3a 6c 65 6e 25 3d a4 64 69 72 5f 65 6e 74 73 28 |:len%=.dir_ents(| 00002670 66 70 61 74 68 24 29 20 8b 20 63 6f 64 65 25 3d |fpath$) . code%=| 00002680 30 0d 09 a6 59 f2 6f 73 28 6e 61 6d 65 24 29 3a |0...Y.os(name$):| 00002690 f2 6f 77 28 6c 6f 61 64 25 29 3a f2 6f 77 28 65 |.ow(load%):.ow(e| 000026a0 78 65 63 25 29 3a f2 6f 77 28 6c 65 6e 25 29 3a |xec%):.ow(len%):| 000026b0 f2 6f 77 28 61 74 74 72 25 29 3a f2 6f 77 28 63 |.ow(attr%):.ow(c| 000026c0 6f 64 65 25 29 3a f4 20 4f 75 74 70 75 74 20 69 |ode%):. Output i| 000026d0 74 65 6d 27 73 20 69 6e 66 6f 0d 09 b0 30 f2 64 |tem's info...0.d| 000026e0 69 63 28 44 46 66 6e 25 2c 64 69 72 70 61 74 68 |ic(DFfn%,dirpath| 000026f0 24 2b 6e 61 6d 65 24 29 3a f4 20 53 68 6f 77 20 |$+name$):. Show | 00002700 6c 6f 63 61 6c 20 70 61 74 68 0d 09 ba 0a e7 64 |local path.....d| 00002710 69 72 20 8c 0d 09 c4 0c 20 69 6e 64 25 2b 3d 31 |ir ..... ind%+=1| 00002720 0d 09 ce 20 20 f2 64 69 63 28 44 46 6c 65 6e 25 |... .dic(DFlen%| 00002730 2c c3 6c 65 6e 25 2b 22 20 66 69 6c 65 73 22 29 |,.len%+" files")| 00002740 0d 09 d8 60 20 64 65 70 74 68 25 2b 3d 31 3a 44 |...` depth%+=1:D| 00002750 69 72 25 28 64 65 70 74 68 25 2c 30 29 3d 6c 65 |ir%(depth%,0)=le| 00002760 6e 25 3a 44 69 72 25 28 64 65 70 74 68 25 2c 31 |n%:Dir%(depth%,1| 00002770 29 3d a9 64 69 72 70 61 74 68 24 3a 44 69 72 25 |)=.dirpath$:Dir%| 00002780 28 64 65 70 74 68 25 2c 32 29 3d 30 3a 64 69 72 |(depth%,2)=0:dir| 00002790 70 61 74 68 24 2b 3d 6e 61 6d 65 24 2b 22 2e 22 |path$+=name$+"."| 000027a0 0d 09 e2 0c 20 63 6c 65 6e 25 3d 30 0d 09 ec 0d |.... clen%=0....| 000027b0 cc 20 69 6e 66 25 2b 3d 31 0d 09 f6 29 20 f2 73 |. inf%+=1...) .s| 000027c0 6c 69 64 65 72 28 32 2c 69 6e 6c 25 2f 6c 63 6f |lider(2,inl%/lco| 000027d0 75 6e 74 25 2c 6c 65 6e 25 2f 6c 63 6f 75 6e 74 |unt%,len%/lcount| 000027e0 25 29 0d 0a 00 17 20 f2 64 69 63 28 44 46 6c 65 |%).... .dic(DFle| 000027f0 6e 25 2c c3 6c 65 6e 25 29 0d 0a 0a 2c 20 63 70 |n%,.len%)..., cp| 00002800 74 72 25 3d a4 6f 70 74 72 3a e7 53 74 6f 72 65 |tr%=.optr:.Store| 00002810 3d 32 20 8c 20 f2 6f 77 28 2d 32 29 20 8b 20 f2 |=2 . .ow(-2) . .| 00002820 6f 77 28 30 29 0d 0a 14 1d 20 e7 28 6c 65 6e 25 |ow(0).... .(len%| 00002830 3e 30 29 20 80 20 28 53 74 6f 72 65 3c 3e 32 29 |>0) . (Store<>2)| 00002840 20 8c 0d 0a 1e 44 20 20 49 6e 3d 8e 66 70 61 74 | ....D In=.fpat| 00002850 68 24 3a c8 99 20 22 46 69 6c 65 42 75 66 66 65 |h$:.. "FileBuffe| 00002860 72 5f 4f 70 65 6e 22 2c 49 6e 2c 49 6e 42 75 66 |r_Open",In,InBuf| 00002870 25 2c 49 6e 42 75 66 53 69 7a 65 25 2c 30 20 b8 |%,InBufSize%,0 .| 00002880 20 49 62 6e 72 25 0d 0a 28 48 20 20 c8 99 20 22 | Ibnr%..(H .. "| 00002890 4c 5a 57 42 5f 43 6f 6d 70 72 65 73 73 22 2c 30 |LZWB_Compress",0| 000028a0 2c 49 62 6e 72 25 2c 4f 62 6e 72 25 2c 2c 2c a4 |,Ibnr%,Obnr%,,,.| 000028b0 6f 62 69 74 73 2c 42 75 66 49 25 20 b8 20 2c 2c |obits,BufI% . ,,| 000028c0 2c 2c 2c 63 6c 65 6e 25 3a f4 20 41 64 64 0d 0a |,,,clen%:. Add..| 000028d0 32 26 20 20 c8 99 20 22 46 69 6c 65 42 75 66 66 |2& .. "FileBuff| 000028e0 65 72 5f 43 6c 6f 73 65 22 2c 49 62 6e 72 25 3a |er_Close",Ibnr%:| 000028f0 d9 23 49 6e 0d 0a 3c 1e 20 20 65 70 74 72 25 3d |.#In..<. eptr%=| 00002900 a4 6f 70 74 72 3a f2 6f 70 74 72 28 63 70 74 72 |.optr:.optr(cptr| 00002910 25 29 0d 0a 46 50 20 20 e7 63 6c 65 6e 25 3e 3d |%)..FP .clen%>=| 00002920 6c 65 6e 25 20 8c 20 63 6c 65 6e 25 3d 6c 65 6e |len% . clen%=len| 00002930 25 3a f2 6f 77 28 2d 31 29 3a f2 73 74 6f 72 65 |%:.ow(-1):.store| 00002940 28 66 70 61 74 68 24 29 20 8b 20 f2 6f 77 28 63 |(fpath$) . .ow(c| 00002950 6c 65 6e 25 29 3a f2 6f 70 74 72 28 65 70 74 72 |len%):.optr(eptr| 00002960 25 29 0d 0a 50 11 20 cc 20 63 6c 65 6e 25 3d 6c |%)..P. . clen%=l| 00002970 65 6e 25 0d 0a 5a 06 20 cd 0d 0a 64 1b 20 69 6e |en%..Z. ...d. in| 00002980 6c 25 2b 3d 6c 65 6e 25 3a 69 6e 61 25 2b 3d 63 |l%+=len%:ina%+=c| 00002990 6c 65 6e 25 0d 0a 6e 05 cd 0d 0a 78 0b 69 6e 74 |len%..n....x.int| 000029a0 25 2b 3d 31 0d 0a 82 31 c8 99 20 22 48 6f 75 72 |%+=1...1.. "Hour| 000029b0 67 6c 61 73 73 5f 50 65 72 63 65 6e 74 61 67 65 |glass_Percentage| 000029c0 22 2c a4 70 65 72 63 28 69 6e 6c 25 2c 6c 63 6f |",.perc(inl%,lco| 000029d0 75 6e 74 25 29 0d 0a 8c 2b f2 64 69 63 28 44 46 |unt%)...+.dic(DF| 000029e0 63 6f 6d 70 66 25 2c c3 28 a4 70 65 72 63 28 63 |compf%,.(.perc(c| 000029f0 6c 65 6e 25 2c 6c 65 6e 25 29 29 2b 22 25 22 29 |len%,len%))+"%")| 00002a00 0d 0a 96 2a f2 64 69 63 28 44 46 63 6f 6d 70 74 |...*.dic(DFcompt| 00002a10 25 2c c3 28 a4 70 65 72 63 28 69 6e 61 25 2c 69 |%,.(.perc(ina%,i| 00002a20 6e 6c 25 29 29 2b 22 25 22 29 0d 0a a0 15 f2 64 |nl%))+"%").....d| 00002a30 69 63 28 44 46 63 61 25 2c c3 69 6e 61 25 29 0d |ic(DFca%,.ina%).| 00002a40 0a aa 18 f2 64 69 63 28 44 46 69 74 65 6d 73 25 |....dic(DFitems%| 00002a50 2c c3 69 6e 74 25 29 0d 0a b4 37 f2 73 6c 69 64 |,.int%)...7.slid| 00002a60 65 72 28 31 2c 69 6e 61 25 2f 6c 63 6f 75 6e 74 |er(1,ina%/lcount| 00002a70 25 2c 30 29 3a f2 73 6c 69 64 65 72 28 32 2c 69 |%,0):.slider(2,i| 00002a80 6e 6c 25 2f 6c 63 6f 75 6e 74 25 2c 30 29 0d 0a |nl%/lcount%,0)..| 00002a90 be 05 ce 0d 0a c8 23 f2 6f 73 28 22 22 29 3a f4 |......#.os(""):.| 00002aa0 20 45 6e 64 20 6f 66 20 61 72 63 68 69 76 65 20 | End of archive | 00002ab0 6d 61 72 6b 65 72 0d 0a d2 23 65 6f 66 70 74 72 |marker...#eofptr| 00002ac0 25 3d a4 6f 70 74 72 3a f4 20 53 69 7a 65 20 6f |%=.optr:. Size o| 00002ad0 66 20 61 72 63 68 69 76 65 0d 0a dc 2e c8 99 20 |f archive...... | 00002ae0 22 46 69 6c 65 42 75 66 66 65 72 5f 43 6c 6f 73 |"FileBuffer_Clos| 00002af0 65 22 2c 4f 62 6e 72 25 3a f4 20 43 6c 6f 73 65 |e",Obnr%:. Close| 00002b00 20 62 75 66 66 65 72 0d 0a e6 32 c8 99 20 22 4f | buffer...2.. "O| 00002b10 53 5f 41 72 67 73 22 2c 33 2c 4f 75 74 2c 65 6f |S_Args",3,Out,eo| 00002b20 66 70 74 72 25 3a f4 20 45 6e 73 75 72 65 20 72 |fptr%:. Ensure r| 00002b30 69 67 68 74 20 73 69 7a 65 0d 0a f0 19 d9 23 4f |ight size.....#O| 00002b40 75 74 3a f4 20 43 6c 6f 73 65 20 61 72 63 68 69 |ut:. Close archi| 00002b50 76 65 0d 0a fa 38 c8 99 20 22 4f 53 5f 46 69 6c |ve...8.. "OS_Fil| 00002b60 65 22 2c 31 38 2c 4f 75 74 46 69 6c 65 24 2c 26 |e",18,OutFile$,&| 00002b70 36 38 45 3a f4 20 53 65 74 20 63 6f 72 72 65 63 |68E:. Set correc| 00002b80 74 20 66 69 6c 65 74 79 70 65 0d 0b 04 05 e1 0d |t filetype......| 00002b90 0b 0e 04 0d 0b 18 0c dd f2 6f 77 28 76 25 29 0d |.........ow(v%).| 00002ba0 0b 22 2f 21 44 75 6d 25 3d 76 25 3a c8 99 20 22 |."/!Dum%=v%:.. "| 00002bb0 46 69 6c 65 42 75 66 66 65 72 5f 57 72 69 74 65 |FileBuffer_Write| 00002bc0 22 2c 4f 62 6e 72 25 2c 44 75 6d 25 2c 34 0d 0b |",Obnr%,Dum%,4..| 00002bd0 2c 05 e1 0d 0b 36 04 0d 0b 40 0c dd f2 6f 73 28 |,....6...@...os(| 00002be0 76 24 29 0d 0b 4a 36 24 44 75 6d 25 3d 76 24 2b |v$)..J6$Dum%=v$+| 00002bf0 bd 30 3a c8 99 20 22 46 69 6c 65 42 75 66 66 65 |.0:.. "FileBuffe| 00002c00 72 5f 57 72 69 74 65 22 2c 4f 62 6e 72 25 2c 44 |r_Write",Obnr%,D| 00002c10 75 6d 25 2c a9 76 24 2b 31 0d 0b 54 05 e1 0d 0b |um%,.v$+1..T....| 00002c20 5e 04 0d 0b 68 0a dd a4 6f 70 74 72 0d 0b 72 0a |^...h...optr..r.| 00002c30 ea 20 70 74 72 25 0d 0b 7c 29 c8 99 20 22 46 69 |. ptr%..|).. "Fi| 00002c40 6c 65 42 75 66 66 65 72 5f 52 65 61 64 50 54 52 |leBuffer_ReadPTR| 00002c50 22 2c 4f 62 6e 72 25 20 b8 20 2c 70 74 72 25 0d |",Obnr% . ,ptr%.| 00002c60 0b 86 09 3d 70 74 72 25 0d 0b 90 04 0d 0b 9a 10 |...=ptr%........| 00002c70 dd f2 6f 70 74 72 28 70 74 72 25 29 0d 0b a4 27 |..optr(ptr%)...'| 00002c80 c8 99 20 22 46 69 6c 65 42 75 66 66 65 72 5f 57 |.. "FileBuffer_W| 00002c90 72 69 74 65 50 54 52 22 2c 4f 62 6e 72 25 2c 70 |ritePTR",Obnr%,p| 00002ca0 74 72 25 0d 0b ae 05 e1 0d 0b b8 04 0d 0b c2 13 |tr%.............| 00002cb0 dd f2 64 69 72 5f 63 6f 75 6e 74 28 64 24 29 0d |..dir_count(d$).| 00002cc0 0b cc 2d f4 20 43 6f 75 6e 74 73 20 74 6f 74 61 |..-. Counts tota| 00002cd0 6c 20 66 69 6c 65 20 6c 65 6e 67 74 68 20 69 6e |l file length in| 00002ce0 20 61 20 64 69 72 65 63 74 6f 72 79 0d 0b d6 0d | a directory....| 00002cf0 ea 20 6f 66 66 25 2c 6e 24 0d 0b e0 0a 6f 66 66 |. off%,n$....off| 00002d00 25 3d 30 0d 0b ea 3b f5 20 c8 99 20 22 4f 53 5f |%=0...;. .. "OS_| 00002d10 47 42 50 42 22 2c 31 30 2c 64 24 2c 46 64 61 74 |GBPB",10,d$,Fdat| 00002d20 61 25 2c 31 2c 6f 66 66 25 2c 32 35 36 2c 22 2a |a%,1,off%,256,"*| 00002d30 22 20 b8 20 2c 2c 70 25 2c 2c 6f 66 66 25 0d 0b |" . ,,p%,,off%..| 00002d40 f4 8d e7 6f 66 66 25 3d 2d 31 20 8b 20 69 63 6f |...off%=-1 . ico| 00002d50 75 6e 74 25 2b 3d 31 3a e7 28 70 25 21 31 36 29 |unt%+=1:.(p%!16)| 00002d60 3d 32 20 8c 20 70 25 2b 3d 32 30 3a 6e 24 3d 22 |=2 . p%+=20:n$="| 00002d70 22 3a c8 95 3f 70 25 3c 3e 30 3a 6e 24 2b 3d bd |":..?p%<>0:n$+=.| 00002d80 3f 70 25 3a 70 25 2b 3d 31 3a ce 3a f2 64 69 72 |?p%:p%+=1:.:.dir| 00002d90 5f 63 6f 75 6e 74 28 64 24 2b 22 2e 22 2b 6e 24 |_count(d$+"."+n$| 00002da0 29 20 8b 20 6c 63 6f 75 6e 74 25 2b 3d 70 25 21 |) . lcount%+=p%!| 00002db0 38 3a 70 25 3d 70 25 2b 32 30 3a c8 95 3f 70 25 |8:p%=p%+20:..?p%| 00002dc0 3c 3e 30 3a 70 25 2b 3d 31 3a ce 0d 0b fe 0d fd |<>0:p%+=1:......| 00002dd0 20 6f 66 66 25 3d 2d 31 0d 0c 08 05 e1 0d 0c 12 | off%=-1........| 00002de0 04 0d 0c 1c 14 dd a4 64 69 72 5f 65 6e 74 73 28 |.......dir_ents(| 00002df0 64 69 72 24 29 0d 0c 26 2e f4 20 52 65 74 75 72 |dir$)..&.. Retur| 00002e00 6e 73 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 |ns number of ent| 00002e10 72 69 65 73 20 69 6e 20 61 20 64 69 72 65 63 74 |ries in a direct| 00002e20 6f 72 79 0d 0c 30 0d ea 20 6f 66 66 25 2c 69 25 |ory..0.. off%,i%| 00002e30 0d 0c 3a 56 6f 66 66 25 3d 30 3a 69 25 3d 30 3a |..:Voff%=0:i%=0:| 00002e40 f5 20 69 25 2b 3d 31 3a c8 99 20 22 4f 53 5f 47 |. i%+=1:.. "OS_G| 00002e50 42 50 42 22 2c 39 2c 64 69 72 24 2c 46 64 61 74 |BPB",9,dir$,Fdat| 00002e60 61 25 2c 31 2c 6f 66 66 25 2c 32 35 36 2c 22 2a |a%,1,off%,256,"*| 00002e70 22 20 b8 20 2c 2c 2c 2c 6f 66 66 25 3a fd 20 6f |" . ,,,,off%:. o| 00002e80 66 66 25 3d 2d 31 0d 0c 44 09 3d 69 25 2d 31 0d |ff%=-1..D.=i%-1.| 00002e90 0c 4e 04 0d 0c 58 0f dd f2 73 74 6f 72 65 28 66 |.N...X...store(f| 00002ea0 24 29 0d 0c 62 30 f4 20 53 74 6f 72 65 73 20 66 |$)..b0. Stores f| 00002eb0 69 6c 65 20 69 6e 20 61 72 63 68 69 76 65 20 77 |ile in archive w| 00002ec0 69 74 68 6f 75 74 20 63 6f 6d 70 72 65 73 73 69 |ithout compressi| 00002ed0 6f 6e 0d 0c 6c 1a ea 20 49 6e 2c 6c 65 6e 25 2c |on..l.. In,len%,| 00002ee0 6c 65 66 74 25 2c 62 79 74 65 73 25 0d 0c 76 1f |left%,bytes%..v.| 00002ef0 49 6e 3d 8e 66 24 3a 6c 65 6e 25 3d a2 23 49 6e |In=.f$:len%=.#In| 00002f00 3a 6c 65 66 74 25 3d 6c 65 6e 25 0d 0c 80 0e c8 |:left%=len%.....| 00002f10 95 20 6c 65 66 74 25 3e 30 0d 0c 8a 38 e7 6c 65 |. left%>0...8.le| 00002f20 66 74 25 3c 49 6e 42 75 66 53 69 7a 65 25 20 8c |ft%<InBufSize% .| 00002f30 20 62 79 74 65 73 25 3d 6c 65 66 74 25 20 8b 20 | bytes%=left% . | 00002f40 62 79 74 65 73 25 3d 49 6e 42 75 66 53 69 7a 65 |bytes%=InBufSize| 00002f50 25 0d 0c 94 30 c8 99 20 22 4f 53 5f 47 42 50 42 |%...0.. "OS_GBPB| 00002f60 22 2c 34 2c 49 6e 2c 49 6e 42 75 66 25 2c 62 79 |",4,In,InBuf%,by| 00002f70 74 65 73 25 3a f4 20 52 65 61 64 20 63 68 75 6e |tes%:. Read chun| 00002f80 6b 0d 0c 9e 3b c8 99 20 22 46 69 6c 65 42 75 66 |k...;.. "FileBuf| 00002f90 66 65 72 5f 57 72 69 74 65 22 2c 4f 62 6e 72 25 |fer_Write",Obnr%| 00002fa0 2c 49 6e 42 75 66 25 2c 62 79 74 65 73 25 3a f4 |,InBuf%,bytes%:.| 00002fb0 20 57 72 69 74 65 20 63 68 75 6e 6b 0d 0c a8 11 | Write chunk....| 00002fc0 6c 65 66 74 25 2d 3d 62 79 74 65 73 25 0d 0c b2 |left%-=bytes%...| 00002fd0 05 ce 0d 0c bc 08 d9 23 49 6e 0d 0c c6 05 e1 0d |.......#In......| 00002fe0 0c d0 04 0d 0c da 2b dd f2 75 6e 61 72 63 68 69 |......+..unarchi| 00002ff0 76 65 28 49 6e 46 69 6c 65 24 2c f8 20 4f 75 74 |ve(InFile$,. Out| 00003000 44 69 72 24 2c f8 20 65 72 72 6f 72 24 29 0d 0c |Dir$,. error$)..| 00003010 e4 23 f4 20 55 6e 61 72 63 68 69 76 65 73 20 61 |.#. Unarchives a| 00003020 72 63 68 69 76 65 64 20 64 69 72 65 63 74 6f 72 |rchived director| 00003030 79 0d 0c ee 37 f4 20 52 65 74 75 72 6e 73 20 65 |y...7. Returns e| 00003040 72 72 6f 72 20 69 6e 20 65 72 72 6f 72 24 20 69 |rror in error$ i| 00003050 66 20 65 72 72 6f 72 20 6f 63 63 75 72 65 64 2c |f error occured,| 00003060 20 65 6c 73 65 20 22 22 0d 0c f8 07 ea 20 85 0d | else ""..... ..| 00003070 0d 02 26 ee 20 85 20 ea 20 65 72 72 6f 72 24 3d |..&. . . error$=| 00003080 f6 24 2b 22 20 28 63 6f 64 65 20 22 2b c3 9e 2b |.$+" (code "+..+| 00003090 22 29 22 3a e1 0d 0d 0c 1f 65 72 72 6f 72 24 3d |")":.....error$=| 000030a0 22 22 3a f4 20 4e 6f 20 65 72 72 6f 72 73 20 28 |"":. No errors (| 000030b0 79 65 74 29 0d 0d 16 24 52 65 63 72 65 61 74 65 |yet)...$Recreate| 000030c0 3d a4 6f 72 65 63 3a f4 20 52 65 63 72 65 61 74 |=.orec:. Recreat| 000030d0 65 20 77 68 61 74 20 3f 0d 0d 20 23 49 6e 3d 8e |e what ?.. #In=.| 000030e0 28 49 6e 46 69 6c 65 24 29 3a f4 20 4f 70 65 6e |(InFile$):. Open| 000030f0 20 69 6e 70 75 74 20 66 69 6c 65 0d 0d 2a 37 c8 | input file..*7.| 00003100 99 20 22 46 69 6c 65 42 75 66 66 65 72 5f 4f 70 |. "FileBuffer_Op| 00003110 65 6e 22 2c 49 6e 2c 49 6e 42 75 66 25 2c 49 6e |en",In,InBuf%,In| 00003120 42 75 66 53 69 7a 65 25 2c 30 20 b8 20 49 62 6e |BufSize%,0 . Ibn| 00003130 72 25 0d 0d 34 56 73 69 67 24 3d a4 69 73 3a e7 |r%..4Vsig$=.is:.| 00003140 73 69 67 24 3c 3e 22 50 41 43 4b 22 20 8c 20 65 |sig$<>"PACK" . e| 00003150 72 72 6f 72 24 3d 22 54 68 69 73 20 69 73 20 6e |rror$="This is n| 00003160 6f 74 20 73 6f 6d 65 74 68 69 6e 67 20 49 20 63 |ot something I c| 00003170 61 6e 20 72 65 61 64 20 21 22 3a e1 3a f4 20 53 |an read !":.:. S| 00003180 69 67 6e 61 74 75 72 65 0d 0d 3e 7b 66 6f 72 6d |ignature..>{form| 00003190 61 74 25 3d a4 69 77 3a e7 66 6f 72 6d 61 74 25 |at%=.iw:.format%| 000031a0 3c 30 20 84 20 66 6f 72 6d 61 74 25 3e 34 20 8c |<0 . format%>4 .| 000031b0 20 65 72 72 6f 72 24 3d 22 49 20 63 61 6e 6e 6f | error$="I canno| 000031c0 74 20 72 65 61 64 20 66 6f 72 6d 61 74 20 23 22 |t read format #"| 000031d0 2b c3 66 6f 72 6d 61 74 25 2b 22 20 61 72 63 68 |+.format%+" arch| 000031e0 69 76 65 73 20 21 22 29 3a e1 3a f4 20 41 72 63 |ives !"):.:. Arc| 000031f0 68 69 76 65 20 66 6f 72 6d 61 74 20 76 65 72 73 |hive format vers| 00003200 69 6f 6e 0d 0d 48 28 6f 72 69 67 70 61 74 68 24 |ion..H(origpath$| 00003210 3d a4 69 73 3a f4 20 4f 72 69 67 69 6e 61 6c 20 |=.is:. Original | 00003220 68 65 61 64 65 72 20 70 61 74 68 0d 0d 52 20 e7 |header path..R .| 00003230 a4 75 6e 74 6f 3d 32 20 8c 20 4f 75 74 44 69 72 |.unto=2 . OutDir| 00003240 24 3d 6f 72 69 67 70 61 74 68 24 0d 0d 5c 2b e7 |$=origpath$..\+.| 00003250 49 6e 46 69 6c 65 24 3d 4f 75 74 44 69 72 24 20 |InFile$=OutDir$ | 00003260 8c 20 65 72 72 6f 72 24 3d 22 21 53 41 4d 45 46 |. error$="!SAMEF| 00003270 49 4c 45 22 3a e1 0d 0d 66 53 f2 66 69 6c 65 69 |ILE":...fS.filei| 00003280 6e 66 6f 28 22 45 78 74 72 61 63 74 69 6e 67 22 |nfo("Extracting"| 00003290 2c 6f 72 69 67 70 61 74 68 24 2c 4f 75 74 44 69 |,origpath$,OutDi| 000032a0 72 24 2c 22 22 2c 22 30 22 2c 22 30 25 22 2c 22 |r$,"","0","0%","| 000032b0 2d 22 2c c3 4c 5a 57 69 62 69 74 73 2c 22 30 22 |-",.LZWibits,"0"| 000032c0 2c 22 30 22 2c 22 30 22 29 0d 0d 70 40 6c 6f 61 |,"0","0")..p@loa| 000032d0 64 25 3d a4 69 77 3a 65 78 65 63 25 3d a4 69 77 |d%=.iw:exec%=.iw| 000032e0 3a 6c 65 6e 25 3d a4 69 77 3a 61 74 74 72 25 3d |:len%=.iw:attr%=| 000032f0 a4 69 77 3a f4 20 44 69 72 27 73 20 6f 72 69 67 |.iw:. Dir's orig| 00003300 69 6e 61 6c 20 69 6e 66 6f 0d 0d 7a 28 c8 99 20 |inal info..z(.. | 00003310 22 4f 53 5f 46 69 6c 65 22 2c 38 2c 4f 75 74 44 |"OS_File",8,OutD| 00003320 69 72 24 3a f4 20 43 72 65 61 74 65 20 72 6f 6f |ir$:. Create roo| 00003330 74 0d 0d 84 41 c8 99 20 22 4f 53 5f 46 69 6c 65 |t...A.. "OS_File| 00003340 22 2c 31 2c 4f 75 74 44 69 72 24 2c 6c 6f 61 64 |",1,OutDir$,load| 00003350 25 2c 65 78 65 63 25 2c 2c 61 74 74 72 25 3a f4 |%,exec%,,attr%:.| 00003360 20 52 65 73 74 6f 72 65 20 66 69 6c 65 20 69 6e | Restore file in| 00003370 66 6f 0d 0d 8e 27 61 73 69 7a 65 25 3d a2 23 49 |fo...'asize%=.#I| 00003380 6e 3a f4 20 54 6f 74 61 6c 20 73 69 7a 65 20 6f |n:. Total size o| 00003390 66 20 61 72 63 68 69 76 65 0d 0d 98 1a 64 69 72 |f archive....dir| 000033a0 70 61 74 68 24 3d 22 22 3a f4 20 50 61 74 68 20 |path$="":. Path | 000033b0 79 65 74 0d 0d a2 22 44 69 72 25 28 30 2c 30 29 |yet..."Dir%(0,0)| 000033c0 3d 6c 65 6e 25 3a f4 20 52 6f 6f 74 20 64 69 72 |=len%:. Root dir| 000033d0 20 69 6e 66 6f 0d 0d ac 27 64 65 70 74 68 25 3d | info...'depth%=| 000033e0 30 3a f4 20 49 6e 69 74 20 64 69 72 20 72 65 63 |0:. Init dir rec| 000033f0 75 72 73 65 20 63 6f 75 6e 74 65 72 0d 0d b6 36 |urse counter...6| 00003400 69 6e 66 25 3d 30 3a 69 6e 64 25 3d 30 3a 69 6e |inf%=0:ind%=0:in| 00003410 6c 25 3d 30 3a 69 6e 61 25 3d 30 3a 69 6e 74 25 |l%=0:ina%=0:int%| 00003420 3d 31 3a f4 20 49 6e 69 74 20 63 6f 75 6e 74 65 |=1:. Init counte| 00003430 72 73 0d 0d c0 23 6e 61 6d 65 24 3d a4 69 73 3a |rs...#name$=.is:| 00003440 f4 20 4e 61 6d 65 20 6f 66 20 66 69 72 73 74 20 |. Name of first | 00003450 65 6e 74 72 79 0d 0d ca 10 c8 95 20 6e 61 6d 65 |entry...... name| 00003460 24 3c 3e 22 22 0d 0d d4 64 c8 95 20 44 69 72 25 |$<>""...d.. Dir%| 00003470 28 64 65 70 74 68 25 2c 30 29 3c 3d 30 3a 64 69 |(depth%,0)<=0:di| 00003480 72 70 61 74 68 24 3d c0 64 69 72 70 61 74 68 24 |rpath$=.dirpath$| 00003490 2c 44 69 72 25 28 64 65 70 74 68 25 2c 31 29 29 |,Dir%(depth%,1))| 000034a0 3a 64 65 70 74 68 25 2d 3d 31 3a ce 3a f4 20 41 |:depth%-=1:.:. A| 000034b0 73 63 65 6e 64 20 74 6f 20 6e 6f 6e 2d 65 6d 70 |scend to non-emp| 000034c0 74 79 20 70 61 72 65 6e 74 0d 0d de 38 44 69 72 |ty parent...8Dir| 000034d0 25 28 64 65 70 74 68 25 2c 30 29 2d 3d 31 3a f4 |%(depth%,0)-=1:.| 000034e0 20 44 65 63 72 65 6d 65 6e 74 20 65 6e 74 72 69 | Decrement entri| 000034f0 65 73 20 69 6e 20 63 75 72 72 65 6e 74 20 64 69 |es in current di| 00003500 72 0d 0d e8 4f 6c 6f 61 64 25 3d a4 69 77 3a 65 |r...Oload%=.iw:e| 00003510 78 65 63 25 3d a4 69 77 3a 6c 65 6e 25 3d a4 69 |xec%=.iw:len%=.i| 00003520 77 3a 61 74 74 72 25 3d a4 69 77 3a 63 6f 64 65 |w:attr%=.iw:code| 00003530 25 3d a4 69 77 3a 64 69 72 3d 28 63 6f 64 65 25 |%=.iw:dir=(code%| 00003540 80 31 29 3a f4 20 52 65 61 64 20 65 6e 74 72 79 |.1):. Read entry| 00003550 0d 0d f2 30 f2 64 69 63 28 44 46 66 6e 25 2c 64 |...0.dic(DFfn%,d| 00003560 69 72 70 61 74 68 24 2b 6e 61 6d 65 24 29 3a f4 |irpath$+name$):.| 00003570 20 53 68 6f 77 20 6c 6f 63 61 6c 20 70 61 74 68 | Show local path| 00003580 0d 0d fc 31 66 70 61 74 68 24 3d 4f 75 74 44 69 |...1fpath$=OutDi| 00003590 72 24 2b 22 2e 22 2b 64 69 72 70 61 74 68 24 2b |r$+"."+dirpath$+| 000035a0 6e 61 6d 65 24 3a f4 20 46 75 6c 6c 20 70 61 74 |name$:. Full pat| 000035b0 68 0d 0e 06 0a e7 64 69 72 20 8c 0d 0e 10 0c 20 |h.....dir ..... | 000035c0 69 6e 64 25 2b 3d 31 0d 0e 1a 36 20 f2 64 69 63 |ind%+=1...6 .dic| 000035d0 28 44 46 6c 65 6e 25 2c c3 6c 65 6e 25 2b 22 20 |(DFlen%,.len%+" | 000035e0 66 69 6c 65 73 22 29 3a f2 64 69 63 28 44 46 63 |files"):.dic(DFc| 000035f0 6f 6d 70 66 25 2c 22 31 30 30 25 22 29 0d 0e 24 |ompf%,"100%")..$| 00003600 2f 20 c8 99 20 22 4f 53 5f 46 69 6c 65 22 2c 38 |/ .. "OS_File",8| 00003610 2c 66 70 61 74 68 24 3a f4 20 52 65 63 72 65 61 |,fpath$:. Recrea| 00003620 74 65 20 64 69 72 65 63 74 6f 72 79 0d 0e 2e 4f |te directory...O| 00003630 20 64 65 70 74 68 25 2b 3d 31 3a 44 69 72 25 28 | depth%+=1:Dir%(| 00003640 64 65 70 74 68 25 2c 30 29 3d 6c 65 6e 25 3a 44 |depth%,0)=len%:D| 00003650 69 72 25 28 64 65 70 74 68 25 2c 31 29 3d a9 64 |ir%(depth%,1)=.d| 00003660 69 72 70 61 74 68 24 3a 64 69 72 70 61 74 68 24 |irpath$:dirpath$| 00003670 2b 3d 6e 61 6d 65 24 2b 22 2e 22 0d 0e 38 0d cc |+=name$+"."..8..| 00003680 20 69 6e 66 25 2b 3d 31 0d 0e 42 32 20 63 6c 65 | inf%+=1..B2 cle| 00003690 6e 25 3d a4 69 77 3a 75 6e 63 6f 6d 70 3d 28 63 |n%=.iw:uncomp=(c| 000036a0 6c 65 6e 25 3d 2d 31 29 3a 6e 6f 64 61 74 61 3d |len%=-1):nodata=| 000036b0 28 63 6c 65 6e 25 3d 2d 32 29 0d 0e 4c 2d 20 e7 |(clen%=-2)..L- .| 000036c0 75 6e 63 6f 6d 70 20 8c 20 63 6c 65 6e 25 3d 6c |uncomp . clen%=l| 000036d0 65 6e 25 20 8b 20 e7 6e 6f 64 61 74 61 20 8c 20 |en% . .nodata . | 000036e0 63 6c 65 6e 25 3d 30 0d 0e 56 30 20 e7 6c 65 6e |clen%=0..V0 .len| 000036f0 25 3d 30 20 8c 20 70 72 63 25 3d 31 30 30 20 8b |%=0 . prc%=100 .| 00003700 20 70 72 63 25 3d a8 28 63 6c 65 6e 25 2f 6c 65 | prc%=.(clen%/le| 00003710 6e 25 2a 31 30 30 29 0d 0e 60 30 20 f2 64 69 63 |n%*100)..`0 .dic| 00003720 28 44 46 6c 65 6e 25 2c c3 6c 65 6e 25 29 3a f2 |(DFlen%,.len%):.| 00003730 64 69 63 28 44 46 63 6f 6d 70 66 25 2c c3 70 72 |dic(DFcompf%,.pr| 00003740 63 25 2b 22 25 22 29 0d 0e 6a 29 20 63 70 74 72 |c%+"%")..j) cptr| 00003750 25 3d 63 6c 65 6e 25 2b a4 69 70 74 72 3a f4 20 |%=clen%+.iptr:. | 00003760 50 54 52 20 74 6f 20 6e 65 78 74 20 66 69 6c 65 |PTR to next file| 00003770 0d 0e 74 29 20 f2 73 6c 69 64 65 72 28 31 2c a4 |..t) .slider(1,.| 00003780 69 70 74 72 2f 61 73 69 7a 65 25 2c 63 6c 65 6e |iptr/asize%,clen| 00003790 25 2f 61 73 69 7a 65 25 29 0d 0e 7e 60 20 e7 28 |%/asize%)..~` .(| 000037a0 52 65 63 72 65 61 74 65 3d 33 29 20 84 20 28 6c |Recreate=3) . (l| 000037b0 65 6e 25 3d 30 29 20 8c 20 64 6f 25 3d 31 20 8b |en%=0) . do%=1 .| 000037c0 20 e7 28 52 65 63 72 65 61 74 65 3d 32 29 20 84 | .(Recreate=2) .| 000037d0 20 6e 6f 64 61 74 61 20 8c 20 64 6f 25 3d 32 20 | nodata . do%=2 | 000037e0 8b 20 e7 75 6e 63 6f 6d 70 20 8c 20 64 6f 25 3d |. .uncomp . do%=| 000037f0 33 20 8b 20 64 6f 25 3d 34 0d 0e 88 0d 20 c8 8e |3 . do%=4.... ..| 00003800 20 64 6f 25 20 ca 0d 0e 92 21 20 20 c9 20 31 20 | do% ....! . 1 | 00003810 3a 20 c8 99 20 22 4f 53 5f 46 69 6c 65 22 2c 37 |: .. "OS_File",7| 00003820 2c 66 70 61 74 68 24 0d 0e 9c 29 20 20 c9 20 32 |,fpath$...) . 2| 00003830 20 3a 20 c8 99 20 22 4f 53 5f 46 69 6c 65 22 2c | : .. "OS_File",| 00003840 37 2c 66 70 61 74 68 24 2c 2c 2c 2c 6c 65 6e 25 |7,fpath$,,,,len%| 00003850 0d 0e a6 21 20 20 c9 20 33 20 3a 20 f2 72 65 73 |...! . 3 : .res| 00003860 74 6f 72 65 28 66 70 61 74 68 24 2c 6c 65 6e 25 |tore(fpath$,len%| 00003870 29 0d 0e b0 ae 20 20 c9 20 34 20 3a 20 4f 75 74 |).... . 4 : Out| 00003880 3d ae 66 70 61 74 68 24 3a c8 99 20 22 46 69 6c |=.fpath$:.. "Fil| 00003890 65 42 75 66 66 65 72 5f 4f 70 65 6e 22 2c 4f 75 |eBuffer_Open",Ou| 000038a0 74 2c 4f 75 74 42 75 66 25 2c 4f 75 74 42 75 66 |t,OutBuf%,OutBuf| 000038b0 53 69 7a 65 25 2c 31 20 b8 20 4f 62 6e 72 25 3a |Size%,1 . Obnr%:| 000038c0 c8 99 20 22 4c 5a 57 42 5f 44 65 63 6f 6d 70 72 |.. "LZWB_Decompr| 000038d0 65 73 73 22 2c 30 2c 49 62 6e 72 25 2c 4f 62 6e |ess",0,Ibnr%,Obn| 000038e0 72 25 2c 2c 2c 4c 5a 57 69 62 69 74 73 2c 42 75 |r%,,,LZWibits,Bu| 000038f0 66 49 25 3a c8 99 20 22 46 69 6c 65 42 75 66 66 |fI%:.. "FileBuff| 00003900 65 72 5f 43 6c 6f 73 65 22 2c 4f 62 6e 72 25 3a |er_Close",Obnr%:| 00003910 d9 23 4f 75 74 3a f4 20 45 78 74 72 61 63 74 0d |.#Out:. Extract.| 00003920 0e ba 06 20 cb 0d 0e c4 1b 20 69 6e 6c 25 2b 3d |... ..... inl%+=| 00003930 6c 65 6e 25 3a 69 6e 61 25 2b 3d 63 6c 65 6e 25 |len%:ina%+=clen%| 00003940 0d 0e ce 23 20 f2 69 70 74 72 28 63 70 74 72 25 |...# .iptr(cptr%| 00003950 29 3a f4 20 47 6f 20 74 6f 20 6e 65 78 74 20 66 |):. Go to next f| 00003960 69 6c 65 0d 0e d8 05 cd 0d 0e e2 40 c8 99 20 22 |ile........@.. "| 00003970 4f 53 5f 46 69 6c 65 22 2c 31 2c 66 70 61 74 68 |OS_File",1,fpath| 00003980 24 2c 6c 6f 61 64 25 2c 65 78 65 63 25 2c 2c 61 |$,load%,exec%,,a| 00003990 74 74 72 25 3a f4 20 52 65 73 74 6f 72 65 20 66 |ttr%:. Restore f| 000039a0 69 6c 65 20 69 6e 66 6f 0d 0e ec 22 6e 61 6d 65 |ile info..."name| 000039b0 24 3d a4 69 73 3a f4 20 4e 61 6d 65 20 6f 66 20 |$=.is:. Name of | 000039c0 6e 65 78 74 20 65 6e 74 72 79 0d 0e f6 0b 69 6e |next entry....in| 000039d0 74 25 2b 3d 31 0d 0f 00 31 c8 99 20 22 48 6f 75 |t%+=1...1.. "Hou| 000039e0 72 67 6c 61 73 73 5f 50 65 72 63 65 6e 74 61 67 |rglass_Percentag| 000039f0 65 22 2c a4 70 65 72 63 28 a4 69 70 74 72 2c 61 |e",.perc(.iptr,a| 00003a00 73 69 7a 65 25 29 0d 0f 0a 15 f2 64 69 63 28 44 |size%).....dic(D| 00003a10 46 63 6c 25 2c c3 69 6e 6c 25 29 0d 0f 14 15 f2 |Fcl%,.inl%).....| 00003a20 64 69 63 28 44 46 63 61 25 2c c3 69 6e 61 25 29 |dic(DFca%,.ina%)| 00003a30 0d 0f 1e 18 f2 64 69 63 28 44 46 69 74 65 6d 73 |.....dic(DFitems| 00003a40 25 2c c3 69 6e 74 25 29 0d 0f 28 1d f2 73 6c 69 |%,.int%)..(..sli| 00003a50 64 65 72 28 31 2c a4 69 70 74 72 2f 61 73 69 7a |der(1,.iptr/asiz| 00003a60 65 25 2c 30 29 0d 0f 32 05 ce 0d 0f 3c 2a f2 64 |e%,0)..2....<*.d| 00003a70 69 63 28 44 46 63 6f 6d 70 74 25 2c c3 28 a4 70 |ic(DFcompt%,.(.p| 00003a80 65 72 63 28 69 6e 61 25 2c 69 6e 6c 25 29 29 2b |erc(ina%,inl%))+| 00003a90 22 25 22 29 0d 0f 46 1f c8 99 20 22 46 69 6c 65 |"%")..F... "File| 00003aa0 42 75 66 66 65 72 5f 43 6c 6f 73 65 22 2c 49 62 |Buffer_Close",Ib| 00003ab0 6e 72 25 0d 0f 50 18 d9 23 49 6e 3a f4 20 43 6c |nr%..P..#In:. Cl| 00003ac0 6f 73 65 20 61 72 63 68 69 76 65 0d 0f 5a 05 e1 |ose archive..Z..| 00003ad0 0d 0f 64 04 0d 0f 6e 08 dd a4 69 77 0d 0f 78 25 |..d...n...iw..x%| 00003ae0 c8 99 20 22 46 69 6c 65 42 75 66 66 65 72 5f 52 |.. "FileBuffer_R| 00003af0 65 61 64 22 2c 49 62 6e 72 25 2c 44 75 6d 25 2c |ead",Ibnr%,Dum%,| 00003b00 34 0d 0f 82 0a 3d 21 44 75 6d 25 0d 0f 8c 04 0d |4....=!Dum%.....| 00003b10 0f 96 08 dd a4 69 73 0d 0f a0 0b ea 20 76 24 2c |.....is..... v$,| 00003b20 63 25 0d 0f aa 3f 76 24 3d 22 22 3a f5 20 c8 99 |c%...?v$="":. ..| 00003b30 20 22 46 69 6c 65 42 75 66 66 65 72 5f 52 65 61 | "FileBuffer_Rea| 00003b40 64 42 79 74 65 22 2c 49 62 6e 72 25 20 b8 20 2c |dByte",Ibnr% . ,| 00003b50 63 25 3a 76 24 2b 3d bd 63 25 3a fd 20 63 25 3d |c%:v$+=.c%:. c%=| 00003b60 30 0d 0f b4 09 3d c0 76 24 29 0d 0f be 04 0d 0f |0....=.v$)......| 00003b70 c8 0a dd a4 69 70 74 72 0d 0f d2 0a ea 20 70 74 |....iptr..... pt| 00003b80 72 25 0d 0f dc 29 c8 99 20 22 46 69 6c 65 42 75 |r%...).. "FileBu| 00003b90 66 66 65 72 5f 52 65 61 64 50 54 52 22 2c 49 62 |ffer_ReadPTR",Ib| 00003ba0 6e 72 25 20 b8 20 2c 70 74 72 25 0d 0f e6 09 3d |nr% . ,ptr%....=| 00003bb0 70 74 72 25 0d 0f f0 04 0d 0f fa 10 dd f2 69 70 |ptr%..........ip| 00003bc0 74 72 28 70 74 72 25 29 0d 10 04 27 c8 99 20 22 |tr(ptr%)...'.. "| 00003bd0 46 69 6c 65 42 75 66 66 65 72 5f 57 72 69 74 65 |FileBuffer_Write| 00003be0 50 54 52 22 2c 49 62 6e 72 25 2c 70 74 72 25 0d |PTR",Ibnr%,ptr%.| 00003bf0 10 0e 05 e1 0d 10 18 04 0d 10 22 16 dd f2 72 65 |.........."...re| 00003c00 73 74 6f 72 65 28 66 24 2c 6c 65 6e 25 29 0d 10 |store(f$,len%)..| 00003c10 2c 2b f4 20 52 65 73 74 6f 72 65 73 20 75 6e 63 |,+. Restores unc| 00003c20 6f 6d 70 72 65 73 73 65 64 20 66 69 6c 65 20 69 |ompressed file i| 00003c30 6e 20 61 72 63 68 69 76 65 0d 10 36 16 ea 20 4f |n archive..6.. O| 00003c40 75 74 2c 6c 65 66 74 25 2c 62 79 74 65 73 25 0d |ut,left%,bytes%.| 00003c50 10 40 16 4f 75 74 3d ae 66 24 3a 6c 65 66 74 25 |.@.Out=.f$:left%| 00003c60 3d 6c 65 6e 25 0d 10 4a 0e c8 95 20 6c 65 66 74 |=len%..J... left| 00003c70 25 3e 30 0d 10 54 3a e7 6c 65 66 74 25 3c 4f 75 |%>0..T:.left%<Ou| 00003c80 74 42 75 66 53 69 7a 65 25 20 8c 20 62 79 74 65 |tBufSize% . byte| 00003c90 73 25 3d 6c 65 66 74 25 20 8b 20 62 79 74 65 73 |s%=left% . bytes| 00003ca0 25 3d 4f 75 74 42 75 66 53 69 7a 65 25 0d 10 5e |%=OutBufSize%..^| 00003cb0 3a c8 99 20 22 46 69 6c 65 42 75 66 66 65 72 5f |:.. "FileBuffer_| 00003cc0 52 65 61 64 22 2c 49 62 6e 72 25 2c 4f 75 74 42 |Read",Ibnr%,OutB| 00003cd0 75 66 25 2c 62 79 74 65 73 25 3a f4 20 52 65 61 |uf%,bytes%:. Rea| 00003ce0 64 20 63 68 75 6e 6b 0d 10 68 33 c8 99 20 22 4f |d chunk..h3.. "O| 00003cf0 53 5f 47 42 50 42 22 2c 32 2c 4f 75 74 2c 4f 75 |S_GBPB",2,Out,Ou| 00003d00 74 42 75 66 25 2c 62 79 74 65 73 25 3a f4 20 57 |tBuf%,bytes%:. W| 00003d10 72 69 74 65 20 63 68 75 6e 6b 0d 10 72 11 6c 65 |rite chunk..r.le| 00003d20 66 74 25 2d 3d 62 79 74 65 73 25 0d 10 7c 05 ce |ft%-=bytes%..|..| 00003d30 0d 10 86 09 d9 23 4f 75 74 0d 10 90 05 e1 0d 10 |.....#Out.......| 00003d40 9a 04 0d 10 a4 0c dd f2 63 6c 6f 73 65 66 0d 10 |........closef..| 00003d50 ae 1b f4 20 43 6c 6f 73 65 73 20 66 69 6c 65 73 |... Closes files| 00003d60 20 6f 6e 20 65 72 72 6f 72 0d 10 b8 20 e7 49 6e | on error... .In| 00003d70 20 8c 20 c8 99 20 22 58 4f 53 5f 46 69 6e 64 22 | . .. "XOS_Find"| 00003d80 2c 2c 49 6e 3a 49 6e 3d 30 0d 10 c2 23 e7 4f 75 |,,In:In=0...#.Ou| 00003d90 74 20 8c 20 c8 99 20 22 58 4f 53 5f 46 69 6e 64 |t . .. "XOS_Find| 00003da0 22 2c 2c 4f 75 74 3a 4f 75 74 3d 30 0d 10 cc 05 |",,Out:Out=0....| 00003db0 e1 0d 10 d6 04 0d 10 e0 0f dd f2 6d 61 69 6e 5f |...........main_| 00003dc0 6d 65 6e 75 0d 10 ea 17 f4 20 43 72 65 61 74 65 |menu..... Create| 00003dd0 73 20 6d 61 69 6e 20 6d 65 6e 75 0d 10 f4 0b ea |s main menu.....| 00003de0 20 78 25 2c 79 25 0d 10 fe 25 f2 6d 61 69 6e 5f | x%,y%...%.main_| 00003df0 6d 65 6e 75 5f 73 65 74 3a f4 20 53 65 74 20 66 |menu_set:. Set f| 00003e00 6c 61 67 73 20 26 20 64 61 74 61 0d 11 08 1f f2 |lags & data.....| 00003e10 6d 6f 75 73 65 28 78 25 2c 5f 25 2c 5f 25 29 3a |mouse(x%,_%,_%):| 00003e20 79 25 3d 39 36 2b 33 2a 34 30 0d 11 12 30 4d 65 |y%=96+3*40...0Me| 00003e30 6e 75 31 3d 4d 65 6e 75 4d 61 69 6e 25 3a c8 99 |nu1=MenuMain%:..| 00003e40 20 57 43 72 65 61 74 65 4d 25 2c 2c 4d 65 6e 75 | WCreateM%,,Menu| 00003e50 31 2c 78 25 2d 36 34 2c 79 25 0d 11 1c 05 e1 0d |1,x%-64,y%......| 00003e60 11 26 05 20 0d 11 30 13 dd f2 6d 61 69 6e 5f 6d |.&. ..0...main_m| 00003e70 65 6e 75 5f 73 65 74 0d 11 3a 33 f4 20 57 72 69 |enu_set..:3. Wri| 00003e80 74 65 73 20 63 75 72 72 65 6e 74 20 66 6c 61 67 |tes current flag| 00003e90 73 20 26 20 69 63 6f 6e 20 64 61 74 61 20 69 6e |s & icon data in| 00003ea0 20 6d 61 69 6e 20 6d 65 6e 75 0d 11 44 05 e1 0d | main menu..D...| 00003eb0 11 4e 04 0d 11 58 14 dd f2 69 66 6c 28 66 6c 25 |.N...X...ifl(fl%| 00003ec0 2c 74 25 2c 64 25 29 0d 11 62 1a f4 20 53 65 74 |,t%,d%)..b.. Set| 00003ed0 73 20 6d 65 6e 75 20 69 63 6f 6e 20 66 6c 61 67 |s menu icon flag| 00003ee0 73 0d 11 6c 1b 74 25 3d 2d 28 74 25 3c 3e 30 29 |s..l.t%=-(t%<>0)| 00003ef0 3a 64 25 3d 2d 28 64 25 3c 3e 30 29 0d 11 76 1e |:d%=-(d%<>0)..v.| 00003f00 21 66 6c 25 3d 28 28 21 66 6c 25 29 80 ac 31 29 |!fl%=((!fl%)..1)| 00003f10 2b 74 25 3a f4 20 54 69 63 6b 0d 11 80 2e 66 6c |+t%:. Tick....fl| 00003f20 25 21 38 3d 28 28 66 6c 25 21 38 29 80 ac 28 31 |%!8=((fl%!8)..(1| 00003f30 3c 3c 32 32 29 29 2b 28 64 25 3c 3c 32 32 29 3a |<<22))+(d%<<22):| 00003f40 f4 20 53 68 61 64 65 64 0d 11 8a 05 e1 0d 11 94 |. Shaded........| 00003f50 04 0d 11 9e 20 dd f2 6f 70 65 6e 5f 77 69 6e 64 |.... ..open_wind| 00003f60 6f 77 28 68 61 6e 64 6c 65 25 2c 69 6e 66 6f 25 |ow(handle%,info%| 00003f70 29 0d 11 a8 26 f4 20 4f 70 65 6e 73 20 77 69 6e |)...&. Opens win| 00003f80 64 6f 77 20 77 69 74 68 20 68 61 6e 64 6c 65 20 |dow with handle | 00003f90 68 61 6e 64 6c 65 25 0d 11 b2 40 f4 20 49 66 20 |handle%...@. If | 00003fa0 69 6e 66 6f 25 3e 3d 26 31 30 30 20 74 68 65 6e |info%>=&100 then| 00003fb0 20 69 6e 66 6f 25 20 69 73 20 72 65 61 64 79 20 | info% is ready | 00003fc0 61 74 20 69 6e 66 6f 25 2c 20 65 6c 73 65 20 67 |at info%, else g| 00003fd0 65 74 20 69 6e 66 6f 0d 11 bc 41 f4 20 61 6e 64 |et info...A. and| 00003fe0 20 69 66 20 62 69 74 30 3d 31 20 70 6f 70 20 61 | if bit0=1 pop a| 00003ff0 74 20 74 6f 70 2c 20 62 69 74 31 3d 31 20 77 69 |t top, bit1=1 wi| 00004000 6e 64 6f 77 20 68 61 73 20 6e 6f 20 73 63 72 6f |ndow has no scro| 00004010 6c 6c 20 62 61 72 73 2c 0d 11 c6 21 f4 20 62 69 |ll bars,...!. bi| 00004020 74 32 3d 31 20 70 6f 70 20 61 74 20 6d 6f 75 73 |t2=1 pop at mous| 00004030 65 20 70 6f 69 6e 74 65 72 0d 11 d0 1b ea 20 62 |e pointer..... b| 00004040 25 2c 70 78 25 2c 70 79 25 2c 5f 25 2c 78 73 25 |%,px%,py%,_%,xs%| 00004050 2c 79 73 25 0d 11 da 12 e7 69 6e 66 6f 25 3e 3d |,ys%.....info%>=| 00004060 26 31 30 30 20 8c 0d 11 e4 28 20 e3 20 62 25 3d |&100 ....( . b%=| 00004070 30 20 b8 20 33 31 20 88 20 34 3a 42 6c 6f 63 6b |0 . 31 . 4:Block| 00004080 21 62 25 3d 69 6e 66 6f 25 21 62 25 3a ed 0d 11 |!b%=info%!b%:...| 00004090 ee 26 cc 20 21 42 6c 6f 63 6b 3d 68 61 6e 64 6c |.&. !Block=handl| 000040a0 65 25 3a c8 99 20 57 47 65 74 57 53 25 2c 2c 42 |e%:.. WGetWS%,,B| 000040b0 6c 6f 63 6b 0d 11 f8 2d 20 e7 69 6e 66 6f 25 80 |lock...- .info%.| 000040c0 31 20 8c 20 42 6c 6f 63 6b 21 32 38 3d 2d 31 3a |1 . Block!28=-1:| 000040d0 f4 20 50 6f 70 20 75 70 20 61 74 20 74 6f 70 20 |. Pop up at top | 000040e0 3f 0d 12 02 aa 20 e7 69 6e 66 6f 25 80 34 20 8c |?.... .info%.4 .| 000040f0 20 f2 6d 6f 75 73 65 28 70 78 25 2c 70 79 25 2c | .mouse(px%,py%,| 00004100 5f 25 29 3a 78 73 25 3d 42 6c 6f 63 6b 21 31 32 |_%):xs%=Block!12| 00004110 2d 42 6c 6f 63 6b 21 34 3a 79 73 25 3d 42 6c 6f |-Block!4:ys%=Blo| 00004120 63 6b 21 31 36 2d 42 6c 6f 63 6b 21 38 3a 42 6c |ck!16-Block!8:Bl| 00004130 6f 63 6b 21 34 3d 70 78 25 2d 36 34 3a 42 6c 6f |ock!4=px%-64:Blo| 00004140 63 6b 21 38 3d 70 79 25 2d 79 73 25 2b 31 36 3a |ck!8=py%-ys%+16:| 00004150 42 6c 6f 63 6b 21 31 32 3d 42 6c 6f 63 6b 21 34 |Block!12=Block!4| 00004160 2b 78 73 25 3a 42 6c 6f 63 6b 21 31 36 3d 42 6c |+xs%:Block!16=Bl| 00004170 6f 63 6b 21 38 2b 79 73 25 3a f4 20 50 6f 70 20 |ock!8+ys%:. Pop | 00004180 75 70 20 61 74 20 6d 6f 75 73 65 0d 12 0c 05 cd |up at mouse.....| 00004190 0d 12 16 15 c8 99 20 57 4f 70 65 6e 57 25 2c 2c |...... WOpenW%,,| 000041a0 42 6c 6f 63 6b 0d 12 20 05 e1 0d 12 2a 05 20 0d |Block.. ....*. .| 000041b0 12 34 1b dd f2 63 6c 6f 73 65 5f 77 69 6e 64 6f |.4...close_windo| 000041c0 77 28 68 61 6e 64 6c 65 25 29 0d 12 3e 27 f4 20 |w(handle%)..>'. | 000041d0 43 6c 6f 73 65 73 20 77 69 6e 64 6f 77 20 77 69 |Closes window wi| 000041e0 74 68 20 68 61 6e 64 6c 65 20 68 61 6e 64 6c 65 |th handle handle| 000041f0 25 0d 12 48 25 21 42 6c 6f 63 6b 3d 68 61 6e 64 |%..H%!Block=hand| 00004200 6c 65 25 3a c8 99 20 57 43 6c 6f 73 65 57 25 2c |le%:.. WCloseW%,| 00004210 2c 42 6c 6f 63 6b 0d 12 52 05 e1 0d 12 5c 05 20 |,Block..R....\. | 00004220 0d 12 66 11 dd a4 70 6f 6c 6c 28 6d 61 73 6b 25 |..f...poll(mask%| 00004230 29 0d 12 70 40 f4 20 52 65 74 75 72 6e 73 20 70 |)..p@. Returns p| 00004240 6f 6c 6c 20 72 65 61 73 6f 6e 20 63 6f 64 65 2c |oll reason code,| 00004250 20 6d 61 73 6b 69 6e 67 20 77 69 74 68 20 6d 61 | masking with ma| 00004260 73 6b 25 2c 20 64 61 74 61 20 61 74 20 50 6f 6c |sk%, data at Pol| 00004270 6c 0d 12 7a 10 ea 20 72 65 61 73 6f 6e 63 6f 64 |l..z.. reasoncod| 00004280 65 0d 12 84 25 c8 99 20 57 50 6f 6c 6c 25 2c 6d |e...%.. WPoll%,m| 00004290 61 73 6b 25 2c 50 6f 6c 6c 20 b8 20 72 65 61 73 |ask%,Poll . reas| 000042a0 6f 6e 63 6f 64 65 0d 12 8e 0f 3d 72 65 61 73 6f |oncode....=reaso| 000042b0 6e 63 6f 64 65 0d 12 98 05 20 0d 12 a2 10 dd f2 |ncode.... ......| 000042c0 69 6e 69 74 69 61 6c 69 73 65 0d 12 ac 19 f4 20 |initialise..... | 000042d0 49 6e 69 74 69 61 6c 69 73 65 73 20 70 72 6f 67 |Initialises prog| 000042e0 72 61 6d 0d 12 b6 2d 61 70 70 6c 6e 61 6d 65 24 |ram...-applname$| 000042f0 3d 22 50 61 63 6b 44 69 72 22 3a f4 20 4e 61 6d |="PackDir":. Nam| 00004300 65 20 6f 66 20 61 70 70 6c 69 63 61 74 69 6f 6e |e of application| 00004310 0d 12 c0 46 c8 99 20 22 57 69 6d 70 5f 49 6e 69 |...F.. "Wimp_Ini| 00004320 74 69 61 6c 69 73 65 22 2c 32 30 30 2c 26 34 42 |tialise",200,&4B| 00004330 35 33 34 31 35 34 2c 61 70 70 6c 6e 61 6d 65 24 |534154,applname$| 00004340 20 b8 20 76 65 72 73 69 6f 6e 2c 54 61 73 6b 48 | . version,TaskH| 00004350 61 6e 64 6c 65 25 0d 12 ca 39 e7 76 65 72 73 69 |andle%...9.versi| 00004360 6f 6e 3c 32 30 30 20 8c 20 85 20 31 2c 22 49 20 |on<200 . . 1,"I | 00004370 63 61 6e 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 |cannot work with| 00004380 20 57 49 4d 50 20 70 72 65 2d 32 2e 30 30 22 0d | WIMP pre-2.00".| 00004390 12 d4 47 c8 99 20 22 4c 5a 57 42 5f 54 61 73 6b |..G.. "LZWB_Task| 000043a0 53 74 61 72 74 22 3a c8 99 20 22 46 69 6c 65 42 |Start":.. "FileB| 000043b0 75 66 66 65 72 5f 54 61 73 6b 53 74 61 72 74 22 |uffer_TaskStart"| 000043c0 3a f4 20 52 65 67 69 73 74 65 72 20 74 6f 20 6d |:. Register to m| 000043d0 6f 64 75 6c 65 73 0d 12 de 36 57 25 3d a4 73 77 |odules...6W%=.sw| 000043e0 69 5f 74 6f 5f 6e 72 28 22 57 69 6d 70 5f 49 6e |i_to_nr("Wimp_In| 000043f0 69 74 69 61 6c 69 73 65 22 29 3a f4 20 42 61 73 |itialise"):. Bas| 00004400 65 20 53 57 49 20 6e 75 6d 62 65 72 0d 12 e8 8e |e SWI number....| 00004410 57 43 72 65 61 74 65 57 25 3d 57 25 2b 31 3a 57 |WCreateW%=W%+1:W| 00004420 43 72 65 61 74 65 49 25 3d 57 25 2b 32 3a 57 4f |CreateI%=W%+2:WO| 00004430 70 65 6e 57 25 3d 57 25 2b 35 3a 57 43 6c 6f 73 |penW%=W%+5:WClos| 00004440 65 57 25 3d 57 25 2b 36 3a 57 50 6f 6c 6c 25 3d |eW%=W%+6:WPoll%=| 00004450 57 25 2b 37 3a 57 47 65 74 57 53 25 3d 57 25 2b |W%+7:WGetWS%=W%+| 00004460 31 31 3a 57 53 65 74 49 53 25 3d 57 25 2b 31 33 |11:WSetIS%=W%+13| 00004470 3a 57 47 65 74 49 53 25 3d 57 25 2b 31 34 3a 57 |:WGetIS%=W%+14:W| 00004480 47 65 74 50 49 25 3d 57 25 2b 31 35 3a 57 44 72 |GetPI%=W%+15:WDr| 00004490 61 67 42 25 3d 57 25 2b 31 36 0d 12 f2 5e 57 53 |agB%=W%+16...^WS| 000044a0 65 74 43 61 25 3d 57 25 2b 31 38 3a 57 43 72 65 |etCa%=W%+18:WCre| 000044b0 61 74 65 4d 25 3d 57 25 2b 32 30 3a 57 44 65 63 |ateM%=W%+20:WDec| 000044c0 6f 64 65 4d 25 3d 57 25 2b 32 31 3a 57 4c 6f 61 |odeM%=W%+21:WLoa| 000044d0 64 54 25 3d 57 25 2b 32 37 3a 57 52 65 70 6f 72 |dT%=W%+27:WRepor| 000044e0 74 25 3d 57 25 2b 33 31 3a 57 53 65 6e 64 4d 73 |t%=W%+31:WSendMs| 000044f0 67 25 3d 57 25 2b 33 39 0d 12 fc 3c 4f 53 53 70 |g%=W%+39...<OSSp| 00004500 6f 70 25 3d a4 73 77 69 5f 74 6f 5f 6e 72 28 22 |op%=.swi_to_nr("| 00004510 4f 53 5f 53 70 72 69 74 65 4f 70 22 29 3a f4 20 |OS_SpriteOp"):. | 00004520 53 70 72 69 74 65 20 6f 70 20 53 57 49 20 6e 75 |Sprite op SWI nu| 00004530 6d 62 65 72 0d 13 06 3d 74 66 25 3d 37 3a 74 62 |mber...=tf%=7:tb| 00004540 25 3d 32 3a 77 66 25 3d 37 3a 77 62 25 3d 30 3a |%=2:wf%=7:wb%=0:| 00004550 73 69 25 3d 31 3a 73 6f 25 3d 33 3a f4 20 57 69 |si%=1:so%=3:. Wi| 00004560 6e 64 6f 77 2f 6d 65 6e 75 20 63 6f 6c 6f 75 72 |ndow/menu colour| 00004570 73 0d 13 10 90 21 42 6c 6f 63 6b 3d 2d 31 3a 42 |s....!Block=-1:B| 00004580 6c 6f 63 6b 21 34 3d 30 3a 42 6c 6f 63 6b 21 38 |lock!4=0:Block!8| 00004590 3d 30 3a 42 6c 6f 63 6b 21 31 32 3d 36 38 3a 42 |=0:Block!12=68:B| 000045a0 6c 6f 63 6b 21 31 36 3d 36 38 3a 42 6c 6f 63 6b |lock!16=68:Block| 000045b0 21 32 30 3d 26 32 37 30 30 33 30 30 32 3a 24 28 |!20=&27003002:$(| 000045c0 42 6c 6f 63 6b 2b 32 34 29 3d 22 21 70 61 63 6b |Block+24)="!pack| 000045d0 64 69 72 22 3a c8 99 20 57 43 72 65 61 74 65 49 |dir":.. WCreateI| 000045e0 25 2c 2c 42 6c 6f 63 6b 20 b8 20 49 63 6f 42 61 |%,,Block . IcoBa| 000045f0 72 25 3a f4 20 49 63 6f 6e 62 61 72 20 69 63 6f |r%:. Iconbar ico| 00004600 6e 0d 13 1a 17 f4 20 4c 6f 61 64 20 69 63 6f 6e |n..... Load icon| 00004610 20 73 70 72 69 74 65 73 0d 13 24 3e c8 99 20 22 | sprites..$>.. "| 00004620 4f 53 5f 46 69 6c 65 22 2c 35 2c 22 3c 50 61 63 |OS_File",5,"<Pac| 00004630 6b 44 69 72 24 44 69 72 3e 2e 53 70 72 69 74 65 |kDir$Dir>.Sprite| 00004640 73 22 20 b8 20 2c 2c 2c 2c 6c 65 6e 25 3a 6c 65 |s" . ,,,,len%:le| 00004650 6e 25 2b 3d 31 36 0d 13 2e 47 de 20 49 63 6f 6e |n%+=16...G. Icon| 00004660 53 70 72 20 6c 65 6e 25 3a 21 49 63 6f 6e 53 70 |Spr len%:!IconSp| 00004670 72 3d 6c 65 6e 25 3a 49 63 6f 6e 53 70 72 21 34 |r=len%:IconSpr!4| 00004680 3d 30 3a 49 63 6f 6e 53 70 72 21 38 3d 31 36 3a |=0:IconSpr!8=16:| 00004690 49 63 6f 6e 53 70 72 21 31 32 3d 31 36 0d 13 38 |IconSpr!12=16..8| 000046a0 35 c8 99 20 4f 53 53 70 6f 70 25 2c 31 30 2b 32 |5.. OSSpop%,10+2| 000046b0 35 36 2c 49 63 6f 6e 53 70 72 2c 22 3c 50 61 63 |56,IconSpr,"<Pac| 000046c0 6b 44 69 72 24 44 69 72 3e 2e 53 70 72 69 74 65 |kDir$Dir>.Sprite| 000046d0 73 22 0d 13 42 14 f4 20 4c 6f 61 64 20 74 65 6d |s"..B.. Load tem| 000046e0 70 6c 61 74 65 73 0d 13 4c 35 c8 99 20 22 57 69 |plates..L5.. "Wi| 000046f0 6d 70 5f 4f 70 65 6e 54 65 6d 70 6c 61 74 65 22 |mp_OpenTemplate"| 00004700 2c 2c 22 3c 50 61 63 6b 44 69 72 24 44 69 72 3e |,,"<PackDir$Dir>| 00004710 2e 54 65 6d 70 6c 61 74 65 73 22 0d 13 56 33 de |.Templates"..V3.| 00004720 20 69 63 20 32 30 34 38 2c 69 65 20 31 3a f4 20 | ic 2048,ie 1:. | 00004730 49 6e 64 69 72 65 63 74 65 64 20 69 63 6f 6e 20 |Indirected icon | 00004740 64 61 74 61 20 77 6f 72 6b 73 70 61 63 65 0d 13 |data workspace..| 00004750 60 23 4e 72 25 3d 30 3a f4 20 49 6e 69 74 69 61 |`#Nr%=0:. Initia| 00004760 6c 69 73 65 20 69 63 6f 6e 20 63 6f 75 6e 74 65 |lise icon counte| 00004770 72 0d 13 6a 23 f2 6c 6f 61 64 77 69 6e 28 22 73 |r..j#.loadwin("s| 00004780 61 76 65 22 2c 77 69 6e 5f 66 69 6c 65 25 2c 26 |ave",win_file%,&| 00004790 31 30 33 29 0d 13 74 50 77 25 3d 77 69 6e 5f 66 |103)..tPw%=win_f| 000047a0 69 6c 65 25 3a 49 63 6f 46 74 79 70 65 25 3d 30 |ile%:IcoFtype%=0| 000047b0 3a f2 61 64 64 69 63 28 44 53 73 6e 25 2c 77 25 |:.addic(DSsn%,w%| 000047c0 2c 49 63 6f 46 74 79 70 65 25 2c 31 31 29 3a f2 |,IcoFtype%,11):.| 000047d0 61 64 64 69 63 28 44 53 66 6e 25 2c 77 25 2c 31 |addic(DSfn%,w%,1| 000047e0 2c 31 30 29 0d 13 7e 20 f2 6c 6f 61 64 77 69 6e |,10)..~ .loadwin| 000047f0 28 22 69 6e 66 6f 22 2c 77 69 6e 5f 69 6e 66 6f |("info",win_info| 00004800 25 2c 30 29 0d 13 88 28 f2 6c 6f 61 64 77 69 6e |%,0)...(.loadwin| 00004810 28 22 66 69 6c 65 69 6e 66 6f 22 2c 77 69 6e 5f |("fileinfo",win_| 00004820 66 69 6c 65 69 6e 66 6f 25 2c 32 29 0d 13 92 86 |fileinfo%,2)....| 00004830 77 25 3d 77 69 6e 5f 66 69 6c 65 69 6e 66 6f 25 |w%=win_fileinfo%| 00004840 3a f2 61 64 64 69 63 28 44 46 6f 72 25 2c 77 25 |:.addic(DFor%,w%| 00004850 2c 31 2c 32 35 35 29 3a f2 61 64 64 69 63 28 44 |,1,255):.addic(D| 00004860 46 6e 77 25 2c 77 25 2c 33 2c 32 35 35 29 3a f2 |Fnw%,w%,3,255):.| 00004870 61 64 64 69 63 28 44 46 61 63 25 2c 77 25 2c 34 |addic(DFac%,w%,4| 00004880 2c 31 31 29 3a f2 61 64 64 69 63 28 44 46 66 6e |,11):.addic(DFfn| 00004890 25 2c 77 25 2c 35 2c 32 35 35 29 3a f2 61 64 64 |%,w%,5,255):.add| 000048a0 69 63 28 44 46 6c 65 6e 25 2c 77 25 2c 37 2c 31 |ic(DFlen%,w%,7,1| 000048b0 31 29 0d 13 9c 88 f2 61 64 64 69 63 28 44 46 62 |1).....addic(DFb| 000048c0 69 74 73 25 2c 77 25 2c 39 2c 32 29 3a f2 61 64 |its%,w%,9,2):.ad| 000048d0 64 69 63 28 44 46 63 6f 6d 70 66 25 2c 77 25 2c |dic(DFcompf%,w%,| 000048e0 31 32 2c 35 29 3a f2 61 64 64 69 63 28 44 46 63 |12,5):.addic(DFc| 000048f0 6f 6d 70 74 25 2c 77 25 2c 31 34 2c 35 29 3a f2 |ompt%,w%,14,5):.| 00004900 61 64 64 69 63 28 44 46 69 74 65 6d 73 25 2c 77 |addic(DFitems%,w| 00004910 25 2c 31 36 2c 31 31 29 3a 49 63 6f 53 6c 31 25 |%,16,11):IcoSl1%| 00004920 3d 31 38 3a f2 61 64 64 69 63 28 44 46 63 61 25 |=18:.addic(DFca%| 00004930 2c 77 25 2c 31 39 2c 31 31 29 0d 13 a6 25 49 63 |,w%,19,11)...%Ic| 00004940 6f 53 6c 32 25 3d 32 31 3a f2 61 64 64 69 63 28 |oSl2%=21:.addic(| 00004950 44 46 63 6c 25 2c 77 25 2c 32 32 2c 31 31 29 0d |DFcl%,w%,22,11).| 00004960 13 b0 26 f2 6c 6f 61 64 77 69 6e 28 22 63 6f 6e |..&.loadwin("con| 00004970 74 72 6f 6c 22 2c 77 69 6e 5f 63 6f 6e 74 72 6f |trol",win_contro| 00004980 6c 25 2c 32 29 0d 13 ba 72 77 25 3d 77 69 6e 5f |l%,2)...rw%=win_| 00004990 63 6f 6e 74 72 6f 6c 25 3a f2 61 64 64 69 63 28 |control%:.addic(| 000049a0 52 42 69 74 73 25 2c 77 25 2c 31 2c 35 29 3a f2 |RBits%,w%,1,5):.| 000049b0 61 64 64 69 63 28 52 53 74 6f 72 65 25 2c 77 25 |addic(RStore%,w%| 000049c0 2c 37 2c 32 29 3a f2 61 64 64 69 63 28 52 55 6e |,7,2):.addic(RUn| 000049d0 54 6f 25 2c 77 25 2c 31 30 2c 32 29 3a f2 61 64 |To%,w%,10,2):.ad| 000049e0 64 69 63 28 52 52 65 63 72 65 61 74 65 25 2c 77 |dic(RRecreate%,w| 000049f0 25 2c 31 33 2c 33 29 0d 13 c4 1b c8 99 20 22 57 |%,13,3)...... "W| 00004a00 69 6d 70 5f 43 6c 6f 73 65 54 65 6d 70 6c 61 74 |imp_CloseTemplat| 00004a10 65 22 0d 13 ce 19 f4 20 4c 6f 61 64 20 6d 65 6e |e"..... Load men| 00004a20 75 20 73 74 72 75 63 74 75 72 65 0d 13 d8 39 c8 |u structure...9.| 00004a30 99 20 22 4f 53 5f 46 69 6c 65 22 2c 35 2c 22 3c |. "OS_File",5,"<| 00004a40 50 61 63 6b 44 69 72 24 44 69 72 3e 2e 4d 65 6e |PackDir$Dir>.Men| 00004a50 75 53 74 72 75 63 74 22 20 b8 20 2c 2c 2c 2c 73 |uStruct" . ,,,,s| 00004a60 6c 65 6e 25 0d 13 e2 17 de 20 4d 65 6e 75 53 74 |len%..... MenuSt| 00004a70 72 75 63 74 25 20 73 6c 65 6e 25 0d 13 ec 3b c8 |ruct% slen%...;.| 00004a80 99 20 22 4f 53 5f 46 69 6c 65 22 2c 32 35 35 2c |. "OS_File",255,| 00004a90 22 3c 50 61 63 6b 44 69 72 24 44 69 72 3e 2e 4d |"<PackDir$Dir>.M| 00004aa0 65 6e 75 53 74 72 75 63 74 22 2c 4d 65 6e 75 53 |enuStruct",MenuS| 00004ab0 74 72 75 63 74 25 0d 13 f6 37 c8 99 20 22 4f 53 |truct%...7.. "OS| 00004ac0 5f 46 69 6c 65 22 2c 35 2c 22 3c 50 61 63 6b 44 |_File",5,"<PackD| 00004ad0 69 72 24 44 69 72 3e 2e 4d 65 6e 75 44 61 74 61 |ir$Dir>.MenuData| 00004ae0 22 20 b8 20 2c 2c 2c 2c 64 6c 65 6e 25 0d 14 00 |" . ,,,,dlen%...| 00004af0 15 de 20 4d 65 6e 75 44 61 74 61 25 20 64 6c 65 |.. MenuData% dle| 00004b00 6e 25 0d 14 0a 37 c8 99 20 22 4f 53 5f 46 69 6c |n%...7.. "OS_Fil| 00004b10 65 22 2c 32 35 35 2c 22 3c 50 61 63 6b 44 69 72 |e",255,"<PackDir| 00004b20 24 44 69 72 3e 2e 4d 65 6e 75 44 61 74 61 22 2c |$Dir>.MenuData",| 00004b30 4d 65 6e 75 44 61 74 61 25 0d 14 14 27 e3 20 61 |MenuData%...'. a| 00004b40 25 3d 4d 65 6e 75 53 74 72 75 63 74 25 2b 34 20 |%=MenuStruct%+4 | 00004b50 b8 20 61 25 2b 73 6c 65 6e 25 2d 38 20 88 20 34 |. a%+slen%-8 . 4| 00004b60 0d 14 1e ab 64 25 3d 21 61 25 3a e7 28 64 25 80 |....d%=!a%:.(d%.| 00004b70 26 46 46 46 30 30 30 30 30 29 3c 3e 26 44 45 41 |&FFF00000)<>&DEA| 00004b80 30 30 30 30 30 20 8b 20 6b 25 3d 28 64 25 3e 3e |00000 . k%=(d%>>| 00004b90 31 36 29 80 26 46 3a 64 25 3d 64 25 80 26 46 46 |16).&F:d%=d%.&FF| 00004ba0 46 46 3a e7 6b 25 3d 31 20 8c 20 21 61 25 3d 64 |FF:.k%=1 . !a%=d| 00004bb0 25 2b 4d 65 6e 75 53 74 72 75 63 74 25 20 8b 20 |%+MenuStruct% . | 00004bc0 e7 6b 25 3d 32 20 8c 20 21 61 25 3d 64 25 2b 4d |.k%=2 . !a%=d%+M| 00004bd0 65 6e 75 44 61 74 61 25 20 8b 20 e7 64 25 3d 31 |enuData% . .d%=1| 00004be0 20 8c 20 21 61 25 3d 77 69 6e 5f 69 6e 66 6f 25 | . !a%=win_info%| 00004bf0 20 8b 20 e7 64 25 3d 32 20 8c 20 21 61 25 3d 77 | . .d%=2 . !a%=w| 00004c00 69 6e 5f 63 6f 6e 74 72 6f 6c 25 0d 14 28 05 ed |in_control%..(..| 00004c10 0d 14 32 91 56 61 72 73 3d 8e 22 3c 50 61 63 6b |..2.Vars=."<Pack| 00004c20 44 69 72 24 44 69 72 3e 2e 4d 65 6e 75 56 61 72 |Dir$Dir>.MenuVar| 00004c30 73 22 3a c8 95 20 ac c5 23 56 61 72 73 3a 76 6e |s":.. ..#Vars:vn| 00004c40 24 3d be 23 56 61 72 73 3a 64 25 3d 9a 23 56 61 |$=.#Vars:d%=.#Va| 00004c50 72 73 3a 76 76 24 3d be 23 56 61 72 73 3a 64 25 |rs:vv$=.#Vars:d%| 00004c60 3d 9a 23 56 61 72 73 3a e7 c0 76 6e 24 2c 32 29 |=.#Vars:..vn$,2)| 00004c70 3d 22 69 64 22 20 8c 20 76 76 25 3d 4d 65 6e 75 |="id" . vv%=Menu| 00004c80 44 61 74 61 25 2b bb 76 76 24 20 8b 20 76 76 25 |Data%+.vv$ . vv%| 00004c90 3d 4d 65 6e 75 53 74 72 75 63 74 25 2b bb 76 76 |=MenuStruct%+.vv| 00004ca0 24 0d 14 3c 2d 64 25 3d a0 28 22 46 4e 63 76 61 |$..<-d%=.("FNcva| 00004cb0 72 28 22 2b 76 6e 24 2b 22 2c 22 2b c3 76 76 25 |r("+vn$+","+.vv%| 00004cc0 2b 22 29 22 29 3a ce 3a d9 23 56 61 72 73 0d 14 |+")"):.:.#Vars..| 00004cd0 46 26 4d 65 6e 75 4d 61 69 6e 25 3d 4d 65 6e 75 |F&MenuMain%=Menu| 00004ce0 53 74 72 75 63 74 25 2b 21 4d 65 6e 75 53 74 72 |Struct%+!MenuStr| 00004cf0 75 63 74 25 0d 14 50 1a f4 20 49 6e 69 74 69 61 |uct%..P.. Initia| 00004d00 6c 69 73 65 20 76 61 72 69 61 62 6c 65 73 0d 14 |lise variables..| 00004d10 5a 7d 4f 75 74 70 75 74 24 3d 22 22 3a 49 6e 70 |Z}Output$="":Inp| 00004d20 75 74 24 3d 22 22 3a 44 61 74 61 4c 6f 61 64 52 |ut$="":DataLoadR| 00004d30 65 66 25 3d a3 3a 44 61 74 61 53 61 76 65 52 65 |ef%=.:DataSaveRe| 00004d40 66 25 3d 2d 31 3a 49 6e 54 79 70 65 3d 30 3a 41 |f%=-1:InType=0:A| 00004d50 63 74 69 6f 6e 3d a3 3a 41 63 74 55 6e 61 72 63 |ction=.:ActUnarc| 00004d60 3d 31 3a 41 63 74 41 72 63 3d 32 3a 53 6c 6f 74 |=1:ActArc=2:Slot| 00004d70 44 6f 77 6e 3d a3 3a 49 6e 3d 30 3a 4f 75 74 3d |Down=.:In=0:Out=| 00004d80 30 3a 53 76 61 6c 25 28 29 3d 30 0d 14 64 1d 4c |0:Sval%()=0..d.L| 00004d90 5a 57 69 62 69 74 73 3d 31 33 3a f4 20 4c 5a 57 |ZWibits=13:. LZW| 00004da0 20 6d 61 78 62 69 74 73 0d 14 6e 7e f2 66 69 6c | maxbits..n~.fil| 00004db0 65 69 6e 66 6f 28 22 44 6f 72 6d 61 6e 74 22 2c |einfo("Dormant",| 00004dc0 22 22 2c 22 22 2c 22 22 2c 22 2d 22 2c 22 2d 22 |"","","","-","-"| 00004dd0 2c 22 2d 22 2c 22 2d 22 2c 22 2d 22 2c 22 2d 22 |,"-","-","-","-"| 00004de0 2c 22 2d 22 29 3a f2 72 69 63 28 52 42 69 74 73 |,"-"):.ric(RBits| 00004df0 25 2c 32 29 3a f2 72 69 63 28 52 53 74 6f 72 65 |%,2):.ric(RStore| 00004e00 25 2c 31 29 3a f2 72 69 63 28 52 55 6e 54 6f 25 |%,1):.ric(RUnTo%| 00004e10 2c 31 29 3a f2 72 69 63 28 52 52 65 63 72 65 61 |,1):.ric(RRecrea| 00004e20 74 65 25 2c 31 29 0d 14 78 05 e1 0d 14 82 04 0d |te%,1)..x.......| 00004e30 14 8c 20 dd f2 6c 6f 61 64 77 69 6e 28 6e 61 6d |.. ..loadwin(nam| 00004e40 65 24 2c f8 20 77 69 6e 25 2c 73 65 74 25 29 0d |e$,. win%,set%).| 00004e50 14 96 30 f4 20 4c 6f 61 64 73 20 77 69 6e 64 6f |..0. Loads windo| 00004e60 77 20 74 65 6d 70 6c 61 74 65 20 28 73 65 65 20 |w template (see | 00004e70 50 52 4f 43 69 6e 69 74 69 61 6c 69 73 65 29 0d |PROCinitialise).| 00004e80 14 a0 0a ea 20 69 63 6f 25 0d 14 aa 39 24 44 75 |.... ico%...9$Du| 00004e90 6d 25 3d 6e 61 6d 65 24 3a c8 99 20 57 4c 6f 61 |m%=name$:.. WLoa| 00004ea0 64 54 25 2c 2c 57 69 6e 64 6f 77 2c 69 63 2c 69 |dT%,,Window,ic,i| 00004eb0 65 2c 2d 31 2c 44 75 6d 25 2c 30 20 b8 20 2c 2c |e,-1,Dum%,0 . ,,| 00004ec0 69 63 0d 14 b4 11 e7 73 65 74 25 3e 3d 26 31 30 |ic.....set%>=&10| 00004ed0 30 20 8c 0d 14 be 3d 20 69 63 6f 25 3d 28 73 65 |0 ....= ico%=(se| 00004ee0 74 25 3e 3e 3e 38 29 2d 31 3a 57 69 6e 64 6f 77 |t%>>>8)-1:Window| 00004ef0 21 28 38 38 2b 33 32 2a 69 63 6f 25 2b 32 34 29 |!(88+32*ico%+24)| 00004f00 3d 31 3a 73 65 74 25 3d 73 65 74 25 80 26 46 46 |=1:set%=set%.&FF| 00004f10 0d 14 c8 05 cd 0d 14 d2 0d c8 8e 20 73 65 74 25 |........... set%| 00004f20 20 ca 0d 14 dc 2c 20 c9 20 32 20 3a 20 57 69 6e | ...., . 2 : Win| 00004f30 64 6f 77 21 36 34 3d 49 63 6f 6e 53 70 72 3a f4 |dow!64=IconSpr:.| 00004f40 20 4c 6f 63 61 6c 20 61 72 65 61 70 74 72 0d 14 | Local areaptr..| 00004f50 e6 25 20 c9 20 33 20 3a 20 57 69 6e 64 6f 77 21 |.% . 3 : Window!| 00004f60 36 34 3d 31 3a f4 20 57 49 4d 50 20 61 72 65 61 |64=1:. WIMP area| 00004f70 70 74 72 0d 14 f0 05 cb 0d 14 fa 1f c8 99 20 57 |ptr........... W| 00004f80 43 72 65 61 74 65 57 25 2c 2c 57 69 6e 64 6f 77 |CreateW%,,Window| 00004f90 20 b8 20 77 69 6e 25 0d 15 04 05 e1 0d 15 0e 04 | . win%.........| 00004fa0 0d 15 18 16 dd a4 61 69 63 6f 6e 28 77 69 6e 25 |......aicon(win%| 00004fb0 2c 69 63 6f 25 29 0d 15 22 2c f4 20 52 65 74 75 |,ico%)..",. Retu| 00004fc0 72 6e 73 20 69 6e 64 69 72 65 63 74 65 64 20 69 |rns indirected i| 00004fd0 63 6f 6e 27 73 20 64 61 74 61 20 61 64 64 72 65 |con's data addre| 00004fe0 73 73 0d 15 2c 3e 21 42 6c 6f 63 6b 3d 77 69 6e |ss..,>!Block=win| 00004ff0 25 3a 42 6c 6f 63 6b 21 34 3d 69 63 6f 25 3a c8 |%:Block!4=ico%:.| 00005000 99 20 57 47 65 74 49 53 25 2c 2c 42 6c 6f 63 6b |. WGetIS%,,Block| 00005010 3a f4 20 47 65 74 20 69 63 6f 6e 20 69 6e 66 6f |:. Get icon info| 00005020 0d 15 36 0d 3d 42 6c 6f 63 6b 21 32 38 0d 15 40 |..6.=Block!28..@| 00005030 04 0d 15 4a 23 dd f2 61 64 64 69 63 28 f8 20 69 |...J#..addic(. i| 00005040 6e 72 25 2c 77 69 6e 25 2c 69 63 6f 25 2c 69 6e |nr%,win%,ico%,in| 00005050 66 6f 25 29 0d 15 54 1c f4 20 41 64 64 73 20 69 |fo%)..T.. Adds i| 00005060 63 6f 6e 20 74 6f 20 69 63 6f 6e 20 6c 69 73 74 |con to icon list| 00005070 0d 15 5e 46 69 6e 72 25 3d a4 6e 72 3a 49 63 6f |..^Finr%=.nr:Ico| 00005080 6e 25 28 69 6e 72 25 2c 30 29 3d 77 69 6e 25 3a |n%(inr%,0)=win%:| 00005090 49 63 6f 6e 25 28 69 6e 72 25 2c 31 29 3d 69 63 |Icon%(inr%,1)=ic| 000050a0 6f 25 3a 49 63 6f 6e 25 28 69 6e 72 25 2c 32 29 |o%:Icon%(inr%,2)| 000050b0 3d 69 6e 66 6f 25 0d 15 68 05 e1 0d 15 72 04 0d |=info%..h....r..| 000050c0 15 7c 13 dd f2 72 69 63 28 6e 72 25 2c 69 63 73 |.|...ric(nr%,ics| 000050d0 25 29 0d 15 86 1b f4 20 53 65 74 73 20 72 61 64 |%)..... Sets rad| 000050e0 69 6f 20 69 63 6f 6e 20 73 74 61 74 65 0d 15 90 |io icon state...| 000050f0 0b ea 20 69 25 2c 66 25 0d 15 9a 19 e3 20 69 25 |.. i%,f%..... i%| 00005100 3d 31 20 b8 20 49 63 6f 6e 25 28 6e 72 25 2c 32 |=1 . Icon%(nr%,2| 00005110 29 0d 15 a4 1a e7 69 25 3d 69 63 73 25 20 8c 20 |).....i%=ics% . | 00005120 66 25 3d 31 20 8b 20 66 25 3d 30 0d 15 ae 47 21 |f%=1 . f%=0...G!| 00005130 49 62 6c 3d 49 63 6f 6e 25 28 6e 72 25 2c 30 29 |Ibl=Icon%(nr%,0)| 00005140 3a 49 62 6c 21 34 3d 69 25 2b 49 63 6f 6e 25 28 |:Ibl!4=i%+Icon%(| 00005150 6e 72 25 2c 31 29 2d 31 3a 49 62 6c 21 38 3d 66 |nr%,1)-1:Ibl!8=f| 00005160 25 3c 3c 32 31 3a 49 62 6c 21 31 32 3d 31 3c 3c |%<<21:Ibl!12=1<<| 00005170 32 31 0d 15 b8 2e c8 99 20 57 53 65 74 49 53 25 |21...... WSetIS%| 00005180 2c 2c 49 62 6c 3a f4 20 53 65 74 20 69 63 6f 6e |,,Ibl:. Set icon| 00005190 20 73 65 6c 65 63 74 69 6f 6e 20 73 74 61 74 65 | selection state| 000051a0 0d 15 c2 05 ed 0d 15 cc 05 e1 0d 15 d6 04 0d 15 |................| 000051b0 e0 0e dd a4 72 69 63 28 6e 72 25 29 0d 15 ea 1e |....ric(nr%)....| 000051c0 f4 20 52 65 74 75 72 6e 73 20 72 61 64 69 6f 20 |. Returns radio | 000051d0 69 63 6f 6e 20 73 74 61 74 65 0d 15 f4 0e ea 20 |icon state..... | 000051e0 69 25 2c 6e 25 2c 76 25 0d 15 fe 19 e3 20 69 25 |i%,n%,v%..... i%| 000051f0 3d 31 20 b8 20 49 63 6f 6e 25 28 6e 72 25 2c 32 |=1 . Icon%(nr%,2| 00005200 29 0d 16 08 2d 21 49 62 6c 3d 49 63 6f 6e 25 28 |)...-!Ibl=Icon%(| 00005210 6e 72 25 2c 30 29 3a 49 62 6c 21 34 3d 69 25 2b |nr%,0):Ibl!4=i%+| 00005220 49 63 6f 6e 25 28 6e 72 25 2c 31 29 2d 31 0d 16 |Icon%(nr%,1)-1..| 00005230 12 24 c8 99 20 57 47 65 74 49 53 25 2c 2c 49 62 |.$.. WGetIS%,,Ib| 00005240 6c 3a f4 20 47 65 74 20 69 63 6f 6e 20 73 74 61 |l:. Get icon sta| 00005250 74 65 0d 16 1c 2a e7 28 28 49 62 6c 21 32 34 29 |te...*.((Ibl!24)| 00005260 20 80 20 28 31 3c 3c 32 31 29 29 3e 30 20 8c 20 | . (1<<21))>0 . | 00005270 76 25 3d 69 25 3a f4 20 4f 6e 20 3f 0d 16 26 05 |v%=i%:. On ?..&.| 00005280 ed 0d 16 30 07 3d 76 25 0d 16 3a 04 0d 16 44 1b |...0.=v%..:...D.| 00005290 dd a4 6f 62 69 74 73 3d 31 31 2b a4 72 69 63 28 |..obits=11+.ric(| 000052a0 52 42 69 74 73 25 29 0d 16 4e 17 dd a4 75 6e 74 |RBits%)..N...unt| 000052b0 6f 3d a4 72 69 63 28 52 55 6e 54 6f 25 29 0d 16 |o=.ric(RUnTo%)..| 000052c0 58 1b dd a4 6f 72 65 63 3d a4 72 69 63 28 52 52 |X...orec=.ric(RR| 000052d0 65 63 72 65 61 74 65 25 29 0d 16 62 18 dd a4 6f |ecreate%)..b...o| 000052e0 73 74 6f 3d a4 72 69 63 28 52 53 74 6f 72 65 25 |sto=.ric(RStore%| 000052f0 29 0d 16 6c 04 0d 16 76 11 dd f2 64 69 63 28 6e |)..l...v...dic(n| 00005300 72 25 2c 64 24 29 0d 16 80 1a f4 20 53 65 74 73 |r%,d$)..... Sets| 00005310 20 64 61 74 61 20 69 63 6f 6e 20 73 74 61 74 65 | data icon state| 00005320 0d 16 8a 0b ea 20 61 25 2c 6c 25 0d 16 94 28 21 |..... a%,l%...(!| 00005330 49 62 6c 3d 49 63 6f 6e 25 28 6e 72 25 2c 30 29 |Ibl=Icon%(nr%,0)| 00005340 3a 49 62 6c 21 34 3d 49 63 6f 6e 25 28 6e 72 25 |:Ibl!4=Icon%(nr%| 00005350 2c 31 29 0d 16 9e 24 c8 99 20 57 47 65 74 49 53 |,1)...$.. WGetIS| 00005360 25 2c 2c 49 62 6c 3a f4 20 47 65 74 20 69 63 6f |%,,Ibl:. Get ico| 00005370 6e 20 73 74 61 74 65 0d 16 a8 36 61 25 3d 49 62 |n state...6a%=Ib| 00005380 6c 21 32 38 3a 6c 25 3d 49 62 6c 21 33 36 2d 31 |l!28:l%=Ibl!36-1| 00005390 3a f4 20 41 64 64 72 65 73 73 20 26 20 61 6c 6c |:. Address & all| 000053a0 6f 63 61 74 65 64 20 6c 65 6e 67 74 68 0d 16 b2 |ocated length...| 000053b0 35 e7 49 63 6f 6e 25 28 6e 72 25 2c 32 29 3c 6c |5.Icon%(nr%,2)<l| 000053c0 25 20 8c 20 6c 25 3d 49 63 6f 6e 25 28 6e 72 25 |% . l%=Icon%(nr%| 000053d0 2c 32 29 3a f4 20 4c 69 6d 69 74 20 6c 65 6e 67 |,2):. Limit leng| 000053e0 74 68 0d 16 bc 1c 24 61 25 3d c0 64 24 2c 6c 25 |th....$a%=.d$,l%| 000053f0 29 3a f4 20 57 72 69 74 65 20 64 61 74 61 0d 16 |):. Write data..| 00005400 c6 32 49 62 6c 21 38 3d 30 3a 49 62 6c 21 31 32 |.2Ibl!8=0:Ibl!12| 00005410 3d 30 3a c8 99 20 57 53 65 74 49 53 25 2c 2c 49 |=0:.. WSetIS%,,I| 00005420 62 6c 3a f4 20 55 70 64 61 74 65 20 69 63 6f 6e |bl:. Update icon| 00005430 0d 16 d0 05 e1 0d 16 da 04 0d 16 e4 0e dd a4 64 |...............d| 00005440 69 63 28 6e 72 25 29 0d 16 ee 1d f4 20 52 65 74 |ic(nr%)..... Ret| 00005450 75 72 6e 73 20 64 61 74 61 20 69 63 6f 6e 20 73 |urns data icon s| 00005460 74 61 74 65 0d 16 f8 0b ea 20 61 25 2c 6c 25 0d |tate..... a%,l%.| 00005470 17 02 28 21 49 62 6c 3d 49 63 6f 6e 25 28 6e 72 |..(!Ibl=Icon%(nr| 00005480 25 2c 30 29 3a 49 62 6c 21 34 3d 49 63 6f 6e 25 |%,0):Ibl!4=Icon%| 00005490 28 6e 72 25 2c 31 29 0d 17 0c 24 c8 99 20 57 47 |(nr%,1)...$.. WG| 000054a0 65 74 49 53 25 2c 2c 49 62 6c 3a f4 20 47 65 74 |etIS%,,Ibl:. Get| 000054b0 20 69 63 6f 6e 20 73 74 61 74 65 0d 17 16 1d 61 | icon state....a| 000054c0 25 3d 49 62 6c 21 32 38 3a 6c 25 3d 49 63 6f 6e |%=Ibl!28:l%=Icon| 000054d0 25 28 6e 72 25 2c 32 29 0d 17 20 15 3d c0 a4 73 |%(nr%,2).. .=..s| 000054e0 74 72 69 6e 67 28 61 25 29 2c 6c 25 29 0d 17 2a |tring(a%),l%)..*| 000054f0 04 0d 17 34 3a dd f2 66 69 6c 65 69 6e 66 6f 28 |...4:..fileinfo(| 00005500 61 63 24 2c 6f 72 24 2c 6e 77 24 2c 66 69 24 2c |ac$,or$,nw$,fi$,| 00005510 6c 24 2c 72 66 24 2c 72 74 24 2c 62 69 24 2c 63 |l$,rf$,rt$,bi$,c| 00005520 6c 24 2c 63 61 24 2c 69 74 24 29 0d 17 3e 29 f4 |l$,ca$,it$)..>).| 00005530 20 53 65 74 73 20 62 61 73 69 63 20 69 6e 66 6f | Sets basic info| 00005540 20 69 6e 20 66 69 6c 65 20 69 6e 66 6f 20 77 69 | in file info wi| 00005550 6e 64 6f 77 0d 17 48 79 f2 64 69 63 28 44 46 61 |ndow..Hy.dic(DFa| 00005560 63 25 2c 61 63 24 29 3a f2 64 69 63 28 44 46 6f |c%,ac$):.dic(DFo| 00005570 72 25 2c 6f 72 24 29 3a f2 64 69 63 28 44 46 6e |r%,or$):.dic(DFn| 00005580 77 25 2c 6e 77 24 29 3a f2 64 69 63 28 44 46 66 |w%,nw$):.dic(DFf| 00005590 6e 25 2c 66 69 24 29 3a f2 64 69 63 28 44 46 6c |n%,fi$):.dic(DFl| 000055a0 65 6e 25 2c 6c 24 29 3a f2 64 69 63 28 44 46 63 |en%,l$):.dic(DFc| 000055b0 6f 6d 70 66 25 2c 72 66 24 29 3a f2 64 69 63 28 |ompf%,rf$):.dic(| 000055c0 44 46 63 6f 6d 70 74 25 2c 72 74 24 29 0d 17 52 |DFcompt%,rt$)..R| 000055d0 6a f2 64 69 63 28 44 46 62 69 74 73 25 2c 62 69 |j.dic(DFbits%,bi| 000055e0 24 29 3a f2 64 69 63 28 44 46 63 6c 25 2c 63 6c |$):.dic(DFcl%,cl| 000055f0 24 29 3a f2 64 69 63 28 44 46 63 61 25 2c 63 61 |$):.dic(DFca%,ca| 00005600 24 29 3a f2 64 69 63 28 44 46 69 74 65 6d 73 25 |$):.dic(DFitems%| 00005610 2c 69 74 24 29 3a f2 73 6c 69 64 65 72 28 31 2c |,it$):.slider(1,| 00005620 2d 31 2c 2d 31 29 3a f2 73 6c 69 64 65 72 28 32 |-1,-1):.slider(2| 00005630 2c 2d 31 2c 2d 31 29 0d 17 5c 05 e1 0d 17 66 04 |,-1,-1)..\....f.| 00005640 0d 17 70 1b dd f2 73 6c 69 64 65 72 28 6e 72 25 |..p...slider(nr%| 00005650 2c 76 61 6c 31 2c 76 61 6c 32 29 0d 17 7a 21 f4 |,val1,val2)..z!.| 00005660 20 41 64 6a 75 73 74 73 20 73 6c 69 64 65 72 20 | Adjusts slider | 00005670 74 6f 20 6e 65 77 20 76 61 6c 75 65 0d 17 84 23 |to new value...#| 00005680 ea 20 72 30 2c 72 31 2c 72 32 2c 72 33 2c 69 63 |. r0,r1,r2,r3,ic| 00005690 6f 25 2c 63 6f 6c 25 2c 76 31 25 2c 76 32 25 0d |o%,col%,v1%,v2%.| 000056a0 17 8e 1d 76 31 25 3d 76 61 6c 31 2a 34 30 30 3a |...v1%=val1*400:| 000056b0 76 32 25 3d 76 61 6c 32 2a 34 30 30 0d 17 98 2d |v2%=val2*400...-| 000056c0 e7 76 31 25 3d 53 76 61 6c 25 28 6e 72 25 2c 30 |.v1%=Sval%(nr%,0| 000056d0 29 20 8c 20 e7 76 32 25 3d 53 76 61 6c 25 28 6e |) . .v2%=Sval%(n| 000056e0 72 25 2c 31 29 20 8c 20 e1 0d 17 a2 25 53 76 61 |r%,1) . ....%Sva| 000056f0 6c 25 28 6e 72 25 2c 30 29 3d 76 31 25 3a 53 76 |l%(nr%,0)=v1%:Sv| 00005700 61 6c 25 28 6e 72 25 2c 31 29 3d 76 32 25 0d 17 |al%(nr%,1)=v2%..| 00005710 ac 38 e7 6e 72 25 3d 31 20 8c 20 69 63 6f 25 3d |.8.nr%=1 . ico%=| 00005720 49 63 6f 53 6c 31 25 3a 63 6f 6c 25 3d 31 30 20 |IcoSl1%:col%=10 | 00005730 8b 20 69 63 6f 25 3d 49 63 6f 53 6c 32 25 3a 63 |. ico%=IcoSl2%:c| 00005740 6f 6c 25 3d 31 31 0d 17 b6 3b c8 99 20 4f 53 53 |ol%=11...;.. OSS| 00005750 70 6f 70 25 2c 36 30 2b 32 35 36 2c 49 63 6f 6e |pop%,60+256,Icon| 00005760 53 70 72 2c 22 73 6c 69 64 65 72 22 2b c3 6e 72 |Spr,"slider"+.nr| 00005770 25 2c 30 20 b8 20 72 30 2c 72 31 2c 72 32 2c 72 |%,0 . r0,r1,r2,r| 00005780 33 0d 17 c0 1c e7 28 76 61 6c 31 3d 2d 31 29 20 |3.....(val1=-1) | 00005790 80 20 28 76 61 6c 32 3d 2d 31 29 20 8c 0d 17 ca |. (val2=-1) ....| 000057a0 1e 20 e6 20 30 2c 30 3a ec 20 31 36 2c 31 36 3a |. . 0,0:. 16,16:| 000057b0 f0 20 39 37 2c 38 30 30 2c 31 38 0d 17 d4 0d cc |. 97,800,18.....| 000057c0 20 ec 20 31 36 2c 31 36 0d 17 de 2e 20 e7 76 31 | . 16,16.... .v1| 000057d0 25 3e 30 20 8c 20 e6 20 30 2c 63 6f 6c 25 3a f0 |%>0 . . 0,col%:.| 000057e0 20 39 37 2c 76 31 25 2a 32 2c 31 38 3a f0 20 30 | 97,v1%*2,18:. 0| 000057f0 2c 32 2c 2d 31 38 0d 17 e8 22 20 e7 76 32 25 3e |,2,-18..." .v2%>| 00005800 30 20 8c 20 e6 20 30 2c 31 32 3a f0 20 39 37 2c |0 . . 0,12:. 97,| 00005810 76 32 25 2a 32 2c 31 38 0d 17 f2 05 cd 0d 17 fc |v2%*2,18........| 00005820 1a c8 99 20 4f 53 53 70 6f 70 25 2c 72 30 2c 72 |... OSSpop%,r0,r| 00005830 31 2c 72 32 2c 72 33 0d 18 06 42 21 49 62 6c 3d |1,r2,r3...B!Ibl=| 00005840 77 69 6e 5f 66 69 6c 65 69 6e 66 6f 25 3a 49 62 |win_fileinfo%:Ib| 00005850 6c 21 34 3d 69 63 6f 25 3a 49 62 6c 21 38 3d 30 |l!4=ico%:Ibl!8=0| 00005860 3a 49 62 6c 21 31 32 3d 30 3a c8 99 20 57 53 65 |:Ibl!12=0:.. WSe| 00005870 74 49 53 25 2c 2c 49 62 6c 0d 18 10 05 e1 0d 18 |tIS%,,Ibl.......| 00005880 1a 04 0d 18 24 08 dd a4 6e 72 0d 18 2e 21 f4 20 |....$...nr...!. | 00005890 49 6e 63 72 65 6d 65 6e 74 73 20 4e 72 25 20 26 |Increments Nr% &| 000058a0 20 72 65 74 75 72 6e 73 20 69 74 0d 18 38 0f 4e | returns it..8.N| 000058b0 72 25 2b 3d 31 3a 3d 4e 72 25 0d 18 42 04 0d 18 |r%+=1:=Nr%..B...| 000058c0 4c 17 dd a4 63 76 61 72 28 f8 20 76 61 72 25 2c |L...cvar(. var%,| 000058d0 76 61 6c 25 29 0d 18 56 2b f4 20 43 72 65 61 74 |val%)..V+. Creat| 000058e0 65 73 20 6e 65 77 20 76 61 72 69 61 62 6c 65 20 |es new variable | 000058f0 76 61 72 25 2c 20 76 61 6c 75 65 20 76 61 6c 25 |var%, value val%| 00005900 0d 18 60 10 76 61 72 25 3d 76 61 6c 25 3a 3d 30 |..`.var%=val%:=0| 00005910 0d 18 6a 04 0d 18 74 1a dd a4 6d 6f 64 65 5f 76 |..j...t...mode_v| 00005920 61 72 28 6d 6f 64 65 25 2c 76 61 72 25 29 0d 18 |ar(mode%,var%)..| 00005930 7e 1b f4 20 52 65 74 75 72 6e 73 20 6d 6f 64 65 |~.. Returns mode| 00005940 20 76 61 72 69 61 62 6c 65 0d 18 88 0a ea 20 76 | variable..... v| 00005950 61 6c 25 0d 18 92 30 c8 99 20 22 4f 53 5f 52 65 |al%...0.. "OS_Re| 00005960 61 64 4d 6f 64 65 56 61 72 69 61 62 6c 65 22 2c |adModeVariable",| 00005970 6d 6f 64 65 25 2c 76 61 72 25 20 b8 20 2c 2c 76 |mode%,var% . ,,v| 00005980 61 6c 25 0d 18 9c 09 3d 76 61 6c 25 0d 18 a6 04 |al%....=val%....| 00005990 0d 18 b0 0e dd a4 6c 65 61 66 28 70 24 29 0d 18 |......leaf(p$)..| 000059a0 ba 1e f4 20 52 65 74 75 72 6e 73 20 6c 65 61 66 |... Returns leaf| 000059b0 20 6f 66 20 70 61 74 68 6e 61 6d 65 0d 18 c4 0b | of pathname....| 000059c0 ea 20 70 25 2c 70 64 0d 18 ce 4c 70 25 3d a9 70 |. p%,pd...Lp%=.p| 000059d0 24 3a f5 20 70 25 2d 3d 31 3a 70 64 3d 28 c1 70 |$:. p%-=1:pd=(.p| 000059e0 24 2c 70 25 2c 31 29 3d 22 2e 22 29 3a fd 20 28 |$,p%,1)="."):. (| 000059f0 70 25 3d 31 29 20 84 20 70 64 3a e7 70 64 20 8c |p%=1) . pd:.pd .| 00005a00 20 3d c2 70 24 2c a9 70 24 2d 70 25 29 20 8b 20 | =.p$,.p$-p%) . | 00005a10 3d 22 22 0d 18 d8 05 20 0d 18 e2 0e dd a4 68 65 |="".... ......he| 00005a20 61 64 28 70 24 29 0d 18 ec 1e f4 20 52 65 74 75 |ad(p$)..... Retu| 00005a30 72 6e 73 20 68 65 61 64 20 6f 66 20 70 61 74 68 |rns head of path| 00005a40 6e 61 6d 65 0d 18 f6 0b ea 20 70 25 2c 70 64 0d |name..... p%,pd.| 00005a50 19 00 4a 70 25 3d a9 70 24 3a f5 20 70 25 2d 3d |..Jp%=.p$:. p%-=| 00005a60 31 3a 70 64 3d 28 c1 70 24 2c 70 25 2c 31 29 3d |1:pd=(.p$,p%,1)=| 00005a70 22 2e 22 29 3a fd 20 28 70 25 3d 31 29 20 84 20 |"."):. (p%=1) . | 00005a80 70 64 3a e7 70 64 20 8c 20 3d c0 70 24 2c 70 25 |pd:.pd . =.p$,p%| 00005a90 2d 31 29 20 8b 20 3d 70 24 0d 19 0a 04 0d 19 14 |-1) . =p$.......| 00005aa0 11 dd a4 70 65 72 63 28 6d 25 2c 64 25 29 0d 19 |...perc(m%,d%)..| 00005ab0 1e 29 f4 20 52 65 74 75 72 6e 73 20 27 73 61 66 |.). Returns 'saf| 00005ac0 65 27 20 70 65 72 63 65 6e 74 61 67 65 20 31 30 |e' percentage 10| 00005ad0 30 2a 6d 25 2f 64 25 0d 19 28 20 e7 64 25 3d 30 |0*m%/d%..( .d%=0| 00005ae0 20 8c 20 3d 31 30 30 20 8b 20 3d a8 28 31 30 30 | . =100 . =.(100| 00005af0 2a 6d 25 2f 64 25 29 0d 19 32 05 20 0d 19 3c 13 |*m%/d%)..2. ..<.| 00005b00 dd a4 73 74 72 69 6e 67 28 61 64 64 72 25 29 0d |..string(addr%).| 00005b10 19 46 32 f4 20 52 65 74 75 72 6e 73 20 43 54 52 |.F2. Returns CTR| 00005b20 4c 2d 63 68 61 72 20 74 65 72 6d 69 6e 61 74 65 |L-char terminate| 00005b30 64 20 73 74 72 69 6e 67 20 61 74 20 61 64 64 72 |d string at addr| 00005b40 25 0d 19 50 0f ea 20 5f 25 2c 5f 63 25 2c 5f 24 |%..P.. _%,_c%,_$| 00005b50 0d 19 5a 1f 5f 25 3d 2d 31 3a f5 20 5f 25 2b 3d |..Z._%=-1:. _%+=| 00005b60 31 3a fd 20 61 64 64 72 25 3f 5f 25 3c 33 32 0d |1:. addr%?_%<32.| 00005b70 19 64 33 5f 63 25 3d 61 64 64 72 25 3f 5f 25 3a |.d3_c%=addr%?_%:| 00005b80 61 64 64 72 25 3f 5f 25 3d 31 33 3a 5f 24 3d 24 |addr%?_%=13:_$=$| 00005b90 61 64 64 72 25 3a 61 64 64 72 25 3f 5f 25 3d 5f |addr%:addr%?_%=_| 00005ba0 63 25 0d 19 6e 07 3d 5f 24 0d 19 78 04 0d 19 82 |c%..n.=_$..x....| 00005bb0 1d dd f2 6d 6f 75 73 65 28 f8 20 78 25 2c f8 20 |...mouse(. x%,. | 00005bc0 79 25 2c f8 20 62 75 74 25 29 0d 19 8c 2b f4 20 |y%,. but%)...+. | 00005bd0 52 65 74 75 72 6e 73 20 78 2c 79 20 61 6e 64 20 |Returns x,y and | 00005be0 62 75 74 74 6f 6e 20 73 74 61 74 65 20 6f 66 20 |button state of | 00005bf0 6d 6f 75 73 65 0d 19 96 11 c8 97 20 78 25 2c 79 |mouse...... x%,y| 00005c00 25 2c 62 75 74 25 0d 19 a0 05 e1 0d 19 aa 05 20 |%,but%......... | 00005c10 0d 19 b4 0d dd f2 68 6f 75 72 5f 6f 6e 0d 19 be |......hour_on...| 00005c20 18 f4 20 54 75 72 6e 73 20 68 6f 75 72 67 6c 61 |.. Turns hourgla| 00005c30 73 73 20 6f 6e 0d 19 c8 15 c8 99 20 22 48 6f 75 |ss on...... "Hou| 00005c40 72 67 6c 61 73 73 5f 4f 6e 22 0d 19 d2 1f c8 99 |rglass_On"......| 00005c50 20 22 48 6f 75 72 67 6c 61 73 73 5f 50 65 72 63 | "Hourglass_Perc| 00005c60 65 6e 74 61 67 65 22 2c 30 0d 19 dc 05 e1 0d 19 |entage",0.......| 00005c70 e6 05 20 0d 19 f0 0e dd f2 68 6f 75 72 5f 6f 66 |.. ......hour_of| 00005c80 66 0d 19 fa 19 f4 20 54 75 72 6e 73 20 68 6f 75 |f..... Turns hou| 00005c90 72 67 6c 61 73 73 20 6f 66 66 0d 1a 04 16 c8 99 |rglass off......| 00005ca0 20 22 48 6f 75 72 67 6c 61 73 73 5f 4f 66 66 22 | "Hourglass_Off"| 00005cb0 0d 1a 0e 05 e1 0d 1a 18 05 20 0d 1a 22 12 dd a4 |......... .."...| 00005cc0 4f 53 76 61 72 28 6e 61 6d 65 24 29 0d 1a 2c 2e |OSvar(name$)..,.| 00005cd0 f4 20 41 74 74 65 6d 70 74 73 20 74 6f 20 72 65 |. Attempts to re| 00005ce0 74 75 72 6e 20 4f 53 2d 76 61 72 27 73 20 73 74 |turn OS-var's st| 00005cf0 72 69 6e 67 20 76 61 6c 75 65 0d 1a 36 0d ea 20 |ring value..6.. | 00005d00 5f 72 24 2c 5f 6c 25 0d 1a 40 43 5f 72 24 3d c4 |_r$,_l%..@C_r$=.| 00005d10 31 30 30 2c 22 20 22 29 3a c8 99 20 22 58 4f 53 |100," "):.. "XOS| 00005d20 5f 52 65 61 64 56 61 72 56 61 6c 22 2c 6e 61 6d |_ReadVarVal",nam| 00005d30 65 24 2c 5f 72 24 2c a9 5f 72 24 2c 30 2c 33 20 |e$,_r$,._r$,0,3 | 00005d40 b8 20 2c 5f 72 24 2c 5f 6c 25 0d 1a 4a 0e 3d c0 |. ,_r$,_l%..J.=.| 00005d50 5f 72 24 2c 5f 6c 25 29 0d 1a 54 04 0d 1a 5e 15 |_r$,_l%)..T...^.| 00005d60 dd a4 73 77 69 5f 74 6f 5f 6e 72 28 73 77 69 24 |..swi_to_nr(swi$| 00005d70 29 0d 1a 68 29 f4 20 52 65 74 75 72 6e 73 20 53 |)..h). Returns S| 00005d80 57 49 20 6e 75 6d 62 65 72 20 6f 66 20 53 57 49 |WI number of SWI| 00005d90 20 63 61 6c 6c 20 73 77 69 24 0d 1a 72 0c ea 20 | call swi$..r.. | 00005da0 73 77 69 6e 72 25 0d 1a 7c 2f c8 99 20 22 58 4f |swinr%..|/.. "XO| 00005db0 53 5f 53 57 49 4e 75 6d 62 65 72 46 72 6f 6d 53 |S_SWINumberFromS| 00005dc0 74 72 69 6e 67 22 2c 2c 73 77 69 24 20 b8 20 73 |tring",,swi$ . s| 00005dd0 77 69 6e 72 25 0d 1a 86 0b 3d 73 77 69 6e 72 25 |winr%....=swinr%| 00005de0 0d 1a 90 05 20 0d 1a 9a 1a dd f2 65 72 72 6f 72 |.... ......error| 00005df0 28 65 72 72 6e 72 2c 65 72 72 6d 73 67 24 29 0d |(errnr,errmsg$).| 00005e00 1a a4 14 f4 20 48 61 6e 64 6c 65 73 20 65 72 72 |.... Handles err| 00005e10 6f 72 73 0d 1a ae 0f ea 20 62 75 74 25 2c 6f 70 |ors..... but%,op| 00005e20 74 25 0d 1a b8 27 e7 65 72 72 6e 72 3d 2d 31 20 |t%...'.errnr=-1 | 00005e30 8c 20 65 72 72 6e 72 3d 31 3a 6f 70 74 25 3d 31 |. errnr=1:opt%=1| 00005e40 20 8b 20 6f 70 74 25 3d 33 0d 1a c2 1f 21 45 72 | . opt%=3....!Er| 00005e50 72 3d 65 72 72 6e 72 3a 24 28 45 72 72 2b 34 29 |r=errnr:$(Err+4)| 00005e60 3d 65 72 72 6d 73 67 24 0d 1a cc 2a c8 99 20 57 |=errmsg$...*.. W| 00005e70 52 65 70 6f 72 74 25 2c 45 72 72 2c 6f 70 74 25 |Report%,Err,opt%| 00005e80 2c 61 70 70 6c 6e 61 6d 65 24 20 b8 20 2c 62 75 |,applname$ . ,bu| 00005e90 74 25 0d 1a d6 13 e7 62 75 74 25 3c 3e 31 20 8c |t%.....but%<>1 .| 00005ea0 20 f2 64 69 65 0d 1a e0 05 e1 0d 1a ea 05 20 0d | .die......... .| 00005eb0 1a f4 0c dd f2 66 69 6e 69 73 68 0d 1a fe 0f f4 |.....finish.....| 00005ec0 20 54 69 64 69 65 73 20 75 70 0d 1b 08 33 f4 20 | Tidies up...3. | 00005ed0 4b 69 6c 6c 20 6d 6f 64 75 6c 65 73 20 69 66 20 |Kill modules if | 00005ee0 6e 6f 20 6f 74 68 65 72 20 74 61 73 6b 73 20 61 |no other tasks a| 00005ef0 72 65 20 75 73 69 6e 67 20 74 68 65 6d 0d 1b 12 |re using them...| 00005f00 44 c8 99 20 22 4c 5a 57 42 5f 54 61 73 6b 51 75 |D.. "LZWB_TaskQu| 00005f10 69 74 22 20 b8 20 74 61 73 6b 73 25 3a e7 74 61 |it" . tasks%:.ta| 00005f20 73 6b 73 25 3c 3d 30 20 8c 20 c8 99 20 22 58 4f |sks%<=0 . .. "XO| 00005f30 53 5f 4d 6f 64 75 6c 65 22 2c 34 2c 22 4c 5a 57 |S_Module",4,"LZW| 00005f40 22 0d 1b 1c 51 c8 99 20 22 46 69 6c 65 42 75 66 |"...Q.. "FileBuf| 00005f50 66 65 72 5f 54 61 73 6b 51 75 69 74 22 20 b8 20 |fer_TaskQuit" . | 00005f60 74 61 73 6b 73 25 3a e7 74 61 73 6b 73 25 3c 3d |tasks%:.tasks%<=| 00005f70 30 20 8c 20 c8 99 20 22 58 4f 53 5f 4d 6f 64 75 |0 . .. "XOS_Modu| 00005f80 6c 65 22 2c 34 2c 22 46 69 6c 65 42 75 66 66 65 |le",4,"FileBuffe| 00005f90 72 22 0d 1b 26 2d c8 99 20 22 57 69 6d 70 5f 43 |r"..&-.. "Wimp_C| 00005fa0 6c 6f 73 65 44 6f 77 6e 22 2c 54 61 73 6b 48 61 |loseDown",TaskHa| 00005fb0 6e 64 6c 65 25 2c 26 34 42 35 33 34 31 35 34 0d |ndle%,&4B534154.| 00005fc0 1b 30 05 e1 0d 1b 3a 05 20 0d 1b 44 09 dd f2 64 |.0....:. ..D...d| 00005fd0 69 65 0d 1b 4e 19 f4 20 54 69 64 69 65 73 20 75 |ie..N.. Tidies u| 00005fe0 70 20 61 6e 64 20 65 78 69 74 73 0d 1b 58 0b f2 |p and exits..X..| 00005ff0 66 69 6e 69 73 68 0d 1b 62 10 c8 99 20 22 4f 53 |finish..b... "OS| 00006000 5f 45 78 69 74 22 0d 1b 6c 05 e1 0d ff |_Exit"..l....| 0000600d