Server Guide

Building your application for OS/390

This section describes how to build a Smalltalk stub object, then compile and link edit your HLL program.

Building the stub object module

To build the appropriate stub object module appropriate for your application, use one of the supplied JCL procs, along with the correct symbolic parameters for the target environment and language you are using. Use the following guidelines to decide which proc and parameters to use.

Building the final load module

Once you have built the correct Smalltalk stub object module, you can compile your application as you normally do, using standard compile JCL.

The compiled HLL load module must then be link edited with the Smalltalk stub object module to create the final load module. Use the SYSLIN dd concatenation statement to ensure correct external name resolution. (This resolves the VASTART, VARUN, and VASTOP functions.)

Sample build JCL

The following sample JCL builds a sample load module using the Load From Memory Smalltalk model, the COBOL HLL, and the IMS execution environment. You can adapt this sample code for your application by substituting the correct proc names and parameters.

This example first builds the correct Smalltalk stub object module, using the ABTCALM proc with the correct symbolic parameters for the COBOL HLL and the IMS execution environment. It then compiles the COBOL program, and finally link edits the COBOL object module with the Smalltalk stub object module to create the final load module.

//COBCALL  JOB ...
//*
//PROCLIB  JCLLIB ORDER=(ABT.V4R5M0.SABTJLIB)
//*====================================================================
//*        CALLIN EXAMPLE:  COBOL CALLING SMALLTALK
//*          SMALLTALK MODEL  = LOAD FROM MEMORY  (STATIC LINK)
//*          ENVIRONMENT      = IMS
//*          LANGUAGE         = COBOL
//*====================================================================
//*
//*--------------------------------------------------------------------
//         CREATE SMALLTALK CALLIN STUB
//*          STUB OUTPUT OBJECT MODULE = COBCALL
//*          SMALLTALK MODE            = LOAD FROM MEMORY
//*--------------------------------------------------------------------
//CALLSTUB EXEC PROC=ABTXCALM,OBJMOD=COBCALL,
//         INFILE=USER.IMAGE.LIBRARY,
//         OUTFILE=USER.LOADLIB,
//         STAKDUMP=USER.STAKDUMP,
//         IMAGE=COBCALL,
//         ENV=I,
//         LANG=COB
//*--------------------------------------------------------------------
//*        COMPILE & LINKEDIT COBOL PROGRAM (COBSAMP)
//*--------------------------------------------------------------------
//COBCOMP  EXEC PGM=IGYCRCTL, ...
//         .
//         .
//         .
//SYSLIB   DD DSN=ABT.V4R5M0.SABTJLIB,DISP=SHR
//         .
//         .
//         .
//SYSIN    DD DISP=SHR,DSN=USER.COBOL.SOURCE(COBSAMP)
//SYSLIN   DD DSN=&&LOADSET,DISP=(MOD,PASS),
//         UNIT=VIO,SPACE=(80,(250,100))
//         .
//         .
//         .
//*--------------------------------------------------------------------
//*        LINKEDIT COBOL LOAD MODULE
//*          OUTPUT LOAD MODULE      = COBSAMP
//*          SYSLIN INPUT            = &&LOADSET
//*                                    COBCALL
//*--------------------------------------------------------------------
//LKED     EXEC PGM=IEWL,PARM='LIST,AMODE=31,RMODE=ANY', ...
//         .
//         .
//SYSLIB   DD DSN=CEE.V1R5M0.SCEELKED,DISP=SHR
//         .
//         .
//SYSLMOD  DD DSN=USER.LOADLIB(COBSAMP),DISP=SHR
//SYSLIN   DD DSN=&&LOADSET,DISP=(OLD,DELETE)
//         DD DISP=SHR,DSN=USER.LOADLIB(COBCALL)
//         .
//         .
//         .

Call-in error messages

OS/390 HLL samples

This section provides sample code illustrating how the Smalltalk VM should be called from each supported HLL. Note the calling conventions and associated parameters.

COBOL
*****************************************************************
*    SMALLTALK CALLIN SAMPLE PROGRAM  (COBOL)                   *
*****************************************************************
 IDENTIFICATION DIVISION.
 PROGRAM-ID. COBSAMP.
 ENVIRONMENT DIVISION.
 DATA DIVISION.
 
 WORKING-STORAGE SECTION.
 
*****************************************************************
*    REQUIRED SMALLTALK VM CALLIN COPYBOOK                      *
*****************************************************************
 COPY ABTXSCOB.
*
 01 IOAREALENGTH  PIC S9(9) BINARY VALUE 18.
 01 IOAREA        PIC X(18) VALUE "This is the IOAREA".
