コード例 #1
0
int engine_config_write_start()
{
	config_save("settings.cfg");
	config_file = engine_openfile("settings.cfg", IOFLAG_WRITE);
	config_file = engine_openfile("settings.txt", IOFLAG_WRITE);
	if(config_file == 0)
		return -1;
	return 0;
}
コード例 #2
0
static void console_execute_file_real(const char *filename)
{
	IOHANDLE file;
	file = engine_openfile(filename, IOFLAG_READ);
	
	if(file)
	{
		//VOTEOPTION *current = voteoption_first;
		//while(current)
		//{
		//	current = current->next;
		//	current->prev=0;
		//}
		//int i=0;
		//for(i;i<MAX_CLIENTS;i++)
		//	if (game.players[i]->authed==0)
		//		server_kick(i, "Server settings reload");

		char *line;
		LINEREADER lr;
		
		dbg_msg("console", "executing '%s'", filename);
		linereader_init(&lr, file);

		while((line = linereader_get(&lr)))
			console_execute_line(line,-1);

		io_close(file);
	}
	else
		dbg_msg("console", "failed to open '%s'", filename);
}
コード例 #3
0
ファイル: ec_font.cpp プロジェクト: gerich-home/zteeworlds
int font_load(FONT *font, const char *filename)
{
    FONT_DATA font_data;
	IOHANDLE file;

	file = engine_openfile(filename, IOFLAG_READ);
	
	if(file)
	{
        int i;

        io_read(file, &font_data, sizeof(FONT_DATA));
        io_close(file);

#if defined(CONF_ARCH_ENDIAN_BIG)
        swap_endian(&font_data, 2, sizeof(FONT_DATA)/2);
#endif

        {
            float scale_factor_x = 1.0f/font_data.size;
            float scale_factor_y = 1.0f/font_data.size;
            float scale_factor_tex_x = 1.0f/font_data.width;
            float scale_factor_tex_y = 1.0f/font_data.height;

            for (i = 0; i < 256; i++)
            {
                float tex_x0 = font_data.characters[i].x*scale_factor_tex_x;
                float tex_y0 = font_data.characters[i].y*scale_factor_tex_y;
                float tex_x1 = (font_data.characters[i].x+font_data.characters[i].width)*scale_factor_tex_x;
                float tex_y1 = (font_data.characters[i].y+font_data.characters[i].height)*scale_factor_tex_y;

                float width = font_data.characters[i].width*scale_factor_x;
                float height = font_data.characters[i].height*scale_factor_y;
                float x_offset = font_data.characters[i].x_offset*scale_factor_x;
                float y_offset = font_data.characters[i].y_offset*scale_factor_y;
                float x_advance = (font_data.characters[i].x_advance)*scale_factor_x;

                font->characters[i].tex_x0 = tex_x0;
                font->characters[i].tex_y0 = tex_y0;
                font->characters[i].tex_x1 = tex_x1;
                font->characters[i].tex_y1 = tex_y1;
                font->characters[i].width = width;
                font->characters[i].height = height;
                font->characters[i].x_offset = x_offset;
                font->characters[i].y_offset = y_offset;
                font->characters[i].x_advance = x_advance;

            }

            for (i = 0; i < 256*256; i++)
            {
                font->kerning[i] = (char)font_data.kerning[i];
            }
        }

        return 0;
    }
    else
        return -1;
}
コード例 #4
0
ファイル: e_engine.c プロジェクト: floff/ddracemax_old
int mastersrv_load()
{
	LINEREADER lr;
	IOHANDLE file;
	int count = 0;
	
	/* try to open file */
	file = engine_openfile("masters.cfg", IOFLAG_READ);
	if(!file)
		return -1;
	
	linereader_init(&lr, file);
	while(1)
	{
		MASTER_INFO info = {{0}};
		int ip[4];
		const char *line = linereader_get(&lr);
		if(!line)
			break;

		/* parse line */		
		if(sscanf(line, "%s %d.%d.%d.%d", info.hostname, &ip[0], &ip[1], &ip[2], &ip[3]) == 5)
		{
			info.addr.ip[0] = (unsigned char)ip[0];
			info.addr.ip[1] = (unsigned char)ip[1];
			info.addr.ip[2] = (unsigned char)ip[2];
			info.addr.ip[3] = (unsigned char)ip[3];
			info.addr.port = 8300;
			if(count != MAX_MASTERSERVERS)
			{
				master_servers[count] = info;
				count++;
			}
			else
				dbg_msg("engine/mastersrv", "warning: skipped master server '%s' due to limit of %d", line, MAX_MASTERSERVERS);
		}
		else
			dbg_msg("engine/mastersrv", "warning: couldn't parse master server '%s'", line);
	}
	
	io_close(file);
	return 0;
}
コード例 #5
0
ファイル: e_console.c プロジェクト: wixur/teeworlds-ng
static void console_execute_file_real(const char *filename)
{
	IOHANDLE file;
	file = engine_openfile(filename, IOFLAG_READ);
	
	if(file)
	{
		char *line;
		LINEREADER lr;
		
		dbg_msg("console", "executing '%s'", filename);
		linereader_init(&lr, file);

		while((line = linereader_get(&lr)))
			console_execute_line(line);

		io_close(file);
	}
	else
		dbg_msg("console", "failed to open '%s'", filename);
}
コード例 #6
0
ファイル: e_datafile.c プロジェクト: Amor/Clientmod
int datafile_crc(const char *filename)
{
	unsigned char buffer[BUFFER_SIZE];
	IOHANDLE file;
	int crc = 0;
	unsigned bytes = 0;
	
	file = engine_openfile(filename, IOFLAG_READ);
	if(!file)
		return 0;
		
	while(1)
	{
		bytes = io_read(file, buffer, BUFFER_SIZE);
		if(bytes <= 0)
			break;
		crc = crc32(crc, buffer, bytes);
	}
	
	io_close(file);

	return crc;	
}
コード例 #7
0
ファイル: e_engine.c プロジェクト: floff/ddracemax_old
int mastersrv_save()
{
	IOHANDLE file;
	int i;

	/* try to open file */
	file = engine_openfile("masters.cfg", IOFLAG_WRITE);
	if(!file)
		return -1;

	for(i = 0; i < MAX_MASTERSERVERS; i++)
	{
		char buf[1024];
		str_format(buf, sizeof(buf), "%s %d.%d.%d.%d\n", master_servers[i].hostname,
			master_servers[i].addr.ip[0], master_servers[i].addr.ip[1],
			master_servers[i].addr.ip[2], master_servers[i].addr.ip[3]);
			
		io_write(file, buf, strlen(buf));
	}
	
	io_close(file);
	return 0;
}
コード例 #8
0
ファイル: e_datafile.c プロジェクト: Amor/Clientmod
DATAFILE_OUT *datafile_create(const char *filename)
{
	int i;
	DATAFILE_OUT *df = (DATAFILE_OUT*)mem_alloc(sizeof(DATAFILE_OUT), 1);
	df->file = engine_openfile(filename, IOFLAG_WRITE);
	if(!df->file)
	{
		mem_free(df);
		return 0;
	}
	
	df->num_items = 0;
	df->num_datas = 0;
	df->num_item_types = 0;
	mem_zero(&df->item_types, sizeof(df->item_types));

	for(i = 0; i < 0xffff; i++)
	{
		df->item_types[i].first = -1;
		df->item_types[i].last = -1;
	}
	
	return df;
}
コード例 #9
0
ファイル: e_datafile.c プロジェクト: Amor/Clientmod
DATAFILE *datafile_load(const char *filename)
{
	DATAFILE *df;
	IOHANDLE file;
	DATAFILE_HEADER header;
	unsigned readsize;
	
	unsigned *dst;
	unsigned char *src;
	unsigned j;
	int size = 0;
	int allocsize = 0;
	
	(void)dst;
	(void)src;
	(void)j;
	
	
	dbg_msg("datafile", "datafile loading. filename='%s'", filename);

	file = engine_openfile(filename, IOFLAG_READ);
	if(!file)
		return 0;
	
	/* TODO: change this header */
	io_read(file, &header, sizeof(header));
	if(header.id[0] != 'A' || header.id[1] != 'T' || header.id[2] != 'A' || header.id[3] != 'D')
	{
		if(header.id[0] != 'D' || header.id[1] != 'A' || header.id[2] != 'T' || header.id[3] != 'A')
		{
			dbg_msg("datafile", "wrong signature. %x %x %x %x", header.id[0], header.id[1], header.id[2], header.id[3]);
			return 0;
		}
	}

#if defined(CONF_ARCH_ENDIAN_BIG)
	swap_endian(&header, sizeof(int), sizeof(header)/sizeof(int));	
#endif
	if(header.version != 3 && header.version != 4)
	{
		dbg_msg("datafile", "wrong version. version=%x", header.version);
		return 0;
	}
	
	/* read in the rest except the data */
	size = 0;
	size += header.num_item_types*sizeof(DATAFILE_ITEM_TYPE);
	size += (header.num_items+header.num_raw_data)*sizeof(int);
	if(header.version == 4)
		size += header.num_raw_data*sizeof(int); /* v4 has uncompressed data sizes aswell */
	size += header.item_size;
	
	allocsize = size;
	allocsize += sizeof(DATAFILE); /* add space for info structure */
	allocsize += header.num_raw_data*sizeof(void*); /* add space for data pointers */

	df = (DATAFILE*)mem_alloc(allocsize, 1);
	df->header = header;
	df->data_start_offset = sizeof(DATAFILE_HEADER) + size;
	df->data_ptrs = (char**)(df+1);
	df->data = (char *)(df+1)+header.num_raw_data*sizeof(char *);
	df->file = file;
	
	/* clear the data pointers */
	mem_zero(df->data_ptrs, header.num_raw_data*sizeof(void*));
	
	/* read types, offsets, sizes and item data */
	readsize = io_read(file, df->data, size);
	if(readsize != size)
	{
		dbg_msg("datafile", "couldn't load the whole thing, wanted=%d got=%d", size, readsize);
		return 0;
	}

#if defined(CONF_ARCH_ENDIAN_BIG)
	swap_endian(df->data, sizeof(int), header.swaplen / sizeof(int));
#endif

	if(DEBUG)
	{
		dbg_msg("datafile", "allocsize=%d", allocsize);
		dbg_msg("datafile", "readsize=%d", readsize);
		dbg_msg("datafile", "swaplen=%d", header.swaplen);
		dbg_msg("datafile", "item_size=%d", df->header.item_size);
	}
	
	df->info.item_types = (DATAFILE_ITEM_TYPE *)df->data;
	df->info.item_offsets = (int *)&df->info.item_types[df->header.num_item_types];
	df->info.data_offsets = (int *)&df->info.item_offsets[df->header.num_items];
	df->info.data_sizes = (int *)&df->info.data_offsets[df->header.num_raw_data];
	
	if(header.version == 4)
		df->info.item_start = (char *)&df->info.data_sizes[df->header.num_raw_data];
	else
		df->info.item_start = (char *)&df->info.data_offsets[df->header.num_raw_data];
	df->info.data_start = df->info.item_start + df->header.item_size;

	if(DEBUG)
		dbg_msg("datafile", "datafile loading done. datafile='%s'", filename);

	if(DEBUG)
	{
		/*
		for(int i = 0; i < df->data.num_raw_data; i++)
		{
			void *p = datafile_get_data(df, i);
			dbg_msg("datafile", "%d %d", (int)((char*)p - (char*)(&df->data)), size);
		}
			
		for(int i = 0; i < datafile_num_items(df); i++)
		{
			int type, id;
			void *data = datafile_get_item(df, i, &type, &id);
			dbg_msg("map", "\t%d: type=%x id=%x p=%p offset=%d", i, type, id, data, df->info.item_offsets[i]);
			int *idata = (int*)data;
			for(int k = 0; k < 3; k++)
				dbg_msg("datafile", "\t\t%d=%d (%x)", k, idata[k], idata[k]);
		}

		for(int i = 0; i < df->data.num_item_types; i++)
		{
			dbg_msg("map", "\t%d: type=%x start=%d num=%d", i,
				df->info.item_types[i].type,
				df->info.item_types[i].start,
				df->info.item_types[i].num);
			for(int k = 0; k < df->info.item_types[i].num; k++)
			{
				int type, id;
				datafile_get_item(df, df->info.item_types[i].start+k, &type, &id);
				if(type != df->info.item_types[i].type)
					dbg_msg("map", "\tERROR");
			}
		}
		*/
	}
		
	return df;
}
コード例 #10
0
ファイル: ec_snd.cpp プロジェクト: gerich-home/zteeworlds
int snd_load_wv(const char *filename)
{
	SAMPLE *snd;
	int sid = -1;
	char error[100];
	WavpackContext *context;
	
	/* don't waste memory on sound when we are stress testing */
	if(config.dbg_stress)
		return -1;
		
	/* no need to load sound when we are running with no sound */
	if(!sound_enabled)
		return 1;

	file = engine_openfile(filename, IOFLAG_READ); /* TODO: use system.h stuff for this */
	if(!file)
	{
		dbg_msg("sound/wv", "failed to open %s", filename);
		return -1;
	}

	sid = snd_alloc_id();
	if(sid < 0)
		return -1;
	snd = &samples[sid];

	context = WavpackOpenFileInput(read_data, error);
	if (context)
	{
		int samples = WavpackGetNumSamples(context);
		int bitspersample = WavpackGetBitsPerSample(context);
		unsigned int samplerate = WavpackGetSampleRate(context);
		int channels = WavpackGetNumChannels(context);
		int *data;
		int *src;
		short *dst;
		int i;

		snd->channels = channels;
		snd->rate = samplerate;

		if(snd->channels > 2)
		{
			dbg_msg("sound/wv", "file is not mono or stereo. filename='%s'", filename);
			return -1;
		}

		/*
		if(snd->rate != 44100)
		{
			dbg_msg("sound/wv", "file is %d Hz, not 44100 Hz. filename='%s'", snd->rate, filename);
			return -1;
		}*/
		
		if(bitspersample != 16)
		{
			dbg_msg("sound/wv", "bps is %d, not 16, filname='%s'", bitspersample, filename);
			return -1;
		}

		data = (int *)mem_alloc(4*samples*channels, 1);
		WavpackUnpackSamples(context, data, samples); /* TODO: check return value */
		src = data;
		
		snd->data = (short *)mem_alloc(2*samples*channels, 1);
		dst = snd->data;

		for (i = 0; i < samples*channels; i++)
			*dst++ = (short)*src++;

		mem_free(data);

		snd->num_frames = samples;
		snd->loop_start = -1;
		snd->loop_end = -1;
	}
	else
	{
		dbg_msg("sound/wv", "failed to open %s: %s", filename, error);
	}

	io_close(file);
	file = NULL;

	if(config.debug)
		dbg_msg("sound/wv", "loaded %s", filename);

	rate_convert(sid);
	return sid;
}