📄 uutcl.c
字号:
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 + -