MiniM. Saving time.


| About | Download | Tools | Knowledge Base | How to Buy |

MiniM Overview

Getting Started

Download

Documentation

Tools

Cache Tools

GT.M Tools

Knowledge Base

FAQ

Contacts

Copyrights

MiniM Additional Tools | Jun 11, 2010

Использование библиотеки zlib1.dll ver 1.2.3 в MINIM

Посетите http://www.zlib.org - официальный сайт библиотеки zlib. Подробная русская документация здесь: http://zlib.net.ru на базе этой документации ниже приведенное описание реализованного функционала.

ВНИМАНИЕ! ОГРАНИЧЕНИЯ ПО РАЗМЕРУ ФАЙЛОВ 2^31 byte!

1. version

Возвращает версию используемой библиотеки ZLIB.DLL(zlibVersion):

USER>w !,"Version:",$zdll("call","minimzip.dll","version")
USER>1.2.3

2. compress

Сжимает данные из inp в out длиной $L(inp). Учтите, что после преобразования возможно увеличение строки out! Mode определяет режим сжатия, 1-быстро ... 9-сильней , если не указан используется 6.

USER>s mode=9,inp="testing string testing string 
   testing string testing string"
USER>s out=$zdll("call","minimzip.dll","compress",inp,mode)

При проблемах возможно возникновение ошибки <FUNCT> с кодом из zlib.h:

//нормальное завершение, исключений нет
#define Z_OK            	0

#define Z_STREAM_END   		1
#define Z_NEED_DICT     		2
#define Z_ERRNO        		(-1)
#define Z_STREAM_ERROR 	(-2)
#define Z_DATA_ERROR   		(-3)
#define Z_MEM_ERROR    		(-4)
#define Z_BUF_ERROR    		(-5)
#define Z_VERSION_ERROR 	(-6)

3. uncompress

Декомпрессия исходной строки. Поскольку мах размер ограничен переменной MINIM_STR_MAX , то на вход подавайте не слишком большой обьем данных. (возможно, что размер несжатых данных должен быть предварительно сохранен отдельно и предварительно проконтролирован) После вызова функции, txt содержит распакованные данные. Mode вычисляется автоматом.

USER>s txt=$zdll("call","minimzip.dll","uncompress",out)

При проблемах см. пп.2

4. gzFile

Функции gz* возвращают или используют число, которое фактически является указателем (handle) на структуру для работы с файлом. См. примеры ниже.

5. gzopen

Открывает gzip (.gz) файл для чтения или записи. Режим открытия задается также, как и у функции fopen ("rb" или "wb") но кроме этого может также включать степень сжатия ("wb9") или стратегию: 'f' для отфильтрованных данных ("wb6f"), 'h' для сжатия только по Хаффману ("wb1h"). Более подробно параметры выбора стратегии описаны в функции deflateInit2(в текущей релизации функции нижрего уровня не поддерживаются). Функция gzopen может также применяться для чтения файлов не в формате gzip, в этом случае gzread будет читать данные из файла напрямую, без декомпрессии. Функция gzopen возвращает число gzFile(хендел для использования в gz* функциях) или формирует исключение <FUNC>, если файл не может быть открыт или если недостаточно памяти для компрессии\декопрессии или есть иные проблемы в работе.

USER>s fn="test.gz"
 ;запись
USER>s gzFile=$zdll("call","minimzip.dll","gzopen",fn,"wb6")
 ;чтение
USER>s gzFileR=$zdll("call","minimzip.dll","gzopen",fn,"rb")

6.gzdopen

Функция gzdopen ассоциирует gzFile с дескриптором fd. Дескрипторы файлов получают вызовом функций вроде $view("dev",2{,…}). Параметр mode такой же, как и в gzopen. Если впоследствии вызвать gzclose с возвращенным значением gzFile, то будет также закрыт и файл с дескриптором fd, подобно вызову fclose(fdopen(fd), mode).

USER>s gzFile=$zdll("call","minimzip.dll","gzopen",fd,"wb6")

7. gzsetparams

Динамически обновляет степень сжатия или стратегию. Что означают эти параметры можно посмотреть в описании функции deflateInit2.

USER>s rc=$zdll("call","minimzip.dll","gzsetparams",
  gzFile,level,strategy)

8. gzread

Читает переданное количество байт несжатых данных из компресованного файла. Если входной файл не в формате gzip, то gzread просто копирует переданное ей количество байт в буфер.Функция gzread возвращает строку заявленного количества байт некомпрессованных данных реально прочитанных из файла ("" для конца файла и формирует исключение в случае ошибки).

USER>s decomp=$zdll("call","minimzip.dll","gzread",gzFile,10000)
USER>s rc=$zdll("call","minimzip.dll","gzclose",gzFile)

