home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / printer / graphpaper / src / src.lha / files.c < prev    next >
C/C++ Source or Header  |  1993-04-06  |  4KB  |  159 lines

  1. #include "graph.h"
  2.  
  3. struct AslBase *AslBase;
  4.  
  5. #define FILE_VERSION 1
  6.  
  7. static char *cat(char *str1, char *str2)
  8. {
  9.     static char buf[200];
  10.  
  11.     buf[0] = '\0';
  12.     if (*str1) {
  13.         strcpy(&buf, str1);
  14.         if (str1[strlen(str1)-1] != ':') {
  15.             strcat(&buf, "/");
  16.         }
  17.     }
  18.     strcat(&buf,str2);
  19.     return buf;
  20. }
  21.  
  22.  
  23. void load_settings(char *dir, char *file)
  24. {
  25.    FILE *f;
  26.    char c1,c2;
  27.    int version;
  28.    char modestr[100];
  29.  
  30.    if (f = fopen(cat(dir,file), "r")) {
  31.        sprintf(messagebuf, "Loading from file \"%s\"", cat(dir,file));
  32.        message(messagebuf);
  33.  
  34.  
  35.        fscanf(f, "%c%c%d\n", &c1,&c2,&version);
  36.        if (c1 != 'G' || c2 != 'P') {
  37.            message("Error: Not a GraphPaper settings file");
  38.            fclose(f);
  39.            return;
  40.        }
  41.        switch (version) {
  42.            case 1: message("FIX");
  43.  
  44.                    fscanf(f, "%d %d\n", &x_dpi_V, &y_dpi_V);
  45.                    INTFIELD(x_dpi) = x_dpi_V;
  46.                    INTFIELD(y_dpi) = y_dpi_V;
  47.                    sprintf((char *)x_dpiSIBuff,"%d", INTFIELD(x_dpi));
  48.                    sprintf((char *)y_dpiSIBuff,"%d", INTFIELD(y_dpi));
  49.  
  50.                    fscanf(f, "%d %d\n", &Minor_Thickness_V, &Major_Thickness_V);
  51.                    INTFIELD(Minor_Thickness) = Minor_Thickness_V;  
  52.                    INTFIELD(Major_Thickness) = Major_Thickness_V;  
  53.                    sprintf((char *)Minor_ThicknessSIBuff,"%d",
  54.                            INTFIELD(Minor_Thickness));
  55.                    sprintf((char *)Major_ThicknessSIBuff,"%d",
  56.                            INTFIELD(Major_Thickness));
  57.  
  58.                    fscanf(f, "%e %e\n", &x_size_v, &y_size_v);
  59.                    size_init();
  60.  
  61.                    fscanf(f, "%d %d\n", &x_grids_page_v, &y_grids_page_v);
  62.                    grids_init();
  63.  
  64.                    fscanf(f, "%d %d\n", &minor_x_v, &minor_y_v);
  65.                    minors_init();
  66.  
  67.                    /* MinorMode */
  68.                    fscanf(f, "%s\n", &modestr);
  69.                    if (!strcmp(modestr, "None"  )) MG_None  (NULL);
  70.                    if (!strcmp(modestr, "Linear")) MG_Linear(NULL);
  71.                    if (!strcmp(modestr, "LogX"  )) MG_LogX  (NULL);
  72.                    if (!strcmp(modestr, "LogY"  )) MG_LogY  (NULL);
  73.                    if (!strcmp(modestr, "LogLog")) MG_LogLog(NULL);
  74.  
  75.                    RefreshGadgets(wG->FirstGadget, wG, NULL);
  76.                    sprintf(messagebuf, "Load from file \"%s\" completed", cat(dir,file));
  77.                    message(messagebuf);
  78.                    break;
  79.  
  80.            default: 
  81.                    message("Error: version incompatibility");
  82.                    break;
  83.        }
  84.  
  85.        fclose(f);
  86.    } else {
  87.        message("Could not open file");
  88.    }
  89. }
  90.  
  91. void save_settings(char *dir, char *file)
  92. {
  93.     FILE *f;
  94.  
  95.     GetValues();
  96.  
  97.     if (f = fopen(cat(dir,file), "w")) {
  98.        sprintf(messagebuf, "Saving to file \"%s\"", cat(dir,file));
  99.        message(messagebuf);
  100.  
  101.        fprintf(f, "GP%d\n", FILE_VERSION);
  102.        fprintf(f, "%d %d\n", x_dpi_V, y_dpi_V);
  103.        fprintf(f, "%d %d\n", Minor_Thickness_V, Major_Thickness_V);
  104.        fprintf(f, "%e %e\n", x_size_v, y_size_v);
  105.        fprintf(f, "%d %d\n", x_grids_page_v, y_grids_page_v);
  106.        fprintf(f, "%d %d\n", minor_x_v, minor_y_v);
  107.  
  108.             if (MinorMode == &None)   fprintf(f,"None\n");
  109.        else if (MinorMode == &Linear) fprintf(f,"Linear\n");
  110.        else if (MinorMode == &LogX)   fprintf(f,"LogX\n");
  111.        else if (MinorMode == &LogY)   fprintf(f,"LogY\n");
  112.        else if (MinorMode == &LogLog) fprintf(f,"LogLog\n");
  113.  
  114.        fclose(f);
  115.        sprintf(messagebuf, "Save completed to file \"%s\"", cat(dir,file));
  116.        message(messagebuf);
  117.    } else {
  118.        message("Could not open file");
  119.    }
  120. }
  121.  
  122. static int OpenAsl()
  123. {
  124.     if (!AslBase) AslBase = (struct AslBase *)OpenLibrary((UBYTE *)AslName, 0L);
  125.     if (!AslBase) {
  126.         message("Could not open Asl Library");
  127.         return 0;
  128.     }
  129.     return 1;
  130.  
  131. }
  132.  
  133. static void DoFileIO(void handler())
  134. {
  135.     struct FileRequester *f;
  136.  
  137.     if (OpenAsl()) {
  138.         f = AllocFileRequest();
  139.  
  140.         if (RequestFile(f)) {
  141.             handler(f->rf_Dir, f->rf_File);
  142.         }
  143.  
  144.     FreeFileRequest(f);
  145.     }
  146. }
  147.  
  148.  
  149. void Project_Load(APTR object)
  150. {
  151.     DoFileIO(load_settings);
  152. }
  153.  
  154. void Project_Save(APTR object)
  155. {
  156.     DoFileIO(save_settings);
  157. }
  158.  
  159.