int main (int argc, char *argv[]) { uulist *item; int i, res; UUInitialize (); for (i=1; i<argc; i++) if ((res = UULoadFile (argv[i], NULL, 0)) != UURET_OK) fprintf (stderr, "could not load %s: %s\n", argv[i], (res==UURET_IOERR) ? strerror (UUGetOption (UUOPT_ERRNO, NULL, NULL, 0)) : UUstrerror(res)); for (i=0; (item=UUGetFileListItem(i)) != NULL; i++) { if ((item->state & UUFILE_OK) == 0) continue; if ((res = UUDecodeFile (item, NULL)) != UURET_OK) { fprintf (stderr, "error decoding %s: %s\n", (item->filename==NULL)?"oops":item->filename, (res==UURET_IOERR) ? strerror (UUGetOption (UUOPT_ERRNO, NULL, NULL, 0)) : UUstrerror(res)); } else { printf ("successfully decoded '%s'\n", item->filename); } } UUCleanUp (); return 0; }
static int UUTCLFUNC uutcl_LoadFile (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { char tmpstring[256]; int res; uutcl_UpdateParameter (interp); if (argc != 2) { sprintf (tmpstring, "wrong # args: should be \"%s filename\"", argv[0]); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } if ((res = UULoadFile (argv[1], NULL, 0)) != UURET_OK) { sprintf (tmpstring, "couldn't read %s: %s (%s)", argv[1], UUstrerror (res), (res==UURET_IOERR)? strerror(UUGetOption(UUOPT_ERRNO,NULL,NULL,0)):""); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } return TCL_OK; }
static int UUTCLFUNC uutcl_GetProgressInfo (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { uuprogress progress; char tmpstring[32]; if (UUGetOption (UUOPT_PROGRESS, NULL, (char *) &progress, sizeof (uuprogress)) != 0) { Tcl_SetResult (interp, "oops, could not get info?", TCL_STATIC); return TCL_ERROR; } sprintf (tmpstring, "%d", progress.action); Tcl_AppendElement (interp, tmpstring); Tcl_AppendElement (interp, progress.curfile); sprintf (tmpstring, "%d", progress.partno); Tcl_AppendElement (interp, tmpstring); sprintf (tmpstring, "%d", progress.numparts); Tcl_AppendElement (interp, tmpstring); sprintf (tmpstring, "%d", progress.percent); Tcl_AppendElement (interp, tmpstring); return TCL_OK; }
static int UUTCLFUNC uutcl_GetListOfFiles (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { char tmpstring[1024], t2[42]; int count=0, index=0; uulist *iter; uutcl_UpdateParameter (interp); while ((iter=UUGetFileListItem(count))) { if (((iter->state & UUFILE_OK) || UUGetOption (UUOPT_DESPERATE, NULL, NULL, 0)) && iter->filename) { sprintf (tmpstring, " { %d %d {%s} %s %s {", count, iter->state, iter->filename, (iter->mimetype)?iter->mimetype:"{}", (iter->uudet == UU_ENCODED) ? "UUdata " : (iter->uudet == B64ENCODED) ? "Base64 " : (iter->uudet == XX_ENCODED) ? "XXdata " : (iter->uudet == BH_ENCODED) ? "Binhex " : (iter->uudet == YENC_ENCODED) ? "yEnc" : "Text"); if (iter->haveparts) { sprintf (t2, "%s%s%d ", (iter->begin&&iter->begin==iter->haveparts[0])?"begin ":"", (iter->end &&iter->end == iter->haveparts[0])?"end " :"", iter->haveparts[0]); strcat (tmpstring, t2); for (index=1; iter->haveparts[index]; index++) { sprintf (t2, "%s%s%d ", (iter->begin==iter->haveparts[index]) ? "begin " : "", (iter->end == iter->haveparts[index]) ? "end " : "", iter->haveparts[index]); strcat (tmpstring, t2); } } if (iter->state & UUFILE_OK) strcat (tmpstring, "OK"); strcat (tmpstring, "} }"); Tcl_AppendResult (interp, tmpstring, NULL); } count++; } return TCL_OK; }
static int UUTCLFUNC uutcl_EncodeToFile (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { int encoding=UU_ENCODED, linperfile=0, res; char errstring[256], olddir[256]; if (argc < 3 || argc > 10) { Tcl_SetResult (interp, "wrong # args", TCL_STATIC); return TCL_ERROR; } uutcl_UpdateParameter (interp); if (uutcl_GetEncodeParams (interp, argc, argv, 7, &encoding, 6, &linperfile) != TCL_OK) return TCL_ERROR; UUGetOption (UUOPT_SAVEPATH, NULL, olddir, 256); UUSetOption (UUOPT_SAVEPATH, 0, argv[2]); if ((res = UUEncodeToFile (NULL, argv[1], encoding, (argc>3) ? argv[3] : NULL, (argc>2) ? argv[2] : NULL, linperfile)) != UURET_OK) { UUSetOption (UUOPT_SAVEPATH, 0, olddir); sprintf (errstring, "error while encoding %s to file: %s (%s)", argv[1], UUstrerror(res), (res==UURET_IOERR)? strerror(UUGetOption(UUOPT_ERRNO,NULL,NULL,0)):""); Tcl_SetResult (interp, errstring, TCL_VOLATILE); return TCL_ERROR; } UUSetOption (UUOPT_SAVEPATH, 0, olddir); return TCL_OK; }
static int UUTCLFUNC uutcl_InfoFile (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { struct uuInfoCBData data; char tmpstring[256]; uulist *iter; int res; uutcl_UpdateParameter (interp); if (argc != 3) { sprintf (tmpstring, "wrong # args: should be \"%s number textwidget\"", argv[0]); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } if ((iter = UUGetFileListItem (atoi (argv[1]))) == NULL) { Tcl_SetResult (interp, "invalid file number", TCL_STATIC); return TCL_ERROR; } sprintf (tmpstring, "%s delete 1.0 end", argv[2]); if (Tcl_Eval (interp, tmpstring) != TCL_OK) return TCL_ERROR; data.interp = interp; data.widget = argv[2]; if ((res = UUInfoFile (iter, &data, uutcl_InfoCallback)) != UURET_OK) { sprintf (tmpstring, "Error while getting info for %s (%s): %s (%s)", (iter->filename) ? iter->filename : "", (iter->subfname) ? iter->subfname : "", UUstrerror (res), (res==UURET_IOERR)? strerror(UUGetOption(UUOPT_ERRNO,NULL,NULL,0)):""); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } return TCL_OK; }
static int UUTCLFUNC uutcl_GetTempFile (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { char tmpstring[256]; uulist *iter; int res; uutcl_UpdateParameter (interp); if (argc != 2) { sprintf (tmpstring, "wrong # args: should be \"%s number\"", argv[0]); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } if ((iter = UUGetFileListItem (atoi (argv[1]))) == NULL) { Tcl_SetResult (interp, "invalid file number", TCL_STATIC); return TCL_ERROR; } if ((res = UUDecodeToTemp (iter)) != UURET_OK) { sprintf (tmpstring, "Error while decoding %s (%s): %s (%s)", (iter->filename) ? iter->filename : "", (iter->subfname) ? iter->subfname : "", UUstrerror (res), (res==UURET_IOERR)? strerror(UUGetOption(UUOPT_ERRNO,NULL,NULL,0)):""); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } if (iter->binfile == NULL) { Tcl_SetResult (interp, "unknown error while decoding", TCL_STATIC); return TCL_ERROR; } Tcl_SetResult (interp, iter->binfile, TCL_VOLATILE); return TCL_OK; }
static int UUTCLFUNC uutcl_Rename (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { char tmpstring[256]; uulist *iter; int res; uutcl_UpdateParameter (interp); if (argc != 3) { sprintf (tmpstring, "wrong # args: should be \"%s number newname\"", argv[0]); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } if (*argv[2] == '\0') { Tcl_SetResult (interp, "illegal file name", TCL_STATIC); return TCL_ERROR; } if ((iter = UUGetFileListItem (atoi (argv[1]))) == NULL) { Tcl_SetResult (interp, "invalid file number", TCL_STATIC); return TCL_ERROR; } if ((res = UURenameFile (iter, argv[2])) != UURET_OK) { sprintf (tmpstring, "could not rename %s to %s: %s (%s)", (iter->filename) ? iter->filename : "", argv[2], UUstrerror (res), (res==UURET_IOERR)? strerror(UUGetOption(UUOPT_ERRNO,NULL,NULL,0)):""); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } return TCL_OK; }
static int UUTCLFUNC uutcl_EncodeToNews (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { int encoding=UU_ENCODED, linperfile=0, res; char errstring[256]; if (argc < 3 || argc > 10) { Tcl_SetResult (interp, "wrong # args", TCL_STATIC); return TCL_ERROR; } uutcl_UpdateParameter (interp); if (uutcl_GetEncodeParams (interp, argc, argv, 7, &encoding, 6, &linperfile) != TCL_OK) return TCL_ERROR; if ((res = SendAFile (interp, NULL, argv[1], encoding, linperfile, /* outfname */ (argc>3) ? argv[3] : NULL, /* towhom */ argv[2], /* subject */ (argc>4) ? argv[4] : NULL, /* from */ (argc>8) ? argv[8] : NULL, /* replyto */ (argc>9) ? argv[9] : NULL, 0)) != UURET_OK) { /* * If res==UURET_ILLVAL, SendAMail has already filled in the result */ if (res != UURET_ILLVAL) { sprintf (errstring, "error while posting %s: %s (%s)", argv[1], UUstrerror(res), (res==UURET_IOERR)? strerror(UUGetOption(UUOPT_ERRNO,NULL,NULL,0)):""); Tcl_SetResult (interp, errstring, TCL_VOLATILE); } return TCL_ERROR; } return TCL_OK; }
static int UUTCLFUNC uutcl_ListFile (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { uulist *iter; struct uuInfoCBData data; char tmpstring[1024]; FILE *inpfile; int res; uutcl_UpdateParameter (interp); if (argc != 3) { sprintf (tmpstring, "wrong # args: should be \"%s number textwidget\"", argv[0]); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } if ((iter = UUGetFileListItem (atoi (argv[1]))) == NULL) { Tcl_SetResult (interp, "invalid file number", TCL_STATIC); return TCL_ERROR; } if ((res = UUDecodeToTemp (iter)) != UURET_OK) { sprintf (tmpstring, "Error while decoding %s (%s): %s (%s)", (iter->filename) ? iter->filename : "", (iter->subfname) ? iter->subfname : "", UUstrerror(res), (res==UURET_IOERR)? strerror(UUGetOption(UUOPT_ERRNO,NULL,NULL,0)):""); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } sprintf (tmpstring, "%s delete 1.0 end", argv[2]); if (Tcl_Eval (interp, tmpstring) != TCL_OK) return TCL_ERROR; if (iter->binfile==NULL || (inpfile=fopen (iter->binfile, "r"))==NULL) { Tcl_SetResult (interp, "couldn't read file", TCL_STATIC); return TCL_ERROR; } if ((inpfile = fopen (iter->binfile, "r")) == NULL) { sprintf (tmpstring, "Could not open temp file %s of %s (%s): %s", iter->binfile, (iter->filename) ? iter->filename : "", (iter->subfname) ? iter->subfname : "", strerror (errno)); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } data.interp = interp; data.widget = argv[2]; while (!feof (inpfile)) { if (_FP_fgets (tmpstring, 512, inpfile) == NULL) break; if (ferror (inpfile)) break; if (uutcl_InfoCallback (&data, tmpstring)) break; } if (ferror (inpfile)) { sprintf (tmpstring, "Error while reading from temp file %s of %s (%s): %s", iter->binfile, (iter->filename) ? iter->filename : "", (iter->subfname) ? iter->subfname : "", strerror (errno)); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); fclose (inpfile); return TCL_ERROR; } fclose (inpfile); return TCL_OK; }
static int UUTCLFUNC uutcl_Info (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { char temp[64], version[64]; if (argc==1 || uutcl_HaveArg (argc, argv, "version")) { UUGetOption (UUOPT_VERSION, NULL, version, 64); sprintf (temp, " { version %s } ", version); Tcl_AppendResult (interp, temp, NULL); } if (argc==1 || uutcl_HaveArg (argc, argv, "have_tcl")) #ifdef HAVE_TCL Tcl_AppendResult (interp, " { have_tcl 1 } ", NULL); #else Tcl_AppendResult (interp, " { have_tcl 0 } ", NULL); #endif if (argc==1 || uutcl_HaveArg (argc, argv, "have_tk")) #ifdef HAVE_TK Tcl_AppendResult (interp, " { have_tk 1 } ", NULL); #else Tcl_AppendResult (interp, " { have_tk 0 } ", NULL); #endif if (argc==1 || uutcl_HaveArg (argc, argv, "have_mail")) { #ifdef PROG_MAILER if (*PROG_MAILER) Tcl_AppendResult (interp, " { have_mail 1 } ", NULL); else Tcl_AppendResult (interp, " { have_mail 0 } ", NULL); #else Tcl_AppendResult (interp, " { have_mail 0 } ", NULL); #endif } if (argc==1 || uutcl_HaveArg (argc, argv, "prog_mailer")) { #ifdef PROG_MAILER sprintf (temp, " { prog_mailer \"%s\" } ", PROG_MAILER); Tcl_AppendResult (interp, temp, NULL); #else Tcl_AppendResult (interp, " { prog_mailer (none) } ", NULL); #endif } if (argc==1 || uutcl_HaveArg (argc, argv, "have_news")) { #ifdef HAVE_NEWS Tcl_AppendResult (interp, " { have_news 1 } ", NULL); #else Tcl_AppendResult (interp, " { have_news 0 } ", NULL); #endif } if (argc==1 || uutcl_HaveArg (argc, argv, "prog_inews")) { #ifdef PROG_INEWS sprintf (temp, " { prog_inews \"%s\" } ", PROG_INEWS); Tcl_AppendResult (interp, temp, NULL); #else Tcl_AppendResult (interp, " { prog_inews (none) } ", NULL); #endif } if (argc==1 || uutcl_HaveArg (argc, argv, "domainname")) { #ifdef DOMAINNAME sprintf (temp, " { domainname %s } ", DOMAINNAME); Tcl_AppendResult (interp, temp, NULL); #else Tcl_AppendResult (interp, " { domainname (none) } ", NULL); #endif } if (argc==1 || uutcl_HaveArg (argc, argv, "nntpserver")) { #ifdef NNTPSERVER sprintf (temp, " { nntpserver %s } ", NNTPSERVER); Tcl_AppendResult (interp, temp, NULL); #else Tcl_AppendResult (interp, " { nntpserver (none) } ", NULL); #endif } if (argc==1 || uutcl_HaveArg (argc, argv, "need_nntpserver")) { #ifdef NEED_NNTPSERVER Tcl_AppendResult (interp, " { need_nntpserver 1 } ", NULL); #else Tcl_AppendResult (interp, " { need_nntpserver 0 } ", NULL); #endif } return TCL_OK; }
static int SendAFile (Tcl_Interp *interp, FILE *infile, char *infname, int encoding, int linperfile, char *outfname, char *towhom, char *subject, char *from, char *replyto, int isemail) { char *command, *rcptlist, *ptr; FILE *thepipe, *theifile; int len, count, res, part; if (towhom==NULL || (outfname==NULL&&infname==NULL) || (infile&&infname==NULL) || (encoding!=UU_ENCODED&&encoding!=XX_ENCODED&&encoding!=B64ENCODED&& encoding!=PT_ENCODED&&encoding!=QP_ENCODED)) { Tcl_SetResult (interp, "oops: Parameter check failed in SendAFile()", TCL_STATIC); return UURET_ILLVAL; } #ifndef HAVE_POPEN Tcl_SetResult (interp, "error: Your system does not support sending of files", TCL_STATIC); return UURET_ILLVAL; #else if (isemail && (uue_mailprog == NULL || *uue_mailprog == '\0')) { Tcl_SetResult (interp, "error: Cannot Email file: option not configured", TCL_STATIC); return UURET_ILLVAL; } else if (!isemail && (uue_inewsprog == NULL || *uue_inewsprog == '\0')) { Tcl_SetResult (interp, "error: Cannot Post file: option not configured", TCL_STATIC); return UURET_ILLVAL; } len = strlen ((isemail)?uue_mailprog:uue_inewsprog) + ((uue_mpsubject)?strlen(subject):0) + ((isemail)?0:strlen(towhom)) + 32; if ((command = (char *) malloc (len)) == NULL) { Tcl_SetResult (interp, "error: Out of memory allocating some bytes", TCL_STATIC); return UURET_NOMEM; } if ((rcptlist = (char *) malloc (strlen (towhom) + 16)) == NULL) { Tcl_SetResult (interp, "error: Out of memory allocating some bytes", TCL_STATIC); _FP_free (command); return UURET_NOMEM; } if (isemail) { if (uue_mpsubject) sprintf (command, "%s -s \"%s\"", uue_mailprog, subject); else sprintf (command, "%s", uue_mailprog); /* * Attach list of recipients to mailer command and compose another list * of recipients */ count = 0; rcptlist[0] = '\0'; ptr = _FP_strtok (towhom, ",; "); while (ptr) { strcat (command, " "); strcat (command, ptr); if (count++) strcat (rcptlist, ","); strcat (rcptlist, ptr); ptr = _FP_strtok (NULL, ",; "); } } else { sprintf (command, "%s", uue_inewsprog); count = 0; rcptlist[0] = '\0'; ptr = _FP_strtok (towhom, ";, "); while (ptr) { if (count++) strcat (rcptlist, ","); strcat (rcptlist, ptr); ptr = _FP_strtok (NULL, ";, "); } } if (from && *from == '\0') { from = NULL; } if (subject && *subject == '\0') { subject = NULL; } if (replyto && *replyto == '\0') { replyto = NULL; } /* * Get going ... */ if (infile == NULL) { if ((theifile = fopen (infname, "rb")) == NULL) { _FP_free (rcptlist); _FP_free (command); return UURET_IOERR; } } else { theifile = infile; } for (part=1; !feof (theifile); part++) { if ((thepipe = popen (command, "w")) == NULL) { if (infile==NULL) fclose (theifile); _FP_free (rcptlist); _FP_free (command); return UURET_IOERR; } if (UUGetOption(UUOPT_VERBOSE, NULL, NULL, 0)) { #if 0 fprintf (stderr, "%s part %03d of %s to %s ... ", (isemail)?"mailing":"posting", part, (infname)?infname:outfname, rcptlist); fflush (stderr); #endif } res = UUE_PrepPartialExt (thepipe, theifile, infname, encoding, outfname, 0, part, linperfile, 0, rcptlist, from, subject, replyto, isemail); #if 0 if (UUGetOption (UUOPT_VERBOSE, NULL, NULL, 0)) { if (res == UURET_OK) fprintf (stderr, "ok.\n"); else fprintf (stderr, "%s\n", UUstrerror (res)); } #endif pclose (thepipe); if (res != UURET_OK) { if (infile == NULL) fclose (theifile); _FP_free (rcptlist); _FP_free (command); return res; } } if (infile == NULL) fclose (theifile); _FP_free (rcptlist); _FP_free (command); return UURET_OK; #endif }
int UUTCLEXPORT UUTCLFUNC Uu_Init (Tcl_Interp *interp) { char tmp[32]; /* * Check whether we are already initialized */ if (uu_AlreadyInitialized++) return TCL_OK; /* * Initialize decoding engine */ if (UUInitialize () != UURET_OK) { Tcl_SetResult (interp, "Error initializing decoding engine", TCL_STATIC); return TCL_ERROR; } /* * register commands */ Tcl_CreateCommand (interp, "uu_Info", uutcl_Info, NULL, NULL); Tcl_CreateCommand (interp, "uu_SetMessageProc",uutcl_SetMessageProc, NULL, NULL); Tcl_CreateCommand (interp, "uu_SetBusyProc", uutcl_SetBusyProc,NULL,NULL); Tcl_CreateCommand (interp, "uu_GetProgressInfo",uutcl_GetProgressInfo, NULL, NULL); Tcl_CreateCommand (interp, "uu_GetListOfFiles",uutcl_GetListOfFiles, NULL, NULL); Tcl_CreateCommand (interp, "uu_LoadFile", uutcl_LoadFile, NULL, NULL); Tcl_CreateCommand (interp, "uu_DecodeFile", uutcl_DecodeFile, NULL, NULL); Tcl_CreateCommand (interp, "uu_GetTempFile", uutcl_GetTempFile,NULL,NULL); Tcl_CreateCommand (interp, "uu_InfoFile", uutcl_InfoFile, NULL, NULL); Tcl_CreateCommand (interp, "uu_ListFile", uutcl_ListFile, NULL, NULL); Tcl_CreateCommand (interp, "uu_Rename", uutcl_Rename, NULL, NULL); Tcl_CreateCommand (interp, "uu_CleanUp", uutcl_CleanUp, NULL, NULL); Tcl_CreateCommand (interp, "uu_EncodeToFile", uutcl_EncodeToFile,NULL,NULL); Tcl_CreateCommand (interp, "uu_EncodeToMail", uutcl_EncodeToMail,NULL,NULL); Tcl_CreateCommand (interp, "uu_EncodeToNews", uutcl_EncodeToNews,NULL,NULL); /* * our message-handling function and busy callback */ theDMcbdata.interp = NULL; theDMcbdata.tclproc[0] = '\0'; UUSetMsgCallback (&theDMcbdata, uutcl_DisplayMessage); theBusycbdata.interp = NULL; theBusycbdata.tclproc[0] = '\0'; UUSetBusyCallback (&theBusycbdata, uutcl_BusyCallback, 1000); /* * only set variables if they aren't set already */ sprintf (tmp, "%d", UUGetOption (UUOPT_FAST, NULL, NULL, 0)); if (Tcl_GetVar (interp, "OptionFast", TCL_GLOBAL_ONLY) == NULL) Tcl_SetVar (interp, "OptionFast", tmp, TCL_GLOBAL_ONLY); sprintf (tmp, "%d", UUGetOption (UUOPT_BRACKPOL, NULL, NULL, 0)); if (Tcl_GetVar (interp, "OptionBracket", TCL_GLOBAL_ONLY) == NULL) Tcl_SetVar (interp, "OptionBracket", tmp, TCL_GLOBAL_ONLY); sprintf (tmp, "%d", UUGetOption (UUOPT_DESPERATE, NULL, NULL, 0)); if (Tcl_GetVar (interp, "OptionDesperate", TCL_GLOBAL_ONLY) == NULL) Tcl_SetVar (interp, "OptionDesperate", tmp, TCL_GLOBAL_ONLY); sprintf (tmp, "%d", UUGetOption (UUOPT_DEBUG, NULL, NULL, 0)); if (Tcl_GetVar (interp, "OptionDebug", TCL_GLOBAL_ONLY) == NULL) Tcl_SetVar (interp, "OptionDebug", tmp, TCL_GLOBAL_ONLY); sprintf (tmp, "%d", UUGetOption (UUOPT_USETEXT, NULL, NULL, 0)); if (Tcl_GetVar (interp, "OptionUsetext", TCL_GLOBAL_ONLY) == NULL) Tcl_SetVar (interp, "OptionUsetext", tmp, TCL_GLOBAL_ONLY); return TCL_OK; }