diff --git a/comp/src/gb.args/.component b/comp/src/gb.args/.component index 63ac1873c..8e35be858 100644 --- a/comp/src/gb.args/.component +++ b/comp/src/gb.args/.component @@ -1,4 +1,4 @@ [Component] Key=gb.args -Version=3.14.90 +Version=3.15.90 Authors=Benoît Minisini diff --git a/comp/src/gb.args/.project b/comp/src/gb.args/.project index 3f293691b..c1484bdf7 100644 --- a/comp/src/gb.args/.project +++ b/comp/src/gb.args/.project @@ -1,10 +1,11 @@ # Gambas Project File 3.0 Title=gb.args Startup=MMain -Version=3.14.90 +Version=3.15.90 VersionFile=1 Authors="Benoît Minisini" -Arguments=[["-V","-p","toto","zozo","-s","512","--","project"]] +Arguments=[["-V","-p","toto","zozo","-s","512","--","project"],["--help"]] +CurrentArgumentList=["--help"] TabSize=2 Translate=1 Language=en diff --git a/comp/src/gb.args/.src/Args.module b/comp/src/gb.args/.src/Args.module index 3a96bc60a..65fd48e7d 100644 --- a/comp/src/gb.args/.src/Args.module +++ b/comp/src/gb.args/.src/Args.module @@ -6,6 +6,8 @@ Private $cArg As Collection Private $aRest As Integer[] Private $aHelp As String[] Private $sUsage As String +Private $bManualVersion As Boolean +Private $bManualHelp As Boolean Private Sub Abort(sErr As String) @@ -70,21 +72,18 @@ Public Sub End() As String[] Dim aRest As New String[] Dim I As Integer - If Has("V", "version", ("Display version")) Then - Print Application.Version - Quit + If Not $bManualVersion Then + If Has("V", "version", ("Display version")) Then + Print Application.Version + Quit + Endif Endif - If Has("h", "help", ("Display this help")) Then - If $sUsage Then - Print $sUsage - Else - Print Subst(("Usage: &1 "), Application.Title) + If Not $bManualHelp Then + If Has("h", "help", ("Display this help")) Then + HelpText(True) + Quit Endif - Print - Print ("Options:") - Print $aHelp.Join("\n") - Quit Endif If $cArg.Count Then @@ -101,6 +100,31 @@ Public Sub End() As String[] End +'' Get the default help message.
Must be used **after** Args.Begin()\ +'' Returns the message text and will Print to stdout if boolean arg PrintText is True. +Public Sub HelpText(Optional PrintText As Boolean) As String + +If Not $aHelp Then + Abort(("Error: Args.Helptext() must be called after the command Args.Begin()")) +Endif + + Dim sVar As String + If $sUsage Then + sVar &= $sUsage & "\n" + Else + sVar &= Subst(("Usage: &1 "), Application.Title) & "\n" + Endif + + sVar &= "\n" & ("Options:") & "\n" + sVar &= $aHelp.Join("\n") + + If PrintText Then Print sVar + + Return sVar + +End + + Private Sub GetKey(ShortName As String, LongName As String) As String Dim sKey As String @@ -140,6 +164,12 @@ Public Sub Has(ShortName As String, LongName As String, Optional Description As AddHelp(ShortName, LongName, Description) + If ShortName = "V" Then + $bManualVersion = True + Else If ShortName = "h" Then + $bManualHelp = True + Endif + vShort = $cArg["-" & ShortName] vLong = $cArg["--" & LongName] @@ -152,18 +182,18 @@ Public Sub Has(ShortName As String, LongName As String, Optional Description As End -Public Sub Get(ShortName As String, LongName As String, Optional Description As String, Optional ArgName As String) As String +Public Sub Get(ShortName As String, LongName As String, Optional Description As String, Optional ArgName As String, Optional {Default} As String) As String Dim sKey As String = GetKey(ShortName, LongName) Dim vShort, vLong As Variant - If Not sKey Then Return + If Not sKey Then Return {Default} AddHelp(ShortName, LongName, Description, ArgName) vShort = $cArg["-" & ShortName] vLong = $cArg["--" & LongName] - If IsNull(vShort) And If IsNull(vLong) Then Return "" + If IsNull(vShort) And If IsNull(vLong) Then Return {Default} If TypeOf(vShort) = gb.Boolean Then Abort(Subst("argument missing for option -&1", ShortName)) If TypeOf(vLong) = gb.Boolean Then Abort(Subst("argument missing for option --&1", LongName)) @@ -182,6 +212,8 @@ Public Sub Get(ShortName As String, LongName As String, Optional Description As Return Args[vLong] Endif + Return {Default} + End Public Sub GetInteger(ShortName As String, LongName As String, Optional Description As String, Optional ArgName As String, Optional {Default} As Integer) As Integer diff --git a/comp/src/gb.args/.src/MMain.module b/comp/src/gb.args/.src/MMain.module index 9adaf06d1..ab13969c1 100644 --- a/comp/src/gb.args/.src/MMain.module +++ b/comp/src/gb.args/.src/MMain.module @@ -3,13 +3,19 @@ Public Sub Main() Dim iStack As Integer - + Args.Begin() '"Usage: gbx3 \n gbx3 -e ") Args.Has("k", "no-unload", "Do not unload shared libraries") Args.Get("p", "profile", "Activate profiling mode", "path") iStack = Args.GetInteger("s", "stack-size", "Stack size [256]", "kilobytes", 256) - + + If Args.Has("h", "help", "custom help") Then + Print "I CAN PREFIX....." + Print Args.HelpText() + Print "I CAN SUFFIX..." + Endif + Print Args.End().Join(",") Print iStack