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

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. #include <stdio.h>
  18. #ifdef STDC_HEADERS
  19. # include <stdlib.h>
  20. #else
  21. # ifdef HAVE_MALLOC_H
  22. #  include <malloc.h>
  23. # endif
  24. #endif
  25. #include "fileio.h"
  26. #include "bni.h"
  27. #include "common/setup_after.h"
  28. extern t_bnifile * load_bni(FILE *f) {
  29. t_bnifile *b;
  30. unsigned int i;
  31. if (f == NULL) return NULL;
  32. b = malloc(sizeof(t_bnifile));
  33. file_rpush(f);
  34. b->unknown1 = file_readd_le();
  35. if (b->unknown1 != 0x00000010)
  36. fprintf(stderr,"load_bni: field 1 is not 0x00000010. Data may be invalid!n");
  37. b->unknown2 = file_readd_le();
  38. if (b->unknown2 != 0x00000001)
  39. fprintf(stderr,"load_bni: field 2 is not 0x00000001. Data may be invalid!n");
  40. b->numicons = file_readd_le();
  41. if (b->numicons > BNI_MAXICONS) {
  42. fprintf(stderr,"load_bni: more than %d (BNI_MAXICONS) icons. Increase maximum number of icons in "bni.h".n",BNI_MAXICONS);
  43. b->numicons = BNI_MAXICONS;
  44. }
  45. b->dataoffset = file_readd_le();
  46. if (b->numicons<1) {
  47. fprintf(stderr,"load_bni: strange, no icons present in BNI filen");
  48. b->icons = NULL;
  49. } else {
  50. b->icons = malloc(b->numicons*sizeof(t_bniicon));
  51. }
  52. for (i = 0; i < b->numicons; i++) {
  53. b->icons->icon[i].id = file_readd_le();
  54. b->icons->icon[i].x = file_readd_le();
  55. b->icons->icon[i].y = file_readd_le();
  56. if (b->icons->icon[i].id == 0) {
  57. b->icons->icon[i].tag = file_readd_le();
  58. } else {
  59. b->icons->icon[i].tag = 0;
  60. }
  61. b->icons->icon[i].unknown = file_readd_le();
  62. }
  63. if (ftell(f)!=(long)b->dataoffset) 
  64. fprintf(stderr,"load_bni: Warning, %lu bytes of garbage after BNI headern",(unsigned long)(b->dataoffset-ftell(f)));
  65. file_rpop();
  66. return b;
  67. }
  68. extern int write_bni(FILE *f,t_bnifile *b) {
  69. unsigned int i;
  70. if (f == NULL) return -1;
  71. if (b == NULL) return -1;
  72. file_wpush(f);
  73. file_writed_le(b->unknown1);
  74. if (b->unknown1 != 0x00000010)
  75. fprintf(stderr,"write_bni: field 1 is not 0x00000010. Data may be invalid!n");
  76. file_writed_le(b->unknown2);
  77. if (b->unknown2 != 0x00000001)
  78. fprintf(stderr,"write_bni: field 2 is not 0x00000001. Data may be invalid!n");
  79. file_writed_le(b->numicons);
  80. file_writed_le(b->dataoffset);
  81. for (i = 0; i < b->numicons; i++) {
  82. file_writed_le(b->icons->icon[i].id);
  83. file_writed_le(b->icons->icon[i].x);
  84. file_writed_le(b->icons->icon[i].y);
  85. if (b->icons->icon[i].id == 0) {
  86. file_writed_le(b->icons->icon[i].tag);
  87. }
  88. file_writed_le(b->icons->icon[i].unknown);
  89. }
  90. if (ftell(f)!=(long)b->dataoffset)
  91. fprintf(stderr,"Warning: dataoffset is incorrect! (=0x%lx should be 0x%lx)n",(unsigned long)b->dataoffset,(unsigned long)ftell(f));
  92. file_wpop();
  93. return 0;
  94. }