Annotation of researchv10no/cmd/sort/fsort.h, revision 1.1

1.1     ! root        1: /* Copyright 1990, AT&T Bell Labs */
        !             2: #include <stdio.h>
        !             3: 
        !             4: typedef unsigned char uchar;
        !             5: typedef unsigned short len_t;
        !             6: 
        !             7: /* A record header is immediately followed by its data,
        !             8:    dlen bytes long.  According to variable "keyed", a
        !             9:    key of len klen follows, or is superposed on, the data.
        !            10:    All comparisons are strictly lexicographic. */
        !            11: 
        !            12: struct rec {
        !            13:        struct rec *next;
        !            14:        len_t len[2];   /* lengths of data and key strings */
        !            15:                        /* len[0] bytes of data follow */
        !            16:                        /* then len[1] (often 0) bytes of key */
        !            17: };
        !            18: 
        !            19: #define dlen len[0]    /* (virtual field) length of data string */
        !            20: #define klen len[1]    /* (virtual field) length of key string */
        !            21: #define MAXREC 0xffff  /* bound on dlen or klen */
        !            22: #define MINREC (10*sizeof(struct rec)) /* initial elbow room */
        !            23: 
        !            24: #define data(/*struct rec* */r) ((uchar*)((r)+1))
        !            25: #define key(/*struct rec* */r) (data(r)+(r)->dlen)
        !            26: 
        !            27: #define succ(/*struct rec* */r) ((struct rec*)(data(r) + ((r)->dlen \
        !            28:        + (r)->klen + (sizeof(r)-1))/sizeof(r)*sizeof(r)))
        !            29: 
        !            30: struct list {
        !            31:        struct rec *head;       /* pointer to first record */
        !            32:        struct rec *tail;       /* pointer to last record */
        !            33: };
        !            34: 
        !            35: struct pos {
        !            36:        short fieldno;
        !            37:        short charno;
        !            38: };
        !            39:        
        !            40:        /* describes a field of the key
        !            41:            coder(dataptr, keyptr, len, fieldptr) encodes
        !            42:            data of specified length into a key, observing
        !            43:            parameters of the field */
        !            44: 
        !            45: struct field {
        !            46:        int (*coder)(uchar*, uchar*, int, struct field*);
        !            47:        uchar *trans;           /* translation table */
        !            48:        uchar *keep;            /* deletion table */
        !            49:        uchar rflag;            /* sort in reverse order */
        !            50:        uchar bflag;            /* skip initial blanks */
        !            51:        uchar eflag;            /* bflag on end posn */
        !            52:        uchar style;            /* -k or +pos -pos */
        !            53:        struct pos begin;       /* where the key begins */
        !            54:        struct pos end;         /* where it ends */
        !            55: };
        !            56: 
        !            57: extern struct list *stack;
        !            58: extern struct list *stackmax;
        !            59: extern struct rec *buffer;
        !            60: extern uchar *bufmax;
        !            61: extern struct rec endfile;     /* dummy location with a */
        !            62: #define ENDFILE &endfile       /* distinctive pointer value */
        !            63: 
        !            64: #define NF 30          /* NF-1 = max number of field specs */
        !            65: #define NP 30          /* NP-1 is largest permitted field number */
        !            66: extern struct field fields[NF];
        !            67: extern int nfields;
        !            68: extern struct field accum[NF];
        !            69: extern int naccum;
        !            70: extern int nmerge;
        !            71: 
        !            72: extern char *oname;    /* output file name */
        !            73: extern char *tname[];  /* possible temporary directories */
        !            74: extern char **files;   /* names of input files */
        !            75: extern int nfiles;     /* number of input files */
        !            76: extern int nextfile;   /* number of intermediate files */
        !            77: 
        !            78: extern int keyed;      /* key is separate from data */
        !            79: extern int simplekeyed;        /* key not separate but not trivial */
        !            80: extern int aflag;
        !            81: extern int cflag;
        !            82: extern int mflag;
        !            83: extern int uflag;
        !            84: extern int rflag;
        !            85: extern int sflag;
        !            86: extern int signedrflag; /* 1 or -1 for fields[0].rflag 0 or 1*/
        !            87: extern int tab;                /* tab char for -t */
        !            88: 
        !            89:                        /* translation and deletion tables */
        !            90: extern uchar ident[];
        !            91: extern uchar fold[];
        !            92: extern uchar all[];
        !            93: extern uchar dict[];
        !            94: extern uchar ascii[];
        !            95: 
        !            96:        /* key-making functions and room function, which provides
        !            97:           a bound on how much space the key will take given the
        !            98:            length of the data.  Room for Mcode is 1,
        !            99:           for tcode 2*len+1, for ncode (len+5)/2.
        !           100:            Virtual function would be nice here */
        !           101:    
        !           102: extern int tcode(uchar*, uchar*, int, struct field*);
        !           103: extern int Mcode(uchar*, uchar*, int, struct field*);
        !           104: extern int ncode(uchar*, uchar*, int, struct field*);
        !           105: extern int gcode(uchar*, uchar*, int, struct field*);
        !           106: extern int acode(uchar*, uchar*, int, struct field*);
        !           107: #define room(len) (2*(len)+2)
        !           108: 
        !           109: extern struct rec *getline(struct rec*, FILE*);
        !           110: extern void printout(struct rec*, FILE*, char*);
        !           111: extern void sort(struct list*, int);
        !           112: extern void merge(int);
        !           113: extern void check(char*);
        !           114: extern int fieldarg(char*, char*);
        !           115: extern int fieldcode(uchar*, uchar*, int, uchar*, struct field*, int);
        !           116: extern void fieldwrapup(void);
        !           117: extern void tabinit(void);
        !           118: extern void tabfree(void);
        !           119: extern void optiony(char*);
        !           120: extern void optionk(char*, struct field*, int*);
        !           121: extern void warn(char*, char*, int);
        !           122: extern void fatal(char*, char*, int);
        !           123: extern FILE *fileopen(char*, char*);
        !           124: extern void fileclose(FILE*, char*);
        !           125: extern char *filename(int);
        !           126: extern int overwrite(int);
        !           127: extern void cleanup(int);
        !           128: extern void setsigs(void(*)(int));
        !           129: extern struct rec* listaccum(struct rec*, struct rec*);
        !           130: extern int doaccum(struct rec*, struct rec*);
        !           131: extern void chkaccum(struct field*);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.