[Coco] Sharing a value with the calling routine in Basic09

Wayne Campbell asa.rand at gmail.com
Sat Aug 15 23:15:54 EDT 2020


As far as I know, that will only happen if you pass a variable, assign
another variable in the called procedure to that variable, and then do not
update the parameter variable before you quit the procedure. For example:

RUN y(p)

PROCEDURE y
PARAM p: INTEGER

DIM q: INTEGER

q=p
q=q+3
PRINT q
END

I know that isn't what you said. What you said is you passed p, modified p,
printed p, return to the calling procedure, printed p again, got the wrong
result. The question I have is, did you print p immediately upon returning
to the procedure, or did the procedure end and you ran it again and printed
p?

On Sat, Aug 15, 2020, 1:19 PM <coco at jechar.ca> wrote:

> I don't think what you are saying is correct because
> say my programs were called x and y
>
> in x I set p=SOME-VALUE
> then I print p and get
> SOME-VALUE
> then I call y passing p to y
> then I  set p=some-OTHER-value
> then I print p and get
> some-OTHER-value
> but when back in the calling program x
> when I print p and get
> SOME-VALUE
> so basic09 did not remember what module y did.
>
>
>
> On 2020-08-15 15:49, Wayne Campbell wrote:
> > Pass by reference is the default. This means that just passing the
> > variable
> > name is enough. If you update that variable and the procedure you
> > called
> > the variable in the procedure that called it will reflect that change.
> > To
> > pass by value, you use the variable name plus zero in the parameter
> > list.
> >
> > Example:
> >
> > RUN myProc(myVar+0)
> >
> > Passes myVar by it's value.
> >
> > RUN myProc(myVar)
> >
> > Passes myVar by reference.
> >
> >
> > On Sat, Aug 15, 2020, 11:21 AM <coco at jechar.ca> wrote:
> >
> >>
> >> On 2020-08-15 14:17, coco at jechar.ca wrote:
> >> > Would like to know if there is a standard way to pass back the
> >> > value from a called routine to the caller. Cannot use GOSUB the
> >> > routines need to be separate modules although a merged module file
> >> > could be created by OS9 afterwards to make sure that if one module
> >> > is loaded the other is too.
> >> >
> >> > I have an Idea involving ADDR PEEK and POKE of course if I am wrong
> >> > this could go very wrong.
> >> >
> >> > Charlie
> >>
> >> PS: I think what I am trying to do is called pass by reference
> >> in C++
> >>
> >> --
> >> Coco mailing list
> >> Coco at maltedmedia.com
> >> https://pairlist5.pair.net/mailman/listinfo/coco
> >>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>


More information about the Coco mailing list