maketree.c
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:3k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: maketree.c,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 15:50:14  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* maketree.c -- make inffixed.h table for decoding fixed codes
  10.  * Copyright (C) 1995-2002 Mark Adler
  11.  * For conditions of distribution and use, see copyright notice in zlib.h 
  12.  */
  13. /* WARNING: this file should *not* be used by applications. It is
  14.    part of the implementation of the compression library and is
  15.    subject to change. Applications should only use zlib.h.
  16.  */
  17. /* This program is included in the distribution for completeness.
  18.    You do not need to compile or run this program since inffixed.h
  19.    is already included in the distribution.  To use this program
  20.    you need to compile zlib with BUILDFIXED defined and then compile
  21.    and link this program with the zlib library.  Then the output of
  22.    this program can be piped to inffixed.h. */
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include "zutil.h"
  26. #include "inftrees.h"
  27. /* simplify the use of the inflate_huft type with some defines */
  28. #define exop word.what.Exop
  29. #define bits word.what.Bits
  30. /* generate initialization table for an inflate_huft structure array */
  31. void maketree(uInt b, inflate_huft *t)
  32. {
  33.   int i, e;
  34.   i = 0;
  35.   while (1)
  36.   {
  37.     e = t[i].exop;
  38.     if (e && (e & (16+64)) == 0)        /* table pointer */
  39.     {
  40.       fprintf(stderr, "maketree: cannot initialize sub-tables!n");
  41.       exit(1);
  42.     }
  43.     if (i % 4 == 0)
  44.       printf("n   ");
  45.     printf(" {{{%u,%u}},%u}", t[i].exop, t[i].bits, t[i].base);
  46.     if (++i == (1<<b))
  47.       break;
  48.     putchar(',');
  49.   }
  50.   puts("");
  51. }
  52. /* create the fixed tables in C initialization syntax */
  53. void main(void)
  54. {
  55.   int r;
  56.   uInt bl, bd;
  57.   inflate_huft *tl, *td;
  58.   z_stream z;
  59.   z.zalloc = zcalloc;
  60.   z.opaque = (voidpf)0;
  61.   z.zfree = zcfree;
  62.   r = inflate_trees_fixed(&bl, &bd, &tl, &td, &z);
  63.   if (r)
  64.   {
  65.     fprintf(stderr, "inflate_trees_fixed error %dn", r);
  66.     return;
  67.   }
  68.   puts("/* inffixed.h -- table for decoding fixed codes");
  69.   puts(" * Generated automatically by the maketree.c program");
  70.   puts(" */");
  71.   puts("");
  72.   puts("/* WARNING: this file should *not* be used by applications. It is");
  73.   puts("   part of the implementation of the compression library and is");
  74.   puts("   subject to change. Applications should only use zlib.h.");
  75.   puts(" */");
  76.   puts("");
  77.   printf("local uInt fixed_bl = %d;n", bl);
  78.   printf("local uInt fixed_bd = %d;n", bd);
  79.   printf("local inflate_huft fixed_tl[] = {");
  80.   maketree(bl, tl);
  81.   puts("  };");
  82.   printf("local inflate_huft fixed_td[] = {");
  83.   maketree(bd, td);
  84.   puts("  };");
  85. }