Basic file handling
Data structures
File operations use a file_info-structure defined as below:
struct file_info {
  char *name;
  FILE *fp;
  struct {
    unsigned int compressed : 1; /* is the file compressed */
    unsigned int pipe : 1;       /* the file is a pipe */
    unsigned int eof : 1;        /* has end of line been reached */
  } flags;
  int error;                     /* error code or 0 if OK */
  long lineno;                   /* line number we are on */
};
The fields of the structure are:
  - Name
  
- Used to store the file name
  
- Fp
  
- A FILE pointer to the file. You can use the fi2fp() macro
       to get the FILE pointer from the structure.
  
- Error
  
- Error number or 0 if OK.
  
- Lineno
  
- Line number of the current line. Updated when reading a file
       line by line with the getline
       function.
  
- Flags
  
- Currently defined flags are:
       
	 - Compressed
	 
- File is compressed. Implies that it is a pipe too.
   
- Pipe
	 
- The file is a pipe. Can be a compressed file, a piped
	      command or standard input from/to a pipe.
	 
- Eof
	 
- True if end of file has been encountered. Reset when file
	      is rewinded.
       
 
Functions
struct file_info *open_file(char *name, char *fmode);
int close_file(struct file_info *fi);
char *getline(struct file_info *fi);
  - struct file_info *open_file(char *name, char *fmode)
  
- Open a file for reading or writing. If name is NULL or '-', uses
       standard input or output. Allowed characters in fmode are 'r'
       for reading, 'w' for writing, 'z' for compressed files and 'p'
       for piping output/input to/from a command (name is command
       string). 'p' and 'z' are not required in the fmode because they
       can be guessed from the filename: if the name and with the
       suffix .gz, .z or .Z the z-mode is assumed. If the name starts
       with the unix pipe character '|', the p-mode is assumed and the
       rest of the name is used as the command to be run.
       
       If the file  opening is successful, a pointer to a
       file_info-structure is returned. On error NULL is 
       returned.  
   
- int close_file(struct file_info *fi)
  
- Closes the file fi.
   
- char *getline(struct file_info *fi)
  
- Reads one line from file fi and returns a pointer to the
       line. The pointer returned points to a private buffer of the
       getline function so the next getline call will destroy the
       previous line. Make a copy of the line if you need
       it. Getline can handle lines of up to ABS_STR_LNG
       characters (defined in fileio.h or config.h). 
       Getline returns NULL when EOF is reached or an error
       occurs. The error and eof flags in fi are set accordingly. 
   
- int rewind_file(struct file_info *fi)
  
- Goes to the beginning of file. If file is an ordinary file,
       seeks to the start of file. If the file is a compressed file,
       closes the old file and runs the uncompressing command
       again. Returns 0 on success, error code otherwise.