/*
 *  LIFECYCLES.C  --  compute a lifecycles GNUPLOT file
 *
 *  (c)Copyright 1992-93 by Tobias Ferber, All Rights Reserved
 */

#include <exec/types.h>
#include <stdio.h>
#include "idate.h"

static char rcs_id[]= "$VER: $Id: life.c,v 1.3 93/01/14 18:02:52 tf Exp $";

static char *dname[]= { "Sunday","Monday","Tuesday","Wednesday",
                        "Thursday","Friday","Saturday" };

static char *mname[]= { "January","February","March","April","May","June","July",
                        "August","September","October","November","December" };
/*
static char *dname[]= { "Sonntag","Montag","Dienstag","Mittwoch",
                        "Donnerstag","Freitag","Samstag","Sonntag" };

static char *mname[]= { "Januar","Februar","März","April","Mai","Juni","Juli",
                        "August","September","Oktober","November","Dezember" };
*/
/* GNUPLOT output format */

static char *pltfmt[2] = {
  "set grid\n"
  "set dummy t\n"
  "set format x \"%%g\"\n"
  "k=23\n"
  "s=28\n"
  "g=33\n"
  "f=38\n"
  "n=%d\n"
  "tmax=%d\n"
  "set title \"%s\"\n"
  "set ylabel \"phase\"\n"
  "set xlabel \"days\"\n"
  "set yrange [-1.5:1.5]\n"
  "set ytics (\"low\" -1,\"critical\" 0.,\"high\" 1)\n"
  "set xrange [0.:tmax-1]\n",
/* --- we'll insert the xtics here --- */
  "bio(t,r)=sin((t+n%r)*(2*pi/r))\n"
  "plot  bio(t,k) title \"male\",\\\n"
  "      bio(t,s) title \"female\",\\\n"
  "      bio(t,g) title \"intellect\",\\\n"
  "      bio(t,f) title \"feeling\""
};

static char *texfmt[2]= {
  "\\begin{center}\\begin{tabular}{rrlrrrr}\n"
  "\\hline\n"
  "\\multicolumn{3}{r}{Completed periods} & %d & %d & %d & %d\\\\\n"
  "\\hline\n"
  "\\multicolumn{2}{c}{Date}&{\\tt MFIS} & M & F & I & S\\\n"
  "\\hline\n",
/* --- we'll insert the data here --- */
  "\\hline\n"
  "\\end{tabular}\\end{center}\n"
};

#define _k  23
#define _s  28
#define _g  33 /* period: (23*28*33)d = approx. 58a */
#define _f  38 /* period: (23*28*33*38)/2 = 403788d (approx. 1105.5a) */

void print_xtics(int n)
{ static int tics[31]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
  int c,t;
  for(c=0;c<=8;c++)
  { t=(c*_k+2)/4-(n%_k); if(0<=t && t<31) ++tics[t];
    t=(c*_s+2)/4-(n%_s); if(0<=t && t<31) ++tics[t];
    t=(c*_g+2)/4-(n%_g); if(0<=t && t<31) ++tics[t];
    t=(c*_f+2)/4-(n%_f); if(0<=t && t<31) ++tics[t];
  }
  printf("set xtics ");
  for(c=t=0;t<31;t++)
  { if(tics[t]>0)
    { printf("%c \"%d\" %d",(c>0)? ',' : '(',t+1,t);
      if(((++c)%8)==0) printf("\\\n          ");
    }
  }
  printf(")\n");
}

void main(int argc, char *argv[])
{
  static char title[256];
  int d,m,y;  /* birthday */
  int mm,yy;  /* month to plot */
  int n;      /* age in days */

  if(argc<3)
  { puts(&rcs_id[6]);
    puts("(c)Copyright 1992-93 by Tobias Ferber, All Rights Reserved\n"
         "LIFE <ddmmyyyy> <mmyyyy> [ > gnuplot file ]");
    exit(0);
  }
  sscanf(argv[1],"%2d%2d%4d",&d,&m,&y);
  sscanf(argv[2],"%2d%4d",&mm,&yy);
  if(checkdate(d,m,y)==0)
  { fprintf(stderr,"Illegal date:  %02d.%02d.%04d\n",d,m,y);
    exit(5);
  }
  if(checkdate(1,mm,yy)==0)
  { fprintf(stderr,"Illegal date:  01.%02d.%04d\n",mm,yy);
    exit(5);
  }
  n=dayrange(d,m,y, 1,mm,yy);
  puts("# LIFECYCLES: GNUPLOT file");
  sprintf(title,"*%s, %d.%d.%d     Lifecycles for %s %d",
    dname[wday(d,m,y)],
    d,m,y,
    mname[mm-1],yy );
  printf(pltfmt[0],n,monlen(mm,yy),title);
  print_xtics(n);
  puts(pltfmt[1]);
  exit(0);
}
