]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - plugins/vfswad/unwad.cpp
more eol-style
[xonotic/netradiant.git] / plugins / vfswad / unwad.cpp
index e6c36b7e78cb9162e9b85a78e3d11a4ad8618f70..36a7ee9de27ce00bd37da0a42a331904707371ab 100644 (file)
-#include <stdlib.h>\r
-#include <stdio.h>\r
-#include <string.h>\r
-\r
-#include "unwad.h"\r
-\r
-\r
-wadFile_t *wadCleanup(wadFile_t *wf)\r
-{\r
-  if (wf)\r
-  {\r
-    if (wf->fin) fclose(wf->fin);\r
-    if (wf->lpHeader) free(wf->lpHeader);\r
-    if (wf->lpLump) free(wf->lpLump);\r
-    if (wf->lpMip) free(wf->lpMip);\r
-    if (wf->wadfilename) free(wf->wadfilename);\r
-    free (wf);\r
-    wf = NULL;\r
-  }\r
-  return wf;\r
-}\r
-\r
-int wadGetCurrentFileInfo (    wadFile_t *wf, char *szFileName, unsigned long fileNameBufferSize, unsigned long *filesize)\r
-{\r
-  /* returns 0 if error, or 1 for sucess */\r
-  // if this fails you'll need to re-position the fileposition\r
-  // before attempting any other calls.  e.g. call wadGoToFirstFile()\r
-\r
-  if (fread(wf->lpLump,sizeof(WAD3_LUMP),1,wf->fin)!=1)\r
-               return 0;\r
-  strncpy(szFileName, wf->lpLump->name, fileNameBufferSize);\r
-  szFileName[fileNameBufferSize-1] = 0; // null terminate\r
-\r
-  *filesize = wf->lpLump->size;\r
-\r
-  return 1;\r
-}\r
-\r
-int wadGoToFile(wadFile_t *wf, unsigned long filenum)\r
-{\r
-  if (!wf)\r
-    return 0;\r
-\r
-  if (!wf->fin)\r
-    return 0;\r
-\r
-  if (filenum >= wf->lpHeader->numlumps)\r
-    return 0;\r
-\r
-  if (fseek(wf->fin,wf->lpHeader->infotableofs + (filenum * sizeof(WAD3_LUMP)),SEEK_SET) != 0)\r
-               return 0;\r
-\r
-  wf->currentfile = filenum;\r
-\r
-  return 1;\r
-}\r
-\r
-int wadGoToNextFile(wadFile_t *wf)\r
-{\r
-  return(wadGoToFile(wf, wf->currentfile + 1));\r
-}\r
-\r
-int wadGoToFirstFile(wadFile_t *wf)\r
-{\r
-  /* returns 0 if error, or 1 for sucess */\r
-\r
-  if (!wf)\r
-    return 0;\r
-\r
-  if (!wf->fin)\r
-    return 0;\r
-\r
-  if (fseek(wf->fin,wf->lpHeader->infotableofs,SEEK_SET) != 0)\r
-               return 0;\r
-\r
-  wf->currentfile = 0;\r
-\r
-  return 1;\r
-}\r
-\r
-wadFile_t *wadOpen(const char* path)\r
-{\r
-\r
-  wadFile_t *wf = NULL;\r
-\r
-  if (!path)\r
-    return NULL;\r
-\r
-  wf = new wadFile_s;\r
-       memset (wf, 0, sizeof(*wf));\r
-\r
-  if (!wf)\r
-    return NULL;\r
-\r
-  wf->fin=fopen(path,"rb");\r
-       if (wf->fin==NULL)\r
-               return wadCleanup(wf);\r
-\r
-  // get the file size\r
-       if (fseek(wf->fin,0,SEEK_END) != 0)\r
-               return wadCleanup(wf);\r
-\r
-  wf->FileSize = ftell( wf->fin );\r
-\r
-       // Make sure it's at least big enough to manipulate the header\r
-       if (wf->FileSize < sizeof(WAD3_HEADER))\r
-       {\r
-    // WAD3 file is malformed.\r
-               return wadCleanup(wf);\r
-       }\r
-\r
-  // go back to the start\r
-  if (fseek(wf->fin,0,SEEK_SET)!=0)\r
-               return wadCleanup(wf);\r
-\r
-  // allocate buffers\r
-  wf->lpHeader = (LPWAD3_HEADER) malloc(sizeof(WAD3_HEADER));\r
-  wf->lpLump = (LPWAD3_LUMP) malloc(sizeof(WAD3_LUMP));\r
-  wf->lpMip = (LPWAD3_MIP) malloc(sizeof(WAD3_MIP));\r
-\r
-  if (!(wf->lpHeader) || !(wf->lpLump) || !(wf->lpMip))\r
-    return wadCleanup(wf);\r
-\r
-  // read the header.\r
-  if (fread(wf->lpHeader,sizeof(WAD3_HEADER),1,wf->fin)!=1)\r
-               return wadCleanup(wf);\r
-\r
-       if (wf->lpHeader->identification != WAD2_ID && wf->lpHeader->identification != WAD3_ID)\r
-       {\r
-       // Invalid WAD3 header id.\r
-               return wadCleanup(wf);\r
-       }\r
-\r
-       // Make sure our table is really there\r
-       if ( ((wf->lpHeader->numlumps * sizeof(WAD3_LUMP)) + wf->lpHeader->infotableofs) > wf->FileSize)\r
-       {\r
-               // WAD3 file is malformed.\r
-               return wadCleanup(wf);\r
-       }\r
-\r
-  // Store the name of the wadfile\r
-  if (!(wf->wadfilename = strdup(path)))\r
-    return wadCleanup(wf);\r
-\r
-  return wf;\r
-}\r
-\r
-int wadOpenCurrentFileByNum (wadFile_t *wf, unsigned long filenumber)\r
-{\r
-  /* returns 0 if error, or 1 for sucess */\r
-  return(wadGoToFile(wf, filenumber));\r
-}\r
-\r
-void wadCloseCurrentFile (wadFile_t *wf)\r
-{\r
-  // nothing to do really...\r
-}\r
-\r
-unsigned long wadReadCurrentFile (wadFile_t *wf , char *bufferptr, unsigned long size)\r
-{\r
-  // returns 0 if error, or the amount of data read into the buffer\r
-  if (fread(wf->lpLump,sizeof(WAD3_LUMP),1,wf->fin)!=1)\r
-               return 0;\r
-\r
-  // dunno how to handle any other image types but this (yet)\r
-  if (wf->lpLump->type != WAD2_TYPE_MIP && wf->lpLump->type != WAD3_TYPE_MIP)\r
-    return 0;\r
-\r
-  // go to first mip\r
-  if (fseek(wf->fin, wf->lpLump->filepos, SEEK_SET) != 0)\r
-    return 0;\r
-\r
-  if (fread(bufferptr,size,1,wf->fin) == 1)\r
-    return (size);\r
-  else\r
-    return 0;\r
-}\r
-\r
-/*\r
-\r
-.. or we could do it the long way, and process the file as we go..\r
-\r
-\r
-*/\r
-/*\r
-unsigned long wadReadCurrentFile (wadFile_t *wf , char *bufferptr, unsigned long size)\r
-{\r
-  // returns 0 if error, or the amount of data read into the buffer\r
-  unsigned long bufferpos;\r
-  unsigned long mipdatasize;\r
-  WORD palettesize;\r
-\r
-  if (fread(wf->lpLump,sizeof(WAD3_LUMP),1,wf->fin)!=1)\r
-               return 0;\r
-\r
-  if (wf->lpLump->type == WAD3_TYPE_MIP) // can we handle it ?\r
-  {\r
-\r
-    // bounds check.\r
-    if (wf->lpLump->filepos >= wf->FileSize)\r
-      return 0; // malformed wad3\r
-\r
-    // go to first mip\r
-    if (fseek(wf->fin, wf->lpLump->filepos, SEEK_SET) != 0)\r
-               return 0;\r
-\r
-    // and read it\r
-    if (fread(wf->lpMip,sizeof(WAD3_MIP),1,wf->fin)!=1)\r
-      return 0;\r
-\r
-    // store in buffer.\r
-    memcpy(bufferptr, wf->lpMip, sizeof(WAD3_MIP));\r
-    bufferpos = sizeof(WAD3_MIP);\r
-\r
-    // now read the MIP data.\r
-    // mip data\r
-    if (fseek(wf->fin, wf->lpLump->filepos + wf->lpMip->offsets[0], SEEK_SET) != 0)\r
-               return 0;\r
-\r
-    mipdatasize = GET_MIP_DATA_SIZE(wf->lpMip->width,wf->lpMip->height);\r
-\r
-    if (fread(bufferptr+bufferpos, mipdatasize, 1, wf->fin)!=1)\r
-      return 0;\r
-\r
-    bufferpos += mipdatasize;\r
-\r
-    // ok, that's the mip data itself, now grab the palette size.\r
-    if (fread(bufferptr+bufferpos,sizeof(WORD),1,wf->fin)!=1)\r
-      return 0;\r
-\r
-    palettesize = *(WORD *)(bufferptr+bufferpos);\r
-\r
-    bufferpos += sizeof(WORD);\r
-\r
-    // grab the palette itself\r
-    if (fread(bufferptr+bufferpos,palettesize*3,1,wf->fin)!=1)\r
-      return 0;\r
-\r
-    bufferpos += palettesize*3;\r
-\r
-    // and finally the one-word padding.\r
-    if (fread(bufferptr+bufferpos,sizeof(WORD),1,wf->fin)!=1)\r
-      return 0;\r
-\r
-    bufferpos += sizeof(WORD);\r
-\r
-    return(bufferpos); // return the amount of bytes read.\r
-  }\r
-  return 0;\r
-}\r
-*/\r
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "unwad.h"
+
+
+wadFile_t *wadCleanup(wadFile_t *wf)
+{
+  if (wf)
+  {
+    if (wf->fin) fclose(wf->fin);
+    if (wf->lpHeader) free(wf->lpHeader);
+    if (wf->lpLump) free(wf->lpLump);
+    if (wf->lpMip) free(wf->lpMip);
+    if (wf->wadfilename) free(wf->wadfilename);
+    free (wf);
+    wf = NULL;
+  }
+  return wf;
+}
+
+int wadGetCurrentFileInfo (    wadFile_t *wf, char *szFileName, unsigned long fileNameBufferSize, unsigned long *filesize)
+{
+  /* returns 0 if error, or 1 for sucess */
+  // if this fails you'll need to re-position the fileposition
+  // before attempting any other calls.  e.g. call wadGoToFirstFile()
+
+  if (fread(wf->lpLump,sizeof(WAD3_LUMP),1,wf->fin)!=1)
+               return 0;
+  strncpy(szFileName, wf->lpLump->name, fileNameBufferSize);
+  szFileName[fileNameBufferSize-1] = 0; // null terminate
+
+  *filesize = wf->lpLump->size;
+
+  return 1;
+}
+
+int wadGoToFile(wadFile_t *wf, unsigned long filenum)
+{
+  if (!wf)
+    return 0;
+
+  if (!wf->fin)
+    return 0;
+
+  if (filenum >= wf->lpHeader->numlumps)
+    return 0;
+
+  if (fseek(wf->fin,wf->lpHeader->infotableofs + (filenum * sizeof(WAD3_LUMP)),SEEK_SET) != 0)
+               return 0;
+
+  wf->currentfile = filenum;
+
+  return 1;
+}
+
+int wadGoToNextFile(wadFile_t *wf)
+{
+  return(wadGoToFile(wf, wf->currentfile + 1));
+}
+
+int wadGoToFirstFile(wadFile_t *wf)
+{
+  /* returns 0 if error, or 1 for sucess */
+
+  if (!wf)
+    return 0;
+
+  if (!wf->fin)
+    return 0;
+
+  if (fseek(wf->fin,wf->lpHeader->infotableofs,SEEK_SET) != 0)
+               return 0;
+
+  wf->currentfile = 0;
+
+  return 1;
+}
+
+wadFile_t *wadOpen(const char* path)
+{
+
+  wadFile_t *wf = NULL;
+
+  if (!path)
+    return NULL;
+
+  wf = new wadFile_s;
+       memset (wf, 0, sizeof(*wf));
+
+  if (!wf)
+    return NULL;
+
+  wf->fin=fopen(path,"rb");
+       if (wf->fin==NULL)
+               return wadCleanup(wf);
+
+  // get the file size
+       if (fseek(wf->fin,0,SEEK_END) != 0)
+               return wadCleanup(wf);
+
+  wf->FileSize = ftell( wf->fin );
+
+       // Make sure it's at least big enough to manipulate the header
+       if (wf->FileSize < sizeof(WAD3_HEADER))
+       {
+    // WAD3 file is malformed.
+               return wadCleanup(wf);
+       }
+
+  // go back to the start
+  if (fseek(wf->fin,0,SEEK_SET)!=0)
+               return wadCleanup(wf);
+
+  // allocate buffers
+  wf->lpHeader = (LPWAD3_HEADER) malloc(sizeof(WAD3_HEADER));
+  wf->lpLump = (LPWAD3_LUMP) malloc(sizeof(WAD3_LUMP));
+  wf->lpMip = (LPWAD3_MIP) malloc(sizeof(WAD3_MIP));
+
+  if (!(wf->lpHeader) || !(wf->lpLump) || !(wf->lpMip))
+    return wadCleanup(wf);
+
+  // read the header.
+  if (fread(wf->lpHeader,sizeof(WAD3_HEADER),1,wf->fin)!=1)
+               return wadCleanup(wf);
+
+       if (wf->lpHeader->identification != WAD2_ID && wf->lpHeader->identification != WAD3_ID)
+       {
+       // Invalid WAD3 header id.
+               return wadCleanup(wf);
+       }
+
+       // Make sure our table is really there
+       if ( ((wf->lpHeader->numlumps * sizeof(WAD3_LUMP)) + wf->lpHeader->infotableofs) > wf->FileSize)
+       {
+               // WAD3 file is malformed.
+               return wadCleanup(wf);
+       }
+
+  // Store the name of the wadfile
+  if (!(wf->wadfilename = strdup(path)))
+    return wadCleanup(wf);
+
+  return wf;
+}
+
+int wadOpenCurrentFileByNum (wadFile_t *wf, unsigned long filenumber)
+{
+  /* returns 0 if error, or 1 for sucess */
+  return(wadGoToFile(wf, filenumber));
+}
+
+void wadCloseCurrentFile (wadFile_t *wf)
+{
+  // nothing to do really...
+}
+
+unsigned long wadReadCurrentFile (wadFile_t *wf , char *bufferptr, unsigned long size)
+{
+  // returns 0 if error, or the amount of data read into the buffer
+  if (fread(wf->lpLump,sizeof(WAD3_LUMP),1,wf->fin)!=1)
+               return 0;
+
+  // dunno how to handle any other image types but this (yet)
+  if (wf->lpLump->type != WAD2_TYPE_MIP && wf->lpLump->type != WAD3_TYPE_MIP)
+    return 0;
+
+  // go to first mip
+  if (fseek(wf->fin, wf->lpLump->filepos, SEEK_SET) != 0)
+    return 0;
+
+  if (fread(bufferptr,size,1,wf->fin) == 1)
+    return (size);
+  else
+    return 0;
+}
+
+/*
+
+.. or we could do it the long way, and process the file as we go..
+
+
+*/
+/*
+unsigned long wadReadCurrentFile (wadFile_t *wf , char *bufferptr, unsigned long size)
+{
+  // returns 0 if error, or the amount of data read into the buffer
+  unsigned long bufferpos;
+  unsigned long mipdatasize;
+  WORD palettesize;
+
+  if (fread(wf->lpLump,sizeof(WAD3_LUMP),1,wf->fin)!=1)
+               return 0;
+
+  if (wf->lpLump->type == WAD3_TYPE_MIP) // can we handle it ?
+  {
+
+    // bounds check.
+    if (wf->lpLump->filepos >= wf->FileSize)
+      return 0; // malformed wad3
+
+    // go to first mip
+    if (fseek(wf->fin, wf->lpLump->filepos, SEEK_SET) != 0)
+               return 0;
+
+    // and read it
+    if (fread(wf->lpMip,sizeof(WAD3_MIP),1,wf->fin)!=1)
+      return 0;
+
+    // store in buffer.
+    memcpy(bufferptr, wf->lpMip, sizeof(WAD3_MIP));
+    bufferpos = sizeof(WAD3_MIP);
+
+    // now read the MIP data.
+    // mip data
+    if (fseek(wf->fin, wf->lpLump->filepos + wf->lpMip->offsets[0], SEEK_SET) != 0)
+               return 0;
+
+    mipdatasize = GET_MIP_DATA_SIZE(wf->lpMip->width,wf->lpMip->height);
+
+    if (fread(bufferptr+bufferpos, mipdatasize, 1, wf->fin)!=1)
+      return 0;
+
+    bufferpos += mipdatasize;
+
+    // ok, that's the mip data itself, now grab the palette size.
+    if (fread(bufferptr+bufferpos,sizeof(WORD),1,wf->fin)!=1)
+      return 0;
+
+    palettesize = *(WORD *)(bufferptr+bufferpos);
+
+    bufferpos += sizeof(WORD);
+
+    // grab the palette itself
+    if (fread(bufferptr+bufferpos,palettesize*3,1,wf->fin)!=1)
+      return 0;
+
+    bufferpos += palettesize*3;
+
+    // and finally the one-word padding.
+    if (fread(bufferptr+bufferpos,sizeof(WORD),1,wf->fin)!=1)
+      return 0;
+
+    bufferpos += sizeof(WORD);
+
+    return(bufferpos); // return the amount of bytes read.
+  }
+  return 0;
+}
+*/