comp.lang.ada
 help / color / mirror / Atom feed
* Create a procedure with multiple arguments ...
@ 2008-01-04 20:28 kug1977
  2008-01-07 10:26 ` Stephen Leake
  2008-01-08  5:23 ` Steve
  0 siblings, 2 replies; 5+ messages in thread
From: kug1977 @ 2008-01-04 20:28 UTC (permalink / raw)


Hi @ 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 portion 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 portion 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



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Create a procedure with multiple arguments ...
  2008-01-04 20:28 Create a procedure with multiple arguments kug1977
@ 2008-01-07 10:26 ` Stephen Leake
  2008-01-07 21:09   ` kug1977
  2008-01-08  5:23 ` Steve
  1 sibling, 1 reply; 5+ messages in thread
From: Stephen Leake @ 2008-01-07 10:26 UTC (permalink / raw)


kug1977@web.de writes:

> Hi @ 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
> <snip>
>
> 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?

The short answer is "you can't".

You can declare several overloaded procedures, each with different
arguments.

-- 
-- Stephe



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Create a procedure with multiple arguments ...
  2008-01-07 10:26 ` Stephen Leake
@ 2008-01-07 21:09   ` kug1977
  0 siblings, 0 replies; 5+ messages in thread
From: kug1977 @ 2008-01-07 21:09 UTC (permalink / raw)


>
> The short answer is "you can't".
>
> You can declare several overloaded procedures, each with different
> arguments.
>
> --
> -- Stephe

I was suspecting an answer like this. 'think is better so, because it
make the language clean and definite. Overloading is a good idea.

Thanks for help ...



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Create a procedure with multiple arguments ...
  2008-01-04 20:28 Create a procedure with multiple arguments kug1977
  2008-01-07 10:26 ` Stephen Leake
@ 2008-01-08  5:23 ` Steve
  2008-01-08 15:22   ` kug1977
  1 sibling, 1 reply; 5+ messages in thread
From: Steve @ 2008-01-08  5:23 UTC (permalink / raw)


<kug1977@web.de> wrote in message 
news:f1400d6d-97a4-4803-946d-b44bc96a15cf@1g2000hsl.googlegroups.com...
> Hi @ 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.

I don't know much about the OpenFirmware interface (other than what I just 
read on Wikipedia) but it appears to be a regular Forth interpreter, and I 
do know something about Forth.  I am guessing that the procedure call you're 
describing is for a C binding to interact with the interpreter.  With a C 
binding it makes sense to set things up with variable argument lists, but it 
won't work that way with Ada.

Have you tried looking into interfacing directly with the interpreter?  Or 
is that where you found the information you are describing.  I would expect 
a direct interface to the forth interpreter to send a string containging a 
sequence of tokens separated by spaces to the interpreter and receive a 
string containing a similar sequence as output.  If that is the case then 
the interface becomes a simple procedure call with an input string and an 
output string.

Regards,
Steve
(The Duck)

> 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 portion 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 portion 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 





^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Create a procedure with multiple arguments ...
  2008-01-08  5:23 ` Steve
@ 2008-01-08 15:22   ` kug1977
  0 siblings, 0 replies; 5+ messages in thread
From: kug1977 @ 2008-01-08 15:22 UTC (permalink / raw)


On 8 Jan., 06:23, "Steve" <nospam_steve...@comcast.net> wrote:
> <kug1...@web.de> wrote in message
>
> news:f1400d6d-97a4-4803-946d-b44bc96a15cf@1g2000hsl.googlegroups.com...
>
>
>
>
>
> > Hi @ 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.
>
> I don't know much about the OpenFirmware interface (other than what I just
> read on Wikipedia) but it appears to be a regular Forth interpreter, and I
> do know something about Forth.  I am guessing that the procedure call you're
> describing is for a C binding to interact with the interpreter.  With a C
> binding it makes sense to set things up with variable argument lists, but it
> won't work that way with Ada.
>
> Have you tried looking into interfacing directly with the interpreter?  Or
> is that where you found the information you are describing.  I would expect
> a direct interface to the forth interpreter to send a string containging a
> sequence of tokens separated by spaces to the interpreter and receive a
> string containing a similar sequence as output.  If that is the case then
> the interface becomes a simple procedure call with an input string and an
> output string.
>
> Regards,
> Steve
> (The Duck)
>
>
>
> > 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 portion 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 portion 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- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -

Yes, you're right. The OpenFirmware is a Forth Interpreter and the
procedure call is for interacting with the OpenFirmware via an
interface. As far as I understud the manuals, the procedures do no
more than calling the Forth interpreter by putting the parameters on
the stack and jump back to OpenFirmware (where this BootLoader is
running in). I'm implementing the procedure with overloading first,
but couldn't test it now (no time in the moment). What you've written
about the space separated tokens make sense, because the OpenFirmware
console is no more the a Unix console, where you type in your commands
seperated by spaces. I'll test this way, if I'm ready with
implementation and will send you a feedback about success.

Regards,
Kay-Uwe



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-01-08 15:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-01-04 20:28 Create a procedure with multiple arguments kug1977
2008-01-07 10:26 ` Stephen Leake
2008-01-07 21:09   ` kug1977
2008-01-08  5:23 ` Steve
2008-01-08 15:22   ` kug1977

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