#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##
   /* temporary storage for date. If you have any of this data available
      directly, use it instead. */
   int year, month, day, hour, minutes, seconds, deci_seconds;
   int rc, utc_offset_direction, utc_offset_hours, utc_offset_minutes;

   /** we should have a 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) && ((* $m2c_node_param_ref_lname) >= 11));

   /*
    * TODO:231:o: |-> copy $node data.
    * get the date from your context pointer.
    */
   return MFD_SKIP; /* TODO:234:M: |-> Remove SKIP once you've set $node data */

   year = 0; /* 0..65536 */
   month = 0; /* 1..12 */
   day = 0; /* 1..31 */
   hour = 0; /* 0..23 */
   minutes = 0; /* 0..59 */
   seconds = 0; /* 0..60 (60 indicates a leap-second) */
   deci_seconds = 0; /* 0..9 */

   /* setting utc offset is optional. Leave the values as is if you
      want to exclude this information. */
   utc_offset_direction = 0; /* -1, +1 */
   utc_offset_hours = -1; /* 0..13 */
   utc_offset_minutes = -1; /* 0..59 */

   /* call convenience function to set data */
   rc = netsnmp_dateandtime_set_buf_from_vars(*$m2c_node_param_ref_name,
                                              $m2c_node_param_ref_lname,
                           year, month, day,
                           hour, minutes, seconds, deci_seconds,
                           utc_offset_direction, utc_offset_hours,
                           utc_offset_minutes );
   if(rc != SNMP_ERR_NOERROR)
      return rc;

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