KCMS CMM Developer's Guide

Chapter 4 KcsIO Derivative

In This Chapter

This chapter discusses the following topics to help you create a KcsIO class derivative that is dynamically loadable at runtime:

Figure 4-1 shows the relationship of the KcsIO class to the parent classes in the KCMS class hierarchy. See Figure 1-2 for an illustration of all the relevant KCMS classes.

Figure 4-1 KcsIO Derivative

Graphic

External Entry Points

The KCMS framework uses external entry points to load your derivative as an executable. The mandatory and optional entry points are described.

Mandatory

When you derive from a KcsIO class, the mandatory external entry points are:

extern

long KcsDLOpenIOCount; KcsIO *KcsCreateIO(KcsStatus *aStat,  	const

KcsProfileDesc *aDesc);

The KcsCreateIO() method creates an instance of a KcsIO derivative. The instance is determined by aDesc->type, which contains the derivative portion of the class identifier (see "Creating OWconfig File Entries").

Optional

When you derive from a KcsIO class, the optional external entry points are:

KcsStatusId

KcsInitIO(); KcsStatusId

KcsCleanupIO();

Example

The following example shows you how to use the entry points when creating a KcsIO derivative.


Example 4-1 KcsIO Class Entry Points Example

/* External loadable

interface */ extern "C" 	extern long				KcsDLOpenIOCount;

	KcsStatus				KcsInitIO(); 	KcsIO				*KcsCreateIO(KcsStatus *aStatus, 

						const KcsProfileDesc *aDesc); 	KcsStatus				KcsCleanupIO(); //Loadable

stuff //external DL open count to support runtime derivation extern long

KcsDLOpenIOCount = 0;  /* Runtime derivable routine */ KcsIO *

KcsCreateIO(KcsStatus *aStat, const KcsProfileDesc *Desc) { 	//Create the new

derivative 	return(new KcsSolarisFile(aStat,

aDesc->desc.solarisFile.fileName,  		aDesc->desc.solarisFile.hostName, 

		aDesc->desc.solarisFile.oflag, aDesc->desc.solarisFile.mode); } 

KcsStatus KcsInitIO(long libMajor, long libMinor, long *myMajor, long

*myMinor) { 	// Set up the return values 	*myMajor = KCS_MAJOR_VERSION;

	*myMinor = KCS_MINOR_VERSION;  	//Check the major version 	if (libMajor !=

KCS_MAJOR_VERSION) 		return (KCS_CMM_MAJOR_VERSION_MISMATCH);  	//Currently,

if minor version of library is less than the KCMS  	// minor version, return

an error. 	if (libMinor != KCS_MINOR_VERSION) 		return

(KCS_CMM_MINOR_VERSION_MISMATCH);  	//Library guarantees if your minor version

number is greater than 	//KCMS minor version number, it will handle it. No

more init. 	return(KCS_SUCCESS); }  KcsStatus KcsCleanupIO() { 	/* Clean up is

performed in the destructor */ 	return (KCS_SUCCESS);

}

Member Function Override Rules

The following table tells you which KcsIO member functions you must override and can override when deriving from this class. The member functions indicated with an "X" in the Must column are required to successfully derive from this base class. All of these member functions are defined in the kcsio.h header file and the KCMS CMM Reference Manual.

Table 4-1 KcsIO Member Function Override Rules

Member Function 

Override Rules 

Must 

Can 

getEOF()

 

getType()

 

isEqual()

 

KcsIO()

 

~KcsIO()

 

relRead()

 

relWrite()

 

setCursorPos()

 

setEOF()

 

setOffset()

 

Examples To Help You Create Your KcsIO Derivitave

The KcsSolarisFile class is a derivative of the KcsIO class. You can use any of the KcsSolarisFile files (or any of the other KcsIO derivatives) as good sources of example code for creating your KcsIO derivative. You can find the files on-line in /usr/opt/SUNWddk/kcms/src. The kcssolfi.cc and kcssolfi.h files in this directory are actual SunSoft source code that supports enhanced file access on Solaris. This source code is directly tied into the kcstypes.h header file. The kcssolfitest.h header file explains how to include this derivative without changing the KCMS header file.