#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
########################################################################
## lower conf files get confused with multiple processing types, so
## set single options
@eval $mfd_data_set_processing_type_save = "$m2c_processing_type"@
@if "$mfd_processing_types" =~ /h/@
@eval $m2c_processing_type = 'h'@
@if $m2c_create_fewer_files != 1@
@   eval $hack = "Id"@
@open ${name}_data_set.h@
/*
 * Note: this file originally auto-generated by mib2c using
 *       version $Revision$ of $RCSfile$ 
 *
 * $$hack:$
 */
@eval $m2c_save = "$name"@
@eval $name = "${name}_DATA_SET"@
@include generic-header-top.m2i@
@eval $name = "$m2c_save"@
@end@ // m2c_create_fewer_files
########################################################################
@if $m2c_mark_boundary == 1@
/** START header generated by $RCSfile$ $Revision$ */
@end@
##
/* *********************************************************************
 * SET function declarations
 */

/* *********************************************************************
 * SET Table declarations
 */
@foreach $table table@
@    include m2c_setup_table.m2i@
@    if $m2c_table_settable == 0@
@        next@ # skip to next table
@    end@
@    include details-table.m2i@

@    include parent-set.m2i@

@    foreach $node nonindex@
@        include m2c_setup_node.m2i@
int ${node}_check_value( ${context}_rowreq_ctx *rowreq_ctx, $m2c_node_param_val);
int ${node}_undo_setup( ${context}_rowreq_ctx *rowreq_ctx );
int ${node}_set( ${context}_rowreq_ctx *rowreq_ctx, $m2c_node_param_val );
int ${node}_undo( ${context}_rowreq_ctx *rowreq_ctx );

@    end@ # foreach nonindex

int ${context}_check_dependencies(${context}_rowreq_ctx *ctx);
@end@ # foreach table

@if $m2c_mark_boundary == 1@
/** END header generated by $RCSfile$ $Revision$ */
@end@
@if $m2c_create_fewer_files != 1@
@eval $m2c_save = "$name"@
@eval $name = "${name}_DATA_SET"@
@include generic-header-bottom.m2i@
@eval $name = "$m2c_save"@
@end@ // m2c_create_fewer_files
######################################################################
@end@ // mfd_processing_types =~ /h/
######################################################################
######################################################################
######################################################################
##//####################################################################
##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@if "$mfd_processing_types" =~ /c/@
@eval $m2c_processing_type = 'c'@
@if $m2c_create_fewer_files != 1@
@open ${name}_data_set.c@
/*
 * Note: this file originally auto-generated by mib2c using
 *       version $Revision$ of $RCSfile$
 *
 * $$hack:$
 *
 */
@include generic-source-includes.m2i@

/** @defgroup data_set data_set: Routines to set data
 *
 * These routines are used to set the value for individual objects. The
 * row context is passed, along with the new value.
 * 
 * @{
 */
@end@ // m2c_create_fewer_files
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
@foreach $table table@
@    include m2c_setup_table.m2i@
@    if $m2c_table_settable == 0@
@        next@ # skip to next table
@    end@
@    include details-table.m2i@
########################################################################
@        include parent-set.m2i@
########################################################################
########################################################################
/*
 * TODO:440:M: Implement $context node value checks.
 * TODO:450:M: Implement $context undo functions.
 * TODO:460:M: Implement $context set functions.
 * TODO:480:M: Implement $context commit functions.
 */
@    foreach $node nonindex@
@        include m2c_setup_node.m2i@
@        if $node.settable == 0@
@            next@ # skip to next column
@        end@
@        if $m2c_report_progress == 1@
@           print | |   +-> Processing nonindex $node@
@        end@
@        include details-node.m2i@
@        include node-set.m2i@
@    end@ # foreach column
########################################################################
@    if $m2c_table_dependencies == 1@
@        include parent-dependencies.m2i@
@    end@
########################################################################
@end@ # foreach table
##
########################################################################
/** @} */
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
@end@ // mfd_processing_type =~ /c/
## restore original processing types
@eval $m2c_processing_type = "$mfd_data_set_processing_type_save"@
