dan31.c File Reference

Library for Data Analysis; Memory management functions. More...

#include "vxWorks.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "taskLib.h"
#include "float.h"
#include "application.conf"

Defines

#define USHPOS(i)   USHPUNI[(i)].ushpos
#define USHPCH(i)   USHPUNI[(i)].ushpchr
#define PNTUSH(i)   (usphdr + USHPOS(i))
#define SWAPBYTES
#define NOSWAP
#define NOSUPP
#define CVTvaxDATA   SWAPBYTES
#define CVTvxwDATA   NOSWAP
#define CVTultDATA   SWAPBYTES
#define CVTosfDATA   SWAPBYTES
#define CVTlnxDATA   SWAPBYTES
#define xHDFRE   htotal->hdata.stddat.hdfree
#define MAXALvax   2
#define MAXALvxw   2
#define MAXALult   32
#define MAXALosf   32
#define MAXALlnx   4
#define UNKNOWN
#define UNSUPP
#define NOSWAP
#define SWAPBYTES
#define VAXF2LITTLES
#define VAXF2BIGS
#define VAXD2LITTLET
#define VAXD2BIGT
#define MAXALIGN   MAXALvxw
#define CVTvaxINT   SWAPBYTES
#define CVTvaxFLT   VAXF2BIGS
#define CVTvaxDBL   VAXD2BIGT
#define CVTvxwINT   NOSWAP
#define CVTvxwFLT   NOSWAP
#define CVTvxwDBL   NOSWAP
#define CVTultINT   SWAPBYTES
#define CVTultFLT   SWAPBYTES
#define CVTultDBL   SWAPBYTES
#define CVTosfINT   SWAPBYTES
#define CVTosfFLT   SWAPBYTES
#define CVTosfDBL   SWAPBYTES
#define CVTlnxINT   SWAPBYTES
#define CVTlnxFLT   SWAPBYTES
#define CVTlnxDBL   SWAPBYTES
#define CVTunknown   UNKNOWN
#define xIDHDR   htempo->hdata.stddat.idhdr
#define xHDFRE   ((HEADER *)header)->hdata.stddat.hdfree
#define xIDHDR   ((HEADER *)header)->hdata.stddat.idhdr

Functions

static int cvthdr (HEADER *htotal, HEADER *htempo)
static void mkush (char byte0, char byte1, char *phdr)
int sOpen (void)
int sClose (void)
void SwiSpe (int spenum)
int SwiHdr (char *idhdr, char *idprg)
void * Illacc (char *cccc)
void sZero (void)
DATAC sChanl (unsigned long chan_numb)
int CvtHdr (HEADER *htotal, HEADER *htempo)
int PutUsh (int mode, char *datid, char *data, int datlen)
int GetUsh (char *datid, char *data, int datlen)
int RemUsh (char *datid)

Variables

HTYPES htypes [MAXHTYPS]
SPEPNTR spepntr [MAXSPECS]
int iselspe = 0
SPEPNTRpselspe = &spepntr[0]
UINT4 iplanes = 1
char * usphdr


Detailed Description

Library for Data Analysis; Memory management functions.

Author:
Kurt Huber; Strahlenzentrum J.L.-Universitaet GIESSEN
Date:
08.02.1988
Version:
15.08.2008
modification history
--------------------
15aug08 kHu	DOXYGEN comments added
20apr07 kHu	DIM3SPEC, IPLANES, NPLANE
16apr03 kHu	Fit gemacht fuer -Wall GCC-Option
25mar03 kHu	sChanl(), CvtHdr() voellig ueberarbeitet
12mar03 kHu	Portierung nach Linux
12sep02 kHu	XSPHDR=XHSPCD=NULL raus aus sClose()
16aug02 kHu	Direktzugriff zu Header in Messprogramm
		mkush(), RemUsh() neu
04jul02 kHu	USHPOS(i) sorgfaeltiger abgeprueft (access violations)
18jun02 kHu	OSF1 Typ in PutUsh und GetUsh
10may02 kHu	dan30.c:checkhdr() -> dan31.c:SwiHdr()
06may02 kHu	sChanl(): Alpha-OSF type spectrum neu
28may02 kHu	sZero neu
29mar00 kHu	STATUS bereinigt
09mar00 kHu	Inpar(1/3): TOTLEN IHDLEN BLOCKT
09mar00 kHu	SwiSpe(): transfer common status bits
15feb00 kHu	erweitert auf verschiedene Header Typen
11nov99 kHu	Newprog Standard
02sep99 kHu	Abschluss Pruefung
24aug99 kHu	ueberarbeitet
19jul99 kHu	neue Struktur
28apr99 kHu	Multiple spectra
24feb99 kHu	User data block in header
21jan99 kHu	Header Konvertierung
13jan99 kHu	Umstellung auf dan-Library
01sep98 kHu	OSF1-Alpha Portierung
30aug96	kHu	ueberarbeitet auf MCA Standard
17nov95	kHu	Ultrix, VxWorks Portierung (C)
08feb88 kHu	PDP11 Version (F77, Macro-11)

Define Documentation

