editnc.C

Go to the documentation of this file.
00001 /* Gnome gxsm - Gnome X Scanning Microscopy
00002  * universal STM/AFM/SARLS/SPALEED/... controlling and
00003  * data analysis software
00004  * 
00005  * Gxsm Plugin Name: editnc.C
00006  * ========================================
00007  * 
00008  * Copyright (C) 1999 The Free Software Foundation
00009  *
00010  * Authors: Percy Zahl <zahl@fkp.uni-hannover.de>
00011  * additional features: Andreas Klust <klust@fkp.uni-hannover.de>
00012  *
00013  * This program is free software; you can redistribute it and/or modify
00014  * it under the terms of the GNU General Public License as published by
00015  * the Free Software Foundation; either version 2 of the License, or
00016  * (at your option) any later version.
00017  *
00018  * This program is distributed in the hope that it will be useful,
00019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00021  * GNU General Public License for more details.
00022  *
00023  * You should have received a copy of the GNU General Public License
00024  * along with this program; if not, write to the Free Software
00025  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
00026  */
00027 
00028 
00029 /* Please do not change the Begin/End lines of this comment section!
00030  * this is a LaTeX style section used for auto generation of the PlugIn Manual 
00031  * Chapter. Add a complete PlugIn documentation inbetween the Begin/End marks!
00032  * --------------------------------------------------------------------------------
00033 % BeginPlugInDocuSection
00034 % PlugInDocuCaption: View NetCDF file data
00035 % PlugInName: editnc
00036 % PlugInAuthor: Percy Zahl
00037 % PlugInAuthorEmail: zahl@users.sf.net
00038 % PlugInMenuPath: Tools/NetCDF-View
00039 
00040 % PlugInDescription
00041  It shows all information stored in any NetCDF file. Huge data fields
00042  are truncated and only the first few values are shown.
00043 
00044 % PlugInUsage
00045  Call it from Tools menu and select a NetCDF file when the file open dialog is presented.
00046 
00047 %% OptPlugInKnownBugs
00048 %No bugs known.
00049 
00050 % OptPlugInNotes
00051  Only viewing NetCDF data, no editing.
00052 
00053 % EndPlugInDocuSection
00054  * -------------------------------------------------------------------------------- 
00055  */
00056 
00057 #include <sstream>
00058 
00059 using namespace std;
00060 
00061 
00062 #include <gtk/gtk.h>
00063 #include "config.h"
00064 #include "gxsm/plugin.h"
00065 
00066 static void editnc_about( void );
00067 static void editnc_run(GtkWidget *w, void *data);
00068 static void editnc_init( void );
00069 static void editnc_cleanup( void );
00070 
00071 GxsmPlugin editnc_pi = {
00072                 NULL,
00073                 NULL,
00074                 0,
00075                 NULL,
00076                 "NetCDF View",
00077                 NULL,
00078                 NULL,
00079                 "Percy Zahl",
00080                 N_("_Tools/"),
00081                 N_("NetCDF-View"),
00082                 N_("List the contents of NetCDF Files"),
00083                 "NetCDF-Dump Utility using a dynamic generated Gtk-Window",
00084                 NULL,
00085                 NULL,
00086                 editnc_init,
00087                 NULL,
00088                 editnc_about,
00089                 NULL,
00090                 editnc_run,
00091                 editnc_cleanup,
00092 };
00093 
00094 static const char *about_text = N_("Gxsm EditNc Plugin:\n"
00095                                                                    "EditNc is a NetCDF-Dump Utility using"
00096                                                                    " a dynamic generated Gtk-Window:"
00097                                    "View and (not yet) Edit NetCDF-Data Files");
00098 
00099 GxsmPlugin *get_gxsm_plugin_info ( void ){ 
00100                 editnc_pi.description = g_strdup_printf(N_("Gxsm Editnc Plugin %s"), VERSION);
00101                 return &editnc_pi; 
00102 }
00103 
00104 
00105 
00106 /*
00107  * A derived class, just like NcFile except knows how to "dump" its
00108  * dimensions, variables, global attributes, and data in ASCII form.
00109  */
00110 
00111 class DumpableNcFile : public NcFile{
00112 public:
00113                 DumpableNcFile(const char* path, NcFile::FileMode mode = ReadOnly) 
00114                                 : NcFile(path, mode) { dpath = path; maxvals=0L; } ;
00115                 ~DumpableNcFile(){ };
00116                 void dumpdims( void );
00117                 void dumpvars( void );
00118                 void dumpgatts( void );
00119                 void dumpdata( void );
00120                 void dumpall( void );
00121                 static void apply_info_callback(GnomeDialog * dialog, gint button_number, DumpableNcFile *dnc);
00122 
00123                 static void show_info_callback (GtkWidget *widget, gchar *message){
00124                         gtk_widget_show (gnome_message_box_new (message, GNOME_MESSAGE_BOX_INFO, GNOME_STOCK_BUTTON_OK, NULL));
00125                 };
00126                 static void free_info_elem(gpointer txt, gpointer data){ g_free((gchar*) txt); };
00127 
00128                 void dump_togtkwin( void );
00129                 void setmaxdata(unsigned long maxval) { maxvals=maxval; };
00130 private:
00131                 long maxvals;
00132                 const char *dpath;
00133 };
00134 
00135 
00136 
00137 static void editnc_about(void)
00138 {
00139                 const gchar *authors[] = { editnc_pi.authors, NULL};
00140                 gtk_widget_show(gnome_about_new ( editnc_pi.name,
00141                                                   VERSION,
00142                                                   N_("(C) 2000 the Free Software Foundation"),
00143                                                   about_text,
00144                                                   authors,
00145                                                   NULL, NULL, NULL
00146                                                   ));
00147 }
00148 
00149 static void editnc_run(GtkWidget *w, void *data)
00150 {
00151                 static DumpableNcFile *dnc = NULL;
00152                 static gchar *filename = NULL;
00153                 if( dnc ) delete dnc;
00154                 if( filename ) g_free(filename);
00155                 if( data && editnc_pi.app ){
00156                                 dnc = new DumpableNcFile
00157                                                 ( filename = g_strdup
00158                                                   ( editnc_pi.app->file_dialog
00159                                                         ( N_("NC file to edit"),".", "*.[nN][cC]*", NULL, "ncedit" )
00160                                                                   ));
00161                                 dnc -> setmaxdata(50);
00162                                 dnc -> dump_togtkwin();
00163                 }
00164                 else
00165                                 PI_DEBUG (DBG_L2, "Editnc Plugin: Cleanup 1" );
00166 }
00167 
00168 static void editnc_showfile(gchar *filename)
00169 {
00170                 static DumpableNcFile *dnc = NULL;
00171                 if( dnc ) delete dnc;
00172                 if( filename ){
00173                                 dnc = new DumpableNcFile (filename);
00174                                 dnc -> setmaxdata(50);
00175                                 dnc -> dump_togtkwin();
00176                 }
00177                 else
00178                                 PI_DEBUG (DBG_L2, "Editnc Plugin: Cleanup 2" );
00179 }
00180 
00181 static void editnc_init( void ){
00182                 PI_DEBUG (DBG_L2, "editnc_init" );
00183                 //  editnc_pi.app->ConnectPluginToGetNCInfoEvent (editnc_showfile);
00184                 gapp->ConnectPluginToGetNCInfoEvent (editnc_showfile);
00185 }
00186 
00187 static void editnc_cleanup( void ){
00188                 editnc_run (NULL, NULL);
00189                 editnc_showfile (NULL);
00190                 editnc_pi.app->ConnectPluginToGetNCInfoEvent (NULL);
00191                 while(gtk_events_pending()) gtk_main_iteration();
00192 }
00193 
00194 
00195 
00196 // ==================================================
00197 // DumpableNcFile
00198 //
00199 
00200 void DumpableNcFile::dumpdims( void ){
00201                 for (int n=0; n < num_dims(); n++) {
00202                                 NcDim* dim = get_dim(n);
00203                                 cout << "\t" << dim->name() << " = " ;
00204                                 if (dim->is_unlimited())
00205                                                 cout << "UNLIMITED" << " ;\t " << "// " << dim->size() <<
00206                                                                 " currently\n";
00207                                 else
00208                                                 cout << dim->size() << " ;\n";
00209                 }
00210 }
00211 
00212 void dumpatts(NcVar& var){
00213                 NcToken vname = var.name();
00214                 NcAtt *ap;
00215                 for(int n = 0; (ap = var.get_att(n)); n++) {
00216                                 cout << "\t\t" << vname << ":" << ap->name() << " = " ;
00217                                 NcValues *vals = ap->values();
00218                                 cout << *vals << " ;" << endl ;
00219                                 delete ap;
00220                                 delete vals;
00221                 }
00222 }
00223 
00224 void DumpableNcFile::dumpvars( void )
00225 {
00226                 int n;
00227                 static char *types[] =
00228                                 {"","byte","char","short","long","float","double"};
00229                 NcVar *vp;
00230 
00231                 for(n = 0; (vp = get_var(n)); n++) {
00232                                 cout << "\t" << types[vp->type()] << " " << vp->name() ;
00233 
00234                                 if (vp->num_dims() > 0) {
00235                                                 cout << "(";
00236                                                 for (int d = 0; d < vp->num_dims(); d++) {
00237                                                                 NcDim* dim = vp->get_dim(d);
00238                                                                 cout << dim->name();
00239                                                                 if (d < vp->num_dims()-1)
00240                                                                   cout << ", ";           
00241                                                 }
00242                                                 cout << ")";
00243                                 }
00244                                 cout << " ;\n";
00245                                 // now dump each of this variable's attributes
00246                                 dumpatts(*vp);
00247                 }
00248 }
00249 
00250 void DumpableNcFile::dumpgatts( void )
00251 {
00252                 NcAtt *ap;
00253                 for(int n = 0; (ap = get_att(n)); n++) {
00254                                 cout << "\t\t" << ":" << ap->name() << " = " ;
00255                                 NcValues *vals = ap->values();
00256                                 cout << *vals << " ;" << endl ;
00257                                 delete vals;
00258                                 delete ap;
00259                 }
00260 }
00261 
00262 void DumpableNcFile::dumpdata( )
00263 {
00264                 NcVar *vp;
00265                 for (int n = 0; (vp = get_var(n)); n++) {
00266                                 cout << " " << vp->name() << " = ";
00267                                 if( maxvals && vp->num_vals() > maxvals)
00268                                                 cout << "more values than " << maxvals << ", output suppressed !" << endl;
00269                                 else{
00270                                                 NcValues* vals = vp->values();
00271                                                 cout << *vals << " ;" << endl ;
00272                                                 delete vals;
00273                                 }
00274                 }
00275 }
00276 
00277 // Automaticalls pareses NcFile Data to Gtk Dialog
00278 
00279 #define PREF_BOX_PACK_MODE    FALSE, TRUE, 2
00280 #define INFO_BOX_PACK_MODE    FALSE, FALSE, 2
00281 #define PREF_BOXEL_PACK_MODE  TRUE, TRUE, 2
00282 
00283 void DumpableNcFile::apply_info_callback(GnomeDialog * dialog, gint button_number, DumpableNcFile *dnc){
00284                 switch(button_number){
00285                 case 0: 
00286                                 dnc->dumpall();
00287                                 break;
00288                 case 1: 
00289                                 GtkWidget *messagedlg;
00290                                 messagedlg = gnome_message_box_new("Sorry, no write back until now !",
00291                                                                                                    GNOME_MESSAGE_BOX_INFO,
00292                                                                                                    GNOME_STOCK_BUTTON_OK, NULL);
00293                                 gnome_dialog_run (GNOME_DIALOG (messagedlg));
00294                                 break;
00295                 case 2: 
00296                                 gnome_dialog_close(dialog); 
00297                                 g_slist_foreach (
00298                                                 (GSList*) gtk_object_get_data (
00299                                                                 GTK_OBJECT (dialog), "info_list" ), 
00300                                                 (GFunc) free_info_elem, 
00301                                                 NULL
00302                                                 );
00303                                 break;
00304                 }
00305 }
00306 
00307 
00308 // General NC Formatting Dumpingutil, Output into GTK-Window
00309 void DumpableNcFile::dump_togtkwin( void ){
00310         GtkWidget *dialog;
00311         GtkWidget *scrolledwindow;
00312         GtkWidget *sep;
00313         GtkWidget *lab;
00314         GtkWidget *vbox;
00315         GtkWidget *hbox;
00316         GtkWidget *VarName;
00317         GtkWidget *variable;
00318         GtkWidget *info;
00319         
00320         dialog = gnome_dialog_new(_("Edit NC File"),
00321                                   "Dump to stdout",
00322                                   GNOME_STOCK_BUTTON_APPLY,
00323                                   GNOME_STOCK_BUTTON_CANCEL, 
00324                                   NULL); 
00325         
00326         gtk_window_set_policy (GTK_WINDOW (dialog), TRUE, TRUE, FALSE);
00327         gnome_dialog_set_close(GNOME_DIALOG(dialog), FALSE);
00328         gnome_dialog_close_hides(GNOME_DIALOG(dialog), FALSE);
00329         gnome_dialog_set_default(GNOME_DIALOG(dialog), 2);
00330 
00331         gtk_widget_set_usize (dialog, 500, 400);
00332         
00333         scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
00334         gtk_widget_show (scrolledwindow);
00335         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), 
00336                                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
00337         vbox = gtk_vbox_new (FALSE, 0);
00338         gtk_widget_show (vbox);
00339         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (scrolledwindow), vbox);
00340     
00341         gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(dialog)->vbox),
00342                            scrolledwindow, TRUE, TRUE, GNOME_PAD);
00343         
00344         gtk_box_pack_start (GTK_BOX (vbox), lab=gtk_label_new(dpath), PREF_BOX_PACK_MODE);
00345         gtk_widget_show (lab);
00346         gtk_box_pack_start (GTK_BOX (vbox), sep=gtk_hseparator_new(), PREF_BOX_PACK_MODE);
00347         gtk_widget_show (sep);
00348         // ===============================================================================
00349         // DUMP:  global attributes
00350         // ===============================================================================
00351         gtk_box_pack_start (GTK_BOX (vbox), lab=gtk_label_new("Global Attributes"), PREF_BOX_PACK_MODE);
00352         gtk_widget_show (lab);
00353         gtk_box_pack_start (GTK_BOX (vbox), sep=gtk_hseparator_new(), PREF_BOX_PACK_MODE);
00354         gtk_widget_show (sep);
00355         NcAtt *ap;
00356         for(int n = 0; (ap = get_att(n)); n++) {
00357                 hbox = gtk_hbox_new (FALSE, 0);
00358                 gtk_widget_show (hbox);
00359     
00360                 gtk_box_pack_start (GTK_BOX (vbox), hbox, PREF_BOX_PACK_MODE);
00361 
00362                 VarName = gtk_label_new (ap->name());
00363     
00364                 gtk_widget_set_usize (VarName, 150, -1);
00365                 gtk_widget_show (VarName);
00366                 gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00367                 gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00368                 gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00369     
00370                 gtk_box_pack_start (GTK_BOX (hbox), VarName, PREF_BOXEL_PACK_MODE);
00371       
00372                 variable = gtk_entry_new ();
00373                 gtk_widget_show (variable);
00374                 gtk_box_pack_start (GTK_BOX (hbox), variable, PREF_BOXEL_PACK_MODE);
00375 
00376                 NcValues* vals;
00377                 gtk_entry_set_text (GTK_ENTRY (variable), (vals = ap->values())->as_string(0));
00378                 delete vals;
00379                 delete ap;
00380         }
00381 
00382         GSList *infolist=NULL;
00383         static gchar *types[] = {"","byte","char","short","long","float","double"};
00384         NcVar *vp;
00385 
00386         // ===============================================================================
00387 
00388         gtk_box_pack_start (GTK_BOX (vbox), sep=gtk_hseparator_new(), PREF_BOX_PACK_MODE);
00389         gtk_widget_show (sep);
00390         gtk_box_pack_start (GTK_BOX (vbox), sep=gtk_hseparator_new(), PREF_BOX_PACK_MODE);
00391         gtk_widget_show (sep);
00392 
00393         // ===============================================================================
00394         // DUMP:  dimension value
00395         // ===============================================================================
00396   
00397         gtk_box_pack_start (GTK_BOX (vbox), lab=gtk_label_new("NC Dimensions"), PREF_BOX_PACK_MODE);
00398         gtk_widget_show (lab);
00399         gtk_box_pack_start (GTK_BOX (vbox), sep=gtk_hseparator_new(), PREF_BOX_PACK_MODE);
00400         gtk_widget_show (sep);
00401         for (int n=0; n < num_dims(); n++) {
00402                 hbox = gtk_hbox_new (FALSE, 0);
00403                 gtk_widget_show (hbox);
00404     
00405                 gtk_box_pack_start (GTK_BOX (vbox), hbox, PREF_BOX_PACK_MODE);
00406       
00407                 NcDim* dim = get_dim(n);
00408                 gchar *dimname = g_strconcat((gchar*)dim->name(), " ", NULL);
00409 
00410                 VarName = gtk_label_new (dimname);
00411                 g_free(dimname);
00412     
00413                 gtk_widget_set_usize (VarName, 150, -1);
00414                 gtk_widget_show (VarName);
00415                 gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00416                 gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00417                 gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00418     
00419                 gtk_box_pack_start (GTK_BOX (hbox), VarName, PREF_BOXEL_PACK_MODE);
00420       
00421                 variable = gtk_entry_new ();
00422                 gtk_widget_show (variable);
00423                 gtk_box_pack_start (GTK_BOX (hbox), variable, PREF_BOXEL_PACK_MODE);
00424 
00425                 gchar *dimval;
00426                 if (dim->is_unlimited())
00427                         dimval = g_strdup_printf("UNLIMITED, %d currently", (int)dim->size());
00428                 else
00429                         dimval = g_strdup_printf("%d", (int)dim->size());
00430     
00431                 gtk_entry_set_text (GTK_ENTRY (variable), dimval);
00432                 g_free(dimval);
00433 
00434         }
00435 
00436         // ===============================================================================
00437 
00438         gtk_box_pack_start (GTK_BOX (vbox), sep=gtk_hseparator_new(), PREF_BOX_PACK_MODE);
00439         gtk_widget_show (sep);
00440         gtk_box_pack_start (GTK_BOX (vbox), sep=gtk_hseparator_new(), PREF_BOX_PACK_MODE);
00441         gtk_widget_show (sep);
00442 
00443         // ===============================================================================
00444         // DUMP:  vartype varname(dims)   data
00445         // ===============================================================================
00446 
00447         gtk_box_pack_start (GTK_BOX (vbox), lab=gtk_label_new("NC Data"), PREF_BOX_PACK_MODE);
00448         gtk_widget_show (lab);
00449         gtk_box_pack_start (GTK_BOX (vbox), sep=gtk_hseparator_new(), PREF_BOX_PACK_MODE);
00450         gtk_widget_show (sep);
00451         for (int n = 0; (vp = get_var(n)); n++) {
00452                 int unlimited_flag = FALSE;
00453                 hbox = gtk_hbox_new (FALSE, 0);
00454                 gtk_widget_show (hbox);
00455       
00456                 gtk_box_pack_start (GTK_BOX (vbox), hbox, PREF_BOX_PACK_MODE);
00457       
00458                 gchar *vdims = g_strdup(" ");
00459                 if (vp->num_dims() > 0) {
00460                         g_free(vdims);
00461                         vdims = g_strdup("(");
00462                         for (int d = 0; d < vp->num_dims(); d++) {
00463                                 gchar *tmp = g_strconcat(vdims, (gchar*)vp->get_dim(d)->name(), 
00464                                                          ((d<vp->num_dims()-1)?", ":")"), NULL);
00465 
00466                                 if (vp->get_dim(d)->is_unlimited())
00467                                         unlimited_flag = TRUE;
00468 
00469                                 g_free(vdims);
00470                                 vdims = g_strdup(tmp);
00471                                 g_free(tmp);
00472                         }
00473                 }
00474                 gchar *vardef = g_strconcat(types[vp->type()], " ", (gchar*)vp->name(), vdims, NULL);
00475                 g_free(vdims);
00476                 VarName = gtk_label_new (vardef);
00477                 std::cout << vardef << std::endl;
00478                 g_free(vardef);
00479 
00480                 gtk_widget_set_usize (VarName, 150, -1);
00481                 gtk_widget_show (VarName);
00482                 gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00483                 gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00484                 gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00485       
00486                 gtk_box_pack_start (GTK_BOX (hbox), VarName, PREF_BOXEL_PACK_MODE);
00487       
00488                 variable = gtk_entry_new ();
00489                 gtk_widget_show (variable);
00490                 gtk_box_pack_start (GTK_BOX (hbox), variable, PREF_BOXEL_PACK_MODE);
00491 
00492                 ostringstream ostr_val;
00493 
00494 
00495 
00496                 if (unlimited_flag){
00497                         ostr_val << "** Unlimited Data Set, data suppressed **";
00498                 } else {
00499                         NcValues *v = vp->values();
00500                         if(vp->type() == ncChar){
00501                                 ostr_val << v->as_string(0);
00502                         }else{
00503                                 if(v){
00504                                         if(v->num() > 1){
00505                                                 if(v->num() > maxvals)
00506                                                         ostr_val << "[#="<< vp->num_vals() << "] " << " ... (too many, suppressed) ";
00507                                                 else
00508                                                         ostr_val << "[#="<< vp->num_vals() << "] " << *v;
00509                                         }else
00510                                                 ostr_val << *v;
00511                                 } else
00512                                         ostr_val << "** Empty **";
00513                         }
00514                         delete v;
00515                 }
00516                 ostr_val << ends;
00517                 gtk_entry_set_text (GTK_ENTRY (variable), (const gchar*)ostr_val.str().c_str());
00518 
00519                 NcToken vname = vp->name();
00520                 NcAtt *ap;
00521       
00522                 ostringstream  ostr_att;
00523                 if((ap=vp->get_att(0))){
00524                         delete ap;
00525                         ostr_att << "Details and NetCDF Varibale Attributes:" << endl;
00526 
00527                         for(int n = 0; (ap = vp->get_att(n)); n++) {
00528                                 NcValues *v;
00529                                 ostr_att << vname << ":" 
00530                                          << ap->name() << " = "
00531                                          << *(v=ap->values()) << endl;
00532                                 delete ap;
00533                                 delete v;
00534                         }
00535                 }
00536                 else
00537                         ostr_att << "Sorry, no info available for \"" << vname << "\" !";
00538 
00539                 ostr_att << "\nValue(s):\n" << ostr_val.str().c_str(); 
00540                 ostr_att << ends;
00541                 gchar *infotxt = g_strdup( (const gchar*)ostr_att.str().c_str() );
00542                 infolist = g_slist_prepend( infolist, infotxt);
00543                 info = gtk_button_new_with_label (" Details ");
00544                 gtk_widget_show (info);
00545                 gtk_box_pack_start (GTK_BOX (hbox), info, INFO_BOX_PACK_MODE);
00546                 gtk_signal_connect (GTK_OBJECT (info), "clicked",
00547                                     GTK_SIGNAL_FUNC (show_info_callback),
00548                                     infotxt);
00549         }
00550 
00551         gtk_object_set_data (GTK_OBJECT (dialog), "info_list", infolist);
00552  
00553         gtk_signal_connect (GTK_OBJECT(dialog), "clicked",
00554                             GTK_SIGNAL_FUNC(apply_info_callback),
00555                             this);
00556   
00557         gtk_widget_show (dialog);
00558 }
00559 
00560 void DumpableNcFile::dumpall( )
00561 {
00562                 cout << "netcdf " << dpath << " {" << endl <<
00563                                 "dimensions:" << endl ;
00564 
00565                 dumpdims();
00566 
00567                 cout << "variables:" << endl;
00568 
00569                 dumpvars();
00570 
00571                 if (num_atts() > 0)
00572                                 cout << "// global attributes" << endl ;
00573 
00574                 dumpgatts();
00575 
00576                 cout << "data:" << endl;
00577 
00578                 dumpdata();
00579 
00580                 cout << "}" << endl;
00581 }

Generated on Sat Apr 1 09:04:09 2006 for GXSM by  doxygen 1.4.6