[comp.lang.modula2] Help!!

larr@bucc2.UUCP (04/10/89)

HELP!!!!!
Hi,  This is my first official post.
I am a novice Modula-2 programmer, basically using JPI M2 for class
work.  I am currently doing an independent study in OOP and would like
to begin work on an extension to M2.  The biggest problem I am having
is trying to figure out how to do pointers to procedures, as in C.
          Any help would be greatly apprieciated.
                 Larry Schoeneman, Bradley University

alan@rnms1.paradyne.com (0000-Alan Lovejoy(0000)) (04/14/89)

In article <13400002@bucc2> larr@bucc2.UUCP writes:
>
>HELP!!!!!
>Hi,  This is my first official post.
>I am a novice Modula-2 programmer, basically using JPI M2 for class
>work.  I am currently doing an independent study in OOP and would like
>to begin work on an extension to M2.  The biggest problem I am having
>is trying to figure out how to do pointers to procedures, as in C.
>          Any help would be greatly apprieciated.
>                 Larry Schoeneman, Bradley University


Use a procedure variable:

MODULE Example;

  FROM SYSTEM IMPORT
    ADR;

  FROM InOut IMPORT
    WriteString, WriteLn;

VAR
  p: PROCEDURE; (* This is a procedure variable.  It is physically the
		   same thing as C function pointer.  This one ("p")
		   is type-compatible with any procedure having no
		   arguments. *)
  q: POINTER TO PROCEDURE;  (* This is a pointer to a procedure variable.
			       It is physically the same thing as a pointer
			       to pointer to function in C. *)
  write: PROCEDURE(ARRAY OF CHAR);  (* This procedure variable is compatible
				       with any procedure expecting an open
				       array of characters as the single
				       value parameter. *)

PROCEDURE P;
BEGIN
  write("This is P"); 
  WriteLn;
END P;

PROCEDURE Q;
BEGIN
  write("This is Q"); 
  WriteLn;
END Q;

BEGIN

  write := WriteString;
  p := P;
  p; (* invokes P *) 
  q := ADR(p);
  p := Q;
  q^; (* invokes Q *)

END Example.


Alan Lovejoy; alan@pdn; 813-530-2211; AT&T Paradyne: 8550 Ulmerton, Largo, FL.
Disclaimer: I do not speak for AT&T Paradyne.  They do not speak for me. 
__American Investment Deficiency Syndrome => No resistance to foreign invasion.
Motto: If nanomachines will be able to reconstruct you, YOU AREN'T DEAD YET.