Posted to tcl by lm at Wed Oct 31 23:07:20 GMT 2007view raw
- 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;
- }
- ^L
- 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)) {
- chomp(buf);
- Tcl_ObjSetVar2(interp, objv[2], NULL, Tcl_NewStringObj(buf, -1), 0);
- Tcl_SetObjResult(interp, Tcl_NewIntObj(strlen(buf)));
- } else {
- Tcl_SetObjResult(interp, Tcl_NewIntObj(-1));
- }
- return TCL_OK;
- }