From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00,MSGID_SHORT autolearn=no autolearn_force=no version=3.4.5-pre1 Date: 18 Sep 91 23:54:02 GMT From: agate!bionet!uwm.edu!cs.utexas.edu!qt.cs.utexas.edu!zaphod.mps.ohio-state .edu!caen!uflorida!kluge!scs!mackey@ucbvax.Berkeley.EDU Subject: Re: VAX Ada question. Message-ID: <4590@kluge.fiu.edu> List-Id: In article <1991Sep18.043715.13529@ennews.eas.asu.edu> yhartojo@enuxha.eas.asu. edu (Francis Hartojo) writes: > > Hi netters, I just have one quick question and it should be trivial for >VAX Ada experts. > > I want to invoke a command line string from an Ada program, how can I >do that? I mean what package should I use? And exactly which procedure will >allow me to do it? > > I am sorry if turns out that there are more than one question. Any >help, suggestion will be greatly appreciated. > >n.b.: if you guys do not mind, I have one additional question (believe me, > this time there is really only one), how do you handle command line > parameters in VAX Ada? > >-- >Francis Hartojo | DECnet: ENVMSA::YHARTOJO > | Bitnet: AUYXH@ASUACVAX.BITNET >Comp. Science & Engr. Department | Internet: YHARTOJO@ENVMSA.EAS.ASU.EDU >Arizona State University | Phone: (602) 921-1342 -- -- VMS RTL_Routines LIB$ LIB$GET_FOREIGN -- ===================================== -- -- LIB$GET_FOREIGN requests the calling image's Command Language -- Interpreter (CLI) to return the contents of the "foreign command" -- line that activated the current image. -- -- Format: -- -- LIB$GET_FOREIGN get-str [,user-prompt] [,out-len] -- [,force-prompt] -- -- Arguments: -- -- get-str -- -- VMS usage: char_string -- type: character string -- access: write only -- mechanism: by descriptor -- -- String which LIB$GET_FOREIGN uses to receive the foreign command -- line. The get-str argument is the address of a descriptor pointing -- to this string. If the foreign command text returned was obtained -- by prompting to SYS$INPUT (see the description of force-prompt), the -- text is translated to uppercase so as to be more consistent with -- text returned from the CLI. -- -- user-prompt -- -- VMS usage: char_string -- type: character string -- access: read only -- mechanism: by descriptor -- -- Optional user-supplied prompt for text which LIB$GET_FOREIGN uses if -- no command-line text is available. The user-prompt argument is the -- address of a descriptor pointing to the user prompt. If omitted, no -- prompting is performed. It is recommended that user-prompt be -- specified. If user-prompt is omitted and if no command-line text is -- available, a zero-length string will be returned. -- -- out-len -- -- VMS usage: word_unsigned -- type: word (unsigned) -- access: write only -- mechanism: by reference -- -- Number of bytes written into get-str by LIB$GET_FOREIGN, not -- counting padding in the case of a fixed-length get-str. The out-len -- argument is the address of an unsigned word into which -- LIB$GET_FOREIGN writes the number of bytes. -- -- force-prompt -- -- VMS usage: longword_signed -- type: longword integer (signed) -- access: modify -- mechanism: by reference -- -- Value which LIB$GET_FOREIGN uses to control whether or not prompting -- is to be performed. The force-prompt argument is the address of a -- signed longword integer containing this value. If the low bit of -- force-prompt is zero, or if force-prompt is omitted, prompting is -- done only if the CLI does not return a command line. If the low bit -- is 1, prompting is done unconditionally. If specified, force-prompt -- is set to 1 before returning to the caller. -- package FOREIGN_COMMAND_LINE is procedure Get_Foreign( Condition : out integer; Command_Line : out string; User_Prompt : in string; Command_Length : out short_integer; Force_Prompt : in out integer ); pragma interface( system, Get_Foreign ); pragma import_valued_procedure( Get_Foreign, "LIB$get_foreign", ( integer, string, string, short_integer, integer ), ( value, descriptor, descriptor, reference, reference )); function Get_Foreign( Prompt : string := "Argument: " ) return string; -- This simplified form is normally easier to use. Foreign_Command_Line_Exception : exception; end FOREIGN_COMMAND_LINE; package body FOREIGN_COMMAND_LINE is function Get_Foreign( Prompt : string := "Argument: " ) return string is Argument_Line : string(1..512); Argument_Length : short_integer; Condition : integer; Force_Prompt : integer := 0; begin Get_Foreign( Condition, Argument_Line, Prompt, Argument_Length, Force_Prompt ); if Condition rem 2 = 0 then -- VMS success codes are always odd. -- So if the code is a failure, we must ... raise Foreign_Command_Line_Exception; end if; return Argument_Line( 1.. integer( Argument_Length )); end Get_Foreign; end FOREIGN_COMMAND_LINE; -- -- The following program is used to illustrate the use of the VMS -- facility which accesses the command line parameters. For proper -- installation of this command, the following DCL command should be -- used prior to running this program: -- $ Get_Foreign :== $SYS$SERDAC:[COMPSCI.MACKEY]GET_FOREIGN -- or whatever the complete path to the .EXE file actually is. The -- command is then used as follows, for example: -- $ Get_Foreign /this is a parameter list. -- If the run command is used to execute this program, a prompt will -- always be given to request the command line. -- with TEXT_IO, FOREIGN_COMMAND_LINE; use TEXT_IO, FOREIGN_COMMAND_LINE; procedure Get_Foreign is Parameter : constant string := Get_Foreign( "Parameters: " ); begin put_line( "System_parameters: ``" & Parameter & "''" ); end Get_Foreign; -- -- Wesley Mackey, Ph.D., Lecturer and Laboratory Director -- School of Computer Science, ECS-359, University Park Campus -- Florida International University, Miami, FL 33199 -- Phone: 305-348-2744 (x2012), FAX: 305-348-3549 -- E-mail: Mackey@servax.bitnet, Mackey@fiu.edu --