/*
     COLOR definiert -> Farbversion
           nicht definiert -> SW Version
*/

/*
     ANZEIGEOPTIONEN
*/

typedef struct {
     unsigned  compare   : 2; /* 0 And   1 Or   2 Xor */
     unsigned  wait      : 1; /* 1 warten auf taste  0 zeit */
     unsigned  richtung  : 1; /* 0 vorwrts       1 vor und zurck */
     unsigned  repeat    : 1; /* 0 einmal         1 wiederholt */
} AO_FLAGS;

typedef struct {
     AO_FLAGS  flags;
     unsigned  wait_pic;
     unsigned  wait_end;
} SHOW_OPTS;

/* 
     FRACTALPARAMETER
*/

/*   normales Fractal    */

typedef struct {
     unsigned  zykl      : 1;
     int       start     : 5;
     unsigned  first     : 4;
     unsigned  last      : 4;
} FR_COLOR;

typedef struct {
     int       end_col;
     int       col_end[5];
     int       col_step[5];
     FR_COLOR  col[5];
} FRAC_COL;

typedef struct {
#ifdef COLOR
     unsigned  x1        : 1;
#else
     unsigned  color     : 1; /* 0 normal 1 invers */
#endif
     unsigned  size      : 2; /* 0 small  1 mid     2 big */
     unsigned  type      : 3; /* 0 sw     1 grau
                                 0 grau   1 black   2 raster   3 vline  4 hline  */
     unsigned  speed     : 2; /* 0 quick  1 exact */
     unsigned  updown    : 1; /* 0 hoch   1 tief */
} FR_TYPE;

typedef struct
{
     FR_TYPE   type;
#ifdef COLOR
     int       col_tab[16];
#endif
     long      iter;
     long      time;
     double    real_min;
     double    real_max;
     double    imag_min;
     double    imag_max;
     double    real_const;
     double    imag_const;
     double    alpha;
     double    abbruch;
     int       tiefe;
     int       lastline;
     FRAC_COL  col;
} FRACTAL;

/*   freies Fractal      */

typedef struct
{
     unsigned  op        : 2; /* 0 and    1 or      2 xor */
     unsigned  abbr1     : 2; /* 0 abs    1 re      2 im */
     unsigned  abbr2     : 2; /* 0 abs    1 re      2 im */
     unsigned  p_flag    : 1; /* 0 modulo 1 speziell */
     unsigned  p_op      : 2; /* 0 and    1 or      2 xor */
     unsigned  p1        : 2; /* 0 abs    1 re      2 im */
     unsigned  p2        : 2; /* 0 abs    1 re      2 im */
} FR_FREE;

typedef struct
{
     FR_TYPE   type;
#ifdef COLOR
     int       col_tab[16];
#endif
     long      iter;
     long      time;
     double    real_min;
     double    real_max;
     double    imag_min;
     double    imag_max;
     double    real_const;
     double    imag_const;
     double    alpha;
     double    abbruch;
     int       tiefe;
     int       lastline;
     FRAC_COL  col;
     char      formel[62];
     FR_FREE   free;
} FRFRAC;

/*   3d Fractal          */

typedef struct
{
     FR_TYPE   type;
#ifdef COLOR
     int       col_tab[16];
#endif
     long      iter;
     long      time;
     double    real_min;
     double    real_max;
     double    imag_min;
     double    imag_max;
     double    real_const;
     double    imag_const;
     double    alpha;
     double    abbruch;
     int       tiefe;
     int       lastline;
} D3_FRAC;

/*
     EINSTELLUNGEN
*/

typedef struct {
#ifdef COLOR
     unsigned  x0        : 1;
#else
     unsigned  frac_type : 1; /* 0 kompakt   1 stad */
#endif
     unsigned  pic_type  : 2; /* 0 doodle    1 degas   2 stad         3 snapshot */
     unsigned  block     : 1; /* 0 maus      0 fadenkreuz */
     unsigned  gong      : 1; /* 0 aus       1 ein */
     unsigned  save      : 1; /* 0 aus       1 ein */
     unsigned  save_war  : 1; /* 0 aus       1 ein */
     unsigned  abbruch   : 1; /* 0 aus       1 ein */
     unsigned  delete    : 2; /* 0 nie       1 neu     2 mehrere 3 immer */
     unsigned  quit      : 2; /* 0 nie       1 neu     3 immer */
     unsigned  hc_size   : 2; /* 0 klein     1 gro    2 quer    3 doppel */
     unsigned  hc_leer   : 1; /* 0 nicht drucken 1 drucken */
     unsigned  hc_text   : 1; /* 0 nicht drucken 1 drucken */
     unsigned  hc_abst   : 1; /* 0 aus       1 ein */
     unsigned  hc_ff     : 8; /* bilder bis formfeed */
     unsigned  d_tos     : 1; /* 0 eigene pr_out  1 tos pr_out */
#ifndef COLOR
     unsigned  col_flag  : 1; /* 0 normal    1 invers */
#endif
} FR_FLAGS;

#ifdef COLOR
typedef struct {
     unsigned  speed     : 16;
     unsigned  first     : 4;
     unsigned  last      : 4;
     unsigned  dir       : 1; /* 0 links     1 rechts */
} CYCLE_OPT;
#endif

typedef struct
{
     FR_FLAGS  flags;
     char      path[40];
     long      mem_rest;
     int       tiefe;
     SHOW_OPTS show;
     int       fr_anzahl;
     char      fr_name[10];
     FRACTAL   fr_start;
     FRACTAL   fr_ende;
     char      fr_change[9];
     int       ff_anzahl;
     char      ff_name[10];
     FRFRAC    ff_start;
     FRFRAC    ff_ende;
     char      ff_change[9];
     int       d3_anzahl;
     char      d3_name[10];
     D3_FRAC   d3_start;
     D3_FRAC   d3_ende;
     char      d3_change[9];
     char      d_code[8][10];
     char      d_rand[9];
#ifdef COLOR
     int       col_tab[16];
     CYCLE_OPT cycle;
     int       col_tabs[12][16];
#endif
} FR_SET;

