#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##
##   enums first
@if $m2c_node_skip_mapping == -1@
@   eval $m2c_node_skip_mapping = 1@
@end@
@if ($node.enums == 1) && ("$node.perltype" eq "BITS")@
    /*
     * TODO:242:o: update or replace BITS tests (get).
     * If $node data is stored in SNMP BIT order, individual
     * bit tests are redundant, and you can do a straight copy. If not, then
     * update each if condition to test the correct bit.
     *
     * NOTE WELL: setting bit '0' for:
     *             C  0x0000001
     *          SNMP  0x8000000
     *
@     if $m2c_node_skip_mapping != 1@
     * define correct bit to test for all INTERNAL_* defines in the
     * ${context} enum or contants header file.
     */
$example_start
    $m2c_node_lh = 0;
@    foreach $e $v enum@
@        include m2c_setup_enum.m2i@
    if ($m2c_ctx_rh & INTERNAL_$context.uc_$m2c_iname) {
        $m2c_node_lh |= $m2c_ename;
    }
@    end@ # for each
$example_end
@  else@
     * assuming generated code keeps $node BITS in SNMP order.
     */
    $m2c_node_lh = @m2c_ctx_rh;
@  end@
@end@
##
########################################################################
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile$ $Revision$ */
@end@
