| (* GetOpt.def allows users to manage long options to getopt. |
| |
| Copyright (C) 2017-2026 Free Software Foundation, Inc. |
| Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. |
| |
| This file is part of GNU Modula-2. |
| |
| GNU Modula-2 is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3, or (at your option) |
| any later version. |
| |
| GNU Modula-2 is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| Under Section 7 of GPL version 3, you are granted additional |
| permissions described in the GCC Runtime Library Exception, version |
| 3.1, as published by the Free Software Foundation. |
| |
| You should have received a copy of the GNU General Public License and |
| a copy of the GCC Runtime Library Exception along with this program; |
| see the files COPYING3 and COPYING.RUNTIME respectively. If not, see |
| <http://www.gnu.org/licenses/>. *) |
| |
| DEFINITION MODULE GetOpt ; |
| |
| FROM SYSTEM IMPORT ADDRESS ; |
| FROM DynamicStrings IMPORT String ; |
| |
| CONST |
| no_argument = 0 ; |
| required_argument = 1 ; |
| optional_argument = 2 ; |
| |
| TYPE |
| LongOptions ; |
| PtrToInteger = POINTER TO INTEGER ; |
| |
| (* |
| GetOpt - call C getopt and fill in the parameters: |
| optarg, optind, opterr and optopt. |
| *) |
| |
| PROCEDURE GetOpt (argc: INTEGER; argv: ADDRESS; optstring: String; |
| VAR optarg: String; |
| VAR optind, opterr, optopt: INTEGER) : CHAR ; |
| |
| |
| (* |
| InitLongOptions - creates and returns a LongOptions empty array. |
| *) |
| |
| PROCEDURE InitLongOptions () : LongOptions ; |
| |
| |
| (* |
| AddLongOption - appends long option {name, has_arg, flag, val} to the |
| array of options and new long options array is |
| returned. |
| The old array, lo, should no longer be used. |
| |
| (from man 3 getopt) |
| The meanings of the different fields are: |
| |
| name is the name of the long option. |
| |
| has_arg |
| is: no_argument (or 0) if the option does not take an |
| argument; required_argument (or 1) if the option |
| requires an argument; or optional_argument (or 2) if |
| the option takes an optional argument. |
| |
| flag specifies how results are returned for a long option. |
| If flag is NULL, then getopt_long() returns val. |
| (For example, the calling program may set val to the |
| equivalent short option character). Otherwise, |
| getopt_long() returns 0, and flag points to a |
| variable which is set to val if the option is found, |
| but left unchanged if the option is not found. |
| |
| val is the value to return, or to load into the variable |
| pointed to by flag. |
| |
| The last element of the array must be filled with zeros. |
| *) |
| |
| PROCEDURE AddLongOption (lo: LongOptions; index: CARDINAL; |
| name: String; has_arg: INTEGER; |
| VAR flag: INTEGER; val: INTEGER) : LongOptions ; |
| |
| |
| (* |
| KillLongOptions - returns NIL and also frees up memory |
| associated with, lo. |
| *) |
| |
| PROCEDURE KillLongOptions (lo: LongOptions) : LongOptions ; |
| |
| |
| (* |
| GetOptLong - works like GetOpt but will accept long options (using |
| two dashes). If the program only accepts long options |
| then optstring should be an empty string, not NIL. |
| *) |
| |
| PROCEDURE GetOptLong (argc: INTEGER; argv: ADDRESS; |
| optstring: String; longopts: LongOptions; |
| VAR longindex: INTEGER) : INTEGER ; |
| |
| |
| (* |
| GetOptLongOnly - works like GetOptLong except that a single dash |
| can be used for a long option. |
| *) |
| |
| PROCEDURE GetOptLongOnly (argc: INTEGER; argv: ADDRESS; |
| optstring: String; longopts: LongOptions; |
| VAR longindex: INTEGER) : INTEGER ; |
| |
| |
| END GetOpt. |