Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа тема Архиватор.doc
Скачиваний:
58
Добавлен:
01.04.2014
Размер:
476.67 Кб
Скачать
  1. Описание функций

  1. void start_model (void). Инициализация адаптивной модели. Эта функция производит инициализацию таблиц перекодировок между исходными и рабочими символами, устанавливает начальные значения счетчиков частот всех символов рабочего алфавита в 1, соответственно им устанавливаются значения счетчиков суммарных частот. freq [0] устанавливается в 0. Последняя установка необходима для того, чтобы процедура обновления таблиц перекодировки работала корректно.

  2. void update_model ( int symbol). Обновление модели очередным символом. Входной параметр этой функции – индекс нового символа. Она следит за переполнением счетчика максимальной частоты, и, в случае достижения ею своего максимума, масштабирует все частоты делением на 2, не приводя их к нулю, и, приводя в соответствие с ними счетчики суммарных частот. Затем увеличивает значение частоты очередного символа, делая это так, чтобы наиболее частые символы рабочего алфавита располагались в начале таблицы.

  3. void start_inputing_bits (void). Инициализация побитового ввода. Эта функция устанавливает количество занятых в буфере битов перед декодированием в 0.

  4. int input_bit (void). Ввод очередного бита сжатой информации. Возвращает значение очередного бита (0 либо 1). Следит за состоянием буфера, в который считываются байты из файла. Если буфер опустошается, то производит очередное считывание в него значения из файла архива.

  5. void start_outputing_bits (void). Инициализация побитового вывода. Устанавливаем количество свободных битов буфера в 8, а его значение в 0.

  6. void output_bit ( int bit). Вывод очередного бита сжатой информации. Входной параметр – бит который необходимо вывести в выходной файл (0 либо 1). Выводит не в сам файл, а в буфер. Если буфер заполняется полностью, то производит запись буфера в файл архива.

  7. void done_outputing_bits (void). Очистка буфера побитового вывода. После окончания кодирования записывает в файл последние, еще незаписанные биты.

  8. void output_bit_plus_follow (short int bit). Вывод указанного бита и отложенных ранее. Входной параметр - выходной бит. Сначала заносит в выходной поток выходной бит, а вслед за ним необходимое количество отложенных битов, которые используются для предотвращения отрицательного переполнения. Причем выходной бит и отложенные ранее биты противоположны. Т.е. если выходной бит – 1, то вслед за ним выводятся нули, и, наоборот, если выходной бит – 0, то вслед за ним выводятся единицы.

  9. void start_encoding (void). Инициализация регистров границ и кода перед началом кодирования. Перед началом кодирования устанавливает в нижнюю границу интервала 0, а в правую - TOP_VALUE, число, которое представляет собой количество единиц, равное количеству BITS_IN_REGISTER, т.е. 1111.1111.1111.11112 в нашем случае.

  10. void done_encoding (void). Завершение кодирования потока. Эта функция по окончании кодирования посылает в выходной поток 2 бита, которые однозначно определяют четверть, в которой лежит текущий интервал. Это необходимо для того, чтобы декодировщик смог однозначно распознать информацию в конце потока.

  11. void start_decoding (void). Инициализация регистров границ и кода, а также текущей части значения декодируемого потока перед началом декодирования. Перед началом кодирования устанавливает в нижнюю границу интервала 0, а в правую - TOP_VALUE, число, которое представляет собой количество единиц, равное количеству BITS_IN_REGISTER, т.е. 1111.1111.1111.11112 в нашем случае. Кроме того в переменную value загружается начальная часть кода входного сообщения.

  12. void encode_symbol ( int symbol). Кодирование очередного символа. Входной параметр - кодируемый символ рабочего алфавита. Эта функция получает в качестве входного параметра символ рабочего алфавита, и, в соответствии с ним заносит в выходной поток биты, которые однозначно определяют этот символ. При этом модифицируются значения верхней и нижней границ текущего интервала.

  13. int decode_symbol (void). Декодирование очередного символа рабочего алфавита. Возвращает символ рабочего алфавита. Эта функция на основании текущей части значения входного потока, а также нижней и верхней границ интервала, возвращает символ рабочего алфавита, который закодирован в текущей части сообщения. При этом модифицируются значения верхней и нижней границ текущего интервала, а значение текущей части входного потока сдвигается влево на величину отработанных битов, при этом справа добавляются новые биты. Эта процедура, реализованная также на Ассемблере, приводится в приложении 1 данного курсового проекта.

  14. void addfile(char *fn). Добавление файла в динамический список. Входной параметр - указатель на строку, содержащую имя файла в памяти. Эта функция выделяет в оперативной памяти строку необходимой длины, в которую помещает значение текущей директории и добавляет к ней имя файла. Затем выделяет память для нового элемента динамического списка и в его информационное поле помещает указатель на полученную строку. Добавление строк происходит в конец списка.

  15. void obhod(void). Обход файлов текущего каталога и всех его подкаталогов. Эта функция используется при кодировании каталога, для того чтобы составить список всех файлов, содержащихся в данном каталоге и всех его подкаталогах. Ячейка списка при этом содержит путь к файлу относительно текущей директории и непосредственно имя самого файла. Эта функция является рекурсивной, т.к. это необходимо для обхода всех подкаталогов данного каталога на неограниченный уровень вложенности. Для каждого каталога создается своя копия этой функции.

  16. void start(void). Функция, которая выполняется перед каждым сеансом кодирования и декодирования. Она устанавливает количество файлов в архиве в 0. Текущим делает первый элемент динамического списка файлов. Устанавливает необходимое значение текущей директории. И, если ее не существует (такая ситуация может возникнуть при декодировании), то создает ее на диске. Значение относительного пути делает пустым.

  17. void end(void). Функция, которая выполняется после каждого сеанса кодирования и декодирования. Эта функция освобождает память, которую занимал динамический список файлов в архиве, необходимый для кодирования и декодирования.

  18. void encode (char *outfile). Собственно адаптивное арифметическое кодирование. Входной параметр - имя выходного файла архива. Эта функция создает в памяти динамический список всех файлов каталога, который подвергается архивации, с относительными путями с помощью функций obhod и addfile. Записывает в архив количество файлов (первые 2 байта).Затем записывает в архив список файлов с относительными путями. Эта информация необходима декодировщику. После этого производит последовательное кодирование этих файлов в файл архива, с помощью функции encode_symbol.

  19. void makedir(char *filename). Функция выделяющая из строки имени файла относительный путь к нему, и создающая этот каталог. Входной параметр - имя файла. Разделяет имя файла, состоящее из относительного пути к файлу и непосредственно имени файла, на составляющие. А затем создает такой каталог на диске. Она используется при деархивации. Когда относительные пути файлов, записанные в файле архива, могут отсутствовать в директории, в которую производится деархивация.

  20. void decode ( char *infile). Собственно адаптивное арифметическое декодирование. Входной параметр - имя файла архива. Эта функция считывает из файла архива количество файлов, которые в нем содержатся (первые 2 байта файла архива). Затем используя это число, заполняет динамический список именами файлов с относительными путями, которые содержатся в начале файла архива. После этого происходит последовательное декодирование этих файлов из файла архива с использованием процедуры decode_symbol (), создавая для каждого файла относительный путь к нему в каталоге назначения с помощью функции makedir.

  21. void __fastcall TForm1::Button1Click(TObject *Sender). Эта функция выполняется в результате нажатия кнопки "Кодировать" на основной форме программы. В результате ее вызова происходит считывание строки ввода LabeledEdit2 в переменную строки файла архива с полным путем к нему. А затем с этим параметром вызывается функция encode.

  22. void __fastcall TForm1::Button2Click(TObject *Sender). Эта функция выполняется в результате нажатия кнопки "Декодировать" на основной форме программы. В результате ее вызова происходит считывание строки ввода LabeledEdit2 в переменную строки файла архива с полным путем к нему. А затем с этим параметром вызывается функция decode.

  23. void __fastcall TForm1::SpeedButton1Click(TObject *Sender). Эта функция выполняется в результате нажатия кнопки, расположенной справа от поля ввода «Каталог» на основной форме программы. Эта функция выводит на экран стандартное окно выбора папки. Если пользователь выбирает папку, то строка, содержащая путь к ней заносится в поле ввода «Каталог».

  24. void __fastcall TForm1::SpeedButton2Click(TObject *Sender). Эта функция выполняется в результате нажатия кнопки, расположенной справа от поля ввода «Файл архива» на основной форме программы. Эта функция выводит на экран стандартное окно выбора файла. Если пользователь выбирает файл, то строка, содержащая путь к этому файлу и его имя заносится в поле ввода «Файл архива».