Annotation of quakeworld/client/wad.c, revision 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.