Update copyright date; remove old CVS keyword
[ctsim.git] / libctsim / array2dfile.cpp
index ca45d8b820eaea485272a6e6f824243c01ac0b89..3a75f286bb4a53db8531671f75cad7869208fed0 100644 (file)
@@ -1,15 +1,13 @@
 /*****************************************************************************
 ** FILE IDENTIFICATION
 **
-**     Name:         array2dfile.cpp
+**      Name:         array2dfile.cpp
 **      Purpose:      2-dimension array file class
-**     Programmer:   Kevin Rosenberg
-**     Date Started: June 2000
+**      Programmer:   Kevin Rosenberg
+**      Date Started: June 2000
 **
 **  This is part of the CTSim program
-**  Copyright (C) 1983-2000 Kevin Rosenberg
-**
-**  $Id: array2dfile.cpp,v 1.22 2000/12/29 19:30:08 kevin Exp $
+**  Copyright (c) 1983-2009 Kevin Rosenberg
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
 ******************************************************************************/
 
 #include "array2dfile.h"
-#include <ctime>\r
-#ifdef MSVC\r
-typedef long off_t;\r
+#include <ctime>
+#ifdef MSVC
+typedef long off_t;
 #endif
 
+#include <sstream>
 
 const kuint16 Array2dFile::m_signature = ('I'*256+'F');
 
@@ -56,7 +55,7 @@ Array2dFileLabel::init (void)
   m_second = lt->tm_sec;
 }
 
-Array2dFileLabel::Array2dFileLabel() 
+Array2dFileLabel::Array2dFileLabel()
 {
   init();
 }
@@ -65,7 +64,7 @@ Array2dFileLabel::Array2dFileLabel(const char* const str, double ctime)
 : m_strLabel (str)
 {
   init();
-  
+
   m_labelType = L_USER;
   m_calcTime = ctime;
 }
