protected boolean save(File file) {
    boolean		result;
    BufferedWriter	writer;
    int			i;
    int			n;
    Object		cell;
    
    writer = null;
    try {
      result = true;
      writer = new BufferedWriter(new FileWriter(file));
      // header
      for (n = 0; n < m_Model.getColumnCount(); n++) {
	if (n > 0)
	  writer.write(",");
	writer.write(Utils.quote(m_Model.getColumnName(n)));
      }
      writer.newLine();
      // data
      for (i = 0; i < m_Model.getRowCount(); i++) {
	for (n = 0; n < m_Model.getColumnCount(); n++) {
	  if (n > 0)
	    writer.write(",");
	  cell = m_Model.getValueAt(i, n);
	  if (cell != null)
	    writer.write(Utils.quote(cell.toString()));
	}
	writer.newLine();
      }
      writer.flush();
    }
    catch (Exception e) {
      System.err.println("Failed to write content to " + file + "!");
      e.printStackTrace();
      result = false;
    }
    finally {
      if (writer != null) {
	try {
	  writer.close();
	}
	catch (Exception e) {
	  // ignored
	}
      }
    }
    
    return result;
  }