]>
Commit | Line | Data |
---|---|---|
d23b8f57 RK |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3084fecd | 3 | -- GNAT RUN-TIME COMPONENTS -- |
d23b8f57 RK |
4 | -- -- |
5 | -- A D A . C O M M A N D _ L I N E -- | |
6 | -- -- | |
7 | -- B o d y -- | |
8 | -- -- | |
cccef051 | 9 | -- Copyright (C) 1992-2023, Free Software Foundation, Inc. -- |
d23b8f57 RK |
10 | -- -- |
11 | -- GNAT is free software; you can redistribute it and/or modify it under -- | |
12 | -- terms of the GNU General Public License as published by the Free Soft- -- | |
748086b7 | 13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
d23b8f57 RK |
14 | -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- |
15 | -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- | |
748086b7 JJ |
16 | -- or FITNESS FOR A PARTICULAR PURPOSE. -- |
17 | -- -- | |
18 | -- As a special exception under Section 7 of GPL version 3, you are granted -- | |
19 | -- additional permissions described in the GCC Runtime Library Exception, -- | |
20 | -- version 3.1, as published by the Free Software Foundation. -- | |
21 | -- -- | |
22 | -- You should have received a copy of the GNU General Public License and -- | |
23 | -- a copy of the GCC Runtime Library Exception along with this program; -- | |
24 | -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- | |
25 | -- <http://www.gnu.org/licenses/>. -- | |
d23b8f57 RK |
26 | -- -- |
27 | -- GNAT was originally developed by the GNAT team at New York University. -- | |
71ff80dc | 28 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
d23b8f57 RK |
29 | -- -- |
30 | ------------------------------------------------------------------------------ | |
31 | ||
1d5a85bd | 32 | with System; use System; |
fbf5a39b | 33 | |
d23b8f57 RK |
34 | package body Ada.Command_Line is |
35 | ||
36 | function Arg_Count return Natural; | |
37 | pragma Import (C, Arg_Count, "__gnat_arg_count"); | |
38 | ||
39 | procedure Fill_Arg (A : System.Address; Arg_Num : Integer); | |
40 | pragma Import (C, Fill_Arg, "__gnat_fill_arg"); | |
41 | ||
42 | function Len_Arg (Arg_Num : Integer) return Integer; | |
43 | pragma Import (C, Len_Arg, "__gnat_len_arg"); | |
44 | ||
fbf5a39b AC |
45 | ----------------------- |
46 | -- Local Subprograms -- | |
47 | ----------------------- | |
48 | ||
49 | function Initialized return Boolean; | |
50 | -- Checks to ensure that gnat_argc and gnat_argv have been properly | |
51 | -- initialized. Returns false if not, or if argv / argc are | |
52 | -- unsupported on the target (e.g. VxWorks). | |
53 | ||
d23b8f57 RK |
54 | -------------- |
55 | -- Argument -- | |
56 | -------------- | |
57 | ||
0ae9f22f | 58 | function Argument (Number : Positive) return String is |
d23b8f57 | 59 | begin |
7d827255 AC |
60 | if Number > Argument_Count then |
61 | raise Constraint_Error; | |
62 | end if; | |
63 | ||
64 | declare | |
65 | Num : constant Positive := | |
7ec25b2b | 66 | (if Remove_Args = null then Number else Remove_Args (Number)); |
7d827255 AC |
67 | Arg : aliased String (1 .. Len_Arg (Num)); |
68 | begin | |
69 | Fill_Arg (Arg'Address, Num); | |
70 | return Arg; | |
71 | end; | |
d23b8f57 RK |
72 | end Argument; |
73 | ||
74 | -------------------- | |
75 | -- Argument_Count -- | |
76 | -------------------- | |
77 | ||
78 | function Argument_Count return Natural is | |
79 | begin | |
8ce9496f SB |
80 | return |
81 | (if not Initialized then 0 -- RM A.15 (11) | |
82 | elsif Remove_Args = null then Arg_Count - 1 | |
83 | else Remove_Count | |
84 | ); | |
d23b8f57 RK |
85 | end Argument_Count; |
86 | ||
fbf5a39b AC |
87 | ----------------- |
88 | -- Initialized -- | |
89 | ----------------- | |
90 | ||
91 | function Initialized return Boolean is | |
92 | gnat_argv : System.Address; | |
93 | pragma Import (C, gnat_argv, "gnat_argv"); | |
94 | ||
95 | begin | |
96 | return gnat_argv /= System.Null_Address; | |
97 | end Initialized; | |
98 | ||
d23b8f57 RK |
99 | ------------------ |
100 | -- Command_Name -- | |
101 | ------------------ | |
102 | ||
103 | function Command_Name return String is | |
d23b8f57 | 104 | begin |
8ce9496f SB |
105 | pragma Annotate (Gnatcheck, Exempt_On, "Improper_Returns", |
106 | "early returns for performance"); | |
fbf5a39b AC |
107 | if not Initialized then |
108 | return ""; | |
109 | end if; | |
110 | ||
111 | declare | |
112 | Arg : aliased String (1 .. Len_Arg (0)); | |
113 | ||
114 | begin | |
115 | Fill_Arg (Arg'Address, 0); | |
116 | return Arg; | |
117 | end; | |
8ce9496f | 118 | pragma Annotate (Gnatcheck, Exempt_Off, "Improper_Returns"); |
d23b8f57 RK |
119 | end Command_Name; |
120 | ||
121 | end Ada.Command_Line; |