@@ -74,7 +73,7 @@ Array2dFileLabel::Array2dFileLabel(const int type, const char* const str, double
 :  m_strLabel (str)
 {
   init();
-  
+
   m_labelType = type;
   m_calcTime = ctime;
 }
@@ -83,7 +82,7 @@ Array2dFileLabel::~Array2dFileLabel()
 {
 }
 
-void 
+void
 Array2dFileLabel::setDateTime (int year, int month, int day, int hour, int minute, int second)
 {
   m_year = year;
@@ -94,7 +93,7 @@ Array2dFileLabel::setDateTime (int year, int month, int day, int hour, int minut
   m_second = second;
 }
 
-void 
+void
 Array2dFileLabel::getDateTime (int& year, int& month, int& day, int& hour, int& minute, int& second) const
 {
   year = m_year;
@@ -105,11 +104,11 @@ Array2dFileLabel::getDateTime (int& year, int& month, int& day, int& hour, int&
   second = m_second;
 }
 
-const std::string& 
+const std::string&
 Array2dFileLabel::getDateString (void) const
 {
-  char szDate [128];\r
-  snprintf (szDate, sizeof(szDate), "%2d/%02d/%4d %02d:%02d:%02d",\r
+  char szDate [128];
+  snprintf (szDate, sizeof(szDate), "%2d/%02d/%4d %02d:%02d:%02d",
     m_month + 1, m_day, m_year + 1900, m_hour, m_minute, m_second);
   m_strDate = szDate;
   return m_strDate;
@@ -133,7 +132,7 @@ Array2dFileLabel::operator= (const Array2dFileLabel& rhs)
   m_strLabel = rhs.m_strLabel;
   m_year = rhs.m_year; m_month = rhs.m_month; m_day = rhs.m_day;
   m_hour = rhs.m_hour; m_minute = rhs.m_minute; m_second = rhs.m_second;
-  
+
   return (*this);
 }
 
@@ -154,6 +153,36 @@ Array2dFileLabel::print (std::ostream& os) const
   }
 }
 
+void
+Array2dFileLabel::printBrief (std::ostream& os) const
+{
+  if (m_labelType == L_HISTORY) {
+    os << "History (";
+    if (m_calcTime > 0)
+      os << m_calcTime << " secs, ";
+    os << getDateString() << "): " << m_strLabel << std::endl;
+  } else if (m_labelType == L_USER) {
+    os << "Note (" <<  getDateString() << "): " << m_strLabel << std::endl;
+  } else {
+    os << "Unknown (" << getDateString() << "): " << m_strLabel << std::endl;
+  }
+}
+
+void
+Array2dFileLabel::printBrief (std::ostringstream& os) const
+{
+  if (m_labelType == L_HISTORY) {
+    os << "History (";
+    if (m_calcTime > 0)
+      os << m_calcTime << " secs, ";
+    os << getDateString().c_str() << "): " << m_strLabel.c_str() << "\n";
+  } else if (m_labelType == L_USER) {
+    os << "Note (" <<  getDateString() << "): " << m_strLabel << "\n";
+  } else {
+    os << "Unknown (" << getDateString() << "): " << m_strLabel << "\n";
+  }
+}
+
 
 ///////////////////////////////////////////////////////////////////////////
 // CLASS IMPLEMENTATION
@@ -186,8 +215,8 @@ Array2dFile::init (void)
 {
   m_pixelSize = 0;
   m_pixelFormat = PIXEL_INVALID;
-  m_arrayData = NULL;\r
-  m_imaginaryArrayData = NULL;\r
+  m_arrayData = NULL;
+  m_imaginaryArrayData = NULL;
   m_dataType = DATA_TYPE_INVALID;
   m_nx = 0;
   m_ny = 0;
@@ -205,7 +234,7 @@ void
 Array2dFile::setArraySize (int x, int y, int pixelSize, int pixelFormat, int dataType)
 {
   m_pixelSize = pixelSize;
-  m_pixelFormat = pixelFormat;\r
+  m_pixelFormat = pixelFormat;
   m_dataType = dataType;
   setArraySize (x, y);
 }
@@ -216,78 +245,78 @@ Array2dFile::setArraySize (int x, int y)
   m_nx = x;
   m_ny = y;
   allocArrays ();
-}\r
-\r
-bool\r
-Array2dFile::reallocComplexToReal ()\r
-{\r
-  if (m_dataType != DATA_TYPE_COMPLEX)\r
-    return false;\r
-\r
-  freeArray (m_imaginaryArrayData);\r
-  m_dataType = DATA_TYPE_REAL;\r
-\r
-  return true;\r
-}\r
-\r
-\r
-bool\r
-Array2dFile::reallocRealToComplex ()\r
-{\r
-  if (m_dataType != DATA_TYPE_REAL)\r
-    return false;\r
-\r
-  allocArray (m_imaginaryArrayData);\r
-  m_dataType = DATA_TYPE_COMPLEX;\r
-\r
-  return true;\r
-}\r
-\r
-
-
-void 
+}
+
+bool
+Array2dFile::reallocComplexToReal ()
+{
+  if (m_dataType != DATA_TYPE_COMPLEX)
+    return false;
+
+  freeArray (m_imaginaryArrayData);
+  m_dataType = DATA_TYPE_REAL;
+
+  return true;
+}
+
+
+bool
+Array2dFile::reallocRealToComplex ()
+{
+  if (m_dataType != DATA_TYPE_REAL)
+    return false;
+
+  allocArray (m_imaginaryArrayData);
+  m_dataType = DATA_TYPE_COMPLEX;
+
+  return true;
+}
+
+
+
+void
 Array2dFile::allocArrays ()
 {
-  if (m_arrayData) \r
-    freeArray (m_arrayData);\r
-  if (m_imaginaryArrayData)\r
-    freeArray (m_imaginaryArrayData);\r
-\r
-  allocArray (m_arrayData);\r
-  if (m_dataType == DATA_TYPE_COMPLEX)\r
-    allocArray (m_imaginaryArrayData);\r
-}\r
-\r
-void\r
-Array2dFile::allocArray (unsigned char**& rppData)\r
-{\r
+  if (m_arrayData)
+    freeArray (m_arrayData);
+  if (m_imaginaryArrayData)
+    freeArray (m_imaginaryArrayData);
+
+  allocArray (m_arrayData);
+  if (m_dataType == DATA_TYPE_COMPLEX)
+    allocArray (m_imaginaryArrayData);
+}
+
+void
+Array2dFile::allocArray (unsigned char**& rppData)
+{
   m_arraySize = m_nx * m_ny * m_pixelSize;
-  rppData = new unsigned char* [m_nx];\r
+  rppData = new unsigned char* [m_nx];
   int columnBytes = m_ny * m_pixelSize;
   for (unsigned int i = 0; i < m_nx; i++)
-    rppData[i] = new unsigned char [columnBytes];\r
+    rppData[i] = new unsigned char [columnBytes];
 }
 
-void 
+void
 Array2dFile::freeArrays ()
 {
-  if (m_arrayData) \r
-    freeArray (m_arrayData);\r
-  \r
-  if (m_imaginaryArrayData) \r
-    freeArray (m_imaginaryArrayData);\r
-  \r
-}\r
-\r
-void\r
-Array2dFile::freeArray (unsigned char**& rppData)\r
-{\r
-   for (unsigned int i = 0; i < m_nx; i++)\r
-      delete rppData[i];\r
-    delete rppData;\r
-    rppData = NULL;\r
-}\r
-\r
+  if (m_arrayData)
+    freeArray (m_arrayData);
+
+  if (m_imaginaryArrayData)
+    freeArray (m_imaginaryArrayData);
+
+}
+
+void
+Array2dFile::freeArray (unsigned char**& rppData)
+{
+   for (unsigned int i = 0; i < m_nx; i++)
+      delete rppData[i];
+    delete rppData;
+    rppData = NULL;
+}
+
 
 bool
 Array2dFile::fileWrite (const std::string& filename)
