comp.lang.ada
 help / color / mirror / Atom feed
* Rational A.5 Command Line and HTML
@ 1999-12-04  0:00 Robert C. Leif, Ph.D.
  0 siblings, 0 replies; only message in thread
From: Robert C. Leif, Ph.D. @ 1999-12-04  0:00 UTC (permalink / raw)
  To: Comp. Lang. Ada, Team-Ada

From: Bob Leif
To: Readers of Comp.Lang.Ada and Team-Ada

Disclaimer: Although, I had this problem with an ObjectAda compiler, it is
neither a bug or a design error. It is an Ada problem and therefore relevant
to these forums.

There is now obvious interest in XML-HTML. In fact, concerning the presently
popular subject, "What the competition looks like". There will and probably
are now more individuals conversant with HTML-XML than any of the present
programming languages. The tools to build web-pages will have a very large
market compared to any programming language development system.

One major impediment to interfacing with HTML is in the package
Ada.Command_Line. The HTML statement,
<FORM method="Get" action="file:///C:\Ada_Work/com_line.exe"> is a
reasonable key to this problem. It produces a Command_Line string and does
invoke the com_line program shown below. Unfortunately,
Command_Line.Argument_Count does not work with the Command_Line string.
The Get method concatenates a '?' directly after the program name.
----------------------------------------------------------------
HTML 4.01 Specification
W3C Proposed Recommendation
This version:
http://www.w3.org/TR/1999/PR-html40-19990824
(plain text [786Kb], gzip�ed tar archive of HTML files [367Kb], a .zip
archive of
HTML files [400Kb], gzip�ed Postscript file [740Kb, 387 pages], a PDF file
[3Mb])
17.13.3 Processing form data, Page 247

"However, HTML 4.01 user agents must support
the established conventions in the following cases:
If the method is "get" and the action is an HTTP URI, the user agent takes
the value of action, appends a �?� to it, then appends the form data set
[p.246] ,encoded using the "application/x-www-form-urlencoded" content type
[p.247] .The user agent then traverses the link to this URI. In this
scenario, form data are restricted to ASCII codes."
--------------------------------------------------------------
I have included a very simple HTML Form (Com_Line_Small) below. It produces
the equivalent of "C:\Ada_Work\com_line.exe?TEST=Hello".
I proved under Windows that this did not work with a Com_line.Bat batch
program with the line above as its only text. However, the simple insertion
of a space between the program and the '?' works.
C:\Ada_Work\com_line.exe ?TEST=Hello

The output of my com_line_small.Bat is as follows:

C:\Ada_Work\com_line_Small.exe?TEST=Hello
The DOS Window shows: Bad command or file name

However, the program does run when actuated through the HTML form; with the
number of arguments equal to 0.
C:\Ada_Work\com_line.exe equals the Command_Line
This Program is Com_Line

The number of arguments =  0
-----------------------------------------------

C:\Ada_Work>C:\Ada_Work\com_line.exe ?TEST=Hello
The DOS Window shows that the program has executed

C:\ADA_WORK\COM_LINE.EXE equals the Command_Line
The number of arguments =  1
Argument  1 is ?TEST=Hello

I do not believe this is the fault of the ObjectAda compiler.
The Ada 95 LRM really does not define what a command line is. The Rationale
on page A-32 states:
A:5 Command Line
"The package Ada.Command_Line provides an Ada program with a simple means of
accessing any arguments of the command which invoked it. The package also
enables the program to set a return status. Clearly the interpretation of
these facilities depends very much on the underlying operating system."

The question is which operating system, Windows or HTTP? The above problem
is neither a bug nor a design mistake. It is correct for its intended use,
Windows. However, it does not work with HTTP. I do believe in hindsight that
a function that returns the entire command_line including the program name
should be added. In view of the significance of HTML-XML, I believe that it
would be worthwhile to modify the Aonix Command_Line or any other Ada
compiler to work with the output of HTML Get.

Can any of the Ada compilers read and process a command_line that does NOT
have a space after the name of the executable? If you wish to test this,
please feel fee to use the Ada program and HTML page below.

