                    GDL - GNU Data Language 
                    =======================

A free IDL (Interactive Data Language) compatible incremental compiler
(capable of running programs written in IDL/GDL).
IDL is a registered trademark of ITT Visual Information Solutions 
(see: http://www.ittvis.com).


HOMEPAGE:
=========

http://gnudatalanguage.sourceforge.net


FEATURES:
=========

Full syntax compatibility with IDL 6.0

All IDL language elements are supported, including:

Pointer, Objects, Structs,
Arrays, System variables,
Common blocks, Assoc variables,
All operators, All datatypes,
_EXTRA, _STRICT_EXTRA and _REF_EXTRA keywords...

The file input output system is fully implemented including full support of 
F77_UNFORMATTED.
(Exception: For formatted I/O the C() sub-codes are not supported yet)

netCDF files are fully supported.
HDF4 files are supported.
Basic support for HDF5 files.

DICOM files are supported via the GDLffDICOM object
(src/pro/dicom subdirectory).

Overall more than 300 library routines are implemented.
For a list enter HELP,/LIB at the command prompt and look for
library routines written in GDL in the src/pro subdirectory.

Graphical output is partially implemented. The PLOT, OPLOT, PLOTS,
XYOUTS, SURFACE, CONTOUR and TV commands (along with WINDOW, WDELETE,
SET_PLOT, WSET, TVLCT, LOADCT) are working (important keywords,
some !P system variable tags and multi-plots are supported) for X windows,
z-buffer and postscript output.

GDL has an interface to python.
Python can be embedded into GDL and GDL can be compiled as a
python module. See the file PYTHON.txt for details.

No GUI support (widgets) is implemented so far.


REQUIREMENTS:
=============

In short:
Obligatory libraries:
plplot      http://plplot.sourceforge.net/source/index.html
gsl         http://www.gnu.org/software/gsl
readline    http://ftp.gnu.org/pub/gnu/readline/readline-4.3.tar.gz
zlib        http://www.zlib.net/

Optional libraries:
ImageMagick http://www.imagemagick.org/www/download.html
netCDF *)   ftp://ftp.unidata.ucar.edu/pub/netcdf
HDF4 *)     ftp://ftp.ncsa.uiuc.edu/HDF/HDF/HDF_Current
HDF5        ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current
FFTW        http://www.fftw.org/download.html
python      http://www.python.org
libproj4    http://members.verizon.net/~vze2hc4d/proj4/

Only with python:
numarray    http://www.stsci.edu/resources/software_hardware/numarray
matplotlib  http://matplotlib.sourceforge.net


*) please see below for potential problems using netCDF and HDF4

NOTE: If you install the libraries as precompiled
packages rather than compiling them from sources, please note that
depending on your distribution, you may need development packages
as well. Examples are (for FC5):
plplot-devel
ImageMagick-devel
ImageMagick-c++-devel

Since version 0.9 GDL compiles Craig Markwardt's CMSVLIB.
If installed, the SAVE and RESTORE commands (data only) are
available through wrapper routines. You get CMSVLIB here: 
http://cow.physics.wisc.edu/~craigm/idl/down/cmsvlib.tar.gz

At least g++ 3.2 (or a similar C++ standard conforming
compiler) is needed for compiling GDL.
Note that due to problems with static casts g++ 3.3.1
does NOT compile GDL, but 3.3.2 and 3.4.1 work fine again.
GDL compiles under Mac OS X (10.2, 10.3) with g++ 3.3 . 

The GNU readline library 4.3 is needed (actually GDL should compile
without, but its very inconvenient to use that way, furthermore
proper event handling for graphic windows requires readline).
You can get it at:
http://ftp.gnu.org/pub/gnu/readline/readline-4.3.tar.gz

As GDL includes graphics support, the plplot library version 5.3
is necessary. To download plplot please look at:
http://plplot.sourceforge.net/source/index.html

Furthermore you need the GNU Scientific Library.
(Minimal version is 1.4, which is now checked via "gsl.m4".
Note that version 1.1.1 was reported to NOT work with GDL)
You find it at:
http://www.gnu.org/software/gsl

The HDF4 format is (not completely yet) supported (thanks to Joel
Gales). If you want to use it, you need the HDF library (here HDF
always means version 4).
Note that if you plan to use netCDF also, it might be necessary to
install HDF4 before netCDF due to same named but different header
files which are overwritten by the HDF4 version otherwise.
HDF4 is required by default. If you don't want to use it, use 
--with-hdf=no
Note that HDF in turn needs other libraries. Check out the
homepage for more information:
http://hdf.ncsa.uiuc.edu/
The HDF library can be downloaded from:
ftp://ftp.ncsa.uiuc.edu/HDF/HDF/HDF_Current

Basic support for HDF5 is now provided (thanks to Peter Messmer).
If you want to use it, you need the HDF5 library.
It is required by default. If you don't want to use it, use 
--with-hdf5=no
Note that HDF5 in turn needs other libraries. Check out the
homepage for more information:
http://hdf.ncsa.uiuc.edu/HDF5
The HDF5 library can be downloaded from:
ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current

The netCDF format is fully supported (thanks to Christopher Lee). If
you want to use netCDF, you need the netCDF library (even if HDF4 is
used, the netCDF library is needed, as the HDF library does not
contain all needed netCDF functions. Note that it might be necessary
to install netCDF after HDF4 due to same named, but different header
files. If the header files of HDF4 and netCDF are in different directories 
make sure, that the directory containing netCDF's version gets searched first,
ie. put an explicit path for netCDF even if it is in the default include path,
eg: --with-netcdf=/usr) 
netCDF is used by default. If you don't want to use it, use 
--with-netcdf=no
as a command line option to 'configure'.
netCDF is available from:
ftp://ftp.unidata.ucar.edu/pub/netcdf

From the HDF4 INSTALL file:
        To use the HDF/MFHDF libraries(libdf.a, libmfhdf.a) with the
        original netCDF library(libnetcdf.a) the HDF/MFHDF distribution
        must be compiled with the option '-DHAVE_NETCDF'. This will
        rename the HDF version of the C-interface(ncxxx) of the netCDF API
        to sd_ncxxx to avoid clashing with the original netCDF API from
        libnetcdf.a. Currently there is no support for renaming the 
        netCDF Fortran interface stubs. As such the HDF/MFHDF distribution 
        must be compiled without fortran support. HDF Users can still access
        HDF/netCDF files through the SDxxx interface but not through the
        ncxxx interface unless the renamed interface is used(sd_ncxxx).

In order to read and write images in several formats
(e.g. JPEG, PNG), GDL uses ImageMagick.
It is required by default. If you don't want to use it, use 
--with-Magick=no
ImageMagick can be obtained from:
http://www.imagemagick.org/www/download.html

The FFTW library is (optionally) used for the FFT function.
It is available at: http://www.fftw.org/download.html
It is NOT used by default.
If you want to use it, use --with-fftw=DIR 
as a command line option to 'configure', where DIR denotes the
directory into which FFTW was installed
('/lib' is appended for the library, '/include' for the include files).
Using FFTW results in an about double as fast FFT function.
Take care that you have to compile the "normal" and the "single"
version of the library (resp. libfftw3.a and libfftw3f.a).
First one is the default. You have to activate the single flag
(./configure --enable-single) when recompiling FFTw3.
Please also notice that the test when runnig GDL configure
"checking for fftw_malloc in -lfftw3... yes"
will failed if libfftw3f.a is missing.
As mentionned in the log. of ./configure,
if FFTw is not used, the default (GSL) fft routine is used instead.

GDL contains now a preliminary support to MAP projection,
using the libproj4 http://members.verizon.net/~vze2hc4d/proj4/
library. Please see MAP_INSTALL file.
It is NOT used by default.
If you want to use it, use --with-libproj4=DIR

GDL has an interface to python (see http://www.python.org). 
GDL can be used as a python module and python can be used from
within GDL. See INSTALL for details on how to build each version.
As so far there are only two example GDL extensions written in python its
use is optional for now but required by default. If you don't want to use
it, use  
--with-python=no
as a command line option to 'configure'.
If you want to use it you need python 2.3 or 2.4 and the python package
'numarray' version 0.9 or later
(http://www.stsci.edu/resources/software_hardware/numarray).
The GDL configure script will determine the installed python version
automatically. For this the python executable must be installed.
The python version can be explictely set with 
--enable-python_version=VERSION# (eg. --enable-python_version=2.3).
Note: For embedding python as it is done by GDL, the python dynamic
library is needed which is *not* build by default. You need to run
'configure' for python with the '--enable-shared' option. Please see
the python README file for details.
For nice graphical output the python package matplotlib
(http://matplotlib.sourceforge.net) is used in one of the examples.
See the file PYTHON.txt for more details.

GDL 0.9 was developed using ANTLR 2.7.4,   
but unless you want to change the grammar (*.g files) you don't need
ANTLR. All relevant ANTLR files are included in the package.
For more information on ANTRL see: http://www.antlr.org

GDL is currently developed using KDevelop 3.2 under the GNU/Linux 
distribution Fedora 7. The KDevelop project file
is included in the tarball, so if you have KDevelop you should be able
to use it with GDL seamlessly.


INSTALLATION:
=============

Please see the INSTALL file for details.


For french readers, please have a look to
http://aramis.obspm.fr/~coulais/IDL_et_GDL/memo_GDL0.8.11.html
which explain how to install GDL and most libraries
from scratch and without being root.


CONTRIBUTIONS:
==============

GDL 0.9 is actively developed, but still in beta state as of
March 2006.
Even though it can already be used for several tasks, there are many
things to be done.
Bug reports, feedback in general and interested people who would
like to join this project are welcome.
Extensions to GDL can be made in C++, GDL or python.
 
Urgent things to do are:
Library functions and procedures,
Porting GDL to other platforms,
Completing the graphical output system,
Testing and test routines written in GDL,
Implementing GUI library functions.


HACKING:
========

please see file HACKING for details.
There you find also information about LINKIMAGE.


CONTACT:
========

Comments are welcome!!! Let me know what you use GDL for. Or if you don't,
why not. Which functionality are you missing/would appreciate most for
comming versions.

Please use for bug reports, complaints, suggestions and comments
the trackers on the project summary page
(http://sourceforge.net/projects/gnudatalanguage),
or write email to m_schellens@users.sourceforge.net
Please put 'GDL' into the subject field.


LICENSE:
========

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.

(It should be included in this package in the file COPYING )