@@ -299,7 +328,7 @@ bool
 Array2dFile::fileWrite (const char* const filename)
 {
   m_filename = filename;
-  
+
   frnetorderstream fs (m_filename.c_str(), std::ios::out | std::ios::in | std::ios::trunc | std::ios::binary);
   if (fs.fail()) {
     sys_error (ERR_WARNING, "Error opening file %s for writing [fileCreate]", m_filename.c_str());
@@ -307,13 +336,13 @@ Array2dFile::fileWrite (const char* const filename)
   }
   if (! headerWrite(fs))
     return false;
-  
+
   if (! arrayDataWrite (fs))
     return false;
-  
+
   if (! labelsWrite (fs))
     return false;
-  
+
   return true;
 }
 
@@ -327,28 +356,25 @@ bool
 Array2dFile::fileRead (const char* const filename)
 {
   m_filename = filename;
-  
-#ifdef MSVC\r
-  frnetorderstream fs (m_filename.c_str(), std::ios::out | std::ios::in | std::ios::binary);\r
-#else\r
-  frnetorderstream fs (m_filename.c_str(), std::ios::out | std::ios::in | std::ios::binary | std::ios::nocreate);\r
-#endif\r
+
+  frnetorderstream fs (m_filename.c_str(), std::ios::out | std::ios::in | std::ios::binary);
+
   if (fs.fail()) {
     sys_error (ERR_WARNING, "Unable to open file %s [fileRead]", m_filename.c_str());
     return false;
   }
-  
+
   if (! headerRead(fs))
     return false;
-  
+
   allocArrays ();
-  
+
   if (! arrayDataRead(fs))
     return false;;
-  
+
   if (! labelsRead (fs))
     return false;
-  
+
   return true;
 }
 
@@ -360,7 +386,7 @@ Array2dFile::setAxisIncrement (double incX, double incY)
   m_axisIncrementY = incY;
 }
 
-void 
+void
 Array2dFile::setAxisExtent (double minX, double maxX, double minY, double maxY)
 {
   m_axisExtentKnown = true;
@@ -377,17 +403,17 @@ Array2dFile::headerRead (frnetorderstream& fs)
     sys_error (ERR_WARNING, "Tried to read header with file closed [headerRead]");
     return false;
   }
-  
+
   fs.seekg (0);
   kuint16 file_signature;
-  
+
   fs.readInt16 (m_headersize);
   fs.readInt16 (file_signature);
   fs.readInt16 (m_pixelFormat);
   fs.readInt16 (m_pixelSize);
   fs.readInt16 (m_numFileLabels);
   fs.readInt32 (m_nx);
-  fs.readInt32 (m_ny);\r
+  fs.readInt32 (m_ny);
   fs.readInt16 (m_dataType);
   fs.readInt16 (m_axisIncrementKnown);
   fs.readFloat64 (m_axisIncrementX);
@@ -399,7 +425,7 @@ Array2dFile::headerRead (frnetorderstream& fs)
   fs.readFloat64 (m_maxY);
   fs.readFloat64 (m_offsetPV);
   fs.readFloat64 (m_scalePV);
-  
+
   int read_m_headersize = fs.tellg();
   if (read_m_headersize != m_headersize) {
     sys_error (ERR_WARNING, "Read m_headersize %d != file m_headersize %d", read_m_headersize, m_headersize);
@@ -409,8 +435,8 @@ Array2dFile::headerRead (frnetorderstream& fs)
     sys_error (ERR_WARNING, "File signature %d != true signature %d", file_signature, m_signature);
     return false;
   }
-  
-  return true;
+
+  return ! fs.fail();
 }
 
 
@@ -421,9 +447,9 @@ Array2dFile::headerWrite (frnetorderstream& fs)
     sys_error (ERR_WARNING, "Tried to write header with ! fs");
     return false;
   }
-  
+
   m_numFileLabels = m_labels.size();
-  
+
   fs.seekp (0);
   fs.writeInt16 (m_headersize);
   fs.writeInt16 (m_signature);
@@ -431,7 +457,7 @@ Array2dFile::headerWrite (frnetorderstream& fs)
   fs.writeInt16 (m_pixelSize);
   fs.writeInt16 (m_numFileLabels);
   fs.writeInt32 (m_nx);
-  fs.writeInt32 (m_ny);\r
+  fs.writeInt32 (m_ny);
   fs.writeInt16 (m_dataType);
   fs.writeInt16 (m_axisIncrementKnown);
   fs.writeFloat64 (m_axisIncrementX);
@@ -443,12 +469,12 @@ Array2dFile::headerWrite (frnetorderstream& fs)
   fs.writeFloat64 (m_maxY);
   fs.writeFloat64 (m_offsetPV);
   fs.writeFloat64 (m_scalePV);
-  
+
   m_headersize = static_cast<kuint16>(fs.tellp());
   fs.seekp (0);
   fs.writeInt16 (m_headersize);
-  
-  return true;
+
+  return ! fs.fail();
 }
 
 
@@ -459,37 +485,37 @@ Array2dFile::arrayDataWrite (frnetorderstream& fs)
     sys_error (ERR_WARNING, "Tried to arrayDataWrite with !fs");
     return false;
   }
-  
-  if (! m_arrayData) 
+
+  if (! m_arrayData)
     return false;
-  
+
   fs.seekp (m_headersize);
   int columnSize = m_ny * m_pixelSize;
-  for (unsigned int ix = 0; ix < m_nx; ix++) {\r
-    unsigned char* ptrColumn = m_arrayData[ix];\r
-    if (NativeBigEndian()) {\r
-      for (unsigned int iy = 0; iy < m_ny; iy++) {\r
-        ConvertReverseNetworkOrder (ptrColumn, m_pixelSize);\r
-        fs.write (reinterpret_cast<const char*>(ptrColumn), m_pixelSize);\r
-        ptrColumn += m_pixelSize;\r
-      }\r
-    } else \r
-      fs.write (reinterpret_cast<const char*>(ptrColumn), columnSize);\r
-  }\r
-  if (m_dataType == DATA_TYPE_COMPLEX) {\r
-    for (unsigned int ix = 0; ix < m_nx; ix++) {\r
-      unsigned char* ptrColumn = m_imaginaryArrayData[ix];\r
-      if (NativeBigEndian()) {\r
-        for (unsigned int iy = 0; iy < m_ny; iy++) {\r
-          ConvertReverseNetworkOrder (ptrColumn, m_pixelSize);\r
-          fs.write (reinterpret_cast<const char*>(ptrColumn), m_pixelSize);\r
-          ptrColumn += m_pixelSize;\r
-        }\r
-      } else \r
-        fs.write (reinterpret_cast<const char*>(ptrColumn), columnSize);\r
-    }\r
-  }\r
-  
+  for (unsigned int ix = 0; ix < m_nx; ix++) {
+    unsigned char* ptrColumn = m_arrayData[ix];
+    if (NativeBigEndian()) {
+      for (unsigned int iy = 0; iy < m_ny; iy++) {
+        ConvertReverseNetworkOrder (ptrColumn, m_pixelSize);
+        fs.write (reinterpret_cast<const char*>(ptrColumn), m_pixelSize);
+        ptrColumn += m_pixelSize;
+      }
+    } else
+      fs.write (reinterpret_cast<const char*>(ptrColumn), columnSize);
+  }
+  if (m_dataType == DATA_TYPE_COMPLEX) {
+    for (unsigned int ix = 0; ix < m_nx; ix++) {
+      unsigned char* ptrColumn = m_imaginaryArrayData[ix];
+      if (NativeBigEndian()) {
+        for (unsigned int iy = 0; iy < m_ny; iy++) {
+          ConvertReverseNetworkOrder (ptrColumn, m_pixelSize);
+          fs.write (reinterpret_cast<const char*>(ptrColumn), m_pixelSize);
+          ptrColumn += m_pixelSize;
+        }
+      } else
+        fs.write (reinterpret_cast<const char*>(ptrColumn), columnSize);
+    }
+  }
+
   return true;
 }
 
