IMPLEMENTATION MODULE Args ;


FROM UnixArgs IMPORT ArgC, ArgV ;
FROM ASCII IMPORT nul ;

(* %%%FORWARD%%%
PROCEDURE GetArg (VAR a: ARRAY OF CHAR ; i: CARDINAL) : BOOLEAN ; FORWARD ;
PROCEDURE Narg () : CARDINAL ; FORWARD ;
   %%%FORWARD%%% *)

CONST
   MaxArgs   =  255 ;
   MaxString = 4096 ;


(*
   Source allows us to examine the ArgV contents.
*)

VAR
   Source: POINTER TO ARRAY [0..MaxArgs] OF
           POINTER TO ARRAY [0..MaxString] OF CHAR ;


(*
   GetArg - returns the nth argument from the command line.
            The success of the operation is returned.
*)

PROCEDURE GetArg (VAR a: ARRAY OF CHAR; i: CARDINAL) : BOOLEAN ;
VAR
   High,
   j   : CARDINAL ;
BEGIN
   j := 0 ;
   High := HIGH(a) ;
   IF i<ArgC
   THEN
      Source := ArgV ;
      WHILE (Source^[i]^[j]#nul) AND (j<High) DO
         a[j] := Source^[i]^[j] ;
         INC(j)
      END
   END ;
   IF j<=High
   THEN
      a[j] := nul
   END ;
   RETURN( i<ArgC )
END GetArg ;


(*
   Narg - returns the number of arguments available from
          command line.
*)

PROCEDURE Narg () : CARDINAL ;
BEGIN
   RETURN( ArgC )
END Narg ;


END Args.