home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume8 / xfig2.8 / part02 / file.c < prev    next >
C/C++ Source or Header  |  1990-07-02  |  3KB  |  146 lines

  1. /* 
  2.  *    FIG : Facility for Interactive Generation of figures
  3.  *
  4.  *    Copyright (c) 1988 by Supoj Sutanthavibul (supoj@sally.UTEXAS.EDU)
  5.  *    March 1988.
  6.  *
  7.  *    %W%    %G%
  8. */
  9. #include "fig.h"
  10. #include "resources.h"
  11. #include "func.h"
  12. #include "object.h"
  13.  
  14. #define            PROMPT        1
  15. #define            NO_PROMPT    0
  16.  
  17. extern int        figure_modified;
  18. extern char        current_file[];
  19. extern char        directory[];
  20. extern int        num_object;
  21.  
  22. edit_file(file)
  23. char    *file;
  24. {
  25.     extern F_compound    objects, saved_objects;
  26.     int        s;
  27.     F_compound    c;
  28.  
  29.     if (*file == 0) {
  30.         put_msg("Empty name");
  31.         return;
  32.         }
  33.     c.arcs = NULL;
  34.     c.compounds = NULL;
  35.     c.ellipses = NULL;
  36.     c.lines = NULL;
  37.     c.splines = NULL;
  38.     c.texts = NULL;
  39.     c.next = NULL;
  40.     set_temp_cursor(&wait_cursor);
  41.     s = read_fig(file, &c);
  42.     if (s == 0) {        /* Successful read */
  43.         clean_up();
  44.         (void)strcpy(current_file, file);
  45.         saved_objects = objects;
  46.         objects = c;
  47.         redisplay_canvas();
  48.         put_msg("Edit \"%s\" %d objects", file, num_object);
  49.         set_action(F_EDIT);
  50.         }
  51.     else if (s == ENOENT) {
  52.         clean_up();
  53.         saved_objects = objects;
  54.         objects = c;
  55.         redisplay_canvas();
  56.         put_msg("\"%s\" new file", file);
  57.         (void)strcpy(current_file, file);
  58.         set_action(F_EDIT);
  59.         }
  60.     else if (s > 0)
  61.         read_fail_message(file, s);
  62.     reset_cursor();
  63.     figure_modified = 0;
  64.     }
  65.  
  66. read_file(file)
  67. char    *file;
  68. {
  69.     extern F_compound    objects, saved_objects, object_tails;
  70.     int        s;
  71.     F_compound    c;
  72.  
  73.     if (*file == 0) {
  74.         put_msg("Empty name");
  75.         return;
  76.         }
  77.  
  78.     c.arcs = NULL;
  79.     c.compounds = NULL;
  80.     c.ellipses = NULL;
  81.     c.lines = NULL;
  82.     c.splines = NULL;
  83.     c.texts = NULL;
  84.     c.next = NULL;
  85.     set_temp_cursor(&wait_cursor);
  86.     s = read_fig(file, &c);
  87.     if (s == 0) {        /* Successful read */
  88.         clean_up();
  89.         saved_objects = c;
  90.         tail(&objects, &object_tails);
  91.         append_objects(&objects, &saved_objects, &object_tails);
  92.         redisplay_canvas();
  93.         put_msg("File \"%s\" %d objects", file, num_object);
  94.         set_action_object(F_CREATE, O_ALL_OBJECT);
  95.         }
  96.     else if (s > 0)
  97.         read_fail_message(file, s);
  98.     reset_cursor();
  99.     }
  100.  
  101. save_and_exit(file)
  102. char    *file;
  103. {
  104.     if (0 == write_file(file, PROMPT)) quit();
  105.     }
  106.  
  107. save_current_file()
  108. {
  109.     return(write_file(current_file, NO_PROMPT));
  110.     }
  111.  
  112. save_file(file)
  113. char    *file;
  114. {
  115.     if (*current_file=='\0') /* no current file, make this the current one */
  116.         strcpy(current_file, file);
  117.     return(write_file(file, PROMPT));
  118.     }
  119.  
  120. status()
  121. {
  122. #ifdef SYSV
  123.     extern char    *getcwd();
  124. #else
  125.     extern char    *getwd();
  126. #endif
  127.     if (*directory == NULL) {
  128. #ifdef SYSV
  129.         if (NULL == getcwd(directory, 1024)) {
  130.           put_msg("%s", "Can't get current directory");
  131. #else
  132.         if (NULL == getwd(directory)) {
  133.         put_msg("%s", directory);    /* err msg is in directory */
  134. #endif
  135.         *directory = '\0';
  136.         return;
  137.         }
  138.         }
  139.  
  140.     if (*current_file == '\0')
  141.         put_msg("No file; directory \"%s\"", directory);
  142.     else
  143.         put_msg("file \"%s\" %s; directory \"%s\"", current_file,
  144.             (figure_modified ? "[modified]" : ""), directory);
  145.     }
  146.