summaryrefslogtreecommitdiff
path: root/src/silx/io/specfile/include/SpecFile.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/silx/io/specfile/include/SpecFile.h')
-rw-r--r--src/silx/io/specfile/include/SpecFile.h297
1 files changed, 297 insertions, 0 deletions
diff --git a/src/silx/io/specfile/include/SpecFile.h b/src/silx/io/specfile/include/SpecFile.h
new file mode 100644
index 0000000..9456e3f
--- /dev/null
+++ b/src/silx/io/specfile/include/SpecFile.h
@@ -0,0 +1,297 @@
+# /*##########################################################################
+# Copyright (C) 1995-2017 European Synchrotron Radiation Facility
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+# ############################################################################*/
+/***************************************************************************
+ *
+ * File: SpecFile.h
+ *
+ * Description: Include file for treating spec data files.
+ *
+ * Author: Vicente Rey
+ *
+ * Created: 2 March 1995
+ *
+ * (copyright by E.S.R.F. March 1995)
+ *
+ ***************************************************************************/
+#ifndef SPECFILE_H
+#define SPECFILE_H
+
+#include <math.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include <time.h>
+#include <stdlib.h>
+/* #include <malloc.h> */
+#include <string.h>
+#include <Lists.h>
+
+#ifdef _WINDOWS /* compiling on windows */
+#include <windows.h>
+#include <io.h>
+#define SF_OPENFLAG O_RDONLY | O_BINARY
+#define SF_WRITEFLAG O_CREAT | O_WRONLY
+#define SF_UMASK 0666
+#else /* if not windows */
+#define SF_OPENFLAG O_RDONLY
+#define SF_WRITEFLAG O_CREAT | O_WRONLY
+#define SF_UMASK 0666
+#endif
+
+#ifdef _GENLIB /* for windows dll generation */
+#define DllExport __declspec (dllexport)
+#else
+#define DllExport
+#endif
+
+
+#ifdef SUN4
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+#endif
+
+/*
+ * Defines.
+ */
+#define ROW 0 /* data_info index for no. of data rows */
+#define COL 1 /* data_info index for no. of data columns*/
+#define REG 2 /* data_info index for regular */
+
+#define H 0
+#define K 1
+#define L 2
+#define ABORTED -1
+#define NOT_ABORTED 0
+
+#define SF_ERR_NO_ERRORS 0
+#define SF_ERR_MEMORY_ALLOC 1
+#define SF_ERR_FILE_OPEN 2
+#define SF_ERR_FILE_CLOSE 3
+#define SF_ERR_FILE_READ 4
+#define SF_ERR_FILE_WRITE 5
+#define SF_ERR_LINE_NOT_FOUND 6
+#define SF_ERR_SCAN_NOT_FOUND 7
+#define SF_ERR_HEADER_NOT_FOUND 8
+#define SF_ERR_LABEL_NOT_FOUND 9
+#define SF_ERR_MOTOR_NOT_FOUND 10
+#define SF_ERR_POSITION_NOT_FOUND 11
+#define SF_ERR_LINE_EMPTY 12
+#define SF_ERR_USER_NOT_FOUND 13
+#define SF_ERR_COL_NOT_FOUND 14
+#define SF_ERR_MCA_NOT_FOUND 15
+
+typedef struct _SfCursor {
+ long int scanno; /* nb of scans */
+ long int cursor; /* beginning of current scan */
+ long int hdafoffset; /* global offset of header after beginning of data */
+ long int datalines; /* contains nb of data lines */
+ long int dataoffset; /* contains data offset from begin of scan */
+ long int mcaspectra; /* contains nb of mca spectra in scan */
+ long int bytecnt; /* total file byte count */
+ long int what; /* scan of file block */
+ long int data; /* data flag */
+ long int file_header; /* address of file header for this scan */
+ long int fileh_size; /* size of it */
+} SfCursor;
+
+
+typedef struct _SpecFile{
+ int fd;
+ long m_time;
+ char *sfname;
+ struct _ListHeader list;
+ long int no_scans;
+ ObjectList *current;
+ char *scanbuffer;
+ long scanheadersize;
+ char *filebuffer;
+ long filebuffersize;
+ long scansize;
+ char **labels;
+ long int no_labels;
+ char **motor_names;
+ long int no_motor_names;
+ double *motor_pos;
+ long int no_motor_pos;
+ double **data;
+ long *data_info;
+ SfCursor cursor;
+ short updating;
+} SpecFile;
+
+typedef struct _SpecFileOut{
+ SpecFile *sf;
+ long *list;
+ long list_size;
+ long file_header;
+} SpecFileOut;
+
+typedef struct _SpecScan {
+ long int index;
+ long int scan_no;
+ long int order;
+ long int offset;
+ long int size;
+ long int last;
+ long int file_header;
+ long int data_offset;
+ long int hdafter_offset;
+ long int mcaspectra;
+} SpecScan;
+
+/*
+ * Function declarations.
+ */
+
+ /*
+ * Init
+ */
+/*
+ * init
+ */
+DllExport extern SpecFile *SfOpen ( char *name, int *error );
+DllExport extern short SfUpdate ( SpecFile *sf,int *error );
+DllExport extern int SfClose ( SpecFile *sf );
+
+/*
+ * indexes
+ */
+DllExport extern long SfScanNo ( SpecFile *sf );
+DllExport extern long *SfList ( SpecFile *sf, int *error );
+DllExport extern long SfCondList ( SpecFile *sf, long cond,
+ long **scan_list, int *error );
+DllExport extern long SfIndex ( SpecFile *sf, long number,
+ long order );
+DllExport extern long SfIndexes ( SpecFile *sf, long number,
+ long **indexlist );
+DllExport extern long SfNumber ( SpecFile *sf, long index );
+DllExport extern long SfOrder ( SpecFile *sf, long index );
+DllExport extern int SfNumberOrder ( SpecFile *sf, long index,
+ long *number, long *order );
+
+ /*
+ * Header
+ */
+DllExport extern char *SfCommand ( SpecFile *sf, long index, int *error );
+DllExport extern long SfNoColumns ( SpecFile *sf, long index, int *error );
+DllExport extern char *SfDate ( SpecFile *sf, long index, int *error );
+DllExport extern long SfEpoch ( SpecFile *sf, long index, int *error );
+DllExport extern long SfNoHeaderBefore ( SpecFile *sf, long index, int *error );
+DllExport extern double *SfHKL ( SpecFile *sf, long index, int *error );
+DllExport extern long SfHeader ( SpecFile *sf, long index, char *string,
+ char ***lines, int *error );
+DllExport extern long SfGeometry ( SpecFile *sf, long index,
+ char ***lines, int *error );
+DllExport extern long SfFileHeader ( SpecFile *sf, long index, char *string,
+ char ***lines, int *error );
+DllExport extern char *SfFileDate ( SpecFile *sf, long index, int *error );
+DllExport extern char *SfUser ( SpecFile *sf, long index, int *error );
+DllExport extern char *SfTitle ( SpecFile *sf, long index, int *error );
+
+ /*
+ * Labels
+ */
+DllExport extern long SfAllLabels ( SpecFile *sf, long index,
+ char ***labels, int *error );
+DllExport extern char *SfLabel ( SpecFile *sf, long index, long column,
+ int *error );
+
+ /*
+ * Motors
+ */
+DllExport extern long SfAllMotors ( SpecFile *sf, long index,
+ char ***names, int *error );
+DllExport extern char * SfMotor ( SpecFile *sf, long index,
+ long number, int *error );
+DllExport extern long SfAllMotorPos ( SpecFile *sf, long index,
+ double **pos, int *error );
+DllExport extern double SfMotorPos ( SpecFile *sf, long index,
+ long number, int *error );
+DllExport extern double SfMotorPosByName ( SpecFile *sf, long index,
+ char *name, int *error );
+
+ /*
+ * Data
+ */
+DllExport extern long SfNoDataLines ( SpecFile *sf, long index, int *error );
+DllExport extern int SfData ( SpecFile *sf, long index,
+ double ***data, long **data_info, int *error );
+DllExport extern long SfDataAsString ( SpecFile *sf, long index,
+ char ***data, int *error );
+DllExport extern long SfDataLine ( SpecFile *sf, long index, long line,
+ double **data_line, int *error );
+DllExport extern long SfDataCol ( SpecFile *sf, long index, long col,
+ double **data_col, int *error );
+DllExport extern long SfDataColByName ( SpecFile *sf, long index,
+ char *label, double **data_col, int *error );
+
+ /*
+ * MCA functions
+ */
+DllExport extern long SfNoMca ( SpecFile *sf, long index, int *error );
+DllExport extern int SfGetMca ( SpecFile *sf, long index, long mcano,
+ double **retdata, int *error );
+DllExport extern long SfMcaCalib ( SpecFile *sf, long index, double **calib,
+ int *error );
+
+ /*
+ * Write and write related functions
+ */
+DllExport extern SpecFileOut *SfoInit ( SpecFile *sf, int *error );
+DllExport extern void SfoClose ( SpecFileOut *sfo );
+DllExport extern long SfoSelectAll ( SpecFileOut *sfo, int *error );
+DllExport extern long SfoSelectOne ( SpecFileOut *sfo, long index,
+ int *error );
+DllExport extern long SfoSelect ( SpecFileOut *sfo, long *list,
+ int *error );
+DllExport extern long SfoSelectRange ( SpecFileOut *sfo, long begin,
+ long end, int *error );
+DllExport extern long SfoRemoveOne ( SpecFileOut *sfo, long index,
+ int *error );
+DllExport extern long SfoRemove ( SpecFileOut *sfo, long *list,
+ int *error );
+DllExport extern long SfoRemoveRange ( SpecFileOut *sfo, long begin,
+ long end, int *error );
+DllExport extern long SfoRemoveAll ( SpecFileOut *sfo, int *error );
+DllExport extern long SfoWrite ( SpecFileOut *sfo, char *name,
+ int *error );
+DllExport extern long SfoGetList ( SpecFileOut *sfo, long **list,
+ int *error );
+ /*
+ * Memory free functions
+ */
+DllExport extern void freeArrNZ ( void ***ptr, long no_lines );
+DllExport extern void freePtr ( void *ptr );
+
+ /*
+ * Sf Tools
+ */
+DllExport extern void SfShow ( SpecFile *sf );
+DllExport extern void SfShowScan ( SpecFile *sf ,long index);
+ /*
+ * Error
+ */
+DllExport extern char *SfError ( int code );
+
+#endif /* SPECFILE_H */