Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}
Exemplo n.º 8
0
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;
}
Exemplo n.º 9
0
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;
}
Exemplo n.º 10
0
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;
}
Exemplo n.º 11
0
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;
}
Exemplo n.º 12
0
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
}
Exemplo n.º 13
0
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;
}