📄 uutcl.c
字号:
} 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 UUTCLFUNCuutcl_SetMessageProc (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]){ char tmpstring[256]; uutcl_UpdateParameter (interp); if (argc != 2) { sprintf (tmpstring, "wrong # args: should be \"%s procedure\"", argv[0]); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } theDMcbdata.interp = interp; strcpy (theDMcbdata.tclproc, argv[1]); return TCL_OK;}static int UUTCLFUNCuutcl_SetBusyProc (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]){ char tmpstring[256]; long msecs; uutcl_UpdateParameter (interp); if (argc != 3) { sprintf (tmpstring, "wrong # args: should be \"%s procedure msecs\"", argv[0]); Tcl_SetResult (interp, tmpstring, TCL_VOLATILE); return TCL_ERROR; } if ((msecs = (long) atoi (argv[2])) > 0) { UUSetBusyCallback (&theBusycbdata, uutcl_BusyCallback, msecs); } theBusycbdata.interp = interp; strcpy (theBusycbdata.tclproc, argv[1]); return TCL_OK;}static int UUTCLFUNCuutcl_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 UUTCLFUNCuutcl_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;}/* * Load an encoded file */static int UUTCLFUNCuutcl_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;}/* * Decode A File. This function overwrites files without asking, because * this was already done by the script */static int UUTCLFUNCuutcl_DecodeFile (ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]){ char tmpstring[256]; uulist *iter; int res; uutcl_UpdateParameter (interp); if (argc < 2 || argc > 3) { sprintf (tmpstring, "wrong # args: should be \"%s number ?targetname?\"", 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 = UUDecodeFile (iter, (argc==3)?argv[2]:NULL)) != 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; } return TCL_OK;}static int UUTCLFUNCuutcl_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;}/* * InfoFile takes two parameters: the number of the file to get info for, * and the name of the text widget to send the text to */struct uuInfoCBData { Tcl_Interp *interp; char * widget;};static intuutcl_InfoCallback (void *param, char *string){ struct uuInfoCBData *data = (struct uuInfoCBData *) param; char tmpstring[1024], *p; sprintf (tmpstring, "%s insert end \"", data->widget); p = tmpstring + strlen (tmpstring); while (*string) { switch (*string) { case '"': case '\\': case '[': case ']': case '$': *p++ = '\\'; /* fallthrough */ default: *p++ = *string; } string++; } *p++ = '"'; *p++ = '\0'; if (Tcl_Eval (data->interp, tmpstring) != TCL_OK) return 1; return 0;}static int UUTCLFUNCuutcl_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;}/* * ShowFile takes two parameters: the number of the file to get info for, * and the name of the text widget to send the text to. We might have to * decode the file before we can show it. * Hey, the above callback worked so well, let's use it again! */static int UUTCLFUNCuutcl_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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -