Listing 4 (record.h)
/* Postman's Sort (R) Version 1.0 Copyright (c) Robert Ramey 1991. All Rights Reserved */ #include "stack.h" /********************************************************************* data structure and data for each data memory held in memory or in the working file **********************************************************************/ /* structure for a record */ typedef union { size_t field[1]; /* displacement of fields with in record */ unsigned char data[1]; /* actual record data */ } RECORD; /* The usage of a RECORD is as follows: field[0] Total length of record field[1] displacement of first field ... field[n] displacement of n th field blk num one character containing block number num data bytes added to permit sorting of numerics starts at data_offset byte data data contained-in record starts at record_offset */ extern size_t record_size; extern size_t record_offset; extern STACK *d_stack; #define blk_offset (record_offset-1) /* data[blk_offset] will contain one of three fields * depending on what state the record is currently in: */ /* when record is stored in stack memory, it contains the number */ /* of the stack frame */ #define rec_frame(ra) (ra->data[blk_offset]) /* when it is stored on disk it contains a flag indicating that is */ /* is the last record in a chain for the current sublist */ #define rec_eob(ra) (ra->data[blk_offset]) /* after the record has been retrieved but before it has been attached */ /* to a new sublist or sent to output this field contains a flag indicating */ /* its provenance. */ #define rec_memflag(ra) (ra->data[blk_offset]) #define rec_size(ra) (ra->field[0]) void rec_init(int, char **); RECORD * rec_variable(); RECORD * rec_fixed(); void rec_output(RECORD *); /* End of File */