示例#1
0
void make_field_type(short i,short j,short field_type)
{
	short k;

	if (is_field_type(i,j,field_type) == TRUE)
		return;
	for (k = 0; k < 50; k++)
		if (town.preset_fields[k].field_type == 0) {
			town.preset_fields[k].field_loc.x = i;
			town.preset_fields[k].field_loc.y = j;
			town.preset_fields[k].field_type = field_type;
			return;
			}
	give_error("Each town can have at most 50 fields and special effects (webs, barrels, blood stains, etc.). To place more, use the eraser first.","",0);
}
示例#2
0
bool binspector_parser_t::is_typedef()
{
    adobe::name_t    named_field_identifier;
    atom_base_type_t atom_type(atom_unknown_k);
    adobe::array_t   bit_count_expression;
    adobe::array_t   is_big_endian_expression;
    adobe::name_t    new_type_identifier;

    if (!is_keyword(key_typedef))
        return false;

    if (!is_field_type(named_field_identifier,
                       atom_type,
                       bit_count_expression,
                       is_big_endian_expression))
        throw_exception("Field type expected");

    require_identifier(new_type_identifier);

    adobe::dictionary_t parameters;

    parameters[key_field_name].assign(new_type_identifier);
    parameters[key_field_size_type].assign(field_size_none_k); // intentionally fixed
    parameters[key_field_size_expression].assign(adobe::array_t()); // intentionally fixed
    parameters[key_field_offset_expression].assign(adobe::array_t()); // intentionally fixed

    if (named_field_identifier != adobe::name_t())
    {
        parameters[key_field_type].assign(value_field_type_typedef_named);
        parameters[key_named_type_name].assign(named_field_identifier);
    }
    else
    {
        parameters[key_field_type].assign(value_field_type_typedef_atom);
        parameters[key_atom_base_type].assign(atom_type);
        parameters[key_atom_bit_count_expression].assign(bit_count_expression);
        parameters[key_atom_is_big_endian_expression].assign(is_big_endian_expression);
    }

    insert_parser_metadata(parameters);
    add_typedef_proc_m(new_type_identifier, parameters);

    return true;
}
示例#3
0
int tchar_vsprintf_s_imp(T* buf, size_t nBufCount, const T* format, va_list& v, bool truncate)
{
	T* buf_end=buf+nBufCount; //変換リミット

	T* dst=buf;          //変換先ワーク変数
	const T* src=format; //変換元ワーク変数
	while(*src){
		if(nBufCount!=MAX_BUF && dst>=buf_end-1)break;
		//書式指定フィールドを取得
		if(is_field_begin(*src)){
			const T* field_begin=src;
			src++;
			src=skip_field_flag(src);
			src=skip_field_width(src);
			src=skip_field_precision(src);
			const T* prefix = src;
			src=skip_field_prefix(src);

			if(is_field_type(*src)){
				src++;
				const T* field_end=src;

				//フィールドを一時変数にコピー
				T field[64];
				if(field_end-field_begin>=_countof(field))field_end=field_begin+_countof(field)-1; //フィールド長制限
				auto_strncpy(field,field_begin,field_end-field_begin);
				field[field_end-field_begin] = 0;
				
				//フィールド内に%tsまたは%tcがあったら、適切に変換
				field_convert(field);

				//変換処理は標準ライブラリに委譲
				int ret;
				va_list tmp_v=v; //※vをコピーして用いる
				if(truncate){
					ret=local_vsnprintf_s(dst,buf_end-dst,field,tmp_v);
					if( ret<0 ){
						//バッファに入りきらない文字列が切り捨てられた
						return -1;
					}
				}
				else if(nBufCount!=MAX_BUF){
					ret=local_vsprintf_s(dst,buf_end-dst,field,tmp_v);
				}
				else{
					ret=local_vsprintf(dst,field,tmp_v);
				}

				//vを進める。自信なっしんぐ
				my_va_forward(v,field, prefix);

				//変換先ワークポインタを進める
				if(ret!=-1){
					dst+=ret;
				}
				src=field_end;
			}
			else{
				//有効な型フィールドではなかったので、そのまんま出力しちゃう
				*dst++ = *src++;
			}
		}
		else{
			//無変換
			*dst++ = *src++;
		}
	}
	//終端
	*dst = 0;

	if( truncate && *src != '\0' ){		//切り詰めありで、srcの処理が完了していない場合
		return -1;						//切り詰められた
	}
	return dst-buf;
}
示例#4
0
Boolean is_quickfire(short i,short j)
{
	return is_field_type(i,j,8);
}
示例#5
0
Boolean is_sfx(short i,short j,short type)
{
	return is_field_type(i,j,type + 14);
}
示例#6
0
Boolean is_force_barrier(short i,short j)
{
	return is_field_type(i,j,7);
}
示例#7
0
Boolean is_fire_barrier(short i,short j)
{
	return is_field_type(i,j,6);
}
示例#8
0
Boolean is_barrel(short i,short j)
{
	return is_field_type(i,j,5);
}
示例#9
0
Boolean is_crate(short i,short j)
{
	return is_field_type(i,j,4);
}
示例#10
0
Boolean is_web(short i,short j)
{
	return is_field_type(i,j,3);

}