SEPlib is a software package, developed at Stanford Exploration Project for all-purpose data processing Claerbout (1991a,b); Dellinger and Tálas (1992); Nichols et al. (1994). SEPlib is based on a special data format. The data is stored in a architecture-independent binary format and can be retrieved in a multi-dimensional array (cube). The description of the data is provided in a separate file, which is called the ``history'' file. The history file is a readable plain text (ASCII) file, which contains a pointer to the binary data (in= tag) and information about the cube dimensions (n1=, n2=, etc), the data type (esize=), the coordinate axis (o1=, d1=, label1=, etc), and the processing history. A C library (callable from Fortran) allows one to write and read data arrays in SEPlib files as well as read parameters from the command line and from history files.
The SEPlib library is a powerful and portable software tool, which has been in a heavy use at SEP in the past fifteen years. However, the limitations of the C programming language make the SEPlib interface more complicated than an ideal data and parameter interface should be. As a result, the main programs, operating on SEPlib files are often cluttered with data-access function calls, prone to typing errors. Recent progress in computer languages, in particular the development of object-oriented programming, allows us to build a simpler and more convenient interface on top of the existing software.
In this paper, I describe a Fortran-90 module, which implements this idea. Although Fortran-90 is not regarded as a ``full-blooded'' object-oriented language , such as C++ or Java, it has a number of object-based features Gray and Roberts (1997), such as operator overloading, optional arguments, private variables, etc., which facilitate an optimal interface design. In our experience, the Fortran-90 interface, implemented in the sep module makes writing SEPlib programs faster and the resulting code shorter and more readable. Additionally, since the implementation details are hidden from the user, they can be improved or changed in the future without affecting the interface itself.
A recent extension to SEPlib is SEPlib90 (also known as SEPlib3D), which provides an additional support for irregular data geometries, typical in 3-D seismic data acquisition Biondi et al. (1996). The sep module currently does not support SEPlib90 functions, although it is possible to add this support in the future. An object-based interface to SEPlib90, called sepf90 was created by Clapp and Crawley (1996b). The sepf90 interface maps a SEPlib90 data file to a specially defined data type. I avoided the natural temptation to use a similar approach in the sep module, because it would take some flexibility out of the original SEPlib interface.