#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##
@if $m2c_get_use_temp == 1@
    /*
     * Define temporary variable(s). If speed/efficency is an issue,
     * remove this code and deal with the pointer directly.
     * (set $@m2c_get_use_temp = 0 in your conf file to turn off)
     */
@    if $m2c_node_needlength == 1@
    $m2c_decl * $m2c_node_lh;
    size_t $m2c_node_lhs;
@    else@
    $m2c_decl $m2c_node_lh;
@    end@
        
@end@
@if $m2c_node_needlength == 1@
   /** we should have a non-NULL pointer and enough storage */
   netsnmp_assert( (NULL != $m2c_node_param_ref_name) && (NULL != *$m2c_node_param_ref_name));
   netsnmp_assert( NULL != $m2c_node_param_ref_lname );
@else@
   /** we should have a non-NULL pointer */
   netsnmp_assert( NULL != $m2c_node_param_ref_name );
@end@

@if ($m2c_get_use_temp == 1) && ($m2c_node_needlength == 1)@
    $m2c_node_lh = (* $m2c_node_param_ref_name);
    $m2c_node_lhs = (* $m2c_node_param_ref_lname);

@end@
##
########################################################################
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile$ $Revision$ */
@end@
