Open System Services Porting Guide (G06.24+, H06.03+)

Table Of Contents
Interoperating Between Programming Environments
Open System Services Porting Guide520573-006
5-14
Mixed-Module Programming
modules). A mixed-module program is composed of at least one OSS module and at
least one Guardian module and runs as either an OSS process or a Guardian process;
it cannot run as a process in both environments. The environment of the module
containing the main() function determines the environment in which a process runs.
Figure 5-1 illustrates mixed-module programming; one Guardian and two OSS
modules are linked together with the third c89 command listed in the figure. gdnmod.c
and ossmod.c are each compiled with a separate c89 invocation. The third c89
command compiles ossmain.c and links it with gdnmod.o and ossmod.o. The
resulting program will run as an OSS process because the main() function is in the
OSS module called ossmain.c.
You should always include all relevant headers in the source modules to ensure
function references are resolved to the proper variant. Linking should be deferred until
all object modules are created. In the OSS environment, linking can be initiated
automatically for you by the c89 utility, as discussed in Section 2, The Development
Environment.
A mixed-module program enables Guardian C functions to access Guardian objects
from an OSS process and OSS functions to access OSS objects from a Guardian
process. You should use OSS C functions wherever possible to manipulate Guardian
objects. For example, if you want to open a Guardian file and do not need to access
any of the attributes that Guardian files have and OSS files do not, use the OSS
open() function. However, you can use a Guardian C function when you cannot
accomplish a task with OSS functions.
Many Guardian C library functions can be called from OSS programs. However, they
can be called only from modules compiled for the Guardian environment. In this case,
you compile the Guardian and OSS modules separately and link them together. Use
Figure 5-1. Mixed-Module Programming Using the c89 Utility
011VST .VSD
Guardian Module
OSS Module
OSS Module with
main() Function
OSS c89
Utility
OSS Process
c89 -Wsystype=guardian -c gdnmod.c
c89 -c ossmod.c
c89 ossmain.c gdnmod.o ossmod.o
gdnmod.c
ossmod.c
ossmain.c