&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