diff --git a/src/frida2.cpp b/src/frida2.cpp
index 8147d6d8d53a7210229b95fd7e5ea953c5634273..ea6ad8161def0985c42a850c021dfb023c6c6c19 100644
--- a/src/frida2.cpp
+++ b/src/frida2.cpp
@@ -46,411 +46,412 @@ int main()
 
     while(1) {
 
-        prompt = (FSel.n() ? FSel.str() : "?") + " > ";
-        cmd = wask(prompt.c_str());		
-        // cout << ".. understood [" << cmd << "]\n";
-
-        if (cmd[0]=='=') {
-            overwrite = 1;
-            cmd.erase(0,1);
-            if( cmd=="" ) continue;
-        }
+        try{ 
+            prompt = (FSel.n() ? FSel.str() : "?") + " > ";
+            cmd = wask(prompt.c_str());		
+            // cout << ".. understood [" << cmd << "]\n";
+
+            if (cmd[0]=='=') {
+                overwrite = 1;
+                cmd.erase(0,1);
+                if( cmd=="" ) continue;
+            }
 
-        if (cmd=="-") {
-            SelPop();
-            continue;
-        }
-        if (cmd.find_first_of("*0123456789")==0) {
-            FSelIn = CList(cmd, 0, MOM.size()-1);
-            if (!FSelIn.semvalid()) {
-                NRead::clear();
-            } else {
-                SelNew();
-                FSel = FSelIn;
+            if (cmd=="-") {
+                SelPop();
+                continue;
+            }
+            if (cmd.find_first_of("*0123456789")==0) {
+                FSelIn = CList(cmd, 0, MOM.size()-1);
+                if (!FSelIn.semvalid()) {
+                    NRead::clear();
+                } else {
+                    SelNew();
+                    FSel = FSelIn;
+                }
+                continue;
             }
-            continue;
-        }
 			
-        if (cmd == "h" || cmd == "?") {
-            cout << "Commands by initial letter:\n"
-                "  a    add to plot\n"
-                "  c    curves and fits\n"
-                "  d    directory of online files\n"
-                "  e    edit coordinate names and more\n"
-                "  g    graphics setup\n"
-                "  f    file operations\n"
-                "  m    manipulations (reorganisation of data)\n"
-                "  o    operations (arithmetic operations on data)\n"
-                "  p    plot\n"
-                "  r    RSSM\n"
-                "  t    timing\n"
-                "  x    execute shell command\n"
-                "  .    evaluate expression(s)\n"
-                "  _    special / temporary commands\n"
-                ;
-
-        } else if (cmd == "c") {
-            cout << "Curves:\n"
-                "  cc   create\n"
-                "  cf   fit\n"
-                "  ci   extract parameter\n"
-                "  cp   print parameters\n"
-                "  cx   toggle fixed (also: cx+ cx-)\n"
-                "  cyli weight y lin\n"
-                "  cylg weight y log\n"
-                "Control fitting machinery:\n"
-                "  csf  set gradient step factor\n"
-                "  cse  set sqrt of differentiation step\n"
-                "  csc  set number of calls\n"
-                "  csp  set print frequency\n"
-                "  csm  set fit metric\n";
-        } else if (cmd == "cc") {
-            Fitting.Create();
-        } else if (cmd == "cf") {
-            Fitting.Fit();
-        } else if (cmd == "ci") {
-            Fitting.GetPar();
-        } else if (cmd == "cp") {
-            Fitting.ShowPar();
-        } else if (cmd.substr(0,2) == "cx") {
-            Fitting.SetFixed(cmd.substr(2));
-        } else if (cmd == "cyli") {
-            Fitting.SetProperties("yli");
-        } else if (cmd == "cylg") {
-            Fitting.SetProperties("ylg");
-        } else if (cmd.substr(0,2) == "cs") {
-            Fitting.SetSetup(cmd.substr(2));
-
-
-        } else if ( cmd == "d" ) {
-            cout << "Show directory:\n"
-                "  df   on-line files\n"
-                "  dz   z-values\n"
-                "  dp   x|y-values\n"
-                "  dy   y-values\n"
-                "  dn   numeric parameters\n"
-                "  dc   coordinate names and units\n";
-        } else if (cmd == "df") {
-            NEdif::Dir();
-        } else if (cmd == "dz") {
-            NEdif::DirZ();
-        } else if (cmd == "dp" ) {
-            NOperate::Show( "xy" );
-        } else if (cmd == "dy" ) {
-            NOperate::Show( "y" );
-        } else if (cmd == "dn" ) {
-            NEdif::DirNumpar();
-        } else if (cmd == "dc") {
-            NEdif::DirCoord();
-
-        } else if ( cmd == "e" ) {
-            cout << "Edit text parameters:\n"
-                "  en   numeric parameters\n"
-                "  ecx  x coordinate name and unit (similarly ecy, ecz0, ..)\n"
-                "  ed   documentation lines\n";
-        } else if (cmd == "en") {
-            NEdif::EditNumpar();
-        } else if (cmd.substr(0,2) == "ec") {
-            NEdif::EditCoord( cmd.substr(2) );
-        } else if (cmd == "ed") {
-            NEdif::EditDoc();
-
-
-        } else if (cmd == "f") {
-            cout << "File operations:\n"
-                "  fl   load from disk\n"
-                "  fs   save to disk\n"
-                "  fsa  save to disk (old a01 format)\n"
-                "  fe1  export (scan -> tab-separated line)\n"
-                "  fe2  export (as tab)\n"
-                "  fc   copy\n"
-                "  fdel delete\n"
-                "  fm   make\n"
-                "  fr   read in\n"
-                "  ft   read tab\n"
-                "  ftt  read multi block tab (blocks begin with z line, end with empty line)\n"
-                "  fts  read tab from script\n"
-                "  ftts read multi block tab from script\n";
-        } else if (cmd == "fl") {
-            NFile::Load();
-        } else if (cmd == "fs") {
-            NEdif::Save( "y08" );
-        } else if (cmd == "fsa") {
-            NEdif::Save( "a01" );
-        } else if (cmd == "fe1") {
-            NEdif::Save( "csv" );
-        } else if (cmd == "fe2") {
-            NEdif::Save( "tab" );
-        } else if (cmd == "fc") {
-            OlfCopy();
-        } else if (cmd == "fdel") {
-            OlfDel();
-        } else if (cmd == "fm") {
-            NEdif::MakeGrid();
-        } else if (cmd == "fr") {
-            NEdif::ReadIn();
-        } else if (cmd == "ft") {
-            NEdif::ReadTab( false, false );
-        } else if (cmd == "ftt") {
-            NEdif::ReadTab( true, false );
-        } else if (cmd == "fts") {
-            NEdif::ReadTab( false, true );
-        } else if (cmd == "ftts") {
-            NEdif::ReadTab( true, true );
-
-
-        } else if (cmd == "g") {
-            cout << "Graphic commands:\n"
-                "  gx   set x range\n"
-                "  gy   set x range\n"
-                "  ga, gxa, gya auto-ranges\n"
-                "  gs   set auxiliary parameters\n"
-                "  gp   plot to complete .ps file\n"
-                "  gf   plot to short .psX file\n"
-                "  gd   dialog (within gnuplot)\n"
-                "  p    plot\n"
-                "  pp   plot with new autoranges\n"
-                "  a    add to plot\n";
-        } else if (cmd == "gx") {
-            NPlot::X.Ask("Set x range");
-        } else if (cmd == "gy") {
-            NPlot::Y.Ask("Set y range");
-        } else if (cmd == "ga") {
-            NPlot::X.R = CRange(1);
-            NPlot::Y.R = CRange(1);
-        } else if (cmd == "gxa") {
-            NPlot::X.R = CRange(1);
-        } else if (cmd == "gya") {
-            NPlot::Y.R = CRange(1);
-        } else if (cmd == "gs") {
-            NPlot::Multiask();
-        } else if (cmd == "gp") {
-            NPlot::Save( true );
-        } else if (cmd == "gf") {
-            NPlot::Save( false );
-        } else if (cmd == "gd") { // graph dialog
-            NPlot::Dialog();
-        } else if (cmd == "p") {
-            NEdif::Plot(0);
-        } else if (cmd == "pp") {
-            NPlot::X.R = CRange(1);
-            NPlot::Y.R = CRange(1);
-            NEdif::Plot(0);
-        } else if (cmd == "a") {
-            NEdif::Plot(1);
-
-
-        } else if (cmd == "m") {
-            cout << "Manipulations on the data structure:\n"
-                "  md   generic delete\n"
-                "  mr   generic retain\n"
-                "  mpd  points: delete\n"
-                "  mpdb         delete unless in block\n"
-                "  mpa          average\n"
-                "  mpb          break into scans\n"
-                "  mpo          sort\n"
-                "  mpq          average when x equal\n"
-                "  mpgw         group y2 according to y0, weighted with y1\n"
-                "  msd  scans:  delete\n"
-                "  msa          average (msz preferred)\n"
-                "  msg          simplify -> grid\n"
-                "  msb          break into files\n"
-                "  ms*          spawn scans\n"
-                "  msx          z_max <-> x\n"
-                "  msz          z manipulation\n"
-                "  mso          sort\n"
-                "  msoz         sort by z-values\n"
-                "  mzx          exchange / rotate z coordinates\n"
-                "  mz-          delete z coordinate\n"
-                "  mfj  files:  merge (\"join\")\n"
-                "  mfjp files:  merge pointwise\n"
-                "  mhm  histogram make\n";
-        } else if (cmd == "md") {
-            NOperate::Select(1);
-        } else if (cmd == "mr") {
-            NOperate::Select(0);
-        } else if (cmd == "mpd") {
-            NManip::PtsDelete();
-        } else if (cmd == "mpdb") {
-            NManip::PtsRetainEqui();
-        } else if (cmd == "mpa") {
-            NManip::PtsAvge();
-        } else if (cmd == "mpb") {
-            NManip::PtsBreak();
-        } else if (cmd == "mpgw") {
-            NManip::PtsGroupWeighted();
-        } else if (cmd == "mpo") {
-            NManip::PtsSort();
-        } else if (cmd == "mpq") {
-            NManip::PtsAvgeEq();
-        } else if (cmd == "msd") {
-            NManip::ScaDelete();
-        } else if (cmd == "msa") {
-            NManip::ScaAvge();
-        } else if (cmd == "msg") {
-            NManip::ScaGridSimplify();
-        } else if (cmd == "msb") {
-            NManip::ScaBreak();
-        } else if (cmd == "ms*") {
-            NManip::ScaSpawn();
-        } else if (cmd == "msx") {
-            NManip::ScaExch();
-        } else if (cmd == "mzx") {
-            NManip::ZExchange();
-        } else if (cmd == "mz-") {
-            NManip::ZDelete();
-        } else if (cmd == "msz") {
-            NManip::ScaZ();
-        } else if (cmd == "mso") {
-            NManip::ScaSortByExpr();
-        } else if (cmd == "msoz") {
-            NManip::ScaSortByZ();
-        } else if (cmd == "mfj") {
-            NManip::FilMerge();
-        } else if (cmd == "mfjp") {
-            NManip::FilMergePointwise();
-        } else if (cmd == "mhm") {
-            NManip::HistoMake();
-
-
-        } else if (cmd == "o") {
-            cout << "Operate:\n"
-                "  ox       on x\n"
-                "  oy       on y\n"
-                "  oz0,...  on z0,...\n"
-                "  oz+,...  add new z value\n"
-                "  op0,...  on p0,... (fit parameters)\n"
-                "  of       functional operation\n"
-                "  oi       integral operation through expression\n"
-                "  oixy     choose two columns, save them as x and y\n"
-                "  oio      integral operation through menu\n"
-                "  oevv     calculate eigenvalues and eigenvectors\n"
-                "  occ      calculate correlations (y vs y')\n"
-                "  ocd      differentiate correlations\n"
-                "  oad      average differences excluding values <0\n";
-        } else if (cmd == "oz+") {
-            NOperate::NewZ();
-        } else if (cmd[0]=='o' && strchr("xyz", cmd[1])) {
-            NOperate::Pointwise(cmd.substr(1));
-        } else if (cmd.substr(0,2) == "op") {
-            Fitting.OprPar(cmd.substr(1));
-
-        } else if (cmd.substr(0,2) == "of") {
-            NFunctional::Opr(cmd.substr(1));
-        } else if (cmd == "oi") {
-            NOperate::Integral();
-        } else if (cmd == "oixy") {
-            NOperate::IntXY();
-        } else if (cmd == "oio") {
-            NIntOld::Opr();
-        } else if (cmd == "oevv") {
-            NOperate::Eigen();
-        } else if (cmd == "occ") {
-            NOperate::CalcCorrel();
-        } else if (cmd == "ocd") {
-            NOperate::CalcCorrelDiff();
-        } else if (cmd == "oad") {
-            NOperate::CalcAvgeDiff();
-
-
-        } else if (cmd == "t") {
-            double time_total =
-                ((double) (clock() - clock_start)) / CLOCKS_PER_SEC;
-            printf( "total time now %g\n", time_total );
-
-	} else if (cmd == "r") {
-            cout << "read RSSM data:\n"
-                "  ry   load energy spectra\n"
-                "  ry2  load also spectra for open state\n"
-                "  ry4  load also chopper histograms\n"
-                "  ry8  load spectra for two directions separately\n"
-                "  ryd  load only spectra for two directions\n"
-                "  rs   load series of energy spectra\n"
-                "  rs2  load also spectra for open state\n"
-                "  rold list old-format commands\n";
-
-	} else if (cmd == "rold") {
-            cout << "read old/internal RSSM data files:\n"
-                "  rx   load energy spectra\n"
-                "  rx2  load also spectra for open state\n"
-                "  rx4  load also chopper histograms\n"
-                "  rx8  load spectra for two directions separately\n"
-                "  rxd  load only spectra for two directions\n"
-                "  rxs  load series of energy spectra\n"
-                "  rxs2 load also spectra for open state\n"
-                "  rdc  load dopp, chop from stream\n"
-                "  rda  analyse dopp\n"
-                "  rca  analyse chop\n"
-                "  rstr load from stream\n"
-                "  ra0  load from acquire v0\n"
-                "  ra0t load from acquire v0, two directions separately\n"
-                "  ra0d load from acquire v0, difference between two files\n"
-                "  rc0  load chopper histogram from acquire v0\n"
-                "  rc0d load chopper histogram difference\n"
-                "  rx!  old load from xml v0\n"
-                "  rx!t old load from xml v0, two directions separately\n"
-                "  rx0  load from xml v0\n"
-                "  rx0t load from xml v0, two directions separately\n"
-                "  rh   load from Drochner histogram\n";
-
-	} else if (cmd == "ry") {
-            NRSSM::ReadScan( 5, 0 );
-	} else if (cmd == "ry2") {
-            NRSSM::ReadScan( 5, 1 );
-	} else if (cmd == "ry4") {
-            NRSSM::ReadScan( 5, 3 );
-	} else if (cmd == "ry8") {
-            NRSSM::ReadScan( 5, 7 );
-	} else if (cmd == "ryd") {
-            NRSSM::ReadScan( 5, 12 );
-	} else if (cmd == "rs") {
-            NRSSM::ReadSeries( 5, 0 );
-	} else if (cmd == "rs2") {
-            NRSSM::ReadSeries( 5, 1 );
-
-	} else if (cmd == "rx") {
-            NRSSM::ReadScan( 2, 0 );
-	} else if (cmd == "rx2") {
-            NRSSM::ReadScan( 2, 1 );
-	} else if (cmd == "rx4") {
-            NRSSM::ReadScan( 2, 3 );
-	} else if (cmd == "rx8") {
-            NRSSM::ReadScan( 2, 7 );
-	} else if (cmd == "rxd") {
-            NRSSM::ReadScan( 2, 12 );
-	} else if (cmd == "rxx") {
-            NRSSM::ReadSeries( 2, 0 );
-	} else if (cmd == "rxs2") {
-            NRSSM::ReadSeries( 2, 1 );
-
-	} else if (cmd == "rdc") {
-            NR_Stream::Stream2DoppChop();
-	} else if (cmd == "rstr") {
-            NR_Stream::ReadStream();
-	} else if (cmd == "ra0") {
-            NR_Temp::ReadAcq0( false, false );
-	} else if (cmd == "ra0t") {
-            NR_Temp::ReadAcq0( false, true );
-	} else if (cmd == "ra0d") {
-            NR_Temp::ReadAcq0( true, false );
-	} else if (cmd == "rc0") {
-            NR_Temp::ReadCho0( false );
-	} else if (cmd == "rc0d") {
-            NR_Temp::ReadCho0( true );
-	} else if (cmd == "rx!") {
-            NR_Temp::ReadPreX0( false, false );
-	} else if (cmd == "rx!t") {
-            NR_Temp::ReadPreX0( false, true );
-	} else if (cmd == "rx0") {
-            NR_Temp::ReadPreX01( false );
-	} else if (cmd == "rx0t") {
-            NR_Temp::ReadPreX01( true );
-	} else if (cmd == "rda") {
-            NR_Temp::AnalyseDopp();
-	} else if (cmd == "rca") {
-            NR_Temp::AnalyseChop();
-	} else if (cmd == "rh") {
-            NR_Temp::ReadHisto();
+            if (cmd == "h" || cmd == "?") {
+                cout << "Commands by initial letter:\n"
+                    "  a    add to plot\n"
+                    "  c    curves and fits\n"
+                    "  d    directory of online files\n"
+                    "  e    edit coordinate names and more\n"
+                    "  g    graphics setup\n"
+                    "  f    file operations\n"
+                    "  m    manipulations (reorganisation of data)\n"
+                    "  o    operations (arithmetic operations on data)\n"
+                    "  p    plot\n"
+                    "  r    RSSM\n"
+                    "  t    timing\n"
+                    "  x    execute shell command\n"
+                    "  .    evaluate expression(s)\n"
+                    "  _    special / temporary commands\n"
+                    ;
+
+            } else if (cmd == "c") {
+                cout << "Curves:\n"
+                    "  cc   create\n"
+                    "  cf   fit\n"
+                    "  ci   extract parameter\n"
+                    "  cp   print parameters\n"
+                    "  cx   toggle fixed (also: cx+ cx-)\n"
+                    "  cyli weight y lin\n"
+                    "  cylg weight y log\n"
+                    "Control fitting machinery:\n"
+                    "  csf  set gradient step factor\n"
+                    "  cse  set sqrt of differentiation step\n"
+                    "  csc  set number of calls\n"
+                    "  csp  set print frequency\n"
+                    "  csm  set fit metric\n";
+            } else if (cmd == "cc") {
+                Fitting.Create();
+            } else if (cmd == "cf") {
+                Fitting.Fit();
+            } else if (cmd == "ci") {
+                Fitting.GetPar();
+            } else if (cmd == "cp") {
+                Fitting.ShowPar();
+            } else if (cmd.substr(0,2) == "cx") {
+                Fitting.SetFixed(cmd.substr(2));
+            } else if (cmd == "cyli") {
+                Fitting.SetProperties("yli");
+            } else if (cmd == "cylg") {
+                Fitting.SetProperties("ylg");
+            } else if (cmd.substr(0,2) == "cs") {
+                Fitting.SetSetup(cmd.substr(2));
+
+
+            } else if ( cmd == "d" ) {
+                cout << "Show directory:\n"
+                    "  df   on-line files\n"
+                    "  dz   z-values\n"
+                    "  dp   x|y-values\n"
+                    "  dy   y-values\n"
+                    "  dn   numeric parameters\n"
+                    "  dc   coordinate names and units\n";
+            } else if (cmd == "df") {
+                NEdif::Dir();
+            } else if (cmd == "dz") {
+                NEdif::DirZ();
+            } else if (cmd == "dp" ) {
+                NOperate::Show( "xy" );
+            } else if (cmd == "dy" ) {
+                NOperate::Show( "y" );
+            } else if (cmd == "dn" ) {
+                NEdif::DirNumpar();
+            } else if (cmd == "dc") {
+                NEdif::DirCoord();
+
+            } else if ( cmd == "e" ) {
+                cout << "Edit text parameters:\n"
+                    "  en   numeric parameters\n"
+                    "  ecx  x coordinate name and unit (similarly ecy, ecz0, ..)\n"
+                    "  ed   documentation lines\n";
+            } else if (cmd == "en") {
+                NEdif::EditNumpar();
+            } else if (cmd.substr(0,2) == "ec") {
+                NEdif::EditCoord( cmd.substr(2) );
+            } else if (cmd == "ed") {
+                NEdif::EditDoc();
+
+
+            } else if (cmd == "f") {
+                cout << "File operations:\n"
+                    "  fl   load from disk\n"
+                    "  fs   save to disk\n"
+                    "  fsa  save to disk (old a01 format)\n"
+                    "  fe1  export (scan -> tab-separated line)\n"
+                    "  fe2  export (as tab)\n"
+                    "  fc   copy\n"
+                    "  fdel delete\n"
+                    "  fm   make\n"
+                    "  fr   read in\n"
+                    "  ft   read tab\n"
+                    "  ftt  read multi block tab (blocks begin with z line, end with empty line)\n"
+                    "  fts  read tab from script\n"
+                    "  ftts read multi block tab from script\n";
+            } else if (cmd == "fl") {
+                NFile::Load();
+            } else if (cmd == "fs") {
+                NEdif::Save( "y08" );
+            } else if (cmd == "fsa") {
+                NEdif::Save( "a01" );
+            } else if (cmd == "fe1") {
+                NEdif::Save( "csv" );
+            } else if (cmd == "fe2") {
+                NEdif::Save( "tab" );
+            } else if (cmd == "fc") {
+                OlfCopy();
+            } else if (cmd == "fdel") {
+                OlfDel();
+            } else if (cmd == "fm") {
+                NEdif::MakeGrid();
+            } else if (cmd == "fr") {
+                NEdif::ReadIn();
+            } else if (cmd == "ft") {
+                NEdif::ReadTab( false, false );
+            } else if (cmd == "ftt") {
+                NEdif::ReadTab( true, false );
+            } else if (cmd == "fts") {
+                NEdif::ReadTab( false, true );
+            } else if (cmd == "ftts") {
+                NEdif::ReadTab( true, true );
+
+
+            } else if (cmd == "g") {
+                cout << "Graphic commands:\n"
+                    "  gx   set x range\n"
+                    "  gy   set x range\n"
+                    "  ga, gxa, gya auto-ranges\n"
+                    "  gs   set auxiliary parameters\n"
+                    "  gp   plot to complete .ps file\n"
+                    "  gf   plot to short .psX file\n"
+                    "  gd   dialog (within gnuplot)\n"
+                    "  p    plot\n"
+                    "  pp   plot with new autoranges\n"
+                    "  a    add to plot\n";
+            } else if (cmd == "gx") {
+                NPlot::X.Ask("Set x range");
+            } else if (cmd == "gy") {
+                NPlot::Y.Ask("Set y range");
+            } else if (cmd == "ga") {
+                NPlot::X.R = CRange(1);
+                NPlot::Y.R = CRange(1);
+            } else if (cmd == "gxa") {
+                NPlot::X.R = CRange(1);
+            } else if (cmd == "gya") {
+                NPlot::Y.R = CRange(1);
+            } else if (cmd == "gs") {
+                NPlot::Multiask();
+            } else if (cmd == "gp") {
+                NPlot::Save( true );
+            } else if (cmd == "gf") {
+                NPlot::Save( false );
+            } else if (cmd == "gd") { // graph dialog
+                NPlot::Dialog();
+            } else if (cmd == "p") {
+                NEdif::Plot(0);
+            } else if (cmd == "pp") {
+                NPlot::X.R = CRange(1);
+                NPlot::Y.R = CRange(1);
+                NEdif::Plot(0);
+            } else if (cmd == "a") {
+                NEdif::Plot(1);
+
+
+            } else if (cmd == "m") {
+                cout << "Manipulations on the data structure:\n"
+                    "  md   generic delete\n"
+                    "  mr   generic retain\n"
+                    "  mpd  points: delete\n"
+                    "  mpdb         delete unless in block\n"
+                    "  mpa          average\n"
+                    "  mpb          break into scans\n"
+                    "  mpo          sort\n"
+                    "  mpq          average when x equal\n"
+                    "  mpgw         group y2 according to y0, weighted with y1\n"
+                    "  msd  scans:  delete\n"
+                    "  msa          average (msz preferred)\n"
+                    "  msg          simplify -> grid\n"
+                    "  msb          break into files\n"
+                    "  ms*          spawn scans\n"
+                    "  msx          z_max <-> x\n"
+                    "  msz          z manipulation\n"
+                    "  mso          sort\n"
+                    "  msoz         sort by z-values\n"
+                    "  mzx          exchange / rotate z coordinates\n"
+                    "  mz-          delete z coordinate\n"
+                    "  mfj  files:  merge (\"join\")\n"
+                    "  mfjp files:  merge pointwise\n"
+                    "  mhm  histogram make\n";
+            } else if (cmd == "md") {
+                NOperate::Select(1);
+            } else if (cmd == "mr") {
+                NOperate::Select(0);
+            } else if (cmd == "mpd") {
+                NManip::PtsDelete();
+            } else if (cmd == "mpdb") {
+                NManip::PtsRetainEqui();
+            } else if (cmd == "mpa") {
+                NManip::PtsAvge();
+            } else if (cmd == "mpb") {
+                NManip::PtsBreak();
+            } else if (cmd == "mpgw") {
+                NManip::PtsGroupWeighted();
+            } else if (cmd == "mpo") {
+                NManip::PtsSort();
+            } else if (cmd == "mpq") {
+                NManip::PtsAvgeEq();
+            } else if (cmd == "msd") {
+                NManip::ScaDelete();
+            } else if (cmd == "msa") {
+                NManip::ScaAvge();
+            } else if (cmd == "msg") {
+                NManip::ScaGridSimplify();
+            } else if (cmd == "msb") {
+                NManip::ScaBreak();
+            } else if (cmd == "ms*") {
+                NManip::ScaSpawn();
+            } else if (cmd == "msx") {
+                NManip::ScaExch();
+            } else if (cmd == "mzx") {
+                NManip::ZExchange();
+            } else if (cmd == "mz-") {
+                NManip::ZDelete();
+            } else if (cmd == "msz") {
+                NManip::ScaZ();
+            } else if (cmd == "mso") {
+                NManip::ScaSortByExpr();
+            } else if (cmd == "msoz") {
+                NManip::ScaSortByZ();
+            } else if (cmd == "mfj") {
+                NManip::FilMerge();
+            } else if (cmd == "mfjp") {
+                NManip::FilMergePointwise();
+            } else if (cmd == "mhm") {
+                NManip::HistoMake();
+
+
+            } else if (cmd == "o") {
+                cout << "Operate:\n"
+                    "  ox       on x\n"
+                    "  oy       on y\n"
+                    "  oz0,...  on z0,...\n"
+                    "  oz+,...  add new z value\n"
+                    "  op0,...  on p0,... (fit parameters)\n"
+                    "  of       functional operation\n"
+                    "  oi       integral operation through expression\n"
+                    "  oixy     choose two columns, save them as x and y\n"
+                    "  oio      integral operation through menu\n"
+                    "  oevv     calculate eigenvalues and eigenvectors\n"
+                    "  occ      calculate correlations (y vs y')\n"
+                    "  ocd      differentiate correlations\n"
+                    "  oad      average differences excluding values <0\n";
+            } else if (cmd == "oz+") {
+                NOperate::NewZ();
+            } else if (cmd[0]=='o' && strchr("xyz", cmd[1])) {
+                NOperate::Pointwise(cmd.substr(1));
+            } else if (cmd.substr(0,2) == "op") {
+                Fitting.OprPar(cmd.substr(1));
+
+            } else if (cmd.substr(0,2) == "of") {
+                NFunctional::Opr(cmd.substr(1));
+            } else if (cmd == "oi") {
+                NOperate::Integral();
+            } else if (cmd == "oixy") {
+                NOperate::IntXY();
+            } else if (cmd == "oio") {
+                NIntOld::Opr();
+            } else if (cmd == "oevv") {
+                NOperate::Eigen();
+            } else if (cmd == "occ") {
+                NOperate::CalcCorrel();
+            } else if (cmd == "ocd") {
+                NOperate::CalcCorrelDiff();
+            } else if (cmd == "oad") {
+                NOperate::CalcAvgeDiff();
+
+
+            } else if (cmd == "t") {
+                double time_total =
+                    ((double) (clock() - clock_start)) / CLOCKS_PER_SEC;
+                printf( "total time now %g\n", time_total );
+
+            } else if (cmd == "r") {
+                cout << "read RSSM data:\n"
+                    "  ry   load energy spectra\n"
+                    "  ry2  load also spectra for open state\n"
+                    "  ry4  load also chopper histograms\n"
+                    "  ry8  load spectra for two directions separately\n"
+                    "  ryd  load only spectra for two directions\n"
+                    "  rs   load series of energy spectra\n"
+                    "  rs2  load also spectra for open state\n"
+                    "  rold list old-format commands\n";
+
+            } else if (cmd == "rold") {
+                cout << "read old/internal RSSM data files:\n"
+                    "  rx   load energy spectra\n"
+                    "  rx2  load also spectra for open state\n"
+                    "  rx4  load also chopper histograms\n"
+                    "  rx8  load spectra for two directions separately\n"
+                    "  rxd  load only spectra for two directions\n"
+                    "  rxs  load series of energy spectra\n"
+                    "  rxs2 load also spectra for open state\n"
+                    "  rdc  load dopp, chop from stream\n"
+                    "  rda  analyse dopp\n"
+                    "  rca  analyse chop\n"
+                    "  rstr load from stream\n"
+                    "  ra0  load from acquire v0\n"
+                    "  ra0t load from acquire v0, two directions separately\n"
+                    "  ra0d load from acquire v0, difference between two files\n"
+                    "  rc0  load chopper histogram from acquire v0\n"
+                    "  rc0d load chopper histogram difference\n"
+                    "  rx!  old load from xml v0\n"
+                    "  rx!t old load from xml v0, two directions separately\n"
+                    "  rx0  load from xml v0\n"
+                    "  rx0t load from xml v0, two directions separately\n"
+                    "  rh   load from Drochner histogram\n";
+
+            } else if (cmd == "ry") {
+                NRSSM::ReadScan( 5, 0 );
+            } else if (cmd == "ry2") {
+                NRSSM::ReadScan( 5, 1 );
+            } else if (cmd == "ry4") {
+                NRSSM::ReadScan( 5, 3 );
+            } else if (cmd == "ry8") {
+                NRSSM::ReadScan( 5, 7 );
+            } else if (cmd == "ryd") {
+                NRSSM::ReadScan( 5, 12 );
+            } else if (cmd == "rs") {
+                NRSSM::ReadSeries( 5, 0 );
+            } else if (cmd == "rs2") {
+                NRSSM::ReadSeries( 5, 1 );
+
+            } else if (cmd == "rx") {
+                NRSSM::ReadScan( 2, 0 );
+            } else if (cmd == "rx2") {
+                NRSSM::ReadScan( 2, 1 );
+            } else if (cmd == "rx4") {
+                NRSSM::ReadScan( 2, 3 );
+            } else if (cmd == "rx8") {
+                NRSSM::ReadScan( 2, 7 );
+            } else if (cmd == "rxd") {
+                NRSSM::ReadScan( 2, 12 );
+            } else if (cmd == "rxx") {
+                NRSSM::ReadSeries( 2, 0 );
+            } else if (cmd == "rxs2") {
+                NRSSM::ReadSeries( 2, 1 );
+
+            } else if (cmd == "rdc") {
+                NR_Stream::Stream2DoppChop();
+            } else if (cmd == "rstr") {
+                NR_Stream::ReadStream();
+            } else if (cmd == "ra0") {
+                NR_Temp::ReadAcq0( false, false );
+            } else if (cmd == "ra0t") {
+                NR_Temp::ReadAcq0( false, true );
+            } else if (cmd == "ra0d") {
+                NR_Temp::ReadAcq0( true, false );
+            } else if (cmd == "rc0") {
+                NR_Temp::ReadCho0( false );
+            } else if (cmd == "rc0d") {
+                NR_Temp::ReadCho0( true );
+            } else if (cmd == "rx!") {
+                NR_Temp::ReadPreX0( false, false );
+            } else if (cmd == "rx!t") {
+                NR_Temp::ReadPreX0( false, true );
+            } else if (cmd == "rx0") {
+                NR_Temp::ReadPreX01( false );
+            } else if (cmd == "rx0t") {
+                NR_Temp::ReadPreX01( true );
+            } else if (cmd == "rda") {
+                NR_Temp::AnalyseDopp();
+            } else if (cmd == "rca") {
+                NR_Temp::AnalyseChop();
+            } else if (cmd == "rh") {
+                NR_Temp::ReadHisto();
 
 
 //		} else if (cmd == "t") {
@@ -482,41 +483,44 @@ int main()
 //			OloAdd(&olf);
  
 
-        } else if (cmd == "x") {
-            string sh_cmd;
-            sh_cmd = sask("shell command");		
-            system( sh_cmd.c_str() );
+            } else if (cmd == "x") {
+                string sh_cmd;
+                sh_cmd = sask("shell command");		
+                system( sh_cmd.c_str() );
 
 
-        } else if (cmd == ".") {
-            NCalc::Calculator();
+            } else if (cmd == ".") {
+                NCalc::Calculator();
            
 
-        } else if (cmd == "_") {
-            cout << "Special programs\n"
-                "_fc   cosine Fourier transform\n"
-                "_ps   power spectrum\n"
-                "_as   alefeld-schelten\n";
+            } else if (cmd == "_") {
+                cout << "Special programs\n"
+                    "_fc   cosine Fourier transform\n"
+                    "_ps   power spectrum\n"
+                    "_as   alefeld-schelten\n";
 
-//      } else if (cmd == "_ps") {
-// 		NFFT::PowerSpectrum();
+//          } else if (cmd == "_ps") {
+// 	        NFFT::PowerSpectrum();
 
-        } else if (cmd == "_fc") {
-            NSpecial::FourierCosine();
+            } else if (cmd == "_fc") {
+                NSpecial::FourierCosine();
 
-        } else if (cmd == "_as") {
-            NSpecial::SimulateRssm();
+            } else if (cmd == "_as") {
+                NSpecial::SimulateRssm();
 
-        } else if ( cmd == "qui" || cmd=="quit" ) {
-            NPlot::Close();
-            exit(0);
+            } else if ( cmd == "qui" || cmd=="quit" ) {
+                NPlot::Close();
+                exit(0);
 
 
-        } else {
-            printf("! invalid command [%s]\n", cmd.c_str());
-            mystd::bell();
-        }
+            } else {
+                printf("! invalid command [%s]\n", cmd.c_str());
+                mystd::bell();
+            }
 
-        overwrite = 0;
-    }
+            overwrite = 0;
+        } catch( string& s ) {
+            cerr << s << endl;
+        }
+    } // endless loop
 }