All pastes #136347 Raw Edit

Mine

public c v1 · immutable
#136347 ·published 2006-08-17 16:42 UTC
rendered paste body
#define _CRT_SECURE_NO_DEPRECATE#include <windows.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <direct.h>void dumplumpent(FILE *f){	unsigned int unk1, namelen;	char *name = NULL;	unsigned int unk2, unk3, unk4, unk5, unk6, unk7, datalen;	unsigned char *data = NULL;	unsigned short term;	FILE *fo;	int i;	fread(&unk1, 4, 1, f);	fread(&namelen, 4, 1, f);	if(namelen) {		name = malloc(namelen + 1);		fread(name, namelen, 1, f);		name[namelen] = 0;	}	fread(&unk2, 4, 1, f);	fread(&unk3, 4, 1, f);	fread(&unk4, 4, 1, f);	fread(&unk5, 4, 1, f);	fread(&unk6, 4, 1, f);	fread(&unk7, 4, 1, f);	fread(&datalen, 4, 1, f);	if(datalen) {		data = malloc(datalen);		fread(data, datalen, 1, f);	}	fread(&term, 2, 1, f);	printf("unk1 %08X, unk2 %08X, unk3 %08X, unk4 %08X, unk5 %08X, unk6 %08X, unk7 %08X, term %04X, datalen %08X, name %s\n", \		unk1, unk2, unk3, unk4, unk5, unk6, unk7, term, datalen, name);		if(name) {		for(i = 0; i < (int)strlen(name); i++) {			if(name[i] == '/') {				name[i] = 0;				_mkdir(name);				name[i] = '/';			}		}		fo = fopen(name, "wb");		if(fo) {			if(data)				fwrite(data, datalen, 1, fo);			fclose(fo);		}	}	if(name)		free(name);	if(data)		free(data);	return;}void dumplumphdr(FILE *f){	int lumpnum, lumpnamelen;	char *lumpname = NULL;	int numentries;	int i;	fread(&lumpnum, 4, 1, f);	fread(&lumpnamelen, 4, 1, f);	if(lumpnamelen) {		lumpname = malloc(lumpnamelen + 1);		fread(lumpname, lumpnamelen, 1, f);		lumpname[lumpnamelen] = 0;	}	fread(&numentries, 4, 1, f);	printf("lumpnum %08X, numentries %08X, lumpnamelen %08X, lumpname %s\n", lumpnum, numentries, lumpnamelen, lumpname);	for(i = 0; i < numentries; i++)		dumplumpent(f);}void dumplump(const char *filename){	FILE *f;	int flen;	f = fopen(filename, "rb");	fseek(f, 0, SEEK_END);	flen = ftell(f);	fseek(f, 0, SEEK_SET);	printf("%s\n", filename);	dumplumphdr(f);	printf("\n");	fclose(f);}int main(int argc, char **argv){	char filenamebuf[512];	WIN32_FIND_DATA fd;	HANDLE h;	int i, hasnumext;	h = FindFirstFile("data\\lump\\*", &fd);	if(h == INVALID_HANDLE_VALUE)		return 2;	do {		hasnumext = 0;		for(i = (int)strlen(fd.cFileName) - 1; i >= 0; i--) {			if(fd.cFileName[i] >= '0' && fd.cFileName[i] <= '9') {				if(hasnumext == 0 || hasnumext == 1) {					hasnumext = 1;				} else {					hasnumext = -1;					break;				}			} else if(fd.cFileName[i] == '.') {				if(hasnumext == 1) {					hasnumext = 2;					break;				} else {					hasnumext = -2;					break;				}			} else {					hasnumext = -3;					break;			}		}		sprintf(filenamebuf, "data/lump/%s", fd.cFileName);		if(hasnumext == 2) {			dumplump(filenamebuf);		} else {			printf("skipping %s\n", fd.cFileName);		}	} while(FindNextFile(h, &fd));	FindClose(h);	return 0;}