bnilist.c
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.     Copyright (C) 2000  Marco Ziech (mmz@gmx.net)
  3.     Copyright (C) 2000  Ross Combs (rocombs@cs.nmsu.edu)
  4.     This program is free software; you can redistribute it and/or modify
  5.     it under the terms of the GNU General Public License as published by
  6.     the Free Software Foundation; either version 2 of the License, or
  7.     (at your option) any later version.
  8.     This program is distributed in the hope that it will be useful,
  9.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.     GNU General Public License for more details.
  12.     You should have received a copy of the GNU General Public License
  13.     along with this program; if not, write to the Free Software
  14.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  15. */
  16. #include "common/setup_before.h"
  17. #ifdef HAVE_STDDEF_H
  18. # include <stddef.h>
  19. #else
  20. # ifndef NULL
  21. #  define NULL ((void *)0)
  22. # endif
  23. #endif
  24. #include <stdio.h>
  25. #ifdef STDC_HEADERS
  26. # include <stdlib.h>
  27. #endif
  28. #include "compat/exitstatus.h"
  29. #ifdef HAVE_STRING_H
  30. # include <string.h>
  31. #else
  32. # ifdef HAVE_STRINGS_H
  33. #  include <strings.h>
  34. # endif
  35. #endif
  36. #include <errno.h>
  37. #include "compat/strerror.h"
  38. #include "tga.h"
  39. #include "fileio.h"
  40. #include "common/version.h"
  41. #include "common/setup_after.h"
  42. static void usage(char const * progname)
  43. {
  44.     fprintf(stderr,
  45.             "usage: %s [<options>] [--] [<BNI file>]n"
  46.             "    -h, --help, --usage  show this information and exitn"
  47.             "    -v, --version        print version number and exitn",progname);
  48.     
  49.     exit(STATUS_FAILURE);
  50. }
  51. extern int main(int argc, char * argv[])
  52. {
  53.     char const * bnifile=NULL;
  54.     FILE *       fp;
  55.     int          a;
  56.     int          forcefile=0;
  57.     char         dash[]="-"; /* unique address used as flag */
  58.     
  59.     if (argc<1 || !argv || !argv[0])
  60.     {
  61.         fprintf(stderr,"bad argumentsn");
  62.         return STATUS_FAILURE;
  63.     }
  64.     
  65.     for (a=1; a<argc; a++)
  66.         if (forcefile && !bnifile)
  67.             bnifile = argv[a];
  68.         else if (strcmp(argv[a],"-")==0 && !bnifile)
  69.             bnifile = dash;
  70.         else if (argv[a][0]!='-' && !bnifile)
  71.             bnifile = argv[a];
  72.         else if (forcefile || argv[a][0]!='-' || strcmp(argv[a],"-")==0)
  73.         {
  74.             fprintf(stderr,"%s: extra file argument "%s"n",argv[0],argv[a]);
  75.             usage(argv[0]);
  76.         }
  77.         else if (strcmp(argv[a],"--")==0)
  78.             forcefile = 1;
  79.         else if (strcmp(argv[a],"-v")==0 || strcmp(argv[a],"--version")==0)
  80.         {
  81.             printf("version "PVPGN_VERSION"n");
  82.             return STATUS_SUCCESS;
  83.         }
  84.         else if (strcmp(argv[a],"-h")==0 || strcmp(argv[a],"--help")==0 || strcmp(argv[a],"--usage")
  85. ==0)
  86.             usage(argv[0]);
  87.         else
  88.         {
  89.             fprintf(stderr,"%s: unknown option "%s"n",argv[0],argv[a]);
  90.             usage(argv[0]);
  91.         }
  92.     
  93.     if (!bnifile)
  94. bnifile = dash;
  95.     
  96.     if (bnifile==dash)
  97. fp = stdin;
  98.     else
  99. if (!(fp = fopen(bnifile,"r")))
  100. {
  101.     fprintf(stderr,"%s: could not open BNI file "%s" for reading (fopen: %s)n",argv[0],bnifile,strerror(errno));
  102.     exit(STATUS_FAILURE);
  103. }
  104.     
  105.     {
  106. t_tgaimg * tgaimg;
  107. int        i;
  108. int        bniid, unknown, icons, datastart;
  109. int        expected_width, expected_height;
  110. file_rpush(fp);
  111. bniid = file_readd_le();
  112. unknown = file_readd_le();
  113. icons = file_readd_le();
  114. datastart = file_readd_le();
  115. fprintf(stderr,"BNIHeader: id=0x%08x unknown=0x%08x icons=0x%08x datastart=0x%08xn",bniid,unknown,icons,datastart);
  116. expected_width = 0;
  117. expected_height = 0;
  118. for (i = 0; i < icons; i++) {
  119. int id,x,y,flags,tag;
  120. id = file_readd_le();
  121. x = file_readd_le();
  122. y = file_readd_le();
  123. if (id == 0) {
  124. tag = file_readd_le();
  125. } else {
  126. tag = 0;
  127. }
  128. flags = file_readd_le();
  129. fprintf(stderr,"Icon[%d]: id=0x%08x x=%d y=%d tag=0x%08x("%c%c%c%c") flags=0x%08xn",i,id,x,y,tag,
  130. ((unsigned char)((tag >> 24) & 0xff)),
  131. ((unsigned char)((tag >> 16) & 0xff)),
  132. ((unsigned char)((tag >> 8) & 0xff)),
  133. ((unsigned char)((tag) & 0xff)),flags);
  134. if (x > expected_width) expected_width = x;
  135. expected_height += y;
  136. }
  137. if (ftell(fp)!=datastart) {
  138. fprintf(stderr,"Warning: garbage after header (pos=0x%lx-datastart=0x%lx) = %ld bytes of garbage! n",(unsigned long)ftell(fp),(unsigned long)datastart,(long)(ftell(fp)-datastart));
  139. }
  140. tgaimg = load_tgaheader();
  141. print_tga_info(tgaimg,stdout);
  142. fprintf(stderr,"n");
  143. fprintf(stderr,"Check: Expected %dx%d TGA, got %ux%u. %sn",expected_width,expected_height,tgaimg->width,tgaimg->height,((tgaimg->width == expected_width)&&(tgaimg->height == expected_height)) ? "OK." : "FAIL.");
  144. fprintf(stderr,"Check: Expected 24bit color depth TGA, got %dbit. %sn",tgaimg->bpp,(tgaimg->bpp == 24) ? "OK." : "FAIL.");
  145. fprintf(stderr,"Check: Expected ImageType 10, got %d. %sn",tgaimg->imgtype,(tgaimg->imgtype == 10) ? "OK." : "FAIL.");
  146. file_rpop();
  147.     }
  148.     
  149.     if (bnifile!=dash && fclose(fp)<0)
  150. fprintf(stderr,"%s: could not close BNI file "%s" after reading (fclose: %s)n",argv[0],bnifile,strerror(errno));
  151.     return STATUS_SUCCESS;
  152. }