home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / ftes46b5.zip / ftes46b5 / src / c_desktop.cpp < prev    next >
C/C++ Source or Header  |  1997-08-25  |  4KB  |  164 lines

  1. /*    c_desktop.cpp
  2.  *
  3.  *    Copyright (c) 1994-1996, Marko Macek
  4.  *
  5.  *    You may distribute under the terms of either the GNU General Public
  6.  *    License or the Artistic License, as specified in the README file.
  7.  *
  8.  */
  9.  
  10. #include "fte.h"
  11.  
  12. #ifdef CONFIG_DESKTOP
  13.  
  14. #define DESKTOP_VER "FTE Desktop 2\n"
  15. #define DESKTOP_VER1 "FTE Desktop 1\n"
  16.  
  17. char DesktopFileName[256] = "";
  18.  
  19. int SaveDesktop(char *FileName) {
  20.     FILE *fp;
  21.     EModel *M;
  22.     
  23.     fp = fopen(FileName, "w");
  24.     if (fp == 0)
  25.         return 0;
  26.     
  27.     setvbuf(fp, FileBuffer, _IOFBF, sizeof(FileBuffer));
  28.     
  29.     fprintf(fp, DESKTOP_VER);
  30.     
  31.     M = ActiveModel;
  32.     while (M) {
  33.         switch(M->GetContext()) {
  34.         case CONTEXT_FILE:
  35.             {
  36.                 EBuffer *B = (EBuffer *)M;
  37.                 fprintf(fp, "F|%d|%s\n", B->ModelNo, B->FileName);
  38.             }
  39.             break;
  40. #ifdef CONFIG_OBJ_DIRECTORY
  41.         case CONTEXT_DIRECTORY:
  42.             {
  43.                 EDirectory *D = (EDirectory *)M;
  44.                 fprintf(fp, "D|%d|%s\n", D->ModelNo, D->Path);
  45.             }
  46.             break;
  47. #endif
  48.         }
  49.         M = M->Next;
  50.         if (M == ActiveModel)
  51.             break;
  52.     }
  53. #ifdef CONFIG_TAGS
  54.     TagsSave(fp);
  55. #endif
  56.     markIndex.saveToDesktop(fp);
  57.     fclose(fp);
  58.     return 1;
  59. }
  60.  
  61. int LoadDesktop(char *FileName) {
  62.     FILE *fp;
  63.     char line[512];
  64.     char *p, *e;
  65.     int FLCount = 0;
  66.  
  67. #ifdef CONFIG_TAGS
  68.     TagClear();
  69. #endif
  70.     
  71.     fp = fopen(FileName, "r");
  72.     if (fp == 0)
  73.         return 0;
  74.  
  75.     //setvbuf(fp, FileBuffer, _IOFBF, sizeof(FileBuffer));
  76.     
  77.     if (fgets(line, sizeof(line), fp) == 0 ||
  78.         (strcmp(line, DESKTOP_VER) != 0 &&
  79.         (strcmp(line, DESKTOP_VER1) != 0)))
  80.     {
  81.         fclose(fp);
  82.         return 0;
  83.     }
  84.     while (fgets(line, sizeof(line), fp) != 0) {
  85.         e = strchr(line, '\n');
  86.         if (e == 0)
  87.             break;
  88.         *e = 0;
  89.         if ((line[0] == 'D' || line[0] == 'F') && line[1] == '|') {
  90.             int ModelNo = -1;
  91.             p = line + 2;
  92.             if (isdigit(*p)) {
  93.                 ModelNo = atoi(p);
  94.                 while (isdigit(*p)) p++;
  95.                 if (*p == '|')
  96.                     p++;
  97.             }
  98.  
  99.             if (line[0] == 'F') { // file
  100.                 if (FLCount > 0)
  101.                     suspendLoads = 1;
  102.                 if (FileLoad(0, p, 0, ActiveView))
  103.                     FLCount++;
  104.                 suspendLoads  = 0;
  105. #ifdef CONFIG_OBJ_DIRECTORY
  106.             } else if (line[0] == 'D') { // directory
  107.                 
  108.                 new EDirectory(0, &ActiveModel, p);
  109.                 assert(ActiveModel != 0);
  110. #endif
  111.             }
  112.  
  113.             if (ActiveModel) {
  114.                 if (ModelNo != -1) {
  115.                     if (FindModelID(ActiveModel, ModelNo) == 0)
  116.                         ActiveModel->ModelNo = ModelNo;
  117.                 }
  118.  
  119.                 if (ActiveModel != ActiveModel->Next) {
  120.                     suspendLoads = 1;
  121.                     ActiveView->SelectModel(ActiveModel->Next);
  122.                     suspendLoads  = 0;
  123.                 }
  124.             }
  125.         } else {
  126. #ifdef CONFIG_TAGS
  127.             if (line[0] == 'T' && line[1] == '|') { // tag file
  128.                 TagsAdd(line + 2);
  129. #endif
  130.             } else if (line[0] == 'M' && line[1] == '|') { // mark
  131.                 char *name;
  132.                 char *file;
  133.                 EPoint P;
  134.                 //long l;
  135.                 char *e;
  136.  
  137.                 p = line + 2;
  138.                 P.Row = strtol(p, &e, 10);
  139.                 if (*e != '|')
  140.                     break;
  141.                 p = e + 1;
  142.                 P.Col = strtol(p, &e, 10);
  143.                 if (*e != '|')
  144.                     break;
  145.                 p = e + 1;
  146.                 name = p;
  147.                 while (*p && *p != '|')
  148.                     p++;
  149.                 if (*p == '|')
  150.                     *p++ = 0;
  151.                 else
  152.                     break;
  153.                 file = p;
  154.                 
  155.                 markIndex.insert(name, file, P);
  156.             }
  157.         }
  158.     }
  159.     fclose(fp);
  160.     return 1;
  161. }
  162.  
  163. #endif
  164.