(This post is related to two earlier posts by me, "Linking Ada to
Pascal" and 'Where is documentation for "new argument to
_p_initialize (@)" PCStrings.')
I have not been able to solve the problem when calling _p_initialize
from Ada. I still get the Ada compiler telling me, "too many
arguments in call." I suspect that I might be passing the wrong
_kinds_ of arguments but not the wrong number.
Here are the three relevant files:
<file adacallspascal.adb>
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Command_Line; use Ada.Command_Line;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure adacallspascal is
procedure mypascalprocedure;
pragma Import(Convention => C, Entity => mypascalprocedure);
procedure init_pascal_main_program;
pragma Import(Convention => C, Entity => init_pascal_main_program,
External_Name => "_p__M0_init");
procedure p_initialize;
pragma Import(Convention => C, Entity => p_initialize,
External_Name => "_p_initialize");
procedure p_finalize;
pragma Import(Convention => C, Entity => p_finalize,
External_Name => "_p_finalize");
Argument_Count_Plus_1 : integer := Argument_Count + 1;
Command_Name_String : string := Command_Name;
C_Command_Name_String : aliased string := Command_Name_String &
ASCII.NUL;
begin
Put_Line ("Hello from adacallspascal.");
Put(Argument_Count_Plus_1); New_Line;
Put_Line(Command_Name_String);
-- Initialize the Pascal RTS.
p_initialize (Argument_Count_Plus_1,
C_Command_Name_String'access, null, 0); -- Line 29
init_pascal_main_program;
mypascalprocedure;
p_finalize;
Put_Line ("Goodbye from adacallspascal.");
end adacallspascal;
<file mypascalprogram.pas>
program mypascalprogram(input, output);
{$gpc-main=dummy}
procedure mypascalprocedure; attribute( name =
'mypascalprocedure');
begin
writeln('Hello from mypascalprocedure.');
end;
begin
{When exported to Ada, this part should not be called.}
writeln('In mypascalprogram; error if calling from Ada.');
end.
<The commands>
gpc -c mypascalprogram.pas
gnatmake adacallspascal.adb -gnatf -largs mypascalprogram.o /
Developer/Pascal/gpc344d2/lib/gcc/powerpc-apple-darwin8/3.4.4/libgpc.a
<Output from attempting to compile>
gcc -c -gnatf adacallspascal.adb
adacallspascal.adb:29:05: too many arguments in call
gnatmake: "adacallspascal.adb" compilation error
Jerry