]> git.armaanb.net Git - gen-shell.git/blobdiff - src/Sarge/ada/src/sarge.ads
added argument parsing with Sarge
[gen-shell.git] / src / Sarge / ada / src / sarge.ads
diff --git a/src/Sarge/ada/src/sarge.ads b/src/Sarge/ada/src/sarge.ads
new file mode 100644 (file)
index 0000000..8ecb484
--- /dev/null
@@ -0,0 +1,55 @@
+--     sarge.ads - Specification file for the Sarge command line argument parser project.
+       
+--     Revision 0
+       
+--     Notes:
+--                     -
+                        
+--     2019/04/10, Maya Posch
+
+
+with Ada.Strings.Unbounded;
+use Ada.Strings.Unbounded;
+with Ada.Containers.Vectors;
+with Ada.Containers.Indefinite_Ordered_Maps;
+use Ada.Containers;
+
+
+package Sarge is 
+       type Argument is record
+               arg_short: aliased Unbounded_String;
+               arg_long: aliased Unbounded_String;
+               description: aliased Unbounded_String;
+               hasValue: aliased boolean := False;
+               value: aliased Unbounded_String;
+               parsed: aliased boolean := False;
+       end record;
+       
+       type Argument_Access is access all Argument;
+       
+       procedure setArgument(arg_short: in Unbounded_String; arg_long: in Unbounded_String; desc: in Unbounded_String; hasVal: in boolean);
+       procedure setDescription(desc: in Unbounded_String);
+       procedure setUsage(usage: in Unbounded_String);
+       function parseArguments return boolean;
+       function getFlag(arg_flag: in Unbounded_String; arg_value: out Unbounded_String) return boolean;
+       function exists(arg_flag: in Unbounded_String) return boolean;
+       function getTextArgument(index: in Integer; value: out Unbounded_String) return boolean;
+       procedure printHelp;
+       function flagCount return integer;
+       function executableName return Unbounded_String;
+       
+private
+        function "+"(S : in String) return Unbounded_String renames Ada.Strings.Unbounded.To_Unbounded_String;
+       package arg_vector is new Vectors(Natural, Argument);
+       args: arg_vector.vector;
+       --package argNames_map is new Indefinite_Ordered_Maps(Unbounded_String, Argument_Access);
+       package argNames_map is new Indefinite_Ordered_Maps(Unbounded_String, Natural);
+       argNames: argNames_map.map;
+       parsed: boolean;
+       flagCounter: Integer := 0;
+       execName: Unbounded_String;
+       description: Unbounded_String;
+       usageStr: Unbounded_String;
+       package tArgVector is new Vectors(Natural, Unbounded_String);
+       textArguments: tArgVector.vector;
+end Sarge;