This section provides examples illustrating what your program, make, or command files might look like for the Windows NT, OS/2, and UNIX environments. Use your C or COBOL compiler to compile and link edit your HLL program.
#ifndef _IOAREA_H
struct ioarea {
char param1[15];
char param2[15];
char param3[15];
};
#define _IOAREA_H
#endif
#ifndef _VAST_
#define ERROR_BASE 4000
#define ERROR_PARAMETER (ERROR_BASE + 1)
#define ERROR_MEMORY_ALLOCATION (ERROR_BASE + 2)
#define ERROR_IMAGE_INITIALIZATION (ERROR_BASE + 3)
#define ERROR_IMAGE_PARSE (ERROR_BASE + 4)
#define ERROR_INVALID_IMAGE_HANDLE (ERROR_BASE + 5)
#define ERROR_CALLIN_NOTSUPPORTED_IN_IMAGE (ERROR_BASE + 6)
#define ERROR_PARAMETER_DATA (ERROR_BASE + 7)
#define ERROR_IMAGE_NOT_ACTIVE (ERROR_BASE + 8)
#ifdef ABT_SYSTEM
# define _abt_linkage_ _System
#else
# define _abt_linkage_
#endif
typedef unsigned long VAST_HANDLE;
typedef long VAST_STATUS;
typedef long VAST_RESULT;
void _abt_linkage_ vastart (char *imageName, VAST_HANDLE *vhandle, VAST_STATUS *vastrc);
void _abt_linkage_ varun (VAST_HANDLE *vhandle, char *receiver, char *selector,
int ioarea_length, void *ioarea,
VAST_STATUS *vastrc, VAST_RESULT *vares);
void _abt_linkage_ vastop (VAST_HANDLE *vhandle, VAST_STATUS *vastrc);
#define _VAST_
#endif
/********************************************************************/ /* Smalltalk Callin Sample Program (C) */ /********************************************************************/ #ifdef ABT_WIN32 #include <io.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include "abtvxt40.h" /* Required Smalltalk VM Callin Header */ #include "ioarea.h" /* IOArea structure (record) definition */ void errorRtn(void); VAST_HANDLE vhandle; VAST_STATUS vstatus; VAST_RESULT vresult;
int main(int argc, char *argv[]){
char imageName[64] = {0};
char receiver[64] = {0};
char selector[64] = {0};
long bufferLength = 50;
struct ioarea buffer = {"","","12/05/1976"};
int std_out;
#ifdef ABT_WIN32
std_out = _dup(1);
#else
std_out = dup(1);
#endif
/********************************************************************/ /* Initialize required Smalltalk VM Callin parameters */ /********************************************************************/ strcpy(imageName,"CALLINXX.icx"); strcpy(receiver,"TestCallinApp"); strcpy(selector,"run");
/********************************************************************/
/* Smalltalk VM Startup */
/********************************************************************/
vastart(imageName,&vhandle,&vstatus);
printf("\n> vastart() -> Smalltalk VM startup executed\n");
printf("> vhandle = %d\n",vhandle);
if (vstatus != 0 || vhandle == 0 )
errorRtn();
/********************************************************************/
/* Smalltalk VM Run Image */
/********************************************************************/
varun(&vhandle,receiver,selector,bufferLength,&buffer,
&vstatus,&vresult);
printf("\n> varun() -> Smalltalk VM run image executed\n");
printf("> vresult = %d\n",vresult);
if (vstatus != 0)
errorRtn();
/********************************************************************/
/* Obtain return infromation */
/********************************************************************/
printf("> The following data was returned by the callee\n");
printf("> IOArea [param1] = %s\n",buffer.param1);
printf("> IOArea [param2] = %s\n",buffer.param2);
printf("> IOArea [param3] = %s\n",buffer.param3);
/********************************************************************/
/* Smalltalk VM Stop */
/* Note: vastop() closes stdout!!! */
/********************************************************************/
vastop(&vhandle,&vstatus);
#ifdef ABT_WIN32
_dup2(std_out,1);
#else
dup2(std_out,1);
#endif
printf("> vastop() -> Smalltalk VM stop executed\n");
if (vstatus != 0)
errorRtn();
return(vstatus);
}
void errorRtn(){
printf("Error - VSTATUS = %d\n",vstatus);
exit(vstatus);
}
Using Microsoft Visual C++ compiler:
# Windows compile and link csamp.exe (Microsoft VC++ 5.0) # # Note: Paths may be different on your machine PLATFORM = WINNT BUILDDIR = e:\test BASEDIR = e:\Progra~1\Vast5-13CLI CALLINDIR = $(BASEDIR)\callin LIBS = $(CALLINDIR)\abtvxt40.lib HEADERS = $(CALLINDIR)\ioarea.h $(CALLINDIR)\abtvxt40.h SRCSAMP = $(CALLINDIR)\csamp.c OBJSAMP = $(BUILDDIR)\csamp.obj EXESAMP = $(BUILDDIR)\csamp.exe
CC = CL LINK = LINK # CFLAGS: Compile Flags # # /c Compile without linking # /Fo Creates an object file # /Gz Specifies _stdcall calling convention # /I Search these directories for include files # /Zi Generates complete debugging information # /D Define preprocessor macros CFLAGS = /c /Gz /DABT_WIN32 /I$(CALLINDIR) /Fo$@
# LFLAGS: Linker flags # # /DEBUG Creates debugging information # /OUT: Specifies the output file name LFLAGS = /OUT:$@ all: $(EXESAMP) clean: - del $(EXESAMP) $(OBJSAMP) $(EXESAMP): $(OBJSAMP) $(LINK) $(OBJSAMP) $(LIBS) $(LFLAGS) $(OBJSAMP): $(SRCSAMP) $(HEADERS) $(CC) $(CFLAGS) $(SRCSAMP)
Using IBM VisualAge C++ compiler:
# Windows compile and link csamp.exe (IBM C/C++ 3.5)
#
# Note: Paths may be different on your machine
PLATFORM = WINNT
BUILDDIR = e:\test
BASEDIR = e:\Progra~1\Vast5-13CLI
IBMCPPDIR = d:\ibmcppw
CALLINDIR = $(BASEDIR)\callin
LIBS = $(CALLINDIR)\abtvxt40.lib $(IBMCPPDIR)\LIB\cppwm35.lib \
$(IBMCPPDIR)\LIB\kernel32.lib $(IBMCPPDIR)\SDK\LIB\user32.lib \
$(IBMCPPDIR)\SDK\LIB\gdi32.lib
HEADERS = $(CALLINDIR)\ioarea.h $(CALLINDIR)\abtvxt40.h
SRCSAMP = $(CALLINDIR)\csamp.c
OBJSAMP = $(BUILDDIR)\csamp.obj
EXESAMP = $(BUILDDIR)\csamp.exe
CC = ICC
LINK = ILINK
# CFLAGS: Compile Flags
#
# /Fo Generate the object file
# /I Specify where to search for include files
# /Ge+ Use the version of the runtime library to build executable
# /Gd+ Use the dynamically linked version of the rutnime library
# /C+ Perform compile only
# /D Define preprocessor macros
CFLAGS = /I$(CALLINDIR) /C+ /DABT_SYSTEM /DABT_WIN32 /Fo$@ /Ge+ /Gd+
# LFLAGS: Linker flags
#
# /EXEC Build executalbe
# /NOD No default library search
# /O Specify the output filename
LFLAGS = /EXEC /NOD /O:$@
all: $(EXESAMP) clean: - del $(EXESAMP) $(OBJSAMP) $(EXESAMP): $(OBJSAMP) $(LINK) $(OBJSAMP) $(LIBS) $(LFLAGS) $(OBJSAMP): $(SRCSAMP) $(HEADERS) $(CC) $(CFLAGS) $(SRCSAMP)
# AIX makefile for VisualAge executable module # with VM in shared object # # Note: Paths may be different on your machine PLATFORM = aix BUILDDIR = /u1/test BASEDIR = /opt/IBMvast CALLINDIR = $(BASEDIR)/callin EXP1 = $(CALLINDIR)/abtvxt40.exp SRCSAMP = $(CALLINDIR)/csamp.c OBJSAMP = $(BUILDDIR)/csamp.o EXESAMP = $(BUILDDIR)/csamp CC = xlc_r # Threading version LINK = xlc_r # Threading version RM = rm
# CPPFLAGS: C preprocessor flags # # -DRS6000 Setup ES .h files for AIX # -I$(COMMONDIR) Common files # CPPFLAGS = -DRS6000 -I$(CALLINDIR) # CFLAGS: C compiler flags # # -c Compile only # -o $@ Name the output file # -qlanglvl=extended Support ansi-extended C/C++ language # -qmbcs Support multi-byte character sets # -qsrcmsg Include source info in diagnostic messages # CFLAGS = -c -o $@ -qlanglvl=extended -qmbcs -qsrcmsg # LFLAGS: Linker flags # # -b libpath:... Set the module header libpath # -o $@ Name the output file # LFLAGS = -bnoquiet -blibpath:/opt/IBMvast/bin:/usr/lib/threads:/usr/lib:/lib -o $@ #/opt/IBMvast/bin
# LIBS: # -lbsd BSD compatibility library # -lm SVID math library # LIBS = -lm -lbsd all: $(EXESAMP) clean: - $(RM) $(EXESAMP) $(OBJSAMP) $(EXESAMP): $(OBJSAMP) $(EXP1) $(LINK) $(OBJSAMP) -bI:$(EXP1) $(LIBS) $(LFLAGS) $(OBJSAMP): $(SRCSAMP) $(CC) $(CPPFLAGS) $(CFLAGS) $(SRCSAMP)
# Solaris makefile for VisualAge executable module # with VM in shared object # # Note: Paths may be different on your machine PLATFORM = solaris BUILDDIR = /u1/test BASEDIR = /opt/IBMvast CALLINDIR = $(BASEDIR)/callin DLLVXT = $(BASEDIR)/bin/abtvxt40.so SRCSAMP = $(CALLINDIR)/csamp.c OBJSAMP = $(BUILDDIR)/csamp.o EXESAMP = $(BUILDDIR)/csamp CC = /usr/ucb/cc LINK = /usr/ucb/cc RM = rm # CPPFLAGS: C preprocessor flags # # -DSOLARIS Setup ES .h files for Solaris # -I$(COMMONDIR) Common files # CPPFLAGS = -DSOLARIS -I$(CALLINDIR)
# CFLAGS: C compiler flags # # -c Compile only # -mt Compile multi-threaded # -o $@ Use target as output filename # -O Level 2 optimization # -KPIC Generate position independent code # -Xa Compile assuming ANSI C conformance, allow K & R extensions # -xCC Allow C++ stype comments # -misalign Allow proper loads and stores of misaligned data # CFLAGS = -misalign -c -mt -o $@ -g -KPIC -Xa -xCC # LFLAGS: Linker flags # # -B static Link libs statically # -G Link as shared object # -o $@ Use target as output filename # -R ... Record the LD_RUN_PATH # LFLAGS = -o $@ -R /usr/openwin/lib:/usr/ucblib:/usr/dt/lib:/opt/IBMvast/bin:/opt/IBMvast/odbc/bin
# LIBS: Order is important!! # -lthread Threads library # -lposix4 POSIX library # -lm SVID math library # -ldl Dynamic loader library # -lc C runtime library # LIBS = -lthread -lposix4 -lm -ldl -lc all: $(EXESAMP) clean: - $(RM) $(EXESAMP) $(OBJSAMP) $(EXESAMP): $(OBJSAMP) $(DLLVXT) $(LINK) $(OBJSAMP) $(DLLVXT) $(LIBS) $(LFLAGS) $(OBJSAMP): $(SRCSAMP) $(CC) $(CPPFLAGS) $(CFLAGS) $(SRCSAMP)
# OS/2 compile and link csamp.exe (IBM C/C++ 3.0)
#
# Note: Paths may be different on your machine
PLATFORM = OS2
BUILDDIR = e:\test
BASEDIR = e:\Progra~1\Vast5-13CLI
IBMCPPDIR = c:\ibmcpp
CALLINDIR = $(BASEDIR)\callin
LIBS = $(CALLINDIR)\abtvxt40.lib $(IBMCPPDIR)\LIB\cppom30.lib \
$(IBMCPPDIR)\LIB\os2386.lib
HEADERS = $(CALLINDIR)\ioarea.h $(CALLINDIR)\abtvxt40.h
SRCSAMP = $(CALLINDIR)\csamp.c
OBJSAMP = $(BUILDDIR)\csamp.obj
EXESAMP = $(BUILDDIR)\csamp.exe
CC = ICC
LINK = ILINK
# CFLAGS: Compile Flags # # /Fo Generate the object file # /I Specify where to search for include files # /Ge+ Use the version of the runtime library to build executable # /Gd+ Use the dynamically linked version of the rutnime library # /C+ Perform compile only # /D Define preprocessor macros CFLAGS = /I$(CALLINDIR) /C+ /DABT_SYSTEM /DABT_WIN32 /DOS2 /Fo$@ /Ge+ /Gd+
# LFLAGS: Linker flags # # /EXEC Build executalbe # /NOD No default library search # /O Specifies the output filename # /PM Specifies Program Type LFLAGS = /EXEC /NOD /PM:VIO /O:$@ all: $(EXESAMP) clean: - del $(EXESAMP) $(OBJSAMP) $(EXESAMP): $(OBJSAMP) $(LINK) $(OBJSAMP) $(LIBS) $(LFLAGS) $(OBJSAMP): $(SRCSAMP) $(HEADERS) $(CC) $(CFLAGS) $(SRCSAMP)
CBL PGMNAME(MIXED) LIB
*****************************************************************
* 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 BUFFERLENGTH PIC S9(9) BINARY VALUE 50.
01 BUFFER.
02 PARAM1 PIC X(15).
02 PARAM2 PIC X(15).
02 PARAM3 PIC X(15) VALUE "12/05/1976".
*
PROCEDURE DIVISION.
*****************************************************************
* INITIALIZE REQUIRED SMALLTALK VM CALLIN PARAMETERS *
*****************************************************************
MOVE "CALLINXX.ICX" TO IMAGENAME.
MOVE "TestCallinApp" TO RECEIVER.
MOVE "run" TO SELECTOR
*****************************************************************
* SMALLTALK VM STARTUP *
*****************************************************************
CALL "vastart" USING BY REFERENCE IMAGENAME
BY REFERENCE VHANDLE
BY REFERENCE VSTATUS.
DISPLAY "".
DISPLAY "> VASTART() -> Smalltalk VM startup executed".
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 BUFFERLENGTH
BY REFERENCE BUFFER
BY REFERENCE VSTATUS
BY REFERENCE VRESULT.
DISPLAY "".
DISPLAY "> VARUN() -> Smalltalk VM run image executed".
DISPLAY "> VRESULT = " VRESULT.
DISPLAY "> The following data was returned by the callee".
DISPLAY "> IOArea [param1] = " PARAM1.
DISPLAY "> IOArea [param2] = " PARAM2.
DISPLAY "> IOArea [param3] = " PARAM3.
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 "".
DISPLAY "> VASTOP() -> Smalltalk VM stop executed".
IF VSTATUS NOT EQUAL TO ZERO
PERFORM ERROR-ROUTINE THRU END-ERROR-ROUTINE.
*
COMPUTE RETURN-CODE = 0.
GOBACK.
*
ERROR-ROUTINE.
DISPLAY "Error - VSTATUS = " VSTATUS.
COMPUTE RETURN-CODE = VSTATUS.
GOBACK.
END-ERROR-ROUTINE.
*
END PROGRAM "COBSAMP".
/* To build the COBOL sample module */ 'cob2 cobsamp.cbl abtvxt40.lib cobsamp.exe'