File Explorer

/usr/share/awk

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

0 dirs
27 files
getopt.awk3.2 KB · 108 lines
# getopt.awk --- Do C library getopt(3) function in awk#                Also supports long options.## Arnold Robbins, arnold@skeeve.com, Public Domain## Initial version: March, 1991# Revised: May, 1993# Long options added by Greg Minshall, January 2020 # External variables:#    Optind -- index in ARGV of first nonoption argument#    Optarg -- string value of argument to current option#    Opterr -- if nonzero, print our own diagnostic#    Optopt -- current option letter # Returns:#    -1     at end of options#    "?"    for unrecognized option#    <s>    a string representing the current option # Private Data:#    _opti  -- index in multiflag option, e.g., -abcfunction getopt(argc, argv, options, longopts,    thisopt, i, j){    if (length(options) == 0 && length(longopts) == 0)        return -1                # no options given     if (argv[Optind] == "--") {  # all done        Optind++        _opti = 0        return -1    } else if (argv[Optind] !~ /^-[^:[:space:]]/) {        _opti = 0        return -1    }    if (argv[Optind] !~ /^--/) {        # if this is a short option        if (_opti == 0)            _opti = 2        thisopt = substr(argv[Optind], _opti, 1)        Optopt = thisopt        i = index(options, thisopt)        if (i == 0) {            if (Opterr)                printf("%c -- invalid option\n", thisopt) > "/dev/stderr"            if (_opti >= length(argv[Optind])) {                Optind++                _opti = 0            } else                _opti++            return "?"        }        if (substr(options, i + 1, 1) == ":") {            # get option argument            if (length(substr(argv[Optind], _opti + 1)) > 0)                Optarg = substr(argv[Optind], _opti + 1)            else                Optarg = argv[++Optind]            _opti = 0        } else            Optarg = ""        if (_opti == 0 || _opti >= length(argv[Optind])) {            Optind++            _opti = 0        } else            _opti++        return thisopt    } else {        j = index(argv[Optind], "=")        if (j > 0)            thisopt = substr(argv[Optind], 3, j - 3)        else            thisopt = substr(argv[Optind], 3)        Optopt = thisopt        i = match(longopts, "(^|,)" thisopt "($|[,:])")        if (i == 0) {            if (Opterr)                 printf("%s -- invalid option\n", thisopt) > "/dev/stderr"            Optind++            return "?"        }        if (substr(longopts, i+1+length(thisopt), 1) == ":") {            if (j > 0)                Optarg = substr(argv[Optind], j + 1)            else                Optarg = argv[++Optind]        } else            Optarg = ""        Optind++        return thisopt    }}BEGIN {    Opterr = 1    # default is to diagnose    Optind = 1    # skip ARGV[0]     # test program    if (_getopt_test) {        _myshortopts = "ab:cd"        _mylongopts = "longa,longb:,otherc,otherd"         while ((_go_c = getopt(ARGC, ARGV, _myshortopts, _mylongopts)) != -1)            printf("c = <%s>, Optarg = <%s>\n", _go_c, Optarg)        printf("non-option arguments:\n")        for (; Optind < ARGC; Optind++)            printf("\tARGV[%d] = <%s>\n", Optind, ARGV[Optind])    }}