//
//   COMPONENT_NAME: some
//
//   ORIGINS: 27
//
//
//    25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,1994,1996 
//   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.
//
//#  @(#) somc/scentry.idl 2.11 5/9/96 15:31:08 [12/22/96 21:12:07]


#ifndef scentry_idl
#define scentry_idl

#include <somobj.idl>
#include "sctypes.h"

interface SOMTEntryC : SOMObject

// A SOM class interface definition is compiled to produce a graph
// structure whose nodes are instances of <SOMTEntry> or its
// sub-classes.  Each entry is derived from some syntactic element of
// the definition source. The attributes defined in <SOMTEntryC>
// refer to this syntactic element in a fairly obvious way.
//

{
  attribute string somtEntryName;
  // The name associated with this entry.  Eg, the name of
  // the data item, the class, the method, the type, etc.

  attribute SOMTTypes somtElementType;
  // Returns the type of this entry.
  // This is not datatype, but entry type (method, class, 
  // passthru, etc.). The value is defined by SOMTTypes.

  readonly attribute string somtElementTypeName;
  // String version of somtElementType.

  readonly attribute string somtEntryComment;
  // Returns the comment associated with this entry, or NULL is this
  // entry has no associated comment.  Comments will have comment
  // delimitors removed, but will retain newline characters as
  // specified in the source file. (use smLookupComment)

  readonly attribute unsigned long somtSourceLineNumber;
  // Returns the line number in the source file where this entry's
  // syntactic form ended.

  readonly attribute TypeCode somtTypeCode;
  // The typecode, if appropriate, or NULL.

  readonly attribute boolean somtIsReference;
  // Whether the entry is just a reference to the real type (TRUE) 
  // rather than a declaration of it (FALSE).

  readonly attribute string somtIDLScopedName;
  // The IDL scoped name of the entry (using double colon as delimiter).

  readonly attribute string somtCScopedName;
  // The C scoped name of the entry (using underscore as delimiter).

  string somtGetModifierValue(in string modifierName);
  
  // Returns the value of the named modifier if this entry has the
  // named modifier and NULL otherwise. Note: if the modifier is
  // present but does not have a value then a value of <'\1'> is
  // returned.

  boolean somtGetFirstModifier(inout string modifierName, 
                         inout string modifierValue);
  
  // Returns the first modifier associated with this entry.  1 (true)
  // is returned if the entry has at least one modifier and 0 (false)
  // otherwise.

  boolean somtGetNextModifier(inout string modifierName, 
                        inout string modifierValue);
  
  // Returns the next modifier (with respect to the last call to
  // <somtGetNextModifier> or <somtGetFirstModifier>)
  // associated with this entry.  1 (true) is returned if the entry
  // had another modifier and 0 (false) otherwise.

  long somtFormatModifier(in string buffer, 
                       in string name, 
                       in string value);
  
  // Formats the indicated name/value pair into buffer.  Buffer must
  // be big enough to hold all the formatted pair, no checks are made.
  // The number of characters added to buffer are returned (not
  // including the trailing null character).
  // Note: value may be null
  // You will probably never call this method, it is provided so that
  // you can override it to control the format returned in
  // <somtGetModifierList>.

  long somtGetModifierList(in string buffer);
  
  // The modifiers for this entry are placed in <buffer> in template
  // list form (newline separated).  Buffer must be big enough to
  // hold all the modifiers, no checks are made. The number of
  // modifiers is returned.

  long somtSetSymbolsOnEntry(in SOMTEmitC emitter, 
                          in string prefix);
  
  // Places a number of symbol/value pairs in <t>.  All the symbols
  // will begin with <prefix>.

  void somtSetEntryStruct(inout Entry es);
  
  // Sets the entry struct data member.
  // Note, when overridding this method, it is important to call the
  // parent version of the method first and then do your processing.


#ifdef __SOMIDL__
  implementation {
  
    releaseorder: _get_somtEntryName, _set_somtEntryName, 
                  _get_somtElementType, _set_somtElementType, 
                  _get_somtEntryComment, _get_somtSourceLineNumber, 
                  _get_somtTypeCode, _get_somtIsReference, 
                  somtGetModifierValue, somtGetFirstModifier, 
                  somtGetNextModifier, somtFormatModifier, 
                  somtGetModifierList, somtSetSymbolsOnEntry, 
                  somtSetEntryStruct, _get_somtEntryStruct, 
                  somtShowAssocEntry, _get_somtCScopedName, 
                  _get_somtIDLScopedName, _get_somtElementTypeName;


    //# Class Modifiers
    majorversion = 2;
    minorversion = 1;
    filestem = scentry;
#ifdef _WIN32
    dllname = "some.dll";
#endif
    callstyle = oidl;
  
    passthru C_h_after =        "#include <sctypes.h>"
  "#include <scemit.h>"
  "#include <sctmplt.h>";
    passthru C_xh_after =        "#include <sctypes.h>"
  "#include <sctmplt.xh>";
  
  
    //# Internal Instance Variables
  
    //# Method Modifiers
    somInit: override;
    somUninit: override;
    somPrintSelf: override;
    somDumpSelfInt: override;
    somDumpSelf: override;
  
    //# Attribute Modifiers
    somtEntryComment: nodata;
    somtCScopedName: nodata;
    somtIDLScopedName: nodata;
    somtSourceLineNumber: nodata;
    somtTypeCode: nodata;
    somtIsReference: nodata;
    somtEntryStruct: nodata;
    somtElementTypeName: nodata;
    somtEntryName: noget;
  
  };
#endif /* __SOMIDL__ */
};


#endif  /* scentry_idl */
