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

📄 cvt_args.c

📁 MPICH是MPI的重要研究,提供了一系列的接口函数,为并行计算的实现提供了编程环境.
💻 C
字号:
/*   Standard, simple Tcl argument conversion   Ek Darrels   Argonne National Laboratory*/#include "tcl.h"#include <ctype.h>#include "cvt_args.h"#define DEBUG 0#ifdef NEEDS_STDLIB_PROTOTYPES#include "protofix.h"#endif#ifdef __STDC__#include <stdarg.h>#else#include <varargs.h>#endif/* ugly, but it should work */#ifdef __STDC__int ConvertArgs( Tcl_Interp *interp, char *command, char *format,		 int argc, char **argv, ... )#elseint ConvertArgs( va_alist )va_dcl#endif{  va_list args;  int argNum, *d, nskip;  double *f;  char **str, *readPt;#ifdef __STDC__  va_start( args,  argv );#else  Tcl_Interp *interp;  char *command;  char *format;  int argc;  char **argv;  va_start( args );  interp = va_arg( args, Tcl_Interp* );  command = va_arg( args, char* );  format = va_arg( args, char* );  argc = va_arg( args, int );  argv = va_arg( args, char** );#endif  /* get the number of arguments to skip in argv[] */  sscanf( format, "%d", &nskip );  argNum = nskip;  readPt = format;  /* skip over integer with possible leading and trailing whitespace */  while (isspace( *readPt )) readPt++;  while (!isspace( *readPt )) readPt++;  while (isspace( *readPt )) readPt++;  while (*readPt && argNum<argc) {    switch (*readPt) {    case 'd':      d = va_arg( args, int* );      if (!sscanf( argv[argNum], "%d", d )) {	goto failed_to_convert;      }      break;    case 'f':      f = va_arg( args, double* );      if (!sscanf( argv[argNum], "%lf", f )) {	goto failed_to_convert;      }      break;    case 's':      str = va_arg( args, char** );      *str = argv[argNum];      break;    default:      Tcl_AppendResult( interp, "Unrecognized format specifier in call ",		        "to ConvertArgs.", (char*)0 );      return TCL_ERROR;    }    argNum++;    readPt++;  }    /* if there were more arguments left to convert, complain */  if (*readPt) {    Tcl_AppendResult( interp, "Not enough arguments for procedure.  ",		      "Syntax: ", command, (char*)0 );    va_end( args );    return TCL_ERROR;  }#if 0    /* if there are extra arguments, complain */  if (argNum != argc) {    Tcl_AppendResult( interp, "Too many arguments for procedure.  ",		      "Syntax: ", command, (char*)0 );    va_end( args );    return TCL_ERROR;  }#endif    /* no don't complain, they might be flags like -font xxx or whatever */  va_end( args );  return TCL_OK; failed_to_convert:  {    char numStr[20];    va_end( args );    sprintf( numStr, "%d", argNum+1 );    Tcl_AppendResult( interp, "Failed to convert arg ", numStr, " (",		      argv[argNum], ") to a",		      (*readPt=='d') ? "n integer" :		      (*readPt=='f') ? " double" : " string",		      ".  Syntax: ", command, (char *)0 );    return TCL_ERROR;  }}

⌨️ 快捷键说明

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