#ifndef _data_H
#define _data_H

/**
  was originally in PARAMS:
  int (*data_import)(struct PARAMS *x);
  char *data_import_name;
  char **data_files;
  int  anz_data_files;
**/

typedef struct DATA {
  int    anzahl;
  int    *Ho_a;                      /**langsam zaehlender index**/
  int    *Br_b;                      /**schnell zaehlender index**/
  /**for image files**/
  DOUBLE **Bilder;
  int    *Bild_grau;
  double *Bild_max;
  double *Bild_min;
  double *Bild_mindiff;
} DATA;


/**from data.images.c**/
DOUBLE import_images        (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
int import_points           (PARAMS *g, DATA *d);
DOUBLE init_image           (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_whole_image     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_onoff_image     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE cut_image            (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE cut_image_pantilt    (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_orange          (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE image_color_blob     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_image_cosinus   (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);

/**from data.digits.c**/
DOUBLE init_digit           (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_mnist           (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);


/**from data.made.c**/
DOUBLE init_lines_hier      (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_lines_mixed     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_lines_sparse    (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_points          (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_burglar         (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE init_cuecomb         (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_sub_mean        (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);

DOUBLE data_rand_gibbs_01   (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_hack_init_lines (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_zeppelin        (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss           (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_nontorus  (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_move      (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_three     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_3areas    (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_3areas_2D (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_fromfile  (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_3areas_2D_anim (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_3areas_2D_anim2 (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_2D_anim3  (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_half_circle     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE write_act_file       (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int dummy);
DOUBLE read_act_file        (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int dummy);
DOUBLE dense_act_file       (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int dummy);
DOUBLE data_act_file        (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int dummy);
DOUBLE file_flag            (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int dummy);
DOUBLE int_val_change       (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int dummy);
DOUBLE data_gnu_connect_max (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);

DOUBLE data_gauss_move3     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_move4     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss_motor     (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_zhang           (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_block           (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_trichter        (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_gauss123        (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);


/**from data.webots.c**/
#if WEBOTS
DOUBLE webot_supervisor   (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE webot_supervisor_2 (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE webot_rotate       (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE webot_pioneer      (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
#endif

/**from data.bttv.c**/
DOUBLE bttv_image         (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);


/**from data.fixed.c**/
/** DATA *import_snns_data (PARAMS *g);   **later maybe**/


/**from data.motor.c**/
int import_motor          (PARAMS *g);
int import_lang_assoc     (PARAMS *g);
DOUBLE data_motor         (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_lang_assoc    (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
#if  USE_CORBA
DOUBLE data_read_understood(PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
DOUBLE data_write_string  (PARAMS *g, AREA *A, COMMAND *cmd, int begin, int end);
#endif

#endif