You can see that a procedure only needs to be written once, and can then be invoked as many times as necessary. The resultant shortening of the program is one of the benefits of procedures.
--------------------------------------------------------
-- Write "ADA" in large letters
-- Skansholm, section 2.4.4, page 44
--------------------------------------------------------
with TEXT_io;
use TEXT_IO;
procedure GIANT_ADA is
begin
-- draw a giant "A"
new_line;
put_line (" * ");
put_line (" * * ");
put_line (" * * ");
put_line (" ******* ");
put_line (" * * ");
put_line ("* *");
new_line;
-- draw a giant "D"
new_line;
put_line (" ******* ");
put_line (" * * ");
put_line (" * * ");
put_line (" * * ");
put_line (" * * ");
put_line (" * * ");
put_line (" ******* ");
new_line;
-- draw a giant "A"
new_line;
put_line (" * ");
put_line (" * * ");
put_line (" * * ");
put_line (" ******* ");
put_line (" * * ");
put_line ("* *");
new_line;
end GIANT_ADA;
--------------------------------------------------------
-- Write "ADA" in large letters
-- Skansholm, section 2.4.4, page 46
--------------------------------------------------------
with TEXT_io;
use TEXT_IO;
procedure GIANT_ADA is
procedure DRAW_GIANT_A is
begin
-- draw a giant "A"
new_line;
put_line (" * ");
put_line (" * * ");
put_line (" * * ");
put_line (" ******* ");
put_line (" * * ");
put_line ("* *");
new_line;
end DRAW_GIANT_A;
procedure DRAW_GIANT_D is
begin
-- draw a giant "D"
new_line;
put_line (" ******* ");
put_line (" * * ");
put_line (" * * ");
put_line (" * * ");
put_line (" * * ");
put_line (" * * ");
put_line (" ******* ");
new_line;
end DRAW_GIANT_D;
begin -- DRAW_GIANT_ADA
DRAW_GIANT_A;
DRAW_GIANT_D;
DRAW_GIANT_A;
end GIANT_ADA;