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

📄 uutcl.c

📁 UUDeview是一个编码解码器
💻 C
📖 第 1 页 / 共 3 页
字号:
  }  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 + -