Files
epics-base/src/cvtDctsdr/dbRecDes.h
1995-11-29 14:27:19 +00:00

164 lines
5.5 KiB
C
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* $Id$
*
* Original Author: Bob Dalesio
* Current Author: Marty Kraimer
* Date: 6-1-90
*
* Experimental Physics and Industrial Control System (EPICS)
*
* Copyright 1991, the Regents of the University of California,
* and the University of Chicago Board of Governors.
*
* This software was produced under U.S. Government contracts:
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
* and (W-31-109-ENG-38) at Argonne National Laboratory.
*
* Initial development by:
* The Controls and Automation Group (AT-8)
* Ground Test Accelerator
* Accelerator Technology Division
* Los Alamos National Laboratory
*
* Co-developed with
* The Controls and Computing Group
* Accelerator Systems Division
* Advanced Photon Source
* Argonne National Laboratory
*
* Modification Log:
* -----------------
* .01 mm-dd-yy iii Comment
* .02 05-18-92 rcz removed extern
* .03 05-18-92 rcz changed macro "GET_PRECTYPDES(" to "GET_PRECTYPDES(precDes,"
* .04 05-18-92 rcz New database access
* .05 08-12-92 jba Removed dbr_field_type from struct fldDes
* .06 09-15-92 jba added short pad field to fldDes
* .07 06-23-93 mrk Moved pad so that fldname is NULL terminated
*/
#ifndef INCdbRecDesCT
#define INCdbRecDesCT
/* conversion types*/
#define CT_DECIMAL 0
#define CT_HEX 1
/* lowfl, highfl */
#define CON 0
#define VAR 1
/* access level types */
#define ASL0 0
#define ASL1 1
#endif
#ifndef INCdbRecDesh
#define INCdbRecDesh
#define PROMPT_SZ 24
union fld_types{
char char_value;
unsigned char uchar_value;
short short_value;
unsigned short ushort_value;
long long_value;
unsigned long ulong_value;
float float_value;
double double_value;
unsigned short enum_value;
};
struct range {
long fldnum;
long pad;
union fld_types value;
};
struct fldDes{ /* field description */
char prompt[PROMPT_SZ]; /*Prompt string for DCT*/
char fldname[FLDNAME_SZ];/*field name */
short fldnamePad; /*make sure fldname is NULL termated */
short offset; /*Offset in bytes from beginning of record*/
short size; /*length in bytes of a field element */
short special; /*Special processing requirements */
short field_type; /*Field type as defined in dbFldTypes.h */
short process_passive;/*should dbPutField process passive */
short choice_set; /*index of choiceSet GBLCHOICE & RECCHOICE*/
short cvt_type; /*Conversion type for DCT */
short promptflag; /*Does DCT display this field */
short lowfl; /*Is range1 CON or VAR */
short highfl; /*Is range2 CON or VAR */
short interest; /*interest level */
short as_level; /*access security level */
short pad2;
union fld_types initial;/*initial value */
struct range range1; /*Low value for field (Used by DCT) */
struct range range2; /*High value for field (Used by DCT) */
};
struct recTypDes{ /* record type description */
short rec_size; /* size of the record */
short no_fields; /* number of fields defined */
short no_prompt; /* number of fields to configure*/
short no_links; /* number of links */
short *link_ind; /* addr of array of ind in apFldDes*/
unsigned long *sortFldName; /* addr of array of sorted fldname*/
short *sortFldInd; /* addr of array of ind in apFldDes*/
struct fldDes **papFldDes; /* ptr to array of ptr to fldDes*/
};
struct recDes{ /* record description */
long number; /*number of recTypDes*/
struct recTypDes **papRecTypDes;/*ptr to arr of ptr to recTypDes*/
};
/***************************************************************************
* Except that some ptr could be NULL the following is a valid reference
* precDes->papRecTypDes[i]->papFldDes[j]-><field>
*
* The memory layout is as follows:
*
* precDes->recDes
* number
* papRecTypDes->[1]
* [2]->papFldDes->[0]
* [1]->fldDes
* prompt
* fldname
* ...
*
* sortFldName[*] is a sorted array of blank padded fieldnames
* that can be interpeted as a long which must be 32 bits
* Note that FLDNAME_SZ MUST be 4
* sortFldInd[*] is an array of indices for sortFldName.
* Each element of this array is an index into papFldDes[*].
*****************************************************************************/
/*****************************************************************************
* The following macro returns NULL or a ptr to a fldDes structure
* A typical usage is:
*
* struct fldDes *pfldDes;
* if(!(pfldDes=GET_PFLDDES(precTypDes,ind)
****************************************************************************/
#define GET_PFLDDES(PRECTYPDES,IND_FLD)\
(\
(PRECTYPDES)\
?(\
( ((IND_FLD)<0) ||\
((IND_FLD)>=((struct recTypDes *)(PRECTYPDES))->no_fields) )\
? NULL\
: (((struct recTypDes *)(PRECTYPDES))->papFldDes[(IND_FLD)])\
)\
: NULL\
)
/*****************************************************************************
* The following macro returns NULL or a ptr to a recTypDes structure
* A typical usage is:
*
* struct recTypDes *precTypDes;
* if(!(precTypDes=GET_PRECTYPDES(precDes,ind);
****************************************************************************/
#define GET_PRECTYPDES(PRECDES,IND_REC)\
(\
(PRECDES)\
?(\
( ((IND_REC)<1) || ((IND_REC)>=(PRECDES)->number) )\
? NULL\
: ((PRECDES)->papRecTypDes[(IND_REC)])\
)\
: NULL\
)
#endif