📄 common.c
字号:
/* * This is a cheap replacement for getopt() because that routine is not * available on some platforms and behaves differently on other platforms. * This code was written from scratch without looking at any other * implementation. * * This code is hereby expressly placed in the public domain. * mleisher@crl.nmsu.edu (Mark Leisher) * 10 October 1997 */#include "common.h"#include <stdio.h>#include <stdarg.h>#include <stdlib.h>#include <string.h> /* * Externals visible to programs. */ int opterr = 1; int optind = 1; char* optarg; /* * Internal variables that are used to detect when the global values * need to be reset. */ static int cmdac;#ifdef __STDC__ static const char* cmdname; static char* const* cmdav;#else static char* cmdname; static char** cmdav;#endif int#ifdef __STDC__ getopt( int ac, char* const* av, const char* pat )#else getopt( ac, av, pat ) int ac; char** av; char* pat;#endif { int opt;#ifdef __STDC__ const char* p; const char* pp;#else char* p; char* pp;#endif /* * If there is no pattern, indicate the parsing is done. */ if ( pat == 0 || *pat == 0 ) return -1; /* * Always reset the option argument to NULL. */ optarg = 0; /* * If the number of arguments or argument list do not match the last * values seen, reset the internal pointers and the globals. */ if ( ac != cmdac || av != cmdav ) { optind = 1; cmdac = ac; cmdav = av; /* * Determine the command name in case it is needed for warning * messages. */ for ( cmdname = 0, p = av[0]; *p; p++ ) { if ( *p == '/' || *p == '\\' ) cmdname = p; } /* * Skip the path separator if the name was assigned. */ if ( cmdname ) cmdname++; else cmdname = av[0]; } /* * If the next index is greater than or equal to the number of * arguments, then the command line is done. */ if ( optind >= ac ) return -1; /* * Test the next argument for one of three cases: * 1. The next argument does not have an initial '-'. * 2. The next argument is '-'. * 3. The next argument is '--'. * * In either of these cases, command line processing is done. */ if ( av[optind][0] != '-' || strcmp( av[optind], "-" ) == 0 || strcmp( av[optind], "--" ) == 0 ) return -1; /* * Point at the next command line argument and increment the * command line index. */ p = av[optind++]; /* * Look for the first character of the command line option. */ for ( opt = *(p + 1), pp = pat; *pp && *pp != opt; pp++ ) ; /* * If nothing in the pattern was recognized, then issue a warning * and return a '?'. */ if ( *pp == 0 ) { if ( opterr ) fprintf( stderr, "%s: illegal option -- %c\n", cmdname, opt ); return '?'; } /* * If the option expects an argument, get it. */ if ( *(pp + 1) == ':' && (optarg = av[optind]) == 0 ) { /* * If the option argument is NULL, issue a warning and return a '?'. */ if ( opterr ) fprintf( stderr, "%s: option requires an argument -- %c\n", cmdname, opt ); opt = '?'; } else if ( optarg ) /* * Increment the option index past the argument. */ optind++; /* * Return the option character. */ return opt; }/****************************************************************************//* *//* The FreeType project -- a free and portable quality TrueType renderer. *//* *//* Copyright 1996-1998 by *//* D. Turner, R.Wilhelm, and W. Lemberg *//* *//* ft_basename(): *//* *//* a stupid but useful function... *//* *//* rewritten by DavidT to get rid of GPLed programs in the FreeType demos. *//* *//****************************************************************************/ char*#ifdef __STDC__ ft_basename ( const char* name )#else ft_basename ( name ) char* name;#endif {#ifdef __STDC__ const char* base; const char* current;#else char* base; char* current;#endif char c; base = name; current = name; c = *current; while ( c ) {#ifndef macintosh if ( c == '/' || c == '\\' )#else if ( c == ':' )#endif base = current + 1; current++; c = *current; } return (char*)base; }#ifdef __STDC__ void Panic( const char* fmt, ... )#else void Panic( fmt ) const char* fmt;#endif { va_list ap; va_start( ap, fmt ); vprintf( fmt, ap ); va_end( ap ); exit( 1 ); }/* End */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -