Server Guide

Building your application for Windows NT, OS/2, or UNIX

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.

Tip icon
The example files are also available on the product CD.

IOArea class definition

ioarea.h
#ifndef _IOAREA_H
 
struct ioarea {
   char param1[15];
   char param2[15];
   char param3[15];
};
 
#define _IOAREA_H
#endif

Common header file

abtvxt40.h
#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
 

C call-in sample program

csamp.c
/********************************************************************/
 /*  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);
}

Makefiles

Windows NT

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
# 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
# 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
# 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)

COBOL call-in sample program

cobsamp.cbl
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".
 

makesamp.cmd
/* To build the COBOL sample module */
'cob2 cobsamp.cbl abtvxt40.lib cobsamp.exe'


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