00001 #include <stdlib.h>
00002 #include <stdio.h>
00003 #include <string.h>
00004 #include "nmd.h"
00005
00006 #undef __FUNCT__
00007 #define __FUNCT__ "NMDTabReportData"
00008 int NMDTabReportData(NMD_metadata nmd,char **rkey,char **rval,int separator)
00009 {
00010 char *key,*val; size_t lkey,lval;
00011 int ncat,icat,nmod,imod;
00012 char **categories,**modules; NMDDataType *types;
00013 int begun=0, ierr;
00014
00015 NMD_MALLOC(key,2000,char,"keys");
00016 NMD_MALLOC(val,2000,char,"values");
00017
00018 ierr = NMDGetCategories(nmd,&ncat,&categories); NMD_ERR_RETURN(ierr);
00019 for (icat=0; icat<ncat; icat++) {
00020 int first=1;
00021 ierr = NMDCategoryIGetComponents
00022 (nmd,icat,&nmod,&modules,&types); NMD_ERR_RETURN(ierr);
00023 for (imod=0; imod<nmod; imod++) {
00024 int f=0,is_array,trace_arrays;
00025 void *v; char *stringed;
00026 ierr = NMDGetValue
00027 (nmd,categories[icat],modules[imod],
00028 NULL,(void*)&v,(int*)&f); NMD_ERR_RETURN(ierr);
00029 lkey = strlen(key); lval = strlen(val);
00030
00031 if (begun) {
00032 sprintf(key+lkey++,"\t");
00033 sprintf(val+lval++,"\t");
00034 } else begun=1;
00035
00036 if (first) {
00037 sprintf(key+lkey,"%s:%s",categories[icat],modules[imod]);
00038 first=0;
00039 } else {
00040 sprintf(key+lkey,"%s",modules[imod]);
00041 }
00042
00043 is_array =
00044 ( types[imod]==NMDIntarray || types[imod]==NMDRealarray );
00045
00046 trace_arrays = 0;
00047 if (f && (!is_array || trace_arrays) ) {
00048 ierr = QuantityAsString(&v,types[imod],&stringed); NMD_ERR_RETURN(ierr);
00049 } else stringed = "";
00050 sprintf(val+lval,"%s",stringed);
00051 }
00052 }
00053 *rkey = key; *rval = val;
00054
00055 return 0;
00056 }