#define CVTlnxDATA   SWAPBYTES

#define CVTlnxDBL   SWAPBYTES

#define CVTlnxFLT   SWAPBYTES

#define CVTlnxINT   SWAPBYTES

#define CVTosfDATA   SWAPBYTES

#define CVTosfDBL   SWAPBYTES

#define CVTosfFLT   SWAPBYTES

#define CVTosfINT   SWAPBYTES

#define CVTultDATA   SWAPBYTES

#define CVTultDBL   SWAPBYTES

#define CVTultFLT   SWAPBYTES

#define CVTultINT   SWAPBYTES

#define CVTunknown   UNKNOWN

#define CVTvaxDATA   SWAPBYTES

#define CVTvaxDBL   VAXD2BIGT

#define CVTvaxFLT   VAXF2BIGS

#define CVTvaxINT   SWAPBYTES

#define CVTvxwDATA   NOSWAP

#define CVTvxwDBL   NOSWAP

#define CVTvxwFLT   NOSWAP

#define CVTvxwINT   NOSWAP

#define MAXALIGN   MAXALvxw

#define MAXALlnx   4

#define MAXALosf   32

#define MAXALult   32

#define MAXALvax   2

#define MAXALvxw   2

#define NOSUPP

Value:

{       /* Platform not supported */    \
/*      Termnl(7,3,"sChanl(): Platform not supported"); */ \
        return 0xffffffff;              \
    }

#define NOSWAP

Value:

/* Don't swap bytes */                  \
        for(j=0; j<hstot; j++) {                                \
            *(putp+ppos) = *(getp+gpos);                        \
            gpos++;                                             \
            ppos++;                                             \
        }                                                       \

#define NOSWAP

Value:

{       /* Don't swap bytes */  \
        return SPEDATA[chan_numb];              \
    }

#define PNTUSH (  )     (usphdr + USHPOS(i))

#define SWAPBYTES

Value:

/* Swap bytes, Big <-> Little */        \
        for(j=0; j<hsnum; j++) {                                \
            for(k=0; k<hslen; k++) {                            \
                *(putp+ppos+hslen-1-k) = *(getp+gpos+k);        \
            }                                                   \
            gpos += hslen;                                      \
            ppos += hslen;                                      \
        }                                                       \

#define SWAPBYTES

Value:

{       /* Swap bytes */        \
        union {                                 \
            DATAC channel;                      \
            DATAB byte[4];                      \
        } in, out;                              \
                                                \
        in.channel = SPEDATA[chan_numb];        \
        out.byte[0] = in.byte[3];               \
        out.byte[1] = in.byte[2];               \
        out.byte[2] = in.byte[1];               \
        out.byte[3] = in.byte[0];               \
        return out.channel;                     \
    }

#define UNKNOWN

Value:

/* Unknown data type */                 \
        Termnl(7,3,"Cannot convert header of spectrum, "        \
                "unknown data type!");                          \
        return ERROR;                                           \

#define UNSUPP

Value:

/* Unsupported data type */             \
        Termnl(7,3,"Cannot convert header of spectrum, "        \
                "unsupported data type!");                      \
        return ERROR;                                           \

#define USHPCH (  )     USHPUNI[(i)].ushpchr

#define USHPOS (  )     USHPUNI[(i)].ushpos

#define VAXD2BIGT

Value:

/* VAX D to Big T */                    \
        for(j=0; j<hsnum; j++) {                                \
            union {                                             \
                UINT1 u1[8];                                    \
                UINT4 u4[2];                                    \
                INT2 i2[4];                                     \
                REAL8 f8[1];                                    \
            } tmp;                                              \
            /* Read data bytes */                               \
            tmp.u1[7] = *(getp+gpos+6);                         \
            tmp.u1[6] = *(getp+gpos+7);                         \
            tmp.u1[5] = *(getp+gpos+4);                         \
            tmp.u1[4] = *(getp+gpos+5);                         \
            tmp.u1[3] = *(getp+gpos+2);                         \
            tmp.u1[2] = *(getp+gpos+3);                         \
            tmp.u1[1] = *(getp+gpos+0);                         \
            tmp.u1[0] = *(getp+gpos+1);                         \
            /* Make mantissa */                                 \
            tmp.u4[1] = (tmp.u4[1] >> 3) | (tmp.u4[0] << 29);   \
            tmp.u4[0] = (tmp.u4[0] & 0x7fffffff) >> 3;          \
            /* Make 11 bit exponent -2 */                       \
            tmp.i2[0] = tmp.i2[0] -0x820 +0x4000;               \
            /* Add sign */                                      \
            tmp.u1[0] |= (*(getp+gpos+1) & 0x80);               \
            *((REAL8 *)(putp+ppos+0)) = tmp.f8[0];              \
            gpos += hslen;                                      \
            ppos += hslen;                                      \
        }                                                       \

#define VAXD2LITTLET

Value:

