'\" t .\" Title: zargs .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 03/02/2024 .\" Manual: CZMQ Manual .\" Source: CZMQ 4.2.1 .\" Language: English .\" .TH "ZARGS" "3" "03/02/2024" "CZMQ 4\&.2\&.1" "CZMQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" zargs \- Class for Platform independent command line argument parsing helpers .SH "SYNOPSIS" .sp .nf // This is a draft class, and may change without notice\&. It is disabled in // stable builds by default\&. If you use this in applications, please ask // for it to be pushed to stable state\&. Use \-\-enable\-drafts to enable\&. #ifdef CZMQ_BUILD_DRAFT_API // *** Draft method, for development use, may change without warning *** // Create a new zargs from command line arguments\&. CZMQ_EXPORT zargs_t * zargs_new (int argc, char **argv); // *** Draft method, for development use, may change without warning *** // Destroy zargs instance\&. CZMQ_EXPORT void zargs_destroy (zargs_t **self_p); // *** Draft method, for development use, may change without warning *** // Return program name (argv[0]) CZMQ_EXPORT const char * zargs_progname (zargs_t *self); // *** Draft method, for development use, may change without warning *** // Return number of positional arguments CZMQ_EXPORT size_t zargs_arguments (zargs_t *self); // *** Draft method, for development use, may change without warning *** // Return first positional argument or NULL CZMQ_EXPORT const char * zargs_first (zargs_t *self); // *** Draft method, for development use, may change without warning *** // Return next positional argument or NULL CZMQ_EXPORT const char * zargs_next (zargs_t *self); // *** Draft method, for development use, may change without warning *** // Return first named parameter value, or NULL if there are no named // parameters, or value for which zargs_param_empty (arg) returns true\&. CZMQ_EXPORT const char * zargs_param_first (zargs_t *self); // *** Draft method, for development use, may change without warning *** // Return next named parameter value, or NULL if there are no named // parameters, or value for which zargs_param_empty (arg) returns true\&. CZMQ_EXPORT const char * zargs_param_next (zargs_t *self); // *** Draft method, for development use, may change without warning *** // Return current parameter name, or NULL if there are no named parameters\&. CZMQ_EXPORT const char * zargs_param_name (zargs_t *self); // *** Draft method, for development use, may change without warning *** // Return value of named parameter or NULL is it has no value (or was not specified) CZMQ_EXPORT const char * zargs_get (zargs_t *self, const char *name); // *** Draft method, for development use, may change without warning *** // Return value of one of parameter(s) or NULL is it has no value (or was not specified) CZMQ_EXPORT const char * zargs_getx (zargs_t *self, const char *name, \&.\&.\&.); // *** Draft method, for development use, may change without warning *** // Returns true if named parameter was specified on command line CZMQ_EXPORT bool zargs_has (zargs_t *self, const char *name); // *** Draft method, for development use, may change without warning *** // Returns true if named parameter(s) was specified on command line CZMQ_EXPORT bool zargs_hasx (zargs_t *self, const char *name, \&.\&.\&.); // *** Draft method, for development use, may change without warning *** // Print an instance of zargs\&. CZMQ_EXPORT void zargs_print (zargs_t *self); // *** Draft method, for development use, may change without warning *** // Self test of this class\&. CZMQ_EXPORT void zargs_test (bool verbose); #endif // CZMQ_BUILD_DRAFT_API Please add \*(Aq@interface\*(Aq section in \*(Aq\&./\&.\&./src/zargs\&.c\*(Aq\&. .fi .SH "DESCRIPTION" .sp zargs \- Platform independent command line argument parsing helpers .sp Platform independent command line argument parsing helpers .sp There are two kind of elements provided by this class foo \-\-named\-parameter \-\-parameter with_value positional arguments \-a gain\-parameter zargs keeps poision only for arguments, parameters are to be accessed like hash\&. .sp It DOES: * provide easy to use CLASS compatible API for accessing argv * is platform independent * provide getopt_long style \(em argument, which delimits parameters from arguments * makes parameters positon independent .sp It does NOT * change argv * provide a "declarative" way to define command line interface .sp In future it SHALL * hide several formats of command line to one (\-Idir, \-\-include=dir, \-\-include dir are the same from API pov) .sp Please add \fI@discuss\fR section in \fI\&./\&.\&./src/zargs\&.c\fR\&. .SH "EXAMPLE" .PP \fBFrom zargs_test method\fR. .sp .if n \{\ .RS 4 .\} .nf // Simple create/destroy test char *argv1[] = {"progname", "\-\-named1", "\-n1", "val1", "positional1", "\-\-with", "value", "\-\-with2=value2", "\-W3value3", "\-\-", "\-\-thisis", "considered", "positional", NULL}; zargs_t *self = zargs_new (13, argv1); assert (self); assert (streq (zargs_progname (self), "progname")); assert (streq (zargs_first (self), "positional1")); assert (streq (zargs_next (self), "\-\-thisis")); assert (streq (zargs_next (self), "considered")); assert (streq (zargs_next (self), "positional")); assert (!zargs_next (self)); assert (zargs_has (self, "\-\-named1")); assert (zargs_has (self, "\-n1")); assert (!zargs_has (self, "\-\-not at all")); assert (!(zargs_get (self, "\-\-named1"))); assert (streq (zargs_get (self, "\-n1"), "val1")); // common usages \- test for \-h/\-\-help bool has_help = zargs_hasx (self, "\-\-help", "\-h", NULL); assert (!has_help); zargs_destroy (&self); .fi .if n \{\ .RE .\} .sp .SH "AUTHORS" .sp The czmq manual was written by the authors in the AUTHORS file\&. .SH "RESOURCES" .sp Main web site: \m[blue]\fB\%\fR\m[] .sp Report bugs to the email <\m[blue]\fBzeromq\-dev@lists\&.zeromq\&.org\fR\m[]\&\s-2\u[1]\d\s+2> .SH "COPYRIGHT" .sp Copyright (c) the Contributors as noted in the AUTHORS file\&. This file is part of CZMQ, the high\-level C binding for 0MQ: http://czmq\&.zeromq\&.org\&. This Source Code Form is subject to the terms of the Mozilla Public License, v\&. 2\&.0\&. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla\&.org/MPL/2\&.0/\&. LICENSE included with the czmq distribution\&. .SH "NOTES" .IP " 1." 4 zeromq-dev@lists.zeromq.org .RS 4 \%mailto:zeromq-dev@lists.zeromq.org .RE