::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
class Program.Argument.Public public Gilda: Library interface.
type Program.Argument is &Library used by generated parameter lists
Position word, &Position of the next argument to parse
Max word, &Last argument to convert
@List[?] At..byte :Pointer to the next argument to convert
type Signature is &Method or command signature
Verb string, &The verb name; Uppercase if insensitive
Purpose string, &The commands purpose; May have new lines.
Size byte, &Number of parameters (up to 255)
Intrinsic byte, &Index of intrinsic command
@List[1 To Size] Declaration
type Path is Value string
type Tail is Value string :Parameter containing the rest of the line
type Name is Value string
type Name.List is &Parameter that is a list of Gilda names
Value Heap..string
type Path.List is &Parameter that is a list of Dual paths
Value Heap..string
type Type is &Encoded type declaration.
@Type = 0 Key..User.Type, &
User => $Type`Tag, &Failed to resolve with an @
User.Name => $Type`Key, &
Is.User => @$Type > #FFFF, &Structure or enumeration (non-zero).
As.Base => parcel{ @$Type }, &Intrinsic (and non-zero). positive???
Is( .Type ) => @$Type = $.Type, &EQ( @$Type, .b ) to embed???
Byte |= Byte.Type, &Primitive type encodings
Parcel |= Parcel.Type, &
Word |= Word.Type, &
Cell |= Cell.Type, &
String |= String.Type, &
Single |= Single.Type, &
Double |= Double.Type, &
Micro |= Micro.Type, &
Macro |= Macro.Type
type User.Type &User type declaration
is Flag = 0 byte, &Undefined, Numerate, Genuine,
& Big, Dynamic, Record
Align = 0 byte, &Log2( alignment) #FF for natural
& (0 --> BYTE, ..., 126 --> 2^126)
Count = 0 parcel, &Number of fields for this type
&Maximum enumerated type number
Field = 0 word, &First: Heap( Ic.Field, Field - 1 )
&Zero if a range enumeration
Size = 0 word, &Number of bytes (with internal
& padding) for this type.
Is.Numerate => $Flag /\ $Numerate, &Enumerated type
Is.Undefined => $Flag /\ $Undefined, &The type has not been declared.
Is.Genuine => $Flag /\ $Genuine, &Fake types are not allowed.
Is.Dynamic => $Flag /\ $Dynamic, &A structure contains a pointer.
Is.Record => $Flag /\ $Record, &A structure is a record type.
Is.Extended => $Flag /\ $Extended, &In a sequence
Is.Big => $Size _> Big.Size, &Is a big structure
Numerate |= Numerate.Flag, &An enumerated type
Undefined |= Undefined.Flag, &The type has not been declared.
Genuine |= Genuine.Flag, &Fake types are not allowed.
Dynamic |= Dynamic.Flag, &A structure contains a pointer.
Record |= Record.Flag, &A structure is a record type.
Extended |= Extended.Flag :In a sequence
import Key(User.Type),
Declaration
global &This is used for the flag field in declarations for
& class types, and class type fields.
&
Numerate.Flag |= 1, &A structure field is an enumerated type.
Undefined.Flag |= 2, &A structure field is not yet declared.
Genuine.Flag |= 4, &The type is not allowed to be faked.
Dynamic.Flag |= 8, &A structure contains a pointer.
Record.Flag |= #10, &A structure is a record type.
Extended.Flag |= #20, &A structure has extended fields.
Big.Size |= 128 :Largest structure size before treating it as big
global Byte.Type |= 'B', * 66 Encoded Gilda primitive types
Parcel.Type |= 'P', 2 80
Word.Type |= 'W', 9 87
Cell.Type |= 'C', + 67
String.Type |= 'S', 5 83
Single.Type |= '1',  49
Double.Type |= '2',   50
Micro.Type |= '|', C 124
Macro.Type |= '>' :#3E 62
global Bit.Type |= #111, &Encodings for program types
Name.Type |= #222, &
Name.List.Type |= #333, &
Path.Type |= #444, &
Path.List.Type |= #555, &
Tail.Type |= #666
:
;import Type.Integer,
; Type.Real
:
:...............................................................................
:::::::::::::::::::::::: program/argument/Declaration ::::::::::::::::::::::::
:
method SIGNATURE pure: Setup a method call data structure.
change Signature :A signature to be initialized
entry Verb string, &Verb name; Uppercase if insensitive
Parameter[1 To *] Declaration, &Method parameter list to fill in
Intrinsic = 0 byte, &Index of an intrinsic command
Purpose = "" string
:
: The Intrinsic field is used by Intrinsic.Command and passed on to
: Call.Intrinsic so that it can find the address of the method.
:...............................................................................
:
method PARAMETER pure: Append a parameter declaration to a signature.
change Signature :Procedure signature to be updated
entry Name string, &Name of the parameter
Verb Declare, &Kind of parameter
Type, &Parameter's type
Default = "" string, &Default value; a static expression
Purpose = "" string, &Parameter description
Range = "" string, &An optional array range
At = 0 Bit, &A pointer Exit parameter
Import = 0 Bit :Set if an imported value
:
:...............................................................................
:
method ARGUMENT.POSITIONAL: Convert program arguments to positional values.
entry Argc word, &Number of command parameters.
Argv[0] C.String, &Address of the command line text.
Method Signature :Method description.
change Call[1 To *] string :Callers argument list; Bound is Method`Size
exit Help Bit :Set when the "-?" argument is given.
:
:..............................................................................
:
method ASSIGN.LIST: Convert a path or name list field to an Array of Strings.
change Value Heap..string :In - Empty; Out - Set to argument items
entry Argument string :List of values separated by a single semicolon
:
:...............................................................................
:
function FORM..Declaration: Format a variable declaration for display.
entry Declaration[0], &Declaration to format
Format = "" string :Not used
exit Form string :Name ['[' Range ']'] ['=' Default]
:
:...............................................................................
:
function FORM..Type: Format a type declaration for display.
entry Type[0], &Type to format
Format = "" string :'p' or "P" for proper case; else a string format
exit Form string :<User Type Name> | <Primitive Type> | "Not known"
:
:...............................................................................
:
function FORM..User.Type: Format a user defined type declaration.
entry User.Type[0], &User defined type to format
Format = "" string :Not used
exit Form string :'{' "{Flag=#" Flag " Align=" Align
: "Count=" Count " Field=" Field
: " Size=" Size '}'
:...............................................................................
::::::::::::::::::::::: program/argument/Root.Argument :::::::::::::::::::::::
:
method OPEN.CONVERT.LIST: Initialize parameter list conversion.
:
:...............................................................................
:
method CONVERT.INTEGER: Convert a string to a parameter value.
entry Field string, &An integer or an invalid value
Size word :Number of bytes in the parameter type.
exit Parameter cell :Value truncated to fit in the parameter type
:
:...............................................................................
:
function CONVERT.STRING: Convert a string to an argument value.
entry Field At..string :A static string expression
exit Parameter cell :Header of the argument value (zero extended)
:
:...............................................................................
:
method CONVERT.BIT: Convert a string to a parameter value.
entry Field string :0, 1 or an invalid value.
exit Parameter cell :0 or 1
:
:...............................................................................
:
method CONVERT.PATH.LIST: Convert a path list field to an Array of Strings.
: Only one path list per command is allowed.
entry Field string :A list of paths separated by a single semicolon
exit Parameter cell :Header address for the array of strings
:
:...............................................................................
:
method CONVERT.NAME.LIST: Convert a name list field to an Array of Strings.
: Only one name list per command is allowed.
entry Field string :A list of names separated by a single semicolon
exit Parameter cell :Header address for the array of strings
:
:...............................................................................
end