Posted to tcl by de at Sat Apr 01 00:02:10 GMT 2023view raw
- #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]]
- */