&dA
&dA &d@ Program to compress all of the files in a library using
&dA &d@ a transition table for all characters from 32 to 127 plus 24
&dA &d@ Special cases
&dA
&dA &d@ 128 = "42 46 1 0 0" 97
&dA &d@ 129 = "28 46 1 0 0" 98
&dA &d@ 130 = "12 46 1 0 0" 99
&dA &d@ 131 = "1 82 6913 " 100
&dA &d@ 132 = "0 0 0 " 101
&dA &d@ 133 = "K 0 0 " 102
&dA &d@ 134 = "1152 " 103
&dA &d@ 135 = "1729 " 104
&dA &d@ 136 = "2305 " 105
&dA &d@ 137 = "3457 " 106
&dA &d@ 138 = "4609 " 107
&dA &d@ 139 = "5185 " 108
&dA &d@ 140 = "A D " 109
&dA &d@ 141 = "J N " 110
&dA &d@ 142 = "J R " 111
&dA &d@ 143 = "J B " 112
&dA &d@ 144 = "K 0 " 113
&dA &d@ 145 = "K 1 " 114
&dA &d@ 146 = "-11 " 115
&dA &d@ 147 = "-12 " 116
&dA &d@ 148 = "-14 " 117
&dA &d@ 149 = "-15 " 118
&dA &d@ 150 = "-18 " 119
&dA &d@ 151 = "-21 " 120
&dA &d@ 152 = "-28 " 121
&dA &d@ 153 = "-32 " 122
&dA &d@ 154 = "-35 " 123
&dA &d@ 155 = "-42 " 124
&dA &d@ 156 = "-49 " 125
&dA &d@ 157 = "-53 " 126
&dA &d@ 158 = "-63 " 127
&dA &d@ 159 = "-74 " 128
&dA &d@ 160 = "576 " 129
&dA &d@ 161 = "288 " 130
&dA &d@ 162 = "144 " 131
&dA &d@ 163 = "-1 " 132
&dA &d@ 164 = "-2 " 133
&dA &d@ 165 = "-3 " 134
&dA &d@ 166 = "-6 " 135
&dA &d@ 167 = "-7 " 136
&dA &d@ 168 = "-9 " 137
&dA &d@ 169 = "10 " 138
&dA &d@ 170 = "12 " 139
&dA &d@ 171 = "14 " 140
&dA &d@ 172 = "15 " 141
&dA &d@ 173 = "16 " 142
&dA &d@ 174 = "18 " 143
&dA &d@ 175 = "21 " 144
&dA &d@ 176 = "24 " 145
&dA &d@ 177 = "28 " 146
&dA &d@ 178 = "31 " 147
&dA &d@ 179 = "32 " 148
&dA &d@ 180 = "35 " 149
&dA &d@ 181 = "42 " 150
&dA &d@ 182 = "49 " 151
&dA &d@ 183 = "52 " 152
&dA &d@ 184 = "56 " 153
&dA &d@ 185 = "63 " 154
&dA &d@ 186 = "72 " 155
&dA &d@ 187 = " * " 156
&dA &d@ 188 = " - " 157
&dA &d@ 189 = "12" 158
&dA &d@ 190 = "16" 159
&dA &d@ 191 = "24" 160
&dA &d@ 192 = "32" 161
&dA &d@ 193 = "42" 162
&dA &d@ 194 = "43" 163
&dA &d@ 195 = "44" 164
&dA &d@ 196 = "45" 165
&dA &d@ 197 = "48" 166
&dA &d@ 198 = "49" 167
&dA &d@ 199 = "53" 168
&dA &d@ 200 = "54" 169
&dA &d@ 201 = "59" 170
&dA &d@ 202 = "60" 171
&dA &d@ 203 = "63" 172
&dA &d@ 204 = "64" 173
&dA &d@ 205 = "65" 174
&dA &d@ 206 = "96" 175
&dA &d@ 207 = "0" 176
&dA &d@ 208 = "4" 177
&dA &d@ 209 = "6" 178
&dA &d@ 210 = "8" 179
&dA &d@ 211 = "K " 180
&dA &d@ 212 = "0 " 181
&dA &d@ 213 = "1 " 182
&dA &d@ 214 = "2 " 183
&dA &d@ 215 = "3 " 184
&dA &d@ 216 = "4 " 185
&dA &d@ 217 = "5 " 186
&dA &d@ 218 = "6 " 187
&dA &d@ 219 = "7 " 188
&dA &d@ 220 = "8 " 189
&dA &d@ 221 = "9 " 190
&dA &d@ 222 new line 191
&dA &d@ 223 beginning of file 192
&dA
&dA &d@ Total = 192 characters
&dA
#define NCHAR 192
#define NLINE 222
#define NFILE 223
#define NSPEC 94
str rec.180,slib.180(100),file.180,cdir.180,byte.120,storefile.120,color.10,outlib.120
str infiles.80(2000),outfiles.80(2000),exten.3,bigout.1000000
str sourcelib.100
str methodstr.30(8)
bstr bigbitout.8000000
int f,g,h,i,j,k,order(NCHAR),trans(NCHAR,NCHAR),freq(NCHAR,2),acc(24)
int nfiles,curfile,sliblen,lastchar,total,ctotal,method(NCHAR)
int cypher(NCHAR,NCHAR),outcnt,numlibs
int limits(6),mults(6)
int n
label FF(8)
methodstr(1) = " 1 1 3 3 15 128"
methodstr(2) = " 1 1 7 15 31 128"
methodstr(3) = " 1 3 3 7 31 128"
methodstr(4) = " 1 7 15 31 31 128"
methodstr(5) = " 3 3 3 7 31 128"
methodstr(6) = " 3 7 7 7 31 128"
methodstr(7) = " 7 7 7 7 31 128"
methodstr(8) = " 7 15 15 31 63 128"
ctotal = 0
putc Program to compress all files in a library
putc The library may consist of files or sub-libraries of files
putc The maximum number of sub-libraries is 100;
putc The maximum number of files is 2000.
putc
putc Name of source library for this compression
getc sourcelib
getdir cdir
sourcelib = cdir // "/" // sourcelib
putc Outout library (must exist, and should be empty)
getc outlib
outlib = cdir // "/" // outlib
storefile = outlib // "/" // "cypher.bin"
i = 0
j = 0
open [1,1] sourcelib
loop
getf [1] rec
rec = rec // pad(18)
if rec{1} = " "
goto CLIB1
end
exten = rec{10,3}
exten = trm(exten)
if rec{14,5} = "
"
rec = rec{1,8}
++j
slib(j) = trm(rec)
else
rec = rec{1,8}
rec = trm(rec)
if len(exten) > 0
rec = rec // "." // exten
end
++i
infiles(i) = rec
end
repeat
CLIB1:
close [1]
numlibs = j
loop for j = 1 to numlibs
file = sourcelib // "/" // slib(j)
open [1,1] file
loop
getf [1] rec
rec = rec // pad(12)
exten = rec{10,3}
exten = trm(exten)
rec = rec{1,8}
if rec{1} = " "
goto CLIB2
end
rec = trm(rec)
if len(exten) > 0
rec = rec // "." // exten
end
++i
infiles(i) = slib(j) // "/" // rec
repeat
CLIB2:
close [1]
repeat
nfiles = i
loop for i = 1 to nfiles
if i < 10
file = "000"
else
if i < 100
file = "00"
else
if i < 1000
file = "0"
else
file = ""
end
end
end
file = file // chs(i)
outfiles(i) = file // ".cpr"
repeat
putc
putc Step 1: Analyzing files
loop for curfile = 1 to nfiles
file = infiles(curfile)
putc ~file .t25 ...
file = sourcelib // "/" // file
open [1,1] file
lastchar = NCHAR
j = 0
loop
getf [1] rec
rec = trm(rec)
rec = rec // chr(NLINE)
j += len(rec)
loop for i = 1 to len(rec)
if len(rec) - i >= 11
if rec{i,11} = "42 46 1 0 0"
k = 97
++trans(lastchar,k)
lastchar = k
i += 10
goto P2
end
if rec{i,11} = "28 46 1 0 0"
k = 98
++trans(lastchar,k)
lastchar = k
i += 10
goto P2
end
if rec{i,11} = "12 46 1 0 0"
k = 99
++trans(lastchar,k)
lastchar = k
i += 10
goto P2
end
end
if len(rec) - i >= 10
if rec{i,10} = "1 82 6913 "
k = 100
++trans(lastchar,k)
lastchar = k
i += 9
goto P2
end
end
if len(rec) - i >= 6
if rec{i,6} = "0 0 0 "
k = 101
++trans(lastchar,k)
lastchar = k
i += 5
goto P2
end
if rec{i,6} = "K 0 0 "
k = 102
++trans(lastchar,k)
lastchar = k
i += 5
goto P2
end
end
if len(rec) - i >= 5
if rec{i,5} = "1152 "
k = 103
++trans(lastchar,k)
lastchar = k
i += 4
goto P2
end
if rec{i,5} = "1729 "
k = 104
++trans(lastchar,k)
lastchar = k
i += 4
goto P2
end
if rec{i,5} = "2305 "
k = 105
++trans(lastchar,k)
lastchar = k
i += 4
goto P2
end
if rec{i,5} = "3457 "
k = 106
++trans(lastchar,k)
lastchar = k
i += 4
goto P2
end
if rec{i,5} = "4609 "
k = 107
++trans(lastchar,k)
lastchar = k
i += 4
goto P2
end
if rec{i,5} = "5185 "
k = 108
++trans(lastchar,k)
lastchar = k
i += 4
goto P2
end
end
if len(rec) - i >= 4
if rec{i,4} = "A D "
k = 109
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "J N "
k = 110
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "J R "
k = 111
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "J B "
k = 112
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "K 0 "
k = 113
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "K 1 "
k = 114
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-11 "
k = 115
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-12 "
k = 116
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-14 "
k = 117
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-15 "
k = 118
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-18 "
k = 119
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-21 "
k = 120
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-28 "
k = 121
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-32 "
k = 122
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-35 "
k = 123
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-42 "
k = 124
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-49 "
k = 125
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-53 "
k = 126
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-63 "
k = 127
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "-74 "
k = 128
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "576 "
k = 129
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "288 "
k = 130
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
if rec{i,4} = "144 "
k = 131
++trans(lastchar,k)
lastchar = k
i += 3
goto P2
end
end
if len(rec) - i >= 3
if rec{i,3} = "-1 "
k = 132
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "-2 "
k = 133
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "-3 "
k = 134
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "-6 "
k = 135
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "-7 "
k = 136
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "-9 "
k = 137
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "10 "
k = 138
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "12 "
k = 139
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "14 "
k = 140
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "15 "
k = 141
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "16 "
k = 142
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "18 "
k = 143
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "21 "
k = 144
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "24 "
k = 145
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "28 "
k = 146
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "31 "
k = 147
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "32 "
k = 148
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "35 "
k = 149
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "42 "
k = 150
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "49 "
k = 151
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "52 "
k = 152
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "56 "
k = 153
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "63 "
k = 154
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = "72 "
k = 155
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = " * "
k = 156
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,3} = " - "
k = 157
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
end
if len(rec) - i = 2
if rec{i,2} = "12"
k = 158
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "16"
k = 159
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "24"
k = 160
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "32"
k = 161
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "42"
k = 162
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "43"
k = 163
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "44"
k = 164
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "45"
k = 165
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "48"
k = 166
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "49"
k = 167
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "53"
k = 168
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "54"
k = 169
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "59"
k = 170
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "60"
k = 171
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "63"
k = 172
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "64"
k = 173
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "65"
k = 174
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
if rec{i,2} = "96"
k = 175
++trans(lastchar,k)
lastchar = k
i += 2
goto P2
end
end
if len(rec) - i = 1
if rec{i} = "0"
k = 176
++trans(lastchar,k)
lastchar = k
++i
goto P2
end
if rec{i} = "4"
k = 177
++trans(lastchar,k)
lastchar = k
++i
goto P2
end
if rec{i} = "6"
k = 178
++trans(lastchar,k)
lastchar = k
++i
goto P2
end
if rec{i} = "8"
k = 179
++trans(lastchar,k)
lastchar = k
++i
goto P2
end
end
if len(rec) - i >= 2
if rec{i,2} = "K "
k = 180
++trans(lastchar,k)
lastchar = k
++i
goto P2
end
if rec{i+1} = " " and "0123456789" con rec{i}
k = 180 + mpt
++trans(lastchar,k)
lastchar = k
++i
goto P2
end
end
k = ors(rec{i}) - 31
if (k >= 1 and k <= 96) or k = (NLINE - 31)
++trans(lastchar,k)
else
putc Funny byte k = ~k
end
lastchar = k
P2:
++freq(lastchar,2)
repeat
repeat
eof1:
close [1]
putc Total bytes in this file = .w6 ~j
total += j
repeat
putc
putc Total byte count = ~total
putc
putc Step 2: Compute cypher
open [2,2] storefile
loop for h = 1 to NCHAR
loop for i = 1 to NCHAR
order(i) = i
repeat
putc ~h ...
i = h / 20
if rem = 0
putc
end
&dA
&dA &d@ Sort the transition array
&dA
loop for i = 1 to NCHAR
loop for j = i+1 to NCHAR
if trans(h,j) > trans(h,i)
k = trans(h,j)
trans(h,j) = trans(h,i)
trans(h,i) = k
k = order(j)
order(j) = order(i)
order(i) = k
end
repeat
repeat
&dA
&dA &d@ Compute method
&dA
loop for i = 1 to 8 /* 8 methods
acc(i) = 0
g = 0
loop for j = 1 to 6
k = j - 1 * 4 + 1
f = int(methodstr(i){k,4})
if j = 1
limits(j) = f
else
limits(j) = f + limits(j-1)
end
loop while f > 0
f >>= 1
++g
repeat
mults(j) = g
repeat
loop for j = 1 to NCHAR
if j <= limits(1)
f = trans(h,j) * mults(1)
acc(i) += f
else
if j <= limits(2)
f = trans(h,j) * mults(2)
acc(i) += f
else
if j <= limits(3)
f = trans(h,j) * mults(3)
acc(i) += f
else
if j <= limits(4)
f = trans(h,j) * mults(4)
acc(i) += f
else
if j <= limits(5)
f = trans(h,j) * mults(5)
acc(i) += f
else
f = trans(h,j) * mults(6)
acc(i) += f
end
end
end
end
end
repeat
repeat
k = 100000000
loop for i = 1 to 8
if acc(i) < k
k = acc(i)
j = i
end
repeat
&dA
&dA &d@ method breakdown
&dA &d@ ÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
&dA &d@ 000 1 1 3 3 15 128
&dA &d@ 001 1 1 7 15 31 128
&dA &d@ 010 1 3 3 7 31 128
&dA &d@ 011 1 7 15 31 31 128
&dA &d@ 100 3 3 3 7 31 128
&dA &d@ 101 3 7 7 7 31 128
&dA &d@ 102 7 7 7 7 31 128
&dA &d@ 111 7 15 15 31 63 128
&dA
method(h) = j - 1
loop for i = 1 to NCHAR
loop for j = 1 to NCHAR
if i = order(j)
cypher(h,i) = j
j = NCHAR
end
repeat
repeat
loop for i = 1 to NCHAR
if trans(h,i) = 0
putf [2] 0
i = NCHAR
else
putf [2] ~order(i)
end
repeat
putf [2] ~method(h)
ctotal += k
repeat
close [2]
putc
putc
ctotal = ctotal + 7 / 8
putc Total compression takes ~ctotal bytes
k = total * 100
k /= ctotal
putc Compression ratio = .d2 ~k
putc
putc Step 3: Compression
loop for curfile = 1 to nfiles
putc ~infiles(curfile) .t20 ÄÄÄ ...
file = outfiles(curfile)
putc ~file .t12 ...
file = outlib // "/" // file
open [2,6] file
file = sourcelib // "/" // infiles(curfile)
open [3,1] file
&dA
&dA &d@ Format of header
&dA &d@ byte 1: length of input file name
&dA &d@ byte 2--x: inputfile name
&dA &d@ bytes x+1 to x+4: length of file in bits
&dA
file = infiles(curfile)
j = len(file)
bigout = chr(j) // file
write [2] bigout
bigbitout = ""
lastchar = NCHAR
j = 0
loop
getf [3] rec
rec = trm(rec)
rec = rec // chr(NLINE)
j += len(rec)
loop for i = 1 to len(rec)
if len(rec) - i >= 11
if rec{i,11} = "42 46 1 0 0"
k = 97
perform write_bits
lastchar = k
i += 10
goto P4
end
if rec{i,11} = "28 46 1 0 0"
k = 98
perform write_bits
lastchar = k
i += 10
goto P4
end
if rec{i,11} = "12 46 1 0 0"
k = 99
perform write_bits
lastchar = k
i += 10
goto P4
end
end
if len(rec) - i >= 10
if rec{i,10} = "1 82 6913 "
k = 100
perform write_bits
lastchar = k
i += 9
goto P4
end
end
if len(rec) - i >= 6
if rec{i,6} = "0 0 0 "
k = 101
perform write_bits
lastchar = k
i += 5
goto P4
end
if rec{i,6} = "K 0 0 "
k = 102
perform write_bits
lastchar = k
i += 5
goto P4
end
end
if len(rec) - i >= 5
if rec{i,5} = "1152 "
k = 103
perform write_bits
lastchar = k
i += 4
goto P4
end
if rec{i,5} = "1729 "
k = 104
perform write_bits
lastchar = k
i += 4
goto P4
end
if rec{i,5} = "2305 "
k = 105
perform write_bits
lastchar = k
i += 4
goto P4
end
if rec{i,5} = "3457 "
k = 106
perform write_bits
lastchar = k
i += 4
goto P4
end
if rec{i,5} = "4609 "
k = 107
perform write_bits
lastchar = k
i += 4
goto P4
end
if rec{i,5} = "5185 "
k = 108
perform write_bits
lastchar = k
i += 4
goto P4
end
end
if len(rec) - i >= 4
if rec{i,4} = "A D "
k = 109
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "J N "
k = 110
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "J R "
k = 111
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "J B "
k = 112
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "K 0 "
k = 113
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "K 1 "
k = 114
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-11 "
k = 115
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-12 "
k = 116
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-14 "
k = 117
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-15 "
k = 118
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-18 "
k = 119
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-21 "
k = 120
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-28 "
k = 121
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-32 "
k = 122
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-35 "
k = 123
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-42 "
k = 124
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-49 "
k = 125
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-53 "
k = 126
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-63 "
k = 127
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "-74 "
k = 128
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "576 "
k = 129
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "288 "
k = 130
perform write_bits
lastchar = k
i += 3
goto P4
end
if rec{i,4} = "144 "
k = 131
perform write_bits
lastchar = k
i += 3
goto P4
end
end
if len(rec) - i >= 3
if rec{i,3} = "-1 "
k = 132
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "-2 "
k = 133
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "-3 "
k = 134
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "-6 "
k = 135
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "-7 "
k = 136
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "-9 "
k = 137
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "10 "
k = 138
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "12 "
k = 139
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "14 "
k = 140
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "15 "
k = 141
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "16 "
k = 142
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "18 "
k = 143
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "21 "
k = 144
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "24 "
k = 145
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "28 "
k = 146
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "31 "
k = 147
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "32 "
k = 148
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "35 "
k = 149
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "42 "
k = 150
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "49 "
k = 151
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "52 "
k = 152
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "56 "
k = 153
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "63 "
k = 154
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = "72 "
k = 155
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = " * "
k = 156
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,3} = " - "
k = 157
perform write_bits
lastchar = k
i += 2
goto P4
end
end
if len(rec) - i = 2
if rec{i,2} = "12"
k = 158
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "16"
k = 159
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "24"
k = 160
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "32"
k = 161
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "42"
k = 162
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "43"
k = 163
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "44"
k = 164
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "45"
k = 165
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "48"
k = 166
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "49"
k = 167
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "53"
k = 168
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "54"
k = 169
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "59"
k = 170
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "60"
k = 171
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "63"
k = 172
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "64"
k = 173
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "65"
k = 174
perform write_bits
lastchar = k
i += 2
goto P4
end
if rec{i,2} = "96"
k = 175
perform write_bits
lastchar = k
i += 2
goto P4
end
end
if len(rec) - i = 1
if rec{i} = "0"
k = 176
perform write_bits
lastchar = k
++i
goto P4
end
if rec{i} = "4"
k = 177
perform write_bits
lastchar = k
++i
goto P4
end
if rec{i} = "6"
k = 178
perform write_bits
lastchar = k
++i
goto P4
end
if rec{i} = "8"
k = 179
perform write_bits
lastchar = k
++i
goto P4
end
end
if len(rec) - i >= 2
if rec{i,2} = "K "
k = 180
perform write_bits
lastchar = k
++i
goto P4
end
if rec{i+1} = " " and "0123456789" con rec{i}
k = 180 + mpt
perform write_bits
lastchar = k
++i
goto P4
end
end
k = ors(rec{i}) - 31
if (k >= 1 and k <= 96) or k = (NLINE - 31)
perform write_bits
else
putc Funny byte k = ~k
end
lastchar = k
P4:
repeat
repeat
eof3:
close [3]
k = bln(bigbitout)
bigout = ch4(k)
write [2] bigout
bigout = cby(bigbitout)
write [2] bigout
close [2]
j = j * 100 / len(bigout)
putc Size = .w5 ~(len(bigout)) bytes .t22 ratio = .d2 ~j
repeat
putc
procedure write_bits
int a,b,c,d,e
bstr code.30,btemp.8
str temp.1
a = cypher(lastchar,k)
b = method(lastchar)
goto FF(b+1)
FF(1): /* one 1 1 3 3 15 128
if a = 1
code = "0"
else
if a = 2
code = "10"
else
if a <= 5 /* 3 .. 5
a -= 3
temp = chr(a)
btemp = cbi(temp)
code = "11" // btemp{7..8}
else
if a <= 8 /* 6 .. 8
a -= 6
temp = chr(a)
btemp = cbi(temp)
code = "1111" // btemp{7..8}
else
if a <= 23 /* 9 .. 23
a -= 9
temp = chr(a)
btemp = cbi(temp)
code = "111111" // btemp{5..8}
else
a -= 24 /* 24 ...
temp = chr(a)
btemp = cbi(temp)
code = "1111111111" // btemp{1..8}
end
end
end
end
end
goto FX
FF(2): /* two 1 1 7 15 31 128
if a = 1
code = "0"
else
if a = 2
code = "10"
else
if a <= 9 /* 3 .. 9
a -= 3
temp = chr(a)
btemp = cbi(temp)
code = "11" // btemp{6..8}
else
if a <= 24 /* 10 .. 24
a -= 10
temp = chr(a)
btemp = cbi(temp)
code = "11111" // btemp{5..8}
else
if a <= 55 /* 25 .. 55
a -= 25
temp = chr(a)
btemp = cbi(temp)
code = "111111111" // btemp{4..8}
else
a -= 56 /* 56 ...
temp = chr(a)
btemp = cbi(temp)
code = "11111111111111" // btemp{1..8}
end
end
end
end
end
goto FX
FF(3): /* three 1 3 3 7 31 128
if a = 1
code = "0"
else
if a <= 4 /* 2 .. 4
a -= 2
temp = chr(a)
btemp = cbi(temp)
code = "1" // btemp{7..8}
else
if a <= 7 /* 5 .. 7
a -= 5
temp = chr(a)
btemp = cbi(temp)
code = "111" // btemp{7..8}
else
if a <= 14 /* 8 .. 14
a -= 8
temp = chr(a)
btemp = cbi(temp)
code = "11111" // btemp{6..8}
else
if a <= 45 /* 15 .. 45
a -= 15
temp = chr(a)
btemp = cbi(temp)
code = "11111111" // btemp{4..8}
else
a -= 46 /* 46 ...
temp = chr(a)
btemp = cbi(temp)
code = "1111111111111" // btemp{1..8}
end
end
end
end
end
goto FX
FF(4): /* four 1 7 15 31 31 128
if a = 1
code = "0"
else
if a <= 8 /* 2 .. 8
a -= 2
temp = chr(a)
btemp = cbi(temp)
code = "1" // btemp{6..8}
else
if a <= 23 /* 9 .. 23
a -= 9
temp = chr(a)
btemp = cbi(temp)
code = "1111" // btemp{5..8}
else
if a <= 54 /* 24 .. 54
a -= 24
temp = chr(a)
btemp = cbi(temp)
code = "11111111" // btemp{4..8}
else
if a <= 85 /* 55 .. 85
a -= 55
temp = chr(a)
btemp = cbi(temp)
code = "1111111111111" // btemp{4..8}
else
a -= 86 /* 86 ...
temp = chr(a)
btemp = cbi(temp)
code = "111111111111111111" // btemp{1..8}
end
end
end
end
end
goto FX
FF(5): /* five 3 3 3 7 31 128
if a <= 3 /* 1 .. 3
a -= 1
temp = chr(a)
btemp = cbi(temp)
code = btemp{7..8}
else
if a <= 6 /* 4 .. 6
a -= 4
temp = chr(a)
btemp = cbi(temp)
code = "11" // btemp{7..8}
else
if a <= 9 /* 7 .. 9
a -= 7
temp = chr(a)
btemp = cbi(temp)
code = "1111" // btemp{7..8}
else
if a <= 16 /* 10 .. 16
a -= 10
temp = chr(a)
btemp = cbi(temp)
code = "111111" // btemp{6..8}
else
if a <= 47 /* 17 .. 47
a -= 17
temp = chr(a)
btemp = cbi(temp)
code = "111111111" // btemp{4..8}
else
a -= 48 /* 48 ...
temp = chr(a)
btemp = cbi(temp)
code = "11111111111111" // btemp{1..8}
end
end
end
end
end
goto FX
FF(6): /* six 3 7 7 7 31 128
if a <= 3 /* 1 .. 3
a -= 1
temp = chr(a)
btemp = cbi(temp)
code = btemp{7..8}
else
if a <= 10 /* 4 .. 10
a -= 4
temp = chr(a)
btemp = cbi(temp)
code = "11" // btemp{6..8}
else
if a <= 17 /* 11 .. 17
a -= 11
temp = chr(a)
btemp = cbi(temp)
code = "11111" // btemp{6..8}
else
if a <= 24 /* 18 .. 24
a -= 18
temp = chr(a)
btemp = cbi(temp)
code = "11111111" // btemp{6..8}
else
if a <= 55 /* 25 .. 55
a -= 25
temp = chr(a)
btemp = cbi(temp)
code = "11111111111" // btemp{4..8}
else
a -= 56 /* 56 ...
temp = chr(a)
btemp = cbi(temp)
code = "1111111111111111" // btemp{1..8}
end
end
end
end
end
goto FX
FF(7): /* seven 7 7 7 7 31 128
if a <= 7 /* 1 .. 7
a -= 1
temp = chr(a)
btemp = cbi(temp)
code = btemp{6..8}
else
if a <= 14 /* 8 .. 14
a -= 8
temp = chr(a)
btemp = cbi(temp)
code = "111" // btemp{6..8}
else
if a <= 21 /* 15 .. 21
a -= 15
temp = chr(a)
btemp = cbi(temp)
code = "111111" // btemp{6..8}
else
if a <= 28 /* 22 .. 28
a -= 22
temp = chr(a)
btemp = cbi(temp)
code = "111111111" // btemp{6..8}
else
if a <= 59 /* 29 .. 59
a -= 29
temp = chr(a)
btemp = cbi(temp)
code = "111111111111" // btemp{4..8}
else
a -= 60 /* 60 ...
temp = chr(a)
btemp = cbi(temp)
code = "11111111111111111" // btemp{1..8}
end
end
end
end
end
goto FX
FF(8): /* eight 7 15 15 31 63 128
if a <= 7 /* 1 .. 7
a -= 1
temp = chr(a)
btemp = cbi(temp)
code = btemp{6..8}
else
if a <= 22 /* 8 .. 22
a -= 8
temp = chr(a)
btemp = cbi(temp)
code = "111" // btemp{5..8}
else
if a <= 37 /* 23 .. 37
a -= 23
temp = chr(a)
btemp = cbi(temp)
code = "1111111" // btemp{5..8}
else
if a <= 68 /* 38 .. 68
a -= 38
temp = chr(a)
btemp = cbi(temp)
code = "11111111111" // btemp{4..8}
else
if a <= 131 /* 69 .. 131
a -= 69
temp = chr(a)
btemp = cbi(temp)
code = "1111111111111111" // btemp{3..8}
else
a -= 132 /* 132 ...
temp = chr(a)
btemp = cbi(temp)
code = "1111111111111111111111" // btemp{1..8}
end
end
end
end
end
goto FX
FX:
bigbitout = bigbitout // code
return
run