@@ -501,37 +527,37 @@ Array2dFile::arrayDataRead (frnetorderstream& fs)
     sys_error (ERR_WARNING, "Tried to arrayDataRead with ! fs");
     return false;
   }
-  
+
   if (! m_arrayData)
     return false;
-  
+
   fs.seekg (m_headersize);
   int columnSize = m_ny * m_pixelSize;
-  for (unsigned int ix = 0; ix < m_nx; ix++) {\r
-    unsigned char* ptrColumn = m_arrayData[ix];\r
-    if (NativeBigEndian()) {\r
-      for (unsigned int iy = 0; iy < m_ny; iy++) {\r
-        fs.read (reinterpret_cast<char*>(ptrColumn), m_pixelSize);\r
-        ConvertReverseNetworkOrder (ptrColumn, m_pixelSize);\r
-        ptrColumn += m_pixelSize;\r
-      } \r
-    } else\r
-      fs.read (reinterpret_cast<char*>(ptrColumn), columnSize);\r
-  }\r
-  if (m_dataType == DATA_TYPE_COMPLEX) {\r
-    for (unsigned int ix = 0; ix < m_nx; ix++) {\r
-      unsigned char* ptrColumn = m_imaginaryArrayData[ix];\r
-      if (NativeBigEndian()) {\r
-        for (unsigned int iy = 0; iy < m_ny; iy++) {\r
-          fs.read (reinterpret_cast<char*>(ptrColumn), m_pixelSize);\r
-          ConvertReverseNetworkOrder (ptrColumn, m_pixelSize);\r
-          ptrColumn += m_pixelSize;\r
-        } \r
-      } else\r
-        fs.read (reinterpret_cast<char*>(ptrColumn), columnSize);\r
-    }\r
-  }\r
-  
+  for (unsigned int ix = 0; ix < m_nx; ix++) {
+    unsigned char* ptrColumn = m_arrayData[ix];
+    if (NativeBigEndian()) {
+      for (unsigned int iy = 0; iy < m_ny; iy++) {
+        fs.read (reinterpret_cast<char*>(ptrColumn), m_pixelSize);
+        ConvertReverseNetworkOrder (ptrColumn, m_pixelSize);
+        ptrColumn += m_pixelSize;
+      }
+    } else
+      fs.read (reinterpret_cast<char*>(ptrColumn), columnSize);
+  }
+  if (m_dataType == DATA_TYPE_COMPLEX) {
+    for (unsigned int ix = 0; ix < m_nx; ix++) {
+      unsigned char* ptrColumn = m_imaginaryArrayData[ix];
+      if (NativeBigEndian()) {
+        for (unsigned int iy = 0; iy < m_ny; iy++) {
+          fs.read (reinterpret_cast<char*>(ptrColumn), m_pixelSize);
+          ConvertReverseNetworkOrder (ptrColumn, m_pixelSize);
+          ptrColumn += m_pixelSize;
+        }
+      } else
+        fs.read (reinterpret_cast<char*>(ptrColumn), columnSize);
+    }
+  }
+
   return true;
 }
 
@@ -542,11 +568,11 @@ Array2dFile::labelsRead (frnetorderstream& fs)
   fs.seekg (pos);
   if (fs.fail())
     return false;
-  
+
   for (int i = 0; i < m_numFileLabels; i++) {
     kuint16 labelType, year, month, day, hour, minute, second;
     kfloat64 calcTime;
-    
+
     fs.readInt16 (labelType);
     fs.readInt16 (year);
     fs.readInt16 (month);
@@ -555,20 +581,20 @@ Array2dFile::labelsRead (frnetorderstream& fs)
     fs.readInt16 (minute);
     fs.readInt16 (second);
     fs.readFloat64 (calcTime);
-    
+
     kuint16 strLength;
     fs.readInt16 (strLength);
     char* pszLabelStr = new char [strLength+1];
     fs.read (pszLabelStr, strLength);
     pszLabelStr[strLength] = 0;
-    
+
     Array2dFileLabel* pLabel = new Array2dFileLabel (labelType, pszLabelStr, calcTime);
-    delete pszLabelStr;\r
-    \r
+    delete pszLabelStr;
+
     pLabel->setDateTime (year, month, day, hour, minute, second);
-    m_labels.push_back (pLabel);\r
+    m_labels.push_back (pLabel);
   }