*
PROCEDURE DIVISION.
*****************************************************************
*    INITIALIZE REQUIRED SMALLTALK VM CALLIN PARAMETERS         *
*****************************************************************
      MOVE "CALLINXX " TO IMAGENAME.
      MOVE "TestCallin " TO RECEIVER.
      MOVE "run " TO SELECTOR.
*****************************************************************
*    SMALLTALK VM STARTUP                                       *
*****************************************************************
      CALL "VASTART" USING BY REFERENCE IMAGENAME
                     BY REFERENCE VHANDLE
                     BY REFERENCE VSTATUS.
      DISPLAY "VASTART_____________________________________".
      DISPLAY "VHANDLE   = " VHANDLE.
      IF VSTATUS NOT EQUAL TO ZERO
         PERFORM ERROR-ROUTINE THRU END-ERROR-ROUTINE.
*****************************************************************
*    SMALLTALK VM RUN IMAGE                                     *
*****************************************************************
     CALL "VARUN" USING BY REFERENCE VHANDLE
                        BY REFERENCE RECEIVER
                        BY REFERENCE SELECTOR
                        BY CONTENT   IOAREALENGTH
                        BY REFERENCE IOAREA
                        BY REFERENCE VSTATUS
                        BY REFERENCE VRESULT.
     DISPLAY "VARUN_______________________________________".
     DISPLAY "IOAREA    = " IOAREA.
     DISPLAY "VRESULT   = " VRESULT.
     IF VSTATUS NOT EQUAL TO ZERO
        PERFORM ERROR-ROUTINE THRU END-ERROR-ROUTINE.
*****************************************************************
*    SMALLTALK VM STOP                                          *
*****************************************************************
     CALL "VASTOP" USING BY REFERENCE VHANDLE
                          BY REFERENCE VSTATUS.
     DISPLAY "VASTOP______________________________________".
     DISPLAY "VHANDLE   = " VHANDLE.
     IF VSTATUS NOT EQUAL TO ZERO
        PERFORM ERROR-ROUTINE THRU END-ERROR-ROUTINE.
*
     COMPUTE RETURN-CODE = 0.
     GOBACK.
*
ERROR-ROUTINE.
     DISPLAY "VSTATUS   = " VSTATUS.
     COMPUTE RETURN-CODE = VSTATUS.
     GOBACK.
END-ERROR-ROUTINE.
*
END PROGRAM COBSAMP.
 

PL/I
*PROCESS LC(101),OPT(0),S,MAP,LIST,STMT,A(F),AG,INCLUDE;
 /********************************************************************/
 /*  SMALLTALK CALLIN SAMPLE PROGRAM (PLI)                           */
 /********************************************************************/
 PLISAMP: PROC OPTIONS(MAIN,REENTRANT);
 
  %INCLUDE ABTXSPLI;     /*  REQUIRED SMALLTALK VM CALLIN COOKBOOK   */
  DCL ADDR               BUILTIN;
  DCL PLIRETC            BUILTIN;
  DCL RC                 FIXED BINARY(31,0);
 
  DCL IOAREALENGTH       FIXED BINARY(31,0) INIT(18);
  DCL IOAREA             CHAR(18) INIT('This is the IOAREA');
 
 
 /********************************************************************/
 /*  INITIALIZE REQUIRED SMALLTALK VM CALLIN PARAMETERS              */
 /********************************************************************/
  IMAGENAME = 'CALLINXX ';
  RECEIVER  = 'TestCallin ';
  SELECTOR  = 'run ';
 
 /********************************************************************/
 /*  SMALLTALK VM STARTUP                                            */
 /********************************************************************/
  CALL VASTART(ADDR(IMAGENAME),VHANDLE,VSTATUS);
  DISPLAY('VSTART________________________________________________');
  DISPLAY('VHANDLE = ' || VHANDLE);
  IF VSTATUS > 0 THEN CALL ERROR_RTN;
 
 /********************************************************************/
 /*  SMALLTALK VM RUN IMAGE                                          */
 /********************************************************************/
  CALL VARUN(VHANDLE,ADDR(RECEIVER),ADDR(SELECTOR),(IOAREALENGTH),
        ADDR(IOAREA),VSTATUS,VRESULT);
  DISPLAY('VSRUN_________________________________________________');
  DISPLAY('IOAREA  = ' || IOAREA);
  DISPLAY('VRESULT = ' || VRESULT);
  IF VSTATUS > 0 THEN CALL ERROR_RTN;
 
 /********************************************************************/
 /*  SMALLTALK VM STOP                                               */
 /********************************************************************/
  CALL VASTOP(VHANDLE,VSTATUS);
  DISPLAY('VASTOP________________________________________________');
  DISPLAY('VHANDLE = ' || VHANDLE);
  IF VSTATUS > 0 THEN CALL ERROR_RTN;
  CALL PLIRETC(VSTATUS);
  RETURN;
 
 ERROR_RTN:  PROC;
  DISPLAY('ERROR - VSTATUS = ' || VSTATUS);
  CALL PLIRETC(VSTATUS);
  EXIT;
 END ERROR_RTN;
 
 END PLISAMP;
 

