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

📄 args.c

📁 mpi并行计算的c++代码 可用vc或gcc编译通过 可以用来搭建并行计算试验环境
💻 C
字号:
/* *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. */#include <stdio.h>#if HAVE_STDLIB_H#include <stdlib.h>#endif#include "args.h"#include "lists.h"#include <string.h>#ifndef DEBUG#define DEBUG 0#endifGetIntArg( argc, argv, switchName, val )int *argc, *val;char **argv, *switchName;{  int i, nremove, j;		/* nremove - number of arguments to remove */  for (i=1; i<*argc; i++) {		  /* loop through all args */    if (!strcmp( switchName, argv[i] )) { /* if this is the switch we want, */      if (i+1<*argc) {			  /* make sure there is one more */	if (sscanf( argv[i+1], "%d", val )) {	  nremove = 2;			 /* got valid value */	} else {	  nremove = 1;			 /* didn't get valid value, but */					 /* don't throw away the next arg. */	}      } else {	nremove = 1;      }      for (i+=nremove; i<*argc; i++) {	 /* move everyone else down */	argv[i-nremove]=argv[i];      }      (*argc)-=nremove;      if (nremove==2) return 1;		 /* if we got a value, return */      i--;    }  }  return 0;}GetDoubleArg( argc, argv, switchName, val )int *argc;double *val;char **argv, *switchName;{  int i, nremove, j;		/* nremove - number of arguments to remove */  for (i=1; i<*argc; i++) {		  /* loop through all args */    if (!strcmp( switchName, argv[i] )) { /* if this is the switch we want, */      if (i+1<*argc) {			  /* make sure there is one more */	if (sscanf( argv[i+1], "%lf", val )) {	  nremove = 2;			 /* got valid value */	} else {	  nremove = 1;			 /* didn't get valid value, but */					 /* don't throw away the next arg. */	}      } else {	nremove = 1;      }      for (i+=nremove; i<*argc; i++) {	 /* move everyone else down */	argv[i-nremove]=argv[i];      }      (*argc)-=nremove;      if (nremove==2) return 1;		 /* if we got a value, return */      i--;    }  }  return 0;}GetStringArg( argc, argv, switchName, val )int *argc;char **argv, *switchName, **val;{  int i, nremove, j;		/* nremove - number of arguments to remove */  char *readPtr;  for (i=1; i<*argc; i++) {		  /* loop through all args */    if (!strcmp( switchName, argv[i] )) { /* if this is the switch we want, */      if (i+1<*argc) {			  /* make sure there is one more */	*val = argv[i+1];	nremove = 2;      } else {	nremove = 1;      }      for (i+=nremove; i<*argc; i++) {	 /* move everyone else down */	argv[i-nremove]=argv[i];      }      (*argc)-=nremove;      if (nremove==2) return 1;		 /* if we got a value, return */      i--;    }  }  return 0;}IsArgPresent( argc, argv, switchName )int *argc;char **argv, *switchName;{  int i, returnVal;  returnVal = 0;  for (i=1; i<*argc; i++) {		 /* loop through all args *//*    printf( "Comparing :%s: and :%s:\n", switchName, argv[i] );*/    if (!strcmp( switchName, argv[i] )) { /* if this is the switch we want, *//*      printf( "YUP!" );*/      for (i++; i<*argc; i++) {	 /* slide everything on down */	argv[i-1]=argv[i];      }      (*argc)--;      i--;      returnVal = 1;    }  }  return returnVal;}GetArgAdjacentString( argc, argv, switchName, value )int *argc;char **argv, *switchName, **value;{  int argNum, i, str_len;  xpand_list_String *listStr;  char *readPtr, *start, *end, *theString;  listStr = String_CreateList(10);  for (argNum=1; argNum<*argc; argNum++) {    readPtr = strstr( argv[argNum], switchName );    if (readPtr==argv[argNum]) {      /* we want to find the switch at the beginning of an argument */#if DEBUG      fprintf( stderr, "Found %s in %s\n", switchName, argv[argNum] );#endif      readPtr = argv[argNum] + strlen( switchName );      while (*readPtr) {	String_AddItem( listStr, *readPtr ); /* add a character */	readPtr++;      }	/* done copying list */      String_AddItem( listStr, '\0' );	       /* terminate the string */      for (argNum++; argNum < *argc; argNum++) {	argv[argNum-1] = argv[argNum]; /* shift remaining arguments down */      }      (*argc)--;      ListClose( listStr, theString, str_len );#if DEBUG      fprintf( stderr, "Returning string: %s\n", theString );#endif      *value = theString;      return 1;    } /* if strstr(... switch ) */  } /* keep looking for the switch */  return 0;			/* didn't even find the switch */}GetIntListArg( argc, argv, switchName, intList, listLen )int *argc;char **argv, *switchName;int **intList, *listLen;{  char *list, *token;  xpand_list_Int *tempIntList;  int temp_int;    tempIntList = Int_CreateList(10);  if (!GetArgAdjacentString( argc, argv, switchName, &list )) {    return 0;  }  token = strtok( list, "," );  while (token) {    if (sscanf( token, "%d", &temp_int ))      Int_AddItem( tempIntList, temp_int );    token = strtok( (char*)0, "," );  }  ListClose( tempIntList, *intList, *listLen );  free( list );  return 1;}GetStringListArg( argc, argv, switchName, strList, listLen )int *argc, *listLen;char **argv, *switchName, ***strList;{  char *list, *token, *str_dup;  int temp_int;  xpand_list_Strings *tempStrList;    tempStrList = Strings_CreateList( 10 );  if (!GetArgAdjacentString( argc, argv, switchName, &list )) {    return 0;  }  token = strtok( list, "," );  while (token) {    str_dup = (char *) malloc( (strlen(token) + 1) * sizeof( char ) );    strcpy( str_dup, token );    Strings_AddItem( tempStrList, str_dup );#if DEBUG    fprintf( stderr, "arg: get string list item :%s:\n", token );#endif    token = strtok( (char*)0, "," );  }  ListClose( tempStrList, *strList, *listLen );  free( list );  return 1;}

⌨️ 快捷键说明

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