⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uutcl.c

📁 UUDeview是一个编码解码器
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 UUTCLFUNCuutcl_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;}/* * clean up memory and temp files */static int UUTCLFUNCuutcl_CleanUp (ClientData clientData, Tcl_Interp *interp,	       int argc, char *argv[]){  uutcl_UpdateParameter (interp);  UUCleanUp ();  return TCL_OK;}/* * Generic function to extract the encoding and linperfile parameters * from the command's command line */static intuutcl_GetEncodeParams (Tcl_Interp *interp,		       int argc,  char *argv[],		       int argv1, int *encoding,		       int argv2, int *linperfile){  if (argv2 && argv2 < argc) {    *linperfile = atoi (argv[argv2]);    if (*linperfile != 0 && *linperfile < 200) {      Tcl_SetResult (interp, "illegal number of lines per file", TCL_STATIC);      return TCL_ERROR;    }  }  if (argv1 && argv1 < argc) {    switch (*argv[argv1]) {    case '0':    case 'u':    case 'U':      *encoding = UU_ENCODED;      break;    case '1':    case 'x':    case 'X':      *encoding = XX_ENCODED;      break;    case '2':    case 'b':    case 'B':      *encoding = B64ENCODED;      break;    case '3':    case 't':    case 'T':      *encoding = PT_ENCODED;      break;    case '4':    case 'q':    case 'Q':      *encoding = QP_ENCODED;      break;    case '5':    case 'y':    case 'Y':      *encoding = YENC_ENCODED;      break;    default:      Tcl_SetResult (interp, "invalid encoding method", TCL_STATIC);      return TCL_ERROR;    }  }  return TCL_OK;}/* * Encode and store in a file. * Syntax: *    uu_EncodeToFile source path \ *                    [ dest subject intro lines encoding from replyto] * * Most arguments are just for compatibilty with the other encoding procs. */static int UUTCLFUNCuutcl_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;}/* * Encode and send by email * Syntax: *    uu_EncodeToMail source addr \ *                    [ dest subject intro lines encoding from replyto ] * * addr can be a single address or a list of addresses */static int UUTCLFUNCuutcl_EncodeToMail (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,			1)) != UURET_OK) {    /*     * If res==UURET_ILLVAL, SendAMail has already filled in the result     */    if (res != UURET_ILLVAL) {      sprintf (errstring, "error while emailing %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;}/* * Encode and post to the news * Syntax: *    uu_EncodeToNews source addr \ *                    [ dest subject intro lines encoding from replyto ] * * addr can be a single newsgroup or a list of newsgroups */static int UUTCLFUNCuutcl_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;}/* * Initialize the TCL package. The only function that is exported from * this module. */int UUTCLEXPORT UUTCLFUNCUu_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;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -