📄 arroots.h
字号:
#define ExpandShort(Array,NewSize) \
if (Array.nAlloc < NewSize) { \
if (Array.nAlloc==0) Array.array = \
(unsigned short *) malloc(sizeof(short)*(NewSize)); \
else Array.array = \
(unsigned short *) realloc(Array.array,sizeof(short)*(NewSize)); \
if (Array.array==NULL) { \
RootsSOS("No Free Space\n"); \
abort(); \
} \
memset(Array.array+Array.nAlloc,'\0', \
sizeof(short)*(NewSize-Array.nAlloc)); \
Array.nAlloc=NewSize; \
}
#define ExpandSignedShort(Array,NewSize) \
if (Array.nAlloc < NewSize) { \
if (Array.nAlloc==0) Array.array= \
(short *) malloc(sizeof(short)*(NewSize)); \
else Array.array = \
(short *) realloc(Array.array,sizeof(short)*(NewSize)); \
if (Array.array==NULL) { \
RootsSOS("No Free Space\n"); \
abort(); \
} \
memset(Array.array+Array.nAlloc,'\0', \
sizeof(short)*(NewSize-Array.nAlloc)); \
Array.nAlloc=NewSize; \
}
#define ExpandByte(Array,NewSize) \
if (Array.nAlloc < NewSize) { \
if (Array.nAlloc==0) Array.array = \
(BYTE *) malloc((NewSize)); \
else Array.array= \
(BYTE *) realloc(Array.array,(NewSize)); \
if (Array.array==NULL) { \
RootsSOS("No Free Space\n"); \
abort(); \
} \
memset(Array.array+Array.nAlloc,'\0',NewSize-Array.nAlloc); \
Array.nAlloc=NewSize; \
}
#define ExpandBlock(Array,NewSize) \
if (Array.nAlloc < NewSize) { \
if (Array.nAlloc==0) Array.block = \
(BYTE *) malloc(Array.cpl*(NewSize)); \
else Array.block = \
(BYTE *) realloc(Array.block,Array.cpl*(NewSize)); \
if (Array.block==NULL) { \
RootsSOS("No Free Space\n"); \
abort(); \
} \
memset(Array.block+Array.cpl*Array.nAlloc,'\0', \
Array.cpl*(NewSize-Array.nAlloc)); \
Array.nAlloc=NewSize; \
}
#define ExpandPointer(Array,NewSize) \
if (Array.nAlloc < NewSize) { \
if (Array.nAlloc==0) Array.array = \
(void *) malloc(sizeof(void *)*(NewSize)); \
else Array.array = \
(void *) realloc(Array.array,sizeof(void *)*(NewSize)); \
if (Array.array==NULL) { \
RootsSOS("No Free Space\n"); \
abort(); \
} \
memset(Array.array+Array.nAlloc,(int) NULL, \
sizeof(void *)*(NewSize-Array.nAlloc)); \
Array.nAlloc=NewSize; \
}
#define FreeBlock(Array) \
{if (Array.block!=NULL) \
free(Array.block); \
Array.block=NULL; \
Array.cpl=0; \
Array.nline=0; \
Array.nAlloc=0;}
#define FreeArray(Array) \
{if (Array.array!=NULL) \
free(Array.array); \
Array.array=NULL; \
Array.nAlloc=0;}
#define BlockPointer(Block,index) \
(Block).block+((index)-1)*(Block).cpl
#define MatrixPointer(Matrix,row,col) \
(Matrix).block+((row)-1)*(Matrix).cpl+(col)-1
#define ScanLinkedList(first,next,index) \
for(index=first;index;index=*(next+(index-1)))
#define RemoveFromInputList(First,lnextl,CurrentLine,PreviousLine,NextLine) \
NextLine=*(lnextl+CurrentLine); \
if (!PreviousLine) *(First)=NextLine; \
else *(lnextl+PreviousLine)=(unsigned short)NextLine;
#define InsertIntoOutputList(Output,lnextl,CurrentLine,LastOutput) \
if (!LastOutput) { \
LastOutput=*(Output)=CurrentLine; \
*(lnextl+CurrentLine)=0; \
} \
else { \
*(lnextl+LastOutput)=(unsigned short)CurrentLine; \
LastOutput=CurrentLine; \
*(lnextl+CurrentLine)=0; \
}
// calling sequence optimizer macros
#define BLOCK(Array) (Array).block,&(Array).cpl,&(Array).nline
#define BLKCPL(Array) (Array).block,&(Array).cpl
// -------------------------------------------------------------------------
// functions
// -------------------------------------------------------------------------
extern void chtabm(BYTE *table, long *tabcpl, long *tablin,
BYTE *block, long *cpl, long *nline,
long *field, short type, long *sorti,
int (*compare)(const void *el, const void *e2, size_t count, short typ),
long *inxary);
extern void uqsort(BYTE *block, long *cpl, long *nline, long *field,
short *types, long *nf, long *first,
unsigned short *lnextl, unsigned short *lfrstl,
unsigned short *llastl, unsigned short *temp,
int (*compare)(const void *el, const void *e2, size_t count, short type));
extern void ugroup(long *first, unsigned short *lnextl,
unsigned short *lfrstl, unsigned short *lfrstg,
long *ngroup);
extern void lgor(BYTE *seta, long *cpl, BYTE *setb, long *empty);
extern void lgand(BYTE *seta, long *cpl, BYTE *setb, long *empty);
extern void lgexcl(BYTE *seta, long *cpl, BYTE *setb, long *empty);
extern void setbit(long *first, unsigned short *lnextl, BYTE *string);
extern void setprn(BYTE *string, long *first, unsigned short *lnextl,
long *match);
extern void txtrng(BYTE *call_block, long *cpl, long *field, BYTE *text,
long *tflds2, long *first, unsigned short *lnextl,
long *match);
extern void txtrrg(BYTE *block, long *cpl, long *field, BYTE *text,
long *tflds2, long *first, unsigned short *lnextl,
long *lfrstp);
extern void scanpr(BYTE *block, long *cpl, long *field, BYTE *text,
long *tfield, long *first, unsigned short *lnextl,
long *match);
extern void mskprn(BYTE *block, long *cpl, long *field, BYTE *call_text,
long *tfield, long *first, unsigned short *lnextl,
long *match, BYTE *dlm);
extern void cmpprn(BYTE *call_block, long *cpl, long *fielda, long *fieldb,
long *first, unsigned short *lnextl,
long *gfirst, long *lfirst);
extern long xeq(CompilerArguments *cs);
extern void gregor(long *serial, long *wkday,
long *day, long *month, long *year);
extern int ReadBinFile (BYTE **buf, long *cpl, char *path);
extern BYTE WriteBinFile(BYTE **buf, long *cpl, char *path);
extern BYTE* TextRect(BYTE **CharStream, long *cpl, long *nline,
long *tabdist, long *maxcpl);
extern BYTE ReadTextFile(char *fspec, BlockCplNline *file);
extern BYTE ReadBase(DataBase *db);
extern BYTE WriteBase(DataBase *db);
extern BYTE ReadAndTranslateDirectory(DataBase *db);
extern BYTE FormatAndWriteDirectory(DataBase *db);
extern long compint(CompilerArguments *cs);
extern long complin(CompilerArguments *cs, BYTE *Curlin, long *cpl);
extern long Parse(char *line, long cpl, char **tokens, short *tokcpl);
extern BYTE SetupSourceToTargetMaps(DataBase *sb, DataBase *tb);
extern BYTE MapSubsetToTarget(long *first, unsigned short* lnextl,
DataBase *source, DataBase *target);
extern BYTE CrunchRectangle(BlockCplNline *rect, long tabdist);
extern BYTE CleanDataBase(DataBase *db);
extern BYTE CanonizeDataBase(DataBase *db,
long *nsumBfi, // number of summary fields
long *sumbfi); // summary bfi's
extern BYTE GetBinaryTablePointersAndMap
(BlockCplNline *itab, // sorted input table
DataBase *trgbas, // target base
long *tmaps, // translation map of itab len
long bfis); // field in trgbas
extern BYTE LookupExternalFieldNames(DataBase *db, char *fieldName,
short *bfi, short nfields);
extern BYTE WriteRectangle(BlockCplNline *rect, char *fspec);
extern long arxbin(DataBase *db, short bfi, long line);
extern BYTE* arxcat(BYTE *dest, DataBase *db, short bfi, long line);
extern void setReportConversion(void);
extern void setDefaultConversion(void);
extern void setFullDateConversion(int flag);
extern BYTE cdatec(BYTE *reply, long *repfld, long *ymd);
extern DataBaseInternalValue* arxout(DataBase *db, short bfi, char *string);
extern BYTE* datcat(BYTE *dest, long bin);
extern long arxinx(DataBase *db, short bfi, BYTE *text);
extern void mqueue(MessageQueue *mq, BYTE *text);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -