|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 2861 (0xb2d)
Types: TextFile
Names: »readmatrix.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/stat-5.3/eu/stat/src/readmatrix.c«
/* Copyright 1985 Gary Perlman */
/*LINTLIBRARY*/
/*
$Compile: fake "readmatrix readlines parselin -DREADMATRIX"
*/
#ifndef lint
static char sccsfid[] = "@(#) readmatrix.c 5.0 (|stat) 12/2/86";
#endif
#include <stdio.h>
char *malloc ();
char *strcpy ();
typedef char ***Matrix;
typedef int Counter;
#define SUCCESS 0
#define TOO_MANY_ROWS (-1)
#define NO_LINE_SPACE (-2)
#define NO_COL_SPACE (-3)
#define TOO_MANY_COLS (-4)
#define NO_MATRIX_SPACE (-5)
#define NO_MATRIX_ROW_SPACE (-6)
#define UNEVEN_MATRIX (-7)
char *
errmatrix (errnum)
int errnum;
{
switch (errnum)
{
case TOO_MANY_ROWS:
return ("too many rows");
case NO_LINE_SPACE:
return ("no space for input lines");
case NO_COL_SPACE:
return ("no space to count columns");
case TOO_MANY_COLS:
return ("too many columns");
case NO_MATRIX_SPACE:
return ("no space for matrix");
case NO_MATRIX_ROW_SPACE:
return ("no space for storing matrix row");
case UNEVEN_MATRIX:
return ("uneven number of columns in matrix");
}
return ("");
}
readmatrix (matptr, nrowptr, ncolptr, maxrows, maxcols)
Matrix *matptr;
Counter *nrowptr;
Counter *ncolptr;
Counter maxrows;
Counter maxcols;
{
Matrix matrix; /* matrix to be built */
Counter row;
char **line; /* array of input lines */
char firstline[BUFSIZ]; /* first line to determine number of fields */
char **field; /* fields on a line */
/* read in the lines and check for errors */
*nrowptr = readlines (&line, maxrows, stdin);
if (*nrowptr > maxrows)
return (TOO_MANY_ROWS);
if (*nrowptr < 0)
return (NO_LINE_SPACE);
/* determine number of fields in first line */
strcpy (firstline, line[0]);
field = (char **) malloc (maxcols * sizeof (char *));
if (field == NULL)
return (NO_COL_SPACE);
*ncolptr = parselin (firstline, field, maxcols);
free (field);
if (*ncolptr > maxcols)
return (TOO_MANY_COLS);
matrix = (Matrix) malloc (*nrowptr * sizeof (*matrix));
if (matrix == NULL)
return (NO_MATRIX_SPACE);
*matptr = matrix;
for (row = 0; row < *nrowptr; row++)
{
matrix[row] = (char **) malloc (*ncolptr * sizeof (**matrix));
if (matrix[row] == NULL)
return (NO_MATRIX_ROW_SPACE);
if (*ncolptr != parselin (line[row], matrix[row], *ncolptr))
return (UNEVEN_MATRIX);
}
return (SUCCESS);
}
#ifdef READMATRIX
main ()
{
Matrix matrix;
int nrows;
int ncols;
int row, col;
int result;
if (result = readmatrix (&matrix, &nrows, &ncols, 100, 100))
printf ("readmatrix: %s\n", errmatrix (result));
else
{
printf ("nrows = %d\n", nrows);
printf ("ncols = %d\n", ncols);
for (col = 0; col < ncols; col++)
{
for (row = 0; row < nrows; row++)
printf ("'%s' ", matrix[row][col]);
putchar ('\n');
}
}
}
#endif READMATRIX