



                                                        Chapter 2
                                                PROGRAM STRUCTURE


OUR FIRST ADA PROGRAM
_________________________________________________________________

The best way to begin our study of Ada is to      ===============
look at a real Ada program, so by whatever means    TRIVIAL.ADA
you have at your disposal, display the Ada        ===============
program named TRIVIAL.ADA on your monitor.  (You
may wish to study the program from a printed
copy.  The READ.ME file included on the distribution diskette
describes a way to print out all of the example files in this
tutorial with line numbers for reference.)

You are looking at the simplest Ada program that it is possible to
write.  Even though it is the simplest, it is a complete executable
program that you will be able to compile and execute after we
discuss a few of the terms and requirements that appear in it.

The word procedure in line 1 is the first of the reserved words we
will look at.  Until we reach a much later point in this tutorial,
we will simply say that a procedure is a program.  In this case,
therefore, the program is defined by the reserved word procedure
followed by the program name and another reserved word is.
Following the reserved word is, we have the actual program
extending to line 5.  The reserved word is therefore, is saying
that the program (or procedure) which is named Trivial is defined
as everything that follows.

The program name, in this case Trivial, must be selected by
following all of rules given in chapter 1 for naming an identifier.
In addition to those rules, it cannot be a reserved word.


WHERE IS THE ACTUAL PROGRAM?
_________________________________________________________________

There are two portions of any Ada program, a declarative part,
which is contained between the reserved words is and begin, and the
executable part which is contained between the reserved words begin
and end.  In this particular case, there is no declarative part,
and the executable part consists of line 4.  (We will return to
line 4 shortly.)  Following the reserved word end is a repeat of
the program name and a semicolon.  Repeating the program name is
optional but you should get into the habit of including it at the
end of every program.  The semicolon is required to end the
program.

The actual program, the executable part, is line 4 since that is
the only statement between the begin and end reserved words.  In

                                                         Page 2-1

                                    Chapter 2 - Program Structure

this case we wanted to study the simplest Ada program possible so
we wanted the program to do nothing.  We explicitly tell the Ada
compiler to do nothing which is the definition of our fifth
reserved word null in line 4.  Ada demands that you explicitly tell
it that you really mean to do nothing rather than simply leaving
the executable part of the program blank which would be acceptable
in most other languages.


WHAT IS A STATEMENT TERMINATOR?
_________________________________________________________________

Line 4 ends with a semicolon which is a statement terminator in
Ada.  It tells the compiler that this particular statement is
complete at this point.  Later in this chapter you will see why the
statement terminator is required.  The semicolon at the end of the
procedure is also a statement terminator since a procedure, and
hence the entire program, is defined as a complete statement in
Ada.  Lines 10 and 12 are Ada comments and will be ignored by the
compiler.  A complete definition of Ada comments will be given at
the end of this chapter.  All example programs in this tutorial
will give you the results of execution at the end of the program
in this manner.

It should be clear that a complete Ada program uses at least the
four reserved words to define the beginning and end of each of the
fields and they must come in the given order.  Of course many other
things can be included in the declarative part and the executable
part which we will see during the remainder of this tutorial.

The program outline can be given as follows;

     procedure <program name> is
        <declarative part>
     begin
        <executable part>
     end <optional repeat of program name>;

At this point it would be wise for you to compile and run this
program to see that it truly does obey all the rules of the Ada
compiler.  Unfortunately, it does absolutely nothing, so running
it will give you no results.  Even though this program does
nothing, any good Ada compiler will allow you to compile, link,
load, execute, and properly terminate execution of this program.


NOW FOR A PROGRAM THAT DOES SOMETHING
_________________________________________________________________

Observe the program named SOMEOUT.ADA for an      ===============
example program that really does something.         SOMEOUT.ADA
Ignore the first two lines for the time being,    ===============
they are needed to tell the system how to output
data to the monitor, and we will study them in

                                                         Page 2-2

                                    Chapter 2 - Program Structure

a later lesson.  Considering only lines 4 through 10, you will see
exactly the same structure used in the last program with a
different program name and something new in line 8.

Line 8 is a call to a procedure named Put which is supplied with
your Ada compiler as a convenience for you.  It is very precisely
defined so that you can use it to display text on your monitor.
The string of characters contained within the parentheses and
quotation marks will be displayed on your monitor when you compile
and execute this program.  The procedure named Put is actually a
part of an external library named Text_IO which is why the first
two lines are included in this program.  They tell the system where
to find the procedure named Put, and how to use it.  (We will
discuss these two lines in great detail later in this tutorial.)

Once again, the executable statement is followed by a semicolon as
the statement terminator in the same manner that the reserved word
null was followed by a semicolon in the last program.

Compile and execute this program and observe that the phrase in
line 8 is displayed on the monitor each time you execute the
program.



A LITTLE MORE OUTPUT
_________________________________________________________________

