123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /*
- Copyright (C) 1996-1997 Id Software, Inc.
- 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.
- */
- // wad.c
- #include "quakedef.h"
- int wad_numlumps;
- lumpinfo_t *wad_lumps;
- byte *wad_base;
- void SwapPic (qpic_t *pic);
- /*
- ==================
- W_CleanupName
- Lowercases name and pads with spaces and a terminating 0 to the length of
- lumpinfo_t->name.
- Used so lumpname lookups can proceed rapidly by comparing 4 chars at a time
- Space padding is so names can be printed nicely in tables.
- Can safely be performed in place.
- ==================
- */
- void W_CleanupName (char *in, char *out)
- {
- int i;
- int c;
-
- for (i=0 ; i<16 ; i++ )
- {
- c = in[i];
- if (!c)
- break;
-
- if (c >= 'A' && c <= 'Z')
- c += ('a' - 'A');
- out[i] = c;
- }
-
- for ( ; i< 16 ; i++ )
- out[i] = 0;
- }
- /*
- ====================
- W_LoadWadFile
- ====================
- */
- void W_LoadWadFile (char *filename)
- {
- lumpinfo_t *lump_p;
- wadinfo_t *header;
- unsigned i;
- int infotableofs;
-
- wad_base = COM_LoadHunkFile (filename);
- if (!wad_base)
- Sys_Error ("W_LoadWadFile: couldn't load %s", filename);
- header = (wadinfo_t *)wad_base;
-
- if (header->identification[0] != 'W'
- || header->identification[1] != 'A'
- || header->identification[2] != 'D'
- || header->identification[3] != '2')
- Sys_Error ("Wad file %s doesn't have WAD2 id\n",filename);
-
- wad_numlumps = LittleLong(header->numlumps);
- infotableofs = LittleLong(header->infotableofs);
- wad_lumps = (lumpinfo_t *)(wad_base + infotableofs);
-
- for (i=0, lump_p = wad_lumps ; i<wad_numlumps ; i++,lump_p++)
- {
- lump_p->filepos = LittleLong(lump_p->filepos);
- lump_p->size = LittleLong(lump_p->size);
- W_CleanupName (lump_p->name, lump_p->name);
- if (lump_p->type == TYP_QPIC)
- SwapPic ( (qpic_t *)(wad_base + lump_p->filepos));
- }
- }
- /*
- =============
- W_GetLumpinfo
- =============
- */
- lumpinfo_t *W_GetLumpinfo (char *name)
- {
- int i;
- lumpinfo_t *lump_p;
- char clean[16];
-
- W_CleanupName (name, clean);
-
- for (lump_p=wad_lumps, i=0 ; i<wad_numlumps ; i++,lump_p++)
- {
- if (!strcmp(clean, lump_p->name))
- return lump_p;
- }
-
- Sys_Error ("W_GetLumpinfo: %s not found", name);
- return NULL;
- }
- void *W_GetLumpName (char *name)
- {
- lumpinfo_t *lump;
-
- lump = W_GetLumpinfo (name);
-
- return (void *)(wad_base + lump->filepos);
- }
- void *W_GetLumpNum (int num)
- {
- lumpinfo_t *lump;
-
- if (num < 0 || num > wad_numlumps)
- Sys_Error ("W_GetLumpNum: bad number: %i", num);
-
- lump = wad_lumps + num;
-
- return (void *)(wad_base + lump->filepos);
- }
- /*
- =============================================================================
- automatic byte swapping
- =============================================================================
- */
- void SwapPic (qpic_t *pic)
- {
- pic->width = LittleLong(pic->width);
- pic->height = LittleLong(pic->height);
- }
|