diff options
Diffstat (limited to 'unix/dltest/pkgb.c')
| -rw-r--r-- | unix/dltest/pkgb.c | 126 | 
1 files changed, 76 insertions, 50 deletions
| diff --git a/unix/dltest/pkgb.c b/unix/dltest/pkgb.c index 2f64dd0..f102496 100644 --- a/unix/dltest/pkgb.c +++ b/unix/dltest/pkgb.c @@ -1,35 +1,37 @@ -/*  +/*   * pkgb.c --   * - *	This file contains a simple Tcl package "pkgb" that is intended - *	for testing the Tcl dynamic loading facilities.	 It can be used - *	in both safe and unsafe interpreters. + *	This file contains a simple Tcl package "pkgb" that is intended for + *	testing the Tcl dynamic loading facilities. It can be used in both + *	safe and unsafe interpreters.   *   * Copyright (c) 1995 Sun Microsystems, Inc.   * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * RCS: @(#) $Id: pkgb.c,v 1.5 2003/03/26 20:02:18 dgp Exp $ + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES.   */ + +#undef STATIC_BUILD  #include "tcl.h"  /*   * Prototypes for procedures defined later in this file:   */ -static int    Pkgb_SubObjCmd _ANSI_ARGS_((ClientData clientData, -		Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[])); -static int    Pkgb_UnsafeObjCmd _ANSI_ARGS_((ClientData clientData, -		Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[])); +static int    Pkgb_SubObjCmd(ClientData clientData, +		Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); +static int    Pkgb_UnsafeObjCmd(ClientData clientData, +		Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); +static int    Pkgb_DemoObjCmd(ClientData clientData, +		Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);  /*   *----------------------------------------------------------------------   *   * Pkgb_SubObjCmd --   * - *	This procedure is invoked to process the "pkgb_sub" Tcl command. - *	It expects two arguments and returns their difference. + *	This procedure is invoked to process the "pkgb_sub" Tcl command. It + *	expects two arguments and returns their difference.   *   * Results:   *	A standard Tcl result. @@ -40,22 +42,29 @@ static int    Pkgb_UnsafeObjCmd _ANSI_ARGS_((ClientData clientData,   *----------------------------------------------------------------------   */ +#ifndef Tcl_GetErrorLine +#   define Tcl_GetErrorLine(interp) ((interp)->errorLine) +#endif +  static int -Pkgb_SubObjCmd(dummy, interp, objc, objv) -    ClientData dummy;		/* Not used. */ -    Tcl_Interp *interp;		/* Current interpreter. */ -    int objc;			/* Number of arguments. */ -    Tcl_Obj * CONST objv[];	/* Argument objects. */ +Pkgb_SubObjCmd( +    ClientData dummy,		/* Not used. */ +    Tcl_Interp *interp,		/* Current interpreter. */ +    int objc,			/* Number of arguments. */ +    Tcl_Obj *const objv[])	/* Argument objects. */  {      int first, second;      if (objc != 3) {  	Tcl_WrongNumArgs(interp, 1, objv, "num num"); -        return TCL_ERROR; +	return TCL_ERROR;      }      if ((Tcl_GetIntFromObj(interp, objv[1], &first) != TCL_OK)  	    || (Tcl_GetIntFromObj(interp, objv[2], &second) != TCL_OK)) { -        return TCL_ERROR; +	char buf[TCL_INTEGER_SPACE]; +	sprintf(buf, "%d", Tcl_GetErrorLine(interp)); +	Tcl_AppendResult(interp, " in line: ", buf, NULL); +	return TCL_ERROR;      }      Tcl_SetObjResult(interp, Tcl_NewIntObj(first - second));      return TCL_OK; @@ -66,8 +75,8 @@ Pkgb_SubObjCmd(dummy, interp, objc, objv)   *   * Pkgb_UnsafeObjCmd --   * - *	This procedure is invoked to process the "pkgb_unsafe" Tcl command. - *	It just returns a constant string. + *	This procedure is invoked to process the "pkgb_unsafe" Tcl command. It + *	just returns a constant string.   *   * Results:   *	A standard Tcl result. @@ -79,13 +88,32 @@ Pkgb_SubObjCmd(dummy, interp, objc, objv)   */  static int -Pkgb_UnsafeObjCmd(dummy, interp, objc, objv) -    ClientData dummy;		/* Not used. */ -    Tcl_Interp *interp;		/* Current interpreter. */ -    int objc;			/* Number of arguments. */ -    Tcl_Obj * CONST objv[];	/* Argument objects. */ +Pkgb_UnsafeObjCmd( +    ClientData dummy,		/* Not used. */ +    Tcl_Interp *interp,		/* Current interpreter. */ +    int objc,			/* Number of arguments. */ +    Tcl_Obj *const objv[])	/* Argument objects. */  { -    Tcl_SetObjResult(interp, Tcl_NewStringObj("unsafe command invoked", -1)); +    return Tcl_EvalEx(interp, "list unsafe command invoked", -1, TCL_EVAL_GLOBAL); +} + +static int +Pkgb_DemoObjCmd( +    ClientData dummy,		/* Not used. */ +    Tcl_Interp *interp,		/* Current interpreter. */ +    int objc,			/* Number of arguments. */ +    Tcl_Obj *const objv[])	/* Argument objects. */ +{ +#if (TCL_MAJOR_VERSION > 8) || (TCL_MINOR_VERSION > 4) +    Tcl_Obj *first; + +    if (Tcl_ListObjIndex(NULL, Tcl_GetEncodingSearchPath(), 0, &first) +	    == TCL_OK) { +	Tcl_SetObjResult(interp, first); +    } +#else +    Tcl_SetObjResult(interp, Tcl_NewStringObj(Tcl_GetDefaultEncodingDir(), -1)); +#endif      return TCL_OK;  } @@ -94,8 +122,8 @@ Pkgb_UnsafeObjCmd(dummy, interp, objc, objv)   *   * Pkgb_Init --   * - *	This is a package initialization procedure, which is called - *	by Tcl when this package is to be added to an interpreter. + *	This is a package initialization procedure, which is called by Tcl + *	when this package is to be added to an interpreter.   *   * Results:   *	None. @@ -106,24 +134,23 @@ Pkgb_UnsafeObjCmd(dummy, interp, objc, objv)   *----------------------------------------------------------------------   */ -int -Pkgb_Init(interp) -    Tcl_Interp *interp;		/* Interpreter in which the package is -				 * to be made available. */ +DLLEXPORT int +Pkgb_Init( +    Tcl_Interp *interp)		/* Interpreter in which the package is to be +				 * made available. */  {      int code; -    if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { +    if (Tcl_InitStubs(interp, "8.5-", 0) == NULL) {  	return TCL_ERROR;      }      code = Tcl_PkgProvide(interp, "Pkgb", "2.3");      if (code != TCL_OK) {  	return code;      } -    Tcl_CreateObjCommand(interp, "pkgb_sub", Pkgb_SubObjCmd, -	    (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); -    Tcl_CreateObjCommand(interp, "pkgb_unsafe", Pkgb_UnsafeObjCmd, -	    (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); +    Tcl_CreateObjCommand(interp, "pkgb_sub", Pkgb_SubObjCmd, NULL, NULL); +    Tcl_CreateObjCommand(interp, "pkgb_unsafe", Pkgb_UnsafeObjCmd, NULL, NULL); +    Tcl_CreateObjCommand(interp, "pkgb_demo", Pkgb_DemoObjCmd, NULL, NULL);      return TCL_OK;  } @@ -132,8 +159,8 @@ Pkgb_Init(interp)   *   * Pkgb_SafeInit --   * - *	This is a package initialization procedure, which is called - *	by Tcl when this package is to be added to an unsafe interpreter. + *	This is a package initialization procedure, which is called by Tcl + *	when this package is to be added to a safe interpreter.   *   * Results:   *	None. @@ -144,21 +171,20 @@ Pkgb_Init(interp)   *----------------------------------------------------------------------   */ -int -Pkgb_SafeInit(interp) -    Tcl_Interp *interp;		/* Interpreter in which the package is -				 * to be made available. */ +DLLEXPORT int +Pkgb_SafeInit( +    Tcl_Interp *interp)		/* Interpreter in which the package is to be +				 * made available. */  {      int code; -    if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { +    if (Tcl_InitStubs(interp, "8.5-", 0) == NULL) {  	return TCL_ERROR;      }      code = Tcl_PkgProvide(interp, "Pkgb", "2.3");      if (code != TCL_OK) { -      return code; +	return code;      } -    Tcl_CreateObjCommand(interp, "pkgb_sub", Pkgb_SubObjCmd, (ClientData) 0, -	    (Tcl_CmdDeleteProc *) NULL); +    Tcl_CreateObjCommand(interp, "pkgb_sub", Pkgb_SubObjCmd, NULL, NULL);      return TCL_OK;  } | 
