source: abuse/trunk/src/imlib/unpackgl.cpp @ 128

Last change on this file since 128 was 124, checked in by Sam Hocevar, 15 years ago
  • Get rid of ugly tabs and trailing spaces everywhere.
File size: 2.4 KB
RevLine 
[56]1/*
2 *  Abuse - dark 2D side-scrolling platform game
3 *  Copyright (c) 1995 Crack dot Com
4 *
5 *  This software was released into the Public Domain. As with most public
6 *  domain software, no warranty is made or implied by Crack dot Com or
7 *  Jonathan Clark.
8 */
9
10#include "config.h"
11
12#include <stdio.h>
13#include <ctype.h>
14
[2]15#include "system.h"
16#include "jmalloc.hpp"
17#include "macs.hpp"
18
19void unpackgl(char *fn, int pict_only)
20{
21  unsigned short dir_length,sl,x,amread,bufsize;
22  unsigned long offset,ret_ofs,length;
23  char name[14],st[50],*buf;
24  FILE *fp,*ot;
25  CHECK(fn);
26  fp=fopen(fn,"rb");
27  if (!fp) return ;
28
29  if (fread(&dir_length,2,1,fp)!=1) return ;
30  dir_length=int_to_local(dir_length)/17-1;
31  ret_ofs=ftell(fp);
32  while (dir_length--)
33  {
34    fseek(fp,ret_ofs,SEEK_SET);
35    if (fread(&offset,4,1,fp)!=1) return ;
36    offset=long_to_local(offset);
37    if (fread(name,13,1,fp)!=1)  return ;
38    name[13]=0;
39    sl=strlen(name);
40    ret_ofs=ftell(fp);  // save the current spot in the file so we can come back to it later
41    if (toupper(name[sl-3])=='P' || toupper(name[sl-3])=='C' || !pict_only)
42    {
43      fseek(fp,offset,SEEK_SET);
44      fread(&length,1,4,fp);
45      length=long_to_local(length);
46      if (length>1000000)
47        exit(1);
48      ot=fopen(name,"rb");
49      if (ot)
50      { printf("File (%s) already exsist, overwrite (y/n)?\n",name);
[124]51    fgets(st,49,stdin);
52    if (!(st[0]=='Y' || st[0]=='y'))
53      length=0;
54    fclose(ot);
[2]55      }
56      if (length)
[124]57    ot=fopen(name,"wb");
[2]58      if (!ot) return ;
59      bufsize=0xf000;
60      do {
[124]61    buf=(char *)jmalloc(bufsize,"unpack_gl::buffer");
62    if (!buf) bufsize-=100;
[2]63      } while (!buf);
64
65      while (length)
66      {
[124]67    if (length>bufsize)
68      amread=bufsize;
69    else amread=length;
70    fread(buf,1,amread,fp);
71    fwrite(buf,1,amread,ot);
72    length-=amread;
[2]73      }
74      jfree(buf);
75      if (ot) fclose(ot);
76    }
77  }
78  fclose(fp);
79}
80
81main(int argc, char **argv)
82{
83  FILE *fp;
84  char fn[100];
85  int t,i,x;
86  if (argc<2)
87  { printf("Usage : unpackgl filename[.gl] [-p]\n");
88    printf("  -p only unpacks picture files\n");
89    printf("  Unpackes the files contain within a GL file (GRASP format)\n");
90    printf("  Does not change the orginal file\n");
91    exit(0);
92  }
93  strcpy(fn,argv[1]);
94  if (fn[strlen(fn)-3]!='.')
95    strcat(fn,".gl");
96  if (*argv[2]=='-' && *(argv[2]+1)=='p')
97    unpackgl(fn,1);
98  else unpackgl(fn,0);
99  return 0;
100}
101
Note: See TracBrowser for help on using the repository browser.