- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
getopt.c
资源名称:fips15.zip [点击查看]
上传用户:yingdiyu
上传日期:2007-01-06
资源大小:116k
文件大小:4k
源码类别:
磁盘编程
开发平台:
Others
- /*
- * $Header$
- *
- * Copyright (C) 1994 Arno Schaefer
- *
- * AU: Auswertung der Kommandozeile, der POSIX-Version von getopt ()
- * nachempfunden.
- *
- * PO: ANSI C
- */
- #include <stdio.h>
- #include <string.h>
- #include "getopt.h"
- /* Globale Variablen */
- char *optarg;
- int optind = 1;
- int opterr = 1;
- int optopt;
- static char *nextarg = NULL;
- /* Funktion */
- int getopt (int argc, char *argv[], char *optstring)
- /*
- * AU: Auswertung der Kommandozeile
- *
- * VB: argc und argv sind die Parameter, die an main () uebergeben werden.
- * optstring ist ein String, der die Zeichen enthaelt, die als
- * Optionen erkannt werden. Wenn ein Zeichen von einem Doppelpunkt
- * gefolgt wird, hat die Option ein Argument, das direkt auf das Zeichen
- * folgt oder durch Space davon getrennt ist. Gueltige Optionszeichen
- * sind alle druckbaren Zeichen ausser '?', ' ' und ':'.
- *
- * optind ist der Index auf das naechste Element von argv[], das
- * bearbeitet wird.
- *
- * opterr ist ein Flag, das festlegt, ob bei Fehlern Fehlermeldungen
- * ausgegeben werden.
- *
- * optarg ist ein Zeiger auf das Argument, wenn eine Option ein
- * Argument hat.
- *
- * optopt enthaelt bei Fehlern das Optionszeichen, das den Fehler aus-
- * geloest hat.
- *
- * NB: Rueckgabewert ist das jeweils naechste Optionszeichen, oder -1 am
- * Ende der Optionsliste.
- *
- * Die Optionsliste ist zu Ende, wenn argv[optind] NULL ist, oder
- * argv[optind] nicht mit '-' (oder '/') beginnt, oder argv[optind]
- * ein einzelnes "-" ist. In diesem Fall wird optind nicht erhoeht.
- * Das Ende der Optionsliste kann mit "--" erzwungen werden, dann ist
- * argv[optind] das erste Argument nach "--".
- *
- * FB: Ein '?' wird zurueckgegeben, wenn ein Optionszeichen nicht in
- * optstring enthalten war oder ein ungueltiges Optionszeichen
- * uebergeben wurde ('?' oder ':'). Ausserdem bei einem fehlenden
- * Argument, wenn das erste Zeichen von optstring kein ':' ist.
- *
- * Ein ':' wird zurueckgegeben bei einem fehlenden Argument, wenn
- * das erste Zeichen von optstring ein ':' ist.
- */
- {
- char *search;
- optarg = NULL;
- if (nextarg == NULL)
- {
- nextarg = argv[optind];
- if (nextarg == NULL)
- {
- return (-1);
- }
- #ifdef __MSDOS__
- if (*nextarg != '-' && *nextarg != '/')
- #else
- if (*nextarg != '-')
- #endif
- {
- return (-1);
- }
- nextarg++;
- } /* if */
- optopt = *nextarg++;
- if (optopt == 0)
- {
- return (-1);
- }
- optind++;
- if (optopt == '-' && *nextarg == 0)
- {
- return (-1);
- }
- if (optopt == ':' || optopt == '?')
- {
- if (opterr)
- {
- fprintf
- (
- stderr,
- "%s: illegal option -- %cn",
- argv[0],
- optopt
- );
- }
- return ('?');
- } /* if */
- search = strchr (optstring, optopt);
- if (search == NULL)
- {
- if (opterr)
- {
- fprintf
- (
- stderr,
- "%s: illegal option -- %cn",
- argv[0],
- optopt
- );
- }
- return ('?');
- } /* if */
- if (*nextarg == 0)
- {
- nextarg = NULL;
- }
- if (search[1] != ':')
- {
- if (nextarg != NULL)
- {
- optind--;
- }
- return (optopt);
- }
- if (nextarg != NULL)
- {
- optarg = nextarg;
- nextarg = NULL;
- return (optopt);
- }
- optarg = argv[optind];
- if (optind == argc)
- {
- if (opterr)
- {
- fprintf
- (
- stderr,
- "%s: option requires an argument -- %cn",
- argv[0],
- optopt
- );
- } /* if */
- if (optstring[0] == ':')
- {
- return (':');
- }
- else
- {
- return ('?');
- }
- } /* if */
- else
- {
- optind++;
- }
- return (optopt);
- } /* getopt () */