Examine the program named MOREOUT.ADA, and you    ===============
will see a few differences from the last two        MOREOUT.ADA
example programs.  Observe that the program name  ===============
is not repeated in the last line of the program.
This is optional as we stated earlier, but it is
a good practice to include the name.

The second, and most obvious difference, is the fact that there are
nine executable statements in this program.  The nine statements,
as with most other procedural programming languages, are executed
in sequential order from top to bottom.  The lines with calls to
the procedure Put are executed just like the last program except
a new operation becomes apparent here because we have multiple Put
calls.  The Put call does not cause the cursor to return to the
beginning of a line following output of the line of text.  The
cursor simply stays where it ends up at, resulting in lines 8 and
9 being output on the same line of the monitor.  Another new
procedure, at least new to us, is named New_Line and this procedure
causes the cursor to be returned to the beginning of the next line
of the monitor.  In fact, you can even include an optional number
within parentheses following the procedure name, and the cursor
will be moved down that number of lines.  This is illustrated in
lines 12 and 14, and if the optional number is omitted a value of
1 is assumed.



                                                         Page 2-3

                                    Chapter 2 - Program Structure

Note carefully that the procedure names used here, Put and
New_Line, meet all of the requirements for naming an identifier
which we studied in chapter 1.  These names were selected by the
Ada language definition committee.

Lines 16 and 17 introduce another useful procedure, named Put_Line,
which causes an automatic "carriage return" to be output after the
string within the parentheses is output.  You will find this to be
very useful, and should begin using it immediately.  The blank line
in line 15 is ignored by the Ada compiler.  More will be said about
this in the next two example programs.



HOW DID WE NAME THE IDENTIFIERS?
_________________________________________________________________

We have the option of naming our program any name we wish as long
as we obey all of the rules of naming an identifier listed in
Chapter 1 of this tutorial.  We also have a restriction on the
program name because of the way Ada compiles and links a program.
In order to meet all of the requirements as specified in the
Language Reference Manual (LRM), a compiler must generate some form
of intermediate files containing object and type information.  Any
particular Ada compiler may use a naming convention for the
intermediate files based on the program name we supply, or the file
name we supply, so in order to avoid confusion, the same name will
be used in both places throughout most of this tutorial.  We
therefore have an arbitrary limit of eight characters which can be
used for the program name if MS-DOS is being used for this
tutorial.  (Note that your particular Ada compiler may not have
this limitation.)

With the above information, you should be able to figure out what
this program will do.  Compile and run it to see if you are correct
in your analysis.



CONSIDER THE STYLE OF ADA PROGRAMMING
_________________________________________________________________

Observe the program named GOODFORM.ADA and you   ================
will see a familiar form, and a very clear and     GOODFORM.ADA
easy to understand Ada program.  You should have ================
no problem at all understanding what this
program does.  You should observe that Ada
programming is free form, allowing you to add spaces and blank
lines anywhere you wish to make the program clear and easy to
understand, provided of course that you do not split up an
identifier.

Once again, don't worry about the first two lines, we will discuss
them later.

                                                         Page 2-4

                                    Chapter 2 - Program Structure



After compiling and executing GOODFORM.ADA,      ================
observe the next example program named             UGLYFORM.ADA
UGLYFORM.ADA for an example of terrible          ================
formatting style.  See if you can figure out
what this program does then decide if you would
like to debug it if a problem should surface.  Finally, compile and
run this program and you will find that it actually does compile
and execute, doing exactly what the last program did.

These two programs were intended to give you an idea of the amount
of freedom you have in formatting style when writing an Ada program
and the amount of information the style can add to a program.



COMMENTS IN AN ADA PROGRAM
_________________________________________________________________

Examine the program named COMMENTS.ADA for an    ================
example of how comments are added to an Ada        COMMENTS.ADA
program.  Comments convey no information to the  ================
computer, they only aid the writer and reader of
the program to understand what the original
writer was trying to do within the program.  All comments in Ada
begin with a double minus sign, or double dash if you prefer, and
continue to the end of that line.  No spaces are allowed between
the dashes, they must be adjacent.  There is no provision for
middle-of-line comments in the Ada language, only end-of-line,
although they can be an entire line as in the first two lines in
the example program.

Comments can be placed nearly anywhere in an Ada program, including
prior to the program, and following the end of it.  The example
program gives many illustrations of where comments can go and it
will be left to your study.  Note that line 16 is not an executable
statement since it is commented out.  As with all programs in this
tutorial, this one is executable, so you should compile and execute
it at this time.

One other point must be made.  This example program is not meant
to be an illustration of good commenting style, only an indication
of where comments can go.  It is actually a very choppy looking
program, and is not at all clear.


PROGRAMMING EXERCISES
_________________________________________________________________

1.   Write a program to display your name on the monitor.

2.   Write a program to display your name, address, and phone
     number on different lines of the monitor.

                                                         Page 2-5