From 906d403ccbe54e6846f91e45153de7c26af88ef9 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (laptop)" <j.wuttke@fz-juelich.de>
Date: Fri, 18 Jan 2013 09:36:19 +0100
Subject: [PATCH] basic backup implementation completed

---
 pub/src/commands.cpp | 11 ++++++-----
 pub/src/curve.cpp    |  1 +
 pub/src/mem.cpp      | 23 +++++++++++++++++++----
 pub/src/mem.h        |  4 ++--
 4 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/pub/src/commands.cpp b/pub/src/commands.cpp
index f4248227..42b1a4ba 100644
--- a/pub/src/commands.cpp
+++ b/pub/src/commands.cpp
@@ -92,14 +92,15 @@ bool fridaCommand( string cmd )
 
     } else if (cmd == "b") {
         cout << "Backup commands:\n"
+            "  bc   copy to online backup (automatically before cf)\n"
             "  br   retrieved from online backup\n"
-            "  bs   copy to online backup (automatically before cf)\n";
+            ;
 
-    } else if (cmd == "br") {
-        NOlm::mem_retrieve();
+    } else if (cmd == "bc") {
+        NOlm::mem_backup_store();
 
-    } else if (cmd == "bs") {
-        NOlm::mem_backup();
+    } else if (cmd == "br") {
+        NOlm::mem_backup_retrieve();
 
     } else if (cmd == "c") {
         cout << "Curve and fit commands:\n"
diff --git a/pub/src/curve.cpp b/pub/src/curve.cpp
index 2abb9f7a..13d3dffa 100644
--- a/pub/src/curve.cpp
+++ b/pub/src/curve.cpp
@@ -836,6 +836,7 @@ void NCurveFile::Fit( bool _allow_slow_conv )
     FitDatTyp data;
     allow_slow_conv = _allow_slow_conv;
 
+    NOlm::mem_backup_store();
     NOlm::IterateC fiter;
 
     while ( POlc fc = fiter() ) {
diff --git a/pub/src/mem.cpp b/pub/src/mem.cpp
index 94abd93f..fd22dc3e 100644
--- a/pub/src/mem.cpp
+++ b/pub/src/mem.cpp
@@ -24,6 +24,7 @@
 
 namespace NOlm {
     vector<POlo> MOM;
+    vector<POlo> BAK;
     bool overwrite;
     CList FSel, FSelOld, FSelNew;
 };
@@ -325,15 +326,29 @@ namespace NOlm {
 namespace NOlm {
 
     //! Copy selected files to backup.
-    void mem_backup()
+
+    void mem_backup_store()
     {
-        throw "not yet implemented";
+        BAK.clear();
+        IterateO fiter;
+        while ( POlo fin=fiter() ){
+            POlo fout( fin->new_olo( false ) );
+            fout->copy_mainvec( fin );
+            BAK.push_back( fout );
+        }
     }
 
     //! Retrieve files from backup.
 
-    void mem_retrieve()
+    void mem_backup_retrieve()
     {
-        throw "not yet implemented";
+        if( !BAK.size() )
+            throw "no files in backup";
+        sel_collect_begin();
+        for( uint kb=0; kb<BAK.size(); ++kb ){
+            mem_store( BAK[kb], -1 );
+        }
+        sel_collect_end();
+        BAK.clear();
     }
 }
diff --git a/pub/src/mem.h b/pub/src/mem.h
index 21a72717..5a351e4d 100644
--- a/pub/src/mem.h
+++ b/pub/src/mem.h
@@ -38,8 +38,8 @@ namespace NOlm {
     void sel_increment( int step );
 
     // Backup:
-    void mem_backup();
-    void mem_retrieve();
+    void mem_backup_store();
+    void mem_backup_retrieve();
 
     //! Iterate over all files in selection.
     class IterateO {
-- 
GitLab