1085 lines
12 KiB
C
1085 lines
12 KiB
C
#include <stdint.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/stat.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t pos, size;
|
|
char name[8];
|
|
} lump_t;
|
|
|
|
typedef struct
|
|
{
|
|
char id[4];
|
|
uint32_t nlumps, dirpos;
|
|
} wad_t;
|
|
|
|
const char snames[][8] =
|
|
{
|
|
// DOOM
|
|
"DSBAREXP",
|
|
"DSBDCLS",
|
|
"DSBDOPN",
|
|
"DSBFG",
|
|
"DSBGACT",
|
|
"DSBGDTH1",
|
|
"DSBGDTH2",
|
|
"DSBGSIT1",
|
|
"DSBGSIT2",
|
|
"DSBOSCUB",
|
|
"DSBOSDTH",
|
|
"DSBOSPIT",
|
|
"DSBOSPN",
|
|
"DSBOSSIT",
|
|
"DSBRSDTH",
|
|
"DSBRSSIT",
|
|
"DSBSPACT",
|
|
"DSBSPDTH",
|
|
"DSBSPSIT",
|
|
"DSBSPWLK",
|
|
"DSCACDTH",
|
|
"DSCACSIT",
|
|
"DSCLAW",
|
|
"DSCYBDTH",
|
|
"DSCYBSIT",
|
|
"DSDBCLS",
|
|
"DSDBLOAD",
|
|
"DSDBOPN",
|
|
"DSDMACT",
|
|
"DSDMPAIN",
|
|
"DSDORCLS",
|
|
"DSDOROPN",
|
|
"DSDSHTGN",
|
|
"DSFIRSHT",
|
|
"DSFIRXPL",
|
|
"DSFLAME",
|
|
"DSFLAMST",
|
|
"DSGETPOW",
|
|
"DSHOOF",
|
|
"DSITEMUP",
|
|
"DSITMBK",
|
|
"DSKEENDT",
|
|
"DSKEENPN",
|
|
"DSKNTDTH",
|
|
"DSKNTSIT",
|
|
"DSMANATK",
|
|
"DSMANDTH",
|
|
"DSMANSIT",
|
|
"DSMETAL",
|
|
"DSMNPAIN",
|
|
"DSNOWAY",
|
|
"DSOOF",
|
|
"DSPDIEHI",
|
|
"DSPEDTH",
|
|
"DSPEPAIN",
|
|
"DSPESIT",
|
|
"DSPISTOL",
|
|
"DSPLASMA",
|
|
"DSPLDETH",
|
|
"DSPLPAIN",
|
|
"DSPODTH1",
|
|
"DSPODTH2",
|
|
"DSPODTH3",
|
|
"DSPOPAIN",
|
|
"DSPOSACT",
|
|
"DSPOSIT1",
|
|
"DSPOSIT2",
|
|
"DSPOSIT3",
|
|
"DSPSTART",
|
|
"DSPSTOP",
|
|
"DSPUNCH",
|
|
"DSRADIO",
|
|
"DSRLAUNC",
|
|
"DSRXPLOD",
|
|
"DSSAWFUL",
|
|
"DSSAWHIT",
|
|
"DSSAWIDL",
|
|
"DSSAWUP",
|
|
"DSSGCOCK",
|
|
"DSSGTATK",
|
|
"DSSGTDTH",
|
|
"DSSGTSIT",
|
|
"DSSHOTGN",
|
|
"DSSKEACT",
|
|
"DSSKEATK",
|
|
"DSSKEDTH",
|
|
"DSSKEPCH",
|
|
"DSSKESIT",
|
|
"DSSKESWG",
|
|
"DSSKLATK",
|
|
"DSSKLDTH",
|
|
"DSSLOP",
|
|
"DSSPIDTH",
|
|
"DSSPISIT",
|
|
"DSSSDTH",
|
|
"DSSSSIT",
|
|
"DSSTNMOV",
|
|
"DSSWTCHN",
|
|
"DSSWTCHX",
|
|
"DSTELEPT",
|
|
"DSTINK",
|
|
"DSVILACT",
|
|
"DSVILATK",
|
|
"DSVILDTH",
|
|
"DSVILSIT",
|
|
"DSVIPAIN",
|
|
"DSWPNUP",
|
|
// HERETIC
|
|
"AMB10",
|
|
"AMB11",
|
|
"AMB1",
|
|
"AMB2",
|
|
"AMB3",
|
|
"AMB4",
|
|
"AMB5",
|
|
"AMB6",
|
|
"AMB7",
|
|
"AMB8",
|
|
"AMB9",
|
|
"ARTIUP",
|
|
"ARTIUSE",
|
|
"BLSHIT",
|
|
"BLSSHT",
|
|
"BOUNCE",
|
|
"BOWSHT",
|
|
"BSTACT",
|
|
"BSTATK",
|
|
"BSTDTH",
|
|
"BSTPAI",
|
|
"BSTSIT",
|
|
"BURN",
|
|
"CHAT",
|
|
"CHICACT",
|
|
"CHICATK",
|
|
"CHICDTH",
|
|
"CHICPAI",
|
|
"CHICPK1",
|
|
"CHICPK2",
|
|
"CHICPK3",
|
|
"CLKACT",
|
|
"CLKATK",
|
|
"CLKDTH",
|
|
"CLKPAI",
|
|
"CLKSIT",
|
|
"DORCLS",
|
|
"DORMOV",
|
|
"DOROPN",
|
|
"GFRAG",
|
|
"GIBDTH",
|
|
"GLDHIT",
|
|
"GLOOP",
|
|
"GNTACT",
|
|
"GNTFUL",
|
|
"GNTHIT",
|
|
"GNTPOW",
|
|
"GNTUSE",
|
|
"HEDACT",
|
|
"HEDAT1",
|
|
"HEDAT2",
|
|
"HEDAT3",
|
|
"HEDDTH",
|
|
"HEDPAI",
|
|
"HEDSIT",
|
|
"HRNHIT",
|
|
"HRNPOW",
|
|
"HRNSHT",
|
|
"IMPAT1",
|
|
"IMPAT2",
|
|
"IMPDTH",
|
|
"IMPPAI",
|
|
"IMPSIT",
|
|
"ITEMUP",
|
|
"KEYUP",
|
|
"KGTAT2",
|
|
"KGTATK",
|
|
"KGTDTH",
|
|
"KGTPAI",
|
|
"KGTSIT",
|
|
"LOBHIT",
|
|
"LOBPOW",
|
|
"LOBSHT",
|
|
"MINACT",
|
|
"MINAT1",
|
|
"MINAT2",
|
|
"MINAT3",
|
|
"MINDTH",
|
|
"MINPAI",
|
|
"MINSIT",
|
|
"MUMAT1",
|
|
"MUMAT2",
|
|
"MUMDTH",
|
|
"MUMHED",
|
|
"MUMPAI",
|
|
"MUMSIT",
|
|
"NEWPOD",
|
|
"PHOHIT",
|
|
"PHOPOW",
|
|
"PHOSHT",
|
|
"PLRCDTH",
|
|
"PLRDTH",
|
|
"PLROOF",
|
|
"PLRPAI",
|
|
"PLRWDTH",
|
|
"PODEXP",
|
|
"PSTART",
|
|
"PSTOP",
|
|
"RAMPHIT",
|
|
"RAMRAIN",
|
|
"RESPAWN",
|
|
"RIPSLOP",
|
|
"SBTACT",
|
|
"SBTDTH",
|
|
"SBTPAI",
|
|
"SNKACT",
|
|
"SNKATK",
|
|
"SNKDTH",
|
|
"SNKPAI",
|
|
"SNKSIT",
|
|
"SORACT",
|
|
"SORATK",
|
|
"SORDBON",
|
|
"SORDEXP",
|
|
"SORDSPH",
|
|
"SORPAI",
|
|
"SORRISE",
|
|
"SORSIT",
|
|
"SORZAP",
|
|
"STFCRK",
|
|
"STFHIT",
|
|
"STFPOW",
|
|
"STNMOV",
|
|
"SWITCH",
|
|
"TELEPT",
|
|
"WATERFL",
|
|
"WIND",
|
|
"WIZACT",
|
|
"WIZATK",
|
|
"WIZDTH",
|
|
"WIZPAI",
|
|
"WIZSIT",
|
|
"WPNUP",
|
|
// HEXEN
|
|
"ACID5",
|
|
"ARMOREXP",
|
|
"ART1",
|
|
"ARTACT1",
|
|
"AXE5",
|
|
"BALLS1",
|
|
"BATS",
|
|
"BELLRNG",
|
|
"BIRD",
|
|
"BISHAPP",
|
|
"BISHDTH1",
|
|
"BITE4",
|
|
"BLANK",
|
|
"BLASTR",
|
|
"BLDDRP1",
|
|
"BLOOD1",
|
|
"BLUR6",
|
|
"BOARD1",
|
|
"BOUNCE2",
|
|
"BROOK1",
|
|
"BSHHIT2",
|
|
"BSHPN1",
|
|
"BUBBLE",
|
|
"CENT1",
|
|
"CENT2",
|
|
"CENTHIT2",
|
|
"CHAINS",
|
|
"CHAT3",
|
|
"CHNSWCH8",
|
|
"CLHMM",
|
|
"CLXDTH1",
|
|
"CLXDTH2",
|
|
"CLXDTH3",
|
|
"CNTDTH1",
|
|
"CNTSHLD4",
|
|
"CONE3",
|
|
"CORK",
|
|
"CRKETS1",
|
|
"CRKETS",
|
|
"DEFAULT",
|
|
"DEMATK2",
|
|
"DORSTP1B",
|
|
"DORSTP3",
|
|
"DORSTP4",
|
|
"DRAGDIE2",
|
|
"DRAGPN2",
|
|
"DRAGSIT1",
|
|
"DRCRK5A",
|
|
"DRLTCH3A",
|
|
"DROP2",
|
|
"DRSTP2",
|
|
"DRSTP7",
|
|
"ETHIT1",
|
|
"ETHPORT1",
|
|
"FACE1",
|
|
"FALL1",
|
|
"FALLHIT",
|
|
"FEET4",
|
|
"FGTCDTH",
|
|
"FGTDDTH",
|
|
"FGTFALL",
|
|
"FGTGRUNT",
|
|
"FGTHMM",
|
|
"FGTPAIN",
|
|
"FGTXDTH1",
|
|
"FGTXDTH2",
|
|
"FGTXDTH3",
|
|
"FIRED2",
|
|
"FIRED3",
|
|
"FIRED5",
|
|
"FIREDHIT",
|
|
"FLECH4",
|
|
"FLY3",
|
|
"FROGS",
|
|
"FROSTY1",
|
|
"FROSTY2",
|
|
"GAME1",
|
|
"GLASS5",
|
|
"GLBHISS1",
|
|
"GLBHIT4",
|
|
"GLOOP1",
|
|
"GNTACT1",
|
|
"GNTMIS1",
|
|
"GNTPOW",
|
|
"GONG",
|
|
"GRTNGS1",
|
|
"GRUNT1",
|
|
"HAMBLO8A",
|
|
"HAMFIR1",
|
|
"HAMFLY1",
|
|
"HAMMIS2",
|
|
"HAMWAL1",
|
|
"HMHIT1A",
|
|
"HOLY3",
|
|
"ICEBRK1A",
|
|
"ICEDTH1",
|
|
"ICEMV2",
|
|
"IMPACT3",
|
|
"IMPFIRE2",
|
|
"INSECTS1",
|
|
"KATYDID",
|
|
"KEYS2A",
|
|
"KORACT",
|
|
"KORATK",
|
|
"KORCOM",
|
|
"KORDTH1",
|
|
"KORPN1",
|
|
"KORSIT",
|
|
"LAVA2",
|
|
"LITE2",
|
|
"LOCKED",
|
|
"MAGE4",
|
|
"MAGEBALL",
|
|
"MAYBE1",
|
|
"MGCDTH",
|
|
"MGDTH",
|
|
"MGFALL",
|
|
"MGGRUNT",
|
|
"MGHMM",
|
|
"MGPAIN",
|
|
"MGXDTH1",
|
|
"MGXDTH2",
|
|
"MGXDTH3",
|
|
"MINACT1",
|
|
"MINACT2",
|
|
"MINDTH4",
|
|
"MINPAIN4",
|
|
"MINSIT1",
|
|
"MTLMV3",
|
|
"MTLSTRT1",
|
|
"MUCK5",
|
|
"MUMPUN5",
|
|
"OWL",
|
|
"PICUP5",
|
|
"PIECE1",
|
|
"PIGDTH2",
|
|
"PIGPAIN2",
|
|
"PIGRUNT1",
|
|
"PLRBURN",
|
|
"PLRCDTH",
|
|
"PLRDTH",
|
|
"PLRPAIN3",
|
|
"POIS2",
|
|
"POP",
|
|
"POTBRK1",
|
|
"PUFF1",
|
|
"PUNCH8",
|
|
"PUNCHMIS",
|
|
"PUP4",
|
|
"PUZSLV1",
|
|
"PUZSLV",
|
|
"QUAKE2",
|
|
"RAITH1B",
|
|
"RAITH3",
|
|
"RAITH4A",
|
|
"RAITH5A",
|
|
"RATHDTH2",
|
|
"READY1",
|
|
"RESPAWN",
|
|
"ROCKS",
|
|
"SAMPLE11",
|
|
"SBTDTH3",
|
|
"SBTSIT5",
|
|
"SERPPN1",
|
|
"SHARDS1B",
|
|
"SHLURP",
|
|
"SORBLEXP",
|
|
"SORBOSS1",
|
|
"SORBOSS2",
|
|
"SORBOSS3",
|
|
"SORDIE2",
|
|
"SPAWN3",
|
|
"SPELL1",
|
|
"SPIKE2",
|
|
"SPIKE3",
|
|
"SPIRT5",
|
|
"SPIRT7",
|
|
"SPIRTS1",
|
|
"SPIT6",
|
|
"SQUEAL1",
|
|
"SRFC1",
|
|
"SRFC3",
|
|
"SRPDTH1",
|
|
"STB1D",
|
|
"STEEL1",
|
|
"STEEL2",
|
|
"STEP",
|
|
"STMDR1",
|
|
"STNMV4",
|
|
"STRETCH3",
|
|
"STRIKE1",
|
|
"STRIKE3",
|
|
"STRONG1",
|
|
"SWORD2",
|
|
"SWTCH6",
|
|
"SWTCHRP1",
|
|
"SWTCHV4",
|
|
"SYAB2D",
|
|
"TAUR1",
|
|
"TAUR2",
|
|
"TAUR4",
|
|
"THNDR1",
|
|
"TICK",
|
|
"TICTOC",
|
|
"TORCH2",
|
|
"TPORT1",
|
|
"TREEBRK",
|
|
"TREEBURN",
|
|
"VAMP5",
|
|
"WAND4",
|
|
"WEPELE2",
|
|
"WIND3",
|
|
"WING1",
|
|
"WOOSH3",
|
|
"WRSHIP1",
|
|
"WTRCRT7",
|
|
"WTRHIT",
|
|
"WTRSWIP",
|
|
// STRIFE
|
|
"ADG01",
|
|
"AG301",
|
|
"AGG01",
|
|
"BBX01",
|
|
"BBX02",
|
|
"BGG01",
|
|
"BGG02",
|
|
"BGG03",
|
|
"CTT01",
|
|
"CTT02",
|
|
"DER01",
|
|
"DER02",
|
|
"DER03",
|
|
"DGG01",
|
|
"DGG02",
|
|
"DGG03",
|
|
"DGTBL",
|
|
"DOW01",
|
|
"DRTBL",
|
|
"DSAGRAC1",
|
|
"DSAGRAC2",
|
|
"DSAGRAC3",
|
|
"DSAGRAC4",
|
|
"DSAGRDPN",
|
|
"DSAGRDTH",
|
|
"DSAGRSEE",
|
|
"DSAIRLCK",
|
|
"DSALARM",
|
|
"DSALNACT",
|
|
"DSALNDTH",
|
|
"DSALNPN",
|
|
"DSALNSEE",
|
|
"DSAMALN1",
|
|
"DSAMALN2",
|
|
"DSAMALN3",
|
|
"DSAMALN4",
|
|
"DSAMALN5",
|
|
"DSAMALN6",
|
|
"DSAMBBAR",
|
|
"DSAMBPPL",
|
|
"DSBAREXP",
|
|
"DSBDCLS",
|
|
"DSBDOPN",
|
|
"DSBGLASS",
|
|
"DSBURNME",
|
|
"DSCHAIN",
|
|
"DSCHANT",
|
|
"DSDIFOOL",
|
|
"DSDRCHNC",
|
|
"DSDRCHNO",
|
|
"DSDRLMTC",
|
|
"DSDRLMTO",
|
|
"DSDRLWUD",
|
|
"DSDRSMTC",
|
|
"DSDRSMTO",
|
|
"DSDRSTON",
|
|
"DSDRSWUD",
|
|
"DSDSRPTR",
|
|
"DSEXPLOD",
|
|
"DSFIRXPL",
|
|
"DSFLBURN",
|
|
"DSFLIDL",
|
|
"DSINQACT",
|
|
"DSINQDTH",
|
|
"DSINQJMP",
|
|
"DSINQSEE",
|
|
"DSITEMUP",
|
|
"DSITMBK",
|
|
"DSKEYCRD",
|
|
"DSLGFIRE",
|
|
"DSLORPN",
|
|
"DSLORSEE",
|
|
"DSMASK",
|
|
"DSMEATHT",
|
|
"DSMISLHT",
|
|
"DSMNALDT",
|
|
"DSMNALSE",
|
|
"DSMTALHT",
|
|
"DSNOWAY",
|
|
"DSOOF",
|
|
"DSPCRUSH",
|
|
"DSPESPNA",
|
|
"DSPESPNB",
|
|
"DSPESPNC",
|
|
"DSPESPND",
|
|
"DSPGRACT",
|
|
"DSPGRDAT",
|
|
"DSPGRDPN",
|
|
"DSPGRDTH",
|
|
"DSPGRSEE",
|
|
"DSPHOOT",
|
|
"DSPLASMA",
|
|
"DSPLDETH",
|
|
"DSPLPAIN",
|
|
"DSPLXDTH",
|
|
"DSPRGPN",
|
|
"DSPROGAC",
|
|
"DSPROTFL",
|
|
"DSPROTON",
|
|
"DSPSDTHA",
|
|
"DSPSDTHB",
|
|
"DSPSDTHC",
|
|
"DSPSTART",
|
|
"DSPSTOP",
|
|
"DSPULCHN",
|
|
"DSRADIO",
|
|
"DSRATACT",
|
|
"DSRB2ACT",
|
|
"DSRB2DTH",
|
|
"DSRB2PN",
|
|
"DSRB2SEE",
|
|
"DSREACTR",
|
|
"DSREAVAT",
|
|
"DSREAVPN",
|
|
"DSREBACT",
|
|
"DSREBDTH",
|
|
"DSREVACT",
|
|
"DSREVBLD",
|
|
"DSREVDTH",
|
|
"DSREVSEE",
|
|
"DSRFLITE",
|
|
"DSRIFLE",
|
|
"DSRLAUNC",
|
|
"DSSGLHIT",
|
|
"DSSIGIL",
|
|
"DSSIGLUP",
|
|
"DSSLOP",
|
|
"DSSMFIRE",
|
|
"DSSNTACT",
|
|
"DSSNTDTH",
|
|
"DSSNTSEE",
|
|
"DSSPDATK",
|
|
"DSSPDWLK",
|
|
"DSSPIDTH",
|
|
"DSSPISIT",
|
|
"DSSTATIC",
|
|
"DSSTNMOV",
|
|
"DSSWBOLT",
|
|
"DSSWISH",
|
|
"DSSWKNOB",
|
|
"DSSWSCAN",
|
|
"DSSWSTON",
|
|
"DSSWTCHN",
|
|
"DSTELEPT",
|
|
"DSTEND",
|
|
"DSVALVE",
|
|
"DSWBRLDT",
|
|
"DSWDRIP",
|
|
"DSWFALL",
|
|
"DSWPNUP",
|
|
"DSWRIVER",
|
|
"DSWSPLSH",
|
|
"DSXBOW",
|
|
"DSYEAH",
|
|
"DWTBL",
|
|
"DWW01",
|
|
"F1TBLA",
|
|
"F2TBLA",
|
|
"F3TBLA",
|
|
"FOR01A",
|
|
"FOR02A",
|
|
"FOR03A",
|
|
"FOR04A",
|
|
"FOTBLA",
|
|
"FP101A",
|
|
"FP102A",
|
|
"FP201A",
|
|
"FP301A",
|
|
"GEO01",
|
|
"GEO02",
|
|
"GEO03",
|
|
"GETBL",
|
|
"GOTBL",
|
|
"GOV01",
|
|
"GOV02",
|
|
"GOV03",
|
|
"GOV04",
|
|
"GOV05",
|
|
"GOV06",
|
|
"GOV07",
|
|
"GOV08",
|
|
"GOV09",
|
|
"GOV10",
|
|
"GOV11",
|
|
"GOV6A1",
|
|
"HA001",
|
|
"HA002",
|
|
"HA003",
|
|
"HA004",
|
|
"HA005",
|
|
"HA006",
|
|
"HA007",
|
|
"HATBL",
|
|
"JDW01",
|
|
"JDW02",
|
|
"JWTBL",
|
|
"KET01",
|
|
"KET02",
|
|
"KET03",
|
|
"KETBL",
|
|
"KEV01",
|
|
"KEV02",
|
|
"KNTBL",
|
|
"LOM03",
|
|
"LOM04",
|
|
"LOM05",
|
|
"LOM06",
|
|
"MAC01",
|
|
"MAC02",
|
|
"MAC03",
|
|
"MAC04",
|
|
"MAC05",
|
|
"MAC06",
|
|
"MAC07",
|
|
"MAC08",
|
|
"MAC09",
|
|
"MAC10A1",
|
|
"MAC10B1",
|
|
"MAC10",
|
|
"MAC11",
|
|
"MAC12",
|
|
"MAC13",
|
|
"MAC14",
|
|
"MAC15",
|
|
"MAC16",
|
|
"MAC17",
|
|
"MAC18",
|
|
"MAC19",
|
|
"MAC20",
|
|
"MAC666",
|
|
"MACRWD",
|
|
"MAE01",
|
|
"MAE02",
|
|
"MAE03",
|
|
"MAE04",
|
|
"MAE05",
|
|
"MAE06",
|
|
"MAG01",
|
|
"MAG02",
|
|
"MAG03",
|
|
"MAG04",
|
|
"MCTBL",
|
|
"MLTBL",
|
|
"MOTBL",
|
|
"ORC01",
|
|
"ORC02",
|
|
"ORC03",
|
|
"ORC04",
|
|
"ORC05",
|
|
"ORC06",
|
|
"ORC07",
|
|
"ORE01",
|
|
"ORE02",
|
|
"ORTBL",
|
|
"PDG01",
|
|
"PDG02",
|
|
"PDG03",
|
|
"PPP01A",
|
|
"PPP02A",
|
|
"PPP03A",
|
|
"PPP04",
|
|
"PPP05",
|
|
"PPP06A",
|
|
"PPP07A",
|
|
"PPP08",
|
|
"PRO1",
|
|
"PRO2",
|
|
"PRO3",
|
|
"PRO4",
|
|
"PRO5",
|
|
"PRO6",
|
|
"PRO7",
|
|
"PRTBL",
|
|
"QFMRM1",
|
|
"QFMRM2",
|
|
"QFMRM3",
|
|
"QFMRM4",
|
|
"QFMRM5",
|
|
"QFMRM6",
|
|
"QFMRM7",
|
|
"QFMRM8",
|
|
"QUI01",
|
|
"QUI02",
|
|
"QUI03",
|
|
"QUI04",
|
|
"QUI05",
|
|
"QUI06",
|
|
"QUTBL",
|
|
"REBRM1",
|
|
"REBRM2",
|
|
"REBRM3",
|
|
"REBRM4",
|
|
"REBRM5",
|
|
"REBRM6",
|
|
"REBRM7",
|
|
"REBRM8",
|
|
"REBRM9",
|
|
"RET01",
|
|
"RET02",
|
|
"RET03",
|
|
"RET04",
|
|
"RET05",
|
|
"RET06",
|
|
"RET07",
|
|
"RET08",
|
|
"RET09",
|
|
"RET10",
|
|
"RET11",
|
|
"RET12",
|
|
"RETBL",
|
|
"RGG01",
|
|
"RGTBL",
|
|
"RIC01",
|
|
"RIC02",
|
|
"RIE01",
|
|
"RPP01",
|
|
"RRTBL",
|
|
"SAM01A",
|
|
"SAM02A",
|
|
"SAM03A",
|
|
"SAM04A",
|
|
"SAM05A",
|
|
"SATBL",
|
|
"SS501B",
|
|
"SS502B",
|
|
"SS503B",
|
|
"SS601A",
|
|
"SS602A",
|
|
"SS603A",
|
|
"SUR4A1",
|
|
"TBTBL",
|
|
"TCB01",
|
|
"TCB02",
|
|
"TCB03",
|
|
"TCC01",
|
|
"TCH01",
|
|
"TCH02",
|
|
"TCH03",
|
|
"TCT01",
|
|
"TETBL",
|
|
"TTTBL",
|
|
"VOC100",
|
|
"VOC101",
|
|
"VOC102",
|
|
"VOC103",
|
|
"VOC104",
|
|
"VOC105",
|
|
"VOC106",
|
|
"VOC10",
|
|
"VOC11",
|
|
"VOC120",
|
|
"VOC121",
|
|
"VOC122",
|
|
"VOC128",
|
|
"VOC129",
|
|
"VOC12",
|
|
"VOC130",
|
|
"VOC13",
|
|
"VOC14",
|
|
"VOC15",
|
|
"VOC16",
|
|
"VOC17",
|
|
"VOC18",
|
|
"VOC19",
|
|
"VOC1",
|
|
"VOC200",
|
|
"VOC201",
|
|
"VOC202",
|
|
"VOC203",
|
|
"VOC204",
|
|
"VOC205",
|
|
"VOC206",
|
|
"VOC207",
|
|
"VOC208",
|
|
"VOC209",
|
|
"VOC20",
|
|
"VOC210",
|
|
"VOC211",
|
|
"VOC212",
|
|
"VOC213",
|
|
"VOC214",
|
|
"VOC215",
|
|
"VOC216",
|
|
"VOC217",
|
|
"VOC218",
|
|
"VOC219",
|
|
"VOC21",
|
|
"VOC220",
|
|
"VOC221",
|
|
"VOC222",
|
|
"VOC223",
|
|
"VOC224",
|
|
"VOC225",
|
|
"VOC226",
|
|
"VOC227",
|
|
"VOC228",
|
|
"VOC229",
|
|
"VOC22",
|
|
"VOC230",
|
|
"VOC231",
|
|
"VOC232",
|
|
"VOC233",
|
|
"VOC234",
|
|
"VOC235",
|
|
"VOC236",
|
|
"VOC237",
|
|
"VOC23",
|
|
"VOC24",
|
|
"VOC25",
|
|
"VOC26",
|
|
"VOC27",
|
|
"VOC28",
|
|
"VOC29",
|
|
"VOC2",
|
|
"VOC30",
|
|
"VOC31",
|
|
"VOC32",
|
|
"VOC33",
|
|
"VOC34",
|
|
"VOC35",
|
|
"VOC36",
|
|
"VOC37",
|
|
"VOC38",
|
|
"VOC39",
|
|
"VOC3",
|
|
"VOC40",
|
|
"VOC41",
|
|
"VOC42",
|
|
"VOC43",
|
|
"VOC44",
|
|
"VOC45",
|
|
"VOC46",
|
|
"VOC47",
|
|
"VOC48",
|
|
"VOC49",
|
|
"VOC4",
|
|
"VOC50",
|
|
"VOC51",
|
|
"VOC52",
|
|
"VOC53",
|
|
"VOC54",
|
|
"VOC55",
|
|
"VOC56",
|
|
"VOC57",
|
|
"VOC58",
|
|
"VOC59",
|
|
"VOC5",
|
|
"VOC60",
|
|
"VOC61",
|
|
"VOC62",
|
|
"VOC63",
|
|
"VOC64",
|
|
"VOC65",
|
|
"VOC66",
|
|
"VOC67",
|
|
"VOC68",
|
|
"VOC69",
|
|
"VOC6",
|
|
"VOC70",
|
|
"VOC71",
|
|
"VOC72",
|
|
"VOC73",
|
|
"VOC74",
|
|
"VOC75",
|
|
"VOC76",
|
|
"VOC77",
|
|
"VOC78",
|
|
"VOC79",
|
|
"VOC7",
|
|
"VOC80",
|
|
"VOC81",
|
|
"VOC82",
|
|
"VOC83",
|
|
"VOC84",
|
|
"VOC85",
|
|
"VOC86",
|
|
"VOC87",
|
|
"VOC88",
|
|
"VOC89",
|
|
"VOC8",
|
|
"VOC90",
|
|
"VOC91",
|
|
"VOC92",
|
|
"VOC93",
|
|
"VOC94",
|
|
"VOC95",
|
|
"VOC96",
|
|
"VOC97",
|
|
"VOC98",
|
|
"VOC99",
|
|
"VOC9",
|
|
"WDM01",
|
|
"WDM02",
|
|
"WER01",
|
|
"WER02",
|
|
"WER03",
|
|
"WER05",
|
|
"WER06",
|
|
"WER07",
|
|
"WER08",
|
|
"WER09",
|
|
"WNTBL",
|
|
"WOR01",
|
|
"WOR02",
|
|
"WOR03",
|
|
"WRTBL",
|
|
// ZDOOM
|
|
"DSDGACT",
|
|
"DSDGATK",
|
|
"DSDGDTH",
|
|
"DSDGPAIN",
|
|
"DSDGSIT",
|
|
"DSQUAKE",
|
|
"DSSECRET",
|
|
"ICEBRK1A",
|
|
"ICEDTH1",
|
|
"RAILGF1",
|
|
"SPARK1",
|
|
"SPARK2",
|
|
"SPARK3",
|
|
0
|
|
};
|
|
|
|
int xwrite( int fd, unsigned char *from, size_t bytes )
|
|
{
|
|
int wd, wt = 0;
|
|
while ( wt < bytes )
|
|
{
|
|
wd = write(fd,from+wt,bytes-wt);
|
|
if ( (wd == -1) && (errno != EAGAIN) && (errno != EINTR) )
|
|
return 1;
|
|
wt += (wd>0)?wd:0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int xread( int fd, unsigned char *to, size_t bytes )
|
|
{
|
|
int rd, rt = 0;
|
|
while ( rt < bytes )
|
|
{
|
|
rd = read(fd,to+rt,bytes-rt);
|
|
if ( (rd == -1) && (errno != EAGAIN) && (errno != EINTR) )
|
|
return 1;
|
|
rt += (rd>0)?rd:0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int main( int argc, char **argv )
|
|
{
|
|
if ( argc < 2 ) return 1;
|
|
int sfil, wfil;
|
|
struct stat s;
|
|
if ( stat(argv[1],&s) ) return 1;
|
|
sfil = open(argv[1],O_RDONLY);
|
|
if ( !sfil ) return 1;
|
|
unsigned char *snd = malloc(s.st_size);
|
|
if ( xread(sfil,snd,s.st_size) )
|
|
{
|
|
close(sfil);
|
|
free(snd);
|
|
return 1;
|
|
}
|
|
close(sfil);
|
|
wfil = open("sound.wad",O_WRONLY|O_CREAT|O_TRUNC,0655);
|
|
if ( !wfil )
|
|
{
|
|
free(snd);
|
|
return 1;
|
|
}
|
|
int numsounds;
|
|
for ( numsounds=0; *snames[numsounds]!=0; numsounds++ );
|
|
wad_t whead = {"PWAD",numsounds,sizeof(wad_t)+s.st_size};
|
|
lump_t slmp = {sizeof(wad_t),s.st_size,0};
|
|
if ( xwrite(wfil,(unsigned char *)&whead,sizeof(wad_t)) )
|
|
{
|
|
free(snd);
|
|
close(wfil);
|
|
return 1;
|
|
}
|
|
if ( xwrite(wfil,snd,s.st_size) )
|
|
{
|
|
free(snd);
|
|
close(wfil);
|
|
return 1;
|
|
}
|
|
for ( int i=0; i<numsounds; i++ )
|
|
{
|
|
strncpy(slmp.name,snames[i],8);
|
|
if ( xwrite(wfil,(unsigned char *)&slmp,sizeof(lump_t)) )
|
|
{
|
|
free(snd);
|
|
close(wfil);
|
|
return 1;
|
|
}
|
|
}
|
|
free(snd);
|
|
close(wfil);
|
|
return 0;
|
|
}
|