Authored by [Lino Monaco]. /* Binary Buffer Reverse Lino Monaco - 16 March 2007 Just a little extension example using a Windows DLL. Compile and link declaring USE_TCL_STUBS simbol and including tclstub84.lib. load ./bytereverse.dll bytereverse bytepattern It can be loaded and used with tclkit too */ #include int reverse_ObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int len, p1, p2; unsigned char *buffPtr, ch; Tcl_Obj * resultPtr; /* Check input parameters */ if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "binary_buffer_to_reverse"); return TCL_ERROR; } /* get input byte array ... */ buffPtr = Tcl_GetByteArrayFromObj(objv[1], &len); if (len == 0) { return TCL_ERROR; } /* ... and reverse it */ p1 = 0; p2 = len -1; while (p1 < p2) { ch = buffPtr[p1]; buffPtr[p1] = buffPtr[p2]; buffPtr[p2] = ch; p1++; p2--; } /* return revesed buffer */ resultPtr = Tcl_GetObjResult(interp); Tcl_SetByteArrayObj(resultPtr, buffPtr, len); return TCL_OK; } int pattern_ObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int buffLen, outLen, len; int i, j; unsigned char *buffPtr; unsigned char *outPtr; Tcl_Obj * resultPtr; /* Check Input parameters */ if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "binary_buffer_to_repeat repeat_number"); return TCL_ERROR; } /* get first input parameter */ buffPtr = Tcl_GetByteArrayFromObj(objv[1], &buffLen); if (buffLen == 0) { return TCL_ERROR; } /* get second input parameter */ if (Tcl_GetIntFromObj(interp, objv[2], &len) != TCL_OK) { return TCL_ERROR; } /* set output buffer length */ resultPtr = Tcl_GetObjResult(interp); outLen = len*buffLen; outPtr = Tcl_SetByteArrayLength(resultPtr, outLen); /* fill output buffer */ for(i=0; i