8. gzwrite

Записывает переданное количество байт несжатых данных в компресованный файл. Функция gzwrite возвращает реальное количество байт несжатых данных, которое было записано в файл. и формирует исключение если ошибки.

USER>s numw=$zdll("call","minimzip.dll","gzwrite",gzFile,inp)

9. gzputs

Записывает передаваемую строку (заканчивающуюся нулевым символом) в сжатый файл. Последний нулевой символ не записывается. Рекомедую использовать gzwrite по функционалу реализованному в minim сервис предоставляется одинаковый.. Функция gzputs возвращает количество записанных символов.

USER>s numw=$zdll("call","minimzip.dll","gzputs",gzFile,inp)

10. gzgets

Читает данные из сжатого файла, пока не будет прочитана строка размером не более MINIM_STR_MAX-2 символов, или не встретиться символ перевода каретки, который скопируется в буфер, или не будет достигнут конец файла.

USER>s str=$zdll("call","minimzip.dll","gzgets",gzFile)

11. gzputc

Записывает в сжатый файл число, конвертируя его в unsigned char (0..255). Функция gzputc возвращает значение, которое было записано или код ошибки.

 ;пишем ЧИСЛА!
USER>s char=$zdll("call","minimzip.dll","gzputc",32)

12. gzgetc

Читает один байт из сжатого файла в виде числа (пробел в виде 32) Функция gzgetc возвращает прочитанный байт или -1 при достижения конца файла.

 ; читаем ЧИСЛА: $a(" ")!
USER>s char=$zdll("call","minimzip.dll","gzgetc")

13. gzflush

Сбрасывает все буферы записи в сжатый файл. Параметр flush такой же, что и в функции deflate(). Возвращаемое значение - код ошибки zlib (см. функцию gzerror ниже).

Функция gzflush должна вызываться только в случаях крайней необходимости, т.к. она может ухудшить компрессию.

USER>s rc=$zdll("call","minimzip.dll","gzflush",gzFile,flush)

14. gzseek

Устанавливает начальную позицию для последующего вызова gzread или gzwrite на заданном сжатом файле. Параметр offset представляет количество байт в несжатом потоке данных. Параметр whence такой же, что и в lseek(2); значение SEEK_END не поддерживается. Если файл открыт для чтения, эта функция эмулируется, что может происходить чрезвычайно медленно. Если файл открыт для записи, то поддерживается только смещение вперед. Если при сжатии gzseek попадется последовательность нулей, то указатель будет смещен на новую стартовую позицию.Функция gzseek возвращает текущее положение курсора, измеряемое в байтах от начала некомпресованного потока данных, или 0 в случае ошибки, в частности, если файл был открыт для записи и новую позицию курсора нужно расположить перед текущей позицией. Использовать с осторожностью.

USER>s offnew=$zdll("call","minimzip.dll","gzseek",gzFile,seekmode)

#define SEEK_SET    	0
#define SEEK_CUR    	1
#define SEEK_END    	2

15. gzrewind

"Перематывает" текущий файл. Эта функция поддерживается только при чтении. Функция gzrewind(file) эквивалентна вызову (int)gzseek(file, 0L, SEEK_SET)

USER>s offnew=$zdll("call","minimzip.dll","gzrewind",gzFile)

16. gztell

Возвращает начальную позицию для следующего вызова gzread или gzwrite на данном сжатом файле. Эта позиция представляет количество байт в несжатом потоке данных.

Функция gztell(file) эквивалентна вызову gzseek(file, 0L, SEEK_CUR)

USER>s offnew=$zdll("call","minimzip.dll","gztell",gzFile)

17. gzeof

Возвращает 1 если во время предыдущего чтения был достигнут конец файла, иначе возвращает 0.

USER>s eof=$zdll("call","minimzip.dll","gzeof",gzFile)
USER> I eof,$zdll("call","minimzip.dll","gzclose",gzFile)

18. gzclose

В случае необходимости сбрасывает в файл все открытые буфера, закрывает сжатый файл и сбрасывает все состояния (state) компрессии\декомпрессии.

Возвращает код ошибки zlib (см. функцию gzerror ниже).

USER>s rc=$zdll("call","minimzip.dll","gzclose",gzFile)

19. gzerror

Возвращает текстовое сообщение о последней ошибке, которая произошла на заданном сжатом файле. Возвращает в формате: GZERROR:%d:%s - номер ошибки: наименование.

USER>s errname=$zdll("call","minimzip.dll","gzerrno",gzFile)

Download minimzip.arj (arj, 100Kb)

Александр Чудновский
azbuka@rbcmail.ru

To add module send text description and zip archive to mail: support@minimdb.com


Copyright (C) Eugene Karataev
Info Support