home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.whtech.com
/
ftp.whtech.com.tar
/
ftp.whtech.com
/
club100
/
txt
/
crunch.ba
< prev
next >
Wrap
Text File
|
2006-10-19
|
2KB
|
31 lines
0 'Club 100 Library - 415/939-1246 BBS 937-5039 NEWSLETTER, 932-8856 VOICE
1 REM CRUNCH.BA 2/3/86 by Dan Thomas. Compress .DO files to 75% of original; SAVEd with <> extension.
5 GOTO200
10 I=ASC(INPUT$(1,1)):P=0:FORN=1TO46:IFT(N)=ITHENP=N:N=46
15 NEXT:IFP=0THENP=255
20 IFP=1THENA=1ELSEIFP<16THENB=B*2:L=L+1:GOSUB50:A=P-1:P=4ELSEB=B*32+15:L=L+5:GOSUB50
25 IFP>15THENIFP<47THENA=P-16:P=5ELSEB=B*32+31:L=L+5:GOSUB50:P=8:A=I
30 L=L+P:B=B*2^P+A:GOSUB50:IFNOTEOF(1)THEN10ELSEIFL>0THENB=B*2^(8-L):L=8:GOSUB50:GOTO500ELSE500
50 IFL<8THENRETURNELSEL=L-8:C=B:B=BAND2^L-1:V=(BXORC)/2^L:IFV=26THENV=1:S=1ELSEIFV=127THENV=2:S=1ELSEIFV=0THENV=3:S=1
60 IFS=1THENPRINT#2,CHR$(128);:X=X+1:S=0:PRINTJ;
70 PRINT#2,CHR$(V);:X=X+1:RETURN
110 V=0:IFB>=2^(L-1)THENV=T(1):L=L-1:GOTO140ELSEL=L-5:V=B/2^L:IFV=0THEN500
120 IFV<15THENV=T(V+1)ELSEB=BAND2^L-1:GOSUB150:L=L-5:V=B/2^L:IFV<31THENV=T(V+16)ELSEB=BAND2^L-1:GOSUB150:L=L-8:V=B/2^L
140 B=BAND2^L-1:PRINT#2,CHR$(V);:X=X+1:GOSUB150:GOTO110
150 IFL>7ORE=1THENRETURN
170 V=I:IFEOF(1)THENE=1ELSEI=ASC(INPUT$(1,1)):K=K+1
175 IFV=128ANDI<4THEN180ELSEB=B*256+V:L=L+8:RETURN
180 PRINTJ;:IFI=1THENI=26ELSEIFI=2THENI=127ELSEIFI=3THENI=0
190 GOTO170
200 MAXFILES=3:DEFINTA-Z:DEFSNGB:DEFSTRF-H,J:DIMT(46):K=0:X=0:I=0:V=0:L=0:B=0:P=0:A=0:N=0:R=0:S=0:C=0:E=0:M=0
210 J=CHR$(255):F="":G="":H="":CLS:PRINT:FILES:INPUT"FILENAME";F:INPUT"CRUNCH(<0>) OR EXPAND(1)";N
215 IFN=0ANDRIGHT$(F,2)<>"<>"THENG=LEFT$(F,4)+"<>"ELSEIFN=1ANDRIGHT$(F,2)="<>"THENG=LEFT$(F,LEN(F)-2)ELSE210
220 F=F+".DO":PRINT"KILL "F" WHEN DONE (Y OR <N>)";:INPUTH:OPENFFORINPUTAS1:OPENGFOROUTPUTAS2:IFN=1THEN400ELSEDIMD(127)
300 K=K+1:I=ASC(INPUT$(1,1)):IFI<128THEND(I)=D(I)+1
310 IFNOTEOF(1)THEN300ELSEFORN=1TO46:FORM=0TO127:IFD(M)>=D(T(N))THENT(N)=M
320 NEXT:PRINTJ;:X=X+1:IFT(N)<>127THENPRINT#2,CHR$(T(N));ELSEPRINT#2,CHR$(T(N-1));:N=46
330 D(T(N))=0:NEXT:CLOSE1:OPENFFORINPUTAS1:GOTO10
400 FORN=1TO46:T(N)=ASC(INPUT$(1,1)):K=K+1:IFT(N)=T(N-1)THENN=46
410 NEXT:GOSUB170:L=0:GOSUB170:GOTO110
500 BEEP:CLS:PRINT@284,F" ="K" "G".DO ="X:IFH="Y"THENKILLF