summaryrefslogtreecommitdiff
path: root/shell/getopt_r.ads
blob: d8020544364d03938f99ccc43916d860d8e164f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
--
--                            REENTRANT GETOPT
--                             SPECIFICATION
-- $Id$
--
--  Based upon getopt by Nasser Abbasi.
--  modifications to support reentrancy by Joel Sherrill.
--
--  Copyright (C) 1998 Nasser Abbasi <nabbasi@pacbell.net>
--  Copyright (C) 2011 Joel Sherrill <joe.sherrill@oarcorp.com>
--
-- This is free software;  you can  redistribute it  and/or modify it under
-- terms of the  GNU General Public License as published  by the Free Soft-
-- ware  Foundation;  either version 2,  or (at your option) any later ver-
-- sion. GETOPT is distributed in the hope that it will be useful, but WITH
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-- for  more details. Free Software Foundation,  59 Temple Place - Suite
-- 330,  Boston, MA 02111-1307, USA.
--
-- As a special exception,  if other files  instantiate  generics from this
-- unit, or you link  this unit with other files  to produce an executable,
-- this  unit  does not  by itself cause  the resulting  executable  to  be
-- covered  by the  GNU  General  Public  License.  This exception does not
-- however invalidate  any other reasons why  the executable file  might be
-- covered by the  GNU Public License.
--
------------------------------------------------------------------------------
--
-- change history:
--
-- name         changes
-- ----------   --------------------------------------------------------------
-- NMA021899    created
-- NMA030299    Changed header to make it modified GPL
--
-- description:
--
-- This package is an Ada implementation of getopt() as specified by the
-- document "The Single UNIX Specification, Version 2", Copyright 1997 The
-- Open Group
--
-- This describes the items involveed using example
--
--
--         curopt
--           |
--           V
-- "-f foo -dbc -k"
--  ^
--  |
-- optind
--
-- optind is position (index) that tells which command line argument is
-- being processed now.
-- curopt tells which optchar is being processed within one command line
-- argument. This is needed only if more that one optchar are stuck
-- togother in one argument with no space, as in -df where both d and f
-- are valid optchar and d takes no optarg.
--
-- Compiler used: GCC 4.5.2 targeting i386-rtems4.10
-- Platform:      Fedora 14/x86_64
--


with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Command_Line_Arguments; use Command_Line_Arguments;

package Getopt_R is

   pragma Elaborate_Body;

   type Reentrant is
   record 
     Optind : Argument_Count_type;
     Optarg : Unbounded_String;
     Optopt : Character := ' ';
     Opterr : Integer := 1;
     Curopt : Natural := 2;
     Argc   : Argument_Count_Type;
     Argv   : Argument_Vector_Type;
   end record; 

   type Reentrant_Ptr is access all Reentrant;

   procedure Initialize (
     R     : Reentrant_Ptr;
     Argc  : Argument_Count_Type;
     Argv  : Argument_Vector_Type);

   function Getopt (
     R : Reentrant_Ptr;
     Optstring : String
   ) return Integer;

end Getopt_R;