DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T s

⟦082e0e8a2⟧ TextFile

    Length: 2139 (0x85b)
    Types: TextFile
    Names: »saveload.c«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦this⟧ »EUUGD11/euug-87hel/sec1/graph/saveload.c« 

TextFile

/*
 * Copyright (C) 1986   Alan Kent
 *
 * Permission is granted to freely distribute part or
 * all of this code as long as it is not for profit
 * and this message is retained in the code.
 *
 * No resposibility is taken for any damage or incorect
 * results this program generates.
 * 
 */


#include <stdio.h>
#include "graph.h"


extern struct table_st *new_table ();


save_table ( filename , table )
char *filename;
table_st *table;
{
    table_st *p;
    int i;
    int cols;
    FILE *fp;


    if ( filename == NULL ) {
	fp = stdout;
	filename = "stdout";
    }
    else {
	fp = fopen ( filename , "w" );
	if ( fp == NULL )
	    abort ( "failed to open save file '%s'" , filename );
    }
    if ( table == NULL ) {
	outint ( fp , 0 , filename );	/* cols */
	outint ( fp , 0 , filename );	/* rows */
    }
    else {
	cols = num_cols ( table );
	outint ( fp , cols );
	outint ( fp , table->size );
	for ( p = table; p != NULL; p = p->next )
	    if ( fwrite ( p->data , sizeof ( double ) , p->size , fp ) != p->size )
		abort ( "Write error on '%s'" , filename );
    }
    if ( fp != stdout )
	fclose ( fp );
}


outint ( fp , val , filename )
FILE *fp;
int val;
char *filename;
{
    if ( fwrite ( &val , sizeof ( val ) , 1 , fp ) != 1 )
	abort ( "Error when writing to '%s'" , filename );
}



struct table_st *
load_table ( filename )
char *filename;
{
    FILE *fp;
    struct table_st *p , *tab;
    int cols , rows;

    if ( filename == NULL ) {
	fp = stdin;
	filename = "stdin";
    }
    else {
	fp = fopen ( filename , "r" );
	if ( fp == NULL )
	    abort ( "failed to open file '%s' to load it" , filename );
    }
    if ( fread ( &cols , sizeof ( int ) , 1 , fp ) != 1 )
	abort ( "Error when reading '%s'" , filename );
    if ( fread ( &rows , sizeof ( int ) , 1 , fp ) != 1 )
	abort ( "Error when reading '%s'" , filename );
    tab = new_table ( cols , rows );
    for ( p = tab; p != NULL; p = p->next ) {
	if ( fread ( p->data , sizeof ( double ) , p->size , fp ) != p->size )
	    abort ( "Read error on '%s' when loading file" , filename );
    }
    if ( fp != stdin )
	fclose ( fp );
    return ( tab );
}