home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume6 / ega-wanderer / patch1 / m.c < prev    next >
C/C++ Source or Header  |  1989-02-24  |  5KB  |  242 lines

  1. #include "wand_head.h"
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #ifdef    EGA
  5. #include "bitmap.h"
  6.  
  7. struct termio sav;
  8. extern int EGAifd;    /* Usually 0, but could be a vt under 386/ix */
  9. #endif
  10.  
  11. int debug_disp = 0;
  12. int no_passwords = 0;
  13. int maxscreens;
  14. int edit_mode = 0;
  15. int saved_game = 0;
  16. char *edit_screen;
  17. char *screenpath;
  18. /* Screen[NOOFROWS][ROWLEN] is centered inside area[NOOFROWS+2][ROWLEN+2].
  19.  * This prevents fall() from accessing some random characters outside of
  20.  * screen[][] that happen to match a boulder, etc.
  21.  */
  22. char area[1+NOOFROWS+1][1+ROWLEN+1];
  23. char (*screen)[ROWLEN+1+1] = &area[1][1];
  24.  
  25. main(argc,argv)
  26. int  argc;
  27. char *argv[];
  28. {
  29. struct stat statbuf;
  30. int num,bell = 0,maxmoves = 0,x,y;
  31. long score = 0;
  32. char howdead[25],buffer[100], *name,*keys,*dead;
  33. char *malloc();
  34. char *getenv();
  35. #ifdef    EGA
  36. extern char *EGAaddr;
  37. extern bitmap wanderer;
  38. #endif
  39.  
  40. if((screenpath = getenv("SCREENPATH")) == NULL)
  41.     screenpath = SCREENPATH;
  42.  
  43. if(argc == 2)
  44.     {
  45.     if(!strcmp(argv[1], "-e"))
  46.     {
  47.     edit_mode = 1;
  48.     edit_screen = NULL;
  49.     }
  50.     else if(!strcmp(argv[1], "-m"))
  51.     {
  52.     erase_scores();
  53.     return 0;
  54.     }
  55.     else if(!strcmp(argv[1], "-c"))
  56.     {
  57.     char ch;
  58.     int fp;
  59.     /* show credits */
  60.     sprintf(buffer,"%s/credits",screenpath);
  61.     if((fp = open(buffer,O_RDONLY)) == -1) {
  62.             printf(" Sorry - credits unavailable!\n");
  63.         exit(1);
  64.         }
  65.     while(read(fp,&ch,1) == 1)
  66.         putchar(ch);
  67.     putchar('\n');
  68.     exit(0);
  69.         }
  70.     else if(!strcmp(argv[1], "-s"))
  71.     {
  72.         savescore("",0L,0,NULL);
  73.         return 0;
  74.     }
  75.     else if(!strcmp(argv[1], "-f"))
  76.         {
  77.     debug_disp = 1;
  78.     }
  79.     else
  80.     {
  81.     fprintf(stderr,"Usage: %s [ -e [file] | -m | -c | -s | -f ]\n",argv[0]);
  82.     exit(1);
  83.         }
  84.     }
  85. if(argc > 2)
  86.     {
  87.     if(!strcmp(argv[1],"-e"))
  88.     {
  89.     edit_mode = 1;
  90.     edit_screen = argv[2];
  91.     }
  92.     else
  93.     {
  94.     fprintf(stderr,"Usage: %s [ -e [file] | -m | -c | -s | -f ]\n",argv[0]);
  95.         exit(1);
  96.     }
  97.     }
  98.  
  99. /* use passwords?  if file "no_pws" exists and is readable, then no pws! */
  100. sprintf(buffer,"%s/no_pws",screenpath);
  101. if(access(buffer,4) == 0)
  102.     no_passwords = 1;
  103.  
  104. /* count available screens */
  105. for(maxscreens = 0;;maxscreens++) {
  106.     sprintf(buffer,"%s/screen.%d",screenpath,(maxscreens+1));
  107.     if(stat(buffer,&statbuf) == -1)
  108.     break;
  109. }
  110.  
  111. if((name = getenv("NEWNAME")) == NULL)
  112.     if((name = getenv("NAME")) == NULL)
  113.         if((name = getenv("FULLNAME")) == NULL)
  114.             if((name = getenv("USER")) == NULL)
  115.         if((name = getenv("LOGNAME")) == NULL)
  116. #ifdef    ASKNAME    /* M001 */
  117.         {
  118.             name = malloc(80);
  119.             if (name == NULL) {
  120.             printf("malloc error\n");
  121.             exit(1);
  122.             }
  123.             printf("Name? "); fflush(stdout);
  124.             gets(name);
  125.             if (name[0] == '\0')
  126.                 name = "noname";
  127.         }
  128. #else
  129.                 name = "noname";
  130. #endif
  131.  
  132. if((keys = getenv("NEWKEYS")) == NULL)
  133.     keys = "kjhl";
  134.  
  135. #ifdef    EGA
  136. if(egainit()) {
  137.     struct termio cb;
  138.  
  139.     /* 
  140.      * set stdin to raw mode
  141.      */
  142.     ioctl(EGAifd, TCGETA, &sav);
  143.     cb = sav;
  144.     cb.c_cc[VMIN] = 1;
  145.     cb.c_cc[VTIME] = 255;
  146.     cb.c_lflag &= ~(ECHO | ICANON);
  147.     ioctl(EGAifd, TCSETAW, &cb);
  148.  
  149.     egapaint( 233,95, &wanderer );
  150.     sleep( 3 );
  151.     }
  152.     else
  153. #endif
  154.     {
  155.     initscr();
  156.     keypad(stdscr, TRUE);
  157.     CBON;
  158.     noecho();
  159.     }
  160.  
  161. /* MAIN PROGRAM HERE */
  162.  
  163. play_again:
  164.  
  165. if(!edit_mode) {
  166.     howdead[0] = 0;
  167.     for (num=1; num <= maxscreens; ++num) {
  168.         if (rscreen(num,&maxmoves)) {
  169.         strcpy(howdead,"a non-existant screen");
  170.         break;
  171.         }
  172.         dead = playscreen(&num,&score,&bell,maxmoves,keys);
  173.         if ((dead != NULL) && (*dead == '~')) {
  174.         num = (int)(dead[1]) - 1;
  175.         dead = NULL;
  176.         }
  177.         if (dead != NULL)
  178.         {
  179.         strcpy(howdead,dead);
  180.             break;
  181.             }
  182.         }
  183.     }
  184. else
  185.     {
  186.     if(rscreen(num,&maxmoves))
  187.     {
  188.     for(x=0;x<ROWLEN;x++)
  189.         for(y=0;y<NOOFROWS;y++)
  190.         screen[y][x] =  ' ';
  191.     }
  192.     edit(num,&score,&bell,maxmoves,keys);
  193.     }
  194. /* END OF MAIN PROGRAM */
  195.  
  196. #ifdef    EGA
  197. if(!EGAaddr)
  198. #endif
  199.     {
  200.     echo();
  201.     CBOFF;
  202.     endwin();
  203.     }
  204.  
  205. if(!edit_mode) {
  206.     /* SAVE ROUTINES FOR SCORES */
  207.  
  208. #ifdef NO_RESTORED_GAME_HISCORES
  209.     if(saved_game) {
  210. #ifdef    EGA
  211.     if(!EGAaddr)
  212. #endif
  213.         printf("No scores recorded for restored games.\n");
  214.     }
  215.     else
  216. #endif
  217.     savescore(howdead,score,num,name);
  218.  
  219. #ifdef    EGA
  220.     if(EGAaddr) {
  221.     egaputs(4,341,"Play again? ");
  222.     egagets(4+12*8,341,buffer);
  223.     if(buffer[0] == 'y' || buffer[0] == 'Y') {
  224.         score = 0;
  225.         saved_game = 0;
  226.         goto play_again;
  227.         }
  228.     }
  229. #endif
  230.     }
  231.  
  232. #ifdef    EGA
  233. if(EGAaddr) {
  234.     egareset();
  235.     ioctl(EGAifd, TCSETAW, &sav);
  236.     }
  237. #endif
  238.  
  239. printf("WANDERER (C) 1988 S. Shipway\n");
  240. return 0;
  241. }
  242.