home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / DepTable.C < prev    next >
C/C++ Source or Header  |  1998-04-23  |  2KB  |  132 lines

  1. /* This file is part of
  2.  * ======================================================
  3.  * 
  4.  *           LyX, The Document Processor
  5.  *         Copyright (C) 1995 Matthias Ettrich
  6.  *           Copyright (C) 1995-1998 The LyX Team.
  7.  *
  8.  *           This file is Copyright (C) 1996-1998
  9.  *           Lars Gullik Bj°nnes
  10.  *
  11.  * ======================================================
  12.  */
  13.  
  14. #include <config.h>
  15.  
  16. #include "DepTable.h"
  17. #include "lyxlib.h"
  18. #include "filetools.h"
  19.  
  20.  
  21. DepTable::DepTable()
  22. {
  23.     new_sum = 0;
  24.     old_sum = 0;
  25.     next = NULL;
  26. }
  27.  
  28.  
  29. DepTable::DepTable(LString const &f,
  30.            unsigned long one,
  31.            unsigned long two)
  32. {
  33.     file = f; new_sum = 0; old_sum = 0;
  34.     if (one != 0)
  35.         new_sum = one;
  36.     if (two != 0)
  37.         old_sum = two;
  38.     next = NULL;
  39. }
  40.  
  41.  
  42. void DepTable::insert(LString const &f,
  43.               unsigned long one,
  44.               unsigned long two)
  45. {
  46.     if (f == file) return;
  47.     if (next)
  48.         next->insert(f, one, two);
  49.     else
  50.         next = new DepTable(f, one, two);
  51. }
  52.         
  53.  
  54. void DepTable::update()
  55. {
  56.     if (!file.empty()) {
  57.         old_sum = new_sum;
  58.         new_sum = lyxsum(file.c_str());
  59.         //lyxerr.debug("update: " + file + " " +
  60.         //          int(new_sum) + " " + int(old_sum));
  61.     }
  62.     if (next) next->update();
  63. }
  64.  
  65.  
  66. bool DepTable::sumchange()
  67. {
  68.     bool ret = false;
  69.     
  70.     if (!file.empty()) {
  71.         if (old_sum != new_sum) ret = true;
  72.     }
  73.     if (!ret && next) ret = next->sumchange();
  74.  
  75.     return ret;
  76. }
  77.  
  78.  
  79. bool DepTable::haschanged(LString const &fil)
  80. {
  81.     bool ret = false;
  82.  
  83.     if (!fil.empty() && !file.empty() && fil == file) {
  84.         if (new_sum != old_sum && new_sum != 0)
  85.             ret = true;
  86.     }
  87.     if (!ret && next) ret = next->haschanged(fil);
  88.     return ret;
  89. }
  90.  
  91.  
  92. void DepTable::write(LString const&f)
  93. {
  94.     FilePtr fp(f, FilePtr::write);
  95.     if (fp() && next) next->write(fp());
  96. }
  97.  
  98.  
  99. void DepTable::read(LString const &f)
  100. {
  101.     FilePtr fp(f, FilePtr::read);
  102.     if (fp()) { // file opened
  103.         char nome[256];
  104.         unsigned long one = 0;
  105.         unsigned long two = 0;
  106.         // scan the file line by line
  107.         // return true if the two numbers on the lin eis different
  108.         int ret = 0;
  109.         while (!feof(fp())) {
  110.             ret = fscanf(fp(), "%s %lu %lu",
  111.                      nome, &one, &two);
  112.             if (ret !=3) continue;
  113.             //lyxerr.debug("redep(" + int(ret) + ": " +
  114.             //          nome + ", " + int(one) +
  115.             //          " " + int(two));
  116.             insert(LString(nome), one, two);
  117.         }
  118.     }
  119. }
  120.  
  121.  
  122. void DepTable::write(FILE *f)
  123. {
  124.     //lyxerr.debug("todep: " + file + " " +
  125.     //          int(new_sum) + " " + int(old_sum));
  126.     fprintf(f, "%s %lu %lu\n", file.c_str(),
  127.         new_sum, old_sum);
  128.     if (next)
  129.         next->write(f);
  130. }
  131.         
  132.