#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##
@include generic-get-decl.m2i@
@include generic-ctx-get.m2i@
@if $m2c_node_skip_mapping != 1@
    /*
     * TODO:245:o: |-> Implement $context RowStatus mapping
@if $mfd_code_verbose == 1@
     *
     * If the values for your data type don't exactly match the
     * possible values defined by the mib, you should map them here.
@end@
     */
    /*
     * update INTERNAL_* macros defined in the header, if neccessary
     */
    switch ($m2c_node_lh) {

        /* `active', which indicates that the conceptual row is
              available for use by the managed device */
    case INTERNAL_$context.uc_$node.uc_ACTIVE:
        $m2c_node_lh = ROWSTATUS_ACTIVE;
        break;

        /* `notInService', which indicates that the conceptual
                 row exists in the agent, but is unavailable for use by
                 the managed device (see NOTE below); 'notInService' has
                 no implication regarding the internal consistency of
                 the row, availability of resources, or consistency with
                 the current state of the managed device */
    case INTERNAL_$context.uc_$node.uc_NOTINSERVICE:
        $m2c_node_lh = ROWSTATUS_NOTINSERVICE;
        break;

        /* `notReady', which indicates that the conceptual row
                 exists in the agent, but is missing information
                 necessary in order to be available for use by the
                 managed device (i.e., one or more required columns in
                 the conceptual row have not been instanciated) */
    case INTERNAL_$context.uc_$node.uc_NOTREADY:
        $m2c_node_lh = ROWSTATUS_NOTREADY;
        break;

    default:
        snmp_log(LOG_ERR,
                 "couldn't map value %ld for $node RowStatus\n",
                 $m2c_node_lh);
        return SNMP_ERR_GENERR;
    }

@end@
@include generic-get-decl-bot.m2i@            
##
########################################################################
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile$ $Revision$ */
@end@
