Долго объяснять, зачем мне вдруг понадобилось использовать zlib, но применять ее оказалось на удивление просто. Потому только код:
/*
* gcc main.c -Wall -Wextra -lz
*
* ZLib is simple!
* http://andyceo.ruware.com/blog/cristobal-junta
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <zlib.h>
#define N 1983
void Print_Return_Code(const char *fname, int res)
{
assert(fname);
printf("%s(): ", fname);
switch (res)
{
case Z_OK:
puts("Z_OK");
break;
case Z_MEM_ERROR:
puts("Z_MEM_ERROR");
exit(EXIT_FAILURE);
break;
case Z_BUF_ERROR:
puts("Z_BUF_ERROR");
exit(EXIT_FAILURE);
break;
default:
puts("unrecognized return code");
exit(EXIT_FAILURE);
break;
}
}
int main()
{
unsigned long i;
int res;
int *src;
unsigned long src_len = N * sizeof(src[0]);
char *cmp;
unsigned long cmp_len = compressBound(src_len);
int *unc;
unsigned long unc_len = src_len;
printf("src_len: %lu\n", src_len);
printf("Upper bound on cmp_len: %lu\n", cmp_len);
src = malloc(src_len);
assert(src != NULL);
cmp = malloc(cmp_len);
assert(cmp != NULL);
unc = malloc(unc_len);
assert(unc != NULL);
for (i = 0; i < N; ++i)
src[i] = i;
res = compress(cmp, &cmp_len, (char *)src, src_len);
Print_Return_Code("compress", res);
printf("Actual cmp_len: %lu\n", cmp_len);
printf("Compression ratio: %3.0f%%\n", 100.0 * cmp_len / (double)src_len);
res = uncompress((char *)unc, &unc_len, cmp, cmp_len);
Print_Return_Code("uncompress", res);
if (unc_len != src_len)
{
puts("unc_len != src_len");
return EXIT_FAILURE;
}
for (i = 0; i < N; ++i)
if (unc[i] != src[i])
{
printf("unc[%lu] != src[%lu]\n", i, i);
return EXIT_FAILURE;
}
puts("OK!");
free(src);
free(cmp);
free(unc);
return EXIT_SUCCESS;
}
Комментарии
На PHP Zlib ещё
На PHP Zlib ещё проще :)
Взято с описания функции PHP gzencode.
Кстати, ты можешь пользоваться тегом
<blockcode lang="cpp">
//Your
//piece of
//code
</blockcode>
lang="cpp"означает расцвечивать как C++, может быть равен c для простого C, php, drupal5, drupal6, css, delphi, html4strict, ini, java, javascript, mysql, pascal, python, ruby, sql, xml - думаю здесь всё понятно, smarty - язык шаблонов Smarty. Потому что у меня установлен замечательнейший модуль GeSHi Filter for syntax highlightingAdmin is here.
PS: если уберёшь прямую ссылку на zlib, вытащу на главную :)
Если бы я хотел
Если бы я хотел на главную, ссылку бы не ставил :-) Извини, мне просто нужно было сохранить код в надежном месте. Я сотворил пост и тут же отправил его в delicious.
Php на Blue Gene не за работает, потому неактуально, но, тем не менее, спасибо.
Этот фильтр я на hpc@cmc тоже поставил. Странно, что я не заметил, что он у тебя есть...
Кстати, не знаешь, как для Друпал подключить подсветку для Фортрана. В исходной библиотеке она есть, а в Друпал-версии такого значения параметра не предлагается...
Хм. В Drupal-версии
Хм. В Drupal-версии этой библиотеки походу много ещё чего нет. Например нет языка Scilab (хотя есть Matlab), в оригинале он заявлен. Как включить - не знаю, но наверное тоже буду узнавать об этом, т.к. нужно для проекта - я сейчас работаю над одним проектом, тоже можно сказать по заданию кафедры (но добровольно) - над сайтом http://scilab.su/, который будет посвящён Scilab. Она становится популярной, а работ по ней русскоязычных маловато. Может быть удастся сформировать и русскоязычное сообщество. Ярушкина Н.Г. (мой научник) сейчас переписывает какие-то методички под неё. Раньше они были написаны под Matlab (помнишь сам, наверное, как сдавали нечёткую логику на Матлабе).
Так что если ты узнаешь раньше меня, сообщи... Если раньше я узнаю, то я сообщу. Здесь. А если никто не напишет, то никто и не искал значит :)
Admin is here.
При мне не
При мне не сдавали.
Да-да, Scilab набирает популярность. Но я по привычке все еще пользуюсь Matlab'ом. Даже собираюсь купить студенческую лицензию!
Поддержка Fortran and Scilab
Может, ты и сам разобрался уже, но я всё же напишу, ибо сделал это только что. Дело в том, что у нас с тобой, видимо, была немного устаревшая версия самой библиотеки GeSHi - 1.0.8 (у меня стояла именно эта версия), тогда как:
По крайней мере, на сегодня это так. Там тебе и Fortran, и Scilab и, по-моему, ещё около 5 новых языков добавлено.
Подсветку для языков Фортран и Сайлаб я включил на этом сайте.
PS: Когда зальёшь обновлённую библиотеку, и зайдёшь на страницу всех языков (
admin/settings/geshifilter/languages/all), не забудь нажать на ссылочку "Flush cache of available languages". :)Admin is here.
geshi & fortran
О! спасибо!
Я не знал про ссылку geshifilter/languages/all
Обновил geshi, зашел на страницу, где у меня был ма-а-аленький фортрановский код, а он уже подсвечен! (выходит, что я заранее прописал там правильное значение для тэга) :-)
Отправить комментарий