home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume13 / dr_mario / part01 / mario.shr / main.c < prev    next >
C/C++ Source or Header  |  1992-01-12  |  3KB  |  124 lines

  1. /***********************************************************/
  2. /* BUGS v1.3  Org by SRN at SUNY CT at Utica/Rome July 10,1991*/ 
  3. /*              later mods at UNCW (seq.uncwil.edu)        */
  4. /***********************************************************/
  5. /* I, being of a somewhat sound mind, hearby place this in*/
  6. /* in the great world of public domain 11/15/91*/
  7.  
  8. #include "info.h"
  9. #include <signal.h>
  10. #include <fcntl.h>
  11. void bleed();
  12. main(argc,argv)
  13.     int argc;
  14.     char *argv[];
  15. {
  16.     void            fatal_err();
  17.     signal(SIGQUIT, fatal_err); /*control-/*/
  18.     signal(SIGINT, fatal_err); /*control-c*/
  19.  
  20.  
  21.     srandom(getpid() / 3 + 1);/*if you don't set different seeds,
  22.                                 numbers will always be the same*/
  23.                 /*Yeah, I know, should've used time.bugs3 does*/
  24.     if (getuid()==952) 
  25.         srn=1;
  26.  
  27.     initscr(); /*set up term for curses*/
  28.     signal(SIGTSTP, fatal_err);/*control-z*/
  29.     noecho();
  30.     crmode(); /*no return needed for input*/ 
  31.  
  32.     lv = get_option("Level", 0, 20);
  33.     sp = get_option("Speed", 1, 3);
  34.  
  35.     clear();
  36.     mvprintw(LINES - 1, COLS - 4, "S."); /*signature!*/
  37.     refresh(); /*update screen*/
  38.     newstart(); /*set up gameboard*/
  39.     bleed(0,1); /*unblock stdin*/
  40.  
  41.     while (1) { /*forever*/
  42.         int             j;
  43.         v = lv * 4 + 4; /*number of bugs formula*/
  44.         start(); /*put bugs on board*/
  45.         loop(); /*gameplay*/
  46.         if (lv != 21)/*finished level here, maxlv=21*/
  47.             lv++;
  48.         wstandout(w);
  49.         mvwprintw(w, 3, 3, "Hit");
  50.         mvwprintw(w, 4, 2, "Return");
  51.         mvwprintw(w, 5, 1, "for Next");
  52.         mvwprintw(w, 6, 2, "Level");
  53.         wstandend(w);
  54.         wrefresh(w);
  55.         while ((j = wgetch(w)) != '\n');
  56.     }
  57. }
  58.  
  59. void 
  60. fatal(s)
  61.     char           *s; /*End of Game or user quit if we're here*/
  62. {
  63.     move(LINES - 1, 0);
  64.     refresh();
  65.     bleed(0,0); /* block stdin, never leave with stdin unblocked!*/
  66.     endwin();        /*clean up*/
  67.     printf("%s \n", s);
  68.     exit(0);
  69. }
  70.  
  71. void 
  72. fatal_err(e) /* handle ctrl-c or z*/
  73. int e;
  74. {
  75.     move(LINES - 1, 0);
  76.     refresh();
  77.     bleed(0,0);
  78.     endwin();
  79.     exit(1);
  80. }
  81.  
  82. int 
  83. get_option(s, min, max) /*set level & speed */
  84.     char           *s;
  85.     int             max, min;
  86. {
  87.     int             ch, i = min;
  88.  
  89.     mvprintw(0, 0, "%s : %02d", s, i);
  90.     refresh();
  91.     while ((ch = getch()) != '\n') {
  92.         switch (ch) {
  93.         case 'j':
  94.             if (i > min)
  95.                 i--;
  96.             break;
  97.  
  98.         case 'k':
  99.             if (i < max)
  100.                 i++;
  101.             break;
  102.         }
  103.         mvprintw(0, 0, "%s : %02d", s, i);
  104.         refresh();
  105.     }
  106.     return i;
  107. }
  108. void bleed(filed,xof) /*control blocking of stdout (or any fd)*/ 
  109. int filed,xof;        /*taken from bugs3 */
  110. {
  111.     int flags;
  112.     if ((flags = fcntl(filed, F_GETFL, 0)) < 0)
  113.         fatal("fcntl - get flag");
  114.  
  115.     if(xof)    /*if xof is set, don't block filed*/
  116.     {
  117.         if (fcntl(filed, F_SETFL, flags | FNDELAY) < 0)
  118.             fatal("fcntl - set");
  119.     }
  120.     else       /* block filed */
  121.         if (fcntl(0, F_SETFL, flags & ~FNDELAY) < 0)/*block stdin*/
  122.             fatal("fcntl - reset");
  123. }
  124.