Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -299,11 +299,7 @@ SET (C_DEPS_SRC
stdio/src/FibreIO/ScanDbl.c
stdio/src/FibreIO/FibrePrint.c
stdio/src/ComplexIO/PrintComplexArray.c
stdio/src/BinFile/binfopen.c
stdio/src/BinFile/binfflags.c
stdio/src/BinFile/binfclose.c
stdio/src/BinFile/binfWriteDblArr.c
stdio/src/BinFile/binfReadDblArr.c
stdio/src/BinFile.c
stdio/src/ArrayIO/ShowArray.c
stdio/src/ArrayIO/PrintArray.c
numerical/src/Math/int_log.c
Expand Down
43 changes: 27 additions & 16 deletions src/stdio/BinFile.sac
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
class BinFile;

external classtype;
#pragma ctype "int"

use FileSystem: { TheFileSystem };
use String: { string };
Expand All @@ -16,7 +17,8 @@ export all;
******************************************************************************/

external syserr, BinFile binfopen(string filename, int flags);
#pragma linkobj "src/BinFile/binfopen.o"
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma effect TheFileSystem
#pragma linkname "SACbinfopen"
#pragma linksign [0,1,2,3]
Expand All @@ -29,7 +31,8 @@ external syserr, BinFile binfopen(string filename, int flags);
*/

external syserr binfclose(BinFile stream);
#pragma linkobj "src/BinFile/binfclose.o"
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma effect TheFileSystem
#pragma linkname "SACbinfclose"
#pragma linksign [0,1]
Expand All @@ -45,44 +48,49 @@ external syserr binfclose(BinFile stream);
******************************************************************************/

external int O_RDONLY();
#pragma linkobj "src/BinFile/binfflags.o"
#pragma linkname "SACbinf_O_RDONLY"
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma linkname "SAC_O_RDONLY"
#pragma linksign [0]
/*
* Returns the C constant O_RDONLY, which is used to open files with
* read only access.
*/

external int O_WRONLY();
#pragma linkobj "src/BinFile/binfflags.o"
#pragma linkname "SACbinf_O_WRONLY"
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma linkname "SAC_O_WRONLY"
#pragma linksign [0]
/*
* Returns the C constant O_WRONLY, which is used to open files with
* write only access.
*/

external int O_RDWR();
#pragma linkobj "src/BinFile/binfflags.o"
#pragma linkname "SACbinf_O_RDWR"
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma linkname "SAC_O_RDWR"
#pragma linksign [0]
/*
* Returns the C constant O_RDWR, which is used to open files with
* read and write access.
*/

external int O_CREAT();
#pragma linkobj "src/BinFile/binfflags.o"
#pragma linkname "SACbinf_O_CREAT"
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma linkname "SAC_O_CREAT"
#pragma linksign [0]
/*
* Returns the C constant O_CREAT, meaning that a file with the designated
* name will be created on opening if it does not yet exist.
*/

external int O_TRUNC();
#pragma linkobj "src/BinFile/binfflags.o"
#pragma linkname "SACbinf_O_TRUNC"
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma linkname "SAC_O_TRUNC"
#pragma linksign [0]
/*
* Returns the C constant O_TRUNC. If a file already exists and the
Expand All @@ -96,10 +104,11 @@ external int O_TRUNC();
******************************************************************************/

external double[*] binfReadDoubleArray(BinFile &stream, int d, int[.] shp);
#pragma refcounting [0]
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma linkname "SACbinfReadDoubleArray"
#pragma linksign[1,2,3,4]
#pragma linkobj "src/BinFile/binfReadDblArr.o"
#pragma linksign [0,1,2,3]
#pragma sacarg [0]
/*
* Reads an array of dimension d and shape shp of doubles from
* file stream. Caution: This function does not check whether
Expand All @@ -108,8 +117,10 @@ external double[*] binfReadDoubleArray(BinFile &stream, int d, int[.] shp);

external void binfWriteDoubleArray(BinFile &stream, int d, int[.] shp,
double[*] arr);
// #pragma header "src/BinFile.h"
#pragma linkobj "src/BinFile.o"
#pragma linkname "SACbinfWriteDoubleArray"
#pragma linkobj "src/BinFile/binfWriteDblArr.o"
#pragma linksign [1,2,3,4]
/*
* Writes the array arr of dimension d and shape shp to file stream.
*/
74 changes: 74 additions & 0 deletions src/stdio/src/BinFile.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#include <assert.h>

#include "sacinterface.h"
#include "BinFile.h"

sac_int SACbinfopen(int *fd, char *name, sac_int flags)
{
*fd = open (name, flags, S_IRUSR | S_IWUSR);
sac_int error = *fd == -1 ? errno : -1;
return error;
}

sac_int SACbinfclose(int fd)
{
int retVal = close (fd);
int error = retVal == -1 ? errno : -1;
return (sac_int) error;
}

sac_int SAC_O_RDONLY(void)
{
return (sac_int) O_RDONLY;
}

sac_int SAC_O_WRONLY(void)
{
return (sac_int) O_WRONLY;
}

sac_int SAC_O_RDWR(void)
{
return (sac_int) O_RDWR;
}

sac_int SAC_O_CREAT(void)
{
return (sac_int) O_CREAT;
}

sac_int SAC_O_TRUNC(void)
{
return (sac_int) O_TRUNC;
}

SACarg *SACbinfReadDoubleArray (int fd, sac_int dim, sac_int *shp)
{
size_t size = sizeof (double);
for (sac_int i = 0; i < dim; i++) {
size *= (size_t) (shp[i]);
}

double *data = (double *) malloc (size);
ssize_t bytesRead = read (fd, data, size);

if (bytesRead == -1) {
SAC_RuntimeError ("Reading the file failed with error code %d\n", errno);
}

return SACARGcreateFromPointer (SACTYPE__MAIN__double, data, dim, shp);
}

void SACbinfWriteDoubleArray (int fd, sac_int dim, sac_int *shp, double *data)
{
sac_int size = sizeof (double);
for (sac_int i = 0; i < dim; i++) {
size *= (size_t) (shp[i]);
}

ssize_t res = write (fd, data, size);

if (res == -1) {
SAC_RuntimeError ("Reading the file failed with error code %d\n", errno);
}
}
17 changes: 7 additions & 10 deletions src/stdio/src/BinFile/BinFile.h → src/stdio/src/BinFile.h
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
/*
* implementation of class File
*/
#ifndef _STDLIB_BINFILE_H_
#define _STDLIB_BINFILE_H_


#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <unistd.h>

#include "sac.h"


#endif
45 changes: 0 additions & 45 deletions src/stdio/src/BinFile/binfReadDblArr.c

This file was deleted.

28 changes: 0 additions & 28 deletions src/stdio/src/BinFile/binfWriteDblArr.c

This file was deleted.

28 changes: 0 additions & 28 deletions src/stdio/src/BinFile/binfclose.c

This file was deleted.

42 changes: 0 additions & 42 deletions src/stdio/src/BinFile/binfflags.c

This file was deleted.

Loading
Loading