[SCM] Installer for game data files branch, wolf3d, updated. f16de3b03405d4881fe2dd9d0793b2b515cd9437

Jon Dowland jmtd at debian.org
Thu Mar 24 12:41:19 UTC 2011


The following commit has been merged in the wolf3d branch:
commit 38072c871fd64150325723a01069badec6778c0d
Author: Jon Dowland <jmtd at debian.org>
Date:   Thu Mar 24 12:37:07 2011 +0000

    fix-up wolf support

diff --git a/lib/wolf3d-mirrors b/lib/wolf3d-mirrors
new file mode 100644
index 0000000..a6c904c
--- /dev/null
+++ b/lib/wolf3d-mirrors
@@ -0,0 +1,3 @@
+# ftp://ftp.3drealms.com/share/1wolf14.zip ftp://ftp.3drealms.com/pub/share/1wolf14.zip
+http://pkg-games.alioth.debian.org/1wolf14.zip
+# http://localhost/1wolf14.zip http://localhost/foo/1wolf14.zip
diff --git a/supported/wolf3d b/supported/wolf3d
index 6a4d54b..a82e027 100644
--- a/supported/wolf3d
+++ b/supported/wolf3d
@@ -83,8 +83,8 @@ go() {
 	cd "$WORKDIR"
 
     gdp_unzip "$ZIPFILE" W3DSW14.SHR
-    /home/jon/wd/web/debian/games/game-data-packager/wolf/extract W3DSW14.SHR
-    rm "order.frm  w3dhelp.exe  W3DSW14.SHR  wolf3d.exe"
+    /home/jon/wd/web/debian/games/game-data-packager/wolf/extract W3DSW14.SHR >/dev/null
+    rm order.frm  w3dhelp.exe  W3DSW14.SHR  wolf3d.exe
 
 	wlfiles="
 		audiohed.wl1:58aa1b9892d5adfa725fab343d9446f8
@@ -95,6 +95,8 @@ go() {
 		vgagraph.wl1:74decb641b1a4faed173e10ab744bff0
 		vgahead.wl1:61bf1616e78367853c91f2c04e2c1cb7
 		vswap.wl1:6efa079414b817c97db779cecfb081c9
+		vendor.doc:eccc7fc421f3d1f00e6eabd6848637f6
+
 	"
 
     # XXX: we have to re-implement most of slipstream() here, due
@@ -114,7 +116,6 @@ go() {
         slipstream_file "$file" "usr/share/games/wolf3d/$file"
 		rm "$file"
     done
-    slipstream_file vendor.doc "usr/share/doc/wolf3d/vendor.doc"
     slipstream_instsize
     slipstream_repack "$OUTFILE"
     slipstream_cleanup
diff --git a/wolf/extract.c b/wolf/extract.c
new file mode 100644
index 0000000..7b5fb65
--- /dev/null
+++ b/wolf/extract.c
@@ -0,0 +1,172 @@
+/* utility to extract the .SHR installer data files of early ID software
+   shareware games
+   
+    Copyright (C) 2007 Hans de Goede  <j.w.r.degoede at hhs.nl>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or   
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of 
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <libdynamite.h>
+
+struct cookie_s {
+  char *in_buffer;
+  int in_buffer_remaining;
+  int in_buffer_index;
+  int in_buffer_size;
+  FILE* out_file;
+};   
+
+size_t reader(void* buffer, size_t size, void* cookie)
+{
+  struct cookie_s *c = cookie;
+  if (size > c->in_buffer_remaining)
+    size = c->in_buffer_remaining;
+    
+  memcpy (buffer, c->in_buffer + c->in_buffer_index, size);
+  
+  c->in_buffer_index += size;
+  c->in_buffer_remaining -= size;
+  
+  return size;
+}
+
+size_t writer(void* buffer, size_t size, void* cookie)
+{
+  struct cookie_s *c = cookie;
+  return fwrite(buffer, 1, size, c->out_file);
+}
+
+int main(int argc, char *argv[])
+{
+  struct cookie_s cookie;
+  FILE *in_file;
+  char filename[16];
+  unsigned char buf[4];
+  int i, compressed_size;
+    
+  if (argc != 2) {
+    fprintf(stderr, "%s: Usage: %s <filename.CHR> %d\n", argv[0], argv[0], argc);
+    return 1;
+  }
+  
+  in_file = fopen(argv[1], "r");
+  if (!in_file) {
+    fprintf(stderr, "error opening: %s", argv[1]);
+    perror(NULL);
+    return 1;
+  } 
+
+  /* skip first 0x3A bytes header */
+  if (fseek(in_file, 0x3A, SEEK_CUR)) {
+    perror("error skipping initial file header");
+    return 1;
+  }
+  
+  cookie.in_buffer = malloc(65536);
+  if (!cookie.in_buffer) {
+    fprintf(stderr, "Error: out of memory\n");
+    return 1;
+  }
+  cookie.in_buffer_size = 65536;
+  
+  while (1)
+  {
+    /* get the name of the file */
+    if (fread(filename, 1, sizeof(filename), in_file) != sizeof(filename)) {
+      if (feof(in_file)) {
+        free(cookie.in_buffer);
+        fclose(in_file);
+        return 0; /* done */
+      }
+      perror("error getting output filename from file");
+      return 1;
+    }
+
+    /* verify the filename and convert to lower case */
+    for (i = 0 ; i < sizeof(filename); i++) {
+      if (filename[i] == 0)
+        break; /* done */
+      if (!isprint(filename[i])) {
+        fprintf(stderr, "error invalid output filename\n");
+        return 1;
+      }
+      filename[i] = tolower(filename[i]);
+    }
+    if (i == sizeof(filename)) {
+      fprintf(stderr, "error too long output filename\n");
+      return 1;
+    }
+    
+    /* seek to compressed size */
+    if (fseek(in_file, 0x88 - sizeof(filename), SEEK_CUR)) {
+      perror("error skipping file header before file size");
+      return 1;
+    }
+
+    if (fread(buf, 1, 4, in_file) != 4) {
+      perror("error reading file size");
+      return 1;
+    }
+    compressed_size = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
+    if (compressed_size > cookie.in_buffer_size) {
+      cookie.in_buffer = realloc(cookie.in_buffer, compressed_size);
+      if (!cookie.in_buffer) {
+        fprintf(stderr, "Error: out of memory\n");
+        return 1;
+      }
+      cookie.in_buffer_size = compressed_size;
+    }
+
+    /* seek to begin of compressed data */
+    if (fseek(in_file, 0x1C, SEEK_CUR)) {
+      perror("error skipping file header before file size");
+      return 1;
+    }
+    
+    /* read compressed data */
+    if (fread(cookie.in_buffer, 1, compressed_size, in_file) !=
+          compressed_size) {
+      perror("error reading compressed data");
+      return 1;
+    }
+    
+    cookie.in_buffer_index = 0;
+    cookie.in_buffer_remaining = compressed_size;
+    
+    cookie.out_file = fopen(filename, "w");
+    if (!cookie.out_file) {
+      fprintf(stderr, "Error creating: %s for writing", filename);
+      perror(NULL);
+      return 1;
+    }
+
+    printf("decompressing: %s, compressed size: %d\n", filename,
+            compressed_size);
+    
+    if ((i = dynamite_explode(reader, writer, &cookie))) {
+      fprintf(stderr, "Error: %d while decompressing\n", i);
+      return i;
+    }
+    
+    fclose(cookie.out_file);
+  }
+  
+  /* never reached */
+  return 0;
+}
diff --git a/wolf3d-data/copyright b/wolf3d-data/copyright
index e4a619c..3087892 100644
--- a/wolf3d-data/copyright
+++ b/wolf3d-data/copyright
@@ -2,7 +2,7 @@ The wolf3d-data package was generated using game-data-packager.
 Copyright (C) 2008,2009 Jon Dowland <jmtd at debian.org>
 
 The files within "/usr/share/games/wolf3d" are subject to the copyright
-described in XXXX!
+described in /usr/share/doc/wolf3d-data/vendor.doc.
 
 The remainder of this package is covered by the following
 Licence:

-- 
Installer for game data files



More information about the Pkg-games-commits mailing list