示例#1
0
文件: cmd.cpp 项目: voidpaper/sgs2010
static RESULT cmd_discard(const char** argv, int argc, GameContext* pContext, GameEventContext* pEvent)
{
	int idx[MAX_PARAM_NUM];
	int cnt = 0;
	int n;

	if(get_game_status(pContext) == Status_None)
	{
		MSG_OUT("当前不在游戏中!\n");
		return R_E_STATUS;
	}

	if(argc < 2)
	{
		param_error(argv[0]);
		return R_E_PARAM;
	}

	
	for(n = 1; n < argc && cnt < MAX_PARAM_NUM; n++)
	{
		if(0 != to_int(argv[n], &idx[cnt]))
		{
			param_error(argv[0]);
			return R_E_PARAM;
		}
		cnt++;
	}


	return game_cmd_discard_card(pContext, pEvent, idx, cnt);
}
示例#2
0
/*
 * Xboard - level command
 * Arguments are three numbers, or four numbers with a colon between
 * the two in the middle:
 *
 *  level 40 5 0
 *
 * or
 *
 *  level 20 1:40 2
 */
static void
cmd_level(void)
{
    unsigned mps, base, inc;
    char *base_str;
    char *base_token;
    char *lasts;
    long long base_minutes;
    long long base_seconds;

    mps = get_uint(0, 1024);
    base_str = get_str_arg();
    inc = get_uint(0, 1024);

    base_token = xstrtok_r(base_str, ":", &lasts);
    base_minutes = get_num_arg(base_token);
    if (base_minutes < 0 || base_minutes > 8192)
        param_error();

    if ((base_token = xstrtok_r(NULL, ":", &lasts)) != NULL)
        base_seconds = get_num_arg(base_token);
    else
        base_seconds = 0;

    if (base_minutes < 0 || base_minutes > 59)
        param_error();

    if (xstrtok_r(NULL, ":", &lasts) != NULL)
        param_error();

    base = ((unsigned)base_minutes) * 60 + (unsigned)base_seconds;
    set_moves_left_in_time(mps);
    set_computer_clock(base * 100);
    set_time_inc(inc * 100);
}
示例#3
0
static unsigned
get_uint(unsigned min, unsigned max)
{
    long long n;

    n = get_num_arg(get_str_arg());
    if (n < (long long)min) {
        (void) fprintf(stderr, "Number too low: %lld\n", n);
        param_error();
    }
    if (n > (long long)max) {
        (void) fprintf(stderr, "Number too high: %lld\n", n);
        param_error();
    }
    return (unsigned)n;
}
示例#4
0
static int
get_int(int min, int max)
{
    long long n;

    n = get_num_arg(get_str_arg());
    if (n < (long long)min) {
        (void) fprintf(stderr, "Number too low: %lld\n", n);
        param_error();
    }
    if (n > (long long)max) {
        (void) fprintf(stderr, "Number too high: %lld\n", n);
        param_error();
    }
    return (int)n;
}
示例#5
0
文件: cmd.cpp 项目: voidpaper/sgs2010
static RESULT cmd_load(const char** argv, int argc, GameContext* pContext, GameEventContext* pEvent)
{
	GameEventContext    event;
	//RESULT ret;
	if(pContext->status != Status_None)
	{
		MSG_OUT("已经在游戏中,不能加载一个游戏进度!\n");
		return R_E_STATUS;
	}

	if(argc != 2)
	{
		param_error(argv[0]);
		return R_E_PARAM;
	}
	
	// load game

	INIT_EVENT(&event, GameEvent_LoadGame, INVALID_PLAYER , INVALID_PLAYER, pEvent);
	event.file_name = argv[1];

	//ret = game_load(pContext, argv[1]);
	
	//if(R_SUCC != ret)
	//{
	//	return ret;
	//}

	// game main
	return game_main(pContext, &event);
}
示例#6
0
文件: cmd.cpp 项目: voidpaper/sgs2010
static RESULT cmd_useskill(const char** argv, int argc, GameContext* pContext, GameEventContext* pEvent)
{
	int    idx;
	RESULT ret;
	if(get_game_status(pContext) == Status_None)
	{
		MSG_OUT("当前不在游戏中!\n");
		return R_E_STATUS;
	}

	ret = R_DEF;

	if(argc >= 2 && 0 == to_int(argv[1], &idx))
	{
		ret = game_cmd_use_skill(pContext, pEvent, idx);
	}
	else if(argc >= 2 && (0 == strcasecmp(argv[1], "weapon") || 0 == strcasecmp(argv[1], "w")) )
	{
		ret = game_cmd_use_weapon(pContext, pEvent);
	}
	else if(argc >= 2 && (0 == strcasecmp(argv[1], "armor") || 0 == strcasecmp(argv[1], "a")) )
	{
		ret = game_cmd_use_armor(pContext, pEvent);
	}
	else
	{
		param_error(argv[0]);
		return R_E_PARAM;
	}
	
	return ret;
}
示例#7
0
	static PyObject* buffer_set( PyIOCPBufferObject* s, PyObject *args )
	{
		const void * buffer_ptr = 0 ;
		DWORD buffer_len = 0;
		DWORD buffer_set_length = -1;
		PyObject* o = 0;
		int r = PyArg_ParseTuple( args, "O|I", &o, &buffer_set_length );
		if( r == 0 ) return param_error( );
		r = PyObject_AsReadBuffer( o, &buffer_ptr, (Py_ssize_t *) &buffer_len );
		if( r != 0 ) return param_error( );
		if( buffer_set_length < buffer_len )
			buffer_len = buffer_set_length;
		DWORD mov_num = buffer_len;
		if( s->len < mov_num ) mov_num = s->len ;
		memcpy_s( s->ptr_start, s->len, buffer_ptr, mov_num );
		Py_RETURN_NONE;
	}
示例#8
0
文件: cmd.cpp 项目: voidpaper/sgs2010
static RESULT cmd_start(const char** argv, int argc, GameContext* pContext, GameEventContext* pEvent)
{

	//RESULT  ret;
	int cfg;
	const NewGameConfig*  pConfig;
	GameEventContext    event;

	if(pContext->status != Status_None)
	{
		MSG_OUT("你正在游戏中,不能开始一个新的游戏!");
		return R_E_STATUS;
	}

	if(argc < 2 || 0 != to_int(argv[1], &cfg))
	{
		param_error(argv[0]);
		return R_E_PARAM;
	}

	// get config struct 
	pConfig = select_config(cfg);

	if(pConfig == NULL )
	{
		param_error(argv[0]);
		return R_E_PARAM;
	}

	// new game
	INIT_EVENT(&event, GameEvent_NewGame, INVALID_PLAYER, INVALID_PLAYER, pEvent);
	event.new_game_config = pConfig;


	//ret = init_game_context(pContext, pConfig->ministers, pConfig->spies, pConfig->mutineers);

	//if(ret != R_SUCC)
	//{
	//	MSG_OUT("start init new game failed!");
	//	return ret;
	//}

	// game main
	return game_main(pContext, &event);
}
示例#9
0
static char*
get_str_arg(void)
{
    char *str;

    if ((str = get_str_arg_opt()) == NULL) {
        param_error();
    }
    return str;
}
示例#10
0
static void
cmd_setmovenot(void)
{
    char *str = get_str_arg_lower();

    if (strcmp(str, "coor") == 0)
        conf->move_not = mn_coordinate;
    else if (strcmp(str, "san") == 0)
        conf->move_not = mn_san;
    else
        param_error();
}
示例#11
0
QVariantMap simulatorSyncCOMP(int i, QIODevice *connection,
	const QSqlDatabase& db, const QSqlDatabase& user_db,
	const QVariantMap& action, const QString& email)
{
	Q_UNUSED(db);
	Q_UNUSED(connection);

	// Check for the 'devils' paramater
	if( !action.contains("devils") )
		return param_error(tr("simulator_sync_comp action"), tr("devils"),
			tr("action %1").arg(i));

	int user_id = Auth::getSingletonPtr()->queryUserID(email);
	if(user_id < 1)
		return herror("simulator_sync_comp action", tr("unknown user for "
			"action %1").arg(i));

	QVariantList devils = action.value("devils").toList();
	if(devils.count() != SLOT_COUNT_COMP)
		return herror("simulator_sync_comp action", tr("unexpected number "
			"of devil COMP slots for action %1").arg(i));

	QSqlDatabase m_db = user_db;
	m_db.transaction();

	QString sql = "UPDATE db_comp SET devil = :devil WHERE "
		"user_id = :user_id AND slot = :slot";

	QSqlQuery query(m_db);
	if( !query.prepare(sql) )
		return herror_sql(m_db, "simulator_sync_comp action", tr("SQL "
			"error for action %1: %2").arg(i).arg(
			query.lastError().text() ));

	for(int j = 0; j < SLOT_COUNT_COMP; j++)
	{
		query.bindValue(":user_id", user_id, QSql::In);
		query.bindValue(":slot", j + 1, QSql::In);
		query.bindValue(":devil", devils.at(j), QSql::In);

		if( !query.exec() )
			return herror_sql(m_db, "simulator_sync_comp action", tr("SQL "
				"error for action %1: %2").arg(i).arg(
				query.lastError().text() ));
	}

	m_db.commit();

	return QVariantMap();
}
示例#12
0
static long long
get_num_arg(const char *str)
{
    long long n;
    char *endptr;

    n = strtoll(str, &endptr, 0);

    if (n == LLONG_MAX || n == LLONG_MIN || *endptr != '\0') {
        (void) fprintf(stderr, "Invalid numeric argument\n");
        param_error();
    }

    return n;
}
示例#13
0
	inline void error_report(state_t &state, bool suc, int type, int idx, const std::string &msg)
	{
		if( suc )
			return;

		std::ostringstream os;
		os << "lua parameter error: " << std::endl
			<< "index [" << idx << "]" << std::endl
			<< "real type [" << ::lua_typename(state, ::lua_type(state, idx)) << "]" << std::endl
			<< "expected type [" << ::lua_typename(state, type) << "]" << std::endl
			<< "information [" << msg << "]" << std::endl;

		parameter_error_t param_error(state, os.str());
		param_error.dump(std::cerr);
		std::cerr << std::endl << param_error.what() << std::endl;
		assert(suc);

		throw param_error;
	}
示例#14
0
static void
set_var_onoff(bool *variable)
{
    char *str;

    if ((str = get_str_arg_lower_opt()) == NULL) {
        *variable = true;
        return;
    }
    if (strcmp(str, "on") == 0) {
        *variable = true;
    }
    else if (strcmp(str, "off") == 0) {
        *variable = false;
    }
    else {
        param_error();
    }
}
示例#15
0
文件: cmd.cpp 项目: voidpaper/sgs2010
static RESULT cmd_save(const char** argv, int argc, GameContext* pContext, GameEventContext* pEvent)
{
	if(get_game_status(pContext) == Status_None)
	{
		MSG_OUT("当前不在游戏中,不能保存进度!\n");
		return R_E_STATUS;
	}

	if(argc != 2)
	{
		param_error(argv[0]);
		return R_E_PARAM;
	}


	game_save(pContext, argv[1]);

	return R_DEF;
}
示例#16
0
int		transform_parameters_line(t_cor_line *line, t_label *label)
{
  int		it;
  int		len;

  len = get_wordarr_len(line->args);
  line->p_args = xmalloc(len * sizeof(t_cor_arg));
  it = 0;
  while (it < len)
    {
      line->p_args[it] = to_cor_arg(line->args[it], line->mempos, label);
      if (line->p_args[it].type == T_ERR)
	{
	  param_error(line->p_args[it].val, line->nbr);
	  return (-1);
	}
      it++;
    }
  return (0);
}
示例#17
0
文件: fractal.c 项目: qstemper/42
void	init_frac(t_env *e)
{
    if (!(e->array = (t_frac *)malloc(sizeof(t_frac) * 5)))
        param_error(1);
    e->ptr = NULL;
    e->array[0] = (t_frac) { {0, 0}, {0, 0}, -0.9, 0, 0, 0, \
        e->width / 2.7, e->height / 2.4, 0.5, 0, 0, 50, mandelbrot
    };
    e->array[1] = (t_frac) { {0.285, 0.01}, {0, 0}, 0, 0, 0, 0, \
        e->width / 3.0, e->height / 2.4, 0.5, 0, 0, 10, julia
    };
    e->array[2] = (t_frac) { {0, 0}, {0, 0}, -2.1, 0.6, -1.2, 1.2, \
        e->width / 2.7, e->height / 2.4, 1, 0, 0, 50, menger
    };
    e->array[3] = (t_frac) { {0, 0}, {0, 0}, 0, 0, 0, 0, \
        e->width / 2.7, e->height / 2.4, 0.5, 0, 0, 50, b_ship
    };
    e->array[4] = (t_frac) { {0, 0}, {0, 0}, 0, 0, 0, 0, \
        e->width / 2.7, e->height / 2.4, 0.5, 0, 0, 50, mandelbar
    };
    e->ptr = &(e->array[0]);
}
示例#18
0
void UmlOperation::generate_decl(QTextStream & f,
                                 const WrapperStr & cl_stereotype,
                                 WrapperStr indent, bool)
{
    if (!idlDecl().isEmpty()) {
        if ((cl_stereotype != "interface") &&
                (cl_stereotype != "valuetype")) {
            write_trace_header();
            UmlCom::trace("&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"red\"><b>cannot have operation</b></font><br>");
            incr_warning();
            return;
        }

        const char * p = idlDecl();
        const char * pp = 0;
        const QList<UmlParameter> & params = this->params();
        const QList<UmlTypeSpec> & exceptions = this->exceptions();
        unsigned rank;

        while ((*p == ' ') || (*p == '\t'))
            indent += *p++;

        if (*p != '#')
            f << indent;

        for (;;) {
            if (*p == 0) {
                if (pp == 0)
                    break;

                // comment management done
                p = pp;
                pp = 0;

                if (*p == 0)
                    break;

                if (*p != '#')
                    f << indent;
            }

            if (*p == '\n') {
                f << *p++;

                if (*p && (*p != '#'))
                    f << indent;
            }
            else if (*p == '@')
                manage_alias(p, f);
            else if (*p != '$')
                f << *p++;
            else if (!strncmp(p, "${comment}", 10))
                manage_comment(p, pp);
            else if (!strncmp(p, "${description}", 14))
                manage_description(p, pp);
            else if (!strncmp(p, "${oneway}", 9)) {
                p += 9;

                if (isIdlOneway())
                    f << "oneway ";
            }
            else if (!strncmp(p, "${type}", 7)) {
                p += 7;
                UmlClass::write(f, returnType());
            }
            else if (!strncmp(p, "${name}", 7)) {
                p += 7;
                f << compute_name();
            }
            else if (!strncmp(p, "${(}", 4)) {
                p += 4;
                f << '(';
            }
            else if (!strncmp(p, "${)}", 4)) {
                p += 4;
                f << ')';
            }
            else if (sscanf(p, "${d%u}", &rank) == 1) {
                if (!generate_dir(params, rank, f))
                    param_error(parent()->name(), name(), rank, "declaration");

                p = strchr(p, '}') + 1;
            }
            else if (sscanf(p, "${t%u}", &rank) == 1) {
                if (!generate_type(params, rank, f))
                    param_error(parent()->name(), name(), rank, "declaration");

                p = strchr(p, '}') + 1;
            }
            else if (sscanf(p, "${p%u}", &rank) == 1) {
                if (!generate_var(params, rank, f))
                    param_error(parent()->name(), name(), rank, "declaration");

                p = strchr(p, '}') + 1;
            }
            else if (!strncmp(p, "${stereotype}", 13)) {
                p += 13;
                f << IdlSettings::relationAttributeStereotype(stereotype());
            }
            else if (!strncmp(p, "${raisesnl}", 11)) {
                if (exceptions.count() != 0) {
                    f << '\n' << indent << "  ";
                }

                p += 11;
            }
            else if (!strncmp(p, "${raises}", 9)) {
                p += 9;

                if (! exceptions.isEmpty()) {
                    const char * sep;
                    QList<UmlTypeSpec>::ConstIterator it;

                    for (it = exceptions.begin(), sep = " raises (";
                            it != exceptions.end();
                            ++it, sep = " ")
                        f << sep << IdlSettings::type((*it).toString());

                    f << ')';
                }
            }
            else if (!strncmp(p, "${association}", 14)) {
                p += 14;

                UmlClassMember * m;

                if (((m = getOf()) != 0) && (m->kind() == aRelation))
                    f << IdlSettings::type(((UmlRelation *) m)->association().toString());
                else if (((m = setOf()) != 0) && (m->kind() == aRelation))
                    f << IdlSettings::type(((UmlRelation *) m)->association().toString());
            }
            else
                // strange
                f << *p++;
        }

        f << '\n';
    }
}
示例#19
0
文件: cmd.cpp 项目: voidpaper/sgs2010
static RESULT cmd_info(const char** argv, int argc, GameContext* pContext, GameEventContext* pEvent)
{
	if(argc <= 1) // self info
	{
		if(pContext->status == Status_None)
		{
			MSG_OUT("游戏中才能查看当前玩家信息!\n");
			return R_E_STATUS;
		}
		else
		{
			game_cur_info(pContext, pEvent);
		}
	}
	else if(!strcmp(argv[1], "event") || !strcmp(argv[1], "e")) // game event info
	{
		game_event_info(pContext, pEvent, 0);
	}
	else if(!strcmp(argv[1], "eventfull") || !strcmp(argv[1], "ef")) // game event info
	{
		game_event_info(pContext, pEvent, 1);
	}
	else if(!strcmp(argv[1], "game") || !strcmp(argv[1], "g")) // game global info
	{
		if(pContext->status == Status_None)
		{
			MSG_OUT("游戏中才能查看游戏全局信息!\n");
			return R_E_STATUS;
		}
		else
		{
			game_global_info(pContext, pEvent);
		}
	}
	else if(!strcmp(argv[1], "gamefull") || !strcmp(argv[1], "gf")) // game full info 
	{
		MSG_OUT("暂时不支持该指令!\n");
	}
	else if(!strcmp(argv[1], "stack") || !strcmp(argv[1], "s")) // list out cards
	{
		if(pContext->status == Status_None)
		{
			MSG_OUT("游戏中才能查看牌堆信息!\n");
			return R_E_STATUS;
		}
		else
		{
			game_stack_info(pContext, pEvent);
		}
	}
	else if(!strcmp(argv[1], "player") || !strcmp(argv[1], "p"))  // player info: -n - prev [n] player; +n - next n player; n - player index n info; 
	{
		const char* pp;
		char cp = 0;
		int n = 0;
		if(pContext->status == Status_None)
		{
			MSG_OUT("游戏中才能查看玩家信息!\n");
			return R_E_STATUS;
		}

		if(argc < 3)
		{
			param_error(argv[0]);
			return R_E_PARAM;
		}

		pp = argv[2];

		if(*pp == '+' || *pp == '-')
		{
			cp = *pp;
			pp++;
		}


		if(*pp ==0 )
		{
			param_error(argv[0]);
			return R_E_PARAM;
		}


		while(*pp >= '0' && *pp <= '9')
		{
			n = n * 10 + (*pp -'0');
			pp++;
		}

		if(*pp != 0 )
		{
			param_error(argv[0]);
			return R_E_PARAM;
		}

		if(cp == '+')
		{
			n = (n + pContext->cur_player) % pContext->player_count;
		}
		else if(cp == '-')
		{
			n = (pContext->cur_player - n % pContext->player_count + pContext->player_count) % pContext->player_count;
		}
		else
		{
			n = n % pContext->player_count;
		}

		game_other_player_info(pContext, pEvent, n);
	}
	else if(!strcmp(argv[1], "card") || !strcmp(argv[1], "c"))
	{
		game_card_info(pContext, pEvent, argc < 3 ? NULL : argv[2]);
	}
	else if(!strcmp(argv[1], "hero") || !strcmp(argv[1], "h"))
	{
		game_hero_info(pContext, pEvent, argc < 3 ? NULL : argv[2]);	
	}
	else
	{
		param_error(argv[0]);
		return R_E_PARAM;
	}

	return R_DEF;
}
示例#20
0
void UmlOperation::generate(QTextStream & f, const WrapperStr &,
                            WrapperStr indent, BooL & indent_needed,
                            int &, const WrapperStr &)
{
    const char * p = pythonDecl();

    if ((p == 0) || (*p == 0))
        return;

    const char * pp = 0;
    WrapperStr saved_indent = indent;
    WrapperStr indent_step = PythonSettings::indentStep();
    const char * afterparam = 0;
    const QList<UmlParameter> & params = this->params();
    unsigned rank;
    bool isinline = TRUE;
    bool in_params = FALSE;

    for (;;) {
        if (*p == 0) {
            if (pp == 0)
                break;

            // comment management done
            p = pp;

            if (*p == 0)
                break;

            pp = 0;
            indent = saved_indent;
        }

        if (*p == '@')
            manage_alias(p, f, indent, indent_needed);
        else if (*p != '$') {
            if (indent_needed) {
                indent_needed = FALSE;
                f << indent;
            }

            switch (*p) {
            case ':':
                if (pp == 0) {
                    indent += indent_step;
                    saved_indent = indent;
                    indent_step = "";
                }

                break;

            case '\n':
                indent_needed = TRUE;
                break;
            }

            f << *p++;
        }
        else if (!strncmp(p, "${comment}", 10))
            manage_comment(p, pp);
        else if (!strncmp(p, "${description}", 14))
            manage_description(p, pp);
        else if (!strncmp(p, "${docstring}", 12))
            manage_docstring(p, pp, indent_needed, indent, saved_indent);
        else if (!strncmp(p, "${static}", 9)) {
            p += 9;

            if (isClassMember()) {
                if (indent_needed)
                    f << indent;
                else
                    indent_needed = TRUE;

                f << "@staticmethod\n";
            }
        }
        else if (!strncmp(p, "${abstract}", 11)) {
            p += 11;

            if (isAbstract()) {
                if (indent_needed)
                    f << indent;
                else
                    indent_needed = TRUE;

                f << "@abstractmethod\n";
            }
        }
        else if (!strncmp(p, "${@}", 4)) {
            p += 4;
            manage_decorators(f, pythonDecorators(), indent, indent_needed);
        }
        else if (!strncmp(p, "${name}", 7)) {
            if (indent_needed) {
                indent_needed = FALSE;
                f << indent;
            }

            p += 7;
            f << compute_name();
        }
        else if (!strncmp(p, "${class}", 8)) {
            if (indent_needed) {
                indent_needed = FALSE;
                f << indent;
            }

            p += 8;
            f << parent()->name();
        }
        else if (!strncmp(p, "${(}", 4)) {
            p += 4;
            f << '(';
            in_params = TRUE;
        }
        else if (!strncmp(p, "${)}", 4)) {
            p += 4;
            f << ')';
            afterparam = p;
            in_params = FALSE;
        }
        else if (sscanf(p, "${t%u}", &rank) == 1) {
            if (indent_needed) {
                indent_needed = FALSE;
                f << indent;
            }

            if (!generate_type(params, rank, f, in_params))
                param_error(parent()->name(), name(), rank);

            p = strchr(p, '}') + 1;
        }
        else if (sscanf(p, "${p%u}", &rank) == 1) {
            if (indent_needed) {
                indent_needed = FALSE;
                f << indent;
            }

            if (!generate_var(params, rank, f))
                param_error(parent()->name(), name(), rank);

            p = strchr(p, '}') + 1;
        }
        else if (sscanf(p, "${v%u}", &rank) == 1) {
            if (!generate_init(params, rank, f))
                param_error(parent()->name(), name(), rank);

            p = strchr(p, '}') + 1;
        }
        else if (!strncmp(p, "${body}", 7) &&
                 (pp == 0))	{// not in comment
            isinline = FALSE;
            p = generate_body(f, indent, indent_needed, p);
        }
        else if (!strncmp(p, "${association}", 14)) {
            p += 14;

            UmlClassMember * m;

            if ((((m = getOf()) != 0) || ((m = setOf()) != 0)) &&
                (m->kind() == aRelation)) {
                if (indent_needed) {
                    indent_needed = FALSE;
                    f << indent;
                }

                UmlClass::write(f, ((UmlRelation *) m)->association());
            }
        }
        else if (!strncmp(p, "${type}", 7)) {
            p += 7;

            const UmlTypeSpec & t = returnType();

            if ((t.type != 0) || !t.explicit_type.isEmpty()) {
                f << " -> ";

                UmlClass::write(f, t);
            }
        }
        else {
            // strange
            if (indent_needed) {
                indent_needed = FALSE;
                f << indent;
            }

            f << *p++;
        }
    }

    if (isinline) {
        if (indent_needed)
            f << indent << '\n';
        else
            f << '\n';

        indent_needed = TRUE;
    }
}
示例#21
0
QVariantMap simulatorCache(int i, QIODevice *connection,
	const QSqlDatabase& db, const QSqlDatabase& user_db,
	const QVariantMap& action, const QString& email)
{
	Q_UNUSED(email);
	Q_UNUSED(user_db);
	Q_UNUSED(connection);

	QVariantMap map;

	// Check for the 'lang' paramater
	if( !action.contains("lang") )
		return param_error(tr("simulator_cache action"), tr("lang"),
			tr("action %1").arg(i));

	bool reload = false;
	if( action.contains("reload") )
	{
		if( !action.value("reload").canConvert(QVariant::Bool) )
			return herror("simulator_cache action", tr("reload must be a "
				"boolean value for action %1").arg(i));

		reload = action.value("reload").toBool();
	}

	QString lang = action.value("lang").toString().toLower();
	if(lang != "en" && lang != "ja")
		return herror("simulator_cache action", tr("parmater 'lang' for action "
			"%1 contains an illegal value").arg(i));

	if(simulator_cache.contains(lang) && !reload)
		return simulator_cache.value(lang);

	QString sql = "SELECT db_skills.id id, db_skills.name_{$lang} name, "
		"db_skills.icon icon, db_affinity.name_{$lang} affinity, "
		"db_expert.name_{$lang} expert, db_category.name_{$lang} category, "
		"db_skills.mp_cost mp_cost, db_skills.hp_cost hp_cost, "
		"db_skills.mag_cost mag_cost, db_action_type.name_{$lang} action_type, "
		"db_skills.desc_{$lang} desc, db_skills.class class, "
		"db_skills.rank rank, db_skills.inheritance inheritance, "
		"db_related_stat.name_{$lang} related_stat FROM db_skills LEFT JOIN "
		"db_affinity ON db_skills.affinity = db_affinity.id LEFT JOIN "
		"db_expert ON db_skills.expert = db_expert.id LEFT JOIN db_category ON "
		"db_skills.category = db_category.id LEFT JOIN db_action_type ON "
		"db_skills.action_type = db_action_type.id LEFT JOIN db_related_stat "
		"ON db_skills.related_stat = db_related_stat.id "
		"WHERE db_skills.player_only = 0 OR db_skills.player_only = 'false'";
	sql = sql.replace("{$lang}", lang);

	QSqlQuery query(db);
	if( !query.prepare(sql) )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	if( !query.exec() )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	QVariantList skills;
	while( query.next() )
	{
		QSqlRecord record = query.record();

		QVariantMap skill;
		for(int j = 0; j < record.count(); j++)
			skill[record.fieldName(j)] = record.value(j);

		skills << skill;
	}

	map["skills"] = skills;

	sql = "SELECT id, name_{$lang} name, desc_{$lang} desc FROM db_traits";
	sql = sql.replace("{$lang}", lang);

	if( !query.prepare(sql) )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	if( !query.exec() )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	QVariantList traits;
	while( query.next() )
	{
		QSqlRecord record = query.record();

		QVariantMap trait;
		for(int j = 0; j < record.count(); j++)
			trait[record.fieldName(j)] = record.value(j);

		traits << trait;
	}

	map["traits"] = traits;

	sql = "SELECT db_devils.id id, db_devils.name_{$lang} name, "
		"db_devils.icon icon, db_devils.lvl lvl, db_genus.name_{$lang} genus, "
		"db_growth_type.name_{$lang} growth_type, db_devils.lnc lnc, "
		"db_devils.hp hp, db_devils.mp mp, db_devils.mag mag, "
		"db_mashou.fusion1_desc_{$lang} mashou_desc1, "
		"db_mashou.fusion2_desc_{$lang} mashou_desc2, "
		"db_equip_type.name_{$lang} mashou_equip_type, "
		"db_devils.fusion2 fusion2, db_devils.fusion3 fusion3, "
		"db_devils.fuse_min_lvl fuse_min_lvl, db_devils.parent parent_id, "
		"db_devils.fuse_max_lvl fuse_max_lvl, db_devils.genus genus_id, "
		"db_devils.fuse_chance fuse_chance, db_devils.breath breath, "
		"db_devils.wing wing, db_devils.pierce pierce, db_devils.fang fang, "
		"db_devils.claw claw, db_devils.needle needle, db_devils.sword sword, "
		"db_devils.strange strange, db_devils.eye eye, db_devils.notes notes, "
		"db_devils.fusion_cost fuse_cost, db_devils.mashou_gem mashou_gem "
		"FROM db_devils LEFT JOIN db_genus ON db_devils.genus = db_genus.id "
		"LEFT JOIN db_growth_type ON db_devils.growth = db_growth_type.id "
		"LEFT JOIN db_mashou ON db_devils.mashou = db_mashou.id LEFT JOIN "
		"db_equip_type ON db_mashou.equip_type = db_equip_type.id ORDER BY "
		"db_devils.genus, db_devils.lvl";
	sql = sql.replace("{$lang}", lang);

	if( !query.prepare(sql) )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	if( !query.exec() )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	QVariantList devils;
	while( query.next() )
	{
		QSqlRecord record = query.record();

		QVariantMap devil;
		for(int j = 0; j < record.count(); j++)
			devil[record.fieldName(j)] = record.value(j);

		sql = "SELECT skill, lvl FROM db_devil_skills WHERE devil = :devil";

		QSqlQuery query2(db);
		if( !query2.prepare(sql) )
			return herror_sql(db, "simulator_cache action", tr("SQL error for "
				"action %1: %2").arg(i).arg( query2.lastError().text() ));

		query2.bindValue(":devil", devil.value("id"), QSql::In);

		if( !query2.exec() )
			return herror_sql(db, "simulator_cache action", tr("SQL error for "
				"action %1: %2").arg(i).arg( query2.lastError().text() ));

		QVariantList devil_skills;
		while( query2.next() )
		{
			QSqlRecord record2 = query2.record();

			QVariantMap devil_skill;
			for(int j = 0; j < record2.count(); j++)
				devil_skill[record2.fieldName(j)] = record2.value(j);

			devil_skills << devil_skill;
		}

		devil["skills"] = devil_skills;

		sql = "SELECT trait FROM db_devil_traits WHERE devil = :devil";

		if( !query2.prepare(sql) )
			return herror_sql(db, "simulator_cache action", tr("SQL error for "
				"action %1: %2").arg(i).arg( query2.lastError().text() ));

		query2.bindValue(":devil", devil.value("id"), QSql::In);

		if( !query2.exec() )
			return herror_sql(db, "simulator_cache action", tr("SQL error for "
				"action %1: %2").arg(i).arg( query2.lastError().text() ));

		QVariantList devil_traits;
		while( query2.next() )
			devil_traits << query2.value(0);

		devil["traits"] = devil_traits;

		devils << devil;
	}

	map["devils"] = devils;


	sql = "SELECT id, name_ja FROM db_genus";

	if( !query.prepare(sql) )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	if( !query.exec() )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	QVariantMap genus;
	while( query.next() )
		genus[query.value(1).toString()] = query.value(0);

	map["genus"] = genus;

	Q_ASSERT( genus.contains(QString::fromUtf8("精霊")) );

	sql = "SELECT id, name_ja FROM db_devils WHERE genus = :genus";

	if( !query.prepare(sql) )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	query.bindValue(":genus", genus.value(QString::fromUtf8("精霊")), QSql::In);

	if( !query.exec() )
		return herror_sql(db, "simulator_cache action", tr("SQL error for "
			"action %1: %2").arg(i).arg( query.lastError().text() ));

	QVariantMap seirei;
	while( query.next() )
		seirei[query.value(1).toString()] = query.value(0);

	map["seirei"] = seirei;

	// Update the cache
	simulator_cache[lang] = map;

	return map;
}
示例#22
0
void UmlOperation::generate(QTextStream & f, const WrapperStr & cl_stereotype,
                            WrapperStr indent, int &)
{
    if (!phpDecl().isEmpty()) {
        const char * p = phpDecl();
        const char * pp = 0;
        const char * afterparam = 0;
        const Q3ValueList<UmlParameter> & params = this->params();
        unsigned rank;
        const char * body_indent = strstr(p, "${body}");

        if (body_indent != 0) {
            while ((body_indent != p) &&
                   ((body_indent[-1] == ' ') || (body_indent[-1] == '\t')))
                body_indent -= 1;
        }

        // manage old style indent
        while ((*p == ' ') || (*p == '\t'))
            indent += *p++;

        f << indent;

        for (;;) {
            if (*p == 0) {
                if (pp == 0)
                    break;

                // comment management done
                p = pp;
                pp = 0;

                if (*p == 0)
                    break;

                f << indent;
            }

            if (*p == '\n') {
                f << *p++;

                if (p == body_indent)
                    p = generate_body(f, indent, p);
                else if (*p)
                    f << indent;
            }
            else if (*p == '{') {
                if (isAbstract() || (cl_stereotype == "interface")) {
                    f << ";";
                    break;
                }
                else {
                    f << '{';
                    p += 1;
                }
            }
            else if (*p == '@')
                manage_alias(p, f);
            else if (*p != '$') {
                if (p == body_indent)
                    p = generate_body(f, indent, p);
                else
                    f << *p++;
            }
            else if (!strncmp(p, "${comment}", 10))
                manage_comment(p, pp, PhpSettings::isGenerateJavadocStyleComment());
            else if (!strncmp(p, "${description}", 14))
                manage_description(p, pp);
            else if (!strncmp(p, "${visibility}", 13)) {
                p += 13;
                generate_visibility(f);
            }
            else if (!strncmp(p, "${final}", 8)) {
                p += 8;

                if (isPhpFinal())
                    f << "final ";
            }
            else if (!strncmp(p, "${static}", 9)) {
                p += 9;

                if (isClassMember())
                    f << "static ";
            }
            else if (!strncmp(p, "${abstract}", 11)) {
                p += 11;

                if (isAbstract() && (cl_stereotype != "interface"))
                    f << "abstract ";
            }
            else if (!strncmp(p, "${name}", 7)) {
                p += 7;
                f << compute_name();
            }
            else if (!strncmp(p, "${(}", 4)) {
                p += 4;
                f << '(';
            }
            else if (!strncmp(p, "${)}", 4)) {
                p += 4;
                f << ')';
                afterparam = p;
            }
            else if (sscanf(p, "${t%u}", &rank) == 1) {
                if (!generate_type(params, rank, f))
                    param_error(parent()->name(), name(), rank);

                p = strchr(p, '}') + 1;
            }
            else if (sscanf(p, "${p%u}", &rank) == 1) {
                if (!generate_var(params, rank, f))
                    param_error(parent()->name(), name(), rank);

                p = strchr(p, '}') + 1;
            }
            else if (sscanf(p, "${v%u}", &rank) == 1) {
                if (!generate_init(params, rank, f))
                    param_error(parent()->name(), name(), rank);

                p = strchr(p, '}') + 1;
            }
            else if (!strncmp(p, "${staticnl}", 11)) {
                p += 11;

                if (isClassMember()) {
                    f << '\n';

                    if (*p)
                        f << indent;
                }
                else
                    f << ' ';
            }
            else if (!strncmp(p, "${body}", 7) &&
                     (pp == 0))	// not in comment
                p = generate_body(f, indent, p);
            else if (!strncmp(p, "${type}", 7)) {
                p += 7;
                UmlClass::write(f, returnType());
            }
            else
                f << *p++;
        }

        f << '\n';
    }
}
示例#23
0
void UmlOperation::generate(QTextStream & f, const WrapperStr & cl_stereotype,
                            WrapperStr indent)
{
    if (!javaDecl().isEmpty()) {
        const char * p = javaDecl();
        const char * pp = 0;
        const char * afterparam = 0;
        const Q3ValueList<UmlParameter> & params = this->params();
        unsigned rank;
        const char * body_indent = strstr(p, "${body}");

        if (body_indent != 0) {
            while ((body_indent != p) &&
                   ((body_indent[-1] == ' ') || (body_indent[-1] == '\t')))
                body_indent -= 1;
        }

        // manage old style indent
        while ((*p == ' ') || (*p == '\t'))
            indent += *p++;

        f << indent;

        for (;;) {
            if (*p == 0) {
                if (pp == 0)
                    break;

                // comment management done
                p = pp;
                pp = 0;

                if (*p == 0)
                    break;

                f << indent;
            }

            if (*p == '\n') {
                f << *p++;

                if (p == body_indent)
                    p = generate_body(f, indent, p);
                else if (*p)
                    f << indent;
            }
            else if (*p == '{') {
                if (afterparam != 0) {
                    if (cl_stereotype == "@interface") {
                        if (strstr(afterparam, "default") != 0)
                            afterparam = 0;
                        else {
                            f << ";";
                            p = bypass_body(p);
                            continue;
                        }
                    }
                    else if (isAbstract() || (cl_stereotype == "interface")) {
                        f << ";";
                        p = bypass_body(p);
                        continue;
                    }
                }

                f << '{';
                p += 1;
            }
            else if (*p == '@')
                manage_alias(p, f);
            else if (*p != '$') {
                if (p == body_indent)
                    p = generate_body(f, indent, p);
                else
                    f << *p++;
            }
            else if (!strncmp(p, "${comment}", 10))
                manage_comment(p, pp, JavaSettings::isGenerateJavadocStyleComment());
            else if (!strncmp(p, "${description}", 14))
                manage_description(p, pp);
            else if (!strncmp(p, "${visibility}", 13)) {
                p += 13;
                generate_visibility(f, cl_stereotype);
            }
            else if (!strncmp(p, "${final}", 8)) {
                p += 8;

                if (isJavaFinal())
                    f << "final ";
            }
            else if (!strncmp(p, "${static}", 9)) {
                p += 9;

                if (isClassMember())
                    f << "static ";
            }
            else if (!strncmp(p, "${abstract}", 11)) {
                p += 11;

                if (isAbstract() &&
                    (cl_stereotype != "interface") &&
                    (cl_stereotype != "@interface"))
                    f << "abstract ";
            }
            else if (!strncmp(p, "${synchronized}", 15)) {
                p += 15;

                if (isJavaSynchronized())
                    f << "synchronized ";
            }
            else if (!strncmp(p, "${type}", 7)) {
                p += 7;
                UmlClass::write(f, returnType());
            }
            else if (!strncmp(p, "${stereotype}", 13)) {
                p += 13;
                // get/set relation with multiplicity > 1
                f << JavaSettings::relationAttributeStereotype(stereotype());
            }
            else if (!strncmp(p, "${name}", 7)) {
                p += 7;
                f << compute_name();
            }
            else if (!strncmp(p, "${(}", 4)) {
                p += 4;
                f << '(';
            }
            else if (!strncmp(p, "${)}", 4)) {
                p += 4;
                f << ')';
                afterparam = p;
            }
            else if (sscanf(p, "${t%u}", &rank) == 1) {
                if (!generate_type(params, rank, f))
                    param_error(parent()->name(), name(), rank);

                p = strchr(p, '}') + 1;
            }
            else if (sscanf(p, "${p%u}", &rank) == 1) {
                if (!generate_var(params, rank, f))
                    param_error(parent()->name(), name(), rank);

                p = strchr(p, '}') + 1;
            }
            else if (!strncmp(p, "${throws}", 9)) {
                p += 9;
                const char * sep;
                const Q3ValueList<UmlTypeSpec> & exceptions = this->exceptions();
                Q3ValueList<UmlTypeSpec>::ConstIterator it;

                for (it = exceptions.begin(), sep = " throws ";
                     it != exceptions.end();
                     ++it, sep = ", ") {
                    f << sep;
                    UmlClass::write(f, *it);
                }
            }
            else if (!strncmp(p, "${staticnl}", 11)) {
                p += 11;

                if (isClassMember()) {
                    f << '\n';

                    if (*p)
                        f << indent;
                }
                else
                    f << ' ';
            }
            else if (!strncmp(p, "${body}", 7) &&
                     (pp == 0))	// not in comment
                p = generate_body(f, indent, p);
            else if (!strncmp(p, "${association}", 14)) {
                p += 14;

                UmlClassMember * m;

                if (((m = getOf()) != 0) && (m->kind() == aRelation))
                    UmlClass::write(f, ((UmlRelation *) m)->association());
                else if (((m = setOf()) != 0) && (m->kind() == aRelation))
                    UmlClass::write(f, ((UmlRelation *) m)->association());
            }
            else if (!strncmp(p, "${@}", 4)) {
                p += 4;

                if (pp != 0)
                    f << "${@}";
                else if (! javaAnnotations().isEmpty()) {
                    pp = p;
                    p = javaAnnotations();
                }
            }
            else
                f << *p++;
        }

        f << '\n';
    }
}
示例#24
0
文件: tcppipe.c 项目: jobovy/nemo
int main(int argc, char *argv[]) {
    struct option longopts[] = {
        { "listen",	no_argument,		NULL,	'l' },
        { "connect",	no_argument,		NULL,	'c' },
        { "send",	no_argument,		NULL,	's' },
        { "receive",	no_argument,		NULL,	'r' },
        { "port",	required_argument,	NULL,	'p' },
        { "buffer",	required_argument,	NULL,	'b' },
        { "help",	no_argument,		NULL,	'h' },
        { "version",	no_argument,		NULL,	'V' },
        { NULL, 0, NULL, 0 }
    };
    int opt;
    enum { LISTEN=1, CONNECT } mode = 0;
    enum { SEND=1, RECEIVE } direction = 0;
    int port = 0;
    int buffer_size = 0;
    char *rhost = NULL;
    int sock;

    argv0=argv[0];

    while ((opt=getopt_long(argc, argv, "-lcsrp:b:hV", longopts, NULL)) != -1) {
        switch (opt) {
            char *tailptr;
        case 'l':
            if (mode==0) mode=LISTEN;
            else param_error(NULL);
            break;
        case 'c':
            if (mode==0) mode=CONNECT;
            else param_error(NULL);
            break;
        case 's':
            if (direction==0) direction=SEND;
            else param_error(NULL);
            break;
        case 'r':
            if (direction==0) direction=RECEIVE;
            else param_error(NULL);
            break;
        case 'p':
            if (port==0) {
                errno=0;
                port = strtol(optarg, &tailptr, 0);
                if (errno || *tailptr!=0) param_error(NULL);
            }
            else param_error(NULL);
            break;
        case 'b':
            if (buffer_size==0) {
                errno=0;
                buffer_size = strtol(optarg, &tailptr, 0);
                if (errno || *tailptr!=0) param_error(NULL);
            }
            else param_error(NULL);
            break;
        case 'h':
            print_usage();
            break;
        case 'V':
            print_version();
            break;
        case 1:
            if (rhost==NULL) rhost=optarg;
            else param_error(NULL);
            break;
        case '?':
            param_error("");
            break;
        default:
            oops();
            break;
        }
    }
    if (mode==0) param_error(NULL);
    if (direction==0) direction = mode==LISTEN ? SEND : RECEIVE;
    if (port==0) param_error(NULL);
    if (port<0 || port>65535) param_error(NULL);
    if (buffer_size==0) buffer_size = DEFAULT_BUFFER_SIZE;
    if (buffer_size<0) param_error(NULL);
    if (mode==CONNECT && rhost==NULL) param_error(NULL);

    switch (mode) {
    case LISTEN:
        sock = do_listen(port, rhost);
        break;
    case CONNECT:
        sock = do_connect(port, rhost);
        break;
    default:
        oops();
        break;
    }
    switch (direction) {
    case SEND:
        do_transfer(STDIN_FILENO, sock, buffer_size);
        break;
    case RECEIVE:
        do_transfer(sock, STDOUT_FILENO, buffer_size);
        break;
    default:
        oops();
        break;
    }
    return 0;
}