-  
+
   return true;
 }
 
@@ -577,7 +603,7 @@ Array2dFile::labelsWrite (frnetorderstream& fs)
 {
   off_t pos = m_headersize + m_arraySize;
   fs.seekp (pos);
-  
+
   for (constLabelIterator l = m_labels.begin(); l != m_labels.end(); l++) {
     const Array2dFileLabel& label = **l;
     kuint16 labelType = label.getLabelType();
@@ -585,11 +611,11 @@ Array2dFile::labelsWrite (frnetorderstream& fs)
     const char* const labelString = label.getLabelString().c_str();
     int year, month, day, hour, minute, second;
     kuint16 yearBuf, monthBuf, dayBuf, hourBuf, minuteBuf, secondBuf;
-    
+
     label.getDateTime (year, month, day, hour, minute, second);
     yearBuf = year; monthBuf = month; dayBuf = day;
     hourBuf = hour; minuteBuf = minute; secondBuf = second;
-    
+
     fs.writeInt16 (labelType);
     fs.writeInt16 (yearBuf);
     fs.writeInt16 (monthBuf);
@@ -602,7 +628,7 @@ Array2dFile::labelsWrite (frnetorderstream& fs)
     fs.writeInt16 (strlength);
     fs.write (labelString, strlength);
   }
-  
+
   return true;
 }
 
@@ -617,7 +643,7 @@ void
 Array2dFile::labelAdd (int type, const char* const lstr, double calc_time)
 {
   Array2dFileLabel label (type, lstr, calc_time);
-  
+
   labelAdd (label);
 }
 
@@ -626,12 +652,12 @@ void
 Array2dFile::labelAdd (const Array2dFileLabel& label)
 {
   Array2dFileLabel* pLabel = new Array2dFileLabel(label);
-  
+
   m_labels.push_back (pLabel);
 }
 
 void
-Array2dFile::labelsCopy (Array2dFile& copyFile, const char* const pszId)
+Array2dFile::labelsCopy (const Array2dFile& copyFile, const char* const pszId)
 {
   std::string id;
   if (pszId)
@@ -645,19 +671,19 @@ Array2dFile::labelsCopy (Array2dFile& copyFile, const char* const pszId)
   }
 }
 
-void 
+void
 Array2dFile::arrayDataClear (void)
 {
-  if (m_arrayData) {\r
-    int columnSize = m_ny * m_pixelSize;\r
-    for (unsigned int ix = 0; ix < m_nx; ix++)\r
-      memset (m_arrayData[ix], 0, columnSize);\r
-  }\r
-  if (m_imaginaryArrayData) {\r
-    int columnSize = m_ny * m_pixelSize;\r
-    for (unsigned int ix = 0; ix < m_nx; ix++)\r
-      memset (m_arrayData[ix], 0, columnSize);\r
-  }\r
+  if (m_arrayData) {
+    int columnSize = m_ny * m_pixelSize;
+    for (unsigned int ix = 0; ix < m_nx; ix++)
+      memset (m_arrayData[ix], 0, columnSize);
+  }
+  if (m_imaginaryArrayData) {
+    int columnSize = m_ny * m_pixelSize;
+    for (unsigned int ix = 0; ix < m_nx; ix++)
+      memset (m_arrayData[ix], 0, columnSize);
+  }
 }
 
 void
@@ -665,12 +691,32 @@ Array2dFile::printLabels (std::ostream& os) const
 {
   for (constLabelIterator l = m_labels.begin(); l != m_labels.end(); l++) {
     const Array2dFileLabel& label = **l;
-    
+
     label.print (os);
     os << std::endl;
   }
 }
 
+void
+Array2dFile::printLabelsBrief (std::ostream& os) const
+{
+  for (constLabelIterator l = m_labels.begin(); l != m_labels.end(); l++) {
+    const Array2dFileLabel& label = **l;
+
+    label.printBrief (os);
+  }
+}
+
+void
+Array2dFile::printLabelsBrief (std::ostringstream& os) const
+{
+  for (constLabelIterator l = m_labels.begin(); l != m_labels.end(); l++) {
+    const Array2dFileLabel& label = **l;
+
+    label.printBrief (os);
+  }
+}
+
 
 const Array2dFileLabel&
 Array2dFile::labelGet (int i) const