
/*
 * This file was generated by the SOM Compiler.
 * FileName: sctmplt.xh.
 * Generated using:
 *     SOM Precompiler somipc: 2.29.1.17
 *     SOM Emitter emitxh: 2.47
 */

/*
 *    COMPONENT_NAME: some
 * 
 *    ORIGINS: 27
 * 
 * 
 *    10H9767, 10H9769  (C) COPYRIGHT International Business Machines Corp. 1992,1994
 *    All Rights Reserved
 *    Licensed Materials - Property of IBM
 *    US Government Users Restricted Rights - Use, duplication or
 *    disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 * 
 */


#ifndef SOM_SOMTTemplateOutputC_xh
#define SOM_SOMTTemplateOutputC_xh

class SOMTTemplateOutputC;

#define SOMTTemplateOutputC_MajorVersion 2
#define SOMTTemplateOutputC_MinorVersion 1

/*
 * Passthru lines: File: "C.xh", "before"
 */
#include <stdio.h>
typedef enum somtCommentStyleT { somtDashesE, somtCPPE, somtCSimpleE, somtCBlockE } somtCommentStyleT;

/* C++ SOM defs */
#include <somcls.xh>
#include <somcm.xh>

/* C++ parent defs */
#ifndef SOM_SOMObject_xh
#include <somobj.xh>
#endif

#ifndef SOMTTemplateOutputC_API
#define SOMTTemplateOutputC_API
/*
 * -- The Class API
 */

/*
 * Start of bindings for IDL types
 */

class SOMClass;
class SOMObject;
class SOMStringTableC;
#define SOMTTemplateOutputC_MAX_INPUT_LINE_LENGTH 1024 /* 1024 */
#define SOMTTemplateOutputC_MAX_OUTPUT_LINE_LENGTH 4096 /* 4096 */

#ifndef SOM_DONT_USE_SHORT_NAMES
#ifndef SOMTGD_MAX_INPUT_LINE_LENGTH
    #ifdef MAX_INPUT_LINE_LENGTH
        #undef MAX_INPUT_LINE_LENGTH
        #define SOMTGD_MAX_INPUT_LINE_LENGTH 1
    #else
        #define MAX_INPUT_LINE_LENGTH SOMTTemplateOutputC_MAX_INPUT_LINE_LENGTH
    #endif /* MAX_INPUT_LINE_LENGTH */
#endif /* SOMTGD_MAX_INPUT_LINE_LENGTH */
#ifndef SOMTGD_MAX_OUTPUT_LINE_LENGTH
    #ifdef MAX_OUTPUT_LINE_LENGTH
        #undef MAX_OUTPUT_LINE_LENGTH
        #define SOMTGD_MAX_OUTPUT_LINE_LENGTH 1
    #else
        #define MAX_OUTPUT_LINE_LENGTH SOMTTemplateOutputC_MAX_OUTPUT_LINE_LENGTH
    #endif /* MAX_OUTPUT_LINE_LENGTH */
#endif /* SOMTGD_MAX_OUTPUT_LINE_LENGTH */
#endif /* SOM_DONT_USE_SHORT_NAMES */

/*
 * End of bindings for IDL types.
 */

/* A procedure to create the SOMTTemplateOutputC Class */
SOMEXTERN SOMClass * SOMLINK SOMTTemplateOutputCNewClass(
		integer4 majorVersion,
		integer4 minorVersion);

/* The API to the SOMTTemplateOutputC class object, and the methods it introduces. */
SOMEXTERN struct SOMTTemplateOutputCClassDataStructure {
	SOMClass *classObject;
	somMToken _get_somtCommentStyle;
	somMToken _set_somtCommentStyle;
	somMToken _get_somtLineLength;
	somMToken _set_somtLineLength;
	somMToken _set_somtCommentNewline;
	somMToken _get_somtCommentNewline;
	somMToken somtGetSymbol;
	somMToken somtSetSymbol;
	somMToken somtSetSymbolCopyName;
	somMToken somtSetSymbolCopyValue;
	somMToken somtSetSymbolCopyBoth;
	somMToken somtCheckSymbol;
	somMToken somtSetOutputFile;
	somMToken somto;
	somMToken somtOutputComment;
	somMToken somtOutputSection;
	somMToken somtAddSectionDefinitions;
	somMToken somtReadSectionDefinitions;
	somMToken somtExpandSymbol;
} SOMDLINK SOMTTemplateOutputCClassData;
#define _SOMTTemplateOutputC SOMTTemplateOutputCClassData.classObject

/* The API to parentMtabs for SOMTTemplateOutputC, and the instance data it introduces. */
SOMEXTERN struct SOMTTemplateOutputCCClassDataStructure {
	somMethodTabs parentMtab;
	somDToken              instanceDataToken;
} SOMDLINK SOMTTemplateOutputCCClassData;

/*
 * -- Typedefs for SOMTTemplateOutputC Method Procedures
 */
SOMEXTERN {
typedef somtCommentStyleT   SOMLINK somTP_SOMTTemplateOutputC__get_somtCommentStyle(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC__get_somtCommentStyle *somTD_SOMTTemplateOutputC__get_somtCommentStyle;
typedef void   SOMLINK somTP_SOMTTemplateOutputC__set_somtCommentStyle(SOMTTemplateOutputC *somSelf, 
		somtCommentStyleT somtCommentStyle);
typedef somTP_SOMTTemplateOutputC__set_somtCommentStyle *somTD_SOMTTemplateOutputC__set_somtCommentStyle;
typedef long   SOMLINK somTP_SOMTTemplateOutputC__get_somtLineLength(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC__get_somtLineLength *somTD_SOMTTemplateOutputC__get_somtLineLength;
typedef void   SOMLINK somTP_SOMTTemplateOutputC__set_somtLineLength(SOMTTemplateOutputC *somSelf, 
		long somtLineLength);
typedef somTP_SOMTTemplateOutputC__set_somtLineLength *somTD_SOMTTemplateOutputC__set_somtLineLength;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC__get_somtCommentNewline(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC__get_somtCommentNewline *somTD_SOMTTemplateOutputC__get_somtCommentNewline;
typedef void   SOMLINK somTP_SOMTTemplateOutputC__set_somtCommentNewline(SOMTTemplateOutputC *somSelf, 
		boolean somtCommentNewline);
typedef somTP_SOMTTemplateOutputC__set_somtCommentNewline *somTD_SOMTTemplateOutputC__set_somtCommentNewline;
typedef string   SOMLINK somTP_SOMTTemplateOutputC_somtGetSymbol(SOMTTemplateOutputC *somSelf, 
		string name);
typedef somTP_SOMTTemplateOutputC_somtGetSymbol *somTD_SOMTTemplateOutputC_somtGetSymbol;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtSetSymbol(SOMTTemplateOutputC *somSelf, 
		string name, 
		string value);
typedef somTP_SOMTTemplateOutputC_somtSetSymbol *somTD_SOMTTemplateOutputC_somtSetSymbol;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtSetSymbolCopyName(SOMTTemplateOutputC *somSelf, 
		string name, 
		string value);
typedef somTP_SOMTTemplateOutputC_somtSetSymbolCopyName *somTD_SOMTTemplateOutputC_somtSetSymbolCopyName;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtSetSymbolCopyValue(SOMTTemplateOutputC *somSelf, 
		string name, 
		string value);
typedef somTP_SOMTTemplateOutputC_somtSetSymbolCopyValue *somTD_SOMTTemplateOutputC_somtSetSymbolCopyValue;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtSetSymbolCopyBoth(SOMTTemplateOutputC *somSelf, 
		string name, 
		string value);
typedef somTP_SOMTTemplateOutputC_somtSetSymbolCopyBoth *somTD_SOMTTemplateOutputC_somtSetSymbolCopyBoth;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC_somtCheckSymbol(SOMTTemplateOutputC *somSelf, 
		string name);
typedef somTP_SOMTTemplateOutputC_somtCheckSymbol *somTD_SOMTTemplateOutputC_somtCheckSymbol;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtSetOutputFile(SOMTTemplateOutputC *somSelf, 
		FILE* fp);
typedef somTP_SOMTTemplateOutputC_somtSetOutputFile *somTD_SOMTTemplateOutputC_somtSetOutputFile;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somto(SOMTTemplateOutputC *somSelf, 
		string tmplt);
typedef somTP_SOMTTemplateOutputC_somto *somTD_SOMTTemplateOutputC_somto;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtOutputComment(SOMTTemplateOutputC *somSelf, 
		string comment);
typedef somTP_SOMTTemplateOutputC_somtOutputComment *somTD_SOMTTemplateOutputC_somtOutputComment;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtOutputSection(SOMTTemplateOutputC *somSelf, 
		string sectionName);
typedef somTP_SOMTTemplateOutputC_somtOutputSection *somTD_SOMTTemplateOutputC_somtOutputSection;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtAddSectionDefinitions(SOMTTemplateOutputC *somSelf, 
		string defString);
typedef somTP_SOMTTemplateOutputC_somtAddSectionDefinitions *somTD_SOMTTemplateOutputC_somtAddSectionDefinitions;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somtReadSectionDefinitions(SOMTTemplateOutputC *somSelf, 
		FILE* fp);
typedef somTP_SOMTTemplateOutputC_somtReadSectionDefinitions *somTD_SOMTTemplateOutputC_somtReadSectionDefinitions;
typedef string   SOMLINK somTP_SOMTTemplateOutputC_somtExpandSymbol(SOMTTemplateOutputC *somSelf, 
		string s, 
		string buf);
typedef somTP_SOMTTemplateOutputC_somtExpandSymbol *somTD_SOMTTemplateOutputC_somtExpandSymbol;

/*
 * -- Typedefs for Reintroduced Wrapper Methods
 */
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDefaultInit(SOMTTemplateOutputC *somSelf, 
		som3InitCtrl* ctrl);
typedef somTP_SOMTTemplateOutputC_somDefaultInit *somTD_SOMTTemplateOutputC_somDefaultInit;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDestruct(SOMTTemplateOutputC *somSelf, 
		octet doFree, 
		som3DestructCtrl* ctrl);
typedef somTP_SOMTTemplateOutputC_somDestruct *somTD_SOMTTemplateOutputC_somDestruct;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDefaultCopyInit(SOMTTemplateOutputC *somSelf, 
		som3InitCtrl* ctrl, 
		SOMObject* fromObj);
typedef somTP_SOMTTemplateOutputC_somDefaultCopyInit *somTD_SOMTTemplateOutputC_somDefaultCopyInit;
typedef SOMTTemplateOutputC*   SOMLINK somTP_SOMTTemplateOutputC_somDefaultAssign(SOMTTemplateOutputC *somSelf, 
		som3AssignCtrl* ctrl, 
		SOMObject* fromObj);
typedef somTP_SOMTTemplateOutputC_somDefaultAssign *somTD_SOMTTemplateOutputC_somDefaultAssign;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDefaultConstCopyInit(SOMTTemplateOutputC *somSelf, 
		som3InitCtrl* ctrl, 
		SOMObject* fromObj);
typedef somTP_SOMTTemplateOutputC_somDefaultConstCopyInit *somTD_SOMTTemplateOutputC_somDefaultConstCopyInit;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDefaultVCopyInit(SOMTTemplateOutputC *somSelf, 
		som3InitCtrl* ctrl, 
		SOMObject* fromObj);
typedef somTP_SOMTTemplateOutputC_somDefaultVCopyInit *somTD_SOMTTemplateOutputC_somDefaultVCopyInit;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDefaultConstVCopyInit(SOMTTemplateOutputC *somSelf, 
		som3InitCtrl* ctrl, 
		SOMObject* fromObj);
typedef somTP_SOMTTemplateOutputC_somDefaultConstVCopyInit *somTD_SOMTTemplateOutputC_somDefaultConstVCopyInit;
typedef SOMTTemplateOutputC*   SOMLINK somTP_SOMTTemplateOutputC_somDefaultConstAssign(SOMTTemplateOutputC *somSelf, 
		som3AssignCtrl* ctrl, 
		SOMObject* fromObj);
typedef somTP_SOMTTemplateOutputC_somDefaultConstAssign *somTD_SOMTTemplateOutputC_somDefaultConstAssign;
typedef SOMTTemplateOutputC*   SOMLINK somTP_SOMTTemplateOutputC_somDefaultVAssign(SOMTTemplateOutputC *somSelf, 
		som3AssignCtrl* ctrl, 
		SOMObject* fromObj);
typedef somTP_SOMTTemplateOutputC_somDefaultVAssign *somTD_SOMTTemplateOutputC_somDefaultVAssign;
typedef SOMTTemplateOutputC*   SOMLINK somTP_SOMTTemplateOutputC_somDefaultConstVAssign(SOMTTemplateOutputC *somSelf, 
		som3AssignCtrl* ctrl, 
		SOMObject* fromObj);
typedef somTP_SOMTTemplateOutputC_somDefaultConstVAssign *somTD_SOMTTemplateOutputC_somDefaultConstVAssign;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somInit(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC_somInit *somTD_SOMTTemplateOutputC_somInit;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somFree(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC_somFree *somTD_SOMTTemplateOutputC_somFree;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somUninit(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC_somUninit *somTD_SOMTTemplateOutputC_somUninit;
typedef SOMClass*   SOMLINK somTP_SOMTTemplateOutputC_somGetClass(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC_somGetClass *somTD_SOMTTemplateOutputC_somGetClass;
typedef string   SOMLINK somTP_SOMTTemplateOutputC_somGetClassName(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC_somGetClassName *somTD_SOMTTemplateOutputC_somGetClassName;
typedef long   SOMLINK somTP_SOMTTemplateOutputC_somGetSize(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC_somGetSize *somTD_SOMTTemplateOutputC_somGetSize;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC_somIsA(SOMTTemplateOutputC *somSelf, 
		SOMClass* aClassObj);
typedef somTP_SOMTTemplateOutputC_somIsA *somTD_SOMTTemplateOutputC_somIsA;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC_somIsInstanceOf(SOMTTemplateOutputC *somSelf, 
		SOMClass* aClassObj);
typedef somTP_SOMTTemplateOutputC_somIsInstanceOf *somTD_SOMTTemplateOutputC_somIsInstanceOf;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC_somRespondsTo(SOMTTemplateOutputC *somSelf, 
		somId mId);
typedef somTP_SOMTTemplateOutputC_somRespondsTo *somTD_SOMTTemplateOutputC_somRespondsTo;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC_somDispatch(SOMTTemplateOutputC *somSelf, 
		somToken* retValue, 
		somId methodId, 
		va_list ap);
typedef somTP_SOMTTemplateOutputC_somDispatch *somTD_SOMTTemplateOutputC_somDispatch;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC_somClassDispatch(SOMTTemplateOutputC *somSelf, 
		SOMClass* clsObj, 
		somToken* retValue, 
		somId methodId, 
		va_list ap);
typedef somTP_SOMTTemplateOutputC_somClassDispatch *somTD_SOMTTemplateOutputC_somClassDispatch;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC_somCastObj(SOMTTemplateOutputC *somSelf, 
		SOMClass* cls);
typedef somTP_SOMTTemplateOutputC_somCastObj *somTD_SOMTTemplateOutputC_somCastObj;
typedef boolean   SOMLINK somTP_SOMTTemplateOutputC_somResetObj(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC_somResetObj *somTD_SOMTTemplateOutputC_somResetObj;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDispatchV(SOMTTemplateOutputC *somSelf, 
		somId methodId, 
		somId descriptor, 
		va_list ap);
typedef somTP_SOMTTemplateOutputC_somDispatchV *somTD_SOMTTemplateOutputC_somDispatchV;
typedef long   SOMLINK somTP_SOMTTemplateOutputC_somDispatchL(SOMTTemplateOutputC *somSelf, 
		somId methodId, 
		somId descriptor, 
		va_list ap);
typedef somTP_SOMTTemplateOutputC_somDispatchL *somTD_SOMTTemplateOutputC_somDispatchL;
typedef void*   SOMLINK somTP_SOMTTemplateOutputC_somDispatchA(SOMTTemplateOutputC *somSelf, 
		somId methodId, 
		somId descriptor, 
		va_list ap);
typedef somTP_SOMTTemplateOutputC_somDispatchA *somTD_SOMTTemplateOutputC_somDispatchA;
typedef double   SOMLINK somTP_SOMTTemplateOutputC_somDispatchD(SOMTTemplateOutputC *somSelf, 
		somId methodId, 
		somId descriptor, 
		va_list ap);
typedef somTP_SOMTTemplateOutputC_somDispatchD *somTD_SOMTTemplateOutputC_somDispatchD;
typedef SOMObject*   SOMLINK somTP_SOMTTemplateOutputC_somPrintSelf(SOMTTemplateOutputC *somSelf);
typedef somTP_SOMTTemplateOutputC_somPrintSelf *somTD_SOMTTemplateOutputC_somPrintSelf;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDumpSelf(SOMTTemplateOutputC *somSelf, 
		long level);
typedef somTP_SOMTTemplateOutputC_somDumpSelf *somTD_SOMTTemplateOutputC_somDumpSelf;
typedef void   SOMLINK somTP_SOMTTemplateOutputC_somDumpSelfInt(SOMTTemplateOutputC *somSelf, 
		long level);
typedef somTP_SOMTTemplateOutputC_somDumpSelfInt *somTD_SOMTTemplateOutputC_somDumpSelfInt;
}

#endif /* SOMTTemplateOutputC_API */


/*
 * -- This emitter treats Method Tokens as Thunks by default.
 * -- Use the sc modifier "nothunks" to change this default
 */
#undef somresolve_
#define somresolve_(obj,mToken) ((somMethodProc*)((void)obj, mToken))

/*
 * -- The C++ Wrapper Class for SOMTTemplateOutputC
 */
class SOMTTemplateOutputC : public SOMObject
{
public:

// SOMTTemplateOutputC::new creates the class object if necessary, and then uses somNewNoInit
// to allocate memory and create the object. Initialization is in ctors.
void *operator new(size_t)
{
   if (!_SOMTTemplateOutputC) SOMTTemplateOutputCNewClass(SOMTTemplateOutputC_MajorVersion,SOMTTemplateOutputC_MinorVersion);
   return (void*)
      SOM_Resolve(_SOMTTemplateOutputC,SOMClass,somNewNoInit)
         ((SOMClass *)((void*)_SOMTTemplateOutputC));
}

// SOMTTemplateOutputC::delete uses somDestruct.
void operator delete(void * obj)
{
   if (obj && *(void**)obj) {
      SOM_Resolve(obj,SOMObject,somFree)
         ((SOMObject*)obj);
   }
}

SOMTTemplateOutputC& operator=(SOMTTemplateOutputC& fromObj)
{
   this->somDefaultAssign(0,(SOMObject*)((void*)&fromObj));
   return *this;
}

SOMTTemplateOutputC()
{
   if (*(void**)this != 
       ((somParentMtabStructPtr)
        (SOMTTemplateOutputCCClassData.parentMtab))->mtab)
      return;
   ((SOMObject*)((void*)this))->somDefaultInit(0);
}

SOMTTemplateOutputC(SOMTTemplateOutputC* fromObj)
{
   if (*(void**)this != 
       ((somParentMtabStructPtr)
        (SOMTTemplateOutputCCClassData.parentMtab))->mtab)
      return;
   ((SOMObject*)((void*)this))->somDefaultCopyInit(0,((SOMObject*)((void*)fromObj)));
}

#ifdef __IBMCPP__
#pragma info(nocnv,nopar)
#endif
SOMTTemplateOutputC(const SOMTTemplateOutputC* fromObj)
{
   if (*(void**)this != 
       ((somParentMtabStructPtr)
        (SOMTTemplateOutputCCClassData.parentMtab))->mtab)
      return;
   ((SOMObject*)((void*)this))->somDefaultConstCopyInit(0,((SOMObject*)((void*)fromObj)));
}
#ifdef __IBMCPP__
#pragma info(restore)
#endif


/* method: _get_somtCommentStyle */
somtCommentStyleT   _get_somtCommentStyle()
{
/*
 *  Controls the style in which comments are wrtten as follows:
 *    somtDashesE: "--" at the start of each line
 *    somtCPPE: C++ style, "//" at the start of each line
 *    somtCSimpleE: simple C style, each line wrapped in / * and * /
 *    somtCBlockE: block C style, block style, ie leading / * then a * on each
 *               line and then a final * /
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,_get_somtCommentStyle)
	(this);
}


/* method: _set_somtCommentStyle */
void   _set_somtCommentStyle(somtCommentStyleT somtCommentStyle)
{
/*
 *  Controls the style in which comments are wrtten as follows:
 *    somtDashesE: "--" at the start of each line
 *    somtCPPE: C++ style, "//" at the start of each line
 *    somtCSimpleE: simple C style, each line wrapped in / * and * /
 *    somtCBlockE: block C style, block style, ie leading / * then a * on each
 *               line and then a final * /
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,_set_somtCommentStyle)
	(this,somtCommentStyle);
}


/* method: _get_somtLineLength */
long   _get_somtLineLength()
{
/*
 *  Controls list output only.  Default is 72.
 *  At least one list item will be output on each line, so making
 *  this value very short will cause list items to be placed on
 *  separate lines.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,_get_somtLineLength)
	(this);
}


/* method: _set_somtLineLength */
void   _set_somtLineLength(long somtLineLength)
{
/*
 *  Controls list output only.  Default is 72.
 *  At least one list item will be output on each line, so making
 *  this value very short will cause list items to be placed on
 *  separate lines.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,_set_somtLineLength)
	(this,somtLineLength);
}


/* method: _get_somtCommentNewline */
boolean   _get_somtCommentNewline()
{
/*
 * Method from the IDL attribute statement:
 * "attribute boolean somtCommentNewline"
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,_get_somtCommentNewline)
	(this);
}


/* method: _set_somtCommentNewline */
void   _set_somtCommentNewline(boolean somtCommentNewline)
{
/*
 * Method from the IDL attribute statement:
 * "attribute boolean somtCommentNewline"
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,_set_somtCommentNewline)
	(this,somtCommentNewline);
}


/* method: somtGetSymbol */
string   somtGetSymbol(string name)
{
/*
 *  Returns the value associated with <name>.  If no value is
 *  associated with <name> then NULL is returned
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtGetSymbol)
	(this,name);
}


/* method: somtSetSymbol */
void   somtSetSymbol(string name, 
		string value)
{
/*
 *  Makes the symbol with name <name> have value <value>.  This will
 *  overwrite any previous value the symbol had, and add the symbol
 *  if necessary.
 *  Takes over ownership of both name and value.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtSetSymbol)
	(this,name,value);
}


/* method: somtSetSymbolCopyName */
void   somtSetSymbolCopyName(string name, 
		string value)
{
/*
 *  See somtSetSymbol
 *  Only takes over ownership of value.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtSetSymbolCopyName)
	(this,name,value);
}


/* method: somtSetSymbolCopyValue */
void   somtSetSymbolCopyValue(string name, 
		string value)
{
/*
 *  See somtSetSymbol
 *  Only takes over ownership of name.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtSetSymbolCopyValue)
	(this,name,value);
}


/* method: somtSetSymbolCopyBoth */
void   somtSetSymbolCopyBoth(string name, 
		string value)
{
/*
 *  See somtSetSymbol
 *  Does not take over ownership of either <name> or <value>
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtSetSymbolCopyBoth)
	(this,name,value);
}


/* method: somtCheckSymbol */
boolean   somtCheckSymbol(string name)
{
/*
 *  Returns 1 (true) if the indicated symbol has non-null, non-zero
 *  length value, and 0 (false) otherwise.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtCheckSymbol)
	(this,name);
}


/* method: somtSetOutputFile */
void   somtSetOutputFile(FILE* fp)
{
/*
 *  All template output will be directed to <fp>. Default is <stdout>.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtSetOutputFile)
	(this,fp);
}


/* method: somto */
void   somto(string tmplt)
{
/*
 *  Outputs a template, <tmplt>, after substitution for any symbols
 *  that occur in it.  Five substitutions are supported: simple,
 *  list, comment, tab, and conditional.
 *  Substitutable items in the template are bracketed with angle
 *  brackets. (Backslash can be used to escape an angle bracket.)
 *  Simple substitutions just replace a symbol with its value. If
 *  the symbol has no value in this template object then the symbol
 *  is replaced error string but no error is raised.
 *  List substitution assumes that the symbol has a value in output
 *  template list form. This is a newline separated string of
 *  values. The list substitution specification consists of four
 *  parts, a prefix, a symbol, a separator, and a list indicator.
 *  prefixes and separators can only be composed of blanks, comma,
 *  colons, and semi-colons.  The list indicator is "..." (three
 *  periods).  For example, the list substitution
 *  specification "<, name, ...> has a prefix of ", ", a symbol of
 *  "name" and a separator of ", ".  The prefix will be used
 *  whenever there is at least one item in the list and the separator
 *  will be used between any two list items.  After the first items
 *  of a list is placed each additional item is evaluated to see if
 *  it would begin after the line length limit (set by
 *  _set_somtLineLength), if it would then a new line is begun and the
 *  value is placed directly under the first item.
 *  Comment substitution assumes that the symbol has a value in
 *  output template list form.  A comment specification consists of
 *  a comment indicator followed by a symbol name. The comment
 *  indicator is "--".  Eg, <-- classComment> is a valid comment
 *  substitution specification.  The lines of the comment are output
 *  according to the current comment style (see <somtCommentStyle>)
 *  and alined with the starting column of the comment
 *  specification.
 *  Tab substitution is specified by <@dd> where "dd" is a valid
 *  positive integer. Blanks will be inserted into the output stream
 *  if necessary to position the next character of output at the
 *  column indicated by "dd".
 *  Conditional substitution is specified by puting a question mark,
 *  "?", in column one of the template line.  The line will not be
 *  output at all unless at least one valid, non-blank,  symbol
 *  substitution  occurs on the line.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somto)
	(this,tmplt);
}


/* method: somtOutputComment */
void   somtOutputComment(string comment)
{
/*
 *  Inserts a comment into the output stream.  <comment> must be a
 *  string containing the comment with lines in the comment
 *  seperated by newlines.
 *  The style of output is controlled by <somtCommentStyle>
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtOutputComment)
	(this,comment);
}


/* method: somtOutputSection */
void   somtOutputSection(string sectionName)
{
/*
 *  Just like <somto> above, except <sectionName> must be a symbol
 *  whose value will be used as the template.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtOutputSection)
	(this,sectionName);
}


/* method: somtAddSectionDefinitions */
void   somtAddSectionDefinitions(string defString)
{
/*
 *  <defString> must be a string of the form:
 *  :section1
 *  value 1 line 1
 *  value 1 line 2
 *  :section2
 *  value 2 line 1
 *  :section3
 *  value 3 line 1
 *  Where the lines that contain a ":" in column 1 immediately followed
 *  by a single name are used to intro the start of a new section.
 *  The section is named by the name on the colon line.  A backslash
 *  can be used to escape a colon in column one that is not supposed
 *  to start a new section.
 *  Adds the indicated section definitions to this template.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtAddSectionDefinitions)
	(this,defString);
}


/* method: somtReadSectionDefinitions */
void   somtReadSectionDefinitions(FILE* fp)
{
/*
 *  Reads section definitions from the indicated file.  The section
 *  definitions must be in the form defined above in
 *  <somtAddSectionDefinitions>.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtReadSectionDefinitions)
	(this,fp);
}


/* method: somtExpandSymbol */
string   somtExpandSymbol(string s, 
		string buf)
{
/*
 *  Expands simple symbols in an already expanded string.  Thus if you
 *  have a symbol which is itself a Section in a template file, and this
 *  section could have other sections in it then you should call this
 *  method.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMTTemplateOutputC,somtExpandSymbol)
	(this,s,buf);
}


/*
 * Reintroduce inherited methods
 */

/* initializer method: somDefaultInit */
void   somDefaultInit(som3InitCtrl* ctrl)
{
/*
 *  A default initializer for a SOM object. Passing a null ctrl
 *  indicates to the receiver that its class is the class of the
 *  object being initialized, whereby the initializer will determine
 *  an appropriate control structure.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultInit)
	(this,ctrl);
}


/* method: somDestruct */
void   somDestruct(octet doFree, 
		som3DestructCtrl* ctrl)
{
/*
 *  The default destructor for a SOM object. A nonzero <doFree>
 *  indicates that the object storage should be freed by the
 *  object's class (via somDeallocate) after uninitialization.
 *  As with somDefaultInit, a null ctrl can be passed.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDestruct)
	(this,doFree,ctrl);
}


/* initializer method: somDefaultCopyInit */
void   somDefaultCopyInit(som3InitCtrl* ctrl, 
		SOMObject* fromObj)
{
/*
 *  A default copy constructor. Use this to make copies of objects for
 *  calling methods with "by-value" argument semantics.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultCopyInit)
	(this,ctrl,fromObj);
}


/* method: somDefaultAssign */
SOMTTemplateOutputC*  somDefaultAssign(som3AssignCtrl* ctrl, 
		SOMObject* fromObj)
{
/*
 *  A default assignment operator. Use this to "assign" the state of one
 *  object to another.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultAssign)
	(this,ctrl,fromObj);
}


/* initializer method: somDefaultConstCopyInit */
void   somDefaultConstCopyInit(som3InitCtrl* ctrl, 
		SOMObject* fromObj)
{
/*
 *  A default copy constructor that uses a const fromObj.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultConstCopyInit)
	(this,ctrl,fromObj);
}


/* initializer method: somDefaultVCopyInit */
void   somDefaultVCopyInit(som3InitCtrl* ctrl, 
		SOMObject* fromObj)
{
/*
 *  A default copy constructor that uses a volatile fromObj.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultVCopyInit)
	(this,ctrl,fromObj);
}


/* initializer method: somDefaultConstVCopyInit */
void   somDefaultConstVCopyInit(som3InitCtrl* ctrl, 
		SOMObject* fromObj)
{
/*
 *  A default copy constructor that uses a const volatile fromObj.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultConstVCopyInit)
	(this,ctrl,fromObj);
}


/* method: somDefaultConstAssign */
SOMTTemplateOutputC*  somDefaultConstAssign(som3AssignCtrl* ctrl, 
		SOMObject* fromObj)
{
/*
 *  A default assignment operator that uses a const fromObj.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultConstAssign)
	(this,ctrl,fromObj);
}


/* method: somDefaultVAssign */
SOMTTemplateOutputC*  somDefaultVAssign(som3AssignCtrl* ctrl, 
		SOMObject* fromObj)
{
/*
 *  A default assignment operator that uses a volatile fromObj.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultVAssign)
	(this,ctrl,fromObj);
}


/* method: somDefaultConstVAssign */
SOMTTemplateOutputC*  somDefaultConstVAssign(som3AssignCtrl* ctrl, 
		SOMObject* fromObj)
{
/*
 *  A default assignment operator that uses a const volatile fromObj.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDefaultConstVAssign)
	(this,ctrl,fromObj);
}


/* method: somInit */
void   somInit()
{
/*
 *  Obsolete but still supported. Override somDefaultInit instead of somInit.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somInit)
	(this);
}


/* method: somFree */
void   somFree()
{
/*
 *  Use as directed by framework implementations.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somFree)
	(this);
}


/* method: somUninit */
void   somUninit()
{
/*
 *  Obsolete but still supported. Override somDestruct instead of somUninit.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somUninit)
	(this);
}


/* method: somGetClass */
SOMClass*   somGetClass()
{
/*
 *  Return the receiver's class.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somGetClass)
	(this);
}


/* method: somGetClassName */
string   somGetClassName()
{
/*
 *  Return the name of the receiver's class.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somGetClassName)
	(this);
}


/* method: somGetSize */
long   somGetSize()
{
/*
 *  Return the size of the receiver.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somGetSize)
	(this);
}


/* method: somIsA */
boolean   somIsA(SOMClass* aClassObj)
{
/*
 *  Returns 1 (true) if the receiver responds to methods
 *  introduced by <aClassObj>, and 0 (false) otherwise.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somIsA)
	(this,aClassObj);
}


/* method: somIsInstanceOf */
boolean   somIsInstanceOf(SOMClass* aClassObj)
{
/*
 *  Returns 1 (true) if the receiver is an instance of
 *  <aClassObj> and 0 (false) otherwise.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somIsInstanceOf)
	(this,aClassObj);
}


/* method: somRespondsTo */
boolean   somRespondsTo(somId mId)
{
/*
 *  Returns 1 (true) if the indicated method can be invoked
 *  on the receiver and 0 (false) otherwise.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somRespondsTo)
	(this,mId);
}


/* va_list method: somDispatch */

/*
 *  This method provides a generic, class-specific dispatch mechanism.
 *  It accepts as input <retValue> a pointer to the memory area to be
 *  loaded with the result of dispatching the method indicated by
 *  <methodId> using the arguments in <ap>. <ap> contains the object
 *  on which the method is to be invoked as the first argument.
 */
/* the va_list invocation form */
boolean   SOMTTemplateOutputC_somDispatch(somToken* retValue, 
		somId methodId, 
		va_list ap)
{return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatch)
	(this,retValue,methodId,ap);
}

/* the varargs invocation form */
boolean   somDispatch(somToken* retValue, 
		somId methodId, 
		...)
{
/*
 *  This method provides a generic, class-specific dispatch mechanism.
 *  It accepts as input <retValue> a pointer to the memory area to be
 *  loaded with the result of dispatching the method indicated by
 *  <methodId> using the arguments in <ap>. <ap> contains the object
 *  on which the method is to be invoked as the first argument.
 */
   va_list ap;
   va_start(ap, methodId);
   boolean __somResult = 
      SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatch)
	(this,retValue,methodId,ap);
   va_end(ap);
   return __somResult;
}


/* va_list method: somClassDispatch */

/*
 *  Like somDispatch, but method resolution for static methods is done
 *  according to the clsObj instance method table.
 */
/* the va_list invocation form */
boolean   SOMTTemplateOutputC_somClassDispatch(SOMClass* clsObj, 
		somToken* retValue, 
		somId methodId, 
		va_list ap)
{return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somClassDispatch)
	(this,clsObj,retValue,methodId,ap);
}

/* the varargs invocation form */
boolean   somClassDispatch(SOMClass* clsObj, 
		somToken* retValue, 
		somId methodId, 
		...)
{
/*
 *  Like somDispatch, but method resolution for static methods is done
 *  according to the clsObj instance method table.
 */
   va_list ap;
   va_start(ap, methodId);
   boolean __somResult = 
      SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somClassDispatch)
	(this,clsObj,retValue,methodId,ap);
   va_end(ap);
   return __somResult;
}


/* method: somCastObj */
boolean   somCastObj(SOMClass* cls)
{
/*
 *  cast the receiving object to cls (which must be an ancestor of the
 *  objects true class. Returns true on success.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somCastObj)
	(this,cls);
}


/* method: somResetObj */
boolean   somResetObj()
{
/*
 *  reset an object to its true class. Returns true always.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somResetObj)
	(this);
}


/* va_list method: somDispatchV */

/*
 *  Obsolete. Use somDispatch instead.
 */
/* the va_list invocation form */
void   SOMTTemplateOutputC_somDispatchV(somId methodId, 
		somId descriptor, 
		va_list ap)
{   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatchV)
	(this,methodId,descriptor,ap);
}

/* the varargs invocation form */
void   somDispatchV(somId methodId, 
		somId descriptor, 
		...)
{
/*
 *  Obsolete. Use somDispatch instead.
 */
   va_list ap;
   va_start(ap, descriptor);
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatchV)
	(this,methodId,descriptor,ap);
   va_end(ap);
}


/* va_list method: somDispatchL */

/*
 *  Obsolete. Use somDispatch instead.
 */
/* the va_list invocation form */
long   SOMTTemplateOutputC_somDispatchL(somId methodId, 
		somId descriptor, 
		va_list ap)
{return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatchL)
	(this,methodId,descriptor,ap);
}

/* the varargs invocation form */
long   somDispatchL(somId methodId, 
		somId descriptor, 
		...)
{
/*
 *  Obsolete. Use somDispatch instead.
 */
   va_list ap;
   va_start(ap, descriptor);
   long __somResult = 
      SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatchL)
	(this,methodId,descriptor,ap);
   va_end(ap);
   return __somResult;
}


/* va_list method: somDispatchA */

/*
 *  Obsolete. Use somDispatch instead.
 */
/* the va_list invocation form */
void*   SOMTTemplateOutputC_somDispatchA(somId methodId, 
		somId descriptor, 
		va_list ap)
{return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatchA)
	(this,methodId,descriptor,ap);
}

/* the varargs invocation form */
void*   somDispatchA(somId methodId, 
		somId descriptor, 
		...)
{
/*
 *  Obsolete. Use somDispatch instead.
 */
   va_list ap;
   va_start(ap, descriptor);
   void* __somResult = 
      SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatchA)
	(this,methodId,descriptor,ap);
   va_end(ap);
   return __somResult;
}


/* va_list method: somDispatchD */

/*
 *  Obsolete. Use somDispatch instead.
 */
/* the va_list invocation form */
double   SOMTTemplateOutputC_somDispatchD(somId methodId, 
		somId descriptor, 
		va_list ap)
{return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatchD)
	(this,methodId,descriptor,ap);
}

/* the varargs invocation form */
double   somDispatchD(somId methodId, 
		somId descriptor, 
		...)
{
/*
 *  Obsolete. Use somDispatch instead.
 */
   va_list ap;
   va_start(ap, descriptor);
   double __somResult = 
      SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDispatchD)
	(this,methodId,descriptor,ap);
   va_end(ap);
   return __somResult;
}


/* method: somPrintSelf */
SOMObject*   somPrintSelf()
{
/*
 *  Uses <SOMOutCharRoutine> to write a brief string with identifying
 *  information about this object.  The default implementation just gives
 *  the object's class name and its address in memory.
 *  <self> is returned.
 */
   return SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somPrintSelf)
	(this);
}


/* method: somDumpSelf */
void   somDumpSelf(long level)
{
/*
 *  Uses <SOMOutCharRoutine> to write a detailed description of this object
 *  and its current state.
 * 
 *  <level> indicates the nesting level for describing compound objects
 *  it must be greater than or equal to zero.  All lines in the
 *  description will be preceeded by <2*level> spaces.
 * 
 *  This routine only actually writes the data that concerns the object
 *  as a whole, such as class, and uses <somDumpSelfInt> to describe
 *  the object's current state.  This approach allows readable
 *  descriptions of compound objects to be constructed.
 * 
 *  Generally it is not necessary to override this method, if it is
 *  overriden it generally must be completely replaced.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDumpSelf)
	(this,level);
}


/* method: somDumpSelfInt */
void   somDumpSelfInt(long level)
{
/*
 *  Uses <SOMOutCharRoutine> to write in the current state of this object.
 *  Generally this method will need to be overridden.  When overriding
 *  it, begin by calling the parent class form of this method and then
 *  write in a description of your class's instance data. This will
 *  result in a description of all the object's instance data going
 *  from its root ancestor class to its specific class.
 */
   SOM_ResolveD(this,SOMTTemplateOutputC,SOMObject,somDumpSelfInt)
	(this,level);
}



};   /* SOMTTemplateOutputC */



#endif       /* SOM_SOMTTemplateOutputC_xh */
