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

📄 readargs.c

📁 供AVR的ATiny及ATmega系列单片机使用的bootloader
💻 C
字号:
/***************** Lesen Kommandozeilenargumente *****************/
/* Schalterargumente: -Cxxx  /Cxxx  -C-  -C+
   Stringargumente:   text1  text2
   Gros- und Kleinschreibung der Schalter wird nicht unterschieden
   jeder Aufruf liefert den n刢hsten Parameter
   z.B. Programm -A- -B123 text1 -a+ -B456 Text2
   1.Aufruf: A = FALSE, B = 123 Text = text1
   2.Aufruf: A = TRUE,  B = 456 Text = Text2
   d.h. nach Stringabfrage text1 sind alle Argumente davor ung乴tig
   und das 1. danach gefundene Argument g乴tig
   (Namen mit '-' am Anfang sind mit '--' zu kennzeichnen)
*/
/*
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <ctype.h>
*/
#define ABOOL  	 1
#define ACHAR    2
#define AINT     3
#define ALONG    4
#define AHEX     5
#define ASTRING	 6	/* Stringargument */
#define APOINTER 7
#define ANAME	 8	/* String ohne Schalterzeichen */

int readargs( int argtyp,  char c, void *argp )
{
  static int nc = 0;
  int i, ai;
  long al;
  int argc = _argc;
  char **argv = _argv;
  for( i = nc; ++i < argc; )
    switch( argv[i][0] ){
      case '-':
      case '/':
        if( toupper( argv[i][1] ) != toupper( c ) )
          break;
        switch( argtyp ){
          case ABOOL:
            if( argv[i][2] == '-' )
              *((int *) argp) = 0;
            else
              *((int *) argp) = 1;
            return( 1 );
          case AINT:
	    if( sscanf( argv[i]+2, "%d", &ai ) != 1 )
              continue;
            *((int *) argp) = ai;
            return( 1 );
          case AHEX:
            if( sscanf( argv[i]+2, "%h", &ai ) != 1 )
              continue;
            *((int *) argp) = ai;
            return( 1 );
          case ALONG:
	    if( sscanf( argv[i]+2, "%ld", &al ) != 1 )
              continue;
            *((long *) argp) = al;
            return( 1 );
          case ASTRING:
            strcpy( argp, argv[i]+2 );
            return( 1 );
	  case APOINTER:
	    argp = argv[i]+2;
            return( 1 );
          default: continue;
	}
      default:
	if( argtyp == ANAME && i > nc ){
          nc = i;
          strcpy( argp, argv[nc] );
          return( 1 );
        }
    }
  return( 0 );
}

⌨️ 快捷键说明

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