home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume13 / thricken / part01 / files.c < prev    next >
C/C++ Source or Header  |  1992-08-03  |  2KB  |  112 lines

  1. #include <fcntl.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include "thricken.h"
  5.  
  6. char *readline(FILE *fp);
  7. int read_sprites();
  8. char *spr_file, *data_file;
  9.  
  10. int load_level(int level) {
  11.     int i,j;
  12.     FILE *fp;
  13.     char *level_file = strdup("xxlevel");
  14.     
  15.     level_file[0]='0'+((level<10)?0:(level/10));
  16.     level_file[1]='0'+level%10;
  17.     if ((fp = fopen(level_file,"r")) == NULL)
  18.     return -1;
  19.     spr_file = strdup(readline(fp));
  20.     data_file = strdup(readline(fp));
  21.     rows = atoi(readline(fp));
  22.     cols = atoi(readline(fp));
  23.     x = atoi(readline(fp));
  24.     y = atoi(readline(fp));
  25.     diamonds = atoi(readline(fp));
  26.     for (i=0; i<rows; i++)
  27.     map[i]=strdup(readline(fp));
  28.     if (dname)
  29.     free(dname);
  30.     dname = strdup(readline(fp));
  31.     if (lname)
  32.     free(lname);
  33.     lname = strdup(readline(fp));
  34.     if (author)
  35.     free(author);
  36.     author = strdup(readline(fp));
  37.     fclose(fp);
  38.     read_sprites();
  39.     read_sprdata();
  40. }
  41.  
  42. char *readline(FILE *fp) {
  43.     /*
  44.      * buf is big enough for anything I'm going to use, but it's still
  45.      * a bit of a kludge.
  46.      */
  47.     static char buf[1024];
  48.     int i=0;
  49.     char c = '\0';
  50.     
  51.     if (fgets(buf,1000,fp) == (char *)0)
  52.     return (char *)-1;
  53.     buf[strlen(buf)-1] = '\0';
  54.     return buf;
  55. }
  56.  
  57.  
  58. read_sprites() {
  59.     FILE *fp;
  60.     char spr;
  61.     char *ptr;
  62.     int j,i;
  63.     
  64.     if ((fp = fopen(spr_file,"r")) == NULL)
  65.     return -2;
  66.     while ((ptr = readline(fp)) != (char *)-1) {
  67.     spr = ptr[0];
  68.     for (j=0; j<SPRHEIGHT; j++) {
  69.         ptr = readline(fp);
  70.         for (i=0; i<SPRWIDTH; i++)
  71.         sprite[spr][j][i] = ptr[i];
  72.     }
  73.     }
  74. }
  75.  
  76. read_sprdata() {
  77.     FILE *fp;
  78.     int i;
  79.     char *ptr;
  80.     struct coll *c, *c2;
  81.  
  82.     for (i=0; i<256; i++) {
  83.     if (c = sprdata[i]) {
  84.         do {
  85.         c2 = c->next;
  86.         free(c->dirs);
  87.         free(c->coll);
  88.         free(c);
  89.         c = c2;
  90.         } while (c);
  91.     }
  92.     sprdata[i]=0;
  93.     }
  94.     if ((fp = fopen(data_file,"r")) == NULL)
  95.     return -2;
  96.     walkable = strdup(readline(fp));
  97.     pushable = strdup(readline(fp));
  98.     while ((ptr = readline(fp)) != (char *)-1) {
  99.     if (sprdata[ptr[0]]) {
  100.         c = (struct coll *)malloc(sizeof(struct coll));
  101.         c->next = sprdata[ptr[0]];
  102.         sprdata[ptr[0]] = c;
  103.     } else {
  104.         c = sprdata[ptr[0]] = (struct coll *)malloc(sizeof(struct coll));
  105.         c->next = 0;
  106.     }
  107.     sscanf(ptr+8,"%d",&(c->score));
  108.     *(ptr+8)=0;c->dirs = strdup(ptr+4);
  109.     *(ptr+4)=0;c->coll = strdup(ptr+1);
  110.     }
  111. }
  112.