Hi @[EMAIL PROTECTED]
all,
I'm a beginner in Ada and have the following problem:
- I'm using GNAT 4.3 on a MacOS X 10.4. and develop on the
OpenFirmware Interface.
- To connect to the Firmware, the IEEE 1275 define an Procedure call-
methode(), which can have up multiple arguments. IEEE 1275 define call-
method as followed:
IN: [string] method, ihandle, stack-arg1, ..., stack-argP
OUT: catch-result, stack-result1, ..., stack-resultQ
Pushes two less than N-args items, stack-arg1, ..., stack-argP, onto
the Forth data stack, with stack-arg1 on top of the stack, and
executes the package method named method in the instance ihandle as
with $call-method, guarded by catch. Pops the result returned by catch
into catch-result. If that result is nonzero, restore the depth of the
Forth data stack to its depth prior to the execution of call-method.
If that result is zero, pops up to one less than N-returns items,
stack-result1, ..., stack-resultQ, from the Forth data stack into the
returned values ****tion of the argument array, with stack-result1
corresponding to the top of the stack.
N-args and N-returns are stored in the argument array and may be
different for different calls to
call-method. If the number of items X left on the Forth data stack as
a result of the execution of
method is less than N-returns, only stack-result1 ... stack-resultX
are modified; other elements of the returned values ****tion of the
argument array are unaffected. If X is more than N-returns, additional
items are popped from the Forth data stack after setting stack-
result1 ... stack-resultQ so that, in all cases, the execution of call-
method results in no net change to the depth of the Forth data stack.
In C, this is written as followed: static void *of_call(const char
*service, int nargs, int nret, ...), but how can I write such a thing
in Ada?
Any help would be appreciated ... best regards
Kay-Uwe


|