/* VAX D to Little T */                 \
        for(j=0; j<hsnum; j++) {                                \
            union {                                             \
                UINT1 u1[8];                                    \
                UINT4 u4[2];                                    \
                INT2 i2[4];                                     \
                REAL8 f8[1];                                    \
            } tmp;                                              \
            /* Read data bytes */                               \
            tmp.u1[0] = *(getp+gpos+6);                         \
            tmp.u1[1] = *(getp+gpos+7);                         \
            tmp.u1[2] = *(getp+gpos+4);                         \
            tmp.u1[3] = *(getp+gpos+5);                         \
            tmp.u1[4] = *(getp+gpos+2);                         \
            tmp.u1[5] = *(getp+gpos+3);                         \
            tmp.u1[6] = *(getp+gpos+0);                         \
            tmp.u1[7] = *(getp+gpos+1);                         \
            /* Make mantissa */                                 \
            tmp.u4[0] = (tmp.u4[0] >> 3) | (tmp.u4[1] << 29);   \
            tmp.u4[1] = (tmp.u4[1] & 0x7fffffff) >> 3;          \
            /* Make 11 bit exponent -2 */                       \
            tmp.i2[3] = tmp.i2[3] -0x820 +0x4000;               \
            /* Add sign */                                      \
            tmp.u1[7] |= (*(getp+gpos+1) & 0x80);               \
            *((REAL8 *)(putp+ppos+0)) = tmp.f8[0];              \
            gpos += hslen;                                      \
            ppos += hslen;                                      \
        }                                                       \

#define VAXF2BIGS

Value:

/* VAX F to Big S */                    \
        for(j=0; j<hsnum; j++) {                                \
            union {                                             \
                UINT1 u1[4];                                    \
                INT2 i2[2];                                     \
                REAL4 f4[1];                                    \
            } tmp;                                              \
            /* Read data bytes */                               \
            tmp.u1[3] = *(getp+gpos+2);                         \
            tmp.u1[2] = *(getp+gpos+3);                         \
            tmp.u1[1] = *(getp+gpos+0);                         \
            tmp.u1[0] = *(getp+gpos+1);                         \
            /* Make exponent -2 */                              \
            tmp.i2[0] = (tmp.i2[0] & 0x7fff) -0x0100;           \
            if(tmp.i2[0] < 0) { /* Underflow */                 \
                tmp.f4[0] = FLT_MIN;                            \
            } else {    /* Add sign */                          \
                tmp.u1[0] |= (*(getp+gpos+1) & 0x80);           \
            }                                                   \
            *((REAL4 *)(putp+ppos+0)) = tmp.f4[0];              \
            gpos += hslen;                                      \
            ppos += hslen;                                      \
        }                                                       \

#define VAXF2LITTLES

Value:

/* VAX F to Little S */                 \
        for(j=0; j<hsnum; j++) {                                \
            union {                                             \
                UINT1 u1[4];                                    \
                INT2 i2[2];                                     \
                REAL4 f4[1];                                    \
            } tmp;                                              \
            /* Read data bytes */                               \
            tmp.u1[0] = *(getp+gpos+2);                         \
            tmp.u1[1] = *(getp+gpos+3);                         \
            tmp.u1[2] = *(getp+gpos+0);                         \
            tmp.u1[3] = *(getp+gpos+1);                         \
            /* Make exponent -2 */                              \
            tmp.i2[1] = (tmp.i2[1] & 0x7fff) -0x0100;           \
            if(tmp.i2[1] < 0) { /* Underflow */                 \
                tmp.f4[0] = FLT_MIN;                            \
            } else {    /* Add sign */                          \
                tmp.u1[3] |= (*(getp+gpos+1) & 0x80);           \
            }                                                   \
            *((REAL4 *)(putp+ppos+0)) = tmp.f4[0];              \
            gpos += hslen;                                      \
            ppos += hslen;                                      \
        }                                                       \

#define xHDFRE   ((HEADER *)header)->hdata.stddat.hdfree

#define xHDFRE   htotal->hdata.stddat.hdfree

#define xIDHDR   ((HEADER *)header)->hdata.stddat.idhdr

#define xIDHDR   htempo->hdata.stddat.idhdr


Function Documentation

int CvtHdr ( HEADER *  htotal,
HEADER *  htempo 
)

static int cvthdr ( HEADER *  htotal,
HEADER *  htempo 
) [static]

int GetUsh ( char *  datid,
char *  data,
int  datlen 
)

void* Illacc ( char *  cccc  ) 

static void mkush ( char  byte0,
char  byte1,
char *  phdr 
) [static]

int PutUsh ( int  mode,
char *  datid,
char *  data,
int  datlen 
)

int RemUsh ( char *  datid  ) 

DATAC sChanl ( unsigned long  chan_numb  ) 

int sClose ( void   ) 

int sOpen ( void   ) 

int SwiHdr ( char *  idhdr,
char *  idprg 
)

void SwiSpe ( int  spenum  ) 

void sZero ( void   ) 


Variable Documentation

HTYPES htypes[MAXHTYPS]

Initial value:

UINT4 iplanes = 1

int iselspe = 0

SPEPNTR spepntr[MAXSPECS]

Initial value:

char* usphdr


Generated on Wed Oct 15 16:17:15 2008 for Experiment-Software by  doxygen 1.5.6