Examples of CONNECTION BLOCK TYPE Declaration

The following example includes the ALGOL host program and an ALGOL subprogram that references connection block items from outside the connection block.

ALGOL Host Program

BEGIN
TYPE CONNECTION BLOCK CB;
  BEGIN
  REAL PROCEDURE R1;
     BEGIN
     REAL R;
     R:= 5.5
     R1:= R;
     END R1;
  END CB;
CB SINGLE LIBRARY CL;
PROCEDURE EXTERNAL_PROC;
   EXTERNAL;
EXTERNAL_PROC;
END.

ALGOL Subprogram

[
 TYPE CONNECTION BLOCK CB; FORWARD;
 CB SINGLE LIBRARY CL;
]TYPE CONNECTION BLOCK CB;  % CB is fully specified here
   BEGIN
   REAL PROCEDURE R1;
      BEGIN
      REAL R;
      R:=5.5;
      R1:=R;
      END R1;
   END CB;
$ SET LEVEL 3
PROCEDURE EXTERNAL_PROC;
   BEGIN
   REAL REEL;
   REEL := CL.R1;
   END.

The following example includes an ALGOL host program that declares a connection block with imported library objects and an external procedure. Also included is an example of a subprogram containing the procedure to be bound and, for completeness, an example of the library file.

ALGOL Library Program

BEGIN
EVENT EV;
TYPE CONNECTION BLOCK CB;
     BEGIN
     EBCDIC ARRAY OUTPUTMSG[0:30];
     PROCEDURE SENDOUTPUT;
       BEGIN
       DISPLAY (STRING (OUTPUTMSG[0],10));
       END;
     EXPORT
       OUTPUTMSG (READWRITE),
       SENDOUTPUT;
       END CB;
CB SINGLE LIBRARY CL_LIB;
EXPORT EV;
READYCL (CL_LIB);
FREEZE (TEMPORARY);
END.

ALGOL Host Program

BEGIN
TYPE CONNECTION BLOCK CB;
     BEGIN
     REAL R;
     IMPORTED EBCDIC ARRAY        % Imported library object
        OUTPUTMSG[0] (READWRITE);
     PROCEDURE SENDOUTPUT;        % Imported library object
        IMPORTED;
     PROCEDURE P1;
        EXTERNAL;
     END CB;
CB SINGLE LIBRARY CL
    (AUTOLINK=TRUE,
     INTERFACENAME="CL_LIB.",
     TITLE="OBJECT/IMPORTED/CL/LIB."
     );
CL.P1;
END.

ALGOL Subprogram

$ set level 4
[TYPE CONNECTION BLOCK CB; EXTERNAL; ]
 TYPE CONNECTION BLOCK CB;
      BEGIN
      IMPORTED EBCDIC ARRAY        % Imported library object
         OUTPUTMSG[0] (READWRITE);
      PROCEDURE SENDOUTPUT;              % Imported library object
         IMPORTED;
      PROCEDURE P1;
         PENDING;
      END CB;
PROCEDURE CB.P1;
  BEGIN
  REPLACE OUTPUTMSG[0] BY "IN P1";
  SENDOUTPUT;
  END P1.