home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / curses_391.lzh / Curses / examples / bio / bio.c < prev    next >
C/C++ Source or Header  |  1990-10-27  |  4KB  |  222 lines

  1. /*Program to calculate your bioryhms*/
  2. /*written by S.J.R.*/
  3.  
  4.  
  5. #include <curses.h>
  6. #include <signal.h>
  7. #include "defs.h"
  8. #include "globs.h"
  9.  
  10. main ()
  11. {
  12.     int     finished = FALSE, catch();
  13.  
  14.     signal(SIGINT, catch);
  15.  
  16.     initscr ();
  17.     cbreak ();
  18.  
  19.     todays_date ();
  20.     while (!finished) {
  21.         erase ();
  22.         printw ("Biorhythms by S.J.Raybould\n\n");
  23.         printw ("Do you require instructions ? ");
  24.         printw ("(Y/N or E to end) ");
  25.         refresh ();
  26.         switch (getch()) {
  27.         case 'e':
  28.         case 'E':
  29.             finished = TRUE;
  30.             break;
  31.         case 'y':
  32.         case 'Y':
  33.             instructions ();
  34.         default :
  35.             play ();
  36.             break;
  37.         }
  38.     }
  39.     endwin ();
  40. }
  41.  
  42.  
  43. play ()
  44. {
  45.     int     Bday, Bmonth, Byear;/* Birth day,month and year */
  46.     int     Sday, Smonth, Syear;/* Start day,month and year */
  47.     int     start;
  48.     int     ok;
  49.  
  50.     erase ();
  51.  
  52.     printw ("First of all the dates must be entered.\n\n");
  53.     ok = NO;
  54.     while (!ok)
  55.     {
  56.         move (10, 0);
  57.         printw ("please enter your birthdate    (DD,MM,YYYY)\n");
  58.         printw ("Birthdate : ");
  59.         clrtoeol ();
  60.         refresh ();
  61.         if (rd_dte (&Bday, &Bmonth, &Byear)) {    /* read date of birth */
  62.             move (11, 0);
  63.             printw ("Birthdate : %2d,%2d,%4d\n", Bday, Bmonth, Byear);
  64.             printw ("                                \n");
  65.             ok = YES;
  66.         } else {
  67.             printw ("Please re-enter birth date.\n");
  68.             refresh ();
  69.             beep ();
  70.             sleep (1);
  71.         }
  72.     }
  73.     ok = NO;
  74.     while (!ok)
  75.     {
  76.         move (13, 0);
  77.         printw ("please enter the starting date");
  78.         printw (" (or press ");
  79.         attrset (A_UNDERLINE);
  80.         printw ("RETURN");
  81.         attrset (0);
  82.         printw (" for today.)\nStartdate : ");
  83.         clrtoeol ();
  84.         refresh ();
  85.         if (rd_dte (&Sday, &Smonth, &Syear))/* read starting date */
  86.         {
  87.             move (14, 0);
  88.             printw ("Startdate : %2d,%2d,%4d\n", Sday, Smonth, Syear);
  89.             printw ("                                \n");
  90.             ok = YES;
  91.         }
  92.         else if (Sday == 0 && Smonth == 0 && Syear == 0)
  93.         {
  94.             move (14, 0);
  95.             Sday = today;
  96.             Smonth = this_month;
  97.             Syear = this_year;
  98.             ok = YES;
  99.             printw ("Startdate : %2d,%2d,%4d\n", Sday, Smonth, Syear);
  100.             printw ("                                \n");
  101.         } else {
  102.             printw ("Please re-enter starting date.\n");
  103.             refresh ();
  104.             beep ();
  105.             sleep (1);
  106.         }
  107.     }
  108.  
  109.     start = days_passed (Sday, Bday, Smonth, Bmonth, Syear, Byear);
  110.  
  111.     move (17, 25);
  112.     noecho ();
  113.     attrset (A_REVERSE);
  114.     printw ("PRESS ANY KEY TO DRAW CHART");
  115.     attrset (0);
  116.     refresh ();
  117.     getch ();
  118.     echo ();
  119.     disp_chart (start, day_of_the_year (Sday, Smonth, Syear), Syear);
  120.  
  121. }
  122.  
  123.  
  124. days_passed (sd, bd, sm, bm, sy, by)
  125. int     bd, bm, by, sd, sm, sy;
  126. {
  127.     int     days;
  128.     int     sdy, bdy;        /* starting & birth day of the year */
  129.  
  130.     if (sd == bd && sm == bm && sy == by)
  131.         return (0);
  132.  
  133.     sdy = day_of_the_year (sd, sm, sy);
  134.     bdy = day_of_the_year (bd, bm, by);
  135.  
  136.     days = (sdy - bdy);
  137.     while (sy > by)
  138.     {
  139.         days += 365;
  140.         days += (by % 4 == 0 && by % 100 != 0 || by % 400 == 0);
  141.         ++by;
  142.     }
  143.     return (days);
  144. }
  145.  
  146.  
  147. day_of_the_year (day, month, year)
  148. int     day, month, year;
  149. {
  150.     int     leap, i = 1;
  151.  
  152.     leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
  153.     while (i < month)
  154.         day += monlen[leap][i++];
  155.     return (day);
  156. }
  157.  
  158.  
  159.  
  160. rd_dte (ddptr, mmptr, yyptr)
  161. int    *ddptr, *mmptr, *yyptr;
  162. {
  163.     getstr(date_string);
  164.     if(date_string[0] == '\0') {
  165.         *ddptr = *mmptr = *yyptr = 0;
  166.         return(NO);
  167.     }
  168.     sscanf(date_string, "%d,%d,%d\n", ddptr, mmptr, yyptr);
  169.     if (*yyptr < 100) *yyptr += 1900;
  170.     if (*ddptr<1||*ddptr>31||*mmptr<1||*mmptr>12||*yyptr<1800||*yyptr>3000)
  171.         return(NO);
  172.  
  173.     return (YES);
  174. }
  175.  
  176. date (dayno, styr, monptr)
  177. int     dayno, styr;
  178. int    *monptr;
  179.  
  180. {
  181.     int     leap, month = 1;
  182.  
  183.     leap = styr % 4 == 0 && styr % 100 != 0 || styr % 400 == 0;
  184.     while (dayno > monlen[leap][month])
  185.         dayno -= monlen[leap][month++];
  186.  
  187.     *monptr = month;
  188.     return (dayno);
  189. }
  190.  
  191.  
  192. pr_dte (date, col, month)
  193. int     date, col, month;
  194. {
  195.     if (month > 12)
  196.         month = 1;
  197.     attrset (A_REVERSE);
  198.     move (20, col);
  199.     addch ((date / 10) + '0');
  200.     move (21, col);
  201.     addch ((date % 10) + '0');
  202.     attrset (0);
  203.     if (date == 1)
  204.     {
  205.         move (22, col);
  206.         addstr (mon_name[month]);
  207.     }
  208. }
  209.  
  210. catch()
  211. {
  212.     endwin();
  213.     exit(1);
  214. }
  215.  
  216. #ifdef AMIGA
  217. sleep(n)
  218. {
  219.     Delay(n * 50);
  220. }
  221. #endif
  222.