Posted to tcl by de at Sat Apr 01 00:02:10 GMT 2023view pretty
#include <tcl.h>
#if defined(Tcl_Size)
# define domLength Tcl_Size
# define STUB_VERSION "8.6"
#else
# define domLength int
# define STUB_VERSION "9"
#endif
static int rdeCmd(
void *clientData,
Tcl_Interp *interp,
int objc,
Tcl_Obj *const objv[]
)
{
/* With:
Tcl_Size len;
or
size_t len;
this would work as expected. */
domLength len;
if (objc != 2) {
Tcl_WrongNumArgs (interp, 1, objv, "string");
return TCL_ERROR;
}
Tcl_GetStringFromObj (objv[1], &len);
Tcl_SetObjResult (interp, Tcl_NewWideIntObj(len));
return TCL_OK;
}
int Rde_Init(Tcl_Interp *interp) {
if (Tcl_InitStubs(interp, STUB_VERSION, 0) == NULL) {
return TCL_ERROR;
}
Tcl_CreateObjCommand(interp, "rde", rdeCmd, NULL, NULL);
return TCL_OK;
}
/*
Build with a sh script as:
TCL=/usr/local/tcl/9
rm -f rde.o rde.so
gcc -DUSE_TCL_STUBS -I${TCL}/include -fPIC -o rde.o -c rde.c
gcc -L${TCL}/lib -shared -o rde.so rde.o -ltclstub9.0
Test script:
load ./rde.so
puts [rde [string repeat abc 1000000000]]
*/