home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume13 / xsokoban3 / part02 / screen.c < prev    next >
C/C++ Source or Header  |  1992-02-11  |  2KB  |  75 lines

  1. #include <stdio.h>
  2. #include "externs.h"
  3. #include "globals.h"
  4.  
  5. extern char *malloc();
  6. extern FILE *fopen();
  7.  
  8. extern short level, packets, savepack, rows, cols;
  9. extern char map[MAXROW + 1][MAXCOL + 1];
  10. extern POS ppos;
  11.  
  12. /* reads in the current screen level (wheee, exciting. NOT) */
  13. short ReadScreen(void)
  14. {
  15.   FILE *screen;
  16.   char *fnam;
  17.   int y, x;
  18.   short j, c, ret = 0;
  19.  
  20.   for (y = 0; y < MAXROW; y++)
  21.     for (x = 0; x < MAXCOL; x++)
  22.       map[y][x] = ground;
  23.  
  24.   fnam = malloc(strlen(SCREENPATH) + 12);
  25.   sprintf(fnam, "%s/screen.%d", SCREENPATH, level);
  26.  
  27.   if ((screen = fopen(fnam, "r")) == NULL)
  28.     ret = E_FOPENSCREEN;
  29.   else {
  30.     packets = savepack = rows = j = cols = 0;
  31.     ppos.x = -1;
  32.     ppos.y = -1;
  33.  
  34.     while ((ret == 0) && ((c = getc(screen)) != EOF)) {
  35.       if (c == '\n') {
  36.     map[rows++][j] = '\0';
  37.     if (rows > MAXROW)
  38.       ret = E_TOMUCHROWS;
  39.     else {
  40.       if (j > cols)
  41.         cols = j;
  42.       j = 0;
  43.     }
  44.       } else if ((c == player) || (c == playerstore)) {
  45.     if (ppos.x != -1)
  46.       ret = E_PLAYPOS1;
  47.     else {
  48.       ppos.x = rows;
  49.       ppos.y = j;
  50.       map[rows][j++] = c;
  51.       if (j > MAXCOL)
  52.         ret = E_TOMUCHCOLS;
  53.     }
  54.       } else if ((c == save) || (c == packet) ||
  55.          (c == wall) || (c == store) ||
  56.          (c == ground)) {
  57.     if (c == save) {
  58.       savepack++;
  59.       packets++;
  60.     }
  61.     if (c == packet)
  62.       packets++;
  63.     map[rows][j++] = c;
  64.     if (j > MAXCOL)
  65.       ret = E_TOMUCHCOLS;
  66.       } else
  67.     ret = E_ILLCHAR;
  68.     }
  69.     fclose(screen);
  70.     if ((ret == 0) && (ppos.x == -1))
  71.       ret = E_PLAYPOS2;
  72.   }
  73.   return (ret);
  74. }
  75.