----------------------------------------------------------
--Robert C. Leif, Ph.D & Ada_Med

--2 Dec. 1999
--Last update 3 Dec. 1999

--File name Com_Line_Small.Adb

--e-mail rleif@rleif.com

with Ada.Text_Io;
with Ada.Exceptions;
with Ada.Command_Line;
with Interfaces.C.Strings;
procedure Com_Line_Small is
  Prog_Location : constant String := "Com_Line_Small";
  package T_Io renames Ada.Text_Io;
  package Command_Line renames Ada.Command_Line;
  Num_Args : Natural := 1;
  --Com_Line_Var : String    := Command_Line.Command_Name;
  Exit_Char : Character := 'x';
  ------------------------------------------------------------------
  --sugested by Randy Brukardt
  function Get_Command_Line return Interfaces.C.Strings.Chars_Ptr;
  pragma Import (
    Convention    => Win32,
    Entity        => Get_Command_Line,
    External_Name => "GetCommandLineA");
  ----------------------------------------------------------------
begin --Com_Line_Small
  --then Call:
  T_Io.Put_Line("Windows way (Randy Brukardt) to get the Command_Line:");
  T_Io.Put_Line(Interfaces.C.Strings.Value(Get_Command_Line));
  --returns a string

  Num_Args := Command_Line.Argument_Count;
  T_Io.Put_Line("");
  T_Io.Put_Line("Ada way to get the Command_Line:");
  T_Io.Put_Line(Command_Line.Command_Name);
  T_Io.Put_Line("This Program is " & Prog_Location);
  T_Io.Put_Line("");
  T_Io.Put_Line("The number of arguments = "
    & Natural'Image(Num_Args));

  if Num_Args >= 1 then
    for I in 1..Num_Args loop
      T_Io.Put_Line("Argument "  & Natural'Image(I) & " is "
        & Command_Line.Argument (Number => I));
    end loop;
  end if;
  T_Io.Put_Line("Ending Com_Line_Small Test program");
  T_Io.Put_Line("Ending " & Prog_Location);
  T_Io.Get(Exit_Char);
exception
  when O: others  =>
    T_Io.Put_Line(Ada.Exceptions.Exception_Information (O));
    T_Io.Put_Line(Ada.Exceptions.Exception_Message (O));

end Com_Line_Small;
----------------------------------------------------------------
Output:

Windows way (Randy Brukardt) to get the Command_Line:
"C:\Ada_Work\com_line_small.exe"

Ada way to get the Command_Line:
C:\Ada_Work\com_line_small.exe
This Program is Com_Line_Small

The number of arguments =  0
Ending Com_Line_Small Test program
Ending Com_Line_Small
---------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
	<HEAD>
		<TITLE>
			Com_Line_Small Test
		</TITLE>
		<meta http-equiv="Content-Type" content="text/html;
		charset=Latin1">

		<meta http-equiv="Content-Language" content="en-us">

		<base  href="C:\Ada_Work">
	</HEAD>
	<BODY aLink=#ff0000 background="" bgColor=#ffffff link=#0000ff
		text=#000000 vLink=#800080>

		<!--How do I get the string named test into the-->
		<!--command line of HTML_Ada?-->
		<OBJECT classid="File:///C:\Ada_Work\com_line_Small.exe"
			height=40 width=40 title=Com_Line>
			<PARAM NAME="TEST" VALUE="Hello">
		</OBJECT>

		<FORM method="Get"
			action="file:///C:\Ada_Work/com_line_Small.exe">

			<p>
			<input TYPE="text" NAME="TEST" SIZE="10" MAXLENGTH="15"
			VALUE="Hello">
			</p>


			<INPUT type=submit value="Submit Form">
			<INPUT name=Reset type=reset value="Reset Form">

		</FORM>
	</BODY>
</HTML>








^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~1999-12-04  0:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-12-04  0:00 Rational A.5 Command Line and HTML Robert C. Leif, Ph.D.

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox