Posted to tcl by lmcvoy at Mon Nov 05 22:13:55 GMT 2007view raw
- ===== generic/tclBasic.c 1.204 vs edited =====
- --- 1.204/generic/tclBasic.c 2007-10-17 11:24:46 -07:00
- +++ edited/generic/tclBasic.c 2007-11-02 08:07:04 -07:00
- @@ -193,6 +193,10 @@ static const CmdInfo builtInCmds[] = {
- {"L", Tcl_LObjCmd, TclCompileLCmd, 1},
- {"pointer", Tcl_PointerObjCmd, TclCompilePointerCmd, 1},
- + {"fopen", TclFopenObjCmd, NULL, 1},
- + {"fread", TclFreadObjCmd, NULL, 1},
- + {"fgetline", TclFgetlineObjCmd, NULL, 1},
- + {"fputs", TclFputsObjCmd, NULL, 1},
- /*
- * Commands in the UNIX core:
- */
- ===== generic/tclCmdIL.c 1.98 vs edited =====
- --- 1.98/generic/tclCmdIL.c 2007-10-17 12:19:58 -07:00
- +++ edited/generic/tclCmdIL.c 2007-11-02 08:07:04 -07:00
- @@ -1,3 +1,4 @@
- +#define INFO_BODY_ENABLED
- /*
- * tclCmdIL.c --
- *
- ===== generic/tclIOCmd.c 1.44 vs edited =====
- --- 1.44/generic/tclIOCmd.c 2007-10-15 14:27:48 -07:00
- +++ edited/generic/tclIOCmd.c 2007-11-02 08:07:04 -07:00
- @@ -1778,11 +1778,130 @@ TclChanTruncateObjCmd(
- return TCL_OK;
- }
- -/*
- - * Local Variables:
- - * mode: c
- - * c-basic-offset: 4
- - * fill-column: 78
- - * End:
- - */
- +int
- +TclFopenObjCmd(
- + ClientData dummy, /* Not used. */
- + Tcl_Interp *interp, /* Current interpreter. */
- + int objc, /* Number of arguments. */
- + Tcl_Obj *const objv[]) /* Argument objects. */
- +{
- + char *mode = "r";
- + char *fileName;
- + char buf[100];
- + FILE *f;
- + if ((objc < 2) || (objc > 3)) {
- + Tcl_WrongNumArgs(interp, 1, objv, "fileName ?mode?");
- + return TCL_ERROR;
- + }
- + fileName = Tcl_GetString(objv[1]);
- + if (objc == 3) mode = Tcl_GetString(objv[2]);
- + if ((f = fopen(fileName, mode)) == NULL) {
- + Tcl_AppendResult(interp,
- + "could not open file \"", fileName, "\"", NULL);
- + return TCL_ERROR;
- + }
- + sprintf(buf, "%p", f);
- + Tcl_SetStringObj(Tcl_GetObjResult(interp), buf, -1);
- + return TCL_OK;
- +}
- +
- +int
- +chomp(char *s)
- +{
- + int any = 0;
- + char *p;
- +
- + p = s + strlen(s);
- + while ((p > s) && ((p[-1] == '\n') || (p[-1] == '\r'))) --p, any = 1;
- + *p = 0;
- + return (any);
- +}
- +
- +int
- +TclFgetlineObjCmd(
- + ClientData dummy, /* Not used. */
- + Tcl_Interp *interp, /* Current interpreter. */
- + int objc, /* Number of arguments. */
- + Tcl_Obj *const objv[]) /* Argument objects. */
- +{
- + FILE *f;
- + char buf[2048];
- +
- + if (objc != 3) {
- + Tcl_WrongNumArgs(interp, 1, objv, "fileHandle varName");
- + return TCL_ERROR;
- + }
- + sscanf(Tcl_GetString(objv[1]), "%p", &f);
- + buf[0] = 0;
- + if (fgets(buf, sizeof(buf), f)) {
- + int len = (int) strlen(buf);
- + Tcl_Obj *objPtr = Tcl_NewObj();
- + /* chomp with known length */
- + while (len && ((buf[len-1] == '\n') || (buf[len-1] == '\r'))) len--;
- + Tcl_SetStringObj(objPtr, buf, len);
- + Tcl_ObjSetVar2(interp, objv[2], NULL, objPtr, 0);
- + Tcl_SetObjResult(interp, Tcl_NewIntObj(len));
- + } else {
- + Tcl_SetObjResult(interp, Tcl_NewIntObj(-1));
- + }
- + return TCL_OK;
- +}
- +
- +
- +int
- +TclFputsObjCmd(
- + ClientData dummy, /* Not used. */
- + Tcl_Interp *interp, /* Current interpreter. */
- + int objc, /* Number of arguments. */
- + Tcl_Obj *const objv[]) /* Argument objects. */
- +{
- + FILE *f;
- +
- + if (objc != 3) {
- + Tcl_WrongNumArgs(interp, 1, objv, "fileHandle varName");
- + return TCL_ERROR;
- + }
- + sscanf(Tcl_GetString(objv[1]), "%p", &f);
- + if (fputs(Tcl_GetString(objv[2]), f) == EOF) {
- + Tcl_SetObjResult(interp, Tcl_NewIntObj(-1));
- + } else {
- + Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
- + }
- + return TCL_OK;
- +}
- +
- +int
- +TclFreadObjCmd(
- + ClientData dummy, /* Not used. */
- + Tcl_Interp *interp, /* Current interpreter. */
- + int objc, /* Number of arguments. */
- + Tcl_Obj *const objv[]) /* Argument objects. */
- +{
- + int nBytes = 1024;
- + FILE *f;
- + char buf[1024];
- + Tcl_Obj *resultObj = Tcl_GetObjResult(interp);
- +
- + if ((objc < 2) || (objc > 3)) {
- + Tcl_WrongNumArgs(interp, 1, objv, "fileHandle ?bytesToRead?");
- + return TCL_ERROR;
- + }
- +
- + sscanf(Tcl_GetString(objv[1]), "%p", &f);
- +
- + if (objc == 3) {
- + if (Tcl_GetIntFromObj(interp, objv[2], &nBytes) == TCL_ERROR) {
- + return TCL_ERROR;
- + }
- + }
- +
- + if (nBytes == -1) {
- +
- + } else {
- + fread( &buf, 1, 1024, f);
- + Tcl_SetByteArrayObj(resultObj, buf, nBytes);
- + }
- +
- + return TCL_OK;
- +}
- ===== generic/tclInt.h 1.282 vs edited =====
- --- 1.282/generic/tclInt.h 2007-10-17 11:24:47 -07:00
- +++ edited/generic/tclInt.h 2007-11-02 08:07:04 -07:00
- @@ -2845,6 +2845,18 @@ MODULE_SCOPE int Tcl_LObjCmd(ClientData
- MODULE_SCOPE int Tcl_PointerObjCmd(ClientData clientData,
- Tcl_Interp *interp, int objc,
- Tcl_Obj *CONST objv[]);
- +MODULE_SCOPE int TclFopenObjCmd(ClientData clientData,
- + Tcl_Interp *interp, int objc,
- + Tcl_Obj *CONST objv[]);
- +MODULE_SCOPE int TclFreadObjCmd(ClientData clientData,
- + Tcl_Interp *interp, int objc,
- + Tcl_Obj *CONST objv[]);
- +MODULE_SCOPE int TclFgetlineObjCmd(ClientData clientData,
- + Tcl_Interp *interp, int objc,
- + Tcl_Obj *CONST objv[]);
- +MODULE_SCOPE int TclFputsObjCmd(ClientData clientData,
- + Tcl_Interp *interp, int objc,
- + Tcl_Obj *CONST objv[]);