Skip to content

ArgPositional

Description

Register a positional argument. Slot order on the command line matches registration order. Always required.

name is both the help-text label and the metavar shown in usage output (rendered as <NAME>). It is not parsed for -- prefixes – positionals never start with -.

Usage example (from documentation)

  Zstr hostname = NULL;
  ArgPositional(&p, "hostname", &hostname, "name to resolve");

Success

Appends an ARG_ROLE_POSITIONAL spec; the target is populated from the next unused positional slot when ArgParseRun succeeds.

Failure

LOG_FATAL if parser is NULL, if name is NULL, or if target resolves to an unsupported type (ARG_KIND_INVALID).

Usage example (Cross-references)

Usage examples (Cross-references)
        }
        if (role == ARG_ROLE_POSITIONAL && !long_name) {
            LOG_FATAL("arg_register: ArgPositional needs a non-NULL name");
        }
        if (role != ARG_ROLE_POSITIONAL && !short_name && !long_name) {
    
            ArgParse ap = ArgParseInit("resolve", "look up a hostname via /etc/hosts and DNS");
            ArgPositional(&ap, "hostname", &hostname, "name to resolve");
    
            ArgRun rc = ArgParseRun(&ap, argc, argv);
        Zstr src = NULL;
        Zstr dst = NULL;
        ArgPositional(&p, "source", &src, "from");
        ArgPositional(&p, "dest", &dst, "to");
        Zstr dst = NULL;
        ArgPositional(&p, "source", &src, "from");
        ArgPositional(&p, "dest", &dst, "to");
    
        char  *argv[] = {(char *)"cp", (char *)"a.txt", (char *)"b.txt"};
        Zstr dst     = NULL;
        bool verbose = false;
        ArgPositional(&p, "source", &src, "from");
        ArgPositional(&p, "dest", &dst, "to");
        ArgFlag(&p, "-v", "--verbose", &verbose, "v");
        bool verbose = false;
        ArgPositional(&p, "source", &src, "from");
        ArgPositional(&p, "dest", &dst, "to");
        ArgFlag(&p, "-v", "--verbose", &verbose, "v");
        Zstr src = NULL;
        Zstr dst = NULL;
        ArgPositional(&p, "source", &src, "");
        ArgPositional(&p, "dest", &dst, "");
        Zstr dst = NULL;
        ArgPositional(&p, "source", &src, "");
        ArgPositional(&p, "dest", &dst, "");
    
        char  *argv[] = {(char *)"cp", (char *)"a.txt"};
    
        Zstr x = NULL;
        ArgPositional(&p, "x", &x, "");
    
        char  *argv[] = {(char *)"prog", (char *)"first", (char *)"extra"};
    
        Zstr file = NULL;
        ArgPositional(&p, "file", &file, "input file");
    
        // "--unusual-name" would normally be parsed as an option; "--"
        u32  timeout = 0;
        bool verbose = false;
        ArgPositional(&p, "source", &src, "src file");
        ArgRequired(&p, "-l", "--listen", &listen, "host:port");
        ArgOptional(&p, NULL, "--timeout", &timeout, "secs");
        Zstr from = NULL;
        Zstr to   = NULL;
        ArgPositional(&p, "from", &from, "source path");
        ArgPositional(&p, "to", &to, "dest path");
        Zstr to   = NULL;
        ArgPositional(&p, "from", &from, "source path");
        ArgPositional(&p, "to", &to, "dest path");
    
        Zstr expected =
        ArgParse         p = ArgParseInit("cp", NULL, &a);
        Zstr             s = NULL;
        ArgPositional(&p, "source", &s, "from");
        Str  help = StrInit(&a);
        bool got  = capture_help_file(&p, &help);
        Zstr from = NULL;
        Zstr to   = NULL;
        ArgPositional(&p, "from", &from, "source path");
        ArgPositional(&p, "to", &to, "dest path");
        Zstr to   = NULL;
        ArgPositional(&p, "from", &from, "source path");
        ArgPositional(&p, "to", &to, "dest path");
    
        Zstr expected =
    
        Zstr x = NULL;
        ArgPositional(&p, "x", &x, "");
    
        char  *argv[] = {(char *)"prog", (char *)"first", (char *)"extra"};
        ArgOptional(&p, NULL, "--timeout", &timeout, "connection timeout");
        ArgFlag(&p, "-v", "--verbose", &verbose, "verbose logging");
        ArgPositional(&p, "hostname", &hostname, "name to resolve");
    
        char  *argv[] = {(char *)"prog", (char *)"--help"};
Last updated on