149 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/*
 | 
						|
   @(SH) Header
 | 
						|
 | 
						|
   @(C#) PUBBLICHE
 | 
						|
   NOFLDS          : massimo numero di chiavi da ordinare
 | 
						|
 | 
						|
   @(C$) PRIVATE
 | 
						|
   MOSTMEM         : numero massimo di bytes di memoria per il buffer di sort
 | 
						|
   LEASTMEM        : numero minimo di bytes di memoria per il buffer di sort
 | 
						|
   @(VG#) PUBBLICHE
 | 
						|
   s_prm           : struttura di un sort
 | 
						|
   s_prm.rc_len  :   lunghezza del record
 | 
						|
   s_prm.s_fld :   vettore della struttura dei campi di sort
 | 
						|
   s_prm.s_fld[].f_pos       :     prima posizione del campo (contando da 1)
 | 
						|
   s_prm.s_fld[].f_len       :     lunghezza del campo e tipo del campo; se f_len > 0 e' una stringa; se f_len = -1 e' un intero; se f_len = -2 e' un boolean
 | 
						|
   s_prm.s_fld[].ad          :     a = crescente; d = decrescente
 | 
						|
 | 
						|
   @(VG$) PRIVATE
 | 
						|
   bp              : struttura di una sequenza in un buffer di merge
 | 
						|
   bp.rc            :   puntatore al record nel merge buffer
 | 
						|
   bp.rbuf          :   record rimasti nel buffer in questa sequenza di sort
 | 
						|
   bp.rdsk          :   record rimasti nel disco in questa sequenza di sort
 | 
						|
   -------------------------------------------------------------------------------
 | 
						|
   */
 | 
						|
 | 
						|
#ifndef __CSORT_H
 | 
						|
#define __CSORT_H
 | 
						|
 | 
						|
#ifndef __CCOMMON_H
 | 
						|
#include        "ccommon.h"
 | 
						|
#endif
 | 
						|
#ifndef __CCUSTIO_H
 | 
						|
#include        "ccustio.h"
 | 
						|
#endif
 | 
						|
#include "/usr/include/isam.h"
 | 
						|
 | 
						|
#define NOFLDS 10
 | 
						|
#define MOSTMEM  51200
 | 
						|
#define LEASTMEM 10240
 | 
						|
#define MaxFields               100
 | 
						|
#define MKFields                10
 | 
						|
#define MaxKeys                 8
 | 
						|
#define MAXKEYS  8
 | 
						|
 | 
						|
typedef char    FieldName[12] ;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  char                                  SysName[42] __PACKED__ ;
 | 
						|
  RecNoType                             EOD __PACKED__ ;
 | 
						|
  RecNoType                             EOX __PACKED__ ;
 | 
						|
  unsigned short                        LenR __PACKED__ ;
 | 
						|
  RecNoType                             Flags __PACKED__ ;
 | 
						|
  char                                  Des[42] __PACKED__ ;
 | 
						|
  char                                  FCalc[32] __PACKED__ ;
 | 
						|
  char                                  GenPrompt[32] __PACKED__ ;
 | 
						|
} FileDes;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  FieldName                             Name __PACKED__ ;
 | 
						|
  byte                                          TypeF __PACKED__;
 | 
						|
  byte                                          Len __PACKED__ ;
 | 
						|
  byte                                          Dec __PACKED__ ;
 | 
						|
#ifdef __PACK_1__
 | 
						|
  byte                                          junk __PACKED__ ;
 | 
						|
#endif
 | 
						|
  unsigned short                                RecOff __PACKED__ ;
 | 
						|
} RecFieldDes ;
 | 
						|
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  word DupKeys __ALIGNED__ ;
 | 
						|
  byte NkFields __ALIGNED__ ;
 | 
						|
  byte FieldSeq[MKFields] __PACKED__ ;
 | 
						|
  byte FromCh[MKFields] __PACKED__ ;
 | 
						|
  byte ToCh[MKFields] __PACKED__ ;
 | 
						|
} KeyDes ;
 | 
						|
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  short                                         NFields __PACKED__ ;
 | 
						|
  RecFieldDes                   Fd[MaxFields] __PACKED__ ;
 | 
						|
  byte                                          SortFd[MaxFields] __PACKED__ ;
 | 
						|
  short                                         NKeys __PACKED__ ;
 | 
						|
  KeyDes                                        Ky[MaxKeys] __PACKED__ ;
 | 
						|
}       RecDes ;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  int            i;
 | 
						|
  FileDes        *d;
 | 
						|
  RecDes         *r;
 | 
						|
  RecNoType      RecNo;
 | 
						|
  short          ln;
 | 
						|
  short          ft;
 | 
						|
  short          knum;
 | 
						|
  short          newkey;
 | 
						|
  int            mode;
 | 
						|
  struct keydesc k[MAXKEYS + 1];
 | 
						|
} isdef ;
 | 
						|
 | 
						|
 | 
						|
typedef isdef* isfdptr;
 | 
						|
struct s_prm {
 | 
						|
  int rc_len;
 | 
						|
  struct {
 | 
						|
    int f_pos;
 | 
						|
    int f_len;
 | 
						|
    char ad;
 | 
						|
 | 
						|
  } s_fld [NOFLDS];
 | 
						|
};
 | 
						|
struct bp       {       
 | 
						|
  char *rc;
 | 
						|
  /* @(!) 2.3.00.112 */
 | 
						|
  unsigned rbuf;
 | 
						|
  unsigned rdsk;
 | 
						|
  /* @(:) 2.3.00.112 */
 | 
						|
};
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif /* __cplusplus */
 | 
						|
  /*----------------------- FUNZIONI VISIBILI PRIMA PARTE ---------------------*/
 | 
						|
 | 
						|
  int init_sort(struct s_prm *);                                 /* Initialize the sort */
 | 
						|
  void sort(char *);                                   /* Pass records to Sort */
 | 
						|
  char *sort_op(void);                   /* Retrieve sorted records */
 | 
						|
  void sort_stats(void);                 /* Display sort statistics */
 | 
						|
 | 
						|
  /*----------------------- FUNZIONI VISIBILI SECONDA PARTE -------------------*/
 | 
						|
 | 
						|
  void initsortfield (void);
 | 
						|
  int addsortfield (isfdptr, FieldName, int, int, char);
 | 
						|
  int finesortfield (isfdptr);
 | 
						|
 | 
						|
  /* azzera l'elenco dei campi in base a cui eseguire il sort */
 | 
						|
  /* ritorna 0 se tutto ok, -1 se chiamata piu' di NOFLDS volte dopo l'ultimo initsortfield */
 | 
						|
  /* ritorna 0 se tutto ok, -1 se non c'e' sufficiente memoria per procedere */
 | 
						|
 | 
						|
  /*---------------------------------------------------------------------------*/
 | 
						|
#ifdef __cplusplus
 | 
						|
};
 | 
						|
#endif /* __cplusplus */
 | 
						|
#endif /* __CSORT_H */
 |