Ejemplo n.º 1
0
int Jim_GetOpt_Enum(Jim_GetOptInfo *goi, const char *const *lookup, int *puthere)
{
    int _safe;
    Jim_Obj *o;
    int e;

    if (puthere == NULL)
        puthere = &_safe;
    e = Jim_GetOpt_Obj(goi, &o);
    if (e == JIM_OK)
        e = Jim_GetEnum(goi->interp, o, lookup, puthere, "option", JIM_ERRMSG);
    return e;
}
Ejemplo n.º 2
0
int Jim_GetOpt_Wide(Jim_GetOptInfo *goi, jim_wide *puthere)
{
    int r;
    Jim_Obj *o;
    jim_wide _safe;

    if (puthere == NULL)
        puthere = &_safe;

    r = Jim_GetOpt_Obj(goi, &o);
    if (r == JIM_OK)
        r = Jim_GetWide(goi->interp, o, puthere);
    return r;
}
Ejemplo n.º 3
0
int Jim_GetOpt_Nvp(Jim_GetOptInfo *goi, const Jim_Nvp *nvp, Jim_Nvp **puthere)
{
    Jim_Nvp *_safe;
    Jim_Obj *o;
    int e;

    if (puthere == NULL)
        puthere = &_safe;

    e = Jim_GetOpt_Obj(goi, &o);
    if (e == JIM_OK)
        e = Jim_Nvp_name2value_obj(goi->interp, nvp, o, puthere);

    return e;
}
Ejemplo n.º 4
0
int Jim_GetOpt_String(Jim_GetOptInfo *goi, char **puthere, int *len)
{
    int r;
    Jim_Obj *o;
    const char *cp;

    r = Jim_GetOpt_Obj(goi, &o);
    if (r == JIM_OK) {
        cp = Jim_GetString(o, len);
        if (puthere) {
            /* remove const */
            *puthere = (char *)(cp);
        }
    }
    return r;
}
Ejemplo n.º 5
0
int Jim_GetOpt_Double(Jim_GetOptInfo *goi, double *puthere)
{
    int r;
    Jim_Obj *o;
    double _safe;

    if (puthere == NULL)
        puthere = &_safe;

    r = Jim_GetOpt_Obj(goi, &o);
    if (r == JIM_OK) {
        r = Jim_GetDouble(goi->interp, o, puthere);
        if (r != JIM_OK)
            Jim_SetResultFormatted(goi->interp, "not a number: %#s", o);
    }
    return r;
}
Ejemplo n.º 6
0
static int jtag_tap_configure_event(Jim_GetOptInfo *goi, struct jtag_tap *tap)
{
	if (goi->argc == 0) {
		Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event <event-name> ...");
		return JIM_ERR;
	}

	Jim_Nvp *n;
	int e = Jim_GetOpt_Nvp(goi, nvp_jtag_tap_event, &n);
	if (e != JIM_OK) {
		Jim_GetOpt_NvpUnknown(goi, nvp_jtag_tap_event, 1);
		return e;
	}

	if (goi->isconfigure) {
		if (goi->argc != 1) {
			Jim_WrongNumArgs(goi->interp,
				goi->argc,
				goi->argv,
				"-event <event-name> <event-body>");
			return JIM_ERR;
		}
	} else {
		if (goi->argc != 0) {
			Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event <event-name>");
			return JIM_ERR;
		}
	}

	struct jtag_tap_event_action *jteap  = tap->event_action;
	/* replace existing event body */
	bool found = false;
	while (jteap) {
		if (jteap->event == (enum jtag_event)n->value) {
			found = true;
			break;
		}
		jteap = jteap->next;
	}

	Jim_SetEmptyResult(goi->interp);

	if (goi->isconfigure) {
		if (!found)
			jteap = calloc(1, sizeof(*jteap));
		else if (NULL != jteap->body)
			Jim_DecrRefCount(goi->interp, jteap->body);

		jteap->interp = goi->interp;
		jteap->event = n->value;

		Jim_Obj *o;
		Jim_GetOpt_Obj(goi, &o);
		jteap->body = Jim_DuplicateObj(goi->interp, o);
		Jim_IncrRefCount(jteap->body);

		if (!found) {
			/* add to head of event list */
			jteap->next = tap->event_action;
			tap->event_action = jteap;
		}
	} else if (found) {
		jteap->interp = goi->interp;
		Jim_SetResult(goi->interp,
			Jim_DuplicateObj(goi->interp, jteap->body));
	}
	return JIM_OK;
}