home *** CD-ROM | disk | FTP | other *** search
/ Graphics 16,000 / graphics-16000.iso / msdos / fractal / fdesi313 / fdes13s / fdesfile.c < prev    next >
Text File  |  1990-01-22  |  6KB  |  161 lines

  1. /*
  2.         File save and retrieve routines
  3. */
  4. #include <string.h>
  5. #include <stdio.h>
  6. #include <graphics.h>
  7. #include <dos.h>
  8. #include "fdesglob.h"
  9. #include "fdestria.h"
  10. #include "fdesign.h"
  11. #include "fdesequa.h"
  12. #include "fdesmenu.h"
  13. #include "fdesmous.h"
  14. #include "fdesplot.h"
  15.  
  16. /* trn_file save and load */
  17. char last_file[15];             /* last file loaded successfully */
  18. int file_modified;              /* flag nonzero if file has been modified */
  19.  
  20. void ifs_name_fix(char *s)
  21. {
  22.     strtok(s,".");
  23.         strcat(s,".IFS");
  24. }
  25. void gif_name_fix(char *s)
  26. {
  27.     strtok(s,".");
  28.         strcat(s,".GIF");
  29. }
  30. /************************************************************************
  31.         .TRN file load and save
  32. ************************************************************************/
  33. void trn_name_fix(char *s)
  34. {
  35.     strtok(s,".");
  36.     strcat(s,".TRN");
  37. }
  38. void trnfile_save(char *fname)
  39. {
  40. FILE *trnfile;
  41. mouse_state m;
  42. int i;
  43.         if (strlen(fname) == 0)
  44.         {
  45.                 putmsg(100,200,"No input filespec",RED,WHITE);
  46.                 mouse_click(&m);
  47.                 clrmsg();
  48.                 return;
  49.         }
  50.         trn_name_fix(fname);
  51.     trnfile = fopen(fname,"wb");
  52.         i = REV;
  53.         fwrite(&i,sizeof(REV),1,trnfile);
  54.         fwrite(&num_triangles,sizeof(num_triangles),1,trnfile);
  55.         fwrite(&triangle0,sizeof(triangle),1,trnfile);
  56.         for (i = 0; i < num_triangles; i++)
  57.         {
  58.                 fwrite(&triangles[i],sizeof(triangle),1,trnfile);
  59.         }
  60.     fclose(trnfile);
  61.     stpcpy(last_file,fname);
  62.         file_modified = 0;
  63.     putmsg(100,200,"File saved",BLUE,WHITE);
  64.     delay(1000);
  65.         clrmsg();
  66. }
  67. int trnfile_load(char *fname)
  68. {
  69. FILE *trnfile;
  70. mouse_state m;
  71. int i,j;
  72. int file_rev;
  73. int t_num_triangles;
  74. int     temp;                   /* for conversion to float values */
  75.  
  76.         trn_name_fix(fname);
  77.         trnfile = fopen(fname,"rb");
  78.         if (trnfile == NULL)
  79.         {
  80.                 putmsg(100,200,"File not found (click mouse)",BLUE,WHITE);
  81.                 mouse_click(&m);
  82.                 clrmsg();
  83.         }
  84.         else
  85.     {
  86.                 fread(&file_rev,sizeof(REV),1,trnfile);
  87.         fread(&t_num_triangles,sizeof(num_triangles),1,trnfile);
  88.                 if ((file_rev>500) || (t_num_triangles > MAXFUNC))
  89.         {
  90.             fclose(trnfile);
  91.             putmsg(100,200,"Bad file",BLUE,WHITE);
  92.                         delay(1000);
  93.             clrmsg();
  94.         }
  95.         else {
  96.             stpcpy(last_file,fname);
  97.                         file_modified = 0;
  98.             num_triangles = t_num_triangles;
  99.                         if (file_rev < 9) {             /* old file format */
  100.                                 for (i = 0; i < 3; i++) {
  101.                                         fread(&temp,sizeof(int),1,trnfile);
  102.                                         triangle0.row[i] = temp;
  103.                                         fread(&temp,sizeof(int),1,trnfile);
  104.                                         triangle0.col[i] = temp;
  105.                                 }
  106.                                 for (j = 0; j < num_triangles; j++)
  107.                                 for (i = 0; i < 3; i++) {
  108.                                         fread(&temp,sizeof(int),1,trnfile);
  109.                                         triangles[j].row[i] = temp;
  110.                                         fread(&temp,sizeof(int),1,trnfile);
  111.                                         triangles[j].col[i] = temp;
  112.                                 }
  113.                         }
  114.                         else {
  115.                                 if (file_rev > 300)     /* read in floats */
  116.                                         fread(&triangle0,sizeof(triangle),1,trnfile);
  117.                                 else                    /* read in ints */
  118.                                 {
  119.                                         for (i=0; i<3; i++)
  120.                                         {
  121.                                                 fread(&temp,sizeof(int),1,trnfile);
  122.                                                 triangle0.row[i] = temp;
  123.                                         }
  124.                                         for (i=0; i<3; i++)
  125.                                         {
  126.                                                 fread(&temp,sizeof(int),1,trnfile);
  127.                                                 triangle0.col[i] = temp;
  128.                                         }
  129.  
  130.                                 }
  131.                                 for (j = 0; j < num_triangles; j++)
  132.                                 {
  133.                                         /* revs 3.01 and later use float values */
  134.                                         if (file_rev > 300)
  135.                                                 fread(&triangles[j],
  136.                                                     sizeof(triangle),1,trnfile);
  137.                                         else
  138.                                         /* revs 3.00 and earlier use int values */
  139.                                         {
  140.                                                 for (i=0; i<3; i++)
  141.                                                 {
  142.                                                         fread(&temp,sizeof(int),1,trnfile);
  143.                                                         triangles[j].row[i] = temp;
  144.                                                 }
  145.                                                 for (i=0; i<3; i++)
  146.                                                 {
  147.                                                         fread(&temp,sizeof(int),1,trnfile);
  148.                                                         triangles[j].col[i] = temp;
  149.                                                 }
  150.                                         }
  151.                                 }
  152.                         }
  153.             fclose(trnfile);
  154.                         IFS_changed = 1;
  155.                         return(1);
  156.         }
  157.         }
  158.         return(0);
  159. }
  160.  
  161.