TABLE OF CONTENTS
- 1. /bzip
- 1.1. bzip/bzFile
- 1.2. bzip/bzOpenR
- 1.3. bzip/bzOpenW
- 1.4. bzip/bzReadline
- 1.5. bzip/bzWriteline
- 1.6. bzip/bzCloseR
- 1.7. bzip/bzCloseW
/bzip [ Modules ]
NAME
module bzip
NOTES
This module provides routines for reading and writing bz2-compressed files.
bzip/bzFile [ Types ]
SOURCE
type, public :: bzFile type(c_ptr) :: handle, bzHandle ! file handles character(kind=c_char,len=1000) :: fname ! file name logical :: eof = .false. ! end of file reached? end type bzFile
NOTES
This is a data type to represent bzip files, including file name and file handles:
- 'handle' is used by the stdio functions 'fopen' and 'close'.
- 'bzHandle' is used by the libbz2 functions 'BZ2_bzReadOpen', 'BZ2_bzRead', 'BZ2_bzReadClose' etc.
bzip/bzOpenR [ Functions ]
[ Top ] [ bzip ] [ Functions ]
NAME
type(bzFile) function bzOpenR(fname,iostat)
PURPOSE
Open a bz2 file for reading.
INPUTS
character(len=*) :: fname --- full file name
OUTPUT
- bzFile structure containing valid file handles (if successful)
- integer, OPTIONAL :: iostat --- 0 on success, poitive number on failure
NOTES
If you want to avoid aborting the program when an error occurs on an OPEN, include IOSTAT=ios.
bzip/bzOpenW [ Functions ]
[ Top ] [ bzip ] [ Functions ]
NAME
type(bzFile) function bzOpenW(fname)
PURPOSE
Open a bz2 file for writing.
INPUTS
character(len=*) :: fname --- full file name
OUTPUT
bzFile structure containing valid file handles (if successful)
bzip/bzReadline [ Subroutines ]
[ Top ] [ bzip ] [ Subroutines ]
NAME
subroutine bzReadline(f, buf, length, debug)
PURPOSE
Read one line from a bz2 file.
INPUTS
- type(bzFile) :: f --- bzFile structure (which should have been obtained from a previous bzOpenR)
- integer :: length --- minimal length of the line to read (excluding '\n')
OUTPUT
- character(kind=C_CHAR,len=*) :: buf --- buffer containing the data which has been read from the file
- integer,intent(inout) :: length --- actual length of the line (excluding '\n')
NOTES
The input "length" must be set before calling this routine. Smaller values provide more safety and flexibility, while larger value provide better performance. If the line length is unknown, this can just be set to zero, and the line length will be determined automatically (note: this is slow). If the line length is known, the fastest method is to set "length" to the exact line length (excluding the newline character '\n'). "Length" can also be set to any value between zero and the actual line length (as a trade-off between performance and flexibility). However, it should never be set to values larger than the actual line length, or you will get two lines instead of one.
bzip/bzWriteline [ Subroutines ]
[ Top ] [ bzip ] [ Subroutines ]
NAME
subroutine bzWriteline(f, buf)
PURPOSE
INPUTS
- type(bzFile) :: f --- bzFile structure (which should have been obtained from a previous bzOpenW)
- character(kind=C_CHAR,len=*) :: buf --- buffer containing the data to be written the file
NOTES
'buf' should not be trimmed, since a newline is added, so that one needs a buffer length +1 !
bzip/bzCloseR [ Subroutines ]
[ Top ] [ bzip ] [ Subroutines ]
NAME
subroutine bzCloseR(f)
PURPOSE
Close a bz2 file, which has been opened for reading.
INPUTS
type(bzFile) :: f --- bzFile structure representing the file to be closed
bzip/bzCloseW [ Subroutines ]
[ Top ] [ bzip ] [ Subroutines ]
NAME
subroutine bzCloseW(f,verbose)
PURPOSE
Close a bz2 file, which has been opened for writing.
INPUTS
type(bzFile) :: f --- bzFile structure representing the file to be closed logical, OPTIONAL :: verbose --- if true, print message