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

📄 optmain.tpl

📁 MSYS在windows下模拟了一个类unix的终端
💻 TPL
字号:
[= AutoGen5 Template -*- Mode: text -*-# $Id: optmain.tpl,v 2.23 2002/09/10 02:10:57 bkorb Exp $# Automated Options copyright 1992-2002 Bruce Korb=][=# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #   BUILD GUILE MAIN# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =][=DEFINE build-guile-main=]int    original_argc;char** original_argv;    static void#ifdef __cplusplusinner_main( int argc, char** argv )#elseinner_main( argc, argv )      int    argc;      char** argv;#endif{    original_argc = argc;    original_argv = argv;    {        int ct = optionProcess( &[=(. pname)=]Options, argc, argv );        char** new_argv = (char**)malloc( (argc - ct + 2)*sizeof(char*) );        if (new_argv == NULL) {            fputs( "[=(. pname)=] cannot allocate new argv\n", stderr );            exit( EXIT_FAILURE );        }        /*         *  argc will be reduced by one less than the count returned         *  by optionProcess.  That count includes the program name,         *  but we are adding the program name back in (plus a NULL ptr).         */        argc -= (ct-1);        new_argv[0] = argv[0];        /*         *  Copy the argument pointers, plus the terminating NULL ptr.         */        memcpy( new_argv+1, argv + ct, argc * sizeof( char* ));        argv = new_argv;    }[=  IF (> (len "guile-main") 0)  =]    [=guile-main=]    exit( EXIT_SUCCESS );[=  ELSE  =]    export_options_to_guile( &[=(. pname)=]Options );    scm_shell( argc, argv );[=  ENDIF =]}int#ifdef __cplusplusmain( int    argc,      char** argv )#elsemain( argc, argv )      int    argc;      char** argv;#endif{[=    % before-guile-boot "\n    %s\n" =]    gh_enter( argc, argv, inner_main );    /* NOT REACHED */    return 0;}[=ENDDEF=][=# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #   BUILD TEST MAIN# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =][=DEFINE build-test-main=]#if defined( TEST_[= (. pname-up) =]_OPTS )intmain( int argc, char** argv ){[=  IF (= (get "test_main") "putShellParse") =]    extern tOptions  genshelloptOptions;    extern void      putShellParse( tOptions* );    extern tOptions* pShellParseOptions;    /*     *  Stash a pointer to the options we are generating.     *  `genshellUsage()' will use it.     */    pShellParseOptions = &[=prog_name=]Options;    (void)optionProcess( &genshelloptOptions, argc, argv );    putShellParse( &[=prog_name=]Options );[=  ELIF      ;;  Also check to see if the user supplies all the code for main()      (exist? "main-text") =][= main-text =][=  ELSE=]    (void)optionProcess( &[=prog_name=]Options, argc, argv );[=    IF  ;;  the user is specifying a routine to call, then call that procedure        (> (string-length (get "test_main")) 3) =]    {        void [=test_main=]( tOptions* );        [=test_main=]( &[=prog_name=]Options );    }[=   ELSE  Call our library procedure for emitting shell results    =]    putBourneShell( &[=prog_name=]Options );[=    ENDIF =][=  ENDIF=]    return EXIT_SUCCESS;}#endif  /* defined TEST_[= (. pname-up) =]_OPTS */[=ENDDEF  =][=# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #   DECLARE OPTION CALLBACKS# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =][=DEFINE declare-option-callbacks      =][=   #  For test builds, no need to call option procs  =][=  IF (exist? "test_main")            =]#if ! defined( TEST_[=(. pname-up)=]_OPTS )[=  ENDIF  =]/* *  Procedures to call when option(s) are encountered */[=  FOR flag                           =][=    (set-flag-names)                 =][=    CASE arg_type                    =][=    =*  key                          =]static tOptProc doOpt[=(. cap-name)  =];[=    =*  bool                         =][=    =*  num                          =][=      IF (exist? "arg_range")        =]static tOptProc doOpt[=(. cap-name)  =];[=      ENDIF                          =][=    *                                =][=      IF (exist? "call_proc")        =]extern tOptProc [=(get "call_proc")  =];[=      ELIF (or (exist? "extract_code")               (exist? "flag_code")) =]static tOptProc doOpt[=(. cap-name)  =];[=      ENDIF                          =][=    ESAC                             =][=  ENDFOR                             =][=   IF (exist? "test_main")            =][=     # "A test environment is to be generated" =]#else /* *is*  defined( TEST_[=(. pname-up)=]_OPTS ) *//* *  Under test, omit argument processing, or call stackOptArg, *  if multiple copies are allowed. */[=    FOR flag            =][=    (set! cap-name (string->c-name! (string-capitalize! (get "name"))) ) =][=      IF (exist? "call_proc") =]#define [=(get "call_proc")   =] [=          IF (~ (get "max") "1{0,1}")                        =]NULL[=          ELSE          =]stackOptArg[=          ENDIF         =][=      ELIF (or (exist? "flag_code")               (exist? "extract_code")               (exist? "arg_range")) =]#define doOpt[=(. cap-name)   =] [=          IF (~ (get "max") "1{0,1}")                        =]NULL[=          ELSE          =]stackOptArg[=          ENDIF         =][=      ELIF (=* (get "arg_type") "key")  =]static tOptProc doOpt[=(. cap-name)  =];[=      ENDIF             =][=    ENDFOR flag         =]#endif /* defined( TEST_[=(. pname-up)=]_OPTS ) */[=  ENDIF (exist? "test_main") =][=ENDDEF=][=# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #   DEFINE OPTION CALLBACKS# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =][=DEFINE callback-proc-header     =]/* * * * * * * * *   For the "[=(string-capitalize! (get "name"))=] Option". */static void#ifdef __cplusplusdoOpt[=(. cap-name) =](    tOptions*   pOptions,    tOptDesc*   pOptDesc )#elsedoOpt[=(. cap-name) =]( pOptions, pOptDesc )    tOptions*   pOptions;    tOptDesc*   pOptDesc;#endif{[=ENDDEF                          =][=# # # # # # # # # # # # # # # # =][=DEFINE range-option-code=][=(if (not (=* (get "arg_type") "num"))    (error (string-append "range option " low-name " is not numeric")) )=]    static const struct {const int rmin, rmax;} rng[ [=(count "arg_range")=] ] = {[=(out-push-new)      =][=  FOR arg_range ",\n" =][=    CASE arg_range    =][=      *==    "->"     =][=             (shellf "f=`echo '%s'|sed 's,->$,,'`                     echo \"{ $f, INT_MAX }\"" (get "arg_range")) =][=      ==*    "->"     =][=             (shellf "f=`echo '%s'|sed 's,^->,,'`                     echo \"{ INT_MIN, $f }\"" (get "arg_range")) =][=      *==*   "->"     =][=             (shellf "f=`echo '%s'|sed 's/->/, /'`                     echo \"{ $f }\"" (get "arg_range")) =][=      ~~ -{0,1}[0-9]+ =]{ [=arg_range=], INT_MIN }[=      *  =][= (error (string-append "Invalid range spec:  ``"              (get "arg_range") "''" ))  =][=    ESAC arg_range    =][=  ENDFOR =][=  (shellf "${COLUMNS_EXE} -I8 --spread=2 <<_EOF_\n%s\n_EOF_"          (out-pop #t)) =] };    int val, ix;    tCC* pzIndent = "\t\t\t\t  ";    if (pOptDesc == NULL) /* usage is requesting range list */        goto emit_ranges;    val = atoi( pOptDesc->pzLastArg );    for (ix = 0; ix < [=(count "arg_range")=]; ix++) {        if (val < rng[ix].rmin)            continue;  /* ranges need not be ordered. */        if (val == rng[ix].rmin)            goto valid_return;        if (rng[ix].rmax == INT_MIN)            continue;        if (val <= rng[ix].rmax)            goto valid_return;    }    fprintf( stderr, "%s error:  %s option value ``%s''is out of range.\n",             pOptions->pzProgName, pOptDesc->pz_Name, pOptDesc->pzLastArg );    pzIndent = "\t";  emit_ranges:[=  IF (> (count "arg_range") 1) =]    fprintf( stderr, "%sit must lie in one of the ranges:\n", pzIndent );    for ( ix=0;; ) {        if (rng[ix].rmax == INT_MIN)             fprintf( stderr, "%s%d exactly", pzIndent, rng[ix].rmin );        else fprintf( stderr, "%s%d to %d", pzIndent,                      rng[ix].rmin, rng[ix].rmax );        if (++ix >= [=(count "arg_range")=])            break;        fputs( ", or\n", stderr );    }    fputc( '\n', stderr );[=  ELIF (*==* (get "arg_range") "->")  =]    fprintf( stderr, "%sit must lie in the range: %d to %d\n",             pzIndent, rng[0].rmin, rng[0].rmax );[=  ELSE  =]    fprintf( stderr, "%sit must be: %d exactly\n", pzIndent, rng[0].rmin );[=  ENDIF =]    if (pOptDesc == NULL)        return;    [=(. UP-prefix)=]USAGE( EXIT_FAILURE );    /* NOTREACHED */  valid_return:    pOptDesc->pzLastArg = (char*)val;[=ENDDEF                          =][=# # # # # # # # # # # # # # # # =][=DEFINE define-option-callbacks  =][=  FOR  flag  =][=    (set! UP-name    (string->c-name! (string-upcase! (get "name"))) )    (set! cap-name   (string-capitalize UP-name))    (set! low-name   (string-downcase UP-name))      =][=    IF (or (exist? "flag_code")           (exist? "extract_code")           (exist? "arg_range") ) =][=      IF (exist? "test_main") =]#if ! defined( TEST_[= (. pname-up) =]_OPTS )[=      ENDIF =][=      invoke callback-proc-header  =][=      IF (exist? "flag_code")      =][=         flag_code                 =][=      ELIF (exist? "extract_code") =][=         (extract (string-append (base-name) ".c.save") (string-append                  "/*  %s =-= " cap-name " Opt Code =-= %s */"))         =][=      ELIF (exist? "arg_range")    =][=         range-option-code         =][=      ENDIF =]}[=  IF (exist? "test_main") =]#endif /* ! defined TEST_[= (. pname-up) =]_OPTS */[=  ENDIF =][=    ELIF (=* (get "arg_type") "key") =][=      invoke callback-proc-header  =][=      IF (not (exist? "arg_default"))=]    tSCC zDef[2] = { 0x7F, 0 };[=    ENDIF =][=    IF (> (len "arg_optional") 0) =]    te_[=(string-append Cap-prefix cap-name)=] def_val = [=       IF (not (=* (get "arg_optional") low-name))             =][=(. UP-name)=]_[=       ENDIF =][=(string-upcase! (string->c-name! (get "arg_optional")))             =];[=    ENDIF=]    tSCC* az_names[] = {[=      IF (not (exist? "arg_default")) =] zDef,[=      ENDIF  =][=(shellf  "${COLUMNS_EXE} -I8 --spread=2 --sep=',' -f'\"%%s\"' <<_EOF_\n%s\n_EOF_\n"          (join "\n" (stack "keyword")) )=]    };[=    IF (> (len "arg_optional") 0) =]    if (((tUL)pOptions > 0x0FUL) && (pOptDesc->pzLastArg == NULL))        pOptDesc->pzLastArg = (char*)def_val;    else[=    ENDIF =]    pOptDesc->pzLastArg =        optionEnumerationVal( pOptions, pOptDesc, az_names, [=        (+ (count "keyword") (if (exist? "arg_default") 0 1)) =] );}[=    ENDIF       =][=  ENDFOR flag   =][=ENDDEF=]

⌨️ 快捷键说明

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