Здравствуйте! Хотел изменить меню и сообщения в Quickbasic(дос). Оказалоь, что строки сжаты. Нашел, где хранятся и где распаковываются. В зависимоти от частоты, для одного символа используется от 3 (самые частые) до 14 бит. Для распаковки используется таблица: Код (Text): Tab db 01, 35, 02, 1E, 03, 10, 04, 07, CD, 05, BF, 06, D2, B3, C7, 08, 09, 0A, C3, 8F, A6, 0B, B5, 0C, 0D, 9E, B9, 0E, 0F, 85, 94, 88, 11, 1A, 12, 14, 13, C8, A5, D4, 15, 19, 16, A4, C6, 17, 18, 8D, 8C, 92, A7, AE, 1B, C0, 1C, C2, AA, 1D, A2, AC, 1F, 82, 20, CF, 21, 2C, 22, CB, BE, 23, 24, B2, 25, 2B, 26, 27, 97, 9A, AB, 28, D5, 29, 2A, 8B, 95, 87, A0, B8, 2D, 31, 2E, D3, 2F, B0, 8E, 30, A8, 90, A3, 32, 33, 34, A9, 9B, 9D, 9F, 36, 3A, 37, 39, 38, CA, CE, D0, C9, C5, 3B, C1, 3C, BD, 3D, 46, 3E, C4, B4, 3F, 40, B7, 41, 42, B1, B6, 8A, 43, 44, 98, 45, 84, BA, 83, 47, 48, AF, D1, 49, AD, 4A, 53, 4B, 52, 4C, 4F, 4D, 99, 4E, 81, A1, 86, 50, 91, 51, 9C, BB, BC, 96, CC, 54, 80, 89, 93 Код: Код (Text): next_char: dec [bp-0002] ; счетчик = длина исходной строки jl exit mov si, tab ; таблица next_enc_bit: mov ax,dx ; номер бита в сжатой строке mov bl,008 ; переводим в байты div bl inc dx ; след. бит mov ch,080 ; бит в mov cl,ah ; закод. байте shr ch,cl cbw xchg bx,ax ; bx=номер байта в сжатой строке add bx,[bp+00006] ; + адрес строки test [bx],ch ; если бит=1, смещаемся в таблице на 1 ячейку je no_inc inc si no_inc: sub bh,bh mov bl,[si] ; читаем адрес из таблицы rcl bl,1 ; если верхний бит 1, убираем его - jnb no_char shr bl,1 ; получаем индекс буквы mov al,[bx+000D7] ; её адрес stosb jmp next_char ; если 0 - удваиваем адрес no_char: mov si, tab ; и читаем из таблицы дальше add si,bx jmp next_enc_bit exit: ... Кто-нибудь знает, как создать такую таблицу, если я хочу добавить свои символы? Там их всего 86. Подскажите, пожалуйста. Ну или хотя бы в каком направлении искать. Совсем ничего про это не знаю, а изучать всё существующее нереально. Во всяком случае, я ничего пока не нашёл.
Да, это оно. Спасибо огромное. Я когда искал, находил и про Фано и про Хаффмана, но, немного почитав, подумал - не то. А тут по ссылкам всё прекрасно расписано. Хорошо всё-таки, когда знаешь, что искать. Спасибо ещё раз!