C/390
/********************************************************************/
/*  Smalltalk Callin Sample Program  (C/390)                            */
/********************************************************************/
#pragma csect(code,"C390SAMP")
#pragma csect(static,"$C390")
 
#include "abtxscxx.h" /* Required Smalltalk VM Callin Header */
 
char    ioarea??(18??)  = "This is the IOAREA";
long    ioareaLength    = 18;
 
void errorRtn(void);
 
 
int main(int argc, char *argv??(??) )
 {
 
/********************************************************************/
/*  Initialize required Smalltalk VM Callin parameters              */
/********************************************************************/
   memcpy(imageName,"CALLINXX ",9);
   memcpy(receiver,"TestCallin ",11);
   memcpy(selector,"run ",5);
/********************************************************************/
/*  Smalltalk VM Startup                                            */
/********************************************************************/
   vastart(imageName,&vhandle,&vstatus);
   printf("\n>  vastart()__________________________________________\n");
   printf("   vhandle = %d\n",vhandle);
   if (vstatus != 0 && vhandle !=0 ) errorRtn();
 
/********************************************************************/
/*  Smalltalk VM Run Image                                          */
/********************************************************************/
   varun(&vhandle,receiver,selector,ioareaLength,&ioarea,
              &vstatus,&vresult);
   printf("\n>  varun()____________________________________________\n");
   printf("   ioarea  = '%s'\n",ioarea);
   printf("   vresult = %d\n",vresult);
   if (vstatus != 0) errorRtn();
 
/********************************************************************/
/*  Smalltalk VM Stop                                               */
/********************************************************************/
   vastop(&vhandle,&vstatus);
   printf("\n>  vastop()___________________________________________\n");
   printf("   vhandle = %d\n",vhandle);
   if (vstatus != 0) errorRtn();
 
   return(vstatus);
 }
 
 
void errorRtn()
 {
   printf("Error - VSTATUS = %d\n",vstatus);
   exit(vstatus);
 }

Copybooks/headers

Use the following copybooks and headers to properly map the required variable definitions for call-in support.

COBOL copybook
*****************************************************************
*   COBOL - SMALLTALK CALLIN COPYBOOK  (ABTXSCOB)               *
*****************************************************************
 01 IMAGENAME     PIC X(64).
 01 RECEIVER      PIC X(64).
 01 SELECTOR      PIC X(64).
 01 VHANDLE       PIC S9(9) BINARY.
 01 VSTATUS       PIC S9(9) BINARY.
 01 VRESULT       PIC S9(9) BINARY.
*

PL/I copybook
/********************************************************************/
/*  PL/I - SMALLTALK CALLIN COPYBOOK  (ABTXSPLI)                    */
/********************************************************************/
 DCL (VASTART,VARUN,VASTOP) EXTERNAL ENTRY;
 DCL IMAGENAME          CHAR(64);
 DCL RECEIVER           CHAR(64);
 DCL SELECTOR           CHAR(64);
 DCL VHANDLE            FIXED BINARY(31,0) INIT(0);
 DCL VSTATUS            FIXED BINARY(31,0) INIT(0);
 DCL VRESULT            FIXED BINARY(31,0) INIT(0);

C/390 header
#ifndef _VAST_ABTXSCXX
 
 /********************************************************************/
 /*  C370 - Smalltalk Callin Header  (ABTXSCXX)                      */
 /********************************************************************/
 
 typedef long VAST_HANDLE;
 typedef long VAST_STATUS;
 typedef long VAST_RESULT;
 
 char    imageName??(64??)  = {0};
 char    receiver??(64??)   = {0};
 char    selector??(64??)   = {0};
 
 VAST_HANDLE vhandle;
 VAST_STATUS vstatus;
 VAST_RESULT vresult;
 
#ifdef __cplusplus
 extern "C" {
#endif
 
 extern void  vastart (char        *imageName,
                       VAST_HANDLE *vhandle,
                       VAST_STATUS *vastrc);
 
 extern void  varun   (VAST_HANDLE *vhandle,
                       char        *receiver,
                       char        *selector,
                       int          ioarea_length,
                       void        *ioarea,
                       VAST_STATUS *vastrc,
                       VAST_RESULT *vares);
 
 extern void  vastop  (VAST_HANDLE *vhandle,
                       VAST_STATUS *vastrc);
 
#ifdef __cplusplus
 }
#endif
 
#define _VAST_ABTXSCXX
#endif
 


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]