📄 direc.h
字号:
#ifndef ISTKdirec_h#define ISTKdirec_h /************************************************************************** * ****** ISTK Release 1.2 ***** * * * * * * This code has been produced by numerous authors at the CERN centre for * * high energy physics, Geneve, Switzerland, at the SSC laboratory in * * Dallas, Texas, USA and at the Lawrence Berekeley Laboratory in * * California, USA. * * The latter two institutions perform work under US Government contract. * * The intent of the work is to provide useful code for people who need * * it, with an emphasis on free and collaborative exchange of ideas, * * techniques and implementations. * * Please read the disclaimer and copyright notices contained in the ISTK * * distribution and in distributed applications. * * * **************************************************************************//* Reference release Aug 10 1991 - C G Saltmarsh *//* Has the basics used at CDG & SSC 1988-1991, plus vxworks support*//************************************************************************ * Copyright (C) Frogsoft Corporation, 1987 * * * SSC VERSION 2.0001 April 29 1988 * * Modification history: * * 2.0100 Base release Dec 20 1990 * ***********************************************************************/#ifdef __cplusplus#define EXTERN extern "C"#else#define EXTERN extern#endif#if defined (__STDC__)#define VOIDDEF void#else#define VOIDDEF /* void */#endif typedef char * sds_addr; typedef long sds_off_t; #if (SDS_BIGADDR != 1) /* this will have been set in sds_mdpe.h */typedef long sds_handle;typedef unsigned long sds_code;#define SDS_HFORM %ld#elsetypedef int sds_handle;typedef unsigned int sds_code;#define SDS_HFORM %d#endifstruct record_entry { sds_code number; sds_code elemtype; void *pointer; struct record_entry *next; char *name; int record_depth; };typedef struct record_header sds_record_handle; /* a few NULL pointers */#define DNULL ((struct direc *)0)#define TNULL ((struct type_list *)0)#define HNULL ((struct sds_header *)0)#define INULL ((int *)0)#define SNULL ((char *)0)#define SDS_ALLOCATE ((sds_off_t )0)#define SDS_NOT_ASSEMBLED (sds_off_t)-1#define SDS_IMPOSSIBLE_ADDRESS (sds_off_t )-2#ifdef VMS#define SDS_BLOCKING_FACTOR 512#else#define SDS_BLOCKING_FACTOR 8192#endif#define SDS_DEFAULT_BUFSIZE 0x10000#ifndef L_SET#define L_SET 0#endif #define SDS_BASE_MAGIC (sds_code )0x50420043#define SDS_MAGIC SDS_BASE_MAGIC + (sds_code )((SDS_ARC+1) << 8)#define SDS_MAGIC_BYTESWAP (sds_code )0x43004250#define SDS_VERSION (short )3/* the following are markers to define the end of a tlist... */#define SDS_ENDLIST ((sds_code )0x40000001)/* ... the end of a structure within a tlist... */#define SDS_RETLIST ((sds_code )0x40000000)/* ...and a flag to be &'ed with an internal (not system) pointer to generate a non-primitive element code. */#define SDS_INDLIST ((sds_code )0x80000000)#define SDS_STRUCT SDS_INDLIST#define SDS_LOCALLIST ((sds_code )0x08000000)#define SDS_CODE_MASK ((sds_code )0xff000000)#define SDS_UNION ((sds_code )0x04000000L)#define SDS_RECLIST ((sds_code )0x02000000L)/* this, at the start of a tlist,indicates that it is named */#define SDS_LENLIST ((sds_code )0x10000000)#define SDS_SIZE_ALIGN ((sds_code )0x20000000)/* These things should be hidden from the user as soon as possible */#define SDS_WAS_ALLOCATED (char)0x01#define SDS_EXTERNAL_OBJECT (char)0x02#define SDS_REALLOC (char)0x04#define SDS_DISJOINT_OBJECT (char)0x08#define SDS_SAVE_STATE 1#define SDS_RESTORE_STATE 2#define SDS_GEN_NAME (sds_code )-1#define SDS_READY -1 #define DIR_NAM_LEN 32#define SDS_HEAP_ALLOC 0x01#define SDS_TLIST_ALLOC 0x02#define SDS_DPTR_ALLOC 0x04#define SDS_HEAD_ALLOC 0x08#define SDS_DUP_ALLOC 0x10#define SDS_NORMAL_OBJECT (short)0x00#define SDS_LISTK (short)0x01#define SDS_VARIABLE_LENGTH (short)0x02#define SDS_RECORDS (short)0x04#define SDS_FORTRAN_RECORDS (short)0x08#define SDS_SDC_EVENT (short)0x10#define SDS_EXTERNAL_LENGTH (short)0x20#define SDS_LENGTH_UNDETERMINED 0xffffffff#define SDS_LOADED_MULT 0xfffffffe#define SDS_DATASET_LEVEL 0#define SDS_OBJECT_LEVEL 1#define SDS_SUBOBJECT_LEVEL 2/* Here are things that go in the controlbits region of SDS control *//* First, what to do if you find incoming 64-bit integers */#define SDS_DOUBLE_LONGS_IN_LONGS 0x0#define SDS_TRUNCATE_DOUBLE_LONGS 0x1#define SDS_FLOAT_DOUBLE_LONGS 0x2#define SDS_TRAP_DOUBLE_LONG_OVERFLOW 0x4#define SDS_DOUBLE_LONG_MASK 0x3/* This flag is set in the PER-SDS controlbits: that is, it signals incoming big address data so that offset sizes in eg direc.h must be truncated */#define SDS_FROM_BIGADDR 1/* This bit says that a dataset is actually risc-padded even if it was actually generated on an intel or 680x0 machine. */#define SDS_IS_RISCY 0x80struct sds_header { sds_code magic_number; short controlbits; short version; unsigned short heap_size; unsigned short list_size; };#define BASE_OFFSET sizeof(struct sds_header) struct direc { /* Directory structure for standard dataset*/ sds_off_t offst; /* offset from memory start */ sds_code nelems; /* # elements */ sds_code elemsz; /* size in bytes of 1 element */ sds_code elemcod; /* code of the type */ sds_code wtime; /* last write time */ short structype; /* is it a list etc? */ unsigned char align_type; /* alignment type */ unsigned char illoca; /* reallocation flag */ sds_code obj_name; /* name offset of the object */ };struct type_list { sds_code nelems; /* # elements requested */ sds_code elemcod; /* code of the type */ };struct sds_odesc { char * address; /* start address */ char * name; /* base name */ sds_code elemcod; /* code */ sds_code nelems; /* number of elements */ sds_code nnames; /* number of names */ sds_code size; /* size of one element, in bytes */ char align; /* Byte boundary for alignment */ char startbit; char nbits; char * namelist; /* Pointer to namelist of nnames names */ sds_code maxn; /* system bookkeeping */ sds_code ind; /* system bookkeeping */ };struct sds_res_control { int stack_size; int addr_inc; int thiso;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -