]> granicus.if.org Git - graphviz/commitdiff
retoring damage to tools
authorellson <devnull@localhost>
Wed, 3 Jun 2009 01:56:55 +0000 (01:56 +0000)
committerellson <devnull@localhost>
Wed, 3 Jun 2009 01:56:55 +0000 (01:56 +0000)
cmd/tools/Makefile.am
cmd/tools/Makefile.old
cmd/tools/matrix_market.c
cmd/tools/matrix_market.h
cmd/tools/mmio.c
cmd/tools/mmio.h

index 5ede926aea22b22922ba8704b7a984b35b83e169..8d42f8b5c54a6f6b5e7ff91e6a801ab5b0edd50b 100644 (file)
@@ -9,20 +9,22 @@ AM_CPPFLAGS = \
        -I$(top_srcdir)/lib/pathplan \
        -I$(top_srcdir)/lib/pack \
        -I$(top_srcdir)/lib/neatogen \
-       -I$(top_srcdir)/lib/sfdpgen \
+       -I$(top_srcdir)/lib/sparse \
        -I$(top_srcdir)/lib/gvc \
        -I$(top_srcdir)/lib/common \
        -I$(top_srcdir)/lib/ingraphs @EXPAT_INCLUDES@
 
 pdfdir = $(pkgdatadir)/doc/pdf
 
-noinst_HEADERS = colortbl.h convert.h
-bin_PROGRAMS = gc gvcolor gxl2dot acyclic nop ccomps sccmap tred \
-       unflatten gvpack dijkstra bcomps mm2gv
-man_MANS = gc.1 gvcolor.1 gxl2dot.1 acyclic.1 nop.1 ccomps.1 sccmap.1 \
-       tred.1 unflatten.1 gvpack.1 dijkstra.1 bcomps.1
-pdf_DATA = gc.pdf gvcolor.pdf gxl2dot.pdf acyclic.pdf nop.pdf ccomps.pdf \
-       sccmap.pdf tred.pdf unflatten.pdf gvpack.pdf dijkstra.pdf bcomps.pdf
+noinst_HEADERS = colortbl.h convert.h mmio.h matrix_market.h graph_generator.h
+bin_PROGRAMS = gc gvcolor gxl2gv acyclic nop ccomps sccmap tred \
+       unflatten gvpack dijkstra bcomps mm2gv gvgen
+man_MANS = gc.1 gvcolor.1 gxl2gv.1 acyclic.1 nop.1 ccomps.1 sccmap.1 \
+       tred.1 unflatten.1 gvpack.1 dijkstra.1 bcomps.1 mm2gv.1 gvgen.1
+pdf_DATA = gc.1.pdf gvcolor.1.pdf gxl2gv.1.pdf acyclic.1.pdf \
+          nop.1.pdf ccomps.1.pdf sccmap.1.pdf tred.1.pdf \
+          unflatten.1.pdf gvpack.1.pdf dijkstra.1.pdf \
+          bcomps.1.pdf mm2gv.1.pdf gvgen.1.pdf
 
 install-data-hook:
        (cd $(DESTDIR)$(man1dir); rm -f gv2gxl.1; $(LN_S) gxl2gv.1 gv2gxl.1;)
@@ -138,13 +140,18 @@ gvpack_LDADD = \
        $(top_builddir)/lib/ingraphs/libingraphs_C.la \
        $(top_builddir)/plugin/neato_layout/libgvplugin_neato_layout.la
 
-mm2gv_SOURCES = mm2dot.c matrix_market.c mmio.c
+gvpack.1.pdf: $(srcdir)/gvpack.1
+       - @GROFF@ -Tps -man $(srcdir)/gvpack.1 | @PS2PDF@ - - >gvpack.1.pdf
+
+mm2gv_SOURCES = mm2gv.c matrix_market.c mmio.c
 
 mm2gv_LDADD = \
-       $(top_builddir)/lib/gvc/libgvc.la \
-       $(top_builddir)/lib/ingraphs/libingraphs_C.la \
-       $(top_builddir)/plugin/neato_layout/libgvplugin_neato_layout.la
+    $(top_builddir)/lib/common/libcommon_C.la \
+       $(top_builddir)/lib/sparse/libsparse_C.la \
+       $(top_builddir)/lib/cgraph/libcgraph.la @MATH_LIBS@
 
+mm2gv.1.pdf: mm2gv.1
+       - @GROFF@ -Tps -man mm2gv.1 | @PS2PDF@ - - >mm2gv.1.pdf
 
 dijkstra_SOURCES = dijkstra.c
 
index 6745a3a384f902413e3198ce669dc80506b2d6fa..f00a558571a98ccd447ab93275fe62d18cfce40b 100644 (file)
@@ -68,24 +68,10 @@ CCOBJS = ccomps.o
 SCCOBJS = sccmap.o
 GXLOBJS = cvtgxl.o   gv2gxl.o  gxl2gv.o
 GVPOBJS = gvpack.o gvpack_builtins.o
-MMGVOBJS = mm2dot.o matrix_market.o mmio.o
-
 BCCOBJS = bcomps.o
 MANS = acyclic.1 gvcolor.1 nop.1 tred.1 ccomps.1 gc.1 sccmap.1 \
        unflatten.1 gxl2gv.1 gv2gxl.1 gvpack.1 bcomps.1
 
-mm2gv : $(GVPOBJS)
-       $(CPP) $(LDFLAGS) $(MMGVOBJS) $(INGLIB) $(PDNLIBS) -o $@
-
-mm2dot.o : mm2dot.c
-       $(CC) -c $(CCFLAGS) $(DEFINES) $(DNINCS) $(PINCS) mm2dot.c
-
-matrix_market.o : matrix_market.c
-       $(CC) -c $(CCFLAGS) $(DEFINES) $(DNINCS) $(PINCS) matrix_market.c
-
-mmio.o : mmio.c
-       $(CC) -c $(CCFLAGS) $(DEFINES) $(DNINCS) $(PINCS) mmio.c
-
 gvpack : $(GVPOBJS)
        $(CPP) $(LDFLAGS) $(GVPOBJS) $(INGLIB) $(PDNLIBS) -o $@
 
index a8c9561645082468e3f7ae10906233532de0b1fb..d96dc380453b514eed23c25ae751264aabbab860 100644 (file)
+/* $Id$Revision:  */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
 
 #include "SparseMatrix.h"
 #include "mmio.h"
 #include "matrix_market.h"
+#include "render.h"
 #define MALLOC gmalloc
 #define REALLOC grealloc
 #define FREE free
 #define MEMCPY memcpy
 
-int mm_get_type(MM_typecode typecode){
-  if (mm_is_complex(typecode)){
-    return MATRIX_TYPE_COMPLEX;
-  } else if (mm_is_real(typecode)) {
-    return MATRIX_TYPE_REAL;
-  } else if (mm_is_integer(typecode)) {
-    return MATRIX_TYPE_INTEGER;
-  } else if (mm_is_pattern(typecode)){
-    return MATRIX_TYPE_PATTERN;
-  }
-  return MATRIX_TYPE_UNKNOWN;
+int mm_get_type(MM_typecode typecode)
+{
+    if (mm_is_complex(typecode)) {
+       return MATRIX_TYPE_COMPLEX;
+    } else if (mm_is_real(typecode)) {
+       return MATRIX_TYPE_REAL;
+    } else if (mm_is_integer(typecode)) {
+       return MATRIX_TYPE_INTEGER;
+    } else if (mm_is_pattern(typecode)) {
+       return MATRIX_TYPE_PATTERN;
+    }
+    return MATRIX_TYPE_UNKNOWN;
 }
 
-static void set_mm_typecode(int type, MM_typecode *typecode){
-  switch (type){
-  case MATRIX_TYPE_COMPLEX:
-    mm_set_complex(typecode);
-    break;
-  case MATRIX_TYPE_REAL:
-    mm_set_real(typecode);
-    break;
-  case MATRIX_TYPE_INTEGER:
-    mm_set_integer(typecode);
-    break;
-  case MATRIX_TYPE_PATTERN:
-    mm_set_pattern(typecode);
-    break;
-  default:
-    break;
-  }
+static void set_mm_typecode(int type, MM_typecode * typecode)
+{
+    switch (type) {
+    case MATRIX_TYPE_COMPLEX:
+       mm_set_complex(typecode);
+       break;
+    case MATRIX_TYPE_REAL:
+       mm_set_real(typecode);
+       break;
+    case MATRIX_TYPE_INTEGER:
+       mm_set_integer(typecode);
+       break;
+    case MATRIX_TYPE_PATTERN:
+       mm_set_pattern(typecode);
+       break;
+    default:
+       break;
+    }
 }
 
 
 
 
-SparseMatrix SparseMatrix_import_matrix_market(FILE *f, int format){
-  int ret_code, type;
-  MM_typecode matcode;
-  real *val = NULL, *v;
-  int *vali = NULL, i, m, n, *I = NULL, *J = NULL, nz;
-  void *vp = NULL;
-  SparseMatrix A = NULL;
-  int nzold;
-  int c;
+SparseMatrix SparseMatrix_import_matrix_market(FILE * f, int format)
+{
+    int ret_code, type;
+    MM_typecode matcode;
+    real *val = NULL, *v;
+    int *vali = NULL, i, m, n, *I = NULL, *J = NULL, nz;
+    void *vp = NULL;
+    SparseMatrix A = NULL;
+    int nzold;
+    int c;
 
-  if ((c=fgetc(f)) != '%'){
+    if ((c = fgetc(f)) != '%') {
+       ungetc(c, f);
+       return NULL;
+    }
     ungetc(c, f);
-    return NULL;
-  }
-  ungetc(c, f);
-  if (mm_read_banner(f, &matcode) != 0) {
+    if (mm_read_banner(f, &matcode) != 0) {
 #ifdef DEBUG
-    printf("Could not process Matrix Market banner.\n");
+       printf("Could not process Matrix Market banner.\n");
 #endif
-    return NULL;
-  }
-  
-  
-  /*  This is how one can screen matrix types if their application */
-  /*  only supports a subset of the Matrix Market data types.      */
-  
-  if (!mm_is_matrix(matcode) || 
-      !mm_is_sparse(matcode) ){
-    assert(0);
-    /*
-       printf("Sorry, this application does not support dense matrix");
-       printf("Market Market type: [%s]\n", mm_typecode_to_str(matcode));
-    */
-    return NULL;
-  }
-  
-  /* find out size of sparse matrix .... */
-  if ((ret_code = mm_read_mtx_crd_size(f, &m, &n, &nz)) !=0){
-    assert(0);
-    return NULL;
-  }
-  /* reseve memory for matrices */
-  
-  I = MALLOC(nz * sizeof(int));
-  J = MALLOC(nz * sizeof(int));
-  
-  
+       return NULL;
+    }
 
-  switch (format){
-  case FORMAT_CSC:
-    assert(0);/* not supported yet */
-    break;
-  case FORMAT_CSR:
-  case FORMAT_COORD:
 
-    /* NOTE: when reading in doubles, ANSI C requires the use of the "l"  */
-    /*   specifier as in "%lg", "%lf", "%le", otherwise errors will occur */
-    /*  (ANSI C X3.159-1989, Sec. 4.9.6.2, p. 136 lines 13-15)            */
-    type = mm_get_type(matcode);
-    switch (type) {
-    case MATRIX_TYPE_REAL:
-      val = (real *) malloc(nz * sizeof(real));
-      for (i=0; i<nz; i++) {
-       fscanf(f, "%d %d %lg\n", &I[i], &J[i], &val[i]);
-       I[i]--;  /* adjust from 1-based to 0-based */
-       J[i]--;
-      }
-      if (mm_is_symmetric(matcode)){
-       I = REALLOC(I, 2*sizeof(int)*nz);
-       J = REALLOC(J, 2*sizeof(int)*nz);
-       val = REALLOC(val, 2*sizeof(real)*nz);
-       nzold = nz;
-       for (i = 0; i < nzold; i++){
-         if (I[i] != J[i]) {
-           I[nz] = J[i];
-           J[nz] = I[i];
-           val[nz++] = val[i];
-         }
-       }
-      } else if (mm_is_skew(matcode)){
-       I = REALLOC(I, 2*sizeof(int)*nz);
-       J = REALLOC(J, 2*sizeof(int)*nz);
-       val = REALLOC(val, 2*sizeof(real)*nz);
-       vp = (void*) val;
-       nzold = nz;
-       for (i = 0; i < nzold; i++){
-         assert(I[i] != J[i]);/* skew symm has no diag */
-         I[nz] = J[i];
-         J[nz] = I[i];
-         val[nz++] = -val[i];
-       }
-      } else {
-       assert(!mm_is_hermitian(matcode));
-      }
-      vp = (void*) val;
-      break;
-    case MATRIX_TYPE_INTEGER:
-      vali = (int *) malloc(nz * sizeof(int));
-      for (i=0; i<nz; i++) {
-       fscanf(f, "%d %d %d\n", &I[i], &J[i], &vali[i]);
-       I[i]--;  /* adjust from 1-based to 0-based */
-       J[i]--;
-      }
-      if (mm_is_symmetric(matcode)){
-       I = REALLOC(I, 2*sizeof(int)*nz);
-       J = REALLOC(J, 2*sizeof(int)*nz);
-       vali = REALLOC(vali, 2*sizeof(int)*nz);
-       nzold = nz;
-       for (i = 0; i < nzold; i++){
-         if (I[i] != J[i]) {
-           I[nz] = J[i];
-           J[nz] = I[i];
-           vali[nz++] = vali[i];
-         }
-       }
-      } else if (mm_is_skew(matcode)){
-       I = REALLOC(I, 2*sizeof(int)*nz);
-       J = REALLOC(J, 2*sizeof(int)*nz);
-       vali = REALLOC(vali, 2*sizeof(int)*nz);
-       vp = (void*) val;
-       nzold = nz;
-       for (i = 0; i < nzold; i++){
-         assert(I[i] != J[i]);/* skew symm has no diag */
-         I[nz] = J[i];
-         J[nz] = I[i];
-         vali[nz++] = -vali[i];
-       }
-      } else {
-       assert(!mm_is_hermitian(matcode));
-      }
-      vp = (void*) vali;
-      break;
-    case MATRIX_TYPE_PATTERN:
-      for (i=0; i<nz; i++) {
-       fscanf(f, "%d %d\n", &I[i], &J[i]);
-       I[i]--;  /* adjust from 1-based to 0-based */
-       J[i]--;
-      }
-      if (mm_is_symmetric(matcode) || mm_is_skew(matcode)){
-       I = REALLOC(I, 2*sizeof(int)*nz);
-       J = REALLOC(J, 2*sizeof(int)*nz);
-       nzold = nz;
-       for (i = 0; i < nzold; i++){
-         if (I[i] != J[i]) {
-           I[nz] = J[i];
-           J[nz++] = I[i];
-         }
-       }
-      } else {
-       assert(!mm_is_hermitian(matcode));
-      }
-      break;
-    case MATRIX_TYPE_COMPLEX:
-      val = (real *) malloc(2* nz * sizeof(real));
-      v = val;
-      for (i=0; i<nz; i++) {
-       fscanf(f, "%d %d %lg %lg\n", &I[i], &J[i], &v[0], &v[1]);
-       v +=2;
-       I[i]--;  /* adjust from 1-based to 0-based */
-       J[i]--;
-      }
-      if (mm_is_symmetric(matcode)){
-       I = REALLOC(I, 2*sizeof(int)*nz);
-       J = REALLOC(J, 2*sizeof(int)*nz);
-       val = REALLOC(val, 4*sizeof(real)*nz);
-       nzold = nz;
-       for (i = 0; i < nzold; i++){
-         if (I[i] != J[i]) {
-           I[nz] = J[i];
-           J[nz] = I[i];
-           val[2*nz] = val[2*i];
-           val[2*nz+1] = val[2*i+1];
-           nz++;
-         }
-       }
-      } else if (mm_is_skew(matcode)){
-       I = REALLOC(I, 2*sizeof(int)*nz);
-       J = REALLOC(J, 2*sizeof(int)*nz);
-       val = REALLOC(val, 4*sizeof(real)*nz);
-       vp = (void*) val;
-       nzold = nz;
-       for (i = 0; i < nzold; i++){
-         assert(I[i] != J[i]);/* skew symm has no diag */
-         I[nz] = J[i];
-         J[nz] = I[i];
-         val[2*nz] = -val[2*i];
-         val[2*nz+1] = -val[2*i+1];
-         nz++;
+    /*  This is how one can screen matrix types if their application */
+    /*  only supports a subset of the Matrix Market data types.      */
+
+    if (!mm_is_matrix(matcode) || !mm_is_sparse(matcode)) {
+       assert(0);
+       /*
+          printf("Sorry, this application does not support dense matrix");
+          printf("Market Market type: [%s]\n", mm_typecode_to_str(matcode));
+        */
+       return NULL;
+    }
+
+    /* find out size of sparse matrix .... */
+    if ((ret_code = mm_read_mtx_crd_size(f, &m, &n, &nz)) != 0) {
+       assert(0);
+       return NULL;
+    }
+    /* reseve memory for matrices */
 
+    I = MALLOC(nz * sizeof(int));
+    J = MALLOC(nz * sizeof(int));
+
+
+
+    switch (format) {
+    case FORMAT_CSC:
+       assert(0);              /* not supported yet */
+       break;
+    case FORMAT_CSR:
+    case FORMAT_COORD:
+
+       /* NOTE: when reading in doubles, ANSI C requires the use of the "l"  */
+       /*   specifier as in "%lg", "%lf", "%le", otherwise errors will occur */
+       /*  (ANSI C X3.159-1989, Sec. 4.9.6.2, p. 136 lines 13-15)            */
+       type = mm_get_type(matcode);
+       switch (type) {
+       case MATRIX_TYPE_REAL:
+           val = (real *) malloc(nz * sizeof(real));
+           for (i = 0; i < nz; i++) {
+               fscanf(f, "%d %d %lg\n", &I[i], &J[i], &val[i]);
+               I[i]--;         /* adjust from 1-based to 0-based */
+               J[i]--;
+           }
+           if (mm_is_symmetric(matcode)) {
+               I = REALLOC(I, 2 * sizeof(int) * nz);
+               J = REALLOC(J, 2 * sizeof(int) * nz);
+               val = REALLOC(val, 2 * sizeof(real) * nz);
+               nzold = nz;
+               for (i = 0; i < nzold; i++) {
+                   if (I[i] != J[i]) {
+                       I[nz] = J[i];
+                       J[nz] = I[i];
+                       val[nz++] = val[i];
+                   }
+               }
+           } else if (mm_is_skew(matcode)) {
+               I = REALLOC(I, 2 * sizeof(int) * nz);
+               J = REALLOC(J, 2 * sizeof(int) * nz);
+               val = REALLOC(val, 2 * sizeof(real) * nz);
+               vp = (void *) val;
+               nzold = nz;
+               for (i = 0; i < nzold; i++) {
+                   assert(I[i] != J[i]);       /* skew symm has no diag */
+                   I[nz] = J[i];
+                   J[nz] = I[i];
+                   val[nz++] = -val[i];
+               }
+           } else {
+               assert(!mm_is_hermitian(matcode));
+           }
+           vp = (void *) val;
+           break;
+       case MATRIX_TYPE_INTEGER:
+           vali = (int *) malloc(nz * sizeof(int));
+           for (i = 0; i < nz; i++) {
+               fscanf(f, "%d %d %d\n", &I[i], &J[i], &vali[i]);
+               I[i]--;         /* adjust from 1-based to 0-based */
+               J[i]--;
+           }
+           if (mm_is_symmetric(matcode)) {
+               I = REALLOC(I, 2 * sizeof(int) * nz);
+               J = REALLOC(J, 2 * sizeof(int) * nz);
+               vali = REALLOC(vali, 2 * sizeof(int) * nz);
+               nzold = nz;
+               for (i = 0; i < nzold; i++) {
+                   if (I[i] != J[i]) {
+                       I[nz] = J[i];
+                       J[nz] = I[i];
+                       vali[nz++] = vali[i];
+                   }
+               }
+           } else if (mm_is_skew(matcode)) {
+               I = REALLOC(I, 2 * sizeof(int) * nz);
+               J = REALLOC(J, 2 * sizeof(int) * nz);
+               vali = REALLOC(vali, 2 * sizeof(int) * nz);
+               vp = (void *) val;
+               nzold = nz;
+               for (i = 0; i < nzold; i++) {
+                   assert(I[i] != J[i]);       /* skew symm has no diag */
+                   I[nz] = J[i];
+                   J[nz] = I[i];
+                   vali[nz++] = -vali[i];
+               }
+           } else {
+               assert(!mm_is_hermitian(matcode));
+           }
+           vp = (void *) vali;
+           break;
+       case MATRIX_TYPE_PATTERN:
+           for (i = 0; i < nz; i++) {
+               fscanf(f, "%d %d\n", &I[i], &J[i]);
+               I[i]--;         /* adjust from 1-based to 0-based */
+               J[i]--;
+           }
+           if (mm_is_symmetric(matcode) || mm_is_skew(matcode)) {
+               I = REALLOC(I, 2 * sizeof(int) * nz);
+               J = REALLOC(J, 2 * sizeof(int) * nz);
+               nzold = nz;
+               for (i = 0; i < nzold; i++) {
+                   if (I[i] != J[i]) {
+                       I[nz] = J[i];
+                       J[nz++] = I[i];
+                   }
+               }
+           } else {
+               assert(!mm_is_hermitian(matcode));
+           }
+           break;
+       case MATRIX_TYPE_COMPLEX:
+           val = (real *) malloc(2 * nz * sizeof(real));
+           v = val;
+           for (i = 0; i < nz; i++) {
+               fscanf(f, "%d %d %lg %lg\n", &I[i], &J[i], &v[0], &v[1]);
+               v += 2;
+               I[i]--;         /* adjust from 1-based to 0-based */
+               J[i]--;
+           }
+           if (mm_is_symmetric(matcode)) {
+               I = REALLOC(I, 2 * sizeof(int) * nz);
+               J = REALLOC(J, 2 * sizeof(int) * nz);
+               val = REALLOC(val, 4 * sizeof(real) * nz);
+               nzold = nz;
+               for (i = 0; i < nzold; i++) {
+                   if (I[i] != J[i]) {
+                       I[nz] = J[i];
+                       J[nz] = I[i];
+                       val[2 * nz] = val[2 * i];
+                       val[2 * nz + 1] = val[2 * i + 1];
+                       nz++;
+                   }
+               }
+           } else if (mm_is_skew(matcode)) {
+               I = REALLOC(I, 2 * sizeof(int) * nz);
+               J = REALLOC(J, 2 * sizeof(int) * nz);
+               val = REALLOC(val, 4 * sizeof(real) * nz);
+               vp = (void *) val;
+               nzold = nz;
+               for (i = 0; i < nzold; i++) {
+                   assert(I[i] != J[i]);       /* skew symm has no diag */
+                   I[nz] = J[i];
+                   J[nz] = I[i];
+                   val[2 * nz] = -val[2 * i];
+                   val[2 * nz + 1] = -val[2 * i + 1];
+                   nz++;
+
+               }
+           } else if (mm_is_hermitian(matcode)) {
+               I = REALLOC(I, 2 * sizeof(int) * nz);
+               J = REALLOC(J, 2 * sizeof(int) * nz);
+               val = REALLOC(val, 4 * sizeof(real) * nz);
+               vp = (void *) val;
+               nzold = nz;
+               for (i = 0; i < nzold; i++) {
+                   if (I[i] != J[i]) {
+                       I[nz] = J[i];
+                       J[nz] = I[i];
+                       val[2 * nz] = val[2 * i];
+                       val[2 * nz + 1] = -val[2 * i + 1];
+                       nz++;
+                   }
+               }
+           }
+           vp = (void *) val;
+           break;
+       default:
+           return 0;
        }
-      } else if (mm_is_hermitian(matcode)){
-       I = REALLOC(I, 2*sizeof(int)*nz);
-       J = REALLOC(J, 2*sizeof(int)*nz);
-       val = REALLOC(val, 4*sizeof(real)*nz);
-       vp = (void*) val;
-       nzold = nz;
-       for (i = 0; i < nzold; i++){
-         if (I[i] != J[i]){
-           I[nz] = J[i];
-           J[nz] = I[i];
-           val[2*nz] = val[2*i];
-           val[2*nz+1] = -val[2*i+1];
-           nz++;
-         }
+
+       if (format == FORMAT_CSR) {
+           A = SparseMatrix_from_coordinate_arrays(nz, m, n, I, J, vp,
+                                                   type);
+       } else {
+           A = SparseMatrix_new(m, n, 1, type, FORMAT_COORD);
+           A = SparseMatrix_coordinate_form_add_entries(A, nz, I, J, vp);
        }
-      }
-      vp = (void*) val;
-      break;
+       break;
     default:
-      return 0;
+       A = NULL;
     }
+    FREE(I);
+    FREE(J);
+    FREE(val);
 
-    if (format == FORMAT_CSR) {
-      A = SparseMatrix_from_coordinate_arrays(nz, m, n, I, J, vp, type);
-    } else {
-      A = SparseMatrix_new(m, n, 1, type, FORMAT_COORD);
-      A = SparseMatrix_coordinate_form_add_entries(A, nz, I, J, vp);
+    if (mm_is_symmetric(matcode)) {
+       SparseMatrix_set_symmetric(A);
+       SparseMatrix_set_pattern_symmetric(A);
+    } else if (mm_is_skew(matcode)) {
+       SparseMatrix_set_skew(A);
+    } else if (mm_is_hermitian(matcode)) {
+       SparseMatrix_set_hemitian(A);
     }
-    break;
-  default:
-    A = NULL;
-  }
-  FREE(I);
-  FREE(J);
-  FREE(val);
 
-  if (mm_is_symmetric(matcode)){
-    SparseMatrix_set_symmetric(A);
-    SparseMatrix_set_pattern_symmetric(A);
-  } else if (mm_is_skew(matcode)){
-    SparseMatrix_set_skew(A);
-  } else if (mm_is_hermitian(matcode)){
-    SparseMatrix_set_hemitian(A);
-  }
 
-
-  return A;
+    return A;
 }
 
 
-static void mm_write_comment(FILE *file, char *comment){
-  char percent[2]="%";
-  fprintf(file, "%s %s\n",percent,comment);
+static void mm_write_comment(FILE * file, char *comment)
+{
+    char percent[2] = "%";
+    fprintf(file, "%s %s\n", percent, comment);
 }
 
-void SparseMatrix_export_matrix_market(FILE *file, SparseMatrix A, char *comment){
-  MM_typecode matcode;     
+void SparseMatrix_export_matrix_market(FILE * file, SparseMatrix A,
+                                      char *comment)
+{
+    MM_typecode matcode;
 
-  mm_initialize_typecode(&matcode);
-  mm_set_matrix(&matcode);
-  mm_set_sparse(&matcode);
-  mm_set_general(&matcode);
-  set_mm_typecode(A->type, &matcode);
+    mm_initialize_typecode(&matcode);
+    mm_set_matrix(&matcode);
+    mm_set_sparse(&matcode);
+    mm_set_general(&matcode);
+    set_mm_typecode(A->type, &matcode);
 
-  mm_write_banner(file, matcode); 
-  mm_write_comment(file, comment);
+    mm_write_banner(file, matcode);
+    mm_write_comment(file, comment);
 
-  SparseMatrix_export(file, A);
+    SparseMatrix_export(file, A);
 
-}  
+}
index 50b9f829778d42b02720663f226f8b780cf57792..6bfcd9f71189374c865b426a8ca24cae1ecec8ad 100644 (file)
@@ -1,5 +1,26 @@
+/* $Id$Revision:  */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+#ifndef MATRIX_MARKET_H
+#define MATRIX_MARKET_H
+
 #include "mmio.h"
 #include "SparseMatrix.h"
 int mm_get_type(MM_typecode typecode);
-void SparseMatrix_export_matrix_market(FILE *file, SparseMatrix A, char *comment);
-SparseMatrix SparseMatrix_import_matrix_market(FILE *f, int format);
+void SparseMatrix_export_matrix_market(FILE * file, SparseMatrix A,
+                                      char *comment);
+SparseMatrix SparseMatrix_import_matrix_market(FILE * f, int format);
+
+#endif
index 2e4cb873826a74568feffb1c7874af1991e527e3..9a45bd01fd6741b0c0da78e8e40131b519b4db71 100644 (file)
@@ -1,3 +1,18 @@
+/* $Id$Revision:  */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
 /* 
 *   Matrix Market I/O library for ANSI C
 *
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
-/*#include <malloc.h>*/
 #include <ctype.h>
 
 #include "mmio.h"
 
-int mm_read_unsymmetric_sparse(const char *fname, int *M_, int *N_, int *nz_,
-                double **val_, int **I_, int **J_)
+int mm_read_unsymmetric_sparse(const char *fname, int *M_, int *N_,
+                              int *nz_, double **val_, int **I_, int **J_)
 {
     FILE *f;
     MM_typecode matcode;
@@ -24,170 +38,166 @@ int mm_read_unsymmetric_sparse(const char *fname, int *M_, int *N_, int *nz_,
     int i;
     double *val;
     int *I, *J;
+
     if ((f = fopen(fname, "r")) == NULL)
-            return -1;
-    if (mm_read_banner(f, &matcode) != 0)
-    {
-        fprintf(stderr, "mm_read_unsymetric: Could not process Matrix Market banner ");
-        fprintf(stderr, " in file [%s]\n", fname);
-        return -1;
+       return -1;
+
+
+    if (mm_read_banner(f, &matcode) != 0) {
+       fprintf(stderr,
+               "mm_read_unsymetric: Could not process Matrix Market banner ");
+       fprintf(stderr, " in file [%s]\n", fname);
+       return -1;
     }
-    if ( !(mm_is_real(matcode) && mm_is_matrix(matcode) &&
-            mm_is_sparse(matcode)))
-    {
-        fprintf(stderr, "Sorry, this application does not support ");
-        fprintf(stderr, "Market Market type: [%s]\n",
-                mm_typecode_to_str(matcode));
-        return -1;
+
+
+
+    if (!(mm_is_real(matcode) && mm_is_matrix(matcode) &&
+         mm_is_sparse(matcode))) {
+       fprintf(stderr, "Sorry, this application does not support ");
+       fprintf(stderr, "Market Market type: [%s]\n",
+               mm_typecode_to_str(matcode));
+       return -1;
     }
+
     /* find out size of sparse matrix: M, N, nz .... */
-    if (mm_read_mtx_crd_size(f, &M, &N, &nz) !=0)
-    {
-        fprintf(stderr, "read_unsymmetric_sparse(): could not parse matrix size.\n");
-        return -1;
+
+    if (mm_read_mtx_crd_size(f, &M, &N, &nz) != 0) {
+       fprintf(stderr,
+               "read_unsymmetric_sparse(): could not parse matrix size.\n");
+       return -1;
     }
+
     *M_ = M;
     *N_ = N;
     *nz_ = nz;
+
     /* reseve memory for matrices */
+
     I = (int *) malloc(nz * sizeof(int));
     J = (int *) malloc(nz * sizeof(int));
     val = (double *) malloc(nz * sizeof(double));
+
     *val_ = val;
     *I_ = I;
     *J_ = J;
+
     /* NOTE: when reading in doubles, ANSI C requires the use of the "l"  */
     /*   specifier as in "%lg", "%lf", "%le", otherwise errors will occur */
     /*  (ANSI C X3.159-1989, Sec. 4.9.6.2, p. 136 lines 13-15)            */
-    for (i=0; i<nz; i++)
-    {
-        fscanf(f, "%d %d %lg\n", &I[i], &J[i], &val[i]);
-        I[i]--;  /* adjust from 1-based to 0-based */
-        J[i]--;
+
+    for (i = 0; i < nz; i++) {
+       fscanf(f, "%d %d %lg\n", &I[i], &J[i], &val[i]);
+       I[i]--;                 /* adjust from 1-based to 0-based */
+       J[i]--;
     }
     fclose(f);
+
     return 0;
 }
 
 int mm_is_valid(MM_typecode matcode)
 {
-    if (!mm_is_matrix(matcode)) return 0;
-    if (mm_is_dense(matcode) && mm_is_pattern(matcode)) return 0;
-    if (mm_is_real(matcode) && mm_is_hermitian(matcode)) return 0;
-    if (mm_is_pattern(matcode) && (mm_is_hermitian(matcode) || 
-                mm_is_skew(matcode))) return 0;
+    if (!mm_is_matrix(matcode))
+       return 0;
+    if (mm_is_dense(matcode) && mm_is_pattern(matcode))
+       return 0;
+    if (mm_is_real(matcode) && mm_is_hermitian(matcode))
+       return 0;
+    if (mm_is_pattern(matcode) && (mm_is_hermitian(matcode) ||
+                                  mm_is_skew(matcode)))
+       return 0;
     return 1;
 }
 
-int mm_read_banner(FILE *f, MM_typecode *matcode)
+int mm_read_banner(FILE * f, MM_typecode * matcode)
 {
     char line[MM_MAX_LINE_LENGTH];
     char banner[MM_MAX_TOKEN_LENGTH];
-    char mtx[MM_MAX_TOKEN_LENGTH]; 
+    char mtx[MM_MAX_TOKEN_LENGTH];
     char crd[MM_MAX_TOKEN_LENGTH];
     char data_type[MM_MAX_TOKEN_LENGTH];
     char storage_scheme[MM_MAX_TOKEN_LENGTH];
     char *p;
 
 
-    mm_clear_typecode(matcode);  
+    mm_clear_typecode(matcode);
 
-    if (fgets(line, MM_MAX_LINE_LENGTH, f) == NULL) 
-        return MM_PREMATURE_EOF;
+    if (fgets(line, MM_MAX_LINE_LENGTH, f) == NULL)
+       return MM_PREMATURE_EOF;
 
-    if (sscanf(line, "%s %s %s %s %s", banner, mtx, crd, data_type, 
-        storage_scheme) != 5)
-        return MM_PREMATURE_EOF;
+    if (sscanf(line, "%s %s %s %s %s", banner, mtx, crd, data_type,
+              storage_scheme) != 5)
+       return MM_PREMATURE_EOF;
 
-    for (p=mtx; *p!='\0'; *p=tolower(*p),p++);  /* convert to lower case */
-    for (p=crd; *p!='\0'; *p=tolower(*p),p++);  
-    for (p=data_type; *p!='\0'; *p=tolower(*p),p++);
-    for (p=storage_scheme; *p!='\0'; *p=tolower(*p),p++);
+    for (p = mtx; *p != '\0'; *p = tolower(*p), p++);  /* convert to lower case */
+    for (p = crd; *p != '\0'; *p = tolower(*p), p++);
+    for (p = data_type; *p != '\0'; *p = tolower(*p), p++);
+    for (p = storage_scheme; *p != '\0'; *p = tolower(*p), p++);
 
     /* check for banner */
-    if (strncmp(banner, MatrixMarketBanner, strlen(MatrixMarketBanner)) != 0)
-        return MM_NO_HEADER;
+    if (strncmp(banner, MatrixMarketBanner, strlen(MatrixMarketBanner)) !=
+       0)
+       return MM_NO_HEADER;
 
     /* first field should be "mtx" */
     if (strcmp(mtx, MM_MTX_STR) != 0)
-        return  MM_UNSUPPORTED_TYPE;
+       return MM_UNSUPPORTED_TYPE;
     mm_set_matrix(matcode);
 
 
     /* second field describes whether this is a sparse matrix (in coordinate
-            storgae) or a dense array */
+       storgae) or a dense array */
 
 
     if (strcmp(crd, MM_SPARSE_STR) == 0)
-        mm_set_sparse(matcode);
-    else
-    if (strcmp(crd, MM_DENSE_STR) == 0)
-            mm_set_dense(matcode);
+       mm_set_sparse(matcode);
+    else if (strcmp(crd, MM_DENSE_STR) == 0)
+       mm_set_dense(matcode);
     else
-        return MM_UNSUPPORTED_TYPE;
-    
+       return MM_UNSUPPORTED_TYPE;
+
 
     /* third field */
 
     if (strcmp(data_type, MM_REAL_STR) == 0)
-        mm_set_real(matcode);
-    else
-    if (strcmp(data_type, MM_COMPLEX_STR) == 0)
-        mm_set_complex(matcode);
-    else
-    if (strcmp(data_type, MM_PATTERN_STR) == 0)
-        mm_set_pattern(matcode);
-    else
-    if (strcmp(data_type, MM_INT_STR) == 0)
-        mm_set_integer(matcode);
+       mm_set_real(matcode);
+    else if (strcmp(data_type, MM_COMPLEX_STR) == 0)
+       mm_set_complex(matcode);
+    else if (strcmp(data_type, MM_PATTERN_STR) == 0)
+       mm_set_pattern(matcode);
+    else if (strcmp(data_type, MM_INT_STR) == 0)
+       mm_set_integer(matcode);
     else
-        return MM_UNSUPPORTED_TYPE;
-    
+       return MM_UNSUPPORTED_TYPE;
+
 
     /* fourth field */
 
     if (strcmp(storage_scheme, MM_GENERAL_STR) == 0)
-        mm_set_general(matcode);
-    else
-    if (strcmp(storage_scheme, MM_SYMM_STR) == 0)
-        mm_set_symmetric(matcode);
-    else
-    if (strcmp(storage_scheme, MM_HERM_STR) == 0)
-        mm_set_hermitian(matcode);
-    else
-    if (strcmp(storage_scheme, MM_SKEW_STR) == 0)
-        mm_set_skew(matcode);
+       mm_set_general(matcode);
+    else if (strcmp(storage_scheme, MM_SYMM_STR) == 0)
+       mm_set_symmetric(matcode);
+    else if (strcmp(storage_scheme, MM_HERM_STR) == 0)
+       mm_set_hermitian(matcode);
+    else if (strcmp(storage_scheme, MM_SKEW_STR) == 0)
+       mm_set_skew(matcode);
     else
-        return MM_UNSUPPORTED_TYPE;
-        
+       return MM_UNSUPPORTED_TYPE;
+
 
     return 0;
 }
 
-int mm_write_mtx_crd_size(FILE *f, int M, int N, int nz)
+int mm_write_mtx_crd_size(FILE * f, int M, int N, int nz)
 {
     if (fprintf(f, "%d %d %d\n", M, N, nz) != 3)
-        return MM_COULD_NOT_WRITE_FILE;
-    else 
-        return 0;
+       return MM_COULD_NOT_WRITE_FILE;
+    else
+       return 0;
 }
 
-int mm_read_mtx_crd_size(FILE *f, int *M, int *N, int *nz )
+int mm_read_mtx_crd_size(FILE * f, int *M, int *N, int *nz)
 {
     char line[MM_MAX_LINE_LENGTH];
     int num_items_read;
@@ -196,63 +206,61 @@ int mm_read_mtx_crd_size(FILE *f, int *M, int *N, int *nz )
     *M = *N = *nz = 0;
 
     /* now continue scanning until you reach the end-of-comments */
-    do 
-    {
-        if (fgets(line,MM_MAX_LINE_LENGTH,f) == NULL) 
-            return MM_PREMATURE_EOF;
-    }while (line[0] == '%');
+    do {
+       if (fgets(line, MM_MAX_LINE_LENGTH, f) == NULL)
+           return MM_PREMATURE_EOF;
+    } while (line[0] == '%');
 
     /* line[] is either blank or has M,N, nz */
     if (sscanf(line, "%d %d %d", M, N, nz) == 3)
-        return 0;
-        
+       return 0;
+
     else
-    do
-    { 
-        num_items_read = fscanf(f, "%d %d %d", M, N, nz); 
-        if (num_items_read == EOF) return MM_PREMATURE_EOF;
-    }
-    while (num_items_read != 3);
+       do {
+           num_items_read = fscanf(f, "%d %d %d", M, N, nz);
+           if (num_items_read == EOF)
+               return MM_PREMATURE_EOF;
+       }
+       while (num_items_read != 3);
 
     return 0;
 }
 
 
-int mm_read_mtx_array_size(FILE *f, int *M, int *N)
+int mm_read_mtx_array_size(FILE * f, int *M, int *N)
 {
     char line[MM_MAX_LINE_LENGTH];
     int num_items_read;
     /* set return null parameter values, in case we exit with errors */
     *M = *N = 0;
-       
+
     /* now continue scanning until you reach the end-of-comments */
-    do 
-    {
-        if (fgets(line,MM_MAX_LINE_LENGTH,f) == NULL) 
-            return MM_PREMATURE_EOF;
-    }while (line[0] == '%');
+    do {
+       if (fgets(line, MM_MAX_LINE_LENGTH, f) == NULL)
+           return MM_PREMATURE_EOF;
+    } while (line[0] == '%');
 
     /* line[] is either blank or has M,N, nz */
     if (sscanf(line, "%d %d", M, N) == 2)
-        return 0;
-        
-    else /* we have a blank line */
-    do
-    { 
-        num_items_read = fscanf(f, "%d %d", M, N); 
-        if (num_items_read == EOF) return MM_PREMATURE_EOF;
-    }
-    while (num_items_read != 2);
+       return 0;
+
+    else                       /* we have a blank line */
+       do {
+           num_items_read = fscanf(f, "%d %d", M, N);
+           if (num_items_read == EOF)
+               return MM_PREMATURE_EOF;
+       }
+       while (num_items_read != 2);
 
     return 0;
 }
 
-int mm_write_mtx_array_size(FILE *f, int M, int N)
+int mm_write_mtx_array_size(FILE * f, int M, int N)
 {
     if (fprintf(f, "%d %d\n", M, N) != 2)
-        return MM_COULD_NOT_WRITE_FILE;
-    else 
-        return 0;
+       return MM_COULD_NOT_WRITE_FILE;
+    else
+       return 0;
 }
 
 
@@ -263,63 +271,60 @@ int mm_write_mtx_array_size(FILE *f, int M, int N)
 /* use when I[], J[], and val[]J, and val[] are already allocated */
 /******************************************************************/
 
-int mm_read_mtx_crd_data(FILE *f, int M, int N, int nz, int I[], int J[],
-        double val[], MM_typecode matcode)
+int mm_read_mtx_crd_data(FILE * f, int M, int N, int nz, int I[], int J[],
+                        double val[], MM_typecode matcode)
 {
     int i;
-    if (mm_is_complex(matcode))
-    {
-        for (i=0; i<nz; i++)
-            if (fscanf(f, "%d %d %lg %lg", &I[i], &J[i], &val[2*i], &val[2*i+1])
-                != 4) return MM_PREMATURE_EOF;
-    }
-    else if (mm_is_real(matcode))
-    {
-        for (i=0; i<nz; i++)
-        {
-            if (fscanf(f, "%d %d %lg\n", &I[i], &J[i], &val[i])
-                != 3) return MM_PREMATURE_EOF;
-
-        }
+    if (mm_is_complex(matcode)) {
+       for (i = 0; i < nz; i++)
+           if (fscanf
+               (f, "%d %d %lg %lg", &I[i], &J[i], &val[2 * i],
+                &val[2 * i + 1])
+               != 4)
+               return MM_PREMATURE_EOF;
+    } else if (mm_is_real(matcode)) {
+       for (i = 0; i < nz; i++) {
+           if (fscanf(f, "%d %d %lg\n", &I[i], &J[i], &val[i])
+               != 3)
+               return MM_PREMATURE_EOF;
+
+       }
     }
 
-    else if (mm_is_pattern(matcode))
-    {
-        for (i=0; i<nz; i++)
-            if (fscanf(f, "%d %d", &I[i], &J[i])
-                != 2) return MM_PREMATURE_EOF;
-    }
-    else
-        return MM_UNSUPPORTED_TYPE;
+    else if (mm_is_pattern(matcode)) {
+       for (i = 0; i < nz; i++)
+           if (fscanf(f, "%d %d", &I[i], &J[i])
+               != 2)
+               return MM_PREMATURE_EOF;
+    } else
+       return MM_UNSUPPORTED_TYPE;
 
     return 0;
-        
+
 }
 
-int mm_read_mtx_crd_entry(FILE *f, int *I, int *J,
-        double *real, double *imag, MM_typecode matcode)
+int mm_read_mtx_crd_entry(FILE * f, int *I, int *J,
+                         double *real, double *imag, MM_typecode matcode)
 {
-    if (mm_is_complex(matcode))
-    {
-            if (fscanf(f, "%d %d %lg %lg", I, J, real, imag)
-                != 4) return MM_PREMATURE_EOF;
-    }
-    else if (mm_is_real(matcode))
-    {
-            if (fscanf(f, "%d %d %lg\n", I, J, real)
-                != 3) return MM_PREMATURE_EOF;
+    if (mm_is_complex(matcode)) {
+       if (fscanf(f, "%d %d %lg %lg", I, J, real, imag)
+           != 4)
+           return MM_PREMATURE_EOF;
+    } else if (mm_is_real(matcode)) {
+       if (fscanf(f, "%d %d %lg\n", I, J, real)
+           != 3)
+           return MM_PREMATURE_EOF;
 
     }
 
-    else if (mm_is_pattern(matcode))
-    {
-            if (fscanf(f, "%d %d", I, J) != 2) return MM_PREMATURE_EOF;
-    }
-    else
-        return MM_UNSUPPORTED_TYPE;
+    else if (mm_is_pattern(matcode)) {
+       if (fscanf(f, "%d %d", I, J) != 2)
+           return MM_PREMATURE_EOF;
+    } else
+       return MM_UNSUPPORTED_TYPE;
 
     return 0;
-        
+
 }
 
 
@@ -331,84 +336,83 @@ int mm_read_mtx_crd_entry(FILE *f, int *I, int *J,
                             (nz pairs of real/imaginary values)
 ************************************************************************/
 
-int mm_read_mtx_crd(char *fname, int *M, int *N, int *nz, int **I, int **J, 
-        double **val, MM_typecode *matcode)
+int mm_read_mtx_crd(char *fname, int *M, int *N, int *nz, int **I, int **J,
+                   double **val, MM_typecode * matcode)
 {
     int ret_code;
     FILE *f;
 
-    if (strcmp(fname, "stdin") == 0) f=stdin;
-    else
-    if ((f = fopen(fname, "r")) == NULL)
-        return MM_COULD_NOT_READ_FILE;
+    if (strcmp(fname, "stdin") == 0)
+       f = stdin;
+    else if ((f = fopen(fname, "r")) == NULL)
+       return MM_COULD_NOT_READ_FILE;
 
 
     if ((ret_code = mm_read_banner(f, matcode)) != 0)
-        return ret_code;
+       return ret_code;
 
-    if (!(mm_is_valid(*matcode) && mm_is_sparse(*matcode) && 
-            mm_is_matrix(*matcode)))
-        return MM_UNSUPPORTED_TYPE;
+    if (!(mm_is_valid(*matcode) && mm_is_sparse(*matcode) &&
+         mm_is_matrix(*matcode)))
+       return MM_UNSUPPORTED_TYPE;
 
     if ((ret_code = mm_read_mtx_crd_size(f, M, N, nz)) != 0)
-        return ret_code;
+       return ret_code;
 
 
-    *I = (int *)  malloc(*nz * sizeof(int));
-    *J = (int *)  malloc(*nz * sizeof(int));
+    *I = (int *) malloc(*nz * sizeof(int));
+    *J = (int *) malloc(*nz * sizeof(int));
     *val = NULL;
 
-    if (mm_is_complex(*matcode))
-    {
-        *val = (double *) malloc(*nz * 2 * sizeof(double));
-        ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *I, *J, *val, 
-                *matcode);
-        if (ret_code != 0) return ret_code;
-    }
-    else if (mm_is_real(*matcode))
-    {
-        *val = (double *) malloc(*nz * sizeof(double));
-        ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *I, *J, *val, 
-                *matcode);
-        if (ret_code != 0) return ret_code;
+    if (mm_is_complex(*matcode)) {
+       *val = (double *) malloc(*nz * 2 * sizeof(double));
+       ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *I, *J, *val,
+                                       *matcode);
+       if (ret_code != 0)
+           return ret_code;
+    } else if (mm_is_real(*matcode)) {
+       *val = (double *) malloc(*nz * sizeof(double));
+       ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *I, *J, *val,
+                                       *matcode);
+       if (ret_code != 0)
+           return ret_code;
     }
 
-    else if (mm_is_pattern(*matcode))
-    {
-        ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *I, *J, *val, 
-                *matcode);
-        if (ret_code != 0) return ret_code;
+    else if (mm_is_pattern(*matcode)) {
+       ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *I, *J, *val,
+                                       *matcode);
+       if (ret_code != 0)
+           return ret_code;
     }
 
-    if (f != stdin) fclose(f);
+    if (f != stdin)
+       fclose(f);
     return 0;
 }
 
-int mm_write_banner(FILE *f, MM_typecode matcode)
+int mm_write_banner(FILE * f, MM_typecode matcode)
 {
     char *str = mm_typecode_to_str(matcode);
     int ret_code;
 
     ret_code = fprintf(f, "%s %s\n", MatrixMarketBanner, str);
     free(str);
-    if (ret_code !=)
-        return MM_COULD_NOT_WRITE_FILE;
+    if (ret_code != 2)
+       return MM_COULD_NOT_WRITE_FILE;
     else
-        return 0;
+       return 0;
 }
 
 int mm_write_mtx_crd(char fname[], int M, int N, int nz, int I[], int J[],
-        double val[], MM_typecode matcode)
+                    double val[], MM_typecode matcode)
 {
     FILE *f;
     int i;
 
-    if (strcmp(fname, "stdout") == 0) 
-        f = stdout;
-    else
-    if ((f = fopen(fname, "w")) == NULL)
-        return MM_COULD_NOT_WRITE_FILE;
-    
+    if (strcmp(fname, "stdout") == 0)
+       f = stdout;
+    else if ((f = fopen(fname, "w")) == NULL)
+       return MM_COULD_NOT_WRITE_FILE;
+
     /* print banner followed by typecode */
     fprintf(f, "%s ", MatrixMarketBanner);
     fprintf(f, "%s\n", mm_typecode_to_str(matcode));
@@ -418,28 +422,27 @@ int mm_write_mtx_crd(char fname[], int M, int N, int nz, int I[], int J[],
 
     /* print values */
     if (mm_is_pattern(matcode))
-        for (i=0; i<nz; i++)
-            fprintf(f, "%d %d\n", I[i], J[i]);
-    else
-    if (mm_is_real(matcode))
-        for (i=0; i<nz; i++)
-            fprintf(f, "%d %d %20.16g\n", I[i], J[i], val[i]);
-    else
-    if (mm_is_complex(matcode))
-        for (i=0; i<nz; i++)
-            fprintf(f, "%d %d %20.16g %20.16g\n", I[i], J[i], val[2*i], 
-                        val[2*i+1]);
-    else
-    {
-        if (f != stdout) fclose(f);
-        return MM_UNSUPPORTED_TYPE;
+       for (i = 0; i < nz; i++)
+           fprintf(f, "%d %d\n", I[i], J[i]);
+    else if (mm_is_real(matcode))
+       for (i = 0; i < nz; i++)
+           fprintf(f, "%d %d %20.16g\n", I[i], J[i], val[i]);
+    else if (mm_is_complex(matcode))
+       for (i = 0; i < nz; i++)
+           fprintf(f, "%d %d %20.16g %20.16g\n", I[i], J[i], val[2 * i],
+                   val[2 * i + 1]);
+    else {
+       if (f != stdout)
+           fclose(f);
+       return MM_UNSUPPORTED_TYPE;
     }
 
-    if (f !=stdout) fclose(f);
+    if (f != stdout)
+       fclose(f);
 
     return 0;
 }
-  
+
 
 /**
 *  Create a new copy of a string s.  strdup() is a common routine, but
@@ -455,60 +458,53 @@ char *strdup(const char *s)
 }
 */
 
-char  *mm_typecode_to_str(MM_typecode matcode)
+char *mm_typecode_to_str(MM_typecode matcode)
 {
     char buffer[MM_MAX_LINE_LENGTH];
     char *types[4];
-    /* char *strdup(const char *);*/
-    int error =0;
+    /*  char *strdup(const char *); */
+    int error = 0;
 
     /* check for MTX type */
-    if (mm_is_matrix(matcode)) 
-        types[0] = MM_MTX_STR;
+    if (mm_is_matrix(matcode))
+       types[0] = MM_MTX_STR;
     else
-        error=1;
+       error = 1;
 
     /* check for CRD or ARR matrix */
     if (mm_is_sparse(matcode))
-        types[1] = MM_SPARSE_STR;
+       types[1] = MM_SPARSE_STR;
+    else if (mm_is_dense(matcode))
+       types[1] = MM_DENSE_STR;
     else
-    if (mm_is_dense(matcode))
-        types[1] = MM_DENSE_STR;
-    else
-        return NULL;
+       return NULL;
 
     /* check for element data type */
     if (mm_is_real(matcode))
-        types[2] = MM_REAL_STR;
-    else
-    if (mm_is_complex(matcode))
-        types[2] = MM_COMPLEX_STR;
-    else
-    if (mm_is_pattern(matcode))
-        types[2] = MM_PATTERN_STR;
-    else
-    if (mm_is_integer(matcode))
-        types[2] = MM_INT_STR;
+       types[2] = MM_REAL_STR;
+    else if (mm_is_complex(matcode))
+       types[2] = MM_COMPLEX_STR;
+    else if (mm_is_pattern(matcode))
+       types[2] = MM_PATTERN_STR;
+    else if (mm_is_integer(matcode))
+       types[2] = MM_INT_STR;
     else
-        return NULL;
+       return NULL;
 
 
     /* check for symmetry type */
     if (mm_is_general(matcode))
-        types[3] = MM_GENERAL_STR;
-    else
-    if (mm_is_symmetric(matcode))
-        types[3] = MM_SYMM_STR;
-    else 
-    if (mm_is_hermitian(matcode))
-        types[3] = MM_HERM_STR;
-    else 
-    if (mm_is_skew(matcode))
-        types[3] = MM_SKEW_STR;
+       types[3] = MM_GENERAL_STR;
+    else if (mm_is_symmetric(matcode))
+       types[3] = MM_SYMM_STR;
+    else if (mm_is_hermitian(matcode))
+       types[3] = MM_HERM_STR;
+    else if (mm_is_skew(matcode))
+       types[3] = MM_SKEW_STR;
     else
-        return NULL;
+       return NULL;
 
-    sprintf(buffer,"%s %s %s %s", types[0], types[1], types[2], types[3]);
+    sprintf(buffer, "%s %s %s %s", types[0], types[1], types[2], types[3]);
     return strdup(buffer);
 
 }
index d35d7615fbddae96cc0d519b25ec9930dde574c8..20f21bd4d489523f4a0edc078fc8b4846ca94432 100644 (file)
@@ -1,3 +1,18 @@
+/* $Id$Revision:  */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
 /* 
 *   Matrix Market I/O library for ANSI C
 *
@@ -17,13 +32,13 @@ typedef char MM_typecode[4];
 
 char *mm_typecode_to_str(MM_typecode matcode);
 
-int mm_read_banner(FILE *f, MM_typecode *matcode);
-int mm_read_mtx_crd_size(FILE *f, int *M, int *N, int *nz);
-int mm_read_mtx_array_size(FILE *f, int *M, int *N);
+int mm_read_banner(FILE * f, MM_typecode * matcode);
+int mm_read_mtx_crd_size(FILE * f, int *M, int *N, int *nz);
+int mm_read_mtx_array_size(FILE * f, int *M, int *N);
 
-int mm_write_banner(FILE *f, MM_typecode matcode);
-int mm_write_mtx_crd_size(FILE *f, int M, int N, int nz);
-int mm_write_mtx_array_size(FILE *f, int M, int N);
+int mm_write_banner(FILE * f, MM_typecode matcode);
+int mm_write_mtx_crd_size(FILE * f, int M, int N, int nz);
+int mm_write_mtx_array_size(FILE * f, int M, int N);
 
 
 /********************* MM_typecode query fucntions ***************************/
@@ -45,7 +60,7 @@ int mm_write_mtx_array_size(FILE *f, int M, int N);
 #define mm_is_skew(typecode)   ((typecode)[3]=='K')
 #define mm_is_hermitian(typecode)((typecode)[3]=='H')
 
-int mm_is_valid(MM_typecode matcode);          /* too complex for a macro */
+int mm_is_valid(MM_typecode matcode);  /* too complex for a macro */
 
 
 /********************* MM_typecode modify fucntions ***************************/
@@ -104,7 +119,7 @@ int mm_is_valid(MM_typecode matcode);               /* too complex for a macro */
 #define MM_MTX_STR             "matrix"
 #define MM_ARRAY_STR   "array"
 #define MM_DENSE_STR   "array"
-#define MM_COORDINATE_STR "coordinate" 
+#define MM_COORDINATE_STR "coordinate"
 #define MM_SPARSE_STR  "coordinate"
 #define MM_COMPLEX_STR "complex"
 #define MM_REAL_STR            "real"
@@ -119,14 +134,15 @@ int mm_is_valid(MM_typecode matcode);             /* too complex for a macro */
 /*  high level routines */
 
 int mm_write_mtx_crd(char fname[], int M, int N, int nz, int I[], int J[],
-                double val[], MM_typecode matcode);
-int mm_read_mtx_crd_data(FILE *f, int M, int N, int nz, int I[], int J[],
-               double val[], MM_typecode matcode);
-int mm_read_mtx_crd_entry(FILE *f, int *I, int *J, double *realpart, double *img,
-                       MM_typecode matcode);
-
-int mm_read_unsymmetric_sparse(const char *fname, int *M_, int *N_, int *nz_,
-                double **val_, int **I_, int **J_);
+                    double val[], MM_typecode matcode);
+int mm_read_mtx_crd_data(FILE * f, int M, int N, int nz, int I[], int J[],
+                        double val[], MM_typecode matcode);
+int mm_read_mtx_crd_entry(FILE * f, int *I, int *J, double *realpart,
+                         double *img, MM_typecode matcode);
+
+int mm_read_unsymmetric_sparse(const char *fname, int *M_, int *N_,
+                              int *nz_, double **val_, int **I_,
+                              int **J_);