Annotation of quakeworld/client/wad.c, revision 1.1.1.1

1.1       root        1: /*
                      2: Copyright (C) 1996-1997 Id Software, Inc.
                      3: 
                      4: This program is free software; you can redistribute it and/or
                      5: modify it under the terms of the GNU General Public License
                      6: as published by the Free Software Foundation; either version 2
                      7: of the License, or (at your option) any later version.
                      8: 
                      9: This program is distributed in the hope that it will be useful,
                     10: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
                     12: 
                     13: See the GNU General Public License for more details.
                     14: 
                     15: You should have received a copy of the GNU General Public License
                     16: along with this program; if not, write to the Free Software
                     17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
                     18: 
                     19: */
                     20: // wad.c
                     21: 
                     22: #include "quakedef.h"
                     23: 
                     24: int                    wad_numlumps;
                     25: lumpinfo_t     *wad_lumps;
                     26: byte           *wad_base;
                     27: 
                     28: void SwapPic (qpic_t *pic);
                     29: 
                     30: /*
                     31: ==================
                     32: W_CleanupName
                     33: 
                     34: Lowercases name and pads with spaces and a terminating 0 to the length of
                     35: lumpinfo_t->name.
                     36: Used so lumpname lookups can proceed rapidly by comparing 4 chars at a time
                     37: Space padding is so names can be printed nicely in tables.
                     38: Can safely be performed in place.
                     39: ==================
                     40: */
                     41: void W_CleanupName (char *in, char *out)
                     42: {
                     43:        int             i;
                     44:        int             c;
                     45:        
                     46:        for (i=0 ; i<16 ; i++ )
                     47:        {
                     48:                c = in[i];
                     49:                if (!c)
                     50:                        break;
                     51:                        
                     52:                if (c >= 'A' && c <= 'Z')
                     53:                        c += ('a' - 'A');
                     54:                out[i] = c;
                     55:        }
                     56:        
                     57:        for ( ; i< 16 ; i++ )
                     58:                out[i] = 0;
                     59: }
                     60: 
                     61: 
                     62: 
                     63: /*
                     64: ====================
                     65: W_LoadWadFile
                     66: ====================
                     67: */
                     68: void W_LoadWadFile (char *filename)
                     69: {
                     70:        lumpinfo_t              *lump_p;
                     71:        wadinfo_t               *header;
                     72:        unsigned                i;
                     73:        int                             infotableofs;
                     74:        
                     75:        wad_base = COM_LoadHunkFile (filename);
                     76:        if (!wad_base)
                     77:                Sys_Error ("W_LoadWadFile: couldn't load %s", filename);
                     78: 
                     79:        header = (wadinfo_t *)wad_base;
                     80:        
                     81:        if (header->identification[0] != 'W'
                     82:        || header->identification[1] != 'A'
                     83:        || header->identification[2] != 'D'
                     84:        || header->identification[3] != '2')
                     85:                Sys_Error ("Wad file %s doesn't have WAD2 id\n",filename);
                     86:                
                     87:        wad_numlumps = LittleLong(header->numlumps);
                     88:        infotableofs = LittleLong(header->infotableofs);
                     89:        wad_lumps = (lumpinfo_t *)(wad_base + infotableofs);
                     90:        
                     91:        for (i=0, lump_p = wad_lumps ; i<wad_numlumps ; i++,lump_p++)
                     92:        {
                     93:                lump_p->filepos = LittleLong(lump_p->filepos);
                     94:                lump_p->size = LittleLong(lump_p->size);
                     95:                W_CleanupName (lump_p->name, lump_p->name);
                     96:                if (lump_p->type == TYP_QPIC)
                     97:                        SwapPic ( (qpic_t *)(wad_base + lump_p->filepos));
                     98:        }
                     99: }
                    100: 
                    101: 
                    102: /*
                    103: =============
                    104: W_GetLumpinfo
                    105: =============
                    106: */
                    107: lumpinfo_t     *W_GetLumpinfo (char *name)
                    108: {
                    109:        int             i;
                    110:        lumpinfo_t      *lump_p;
                    111:        char    clean[16];
                    112:        
                    113:        W_CleanupName (name, clean);
                    114:        
                    115:        for (lump_p=wad_lumps, i=0 ; i<wad_numlumps ; i++,lump_p++)
                    116:        {
                    117:                if (!strcmp(clean, lump_p->name))
                    118:                        return lump_p;
                    119:        }
                    120:        
                    121:        Sys_Error ("W_GetLumpinfo: %s not found", name);
                    122:        return NULL;
                    123: }
                    124: 
                    125: void *W_GetLumpName (char *name)
                    126: {
                    127:        lumpinfo_t      *lump;
                    128:        
                    129:        lump = W_GetLumpinfo (name);
                    130:        
                    131:        return (void *)(wad_base + lump->filepos);
                    132: }
                    133: 
                    134: void *W_GetLumpNum (int num)
                    135: {
                    136:        lumpinfo_t      *lump;
                    137:        
                    138:        if (num < 0 || num > wad_numlumps)
                    139:                Sys_Error ("W_GetLumpNum: bad number: %i", num);
                    140:                
                    141:        lump = wad_lumps + num;
                    142:        
                    143:        return (void *)(wad_base + lump->filepos);
                    144: }
                    145: 
                    146: /*
                    147: =============================================================================
                    148: 
                    149: automatic byte swapping
                    150: 
                    151: =============================================================================
                    152: */
                    153: 
                    154: void SwapPic (qpic_t *pic)
                    155: {
                    156:        pic->width = LittleLong(pic->width);
                    157:        pic->height = LittleLong(pic->height);  
                    158: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.