Example #1
0
int
Tk_GetScrollInfoObj(
    Tcl_Interp *interp,		/* Used for error reporting. */
    int objc,			/* # arguments for command. */
    Tcl_Obj *const objv[],	/* Arguments for command. */
    double *dblPtr,		/* Filled in with argument "moveto" option, if
				 * any. */
    int *intPtr)		/* Filled in with number of pages or lines to
				 * scroll, if any. */
{
    const char *arg = Tcl_GetString(objv[2]);
    size_t length = objv[2]->length;

#define ArgPfxEq(str) \
	((arg[0] == str[0]) && !strncmp(arg, str, (unsigned)length))

    if (ArgPfxEq("moveto")) {
	if (objc != 4) {
	    Tcl_WrongNumArgs(interp, 2, objv, "moveto fraction");
	    return TK_SCROLL_ERROR;
	}
	if (Tcl_GetDoubleFromObj(interp, objv[3], dblPtr) != TCL_OK) {
	    return TK_SCROLL_ERROR;
	}
	return TK_SCROLL_MOVETO;
    } else if (ArgPfxEq("scroll")) {
	if (objc != 5) {
	    Tcl_WrongNumArgs(interp, 2, objv, "scroll number units|pages");
	    return TK_SCROLL_ERROR;
	}
	if (Tcl_GetIntFromObj(interp, objv[3], intPtr) != TCL_OK) {
	    return TK_SCROLL_ERROR;
	}

	arg = Tcl_GetString(objv[4]);
	length = objv[4]->length;
	if (ArgPfxEq("pages")) {
	    return TK_SCROLL_PAGES;
	} else if (ArgPfxEq("units")) {
	    return TK_SCROLL_UNITS;
	}

	Tcl_SetObjResult(interp, Tcl_ObjPrintf(
		"bad argument \"%s\": must be units or pages", arg));
	Tcl_SetErrorCode(interp, "TK", "VALUE", "SCROLL_UNITS", NULL);
	return TK_SCROLL_ERROR;
    }
    Tcl_SetObjResult(interp, Tcl_ObjPrintf(
	    "unknown option \"%s\": must be moveto or scroll", arg));
    Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "INDEX", "option", arg, NULL);
    return TK_SCROLL_ERROR;
}
Example #2
0
File: tkUtil.c Project: arazaq/ns2
int
Tk_GetScrollInfoObj(
    Tcl_Interp *interp,		/* Used for error reporting. */
    int objc,			/* # arguments for command. */
    Tcl_Obj *const objv[],	/* Arguments for command. */
    double *dblPtr,		/* Filled in with argument "moveto" option, if
				 * any. */
    int *intPtr)		/* Filled in with number of pages or lines to
				 * scroll, if any. */
{
    int length;
    const char *arg;

    arg = Tcl_GetStringFromObj(objv[2], &length);

#define ArgPfxEq(str) ((arg[0]==str[0])&&!strncmp(arg,str,(unsigned)length))

    if (ArgPfxEq("moveto")) {
        if (objc != 4) {
            Tcl_WrongNumArgs(interp, 2, objv, "moveto fraction");
            return TK_SCROLL_ERROR;
        }
        if (Tcl_GetDoubleFromObj(interp, objv[3], dblPtr) != TCL_OK) {
            return TK_SCROLL_ERROR;
        }
        return TK_SCROLL_MOVETO;
    } else if (ArgPfxEq("scroll")) {
        if (objc != 5) {
            Tcl_WrongNumArgs(interp, 2, objv, "scroll number units|pages");
            return TK_SCROLL_ERROR;
        }
        if (Tcl_GetIntFromObj(interp, objv[3], intPtr) != TCL_OK) {
            return TK_SCROLL_ERROR;
        }

        arg = Tcl_GetStringFromObj(objv[4], &length);
        if (ArgPfxEq("pages")) {
            return TK_SCROLL_PAGES;
        } else if (ArgPfxEq("units")) {
            return TK_SCROLL_UNITS;
        }

        Tcl_AppendResult(interp, "bad argument \"", arg,
                         "\": must be units or pages", NULL);
        return TK_SCROLL_ERROR;
    }
    Tcl_AppendResult(interp, "unknown option \"", arg,
                     "\": must be moveto or scroll", NULL);
    return TK_SCROLL_ERROR;
}