~ubuntu-branches/ubuntu/raring/xblast-tnt-models/raring

« back to all changes in this revision

Viewing changes to debian/sprites/epmtools/epmuncompress.c

  • Committer: Bazaar Package Importer
  • Author(s): Gerfried Fuchs
  • Date: 2009-02-06 09:51:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090206095125-hk5bmd538fdyr5yc
Tags: 20050106-3
* Make use of the http://sf.net/$project/ hack in debian/watch instead of
  chosing a mirror on our own.
* Added Homepage source control field.
* Bumped Standards-Version to 3.8.0, no changes needed.
* Added rendering-sources of some models where the author doesn't accept the
  xblast team reasoning to accept the rendered images as accepted form for
  modifications. The images originally were submitted without sources,
  thanks to Bernhard R. Link for being able to offer the sources
  (closes: #512284). Urgency high as this is a RC fix targetted at lenny.
* Added copyright informations to copyright file for above mentioned models
  to clear things up.
* Fixed copyright information with respect to GPLv2 or later.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * program epmcompress - compress Extented Pixmap Format epm using
 
3
 *                       simple Runlength Encoding
 
4
 *
 
5
 * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
 
6
 * April 5th, 1997
 
7
 *
 
8
 * This program is free software; you can redistribute it and/or modify
 
9
 * it under the terms of the GNU General Public Licence as by published
 
10
 * by the Free Software Foundation; either version 2; or (at your option)
 
11
 * any later version
 
12
 *
 
13
 * This program is distributed in the hope that it will entertaining,
 
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 
15
 * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 
16
 * Public License for more details.
 
17
 *
 
18
 * $Id: epmuncompress.c,v 1.1 1999/04/04 11:43:54 xblast Exp $
 
19
 * $Log: epmuncompress.c,v $
 
20
 * Revision 1.1  1999/04/04 11:43:54  xblast
 
21
 * Initial revision
 
22
 *
 
23
 */
 
24
 
 
25
#include <stdio.h>
 
26
#include <stdlib.h>
 
27
#include <unistd.h>
 
28
#include <string.h>
 
29
 
 
30
#ifdef __STDC__
 
31
int 
 
32
main (int argc,
 
33
      char *argv[])
 
34
#else
 
35
int 
 
36
main (argv, argv)
 
37
  int argc;
 
38
  char *argv[];
 
39
#endif
 
40
{
 
41
  FILE *fp;
 
42
  int width, height, maxval, depth;
 
43
  int arg, n_pixel, n_bytes;
 
44
  unsigned char *inbuf, *outbuf;
 
45
  unsigned char *src, *dst;
 
46
  unsigned zero_count;
 
47
  char magic[256];
 
48
  char file_name[1024];
 
49
 
 
50
  /* check args (part one) */
 
51
  if ( (argc < 2) || (0 == strcmp(argv[1],"-?") ) ) {
 
52
    fprintf(stderr, "usage: %s epmfile ...\n", argv[0]);
 
53
    return (argc != 2);
 
54
  }
 
55
 
 
56
  for (arg = 1; arg < argc; arg++) {
 
57
 
 
58
    /* open file */
 
59
    if (NULL == (fp = fopen(argv[arg],"r") ) ) {
 
60
      fprintf(stderr, "%s: failed to open file %s for reading\n", 
 
61
              argv[0], argv[arg]);
 
62
      return 1;
 
63
    }
 
64
 
 
65
    /* read header */
 
66
    if (5 != fscanf(fp, "%s%d%d%d%d%*c", magic,&width,&height,&maxval,&depth) ) {
 
67
      fprintf(stderr, "%s: Failed to read epm header\n",argv[0]);
 
68
      return 1;
 
69
    }
 
70
    /* test magic */
 
71
    if (0 != strcmp(magic,"PZ")) {
 
72
      if (0 == strcmp(magic, "PX") ) {
 
73
        fprintf(stderr, "File \"%s\" is already uncompressed.\n", argv[arg]);
 
74
        fclose (fp);
 
75
        continue;
 
76
      }
 
77
      fprintf(stderr, "%s: Wrong magic word \"%s\".\n",argv[0],magic);
 
78
      return 1;
 
79
    }
 
80
 
 
81
    /* calc number of pixel per layer */
 
82
    n_pixel = width*height;
 
83
#ifdef DEBUG
 
84
    fprintf (stderr, "%d pixels\n", n_pixel);
 
85
#endif
 
86
    
 
87
 
 
88
    /* alloc input and color buffer */
 
89
    if ( (NULL == (inbuf  = malloc(2*depth*n_pixel*sizeof(char) ) ) ) ||
 
90
         (NULL == (outbuf = calloc(depth*n_pixel,sizeof(char) ) ) ) ) {
 
91
      fprintf(stderr, "%s: Failed to alloc buffer\n",argv[0]);
 
92
      return 1;
 
93
    }
 
94
    
 
95
    /* read epm data */
 
96
    if (0 == (n_bytes = fread(inbuf, sizeof(char), 2*depth*n_pixel, fp) ) ) {
 
97
      perror(argv[0]);
 
98
      return 1;
 
99
    }
 
100
    fprintf (stderr, "File \"%s\": %6.1f%%.\n", argv[arg], 
 
101
             100. * (1. - (double)n_bytes/(depth*n_pixel) ) );
 
102
 
 
103
    /* convert data */
 
104
    for (src = inbuf, dst=outbuf; (src < inbuf + n_bytes) && (dst < outbuf + depth*n_pixel); src++) {
 
105
      if (*src) {
 
106
        *dst = *src;
 
107
        dst ++;
 
108
      } else {
 
109
        zero_count = 0;
 
110
        do {
 
111
          src ++;
 
112
          zero_count += *src;
 
113
        } while (*src == 255);
 
114
        memset (dst, 0, zero_count);
 
115
        dst += zero_count;
 
116
      }
 
117
    }
 
118
    fclose (fp);
 
119
 
 
120
    /* rename old file */
 
121
    sprintf (file_name, "%s~", argv[arg]);
 
122
    if (rename (argv[arg], file_name)) {
 
123
      fprintf (stderr, "Failed to create backup file \"%s\".\n",
 
124
               file_name);
 
125
      return 1;
 
126
    }
 
127
    /* write new file */
 
128
    if (NULL == (fp = fopen (argv[arg], "w") ) ) {
 
129
      fprintf(stderr, "%s: failed to open file %s for writing\n", 
 
130
              argv[0], argv[arg]);
 
131
      return 1;
 
132
    }
 
133
    /* write header */
 
134
    fprintf (fp, "PX\n");
 
135
    fprintf (fp, "%d %d %d %d\n", width, height, maxval, depth);
 
136
    fwrite (outbuf, sizeof(char), dst - outbuf, fp);
 
137
    fclose (fp);
 
138
    /* free buffers */
 
139
    free (outbuf);
 
140
    free (inbuf);
 
141
  }
 
142
  return 0;
 
143
}
 
144
 
 
145
 
 
146
 
 
147