blob: 3c3dac032db105db60701b7b81b1510087bb649a [file] [log] [blame]
/*************************************************************************/
/* */
/* Copyright (c) 1994 Stanford University */
/* */
/* All rights reserved. */
/* */
/* Permission is given to use, copy, and modify this software for any */
/* non-commercial purpose as long as this copyright notice is not */
/* removed. All other uses, including redistribution in whole or in */
/* part, are forbidden without prior written permission. */
/* */
/* This software is provided with absolutely no warranty and no */
/* support. */
/* */
/*************************************************************************/
/********** storing/loading of large arrays to/from files **********/
#include "incl.h"
#define PMODE 0644 /* RW for owner, R for group, R for others */
#define RWMODE 0 /* Read-only */
EXTERN_ENV
Create_File(filename)
char filename[];
{
int fd;
if ((fd = creat(filename,PMODE)) == -1) {
Error(" Can't create %s\n",filename);
}
return(fd);
}
Open_File(filename)
char filename[];
{
int fd;
if ((fd = open(filename,RWMODE)) == -1) {
Error(" Can't open %s\n",filename);
}
return(fd);
}
Write_Bytes(fd,array,length)
int fd;
unsigned char array[];
long length;
{
long n_written;
long more_written;
n_written = write(fd,array,MIN(length,32766));
if (n_written != -1) {
while (n_written < length) {
more_written = write(fd,&array[n_written],
MIN(length-n_written,32766));
if (more_written == -1) break;
n_written += more_written;
}
}
if (n_written != length) {
Close_File(fd);
Error(" Write failed on file %d\n",fd);
}
}
Write_Shorts(fd,array,length)
int fd;
unsigned char array[];
long length;
{
int i;
unsigned char byte;
long n_written;
long more_written;
#ifdef FLIP
for (i=0; i<length; i+=2) {
byte = array[i];
array[i] = array[i+1];
array[i+1] = byte;
}
#endif
n_written = write(fd,array,MIN(length,32766));
if (n_written != -1) {
while (n_written < length) {
more_written = write(fd,&array[n_written],
MIN(length-n_written,32766));
if (more_written == -1) break;
n_written += more_written;
}
}
if (n_written != length) {
Close_File(fd);
Error(" Write failed on file %d\n",fd);
}
#ifdef FLIP
for (i=0; i<length; i+=2) {
byte = array[i];
array[i] = array[i+1];
array[i+1] = byte;
}
#endif
}
Write_Longs(fd,array,length)
int fd;
unsigned char array[];
long length;
{
int i;
unsigned char byte;
long n_written;
long more_written;
#ifdef FLIP
for (i=0; i<length; i+=4) {
byte = array[i];
array[i] = array[i+3];
array[i+3] = byte;
byte = array[i+1];
array[i+1] = array[i+2];
array[i+2] = byte;
}
#endif
n_written = write(fd,array,MIN(length,32766));
if (n_written != -1) {
while (n_written < length) {
more_written = write(fd,&array[n_written],
MIN(length-n_written,32766));
if (more_written == -1) break;
n_written += more_written;
}
}
if (n_written != length) {
Close_File(fd);
Error(" Write failed on file %d\n",fd);
}
#ifdef FLIP
for (i=0; i<length; i+=4) {
byte = array[i];
array[i] = array[i+3];
array[i+3] = byte;
byte = array[i+1];
array[i+1] = array[i+2];
array[i+2] = byte;
}
#endif
}
Read_Bytes(fd,array,length)
int fd;
unsigned char array[];
long length;
{
long n_read;
long more_read;
n_read = read(fd,array,MIN(length,32766));
if (n_read != -1 && n_read != 0) {
while (n_read < length) {
more_read = read(fd,&array[n_read],
MIN(length-n_read,32766));
if (more_read == -1 || more_read == 0) break;
n_read += more_read;
}
}
if (n_read != length) {
Close_File(fd);
Error(" Read failed on file %d\n",fd);
}
}
Read_Shorts(fd,array,length)
int fd;
unsigned char array[];
long length;
{
int i;
unsigned char byte;
long n_read;
long more_read;
n_read = read(fd,array,MIN(length,32766));
if (n_read != -1 && n_read != 0) {
while (n_read < length) {
more_read = read(fd,&array[n_read],
MIN(length-n_read,32766));
if (more_read == -1 || more_read == 0) break;
n_read += more_read;
}
}
if (n_read != length) {
Close_File(fd);
Error(" Read failed on file %d\n",fd);
}
#ifdef FLIP
for (i=0; i<length; i+=2) {
byte = array[i];
array[i] = array[i+1];
array[i+1] = byte;
}
#endif
}
Read_Longs(fd,array,length)
int fd;
unsigned char array[];
long length;
{
int i;
unsigned char byte;
long n_read;
long more_read;
n_read = read(fd,array,MIN(length,32766));
if (n_read != -1 && n_read != 0) {
while (n_read < length) {
more_read = read(fd,&array[n_read],
MIN(length-n_read,32766));
if (more_read == -1 || more_read == 0) break;
n_read += more_read;
}
}
if (n_read != length) {
Close_File(fd);
Error(" Read failed on file %d\n",fd);
}
#ifdef FLIP
for (i=0; i<length; i+=4) {
byte = array[i];
array[i] = array[i+3];
array[i+3] = byte;
byte = array[i+1];
array[i+1] = array[i+2];
array[i+2] = byte;
}
#endif
}
Close_File(fd)
int fd;
{
if (close(fd) == -1) {
Error(" Can't close file %d\n",fd);
}
}