gdl-0.9.7/0000775000175100017510000000000013040614766012170 5ustar coulaiscoulaisgdl-0.9.7/CMakeLists.txt0000664000175100017510000011434413040614524014727 0ustar coulaiscoulais# # copyright : (c) 2010 Maxime Lenoir and Alain Coulais # # 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. # # tested with 2.4 and doesn't seem to run. # SA: 2.6 supports simplified if constructs, e.g. endif() cmake_minimum_required(VERSION 2.6 FATAL_ERROR) project(GDL) # X.X.X CVS becomes release X.X.X+1 set(VERSION "0.9.7") enable_testing() include(CheckIncludeFile) include(CheckIncludeFileCXX) include(CheckLibraryExists) include(CheckFunctionExists) include(CheckSymbolExists) include(CheckCSourceRuns) include(CheckCXXSourceCompiles) include(FindPkgConfig) include(FindPackageHandleStandardArgs) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/CMakeModules) #### Default cached values set(PYTHON_MODULE OFF CACHE BOOL "GDL: Build GDL as a Python module ?") set(X11 ON CACHE BOOL "GDL: Enable X11 ?") set(X11DIR "" CACHE PATH "GDL: Specify X11 directory tree") # GNU Readline or BSD Editline ? if Readline OK, we don't look for Editline. set(READLINE ON CACHE BOOL "GDL: Enable GNU Readline ?") set(READLINEDIR "" CACHE PATH "GDL: Specify the GNU Readline directory tree") set(EDITLINE ON CACHE BOOL "GDL: Enable BSD Editline ?") set(EDITLINEDIR "" CACHE PATH "GDL: Specify the BSD Editline directory tree") set(OLDPLPLOT OFF CACHE BOOL "GDL: Enable old plplot ?") set(PLPLOTDIR "" CACHE PATH "GDL: Specify the plplot directory tree") set(GSLDIR "" CACHE PATH "GDL: Specify the GSL directory tree") set(ZLIBDIR "" CACHE PATH "GDL: Specify the Zlib directory tree") set(WXWIDGETS ON CACHE BOOL "GDL: Enable WxWidgets ?") set(WXWIDGETSDIR "" CACHE PATH "GDL: Specify WxWidgets directory tree") set(UDUNITS OFF CACHE BOOL "GDL: Enable UDUNITS-2 ?") set(UDUNITSDIR "" CACHE PATH "GDL: Specify the UDUNITS-2 directory tree") set(EIGEN3 ON CACHE BOOL "GDL: Enable Eigen3 ?") set(EIGEN3DIR "" CACHE PATH "GDL: Specify the Eigen3 directory tree") set(PSLIB ON CACHE BOOL "GDL: Enable pslib ?") set(PSLIBDIR "" CACHE PATH "GDL: Specify the pslib directory tree") set(PNGLIB ON CACHE BOOL "GDL: Enable libpng ?") set(PNGLIBDIR "" CACHE PATH "GDL: Specify the libpng directory tree") set(GRIB OFF CACHE BOOL "GDL: Enable Grib ?") set(GRIBDIR "" CACHE PATH "GDL: Specifiy the GRIB directory tree") set(QHULL OFF CACHE BOOL "GDL: Enable Qhull ?") set(QHULLDIR "" CACHE PATH "GDL: Specifiy the QHULL directory tree") # GraphicsMagick is a good alternative to ImageMagick, if GM OK, we don't look for IM set(GRAPHICSMAGICK ON CACHE BOOL "GDL: Enable GraphicsMagick ?") set(GRAPHICSMAGICKDIR "" CACHE PATH "GDL: Specify the GraphicsMagick directory tree") set(MAGICK ON CACHE BOOL "GDL: Enable ImageMagick ?") set(MAGICKDIR "" CACHE PATH "GDL: Specifiy the ImageMagick directory tree") set(NETCDF ON CACHE BOOL "GDL: Enable NetCDF ?") set(NETCDFDIR "" CACHE PATH "GDL: Specifiy the netCDF directory tree") set(HDF ON CACHE BOOL "GDL: Enable Hdf ?") set(HDFDIR "" CACHE PATH "GDL: Specifiy the HDF directory tree") set(HDF5 ON CACHE BOOL "GDL: Enable Hdf5 ?") set(HDF5DIR "" CACHE PATH "GDL: Specifiy the HDF5 directory tree") set(FFTW ON CACHE BOOL "GDL: Enable FFTW ?") set(FFTWDIR "" CACHE PATH "GDL: Specifiy the FFTW directory tree") set(LIBPROJ4 OFF CACHE BOOL "GDL: Enable LIBPROJ4 ?") set(LIBPROJ4DIR "" CACHE PATH "GDL: Specifiy the LIBPROJ4 directory tree") set(MPICH OFF CACHE BOOL "GDL: Enable MPICH ?") set(MPICHDIR "" CACHE PATH "GDL: Specify the MPICH (experimental) directory tree") set(PYTHON ON CACHE BOOL "GDL: Enable Python ?") set(PYTHONDIR "" CACHE PATH "GDL: Specifiy the use Python directory tree") set(PYTHONVERSION "" CACHE STRING "GDL: Specify the Python version to use") set(GSHHS ON CACHE BOOL "GDL: Enable GSHHS ?") set(GSHHSDIR "" CACHE PATH "GDL: Specifiy the GSHHS directory tree") if(NOT WIN32) set(NCURSESDIR "" CACHE PATH "GDL: Specify the ncurses (or curses) directory tree") endif(NOT WIN32) set(OPENMP ON CACHE BOOL "GDL: Enable OpenMP ?") # Third party libraries set(JASPERDIR "" CACHE PATH "GDL: Specify the JasPer directory tree") set(JPEGDIR "" CACHE PATH "GDL: Specify the JPEG directory tree") set(SZIPDIR "" CACHE PATH "GDL: Specify the SZip directory tree") set(GDL_DATA_DIR "/share/gnudatalanguage" CACHE PATH "GDL: data directory relative to CMAKE_INSTALL_PREFIX") # check for 64-bit OS if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) set(HAVE_64BIT_OS 1) endif(${CMAKE_SIZEOF_VOID_P} EQUAL 8) #### check headers and libraries # dl check_library_exists(dl dlopen "" HAVE_DL) if(HAVE_DL) set(LIBRARIES ${LIBRARIES} dl) endif(HAVE_DL) # malloc stats check_function_exists(malloc_zone_statistics HAVE_MALLOC_ZONE_STATISTICS) check_function_exists(sbrk HAVE_SBRK) check_function_exists(mallinfo HAVE_MALLINFO) # mallocs check_include_file(malloc.h HAVE_MALLOC_H) check_include_file(malloc/malloc.h HAVE_MALLOC_MALLOC_H) # locale check_include_file(locale.h HAVE_LOCALE_H) # std includes.. check_include_file(stdint.h HAVE_STDINT_H) check_include_file(stdlib.h HAVE_STDLIB_H) check_include_file(string.h HAVE_STRING_H) check_include_file(strings.h HAVE_STRINGS_H) check_include_file(sys/stat.h HAVE_SYS_STAT_H) check_include_file(sys/types.h HAVE_SYS_TYPES_H) check_include_file(unistd.h HAVE_UNISTD_H) #check_include_file(ext/stdio_filebuf.h HAVE_EXT_STDIO_FILEBUF_H) #sometimes it compiles but stdio_filebuf is only in gcc-x-y-z directory tree... # would be silly not to use this functionality if present, so recheck: if (HAVE_EXT_STDIO_FILEBUF_H) else (HAVE_EXT_STDIO_FILEBUF_H) check_cxx_source_compiles(" #include int main(int argc, char **argv) { int i=0; i+=1; }" REALLY_HAVE_EXT_STDIO_FILEBUF_H) endif (HAVE_EXT_STDIO_FILEBUF_H) if (REALLY_HAVE_EXT_STDIO_FILEBUF_H) message(STATUS "INFO: will use GNU extensions for STDIO (useful for compressed I/O) since it seems accepted by your c++ compiler.") set (HAVE_EXT_STDIO_FILEBUF_H 1) endif (REALLY_HAVE_EXT_STDIO_FILEBUF_H) # dlfcn.h check_include_file(dlfcn.h HAVE_DLFCN_H) # inttypes.h check_include_file(inttypes.h HAVE_INTTYPES_H) # nexttoward check_library_exists(m nexttoward "" HAVE_NEXTTOWARD) # mpi check_include_file(mpi.h HAVE_MPI_H) # SA: whithout it compilation of antlr fails if there's a conflicting # version of antlr in system-wide directories include_directories(src) if (NOT WIN32) # Ncurses MANDATORY for readline on POSIX # -DNCURSESDIR=DIR set(CMAKE_PREFIX_PATH ${NCURSESDIR}) set(CURSES_NEED_NCURSES TRUE) find_package(Curses QUIET COMPONENTS initscr) mark_as_advanced(CURSES_CURSES_H_PATH CURSES_FORM_LIBRARY CURSES_HAVE_CURSES_H) if(CURSES_FOUND) set(HAVE_LIBNCURSES 1) set(LIBRARIES ${LIBRARIES} ${CURSES_LIBRARIES}) include_directories(${CURSES_INCLUDE_DIR}) else(CURSES_FOUND) # search for curses set(CURSES_NEED_NCURSES FALSE) find_package(Curses COMPONENTS initscr) set(HAVE_LIBCURSES ${CURSES_FOUND}) if(CURSES_FOUND) set(LIBRARIES ${LIBRARIES} ${CURSES_LIBRARIES}) include_directories(${CURSES_INCLUDE_DIR}) else(CURSES_FOUND) message(FATAL_ERROR "(N)Curses was not found.\n" "Use -DNCURSESDIR=DIR to specify the curses directory tree.\n" "(suitable Debian/Ubuntu package: libncurses-dev)\n") endif(CURSES_FOUND) endif(CURSES_FOUND) endif (NOT WIN32) # GNU Readline (GNU/Linux or OSX) or BSD Editline (OSX) # -DREADLINE=ON|OFF # -DREADLINEDIR=DIR or -DEDITLINEDIR=DIR if(READLINE) set(CMAKE_PREFIX_PATH ${READLINEDIR}) find_package(Readline QUIET) set(HAVE_LIBREADLINE ${READLINE_FOUND}) if(READLINE_FOUND) if(NOT WIN32) # readline needs (n)curses (not on Windows) set(CMAKE_REQUIRED_LIBRARIES ${CURSES_LIBRARIES}) endif(NOT WIN32) check_library_exists("${READLINE_LIBRARIES}" rl_get_screen_size "" RL_GET_SCREEN_SIZE) if(NOT RL_GET_SCREEN_SIZE) message(STATUS "WARNING: Older GNU readline without rl_get_screen_size was found.\n" "For resized terminals the size might not be updated correctly.\n" "If this is a problem please install a recent version of readline.") endif(NOT RL_GET_SCREEN_SIZE) set(LIBRARIES ${LIBRARIES} ${READLINE_LIBRARIES}) include_directories(${READLINE_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES) else(READLINE_FOUND) if(EDITLINE) message(STATUS "WARNING: GNU readline was not found, now looking for BSD Editline.\n") else(EDITLINE) message(FATAL_ERROR "GNU readline was not found.\n" "Use -DREADLINEDIR=no to explicitely disable it.\n" "(suitable Debian/Ubuntu package: libreadline-gplv2-dev)\n" "(suitable Fedora package: readline-devel)") endif(EDITLINE) endif(READLINE_FOUND) endif(READLINE) # # if Readline found, we do not look for Editline # if(READLINE_FOUND) if (EDITLINE) message(STATUS "INFO: We prefer to use Readline than Editline.\n" "Feedback welcome on OSX Readline ...") set(EDITLINE OFF) endif(EDITLINE) endif(READLINE_FOUND) # BSD Editline (a BSD clone of GNU Readline, present by default on OSX) # -DEDITLINE=ON|OFF # -DEDITLINEDIR=DIR if(EDITLINE) set(CMAKE_PREFIX_PATH ${EDITLINEDIR}) find_package(Editline QUIET) set(HAVE_LIBEDITLINE ${EDITLINE_FOUND}) if(EDITLINE_FOUND) if(NOT WIN32) # readline needs (n)curses (not on Windows) set(CMAKE_REQUIRED_LIBRARIES ${CURSES_LIBRARIES}) endif(NOT WIN32) set(LIBRARIES ${LIBRARIES} ${EDITLINE_LIBRARIES}) include_directories(${EDITLINE_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES) else(EDITLINE_FOUND) message(FATAL_ERROR "requested BSD Editline was not found.\n" "Use -DEDITLINE=no to explicitely disable it.\n") endif(EDITLINE_FOUND) endif(EDITLINE) # zlib MANDATORY # -DZLIBDIR=DIR set(CMAKE_PREFIX_PATH ${ZLIBDIR}) find_package(ZLIB QUIET) set(HAVE_LIBZ ${ZLIB_FOUND}) if(ZLIB_FOUND) set(LIBRARIES ${LIBRARIES} ${ZLIB_LIBRARIES}) include_directories(${ZLIB_INCLUDE_DIR}) else(ZLIB_FOUND) message(FATAL_ERROR "ZLib library is required but was not found.\n" "Use -DZLIBDIR=DIR to specify the zlib directory tree.\n" "(suitable Debian/Ubuntu package: zlib1g-dev)\n" "(suitable Fedora package: zlib-devel)") endif(ZLIB_FOUND) # libpng # -DPNGLIB=ON|OFF # -DPNGLIBDIR=DIR if(PNGLIB) set(CMAKE_PREFIX_PATH ${PNGLIBDIR}) find_package(PNG QUIET) set(USE_PNGLIB ${PNG_FOUND}) if(PNG_FOUND) set(LIBRARIES ${LIBRARIES} ${PNG_LIBRARIES}) set(LINK_DIRECTORIES ${LINK_DIRECTORIES} ${PNG_LIBRARY_DIRS}) include_directories(${PNG_INCLUDE_DIRS}) else(PNG_FOUND) message(FATAL_ERROR "libpng is required but was not found.\n" "Use -DPNGLIBDIR=DIR to specify the libpng directory tree.\n" "Use -DPNGLIB=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libpng-dev)\n" "(suitable Fedora package: libpng-devel)") endif(PNG_FOUND) endif(PNGLIB) # openmp # -DOPENMP=ON|OFF if(OPENMP) find_package(OpenMP QUIET) if(OPENMP_FOUND) add_definitions(${OpenMP_CXX_FLAGS}) if(MSVC) set(LIBRARIES ${LIBRARIES} vcomp) elseif(WIN32) set(LIBRARIES ${LIBRARIES} gomp pthread) else() set(LIBRARIES ${LIBRARIES} ${OpenMP_CXX_FLAGS}) endif() endif(OPENMP_FOUND) else(OPENMP) # we need to define those semaphore posix symbols, do it with threads libs find_package(Threads) if(THREADS_FOUND) set(LIBRARIES ${LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) else(THREADS_FOUND) check_library_exists(rt sem_unlink "" HAVE_RT) if(HAVE_RT) set(LIBRARIES ${LIBRARIES} rt) else(HAVE_RT) message(FATAL_ERROR "Missing a POSIX semaphore symbols (rt or threads).\n") endif(HAVE_RT) endif(THREADS_FOUND) endif(OPENMP) # GSL MANDATORY # -DGSLDIR=DIR set(CMAKE_PREFIX_PATH ${GSLDIR}) find_package(GSL QUIET) set(HAVE_LIBGSL ${GSL_FOUND}) set(HAVE_LIBGSLCBLAS ${GSL_FOUND}) if(GSL_FOUND) set(LIBRARIES ${LIBRARIES} ${GSL_LIBRARIES}) include_directories(${GSL_INCLUDE_DIR}) else(GSL_FOUND) message(FATAL_ERROR "Gnu Scientific library (1.7 or higher) and libgslcblas are mandatory.\n" "Use -DGSLDIR=DIR to specify the gsl directory tree.\n" "(suitable Debian/Ubuntu package: libgsl0-dev)\n" "(suitable Fedora package: gsl-devel)") endif(GSL_FOUND) if(WIN32 AND NOT CYGWIN) set(CMAKE_PREFIX_PATH ${XDRDIR}) find_package(xdr) set(HAVE_LIBXDR ${XDR_FOUND}) if(XDR_FOUND) set(LIBRARIES ${LIBRARIES} ${XDR_LIBRARIES}) include_directories(${XDR_INCLUDE_DIR}) else(XDR_FOUND) message(FATAL_ERROR "bsd-xdr library is required but was not found.\n" "Use -DXDRDIR=DIR to specify the bsd-xdr directory tree.") endif(XDR_FOUND) set(CMAKE_PREFIX_PATH ${PCREDIR}) find_package(pcre) set(HAVE_LIBPCRE ${PCRE_FOUND}) if(PCRE_FOUND) set(LIBRARIES ${LIBRARIES} ${PCRE_LIBRARIES}) include_directories(${PCRE_INCLUDE_DIR}) else(PCRE_FOUND) message(FATAL_ERROR "pcre library is required but was not found.\n" "Use -DPCREDIR=DIR to specify the pcre directory tree.") endif(PCRE_FOUND) LINK_LIBRARIES(shlwapi) endif(WIN32 AND NOT CYGWIN) # PLplot MANDATORY # -DOLDPLPLOT=ON|OFF # -DPLPLOTDIR=DIR set(HAVE_OLDPLPLOT ${OLDPLPLOT}) set(CMAKE_PREFIX_PATH ${PLPLOTDIR}) find_package(Plplot QUIET) set(HAVE_LIBPLPLOTCXXD ${PLPLOT_FOUND}) if(PLPLOT_FOUND) set(LIBRARIES ${LIBRARIES} ${PLPLOT_LIBRARIES}) include_directories(${PLPLOT_INCLUDE_DIR}) else(PLPLOT_FOUND) message(FATAL_ERROR "plplot library is required but was not found.\n" "Use -DPLPLOTDIR=DIR to specify the plplot directory tree.\n" "(suitable Debian/Ubuntu packages: libplplot-dev, [plplot9-driver-xwin])" "(suitable Fedora package: plplot-devel)") endif(PLPLOT_FOUND) if(PLPLOT_FOUND) message(STATUS "Warning, if you have plplot version > 5.11 and wxWidgets enabled, please read carefully file README") check_library_exists("${PLPLOT_LIBRARIES}" c_plslabelfunc "" HAVE_PLPLOT_SLABELFUNC) if(HAVE_PLPLOT_SLABELFUNC) set(HAVE_PLPLOT_SLABELFUNC 1) else(HAVE_PLPLOT_SLABELFUNC) message(STATUS "warning, due to old plplot library, [XYZ]TICKFORMAT option for plot axis will not be supported.\n" "you should upgrade to plplot version > 5.9.6") endif(HAVE_PLPLOT_SLABELFUNC) set(CMAKE_REQUIRED_INCLUDES "${PLPLOT_INCLUDE_DIR}") set(CMAKE_REQUIRED_LIBRARIES "${PLPLOT_LIBRARIES}") #the following does not work with clang (???) check_library_exists("${PLPLOT_LIBRARIES}" c_plwidth "" HAVE_PLPLOT_WIDTH) #give it a 2nd try... if(NOT HAVE_PLPLOT_WIDTH) check_cxx_source_compiles("#include int main(int argc, char **argv) { plstream *p = new plstream(); PLFLT w = 0.5; p->width(w); }" HAVE_PLPLOT_WIDTH) if(HAVE_PLPLOT_WIDTH) set(HAVE_PLPLOT_WIDTH 1) endif(HAVE_PLPLOT_WIDTH) endif(NOT HAVE_PLPLOT_WIDTH) check_library_exists("${PLPLOT_LIBRARIES}" plstrl "" PLPLOT_PRIVATE_NOT_HIDDEN) if(PLPLOT_PRIVATE_NOT_HIDDEN) set(PLPLOT_PRIVATE_NOT_HIDDEN 1) else(PLPLOT_PRIVATE_NOT_HIDDEN) message(STATUS "Using a plplot library without private functions - workarounds will be used.") endif(PLPLOT_PRIVATE_NOT_HIDDEN) check_library_exists("${PLPLOT_LIBRARIES}" c_pllegend "" PLPLOT_HAS_LEGEND) if(PLPLOT_HAS_LEGEND) set(PLPLOT_HAS_LEGEND 1) else(PLPLOT_HAS_LEGEND) message(STATUS "Your plplot lib is too old for some gdl functions, please upgrade.") endif(PLPLOT_HAS_LEGEND) check_cxx_source_compiles("#include int main(){PLINT n; PLFLT x,y;plcallback::fill(n,&x,&y);}" PLPLOT_HAS_PLCALLBACK) if(PLPLOT_HAS_PLCALLBACK) set(PLPLOT_HAS_PLCALLBACK 1) endif(PLPLOT_HAS_PLCALLBACK) endif(PLPLOT_FOUND) # GraphicsMagick (GM) is an alternative to the classical ImageMagick Lib (IM). # It was experienced that GM was more stable in time than IM # # -DGRAPHICSMAGICK=ON|OFF # -DGRAPHICSMAGICKDIR=DIR # if(GRAPHICSMAGICK) set(CMAKE_PREFIX_PATH ${GRAPHICSMAGICKDIR}) find_package(GraphicsMagick QUIET) set(USE_MAGICK ${GRAPHICSMAGICK_FOUND}) if(GRAPHICSMAGICK_FOUND) include_directories(${GRAPHICSMAGICK_INCLUDE_DIR}) set(LIBRARIES ${LIBRARIES} ${GRAPHICSMAGICK_LIBRARIES}) else(GRAPHICSMAGICK_FOUND) message( STATUS "GRAPHICSMAGICK is strongly suggested but was not found. Use -DGRAPHICSMAGICKDIR=DIR to specify the GraphicsMagick directory tree. Use -DGRAPHICSMAGICK=OFF to not use it. (suitable Fedora package: GraphicsMagick-c++-devel Debian/Ubuntu package: libgraphicsmagick++1-dev)\n") message( STATUS "Looking for ImageMagick") endif(GRAPHICSMAGICK_FOUND) endif(GRAPHICSMAGICK) # # if GM found, we do not look for IM # if(GRAPHICSMAGICK_FOUND) if (MAGICK) message(STATUS "INFO: We prefer to use GraphicsMagick than ImageMagick") set(MAGICK OFF) endif(MAGICK) endif(GRAPHICSMAGICK_FOUND) # ImageMagick # -DMAGICK=ON|OFF # -DMAGICKDIR=DIR if(MAGICK) set(CMAKE_PREFIX_PATH ${MAGICKDIR}) find_package(ImageMagick QUIET COMPONENTS Magick++ MagickWand MagickCore) mark_as_advanced(ImageMagick_EXECUTABLE_DIR ImageMagick_Magick++_INCLUDE_DIR ImageMagick_Magick++_LIBRARY ImageMagick_MagickCore_INCLUDE_DIR ImageMagick_MagickCore_LIBRARY ImageMagick_MagickWand_INCLUDE_DIR ImageMagick_MagickWand_LIBRARY) set(USE_MAGICK ${ImageMagick_FOUND}) if(ImageMagick_FOUND) find_program(MAGICKXXCONFIG Magick++-config) if(MAGICKXXCONFIG) execute_process(COMMAND ${MAGICKXXCONFIG} "--libs" OUTPUT_VARIABLE MAGICKXXCONFIGLIBS OUTPUT_STRIP_TRAILING_WHITESPACE) set(LIBRARIES ${LIBRARIES} ${MAGICKXXCONFIGLIBS}) else(MAGICKXXCONFIG) message(FATAL_ERROR "ImageMagick is required but was not found (Magick++-config).\n" "Use -DMAGICKDIR=DIR to specify the ImageMagick directory.\n" "Use -DMAGICK=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libmagick++-dev)\n" "(suitable Fedora package: ImageMagick-c++-devel)") endif(MAGICKXXCONFIG) set(LIBRARIES ${LIBRARIES} ${ImageMagick_LIBRARIES}) include_directories(${ImageMagick_INCLUDE_DIRS}) set(MAGICK_LIBRARIES ${ImageMagick_LIBRARIES}) else(ImageMagick_FOUND) message(FATAL_ERROR "ImageMagick is required but was not found.\n" "Use -DMAGICKDIR=DIR to specify the ImageMagick directory.\n" "Use -DMAGICK=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libmagick++-dev)\n" "(suitable Fedora package: ImageMagick-c++-devel)") endif(ImageMagick_FOUND) endif(MAGICK) # if GM or IM activated, we check whether Plplot is OK for that if(USE_MAGICK AND NOT WIN32) check_library_exists("${PLPLOT_LIBRARIES}" plGetDrvDir "" HAVE_PLGETDRVDIR) if(HAVE_PLGETDRVDIR) message(STATUS "WARNING: Dynamic drivers may have to be disabled in plplot.\n" "To make plplot work with ImageMagick:\n" "use -DENABLE_DYNDRIVERS=OFF cmake option when compiling plplot or\n" "use -DMAGICK=OFF here to not use ImageMagick in GDL.") endif(HAVE_PLGETDRVDIR) endif(USE_MAGICK AND NOT WIN32) # wxWidgets # -DWXWIDGETS=ON|OFF # -DWXWIDGETSDIR=DIR set(wxWidgets_USE_DEBUG OFF) # Use release build if(WXWIDGETS) # # we check whether plplot was compiled within wxwidgets # # AC 2015/04/07 this is not working well, just on few cases :( # check_library_exists("${PLPLOT_LIBRARIES}" plD_DEVICE_INFO_wxwidgets "" HAVE_PLPLOT_WXWIDGETS) # if(NOT HAVE_PLPLOT_WXWIDGETS) # message(FATAL_ERROR "wxWidgets are required but PLplot wxWidgets NOT found.\n" # "If -DWXWIDGETS=ON (default) then PLplot must have be compiled with -DPLD_wxwidgets=ON\n" # "use -DWXWIDGETS=OFF to not use wxWidgets since it is not available here in PLplot") # endif(NOT HAVE_PLPLOT_WXWIDGETS) # set(CMAKE_PREFIX_PATH ${WXWIDGETSDIR}) find_package(wxWidgets COMPONENTS base core adv) set(HAVE_LIBWXWIDGETS ${wxWidgets_FOUND}) if(wxWidgets_FOUND) set(LIBRARIES ${LIBRARIES} ${wxWidgets_LIBRARIES}) set(LINK_DIRECTORIES ${LINK_DIRECTORIES} ${wxWidgets_LIBRARY_DIRS}) foreach(WXDEF ${wxWidgets_DEFINITIONS}) add_definitions(-D${WXDEF}) endforeach(WXDEF ${wxWidgets_DEFINITIONS}) include_directories(${wxWidgets_INCLUDE_DIRS}) else(wxWidgets_FOUND) message(FATAL_ERROR "wxWidgets are required but were not found.\n" "Use -DWXWIDGETSDIR=DIR to specify the wxWidgets directory tree.\n" "Use -DWXWIDGETS=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libwxgtk2.8-dev)\n" "(suitable Fedora package: wxGTK-devel)") endif(wxWidgets_FOUND) endif(WXWIDGETS) # netCDF # -DNETCDF=ON|OFF # -DNETCDFDIR=DIR if(NETCDF) set(CMAKE_PREFIX_PATH ${NETCDFDIR}) find_package(NetCDF QUIET) if(NETCDF_FOUND) set(CMAKE_REQUIRED_INCLUDES ${NETCDF_INCLUDE_DIRS}) check_include_file_cxx(netcdf.h HAVE_NETCDF_H) if(HAVE_NETCDF_H) set(LIBRARIES ${LIBRARIES} ${NETCDF_LIBRARIES}) set(LINK_DIRECTORIES ${LINK_DIRECTORIES} ${NETCDF_LIBRARY_DIRS}) include_directories(${NETCDF_INCLUDE_DIRS}) set(USE_NETCDF 1) else(HAVE_NETCDF_H) message(FATAL_ERROR "NetCDF installation seems not to be usable.\n" "This suggests a conflicting netCDF-HDF4 installation e.g.\n" "- Uninstalling HDF4 after installation of NetCDF.\n" "- Installing NetCDF before HDF4.") endif(HAVE_NETCDF_H) set(CMAKE_REQUIRED_INCLUDES) # # are extensions NetCDF-4 available ?? check_library_exists("${NETCDF_LIBRARIES}" nc_inq_grps "" HAVE_NETCDF4) if(HAVE_NETCDF4) set(USE_NETCDF4 1) else(HAVE_NETCDF4) message(STATUS "warning, you don't have NetCDF-4 version" "some new NetCDF capabilities in NetCDF-4 (related to Groups) will not be usable") endif(HAVE_NETCDF4) else(NETCDF_FOUND) message(FATAL_ERROR "NetCDF version 3.5.1 or later is required but was not found.\n" "Use -DNETCDFDIR=DIR to specify the netcdf directory tree.\n" "Use -DNETCDF=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libnetcdf-dev)\n" "(suitable Fedora package: netcdf-devel)") endif(NETCDF_FOUND) endif(NETCDF) # hdf4 # -DHDF=ON|OFF # -DHDFDIR=DIR if(HDF) set(CMAKE_PREFIX_PATH ${HDFDIR} ${JPEGDIR} ${SZIPDIR}) find_package(HDF QUIET) set(USE_HDF ${HDF_FOUND}) if(HDF_FOUND) if(NETCDF) set(CMAKE_REQUIRED_LIBRARIES ${HDF_EXTRA_LIBRARIES}) check_library_exists("${HDF_LIBRARIES}" sd_nccreate "" SD_NCCREATE) if(NOT SD_NCCREATE) message(FATAL_ERROR "HDF4 needs to be configured with the --disable-netcdf option " "in order to be used with the original netCDF library.") endif(NOT SD_NCCREATE) set(CMAKE_REQUIRED_LIBRARIES) endif(NETCDF) set(HDF_LIBRARIES ${HDF_LIBRARIES} ${HDF_EXTRA_LIBRARIES}) set(LIBRARIES ${LIBRARIES} ${HDF_LIBRARIES}) include_directories(${HDF_INCLUDE_DIR}) else(HDF_FOUND) message(FATAL_ERROR "HDF4 libraries were not found.\n" "Use -DHDFDIR=DIR to specify the HDF directory tree.\n" "Use -DHDF=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libhdf4-alt-dev)\n" "You can use -DJPEGDIR=DIR to specify the JPEG directory tree. " "You can also use -DSZIPDIR=DIR to specify SZip directory tree if " "HDF was compiled with SZip support.") endif(HDF_FOUND) endif(HDF) # hdf5 # -DHDF5=ON|OFF # -DHDF5DIR=DIR if(HDF5) set(CMAKE_PREFIX_PATH ${HDF5DIR} ${SZIPDIR}) find_package(HDF5 QUIET) set(USE_HDF5 ${HDF5_FOUND}) if(HDF5_FOUND) set(LIBRARIES ${LIBRARIES} ${HDF5_LIBRARIES}) include_directories(${HDF5_INCLUDE_DIRS}) find_package(MPI QUIET) if(MPI_FOUND) include_directories(${MPI_INCLUDE_PATH}) set(LIBRARIES ${LIBRARIES} ${MPI_LIBRARIES}) endif(MPI_FOUND) else(HDF5_FOUND) message(FATAL_ERROR "HDF version 5 is required but was not found.\n" "Use -DHDF5DIR=DIR to specify the HDF5 directory tree.\n" "Use -DHDF5=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libhdf5-serial-dev)\n" "(suitable Fedora package: hdf5-devel)") endif(HDF5_FOUND) endif(HDF5) # fftw # -DFFTW=ON|OFF # -DFFTWDIR=DIR if(FFTW) set(CMAKE_PREFIX_PATH ${FFTWDIR}) find_package(FFTW QUIET) set(USE_FFTW ${FFTW_FOUND}) if(FFTW_FOUND) set(LIBRARIES ${LIBRARIES} ${FFTW_LIBRARIES}) include_directories(${FFTW_INCLUDE_DIR}) else(FFTW_FOUND) message(FATAL_ERROR "FFTW3 is required but was not found.\n" "Use -DFFTWDIR=DIR to specify the FFTW directory tree.\n" "Use -DFFTW=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libfftw3-dev)\n" "(suitable Fedora package: fftw-devel)") endif(FFTW_FOUND) endif(FFTW) # libproj4 # -DLIBPROJ4=ON|OFF # -DLIBPROJ4DIR=DIR if(LIBPROJ4) set(CMAKE_PREFIX_PATH ${LIBPROJ4DIR}) find_package(Libproj4) if(LIBPROJ4_FOUND) else(LIBPROJ4_FOUND) find_package(Libproj4new) endif(LIBPROJ4_FOUND) if(LIBPROJ4_FOUND) set(CMAKE_REQUIRED_LIBRARIES ${LIBPROJ4_LIBRARIES} ${GSL_LIBRARIES} m) check_library_exists("${LIBPROJ4_LIBRARIES}" pj_init "" USE_LIBPROJ4_NEW) if(USE_LIBPROJ4_NEW) # check_library_exists("${LIBPROJ4_LIBRARIES}" proj_init "" USE_LIBPROJ4) # if(USE_LIBPROJ4) # define USE_LIB_PROJ4 in any case set(USE_LIBPROJ4 1) else(USE_LIBPROJ4_NEW) check_library_exists("${LIBPROJ4_LIBRARIES}" proj_init "" USE_LIBPROJ4) if(NOT USE_LIBPROJ4) # else(USE_LIBPROJ4) # check_library_exists("${LIBPROJ4_LIBRARIES}" pj_init "" USE_LIBPROJ4_NEW) # if(NOT USE_LIBPROJ4_NEW) message(FATAL_ERROR "Libproj4 is required but was not found.\n" "Use -DLIBPROJ4DIR=DIR to specify the Libproj4 directory tree.\n" "Use -DLIBPRJ4=OFF to not use it.") endif(NOT USE_LIBPROJ4) endif(USE_LIBPROJ4_NEW) # endif(NOT USE_LIBPROJ4_NEW) # endif(USE_LIBPROJ4) include_directories(${LIBPROJ4_INCLUDE_DIR}) set(LIBRARIES ${LIBRARIES} ${LIBPROJ4_LIBRARIES}) set(CMAKE_REQUIRED_LIBRARIES) else(LIBPROJ4_FOUND) message(FATAL_ERROR "Libproj4 is required but was not found.\n" "Use -DLIBPROJ4DIR=DIR to specify the Libproj4 directory tree.\n" "Use -DLIBPRJ4=OFF to not use it.") endif(LIBPROJ4_FOUND) endif(LIBPROJ4) # mpich (experimental) # -DMPICH=ON|OFF # -DMPICHDIR=DIR if(MPICH) set(CMAKE_PREFIX_PATH ${MPICHDIR}) find_package(MPI QUIET) set(USE_MPI ${MPI_FOUND}) if(MPI_FOUND) include_directories(${MPI_INCLUDE_PATH}) set(LIBRARIES ${LIBRARIES} ${MPI_LIBRARIES}) else(MPI_FOUND) message(FATAL_ERROR "MPICH is required but was not found.\n" "Use -DMPICHDIR=DIR to specify the MPICH directory tree.\n" "Use -DMPICH=OFF to not use it.") endif(MPI_FOUND) endif(MPICH) # python # -DPYTHON=ON|OFF # -DPYTHON_MODULE # -DPYTHONDIR=DIR # -DPYTHONVERSION=VERSION if(PYTHON OR PYTHON_MODULE) if(PYTHON) set(PYTHONMSG "Use -DPYTHON=OFF to disable Python support.\n") endif(PYTHON) if(PYTHON_MODULE) set(PYTHON_MODULEMSG "Use -DPYTHON_MODULE=OFF to disable Python module.\n") endif(PYTHON_MODULE) if(PYTHONDIR) find_library(PYTHONLIBS NAMES python${PYTHONVERSION} PATHS ${PYTHONDIR} PATH_SUFFIXES lib lib/python${PYTHONVERSION}/config NO_DEFAULT_PATH NO_CMAKE_PATH ) string(COMPARE NOTEQUAL "${PYTHONLIBS}" "PYTHONLIBS-NOTFOUND" PYTHONLIBS_FOUND) if (NOT PYTHONLIBS_FOUND) message(FATAL_ERROR "Python libraries not found in ${PYTHONDIR}.") else() set(PYTHON_LIBRARIES "${PYTHONLIBS}") message("-- Found Python libs: ${PYTHONLIBS}") endif() find_path(PYTHON_INCLUDE_DIRS NAMES Python.h PATHS ${PYTHONDIR} PATH_SUFFIXES include include/python${PYTHONVERSION} NO_DEFAULT_PATH NO_CMAKE_PATH ) string(COMPARE NOTEQUAL "${PYTHONLIBS}" "PYTHON_INCLUDE_DIRS-NOTFOUND" PYTHONHEADERS_FOUND) if (PYTHONHEADERS_FOUND) message("-- Found Python headers: ${PYTHON_INCLUDE_DIRS}") set(PYTHON_INCLUDES "${PYTHON_INCLUDE_DIRS}") else() message(FATAL_ERROR "Python headers not found in ${PYTHONDIR}.") endif() find_program(PYTHON_EXECUTABLE NAMES python${PYTHONVERSION} PATHS ${PYTHONDIR} PATH_SUFFIXES bin NO_DEFAULT_PATH NO_CMAKE_PATH) string(COMPARE NOTEQUAL "${PYTHON_EXECUTABLE}" "PYTHON_EXECUTABLE-NOTFOUND" PYTHON_EXECUTABLE_FOUND) if(NOT PYTHON_EXECUTABLE_FOUND) message(FATAL_ERROR "Python executable not found in ${PYTHONDIR}.") else() message("-- Found Python executable: ${PYTHON_EXECUTABLE}") endif() else() if(NOT PYTHONVERSION) set(PYTHONVERSION 2) endif() find_package(PythonInterp) find_package(PythonLibs ${PYTHONVERSION}) endif() set(USE_PYTHON ${PYTHONLIBS_FOUND}) if(PYTHONLIBS_FOUND) find_package(Numpy QUIET) if(NOT PYTHON_NUMPY_FOUND) message(FATAL_ERROR "Python numpy package was not found.\n" "${PYTHONMSG} ${PYTHON_MODULEMSG}") endif(NOT PYTHON_NUMPY_FOUND) set(LIBRARIES ${LIBRARIES} ${PYTHON_LIBRARIES}) include_directories(${PYTHON_INCLUDE_DIRS} ${PYTHON_NUMPY_INCLUDE_DIR}) else(PYTHONLIBS_FOUND) message(FATAL_ERROR "Python is required but was not found.\n" "Use -DPYTHONDIR=DIR to specify the Python directory tree.\n" "Use -DPYTHONVERSION=VERSION to help searching for the right version.\n" "(suitable Debian/Ubuntu package: python-dev)\n" "(suitable Fedora package: python-devel)\n" "${PYTHONMSG} ${PYTHON_MODULEMSG}") endif(PYTHONLIBS_FOUND) endif(PYTHON OR PYTHON_MODULE) # udunits # -DUDUNITS=ON|OFF # -DUDUNITSDIR=DIR if(UDUNITS) set(CMAKE_PREFIX_PATH ${UDUNITSDIR}) find_package(Udunits QUIET) set(USE_UDUNITS ${UDUNITS_FOUND}) if(UDUNITS_FOUND) set(LIBRARIES ${LIBRARIES} ${UDUNITS_LIBRARIES}) include_directories(${UDUNITS_INCLUDE_DIR}) else(UDUNITS_FOUND) message(FATAL_ERROR "UDUNITS-2 is required but was not found.\n" "Use -DUDUNITSDIR=DIR to specify the Udunits directory tree.\n" "Use -DUDUNITS=OFF to not use it.\n" "(suitable Debian/Ubuntu package: libudunits2-dev)\n" "(suitable Fedora package: udunits2-devel)") endif(UDUNITS_FOUND) endif(UDUNITS) # eigen3 # -DEIGEN3=ON|OFF # -DEIGEN3DIR=DIR if(EIGEN3) # cleaning Cache ... if (EIGEN3DIR) unset(EIGEN3_INCLUDE_DIR CACHE) endif(EIGEN3DIR) # set(CMAKE_PREFIX_PATH ${EIGEN3DIR}) find_package(Eigen3 3.2.4 QUIET) if(EIGEN3_TOO_OLD) # on iCore 3/5/7 we must have Eigen >=3.2.4 to avoid fatal error in "test_matrix_multiply.pro" message(FATAL_ERROR "\nEIGEN3 is required but the version found is TOO OLD." " Please download a recent version (>=3.2.4) in a local directory." " Then use -DEIGEN3DIR=DIR to specify the Eigen3 local directory tree.\n") else(EIGEN3_TOO_OLD) set(USE_EIGEN ${EIGEN3_FOUND}) if(EIGEN3_FOUND) include_directories(${EIGEN3_INCLUDE_DIR}) if(MINGW) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-ipa-cp-clone") endif(MINGW) else(EIGEN3_FOUND) message(FATAL_ERROR "EIGEN3 is required but was not found.\n" "Use -DEIGEN3DIR=DIR to specify the Eigen3 directory tree.\n" "Use -DEIGEN3=OFF to not use it.\n" "(suitable Fedora package: eigen3-devel)\n" "(suitable Debian/Ubuntu package: libeigen3-dev)") endif(EIGEN3_FOUND) endif(EIGEN3_TOO_OLD) endif(EIGEN3) # pslib # -DPSLIB=ON|OFF # -DPSLIBDIR=DIR if(PSLIB) set(CMAKE_PREFIX_PATH ${PSLIBDIR}) find_package(libps QUIET) set(USE_PSLIB ${LIBPS_FOUND}) if(LIBPS_FOUND) set(LIBRARIES ${LIBRARIES} ${LIBPS_LIBRARIES}) set(LINK_DIRECTORIES ${LINK_DIRECTORIES} ${LIBPS_LIBRARY_DIRS}) include_directories(${LIBPS_INCLUDE_DIRS}) else(LIBPS_FOUND) message(FATAL_ERROR "pslib is required but was not found.\n" "Use -DPSLIBDIR=DIR to specify the pslib directory tree.\n" "Use -DPSLIB=OFF to not use it.\n" "(suitable Debian/Ubuntu package: pslib-dev)\n" "(suitable Fedora package: pslib-devel)") endif(LIBPS_FOUND) endif(PSLIB) # grib # -DGRIB=ON|OFF # -DGRIBDIR=DIR if(GRIB) set(CMAKE_PREFIX_PATH ${GRIBDIR} ${JASPERDIR} ${JPEGDIR}) find_package(Grib QUIET) set(USE_GRIB ${GRIB_FOUND}) if(GRIB_FOUND) set(LIBRARIES ${LIBRARIES} ${GRIB_LIBRARIES}) include_directories(${GRIB_INCLUDE_DIR}) else(GRIB_FOUND) message(FATAL_ERROR "GRIB is required but was not found.\n" "Use -DGRIBDIR=DIR to specify the GRIB directory tree.\n" "Use -DGRIB=OFF to not use it.\n" "Use -DJASPERDIR=DIR and|or -DJPEGDIR=DIR to specify " "the directory trees of JasPer and openJPEG libraries.\n" "(suitable Debian/Ubuntu package: libgrib-api-dev)\n" "(suitable Fedora package: grib_api-devel)") endif(GRIB_FOUND) endif(GRIB) # Qhull (enable TRIANGULATE and QHULL commands) # -DQHULL=ON|OFF # -DQHULLDIR=DIR if(QHULL) set(CMAKE_PREFIX_PATH ${QHULLDIR}) find_package(QHULL QUIET) set(PL_HAVE_QHULL ${QHULL_FOUND}) if(QHULL_FOUND) set(LIBRARIES ${LIBRARIES} ${QHULL_LIBRARIES}) include_directories(${QHULL_INCLUDE_DIR}) else(QHULL_FOUND) message(FATAL_ERROR "QHULL is required but was not found.\n" "Use -DQHULLDIR=DIR to specify the QHULL directory tree.\n" "Use -DQHULL=OFF to not use it.\n" "(suitable Fedora package: libqhull-devel)") endif(QHULL_FOUND) endif(QHULL) # gshhs # -DGSHHS=ON|OFF if(GSHHS) set(USE_GSHHS 1) endif(GSHHS) # -DGSHHSDIR=DIR #not needed anymore, gshhs include is in src/ # set(CMAKE_PREFIX_PATH ${GSHHSDIR} src/) # find_path(GSHHS_INCLUDE_DIR gshhs.h) # mark_as_advanced(GSHHS_INCLUDE_DIR) # set(USE_GSHHS ${GSHHS_INCLUDE_DIR}) # if(USE_GSHHS) # include_directories(${GSHHS_INCLUDE_DIR}) # else(USE_GSHHS) # message(FATAL_ERROR "GSHHS is required but gshhs.h was not found.\n" # "Use -DGSHHSDIR=DIR to specify the GSHHS directory tree.\n" # "Use -DGSHHS=OFF to not use it.") # endif(USE_GSHHS) #endif(GSHHS) # # X11 if(X11) set(CMAKE_PREFIX_PATH ${X11DIR}) if(WIN32 AND NOT CYGWIN) find_package(XPORTMINGW QUIET) set(HAVE_X ${XPORTMINGW_FOUND}) if(XPORTMINGW_FOUND) set(LIBRARIES ${LIBRARIES} ${XPORTMINGW_LIBRARIES}) include_directories(${XPORTMINGW_INCLUDE_DIR}) else(XPORTMINGW_FOUND) message("X11 was not found.\n" "Use -DX11DIR=DIR to specify the X11 directory tree.") endif(XPORTMINGW_FOUND) else(WIN32 AND NOT CYGWIN) find_package(X11 QUIET) set(HAVE_X ${X11_FOUND}) if(X11_FOUND) set(LIBRARIES ${LIBRARIES} ${X11_LIBRARIES}) include_directories(${X11_INCLUDE_DIR}) else(X11_FOUND) message(FATAL_ERROR "X11 is required but was not found.\n" "Use -DX11DIR=DIR to specify the X11 directory tree.\n" "Use -DX11=OFF to not use it.") endif(X11_FOUND) endif(WIN32 AND NOT CYGWIN) endif(X11) add_subdirectory(src) if(NOT PYTHON_MODULE) add_subdirectory(testsuite) endif(NOT PYTHON_MODULE) install(FILES ${CMAKE_SOURCE_DIR}/AUTHORS ${CMAKE_SOURCE_DIR}/README DESTINATION ${CMAKE_INSTALL_PREFIX}/${GDL_DATA_DIR}) install(FILES ${CMAKE_SOURCE_DIR}/doc/gdl.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1) # substitute variables in configure.h.cmake and move it to configure.h configure_file(${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h) # create a link src/gdl -> ${BUILD}/.../gdl # for windows, just copy the file if(NOT PYTHON_MODULE) get_target_property(GDLLOCATION gdl LOCATION) if(WIN32) add_custom_target(copy_gdl ALL ${CMAKE_COMMAND} -E copy ${GDLLOCATION} ${CMAKE_SOURCE_DIR}/src/gdl DEPENDS gdl) else(WIN32) add_custom_target(symlink_gdl ALL ${CMAKE_COMMAND} -E create_symlink ${GDLLOCATION} ${CMAKE_SOURCE_DIR}/src/gdl DEPENDS gdl) endif(WIN32) endif(NOT PYTHON_MODULE) # display macro macro(MODULE MOD NAME) if(${MOD}) message("${NAME} ON ${${MOD}_LIBRARIES}") else(${MOD}) message("${NAME} OFF") endif(${MOD}) endmacro(MODULE) # python if(PYTHON_MODULE) set(BUILDTYPE "Python Module") else(PYTHON_MODULE) set(BUILDTYPE "Standalone") endif(PYTHON_MODULE) # IF(NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) ENDIF(NOT CMAKE_BUILD_TYPE) if(MSVC) SET(MACHINE_ARCH ${MSVC_C_ARCHITECTURE_ID}) IF(NOT MACHINE_ARCH) SET(MACHINE_ARCH ${MSVC_CXX_ARCHITECTURE_ID}) ENDIF(NOT MACHINE_ARCH) set_target_properties(gdl PROPERTIES LINK_FLAGS "/machine:${MACHINE_ARCH}") endif(MSVC) # AC, 12-oct-2011, solved by Marc # set_target_properties(gdl PROPERTIES LINK_FLAGS "-Wl,-z,muldefs") # set_target_properties(gdl PROPERTIES LINK_FLAGS "-z muldefs") # if(CMAKE_BUILD_TYPE STREQUAL None OR NOT CMAKE_BUILD_TYPE) set(FLAGS ${CMAKE_CXX_FLAGS}) elseif(CMAKE_BUILD_TYPE STREQUAL Debug) set(FLAGS ${CMAKE_CXX_FLAGS_DEBUG}) elseif(CMAKE_BUILD_TYPE STREQUAL Release) set(FLAGS ${CMAKE_CXX_FLAGS_RELEASE}) elseif(CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo) set(FLAGS ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) elseif(CMAKE_BUILD_TYPE STREQUAL MinSizeRel) set(FLAGS ${CMAKE_CXX_FLAGS_MINSIZEREL}) endif(CMAKE_BUILD_TYPE STREQUAL None OR NOT CMAKE_BUILD_TYPE) message(STATUS "Summary GDL - GNU DATA LANGUAGE [${BUILDTYPE}] System ${CMAKE_HOST_SYSTEM} Files generated ${CMAKE_GENERATOR} GDL output ${GDLLOCATION} Installation prefix ${CMAKE_INSTALL_PREFIX} C++ compiler ${CMAKE_CXX_COMPILER} ${FLAGS}") message("") message(STATUS "Options") if(OPENMP AND OPENMP_FOUND) message("OpenMP support ON ${OpenMP_CXX_FLAGS}") else(OPENMP AND OPENMP_FOUND) message("OpenMP support OFF") endif(OPENMP AND OPENMP_FOUND) set(WXWIDGETS_LIBRARIES ${wxWidgets_LIBRARIES}) module(WXWIDGETS "WxWidgets ") module(MAGICK "ImageMagick") module(NETCDF "NetCDF ") module(HDF "HDF4 ") module(HDF5 "HDF5 ") module(FFTW "FFTW ") module(LIBPROJ4 "Libproj4 ") set(MPICH_LIBRARIES ${MPI_LIBRARIES}) module(MPICH "MPICH ") module(PYTHON "Python ") module(UDUNITS "UDUNITS-2 ") set(EIGEN3_LIBRARIES ${EIGEN3_INCLUDE_DIR}) module(EIGEN3 "EIGEN3 ") module(GRAPHICSMAGICK "GRAPHICSMAGICK") module(GRIB "GRIB ") set(QHULL_LIBRARIES ${QHULL_LIBRARIES}) module(QHULL "QHULL ") set(GSHHS_LIBRARIES ${GSHHS_INCLUDE_DIR}) module(GSHHS "GSHHS ") module(PSLIB "pslib ") if(WIN32 AND NOT CYGWIN) module(XPORTMINGW "XPortMinGW (Win32 Xlib) ") else(WIN32 AND NOT CYGWIN) module(X11 "Xlib ") endif(WIN32 AND NOT CYGWIN) module(PNGLIB "libpng ") message("") message(STATUS "Mandatory modules") set(PLPLOT ON) set(READLINE ON) set(GSL ON) set(ZLIB ON) if(NOT WIN32) set(CURSES ON) endif(NOT WIN32) module(PLPLOT "Plplot ") module(OLDPLPLOT "Old Plplot ") module(READLINE "GNU Readline ") module(EDITLINE "BSD Editline ") module(GSL "GSL ") module(ZLIB "Zlib ") if(NOT WIN32) module(CURSES "(N)curses ") endif(NOT WIN32) message("") gdl-0.9.7/PYTHON.txt0000664000175100017510000000761313040614410013743 0ustar coulaiscoulaisGDL can embed python as well as being embedded in python. 1. Writing GDL extensions in python 2. Calling GDL from python 1. Writing GDL extensions in python =================================== Since version 0.7.1 GDL provides two additional subroutines: A PYTHON function and a PYTHON procedure. Both are very similar, the difference is, that any result returned in the procedures is quietly ignored, while for the function an exception is raised if python's None is returned except the DEFAULTRETURN keyword is set to a value, in which case that value is returned in case of 'None'. the syntax is: PYTHON,python_module[,python_function[,arg1,...,argN]],ARGV=argv res = PYTHON(python_module[,python_function[,arg1,...,argN]],ARGV=argv, DEFAULTRETURN=defaultreturn) python_module the python module to load python_function the python function to call. If this paramter is not specified, only the module is loaded and initialized. Note that the module intitialization is done only the first time a python module is loaded. arg1,...,argN arguments to be passed to the python function scalars and one dimensional arrays are passed as python scalars, an array is passed as a python Numpy array. Numpy is a popular extension to python. Using it let python be integrated in GDL quite seamlessly. See: http://numpy.scipy.org/ for details. ARGV set this keyword to a string or string array which is set to the command line options for python. The first element is the (faked) name of the python executable. With this pythons search path for modules (sys.path) can be manipulated. If this keyword is set, no parameter (python_module) need to be specified. DEFAULTRETURN default return value, returned if the python function returns 'None'. Note that for a GDL extension, you probably have to write a GDL program file (.pro) containing a function/procedure which uses the PYTHON function/procedure and a python module (.py) which gets called by PYTHON within your subroutine. For an as simple as it gets example see the files gdl/py/python_print.py and gdl/pro/py_print.pro If you have the python package 'matplotlib' installed (see: http://matplotlib.sourceforge.net), you can test the (little) more elaborate example in. gdl/py/python_plot.py and gdl/pro/py_plot.pro (Note that the matplotlib library has much more capabilities then used here.) For the version of python and its packages used please refer to the README file. If you have any suggestions or needs for extensions of the python interface please see "CONTACT" in the README file. 2. Calling GDL from python ========================== NOTE: Due to the neglectible feedback, the python module development is currently on hold. If you use it, you are urged to let us know. Since version 0.8.9 GDL can be embedded into python. See INSTALL to learn how to build the GDL python module. Form within python, the usage is: first the GDL module must be imported: import GDL then this module provides three python functions: GDL.pro( PROCEDURE_NAME [, args [, keywords]]) result = GDL.function( FUNCTION_NAME [, args [, keywords]]) GDL.script( SCRIPT_FILE_NAME) for calling a GDL procedure, function and script file. PROCEDURE_NAME, FUNCTION_NAME and SCRIPT_FILE_NAME must be scalar strings. args are the arguments. They are converted to GDL. keywords are the keywords. They are converted to GDL. if an arg or a keyword is a tuple, they are NOT copied back when the GDL subroutine returns. This is done to save resources. (Only the first item of each tuple is passed to GDL). GDL arrays are passed to/from GDL as python Numpy arrays. Numpy is a popular extension to python. See: http://numpy.scipy.org/ for details. Example: >>> import GDL >>> print GDL.function("sin",(1,)) 0.841470956802 gdl-0.9.7/scripts/0000775000175100017510000000000013040614613013646 5ustar coulaiscoulaisgdl-0.9.7/scripts/aptget4gdl.sh0000775000175100017510000000372613040614410016247 0ustar coulaiscoulais# # Alain C. and Ilia N. : June 2015 # A simple script to help end users who can be sudo to add # as much as possible dependances needed for GDL compilation # BEFORE runing "cmake" # # On Debian or Ubuntu systems, we need the "dpkg-query" # command to check wether the packages are installed. # # Alain C. June 2016 # We switch from "dpkg-query" to "apt-cache" # which is more realiable (would have to use "dpkg-query --print-avail") # if ( ! which apt-cache > /dev/null ); then echo -e " not found! Install? (y/n) \c" read if "$REPLY" = "y"; then sudo apt-get install apt fi fi # echo 'Please wait ! need some time.' echo ' ' # mandatory_dep_list=(g++ cmake libgsl0-dev libplplot-dev libncurses-dev zlib1g-dev libpng-dev xorg-dev libreadline-gplv2-dev libreadline-dev) # dep_to_aptget="" # for dep in ${mandatory_dep_list[*]}; do # echo $dep test_installed=( `LANG=C apt-cache policy $dep | grep "Installed:" ` ) if [ "${test_installed[1]}" == "(none)" ] ; then #echo $test_installed $dep $can_instal dep_to_aptget=$dep_to_aptget" "$dep fi done # #echo ${mandatory_dep_list[*]} if [[ ${#dep_to_aptget} -gt 0 ]] ; then echo "Missing Mandatory packages you need to install :" echo "sudo apt-get install"${dep_to_aptget} else echo "NO Missing Mandatory packages" fi # dep_to_aptget="" extra_dep_list=(libgrib-api-dev libnetcdf-dev libfftw3-dev libeigen3-dev libhdf4-alt-dev libhdf5-dev pslib-dev libgraphicsmagick++-dev libudunits2-dev libwxgtk2.8-dev plplot12-driver-xwin plplot13-driver-xwin libproj-dev) # for dep in ${extra_dep_list[*]}; do test_installed=( `LANG=C apt-cache policy $dep | grep "Installed:" ` ) if [ "${test_installed[1]}" == "(none)" ] ; then dep_to_aptget=$dep_to_aptget" "$dep fi done # echo "" if [[ ${#dep_to_aptget} -gt 0 ]] ; then echo "Missing packages you may would like to install :" echo "sudo apt-get install"${dep_to_aptget} else echo "NO missing extra packages" fi gdl-0.9.7/scripts/gdlde_init_CVS.sh0000775000175100017510000000057313040614410017022 0ustar coulaiscoulais# # AC 01/08/2015 # create a copy of the current status of the CVS from nothing # echo 'This is for the GDLDE part : IDE for GDL' echo '' # echo 'just press enter for the passwd !' echo '' # CVS_PATH=/cvsroot/gnudatalanguage CVS_SITE=anonymous@gnudatalanguage.cvs.sourceforge.net # cvs -d:pserver:$CVS_SITE:$CVS_PATH login cvs -z3 -d:pserver:$CVS_SITE:$CVS_PATH checkout gdlde # gdl-0.9.7/scripts/update_gdl_CVS.sh0000775000175100017510000000056313040614410017027 0ustar coulaiscoulais# # AC 21/01/2008 # update an already existing CVS with sub-directories # should be run at top of the root of the CVS (e.g. gdl/) # echo 'just press enter for the passwd !' echo '' # CVS_PATH=/cvsroot/gnudatalanguage CVS_SITE=anonymous@gnudatalanguage.cvs.sourceforge.net # cvs -d:pserver:$CVS_SITE:$CVS_PATH login cvs -z3 -d:pserver:$CVS_SITE:$CVS_PATH update -d gdl # gdl-0.9.7/scripts/minimum_script4gdl.sh0000775000175100017510000001530613040614410020017 0ustar coulaiscoulais#!/bin/bash # # Alain Coulais, 3 Mars 2015, script under GNU GPL v3 # # Changes: # 2015-11-06 : cmake is now in httpS, allow to junp to a given step via $1 # 2016-01-04 : move to 0.9.6 # # The purpose of this shell script is to compile a minimum GDL # # To do that, the TGZ of useful dependancies are downloaded then compiled # (with "curl" because Curl is by default on OSX) # When a dependancy is downloaded but something goes bad, # you can fix the script and run it again, downloading is not done again, # and succesfull compilations not done again # # Since Nov. 6, we can jump over steps already done # no step : all is done # step 1 : readline # step 2 : GSL # step 3 : CMake # step 4 : Plplot # step 5 : GDL 0.9.6 vanilla # step 6 : GDL 0.9.6 CVS # # # $1 == $use_curl, $2 = $URL, $3 = $filename run_wget_or_curl(){ if [ $1 -eq 1 ] ; then curl $2 -O else wget $2 fi } run_wget_or_curl_no_check(){ if [ $1 -eq 1 ] ; then curl -L --insecure $2 -o $3 else wget --no-check-certificate $2 -O $3 fi } run_wget_or_curl_v2(){ if [ $1 -eq 1 ] ; then curl -L $2 -o $3 else wget $2 -O $3 fi } # # $1 = $filename, $2 = $expected_md5sum check_md5sum(){ OS="`uname`" if [ $OS = 'Darwin' ] ; then md5value=`md5 -r $1 | cut -c -32` else md5value=`md5sum $1 | cut -c -32` fi if [ $md5value != $2 ] ; then echo 'Bad MD5sum check for : '$1 exit fi } # URL we use (resived on 2016 Oct. 19) # READLINE_URL="ftp://ftp.gnu.org/gnu/readline/readline-6.3.tar.gz" GSL_URL="ftp://ftp.gnu.org/gnu/gsl/gsl-1.16.tar.gz" CMAKE_URL="https://cmake.org/files/v2.8/cmake-2.8.12.tar.gz" PLPLOT_URL="https://sourceforge.net/projects/plplot/files/plplot/5.9.11%20Source/plplot-5.9.11.tar.gz/download?use_mirror=autoselect" GDL_VANILLA_URL="http://downloads.sourceforge.net/project/gnudatalanguage/gdl/0.9.6/gdl-0.9.6v2.tgz" GDL_CVS_URL="http://gnudatalanguage.cvs.sourceforge.net/viewvc/gnudatalanguage/gdl/?view=tar" # step=$1 if [ -z "$1" ] ; then echo "No STEP (numerical) argument supplied" step=1 fi # export RACINE=$PWD # # switch it to 1 to have the CVS snapshot gdl_cvs=0 if (( step == 6 )) ; then gdl_cvs=1 ; fi # switch it to 1 to have the final checks for GDL gdl_check=0 # CPU Core number, switch it to 1 if you don't want to overload cpus=`getconf _NPROCESSORS_ONLN` # curl or wget # (curl seems to be always present on OSX, wget on GNU/Linux) use_curl=1 use_wget=1 command -v curl >/dev/null 2>&1 || { echo >&2 "Curl not found." ; use_curl=0;} command -v wget >/dev/null 2>&1 || { echo >&2 "Wget not found." ; use_wget=0;} echo "Curl ? : " $use_curl echo "Wget ? : " $use_wget # # take care of "dash" on Debian/Ubuntu # https://wiki.ubuntu.com/DashAsBinSh if [ "${use_curl}" = "0" ] && [ "${use_wget}" = "0" ] ; then echo "both Curl and Wget are missing ... you must provide at least one of them !" exit fi # starting READLINE cd $RACINE if ((step <= 1 )) ; then if [ ! -e readline-6.3.tar.gz ] ; then run_wget_or_curl $use_curl $READLINE_URL fi tar -zxf readline-6.3.tar.gz cd readline-6.3 mkdir Compilation ./configure --prefix=$RACINE/readline-6.3/Compilation/ make make install echo "readline done" else echo "readline SKIPPED !" fi # starting GSL cd $RACINE if ((step <= 2 )) ; then gsl_ok=`which -a gsl-config` if [ ! -e $gsl_ok ] ; then if [ ! -e gsl-1.16.tar.gz ] ; then run_wget_or_curl $use_curl $GSL_URL fi tar -zxf gsl-1.16.tar.gz cd gsl-1.16 mkdir Compilation ./configure --prefix=$RACINE/gsl-1.16/Compilation/ make make install GSL_PATH=$RACINE/gsl-1.16 echo "GSL compilation done, version : 1.16" else GSL_PATH=`gsl-config --prefix` echo "GSL found, version : "`gsl-config --version` fi else GSL_PATH=`gsl-config --prefix` if [ ! -d $GSL_PATH ] ; then GSL_PATH=$RACINE/gsl-1.16 fi echo "GSL SKIPPED !" fi # starting CMAKE cd $RACINE if ((step <= 3 )) ; then do_cmake_compil=0 CmakeEXE=`which -a cmake` echo $CmakeEXE if [ -e $CmakeEXE ] ; then cmake_version=`cmake --version | head -1 | awk -F " " '{print $3}'` echo $cmake_version if [[ $cmake_version < "2.8.12" ]] ; then echo "old CMake version ("$cmake_version") found, a new one must be used" do_cmake_compil=1 fi else echo "coucou" do_cmake_compil=1 fi if [ $do_cmake_compil -eq 1 ] ; then if [ ! -e cmake-2.8.12.tar.gz ] ; then ## since Nov. 6, we do have a problem with KitWare certificate ... run_wget_or_curl_no_check $use_curl $CMAKE_URL cmake-2.8.12.tar.gz fi check_md5sum cmake-2.8.12.tar.gz "105bc6d21cc2e9b6aff901e43c53afea" # tar -zxf cmake-2.8.12.tar.gz cd cmake-2.8.12 ./bootstrap make echo "CMake compilation done, version 2.8.12" CmakeEXE=$PWD/bin/cmake else echo "CMake found, version : "$cmake_version fi else CmakeEXE=`which -a cmake` if [ ! -e $CmakeEXE ] ; then CmakeEXE=$PWD/bin/cmake fi echo "CMake SKIPPED !" fi # starting PLPLOT cd $RACINE if ((step <= 4 )) ; then if [ ! -e plplot-5.9.11.tar.gz ] ; then run_wget_or_curl_no_check $use_curl $PLPLOT_URL plplot-5.9.11.tar.gz fi check_md5sum plplot-5.9.11.tar.gz "153782509a13938230f740ee446389d0" # tar -zxf plplot-5.9.11.tar.gz cd plplot-5.9.11/ mkdir Compilation cd Compilation $CmakeEXE .. -DCMAKE_INSTALL_PREFIX=. \ -DENABLE_python=OFF -DENABLE_java=off -DENABLE_qt=off \ -DENABLE_tk=off -DENABLE_tcl=off \ -DPLD_aqt=off -DPLD_psttf=off -DPLD_wxwidgets=OFF -DDEFAULT_NO_CAIRO_DEVICES=ON make -j $cpus make install echo "Plplot done" else echo "Plplot SKIPPED !" fi # starting GDL : 2 cases : with the CVS or the 0.9.6 vanilla version # we don't need to manage the step here ... (always 5 or 6) cd $RACINE if [ "$gdl_cvs" -eq 1 ] ; then echo "preparing to compiled GDL 0.9.6 CVS version" gdl_path='gdl-0.9.6cvs'`date +%y%m%d` gdl_name=${gdl_path}'.tgz' if [ ! -e $gdl_name ] ; then run_wget_or_curl_v2 $use_curl $GDL_CVS_URL $gdl_name fi # the GDL CVS TGZ file comes with a gnudatalanguage/gdl/ path inside ... we manage it tar -zxf $gdl_name mv gdl $gdl_path else echo "preparing to compiled GDL 0.9.6 VANILLA version" gdl_path='gdl-0.9.6' gdl_name=${gdl_path}'v2.tgz' if [ ! -e $gdl_name ] ; then run_wget_or_curl_v2 $use_curl $GDL_VANILLA_URL $gdl_name fi tar -zxf $gdl_name fi # cd $gdl_path if [ -d "build" ]; then \rm build/ else mkdir build fi cd build $CmakeEXE .. \ -DREADLINEDIR=$RACINE/readline-6.3/Compilation/ \ -DGSLDIR=$GSL_PATH \ -DPLPLOTDIR=$RACINE/plplot-5.9.11/Compilation/ \ -DWXWIDGETS=off -DMAGICK=OFF -DNETCDF=OFF -DHDF=OFF \ -DHDF5=off -DFFTW=OFF -DEIGEN3=OFF -DPSLIB=OFF -DPYTHON=OFF make -j $cpus # if [ "$gdl_check" -eq 1 ] ; then make check fi gdl-0.9.7/scripts/rpm4gdl.sh0000775000175100017510000000327413040614410015557 0ustar coulaiscoulais# # Alain C. and Ilia N. : June 2015 # A simple script to help end users who can be sudo to add # as much as possible dependances needed for GDL compilation # BEFORE runing "cmake" # # On Debian or Ubuntu systems, we need the "dpkg-query" # command to check wether the packages are installed. # # On RPM-based systems (CentOs, Fedora, RH, Suse, Mageia ...) # we try to use just "rpm -qa" # # know problem : CentOS 5: libX11-devel, Suse 11 : xorg-x11-devel # echo 'Please wait ! need some time.' echo ' ' # mandatory_dep_list=("readline-devel" "zlib-devel" "libpng-devel" "gsl-devel" "plplot-devel" "libX11-devel" "xorg-x11-devel") # dep_to_aptget="" # for dep in ${mandatory_dep_list[*]}; do # echo $dep status=$(rpm -qa $dep 2>/dev/null | grep -c "$dep") #| grep -c "$dep") #echo $status $dep if [[ ${status} -eq 0 ]] ; then dep_to_aptget=$dep_to_aptget" "$dep fi done # #echo ${mandatory_dep_list[*]} if [[ ${#dep_to_aptget} -gt 0 ]] ; then echo "Missing Mandatory packages you need to install :" echo "sudo rpm -i"${dep_to_aptget} else echo "NO Missing Mandatory packages" fi # dep_to_aptget="" extra_dep_list=(GraphicsMagick-c++-devel ImageMagick-c++-devel wxGTK-devel netcdf-devel hdf5-devel fftw-devel python-devel udunits2-devel eigen3-devel pslib-devel grib_api-devel) # for dep in ${extra_dep_list[*]}; do status=$(rpm -qa $dep 2>/dev/null | grep -c "$dep") #echo $status $dep if [[ ${status} -eq 0 ]] ; then dep_to_aptget=$dep_to_aptget" "$dep fi done # echo "" if [[ ${#dep_to_aptget} -gt 0 ]] ; then echo "Missing packages you may would like to install :" echo "sudo rpm -i"${dep_to_aptget} else echo "NO missing extra packages" fi gdl-0.9.7/scripts/which_packages_to_add.sh0000775000175100017510000000116513040614410020455 0ustar coulaiscoulais if [[ -z /etc/issue ]] ; then line=`sed "/^[ \t]*$/d" /etc/issue | head -1` fi #lower case line=${line,,} # list_RPM_GNULinux=(suse mageia centos redhat) list_APT_GNULinux=(debian ubuntu mint) # rpm=0 for os in ${list_RPM_GNULinux[*]}; do echo $line $os if [[ "$line" =~ "${$os}" ]]; then rpm=1 fi done apt=0 for os in ${list_APT_GNULinux[*]}; do echo $line $os if [[ "$line" =~ "${$os}" ]]; then apt=1 fi done if [[ $apt -eq 0 ]] && [[ $rpm -eq 0 ]] ; then echo "unknown system, please report !" fi if [[ $apt -eq 1 ]] ; then aptget4gdl.sh fi if [[ $rpm -eq 1 ]] ; then rpm4gdl.sh fi gdl-0.9.7/scripts/init_gdl_CVS.sh0000775000175100017510000000047713040614410016514 0ustar coulaiscoulais# # AC 21/01/2008 # create a copy of the current status of the CVS from nothing # echo 'just press enter for the passwd !' echo '' # CVS_PATH=/cvsroot/gnudatalanguage CVS_SITE=anonymous@gnudatalanguage.cvs.sourceforge.net # cvs -d:pserver:$CVS_SITE:$CVS_PATH login cvs -z3 -d:pserver:$CVS_SITE:$CVS_PATH checkout gdl # gdl-0.9.7/scripts/gdlde_update_CVS.sh0000775000175100017510000000066113040614410017337 0ustar coulaiscoulais# # AC 01/08/2015 # update an already existing CVS with sub-directories # should be run at top of the root of the CVS (e.g. gdlde/) # echo 'This is for the GDLDE part : IDE for GDL' echo '' # echo 'just press enter for the passwd !' echo '' # CVS_PATH=/cvsroot/gnudatalanguage CVS_SITE=anonymous@gnudatalanguage.cvs.sourceforge.net # cvs -d:pserver:$CVS_SITE:$CVS_PATH login cvs -z3 -d:pserver:$CVS_SITE:$CVS_PATH update -d gdlde # gdl-0.9.7/scripts/README0000664000175100017510000000255313040614410014526 0ustar coulaiscoulaisAlain C. and Ilia N. July 2015 Please post improvments on the Discussion http://sourceforge.net/p/gnudatalanguage/discussion/338691/ or here http://sourceforge.net/p/gnudatalanguage/patches/ Just collecting few useful scripts : * The CVS side : ** init_gdl_CVS.sh : How to do the first checkout of the CVS of GDL ** update_gdl_CVS.sh : How to uptade the CVS ** same for GDLDE, an IDE for GDL: gdlde_init_CVS.sh and gdlde_update_CVS.sh * The packages side Which packages you need for a given distro, the mandatory ones and some optional ones. This is convenient on a new machine before running the first "cmake" to avoid install in N times the various packages we need. These scripts are not perfect (e.g. it is not that easy to manage non LSB systems, it is not so easy to manage the virtual packages like xserver-xorg-dev vs libx11-dev : both are OK) and we really welcome your feedback. ** which_packages_to_add.sh : if you don't really know if you are using a APT or a RPM based system ** aptget4gdl.sh : for APT based systems (working well on recent Debian and Ubuntu) ** rpm4gdl.sh : for RPM based systems (not that bad on CentOS) ** a minimal script which can work on a very large number of OS : most Linux, OSX and MSwin. On Linux, it is better to run before "which_packages_to_add.sh". Details here : http://aramis.obspm.fr/~coulais/IDL_et_GDL/minimum_script4gdl.htmlgdl-0.9.7/ChangeLog0000664000175100017510000207651213040614410013741 0ustar coulaiscoulaisGDL 0.9.6 2015-12-29 gilles-duvert * README: update on widget status * src/gdlwidget.cpp: minor adjustments for cosmetics (2). 2015-12-22 gilles-duvert * src/gdlwidget.cpp, src/widget.cpp: minor adjustments for cosmetics. 2015-12-21 gilles-duvert * src/libinit.cpp: removed unnecessary warnings about FONT * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/widget.cpp: Resizing affects (via TLB_SIZE_EVENT) ok now. Added DYNAMIC_RESIZE and changed way FRAME is handled. 2015-12-17 gilles-duvert * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/widget.cpp: added FONT= support. Also widget_info(/geometry) and alignments should be OK. Still pb with resizing (e.g.: ATV) when wxWidgets > 2.9 . Note that FONT values are wxWidgets/Windows names (like "Helvetica Oblique 32"). 2015-12-12 alaingdl * CMakeLists.txt, CMakeModules/FindEigen3.cmake: because old Eigen3 is not OK for moderm iCore 3/5/7, we check Eigen version (>= 3.2.4) now 2015-12-11 alaingdl * src/initsysvar.cpp: patch 88 to have reproducably buildable in Debian (__DATE__ changed as BUILD_DATE) 2015-12-03 gilles-duvert * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/gdlwxstream.cpp: Correct some bugs. Tested with wxWidgets 2.8 and 3.0 , plplot 5.9.9 and 5.11.1 (plplot-5.11.1 needs to be compiled with -DOLD_WXWIDGETS:BOOL=ON), their new wxdriver is too unstable 2015-12-02 gilles-duvert * testsuite/test_array_indices.pro: Test file for array_indices. * src/pro/array_indices.pro: R. Stockli added /DIMENSION Keyword. * CMakeLists.txt, config.h.cmake: Added finding QHULL, needed to have TRIANGULATE, QHULL et commands working at a future time. * CMakeModules/FindQHULL.cmake: New for finding QHULL, needed to have TRIANGULATE, QHULL et commands working at a future time. 2015-11-13 gilles-duvert * src/CMakeLists.txt, src/libinit_ac.cpp: Temporary removed reference to unfinished "smooth.cpp" work, whose compilation is not... smooth on some machines. To be removed when this function is deemed OK. 2015-10-23 gilles-duvert * src/plotting.cpp: patches for plplot compatibility: invalid use of HAVE_CONFIG in plplot public include. * src/gdlwidget.cpp, src/gdlwidgeteventhandler.cpp: patches for wxWidgets 3.x compatibility (more to come). * src/gdlgstream.hpp, src/gdlwxstream.cpp, src/image.hpp: patches for plplot compatibility: invalid use of HAVE_CONFIG in plplot public include. * CMakeLists.txt, CMakeModules/FindPlplot.cmake, config.h.cmake, src/plotting_contour.cpp: patches for plplot compatibility (library names, functions api, etc that keep changing with plot's whims). Thanks to Orion and Greg. * src/smooth.cpp: saved temporary version of smooth (better, but not yet useable) * src/file.cpp: added comment about PATH_MAX for Windows gurus 2015-10-21 gilles-duvert * src/str.cpp: solves bug #673 2015-10-14 m_schellens * src/dinterpreter.cpp: Fixed bug #667: Accept comma separated file names in .RUN command * CMakeModules/FindImageMagick.cmake, src/GDLLexer.cpp, src/dinterpreter.cpp, src/hdf_pro.cpp, src/typetraits.hpp: Fixed bug #663: Skip in GetLine functions comment lines like empty lines 2015-10-09 gilles-duvert * src/file.cpp: solves bug #672 2015-10-07 gilles-duvert * src/read.cpp: solves bug #670 2015-10-07 alaingdl * testsuite/test_file_search.pro: revisiting "test_file_search.pro", adding 2 problematic new cases (bug 672) * testsuite/add_error.pro, testsuite/test_reads.pro: iinitial import of ADD_ERROR, use to increment errors count and print a message 2015-10-06 gilles-duvert * src/gdlpsstream.cpp: pacify fussy (dumb?) compilers. * testsuite/test_bits_per_pix.pro: Test for support for BITS_PER_PIXEL in PostScript device. Not automatic: provides a ps file for each case, to be examined by eye. 2015-10-05 gilles-duvert * src/gdlpsstream.cpp: support for BITS_PER_PIXEL in PostScript device (correct now). 2015-10-04 alaingdl * src/basic_fun.cpp: trying to correct bug 669 : a=SHFIT(dist(10), [2,3]) should work ! * testsuite/Makefile.am, testsuite/test_window_background.pro: 2 new files for "make check" : "test_reads" and "test_postscript". For the PS, just to give a chance to look at the outputs ... A typo corrected in "test_window_background.pro". 2015-10-04 gilles-duvert * src/deviceps.hpp, src/gdlpsstream.cpp, src/gdlpsstream.hpp, src/graphicsdevice.hpp, src/libinit.cpp, src/plotting_device.cpp: support for BITS_PER_PIXEL and !P.FONT in PostScript device. 2015-10-04 alaingdl * testsuite/test_reads.pro: initial import of TEST_READS (READS is currently not working with "," (comma) as separator) 2015-09-26 gilles-duvert * src/deviceps.hpp, src/gdlpsstream.cpp, src/gdlpsstream.hpp: This revision should permit to plot images at the correct location for PostScript output. * src/plotting_device.cpp: corrected bug interpretation landscape or portrait * testsuite/test_tv_ps.pro: better test 2015-09-20 gilles-duvert * src/GDLLexer.cpp, src/gdlc.g: corrected bug where PSlibHacks was messing up the (otherwise correct) PostScript output. 2015-09-18 pjb7687 * src/basic_fun.cpp: Changing WIN32 -> _WIN32. WIN32 (without underscore) is not defined in some compilers. 2015-09-17 gilles-duvert * src/deviceps.hpp: corrected bug where PSlibHacks was messing up the (otherwise correct) PostScript output. * src/gdlpsstream.hpp: minor changes to keep cppcheck happy. 2015-09-16 alaingdl * src/basic_pro.cpp: fixing bug reported by EH on: message,'here', level=1, /info when we are already at the main level 2015-09-14 gilles-duvert * src/objects.cpp: reverted the change of IsFun(), we gained speed in procedure compilation, alas it had sideeffects. 2015-09-10 gilles-duvert * src/basic_fun.cpp, src/basic_pro.cpp: minor changes to keep cppcheck happy. 2015-09-10 alaingdl * NEWS: update * testsuite/Makefile.am, testsuite/test_message.pro: updating the code for "test_message.pro", add it to automatic "make check" 2015-09-09 gilles-duvert * src/libinit.cpp: Added dummy options to SHADE_SURF to gain compatibility. (noticeably with XSURFACE). * src/gdlwxstream.cpp: Enable plplot's wxWidgets backends 0,1 or 2 by setting env variable GDL_WX_BACKEND * src/plotting.cpp, src/plotting_oplot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp: Do we get both correct positioning & clipping, in !P.MULTI modes as well as when a projection is active? 2015-09-07 gilles-duvert * src/dialog.hpp, src/dialog.cpp: replaced macro to be compatible with wxWidgets ver. 2.8 according to https://wiki.wxwidgets.org/Converting_everything_to_and_from_wxString 2015-09-07 alaingdl * src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: adding LEVEL keyword in MESSAGE * testsuite/test_message.pro: initial import of "test_message.pro", a draft. * testsuite/test_xdr.pro: revisiting "test_xdr.pro", I had some troubles. 2015-09-06 gilles-duvert * src/deviceps.hpp, src/gdlwidget.cpp, src/gdlwidgeteventhandler.cpp, src/hdf5_fun.cpp, src/image.cpp, src/math_fun_ng.cpp: minor changes to keep cppcheck happy. 2015-09-06 alaingdl * testsuite/gdl_idl_fl.pro, testsuite/test_formats.pro, testsuite/test_plot_oo.pro: updating "test_plot_oo" in such a way it can count plotting types. SVG and PS outputs also possible. IDL and FL possible too. 2015-09-06 gilles-duvert * src/gdlsvgstream.cpp: removed memory leak 2015-09-05 gilles-duvert * src/plotting_oplot.cpp, src/plotting_plots.cpp: Enabled correct positioning in !P.MULTI mode + projections (hopefully) * src/plotting.cpp: Plotting routines that do not clear the plot must take care solely of changes in ![X|Y].S . AXIS should reset the plplot box if the SAVE argument is used. 2015-09-05 alaingdl * src/basic_pro.cpp: New version for HELP, calls=c based on SimpleDumpStack() in the same file. 2015-09-05 gilles-duvert * src/plotting.hpp, src/plotting_axis.cpp, src/plotting_contour.cpp, src/plotting_oplot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp: Plotting routines that do not clear the plot must take care solely of changes in ![X|Y].S . AXIS should reset the plplot box if the SAVE argument is used. 2015-09-05 alaingdl * testsuite/Makefile.am, testsuite/test_pmulti_basic.pro: simple graphical test to see whether we introduce regression related to !p.multi and OPLOT. May be extensible for other Devices (PS, SVG ...) ? 2015-09-03 alaingdl * src/plotting.cpp, src/plotting_oplot.cpp: correcting OPLOT with log scale. Pb detected via Coyote Lib. and test case "additional_axes_plot" in debian/test/test_coyote.pro 2015-09-03 gilles-duvert * src/basic_pro.cpp: corrected regression introduced by 1.192 2015-09-03 alaingdl * src/plotting_plot.cpp: improving the way xLog and Ylog are managed (plot_oo or /xlog or /xtype) see "test_plot_oo.pro" for test case 2015-09-03 gilles-duvert * src/dcompiler.cpp, src/dcompiler.hpp, src/objects.cpp: by modifying the IsFun() method we gain speed in procedure compilation. 2015-09-03 alaingdl * src/basic_pro.cpp: change in Help, Calls=callStack to return also the current level ! 2015-09-02 gilles-duvert * src/gdlgstream.hpp: replaced FALSE by false * src/plotting.cpp: corrected memory leaks... * src/gdlgstream.hpp, src/plotting_device.cpp: corrected memory leak 2015-09-01 gilles-duvert * src/gdl.cpp, src/initsysvar.cpp, src/initsysvar.hpp: added gdl commandline option --fakerelease to have !VERSION.RELEASE match any value requested by a script. * NEWS, src/basic_fun.cpp: update routine_info to report all routines/functions if so desired. 2015-08-31 gilles-duvert * src/ifmt.cpp, src/ofmt.cpp: corrected calendar format for seconds in input/output. * src/plotting.cpp, src/plotting.hpp, src/plotting_axis.cpp, src/plotting_contour.cpp, src/plotting_plot.cpp, src/plotting_shade_surf.cpp, src/plotting_surface.cpp: takes care of xtickunits option, better (but far from ideal) multi axis (option [XYZ]units) support. * src/libinit.cpp: added comment 2015-08-28 gilles-duvert * src/gdlc.g, src/GDLLexer.cpp: solves bug #663 2015-08-27 alaingdl * src/file.cpp, src/str.cpp: more changes related to wordexp in "file_info" and "file_test", related to problems in FILE_DELETE. 2015-08-26 gilles-duvert * src/gdlwxstream.cpp: Workaround try for pacifying fussy compilers arguing about an invalid type of parameter for SetLogicalFunction(). 2015-08-25 gilles-duvert * src/FMTOut.cpp, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.hpp, src/dstructgdl.hpp, src/format.out.g, src/nullgdl.cpp, src/nullgdl.hpp, src/ofmt.cpp: Formats X and strings were not correctly handled in the subcase of output calendar format. * src/libinit.cpp: option name MONTH -> MONTHS * src/gdlwxstream.cpp: corrected invalid type of parameter for SetLogicalFunction(). * src/default_io.cpp: changed again xdr complex-handling functions to pacify windows-based compilers. use testsuite/test_xdr.pro to check correctness. 2015-08-24 gilles-duvert * src/FMTOut.hpp, src/datatypes.hpp, src/format.out.g, src/FMTIn.cpp, src/FMTIn.hpp, src/FMTLexer.cpp, src/FMTOut.cpp, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/dstructgdl.hpp, src/format.g, src/format.in.g, src/ifmt.cpp, src/nullgdl.cpp, src/nullgdl.hpp, src/ofmt.cpp, src/specializations.hpp: Completed support of calendar format codes, including repeat count for output format, still some unfinished work for input format. Also, corrected a bug in input formatting that preventing correct parsing in the presence of the "X" code or strings. * src/default_io.cpp: changed xdr complex-handling functions to prevent compiler problems. 2015-08-20 alaingdl * testsuite/Makefile.am, testsuite/test_window_background.pro: initial import to check whether the background color is OK for WINDOW or PLOT (as it was already OK with ERASE) The automatic test is working for DEVICE, /decomposed Visual test OK for DEVICE, decomposed=0 2015-08-19 gilles-duvert * src/FMTLexer.cpp, src/FMTOut.cpp, src/FMTParser.cpp, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.hpp, src/format.g, src/format.out.g, src/nullgdl.cpp, src/nullgdl.hpp, src/ofmt.cpp, src/specializations.hpp: Support of calendar format codes: output formatting OK with the exception of repeat count ( e.g.: in FORMAT='(2C())', the repeat count 2 is ignored) 2015-08-18 gilles-duvert * src/plotting.cpp, src/plotting_map_proj.cpp: replaced obsoleted finite() with isfinite() * src/devicewx.hpp, src/devicex.hpp, src/gdlwxstream.cpp: Added SET_GRAPHICS_FUNCTION for WXWidgets (e.g., use of cursor in astrolib's look.pro). Also corrected a logic bug that prevented setting graphic functions or cursor in some cases. * src/objects.cpp: temporary avoid to purge the memory reserved by commons during final exit (double delete for structures in common not handled would make GDL crash on exit in some cases). This tidying is not really necessary anyway. * src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlwxstream.cpp, src/graphicsdevice.cpp, src/graphicsdevice.hpp, src/plotting.cpp, src/plotting_windows.cpp, src/gdlwinstream.cpp, src/gdlxstream.cpp, src/plotting_erase.cpp: Solved problems related to concurrency of background color and index 0 of current palette (a plplot "feature") by reserving the background color separately and using it only for the plplot equivalent of ERASE (bop()). The reserved background color should now be properly initialized in graphic windows creations (WINDOW, WSET) at least for X,WX and WIN (PS background is always white). Corrected also a bug related to improper use of CHANNEL value for per-channel ERASE. 2015-08-17 alaingdl * src/plotting_windows.cpp: In fact, it was not realized that we need to manage the background color in WINDOW. Should work now. This come from tests within Nika pipeline and HEALPix feedbacks. 2015-08-13 gilles-duvert * src/gdlxstream.cpp: should better correct color=0 bug 2015-08-11 alaingdl * src/gdlxstream.cpp: trying to solve the famous bug of white on white in Device, decomposed=0 plot, findgen(10), back=255, color=0 (mainy famous codes are suffering from that : PSM, Nika, Ulyss) 2015-08-01 alaingdl * src/least_squares.cpp: B argument to LA_LEAST_SQUARES can now be an array. Other details fixed. * src/pro/make_dll.pro: better version for MAKE_DLL, this one should works on Linux, may be OSX, please report any improvment. Needed by Nika2 pipeline. First commit after SourceForce crash in July 2015 2015-07-14 alaingdl * testsuite/Makefile.am, testsuite/test_la_least_square.pro, testsuite/test_la_least_squares.pro: bad name ... moving ... * src/CMakeLists.txt: I forgot to update it for LA_LEAST_SQUARES 2015-07-13 alaingdl * NEWS, src/least_squares.cpp, src/least_squares.hpp, src/libinit_jmg.cpp, testsuite/Makefile.am, testsuite/test_la_least_square.pro: initial import of LA_LEAST_SQUARES (+ tests), based on Eigen3. This code was need for Ulyss 2015-07-11 gilles-duvert * testsuite/test_tv.pro: Patched for bug #659 TEST_TV_OVER_BOX returns gracefully when "Saturn.jpg" is not found. And corresponding windows are not closed (which would generate an error). 2015-07-10 gilles-duvert * src/FMTIn.cpp, src/FMTIn.hpp, src/FMTInTokenTypes.hpp, src/FMTInTokenTypes.txt, src/FMTLexer.cpp, src/FMTOut.cpp, src/FMTParser.cpp, src/format.g, src/format.out.g: en route to correct support of calendar format codes (bis). * src/FMTLexer.cpp, src/FMTLexer.hpp, src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/FMTParser.cpp, src/FMTParser.hpp, src/FMTTokenTypes.hpp, src/FMTTokenTypes.txt, src/format.g, src/ofmt.cpp: en route to correct support of calendar format codes. 2015-07-10 alaingdl * testsuite/Makefile.am, testsuite/test_plot_oo.pro: checking whether the /Xlog and /Xtype keywords are enforced, in PLOT, PLOT_IO/OI/OO * src/pro/make_dll.pro: initial import of MAKE_DLL. This code is NOT finished. !Make_DLL already available in GDL. * src/initsysvar.cpp: adding !MAKE_DLL structure, code itself not ready * src/plotting_plot.cpp: correcting the logic for log related keywords in PLOT, PLOT_IO, PLOT_OI and PLOT_OO 2015-07-09 gilles-duvert * src/format.g: oops forgotten closing brace 2015-07-08 gilles-duvert * src/FMTParser.cpp, src/format.g, src/ofmt.cpp: definitely solves bug #660 2015-07-04 gilles-duvert * src/ofmt.cpp: partially solves bug #660 * src/libinit.cpp: make MESSAGE compatible with more than 1 argument (reloaded). 2015-07-02 alaingdl * NEWS, src/basic_pro.cpp, src/libinit.cpp, src/pro/resolve_all.pro: initial import of RESOLVE_ALL (*.pro), more keywords in RESOLVE_ROUTINE. This was needed for code Ulyss. Work by Ilia N. * src/basic_pro.cpp, src/libinit.cpp: various improvments in RESOLVE_ROUTINE (by Ilia N.) * src/pro/svsol.pro: initial import of SVSOL() as a pro file. Thanks to Eric H. Work and tests by Ilia N. 2015-07-01 gilles-duvert * src/libinit_jmg.cpp: max number of arguments was wrong for randomu, randomn and reform. * src/basic_pro.cpp: make MESSAGE compatible with more than 1 argument, but do nothing more that signal this is not supported. Solves some compatibilty issues. 2015-06-30 gilles-duvert * src/libinit_jmg.cpp: added L64 as ignored option, dirty-patching bug #662 2015-06-29 alaingdl * src/pro/handle_info.pro: patch by Jonathan W. 2015-06-13 gilles-duvert * src/default_io.cpp: removed patches that prevented test_xdr to run correctly on linux. Further changes for other architectures must be surrounded by #ifdef and well documented. * src/pro/interpol.pro: Applied Kalith's patch #86 to make INTERPOL support out-of-bounds scalar third argument 2015-06-11 gilles-duvert * src/hdf_pro.cpp: solves bug 649. Simplified some expressions equivalent to pointer on data. 2015-06-10 gilles-duvert * src/plotting.cpp, src/plotting_map_proj.cpp, src/pro/map_clip_set.pro, src/pro/xmanager.pro, src/pro/xregistered.pro: better support, although far from final, of map projections splitting and contour closing/filling. aligned more xmanager common on what idl does. * src/gdlwidget.cpp: solves temporary bug #655. See comments in bug report 2015-06-05 alaingdl * testsuite/Makefile.am, testsuite/test_file_copy.pro, testsuite/test_file_delete.pro, testsuite/test_ishft.pro, testsuite/test_netcdf.pro: fixing various details in codes in testsuite/ 2015-06-04 alaingdl * src/file.cpp, src/str.cpp: trying to solve the dynamic cast issue for input with wildmarks in various FILE* functions (patch bye Ilia N.) 2015-06-04 gilles-duvert * src/ofmt.cpp: corrected bug #654 * src/gdlwidget.cpp, src/gdlwidget.hpp: added code to handle better all types of buttons. * src/gdlwidget.cpp, src/widget.cpp: added tests whenever a static cast for a wxWidget is attempted. 2015-06-02 alaingdl * testsuite/Makefile.am, testsuite/test_bug_3275334.pro, testsuite/test_device.pro, testsuite/test_random.pro, testsuite/test_tv.pro: cleaning up few tests (being able to run on systems without X11 and WIN, only NULL) 2015-06-01 alaingdl * NEWS: update * src/math_fun_gm.cpp: correcting arrays combinations for few extra Math functions (cf "test_math_function_dim.pro") * src/pro/file_move.pro: initial import of pro FILE_MOVE (By Ilia N.) * testsuite/Makefile.am, testsuite/test_file_move.pro: initial import of "test_file_move.pro" * testsuite/test_math_function_dim.pro, testsuite/test_MathFunctionsDim.pro: renaming "test_MathFunctionsDim.pro" into "test_math_function_dim.pro" 2015-06-01 gilles-duvert * src/pro/ishft.pro: rewritten ishft using inputs from B. Dieckmann and new test cases. Should be written in C++ for performance. 2015-06-01 alaingdl * src/math_fun_ac.cpp, src/math_fun_ng.cpp: correcting Besel functions and Voigt to follow changes in IDL 8.4 for input ([1],[N]), which return now [1]. More to come : other Math. functions. 2015-05-29 pjb7687 * src/pro/xdisplayfile.pro: Allows zero-length string ("") for filename in Xdisplayfile. 2015-05-26 alaingdl * testsuite/test_file_info.pro, testsuite/test_file_test.pro: initial import of "test_file_info" (by Ilia), to be extend. Better messages for "test_file_test". Not tested on OSX and MSwin. * testsuite/Makefile.am, testsuite/test_file_test.pro, src/file.cpp: initial import of "test_file_test.pro", symlink now well detected in FILE_TEST(). work by I. Natchkebia 2015-05-22 gilles-duvert * src/ofmt.cpp: pass new (complete?) format test test_formats.pro 2015-05-22 alaingdl * src/pro/xdisplayfile.pro: adding /editable keyword in "xdisplayfile.pro". unfortunately we cannot add new lines :( few others tests added. * src/pro/dialog_message.pro: having same messages in boxes if wxwidgets or zenity 2015-05-21 alaingdl * testsuite/formats.idl, testsuite/test_formats.pro: rewriting of "test_formats.pro", adding a positive case (+12), regenerating the reference "formats.idl" 2015-05-21 gilles-duvert * testsuite/test_binfmt.pro, src/ofmt.cpp: solves bug #646 * src/ofmt.cpp: solves regression reported in #650 2015-05-15 alaingdl * testsuite/test_null.pro: correcting details in TEST_NULL * testsuite/test_systime.pro: more tests case for SYSTIME, a bug was pending due to lack of tests. 2015-05-13 alaingdl * src/basic_fun_cl.cpp: dimensions and range for input parameters were not properly tested in SYSTIME() ... * src/basic_pro_jmg.cpp, src/basic_pro_jmg.hpp, src/envt.cpp, src/libinit_jmg.cpp: better message for (scalar or 1 element array) But we have cases where we got (e.g) : wait, ['-1.01','12'] % WAIT: Parameter must be a scalar or 1 element array in this context: instead : % WAIT: Expression must be a scalar or 1 element array in this context: . 2015-05-10 alaingdl * src/pro/file_lines.pro: at the end, managing Directories in FILE_LINES() ! 2015-05-09 gilles-duvert * src/objects.cpp: Patch by GJ to have #threads computation faster for windows * src/gtdhelper.cpp, src/basic_fun_cl.cpp: Patch by GJ to have SYSTIME(1) working in windows * src/file.cpp: typo: debug print line was always printed 2015-05-08 pjb7687 * src/basic_fun.cpp: Applied patch #85 (bugfix) by Jacco A. de Zwart. 2015-05-07 alaingdl * CMakeLists.txt: the message returned if REQUIRED is used instead of COMPONENTS is not clear 2015-05-04 pjb7687 * src/file.cpp: Reverted HIDDEN and SYSTEM in FILE_INFO, which makes GDL crash. 2015-05-03 gilles-duvert * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/widget.cpp: Better treatment of xpad,ypad and what widget_info(./geometry ) returns. Patch should avoid size events to be propagated if they are due to an internal (e.g., widget_control) resize. (XDisplayFile working) plus a few improvements. 2015-04-30 pjb7687 * src/pro/xdisplayfile.pro: Added xdisplayfile 2015-04-29 gilles-duvert * src/basic_pro.cpp, src/dcompiler.cpp, src/libinit.cpp: Patch by GJ: HELP, /FULL and HIDDEN compilation option of procedures/functions basic_pro.cpp - (help_pro re-arranged a bit; isHidden() and fullKW used) libinit.cpp - (keyword FULL to help_pro) dcompiler.cpp - (omit notification of compilation) 2015-04-24 gilles-duvert * src/gshhs.cpp, src/plotting.cpp, src/plotting.hpp, src/plotting_axis.cpp, src/plotting_contour.cpp, src/plotting_oplot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp, src/plotting_xyouts.cpp: added map projection support for axis; minor changes in other plotting routines, although they could have side-effects (please report). note: 3D plots and projections not yet compatible; contour splitting and closing when a projection is present are not reliable (do not report!). 2015-04-23 gilles-duvert * src/plotting_map_proj.cpp: final (?) solution to protect GDL from projections that have no inverse (proj.4 or libproj have tons of them): permits MAP_SET to work on all projections, and calling MAP_PROJ_INVERSE or PROJ_INV will not crash gdl. Too bad there is no internal function in libproj to test the absence of inverse. We are going to avoid using this library. * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp: correction to appropriately treat size events for widget_draw 2015-04-22 pjb7687 * src/includefirst.hpp: Added WIN32_LEAN_AND_MEAN to suppress warnings and reduce compilation time on Windows. 2015-04-21 gilles-duvert * src/plotting_plots.cpp, src/plotting_polyfill.cpp: aligned plotting_plots and plotting_polyfill codes since they are almost equivalent, adding in passing clip/noclip support for polyfill and removing a plots bug. * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/widget.cpp: Now using dynamic Connect() methods for most widgets events. Use a two-step method with timer to trigger a resize event only when user has finished resizing a frame. 2015-04-20 gilles-duvert * src/plotting_polyfill.cpp: polyfill was testing wrongly the Z variable size in the absence of a T3D keyword. 2015-04-17 gilles-duvert * src/plotting_map_proj.cpp: found a better place to protect GDL from projections that have no inverse in proj.4: permits MAP_SET to work on all projections, but MAP_PROJ_INVERSE throws an exception if the inverse function is not defined (*P->inv=0) in the proj.4 library. 2015-04-16 gilles-duvert * src/plotting_map_proj.cpp: protect against two projections that have no inverse in proj.4 (was killing GDL). 2015-04-16 pjb7687 * src/file.cpp: Greg's patch for file_search on Windows #2. 2015-04-15 gilles-duvert * src/gdlwidget.cpp: reverted to 1.91 version, 1.92 was crashing (under linux at least) 2015-04-15 pjb7687 * src/gdlwidget.cpp: Moved initialization code of theGDLApp to GDLWidget::Init(). Removed wxInitialize() and wxUninitialize(). * src/dstructgdl.hpp: Patch for clang++. * src/file.cpp: File.cpp patch by Greg Jung (Reverted the old filesearch/Patternsearch procedure). * CMakeLists.txt: Added compliation flag for Eigen3 on Windows (MinGW). Removed PDCurses dependency. 2015-04-14 gilles-duvert * src/pro/handle_create.pro, src/pro/handle_free.pro, src/pro/handle_info.pro, src/pro/handle_value.pro: Handle_*** pro files are here to mimic at lowest price old functions not supported anymore in IDL, but present in some old codes (cmsvlibn ps_form used by atv...) * src/pro/widget_message.pro: widget_message is just an old name of dialog_message. this file passes the arguments to dialog_message. * src/gdlwidget.cpp: gdl was writing a superfluous "end of line" in (multi-line) text widgets (ugly character in some implementation). 2015-04-14 alaingdl * src/objects.cpp: interverting 2 lines in "object.cpp" should solve a "widget" bug in Debin/Ubuntu OS 2015-04-13 gilles-duvert * src/gdlzstream.cpp: corrected bug #638 2015-04-13 pjb7687 * src/gdlwinstream.cpp: Return 'false' when user close plot window while CURSOR is active. * src/gdlwinstream.hpp, src/gdlwinstream.cpp: This solves Plplot window hang issue while CURSOR is active, when wxWidgets is not compiled with GDL. 2015-04-12 gilles-duvert * src/gdlwidget.cpp, src/gdlwidget.hpp, src/libinit_jmg.cpp, src/widget.cpp: UNITS keyword now correctly taken into account in widget creation and in WIDGET_CONTROL and WIDGET_INFO. Columns and Rows sizes of TABLE widget OK now. * src/devicewx.hpp: cosmetic changes * src/gdlwidgeteventhandler.cpp: wxFrame size event handling freezes some implementations. removed for the moment. 2015-04-12 pjb7687 * src/devicewin.cpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp: Patch to CURSOR on Windows. GDL does not hang anymore while clicking on another plot window. * src/gdlwidget.cpp: Changed set_value to always add newline (which is IDL's behavior). Also added code for proper handling of line ending on Windows (works with wx3.0 and above). * src/dialog.cpp: Added missing semicolon. * src/libinit.cpp: Correction of wrong definition of libinit_jp. 2015-04-11 pjb7687 * src/initsysvar.cpp, src/semshm.cpp: TCHAR -> WCHAR to compile non-unicode build of GDL. * src/basic_pro.cpp: Removed redundant tchar.h. * src/basic_pro.cpp, src/deviceps.hpp, src/basic_fun.cpp, src/basic_pro_jmg.cpp: TCHAR -> WCHAR to compile non-unicode build of GDL. * src/file.cpp: MSVC patch, and excluded checking of X_OK on Windows 2015-04-11 alaingdl * src/file.cpp, src/libinit.cpp: patch by Greg J. for file.cpp including several new TEST_ keywords. 2015-04-11 pjb7687 * src/dinterpreter.cpp: This patch removes trailing '\n' during no-readline mode. 2015-04-10 pjb7687 * src/dinterpreter.cpp: Changed to get the last char with brackets. Also added usleep for POSIX. * src/dinterpreter.cpp: Corrected wrong ifdef block. * src/gdl.cpp: Added an option for upcoming IDE. * src/dinterpreter.cpp: Changed DInterpreter::NoReadline() to properly handle events (using c++11 thread or pthread). 2015-04-09 gilles-duvert * testsuite/demo_widgets.pro: bug correction. 2015-04-09 pjb7687 * src/gdlwidget.hpp: Added missing if block. * src/gdlwidget.cpp, src/gdlwidget.hpp: Moved GDLApp initialization code before the events sending part. Alternative removing method is implemented for 'children' and 'followers'. * src/file.cpp: Added code to let MSVC check the fils is executable or not properly. * src/gdl.cpp: Changes due to Windows don't have set/getrlimits. 2015-04-08 alaingdl * src/pro/dialog_message.pro: explicitly splitting DIALOG_MESSAGE in two functions: DIALOG_MESSAGE_ZENITY and DIALOG_MESSAGE_WXWIDGETS * src/dialog.cpp: in DIALOG_PICKFILE(), in the WX version, when the path is not provided, we should work in current directory. But recent Gnome/Wx is using by default the previous path is no path provided ... (but case " DIALOG_PICKFILE(path='..')" and "FILE_SEARCH('..',/full)" are not working well now) * src/pro/dialog_pickfile.pro: in order to be able to run the Zenity-based version (e.g. regression tests), splitting DIALOG_PICKFILE in two: DIALOG_PICKFILE_WXWIDGETS and DIALOG_PICKFILE_ZENITY 2015-04-08 gilles-duvert * src/gdlwidget.cpp: bug correction. * src/gdl.cpp: added routine to augment stack size (at least up to the needs of the test_dicom procedure). Thanks to OP and discussion #338693. * src/dialog.cpp: DIALOG_MESSAGE_WXWIDGETS now accepts array of strings. * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/widget.cpp: Added WIDGET_INFO /REALIZED. 2015-04-07 alaingdl * src/file.cpp, src/libinit.cpp: adding 3 keywords to FILE_SEARCH: TEST_DIRECTORY, TEST_REGULAR and TEST_EXECUTABLE. Not sure /test_exe is OK. May be the code could be factorized ?! 2015-04-07 gilles-duvert * src/plotting.cpp, src/plotting.hpp, src/plotting_oplot.cpp, src/plotting_plots.cpp, src/plotting_xyouts.cpp, src/plotting_plot.cpp: solves bug #639 and a few unreported others... Removed templating of a few graphic functions since we accept only doubles. * testsuite/test_map.pro: noted a potential problem. * src/basic_pro.cpp: prevent throw on not-found files 2015-04-07 pjb7687 * src/dialog.cpp: Added code to support wx2.8, which does not have wxCANCEL_DEFAULT. 2015-04-07 alaingdl * CMakeLists.txt: desactivating a test for wxwidgets in plplot, not working widely now. 2015-04-07 pjb7687 * src/dialog.cpp, src/dialog.hpp: Added conversion code for all strings, assuming that all strings are encoded in UTF-8. 2015-04-06 pjb7687 * src/pro/polywarp.pro: Corrected typos 2015-04-05 gilles-duvert * src/plotting.cpp: added protection against invalid POSITION kw values. 2015-04-05 pjb7687 * src/pro/dialog_message.pro, src/pro/dialog_pickfile.pro: Added "on_error, 2". * src/pro/polywarp.pro: Added POLYWARP. * src/dialog.cpp, src/dialog.hpp, src/libinit_jp.cpp, src/pro/dialog_message.pro: New implenentation with wxWidgets is added. * src/pro/dialog_pickfile.pro: Corrected a typo * src/gdlwinstream.cpp: Bug fix on GetHwnd() 2015-04-04 pjb7687 * src/gdlwinstream.cpp: Manually destoy window when GDLWinstream is deleted. * src/file.cpp: Modified PatternSearch() to use proper path seperator. * src/libinit_jp.cpp, src/CMakeLists.txt, src/dialog.cpp, src/dialog.hpp, src/libinit.cpp: Added new implementaion of DIALOG_PICKFILE using wxWidgets. * testsuite/CMakeLists.txt: Added support for MSVC * src/pro/dialog_pickfile.pro: New implenentation with wxWidgets is added. * src/file.cpp: Updated FILE_DIRNAME, like IDL's behavior. 2015-04-04 gilles-duvert * README: update section on widgets * testsuite/demo_widgets.pro: removed test_widgets.pro and added demo_widgets.pro 2015-04-04 alaingdl * CMakeLists.txt: hope to have smater message * CMakeLists.txt: this one seems to be a better test ! (if plplot compiled with wxwidgets !) 2015-04-04 pjb7687 * src/basic_fun.cpp: Removed _UNICODE blocks. * src/basic_pro_jmg.cpp, src/libinit.cpp, src/basic_pro.cpp: Removed _UNICODE blocks. Also added new 'wait' implementation on Windows (need test). * src/gdlwinstream.cpp: Removed redundant HBITMAP 2015-04-03 gilles-duvert * src/pro/xmanager.pro, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/objects.cpp, src/widget.cpp: last batch of widget support --- almost complete now. * src/initsysvar.cpp: for some scripts we need to pretend to be better than 6.4 (and we are!) 2015-04-03 pjb7687 * src/pro/write_tiff.pro: Naive implementation of write_tiff * src/devicewin.cpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp: Improved redraw code 2015-04-03 alaingdl * CMakeLists.txt: 2 typos found * CMakeLists.txt: various changes : test if plplot is ON for wxwidgets, order of IM/GM tests 2015-04-03 pjb7687 * CMakeLists.txt: Changed CMake to link libgomp and libpthread, instead vcomp, with MinGW. 2015-04-02 pjb7687 * src/devicewin.cpp, src/devicewin.hpp: Put whole file into #ifdef _WIN32 block. 2015-04-02 alaingdl * CMakeLists.txt: better message when wXwidgets devel is not available. 2015-04-02 pjb7687 * src/file.cpp: Removed _UNICODE. Small correction on FILE_SERACH on Windows. * src/devicewin.cpp, src/devicewin.hpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp: Autoredraw TV image. Corrected several miswritten parts on PaintImage. More corrections are needed. 2015-04-01 pjb7687 * src/gdlwinstream.cpp: Removed debug purpose cout. * src/gdlwinstream.cpp: GIN now accepts mouse click events only in active window. Also paintimage will draw image with proper offset. * src/devicewin.cpp: Do not process event if no window opened. * src/devicewin.cpp: Rewrote code for setting intitial window size, using plplot intenal functions. * src/gdlwinstream.cpp: Changed color code to be unsigned char. * src/devicewin.cpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp: Removed 'resizing' code, which is duplicate with the original (in devicewin.cpp). Instead, set proper MaxSizes. Added code to set window title manually on Windows. 2015-03-31 pjb7687 * src/devicewin.cpp, src/devicewin.hpp: Tab correction * src/devicewin.cpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp: Moved resize / move code to WOpen. * src/gdlwinstream.cpp, src/gdlwinstream.hpp: Moved cursor data to gdlwinstream.cpp, in order to support MSVC. * src/default_io.cpp: A small patch for the last commit * src/gdlwinstream.cpp, src/gdlwinstream.hpp: Tab correction * src/gdlwinstream.cpp, src/gdlwinstream.hpp: Resize/repositions window after drawing image. Calculates more accurate cursor position using proper WINAPIs. Minor cursor correction (cosmetic). * src/gdlwinstream.cpp, src/gdlwinstream.hpp: Updated crosshair cursor to be more like as IDL's one. Also removed ClipCursor, which makes wrong behavior. 2015-03-30 pjb7687 * src/gdlwinstream.cpp: Removed redundant HDC. * src/gdlwinstream.cpp: Faster TV using GetDIBits and SetDIBitsToDevice. * src/plotting_windows.cpp: Initialize 'retainType' to be a proper value (=0) before using it. * src/basic_pro.cpp: On Windows, openr, openw, and openu now open file in binary mode. 2015-03-29 pjb7687 * src/str.cpp: std::toupper and std:: tolower -> toupper and tolower for Visual Studio * src/includefirst.hpp: Disable error C4716 (function must return a value) for Visual Studio * src/file.cpp: Enabled commented part of lib::file_readlink() * src/basic_pro.cpp, src/basic_pro.hpp: Tab correction 2015-03-28 gilles-duvert * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/objects.cpp, src/widget.cpp: improving widget_tree. 2015-03-27 gilles-duvert * src/ofmt.cpp: lots of change to exactly replicate (all?) the b,o,z,Z,i formatting. solves bug 634. Possible side-effects for windows port, to be tested. * testsuite/Makefile.am, testsuite/formats.idl, testsuite/test_formats.pro: added test_formats that test at once quite a large number of format pitfalls... * src/file.hpp: added necessary definition of new file_readlink function to permit compilation ;^) 2015-03-27 pjb7687 * src/file.cpp: Applied Greg Jung's 'small fix' (2015 Feb 02) * src/libinit.cpp: Merging Greg Jung's patch (2015 Jan 28) regarding FILE_SEARCH on Windows, and FILE_READLINK. * src/file.cpp: Merging Greg Jung's patch (2015 Jan 28) regarding FILE_SEARCH on Windows, and FILE_READLINK. (except the TEST keywords of FILE_SEARCH, because some part of the code conflicts with the current CVS.) 2015-03-26 pjb7687 * src/gdlwidget.cpp: Explicit cast of null pointer to (GDLWidgetBase*) * src/devicewin.hpp: Comment out DeviceWIN::WAddFree() which is not implemented yet. 2015-03-25 gilles-duvert * src/gsl_matrix.cpp: patched bug #636 * src/widget.cpp: removed unwanted reference to wx2.8/popupwin.h 2015-03-25 pjb7687 * src/devicewin.hpp: Added missing declaration of member function DeviceWIN::WAdd(). * src/file.cpp: Removing S_ISLNK check on Windows. Also fixes bugs on Windows part pattern matching (the original code tries to match two empty array, instead of actual contents). 2015-03-25 gilles-duvert * src/gdlwidget.cpp: bug correction 2015-03-25 pjb7687 * testsuite/CMakeLists.txt: Testsuite patch for Windows 2015-03-25 gilles-duvert * src/pro/Makefile.am: updated to most recent list of procedures. * src/pro/cw_bgroup.pro: incompatible with current widget support (only idl's cw_bgroup works). temporarily removed to avoid problems. * src/default_io.cpp, testsuite/Makefile.am, testsuite/idl.xdr, testsuite/test_xdr.pro: fixed all XDR and compressed XDR I/O problems (on linux, that is). reads and writes all types of values, structs etc maintaining compatibility with IDL xdr files. Added test_xdr in testsuite and in make check. 2015-03-23 gilles-duvert * testsuite/test_bug_635.f90, testsuite/test_bug_635.pro, testsuite/test_bug_635.dat: added test_bug_635 and related data. Test reading of structs in unformatted fortran data. Not inserted in 'make check' suite, however. * src/pro/unxregister.pro: important widget-related procedure to siletly remove a widget in the list of managed widgets. * src/basic_pro.cpp, src/dstructgdl.hpp: handles gracefully structures for unformatted fortran IO 2015-03-22 gilles-duvert * src/basic_pro.cpp: solves bug in readu when reading structs (byte length of struct is not sum of size of elements, due to, e.g., alignment padding) * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/widget.cpp, src/widget.hpp: widgets: added support for context_events and popups. 2015-03-20 gilles-duvert * src/CMakeLists.txt, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/objects.cpp, src/widget.cpp: widgets: removed gdlwidgetdraw.cpp (merged in gdlwidget.cpp). GROUP_LEADER OK. WIDGET_TREE partially written. Bugs corrections, etc. * src/devicewx.hpp: slightly better version of a pure wxWidgets 'X' device (to be continued, yet incompatible with pure X11 support). 2015-03-16 gilles-duvert * src/gdlxstream.cpp, src/gdlxstream.hpp: Better patch to speedup plots on X11 in decomposed=1 (practically the default for all displays). Will benefit only simple (line) plots, not filled contours. Goes around the limitation of plplot that handle truecolor or static displays as if they had only 256 colors available... 2015-03-14 gilles-duvert * src/hdf_fun.cpp, src/hdf_fun.hpp, src/libinit_jmg.cpp: added hdf_ishdf * src/hdf5_fun.cpp: h5f_is_hdf5 should not give error message. 2015-03-12 gilles-duvert * src/devicex.hpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp: patch (to be tested) to speedup plots on X11. 2015-03-11 gilles-duvert * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/widget.cpp: more widget_control options. removed some code clashing with old versions of wxWidgets. * src/graphicsdevice.hpp: more compliant with fussy compilers * src/image.cpp: cosmetic changes 2015-03-10 alaingdl * testsuite/test_moment.pro: because it seems that X11 output have been strongly slow down in "test_moment" since last year (june 2014), I separate the output display type. With set_plot, 'null' we can access to the computation time only. 2015-03-08 gilles-duvert * src/gdlwidget.cpp, src/gdlwidget.hpp, src/libinit_jmg.cpp, src/widget.cpp: added widget options delay_destroy, group_leader 2015-03-07 gilles-duvert * src/devicex.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwidgeteventhandler.cpp, src/gdlwxstream.cpp, src/libinit_jmg.cpp, src/widget.cpp: much improved widget support. widget_table complete. * src/devicewx.hpp: cosmetic change * src/hdf5_fun.cpp: use now the true H5F_is_hdf5 * src/libinit.cpp: cosmetic changes for readability and robustness * src/objects.cpp: new structures for widget support * src/default_io.cpp, src/dstructgdl.hpp: added ToStreamRaw in default_io to help structure read/write in widget_table (and elsewhere, too) 2015-03-03 alaingdl * src/base64.hpp, src/basic_fun.cpp, src/gsl_fun.cpp, src/str.cpp: some extra std:: are needed to compile the CVS on OSX 9/10 with CLang 6 (std::tolower, std::toupper, std::isspace) * src/objects.cpp, src/basic_fun.cpp: preliminary version for SCOPE_TRACEBACK(/structure), but I did not find a way to provide the IS_FUNCTION information : help welcome ! 2015-03-02 alaingdl * src/basic_pro.cpp: adding HELP, /PATH, out=out * NEWS, src/basic_fun.cpp, src/basic_fun.hpp, src/libinit.cpp: initial import of SCOPE_TRACEBACK(), based on HELP, /traceback. /System and /Structure keywords are not ready. This feature was requested by Nika team (http://ipag.osug.fr/nika2/). 2015-02-25 alaingdl * src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwidgeteventhandler.cpp, src/gdlwxstream.cpp, src/libinit_jmg.cpp, src/objects.cpp, src/widget.cpp, src/devicewx.hpp, src/devicex.hpp, src/gdlgstream.hpp, src/gdlwidget.cpp: Large modification for Widgets from G. Duvert. ATV is working fine for me ! 2015-02-24 alaingdl * src/image.hpp: this include is needed on some Ubuntu/Debian recent systems (not needed on Fedora ...) 2014-12-28 gilles-duvert * src/basic_pro.cpp, src/devicewin.cpp, src/devicewin.hpp, src/gdleventhandler.cpp, src/gdlsvgstream.cpp, src/gdlwinstream.cpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/initsysvar.cpp, src/plotting_windows.cpp: Last Windows version patches by Greg Jung * src/file.cpp, src/file.hpp, src/libinit.cpp: GDL now correctly detects symlinked directories and dangling symlinks. On unix-like systems, anyway. 2014-12-21 gilles-duvert * src/gdlwidget.cpp: explicit cast apparently needed by some compilers 2014-12-20 gilles-duvert * README: commented about the current widget status. * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwidgeteventhandler.cpp, src/widget.cpp: Removed threading in widgets, resulting in stable performances and causality in crashes;^). Complex widgets are now possible (ex:atv.pro). Creation and destruction of widgets are OK. Table and Tree definitely need more work. * src/devicewin.hpp, src/devicewx.hpp, src/devicex.hpp, src/graphicsdevice.cpp, src/graphicsdevice.hpp, src/plotting_windows.cpp: reset number of windows to IDL value. Changed number of 'free' windows (window,/free). A temporary hack, renaming the "WX" device in "MAC", permits to avoid failing a test in coyotegraphics library. "WX", the wxWidgets X-like device should ultimately replace the 'X' device anyway. * src/pro/xmanager.pro: catch a possible error 2014-12-03 alaingdl * NEWS, doc/www/_news.inc.php: updating NEWS file. * src/initsysvar.cpp: adding new sys. var. !TRUE and !FALSE * src/basic_pro.cpp: temporary patch in HELP,/path when the !path is badbly formated. If a path is several times in !path is not managed now. HELP, /path, output=res is also not ready. * src/basic_fun_jmg.cpp, src/libinit_jmg.cpp: in ISA(), adding new keywords : BOOLEAN,INTEGER,FLOAT,COMPLEX,STRING 2014-11-27 gilles-duvert * src/image.cpp: insure that tvrd always returns data with correct (unPurged) dimensions. * src/datatypes.cpp: reset dim.Purge() in array constructors (was a very bad idea to remove them...) 2014-11-24 gilles-duvert * testsuite/test_widgets.pro: added several new events * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/widget.cpp: much improved widget support with all basic facilities present. Needs further work on thread safety and screen updating of widgets. * src/pro/cw_bgroup.pro, src/pro/xmanager.pro: corrected bug * src/objects.cpp: added new structures for widget events * src/plotting.cpp: cosmetic changes to improve readability * src/plotting_cursor.cpp: no message * src/magick_cl.cpp: use PaletteType instead of magic numbers * src/plotting_misc.cpp: correct behaviour of tvlct * src/plotting_device.cpp, src/plotting_windows.cpp, src/libinit.cpp: support for DEVICE,/COPY. * src/image.cpp, src/image.hpp: removed all instances of TVRD, added DEVICE,/COPY and factorized code for tv(), tvrd(). * src/graphicsdevice.cpp, src/graphicsdevice.hpp: support for DEVICE,/COPY. * src/gdlzstream.hpp, src/gdlzstream.cpp: removed all instances of TVRD, added DEVICE,/COPY and factorized code for tv(), tvrd(). * src/gdlxstream.cpp, src/gdlxstream.hpp: removed all instances of TVRD, added DEVICE,/COPY and factorized code for tv(), tvrd(). Support for WINDOW,/PIXMAP * src/gdlwxstream.cpp, src/gdlwxstream.hpp: removed all instances of TVRD, added DEVICE,/COPY and factorized code for tv(), tvrd(). * src/gdlgstream.hpp, src/gdlgstream.cpp: removed all instances of TVRD, added DEVICE,/COPY and factorized code. Also, trick silly plplot driver to keep fontsize constant whatever the page size. * src/dinterpreter.cpp: patch to have ".s" equivalent to ".step" * src/devicex.hpp, src/devicez.hpp, src/devicewx.hpp: removed all instances of TVRD, added DEVICE,/COPY and factorized code. * src/deviceps.hpp: trick silly plplot driver to keep fontsize constant whatever the page size. * src/datatypes.cpp: removed dim.Purge() in array constructors, since they conflict with several behaviours (like in tvrd). purge of superflous dimensions should be done case-by-case. *This patch may have unwanted effect elsewhere* * src/basic_fun.cpp: setting !err to the number of elements of "where" (compatibility with old *DL versions, not doing that creates unexpected problems with old procedures that still use !err). 2014-10-23 gilles-duvert * src/plotting_convert_coord.cpp: insure coordinate system type are initialised to some default value. 2014-10-13 alaingdl * doc/www/_news.inc.php: news in GDL web page * doc/www/_news.inc.php: 0.9.5 ! 2014-10-12 gilles-duvert * testsuite/test_widgets.pro, src/gdlwidget.hpp, src/libinit_jmg.cpp, src/objects.cpp, src/pro/xmanager.pro, src/widget.cpp, src/basic_pro.cpp, src/gdlwidget.cpp, src/gdlwidgetdraw.cpp, src/pro/xregistered.pro: improvements in widgets. see test_widgets.pro as example. 2014-10-11 pjb7687 * CMakeModules/FindXportmingw.cmake, testsuite/CMakeLists.txt, CMakeLists.txt, config.h.cmake: Preliminary Xlib support for Win32 * src/smooth.cpp: To resolve MSVC's error C2668 2014-10-10 opoplawski * CMakeLists.txt: Fix Fedora hdf5-devel package name. 2014-10-07 m_schellens * CMakeLists.txt, ChangeLog: 0.9.5 release 2014-10-07 gilles-duvert * src/math_fun_jmg.cpp: simplified finite_helper since BaseGDL::ZERO works now. * src/initsysvar.cpp: Patched f_nan and d_nan to use the facility of the #NAN macro, see bug #621. Also, !error is not readonly at least from 6.4 2014-10-02 gilles-duvert * src/basic_fun.cpp, src/basic_fun.hpp, src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: Added scope_level (works) and pref_set (dummy procedure). * testsuite/test_postscript.pro: update to reflect our progress in compatibility. PostScript Image is correctly scaled at the size of the DATA coordinates. 2014-10-02 alaingdl * src/file.cpp, src/initsysvar.cpp: reverting change in expansion of GDL_PATH. Order in the GDL_PATH is again enforced. GDL 0.9.5: 2014-10-02 gilles-duvert * src/basic_fun.cpp, src/basic_fun.hpp, src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: Added scope_level (works) and pref_set (dummy procedure). * testsuite/test_postscript.pro: update to reflect our progress in compatibility. PostScript Image is correctly scaled at the size of the DATA coordinates. 2014-10-02 alaingdl * src/file.cpp, src/initsysvar.cpp: reverting change in expansion of GDL_PATH. Order in the GDL_PATH is again enforced. 2014-10-01 gilles-duvert * src/gdlwidgeteventhandler.cpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/gdlwidget.hpp: changes to avoid using too recent wxWidgets features. Compiles with wxWidgets 2.8.12 and onwards, not necessarily with all functionalities though. 2014-09-29 gilles-duvert * src/widget.cpp: array of structs support for WIDGET_INFO, /GEOMETRY. * src/widget.cpp: improved widget_info default behaviour * src/plotting_contour.cpp: GJ avoided plplot bug when 1 level only * src/devicewin.cpp, src/devicewin.hpp, src/dinterpreter.cpp, src/gdlgstream.hpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp, src/initsysvar.cpp, src/libinit.cpp, src/basic_pro.cpp: Commited last changes by Greg Jung 2014-09-26 gilles-duvert * src/plotting.cpp, src/plotting_device.cpp, src/plotting_map_proj.cpp, src/plotting_misc.cpp: Accepts silently undefined Keywords * src/plotting_windows.cpp: replaced numerical positioning by keyword * src/plotting_contour.cpp: Accepts silently undefined Keywords * src/pro/smooth.pro: Bugs corrected (only 1D smoothing was made). Simpler and faster since /NAN and MISSING have been implemented in CONVOL. Also, permits dimensions 1 in smooth kernel, as IDL does (permits smoothing truecolor images [3,nx,ny] for example). * src/convol.cpp: protected CONVOL from undefined Keywords using KeywordSet function 2014-09-25 gilles-duvert * src/devicewx.hpp, src/devicex.hpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/image.cpp: removed references to free_mem, a private plplotP.h shortcut. * src/gdlsvgstream.cpp: Commited last changes by Greg Jung * src/devicex.hpp, src/devicewx.hpp: removed SetFocus, uneeded and confusing. * src/devicewin.cpp, src/devicewin.hpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp, src/CMakeLists.txt, src/basic_pro.cpp: Commited last changes by Greg Jung * src/gdlgstream.hpp: removed SetFocus, uneeded and confusing. * src/gtdhelper.cpp, src/gtdhelper.hpp, src/includefirst.hpp: Commited last changes by Greg Jung * src/gdlxstream.cpp, src/gdlxstream.hpp: removed SetFocus, uneeded and confusing. 2014-09-24 pjb7687 * src/devicewin.cpp: Corrected a small bug 2014-09-23 gilles-duvert * src/devicewin.cpp, src/devicewx.hpp, src/devicex.hpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/graphicsdevice.cpp, src/plotting_device.cpp: full set of devices (X, WX, WIN) and widgets now seem to get along almost nicely. * src/graphicsdevice.hpp: provided reasonable default values to some virtual methods. * src/plotting_misc.cpp: restored correct behaviour for GET_SCREENSIZE function. * src/plotting_windows.cpp: transferred GDL_GR_WIN_XXXXX environment variable detection to device Win * src/smooth.cpp, src/deviceps.hpp: use alloca() only for MSC_VER (Windows compiler) 2014-09-22 alaingdl * src/image.cpp: missing #ifdef for systemes without wxwidgets 2014-09-22 pjb7687 * src/image.cpp: Call GetImage() only with wxwidgets. * src/gdlgstream.cpp: Put alloca() into #ifdef block 2014-09-21 pjb7687 * src/gdlgstream.hpp: Changes on casting of pointer values * src/devicewx.hpp, src/devicex.hpp, src/gdlgstream.hpp: Resolved maxWin constants confliction. 2014-09-21 gilles-duvert * src/gdlwidgeteventhandler.cpp: patch use of wxString vs. std::string * src/devicex.hpp: removed old comments. Lets try plplot with threaded X11 windows. * src/gdlwxstream.hpp, src/image.cpp: Changes making coyotelib somewhat happy. * src/gdlwidgeteventhandler.cpp, src/libinit_jmg.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp: Modified BUTTON to have correct nested menus (option /MENU of WIDGET_BUTTON). Droplist and Combobox are two separate objects (different info structures). Plus a lot of minor improvements: coyotegraphics windows are operational now. Still problems with threads: spurious crashes in live update of button widgets. * src/pro/xmanager.pro: added CLEANUP, but it is a fake, needs KILL_NOTIFY to be written. Permits to have coyotegraphics running in a fashion. * src/gdlwxstream.cpp: added necessary functions (crudely) to get wX canvases behave equally toX windows. * src/gdlgstream.hpp: temporary patch before aligning TVRD on TV. * src/objects.cpp: Added struct WIDGET_GEOMETRY 2014-09-21 pjb7687 * src/plplot_wxwidgets.h, src/CMakeLists.txt, src/basic_pro.cpp, src/deviceps.hpp, src/devicewin.cpp, src/devicewin.hpp, src/devicewx.hpp, src/devicex.hpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/gdlxstream.cpp, src/graphicsdevice.cpp, src/gtdhelper.cpp, src/gtdhelper.hpp, src/includefirst.hpp, src/initct.cpp, src/initsysvar.cpp, src/io.hpp, src/objects.cpp, src/plotting.cpp, src/plotting_misc.cpp, src/plotting_windows.cpp, src/smooth.cpp, src/str.cpp, src/terminfo.cpp: 1. Greg's Win32 patch, slightly modified to fit with the current CVS. It also contains windows focusing related patches on devicex.hpp and gdlxstream.cpp. 2. C99 compliant patch, substituted definitions of variable length arrays with using alloca(). 3. Preliminary WX implementations. Not available yet. 4. Resolved winsock2.h and windows.h order issue. To use sockets, include includefirst.hpp. 2014-09-19 gilles-duvert * CMakeLists.txt: removed finding gshhsdir (since now copy of gshhs.h is in src). Changed way to discriminate whether plplot version uses c_plwidth or not (problem with clang compiler) * src/gshhs.cpp: Restored initial gsshs.h file, with the minimum change (POINT-> GSHHS_POINT) to solve compilation on Windows while preserving all the other usual names. Reverted changes in gsshs.cpp to the minimum set of changes acceptable. * src/gshhs.h: Restored initial gsshs.h file, with the minimum change (POINT-> GSHHS_POINT) to solve compilation on Windows while preserving all the other usual names. 2014-09-19 pjb7687 * src/gshhs.h, src/basic_pro.cpp, src/gdlsvgstream.cpp, src/gshhg.h, src/gshhs.cpp: 1. Better mbcs/unicode support in basic_pro.cpp 2. Win32 altanative implementation without mkstemp in gdlsvgstream.cpp 3. Removing gshhs.h and adding gshhg.h to avoid confliction between POINT struct using in Windows API 2014-09-18 alaingdl * src/basic_pro.cpp: in HELP, when only one param, if it is a structure, details are shown. 2014-09-17 gilles-duvert * testsuite/test_widgets.pro: bug correction. * src/gdlwidget.hpp, src/gdlwidget.cpp: correct get_value for buttons, use of UpdateValue in texts, more thread-aware(?). * testsuite/test_widgets.pro: updated version showing scrolled widgets and widget interaction. And bugs, too^(( 2014-09-17 alaingdl * src/gdlwidget.hpp: here, we need to have a convertion into wxString to be able to compile ... 2014-09-17 gilles-duvert * src/gdlwidget.hpp: replaced SetLabelText by SetLabel for wxButton (correct documented way to update the button's text) 2014-09-16 gilles-duvert * src/gdlwidget.cpp, src/gdlwidget.hpp, src/libinit_jmg.cpp, src/widget.cpp: Patches on a few bugs related to get_value and get_uvalue. Timid support of scrolled windows. Patched use of null col= and row= options 2014-09-16 alaingdl * src/basic_pro.cpp, src/file.cpp: corrections in patch from Greg J., related to MSwin port. * src/basegdl.hpp, src/file.cpp, src/initsysvar.cpp, src/libinit.cpp, src/str.cpp: applying patch from Greg, one important point is the ":" vs ";" dir. separator 2014-09-13 m_schellens * src/dcompiler.cpp: better error message for COMMON * src/dcompiler.cpp: fixed bug 625 (crash_common) 2014-09-12 alaingdl * src/basic_pro.cpp: finishing the outputs for Common in HELP. * src/basic_pro.cpp, src/dpro.cpp, src/envt.cpp: Finishing visibility of Var. declared by Common in HELP. Undefined (normal) variables are now also visible. * src/dpro.cpp, src/dpro.hpp: preparing being able to correctly print in HELP Variables defined through Common (e.g. common c, var & HELP, var --> "VAR (common_name) int = 2") 2014-09-12 gilles-duvert * src/gdlgstream.hpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/gdlxstream.hpp: path to support cursor management in other devices than pure X11 * src/plotting_windows.cpp: changes in focus management 2014-09-11 alaingdl * testsuite/test_isa.pro, testsuite/test_levels.pro: initial import for "test_levels.pro", simple way to test HELP,/traceback and also the expected values for lines in code ... * src/basic_pro.cpp, src/libinit.cpp, src/str.cpp: 2 main changes : full realpath to routines files names are now always used (no more relative paths); HELP, /traceback 2014-09-11 gilles-duvert * src/plotting_cursor.cpp: correct behaviour of tvcrs(). 2014-09-10 alaingdl * src/basic_pro.cpp, src/gtdhelper.hpp, src/initsysvar.cpp, src/objects.cpp, src/semshm.cpp, src/terminfo.cpp: at the end, including the mingw patch from Greg. Sorry for delay. This code compiles on GNU/Linux. Test suite OK. Please check ! 2014-09-09 gilles-duvert * src/gdlwinstream.cpp: missing definitions * src/gdlwinstream.cpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/gdlxstream.cpp, src/gdlzstream.cpp: replaced private method plP_esc by public method plcmd, removing dependency from plplotP.h *After this change a complete rebuild from scratch (rm CMakeCache.txt; make) is mandatory* * src/plotting_contour.cpp: added comment. 2014-09-08 gilles-duvert * src/plotting_windows.cpp: moved get_screen_size to plotting_misc + patches by GJ * src/plotting_misc.cpp: get_screen_size() general function now defined here * src/plotting_device.cpp: use device-dependent GetScreenSize() object property. * src/graphicsdevice.hpp: define GetScreenResolution object property. * src/gdlzstream.cpp: removed superfluous code and inclusion of private plplot include (last patch). to be tested. * src/gdlxstream.hpp: relocate plwxd dependency here * src/gdlwinstream.cpp, src/gdlwinstream.hpp: inserted Win patches proposed by GJ. Aligned to new PaintImage function. * src/gdlgstream.hpp: inserted Win patches proposed by GJ * src/devicex.hpp: new GetScreenResolution/GetScreenSize * src/devicewin.hpp: inserted Win patches proposed by GJ * src/gdlwidget.cpp, src/gdlwidgeteventhandler.cpp: removed superfluous devicex dependency * src/graphicsdevice.cpp, src/objects.cpp: moved X11 dependent code from objects.cpp to graphicsdevice.cpp where it belongs. * src/libinit.cpp: changes in function get_screen_size() * src/gdlwxstream.cpp, src/gdlxstream.cpp: removed superfluous tests * src/gdlgstream.cpp: corrected invalid useage of 'True'. 2014-09-08 alaingdl * src/gdlzstream.cpp: mandatory include to compiled without wxwidget ... not clear why it is OK when wxw is here ... 2014-09-06 gilles-duvert * src/devicez.hpp: finalized TV() for Z buffer * src/libinit.cpp: added a bunch of (unused by gdl yet) kw for device, with warning. 2014-09-05 gilles-duvert * src/devicez.hpp, src/gdlzstream.cpp, src/gdlzstream.hpp: Support of TV for Z-Buffer (almost OK) * src/image.cpp, src/image.hpp: removed unused functions * src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp: removed unused function * src/plotting_image.cpp: bug correction: dimension mismatch was possible in some cases if a truecolor image was given without the /TRUE switch. 2014-09-05 alaingdl * src/smooth.hpp, src/smooth.cpp, src/CMakeLists.txt, src/Makefile.am, src/libinit_ac.cpp: initial import of 2 codes for (future) SMOOTH, to be carefully test. * src/gsl_fun.cpp, src/libinit_gm.cpp, src/math_fun_gm.cpp: finishing METHOD= keyword in IGAMMA(); ITER, ITMAX, EPS moved as WarnKey; cleaning few KeywordPresent()/KeywordSet() in "gsl_fun.cpp". 2014-09-04 gilles-duvert * src/gdlxstream.cpp: focus should stay on terminal when a X window is opened. 2014-09-04 m_schellens * src/envt.cpp: fixed EnvT::KeywordPresent( string) 2014-09-04 gilles-duvert * src/devicex.hpp: align GuiOpen with WOpen, commented unused code. * src/gdlwxstream.hpp, src/gdlwxstream.cpp: added method GetWindowDepth() to wxwidgets stream otherwise decomposed=1 does not work 2014-09-04 alaingdl * src/math_fun_gm.cpp: adding return values in METHOD keyword for IGAMMA() 2014-09-04 gilles-duvert * src/devicex.hpp, src/gdlsvgstream.cpp: better syntax thanks to clang compiler warnings 2014-09-03 gilles-duvert * src/devicex.hpp, src/gdlgstream.cpp: setting correct values for !D.N_COLORS and !P.COLOR provides better handling of colors in all outputs. * src/gdlpsstream.cpp, src/gdlsvgstream.cpp: commited Orion's patch proposed in bug 620 2014-09-02 gilles-duvert * src/libinit_jmg.cpp: updated a few KW for WIDGET_ * testsuite/demo_graphics2.pro, testsuite/demo_graphics3.pro: removed initial setup of device X for easy use with other devices. * src/devicex.hpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/plotting.cpp, src/plotting_contour.cpp, src/plotting_erase.cpp, src/plotting_misc.cpp, src/plotting_shade_surf.cpp, src/plotting_xyouts.cpp: Changed color handling. Should improve plotting speed on decomposed=0 displays by a large factor. Hardcopies (PS, SVG) color accurate. see testsuite/demo_graphics*.pro. Tests welcome. * src/gdlsvgstream.hpp: trick to perhaps circumvent a libpng 'feature'. * src/gdlsvgstream.cpp, src/gdlsvgstream.hpp: hopefully correct use of USE_PNGLIB and png.h include file. * src/devicex.hpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/graphicsdevice.hpp, src/plotting_device.cpp, src/plotting_windows.cpp: solves bug #618 2014-09-02 alaingdl * src/plotting_axis.cpp, src/plotting_plot.cpp: adding [xyz]TYPE keywords to PLOT and AXIS * src/plotting_plot.cpp: adding xtype and ytype to PLOT (and PLOT_IO/OI/OO). * src/plotting_contour.cpp: adding xtype and ytype (no ztype) to CONTOUR. * src/libinit.cpp, src/plotting_shade_surf.cpp, src/plotting_surface.cpp: [xyz]type keywords still exist in SURFACE and SHADE_SURF. They are "stronger" than [xyz]log keywords. Cleaning in "libinit.cpp" since now we used keywords names instead keyword number. * src/plotting_windows.cpp: in "plotting_windows.cpp", purging last keywords called by numbers (dangerous if order changed) 2014-09-01 alaingdl * src/libinit_gm.cpp: adding 2 undocumented functions : NR_GAMMA et IDL_IGAMMA. Some cleaning are still necessairy in IGAMMA keywords (e.g iter not return, method not set ...) * src/gdlsvgstream.cpp: I need to add this line to be able to compile on Debian & Ubuntu OS, following https://bugs.launchpad.net/ubuntu/+source/libpng/+bug/218409 * CMakeLists.txt: patch 78 related to change in CMake 3.0 2014-09-01 gilles-duvert * src/devicesvg.hpp: svg device improvements * src/gdlgstream.hpp: corrected typo in definition of constant value. 2014-08-31 gilles-duvert * CMakeLists.txt: corrected typos for detection of libpng 2014-08-30 gilles-duvert * CMakeLists.txt, config.h.cmake: Should detect the presence of the libpng library (needed to activate the support of images (TV command) for SVG device. * src/gdlsvgstream.cpp, src/gdlsvgstream.hpp: Support of TV (images) in SVG device. Needs the presence of the libpng library to be activated. * src/plotting.cpp, src/plotting.hpp, src/plotting_axis.cpp, src/plotting_contour.cpp, src/plotting_plot.cpp, src/plotting_shade_surf.cpp, src/plotting_surface.cpp, src/plotting_xyouts.cpp: Use of Width(). Better support of CHARTHICK in graphic functions. Support of C_CHARTHICK in CONTOUR. * src/plotting_image.cpp, src/plotting_device.cpp: cosmetic changes * src/gdlpsstream.cpp: removed unused * src/gdlgstream.cpp, src/gdlgstream.hpp: introduce Width() that solves the problem of having to use either plwid(PLINT) or plwidth(PLFT) depending on plplot's version. * testsuite/demo_graphics1.pro, testsuite/demo_graphics2.pro, testsuite/demo_graphics3.pro: reset !P.MULTI when exiting these demo files 2014-08-30 m_schellens * src/prognodeexpr.cpp: fix problem with SAVE * README: added some info about ANTLR impact on sources * src/basic_fun_jmg.cpp, src/dcompiler.cpp, src/dpro.hpp, src/envt.hpp, src/prognodeexpr.cpp: fixed bug #613 (crash COMMON) and #614 (ROUTINE_NAMES with common block variable) 2014-08-29 alaingdl * src/FMTIn.cpp, src/FMTIn.hpp, src/format.in.g: should solved bug 617. The change is in "format.in.g", other files (here only "FMTIn.hpp" is chnaged) are regerenated running Antlr (version >= 2.7). See discussions in GDL Devel list ! 2014-08-28 gilles-duvert * src/plotting_plots.cpp, src/plotting_xyouts.cpp: bug correction (uninitialized coordinates for plplot) 2014-08-26 gilles-duvert * src/gdlwxstream.cpp, src/gdlwxstream.hpp: Support for TV in wxWidgets GUIs. * src/devicex.hpp: initialise colormap0 for wxWidgets (in relation with TV) * testsuite/demo_graphics2.pro: handles undecomposed displays too 2014-08-25 gilles-duvert * src/pro/read_image.pro: corrected typo in the previous commit 2014-08-23 m_schellens * src/GDLParser.cpp, src/gdlc.g, src/GDLLexer.cpp: bug #615 (slow compilation): further speed up 2014-08-22 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/GDLLexer.cpp, src/GDLLexer.hpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/gdlc.g, src/magick_cl.hpp: fixed bug #615 (slow compilation) 2014-08-20 gilles-duvert * testsuite/test_tv_ps.pro: new tests for TV for PS output. * testsuite/test_tv.pro: new tests for TV (channels, position) * src/CMakeLists.txt, src/deviceps.hpp, src/devicesvg.hpp, src/devicex.hpp, src/gdlgstream.hpp, src/gdlpsstream.cpp, src/gdlpsstream.hpp, src/gdlsvgstream.cpp, src/gdlsvgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/libinit_jmg.cpp, src/plotting.hpp, src/plotting_image.cpp: Rewrote command "TV" in a more general way. Also for PS device (to be tested). Almost there for SVG (still needs png inline conversion). 2014-08-20 alaingdl * testsuite/test_map.pro: continuing improving "test_map.pro" * src/gdlgstream.hpp: one renaming was not done ... (mm2ndx) 2014-08-19 m_schellens * src/convert2.cpp, src/default_io.cpp, src/getas.cpp, src/str.cpp, src/str.hpp: make GDL understand dD instead of eE for exponentials in data streams (e. g. 3.3D05) 2014-08-19 gilles-duvert * src/plotting_contour.cpp: better handling of contour values. * src/plotting_cursor.cpp: cosmetic changes * src/gdlgstream.hpp, src/plotting_xyouts.cpp: renamed some internal functions * src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp: removed duplicate code * src/plotting_shade_surf.cpp: changes for /SHADES * src/image.cpp: Use MAX_COLOR consistently in this source file 2014-08-18 alaingdl * src/basic_fun_cl.cpp, src/basic_fun_cl.hpp, src/gshhs.cpp, src/gshhs.hpp, src/libinit_cl.cpp, src/libinit_jmg.cpp: Restoring being able to compile GDL without LibProj around. Moving GSHHG_EXISTS(), proj4_EXISTS(), proj4new_exists(). 2014-08-17 alaingdl * src/plotting_windows.cpp: patch from GJ for better MSwin support : win or X11 ... * src/gshhs.cpp: conditionnal compil' for Map_Continents ... 2014-08-14 alaingdl * src/envt.hpp, src/libinit_jmg.cpp, src/matrix_cholesky.cpp, src/matrix_invert.cpp: in "envt.hpp", removing GDL_STRING in GetNumericParDefined; using it in INVERT() and Cholesky codes. Clarifying inputs params in Cholesky codes. 2014-08-13 alaingdl * src/matrix_invert.cpp: forgot to remove a comment :( * src/basic_pro.cpp: min/maj OK for keyword Names= in HELP; filtering on Names= should work for /func, /pro, /routines, /source * src/matrix_invert.cpp: fixing input checks in INVERT() : it was possible to pass a vector (e.g. findgen(10)) without Throw, then code crashes ! 2014-08-12 alaingdl * testsuite/test_map.pro: not downloading again a file if already existing ! * testsuite/test_map.pro: continuing improving "test_map.pro" : mandatory files (if missing map routines and if missing GSHHS data) are downloaded "on demand". 2014-08-11 alaingdl * src/matrix_invert.cpp: We found that the Eigen Invert code is more sensitive to high dynamic range data in matrix to be inverted. If status is bad for the Invert Eigen (if GDL compiled with Eigen !), the Invert GSL way is run also. * src/basic_pro.cpp: various improvments in HELP keywords: HELP,/sys,/brief, HELP,/routine; HELP,/source; HELP,/source, name="*png" ... (it is not finished but much more convenient) 2014-08-10 m_schellens * src/dinterpreter.cpp: Fixed bug #604 (.continue not working at main level) 2014-08-10 alaingdl * src/basic_pro.cpp: details for HELP,/help and HELP,/info * src/pro/loadct.pro, src/pro/read_bmp.pro, src/pro/read_gif.pro, src/pro/read_image.pro, src/pro/read_png.pro, src/pro/read_tiff.pro, src/pro/read_xwd.pro, src/pro/write_bmp.pro, src/pro/write_gif.pro, src/pro/write_image.pro, src/pro/write_jpeg.pro, src/pro/write_pict.pro, src/pro/write_png.pro: correcting a bug in LOADCT, rgb_table=rgb_table; fixing details in various READ/WRITE routines for image formats. * src/libinit.cpp, src/libinit_jmg.cpp: adding warn keywords: FONT in DEVICE, DEFAULT_FONT & CLEAR_EVENTS in WIDGET_CONTROL 2014-08-09 m_schellens * src/basic_pro.cpp: Fixed ticket #611 (free lun in case of OPEN fails) * src/typedefs.hpp: fixed bug in ArrayGuard 2014-08-08 alaingdl * src/libinit_jmg.cpp: adding non-effective DEFAULT_FONT to Widget to go ahead in tests of Chianti code * src/read.cpp: in input (e.g. READS), the character "$" is not useful : we can remove it. 2014-07-31 alaingdl * src/dinterpreter.cpp: interverting Compile and Continue in "dinterpreter.cpp" in order to ensure ".c" will give ".continue". 2014-07-30 alaingdl * src/gshhs.cpp: removing not useful "cout" * testsuite/test_map.pro: helping diagnotic when running "test_map.pro". Do we have the gshhg lib and files ? Is GSHHS_DATA_DIR ok ? Do we have at least one of the projection lib. around ? * CMakeLists.txt, src/gshhs.cpp, src/gshhs.hpp, src/libinit_jmg.cpp: changes related to GSHHG: check for "gshhs.h" in src/; adding GSHHG_EXISTS(), PROJ4_EXISTS(), PROJ4NEW_EXISTS() internal procedures, to be used in testsuite/test_map.pro 2014-07-22 slayoo * src/ncdf_var_cl.cpp: commenting out a debug leftover in ncdf_var_cl.cpp 2014-07-21 alaingdl * src/dinterpreter.cpp, src/dpro.cpp, src/dpro.hpp: new command line first character : # : direct access to inline doc. (arg. number and list of keywords) ToString() method now avalaible for LibProLits, LibFunList, funList, proList. To be used also in HELP. 2014-07-18 alaingdl * src/basic_fun_jmg.cpp: rank is known to be not OK for Objects, we turn it inside ISA() ... * src/basic_fun.cpp: typo when moving lines in PTR_NEW() 2014-07-17 alaingdl * testsuite/test_isa.pro: continuing adding cases into "test_isa" ... * src/basic_fun.cpp: for PTR_NEW(), now multiple calls with PTR_NEW(!null) should work ! 2014-07-16 alaingdl * testsuite/test_isa.pro: continuing improving the coverage of "test_isa" for ISA() * src/basic_fun.cpp: PTR_NEW(input) should work when "input" is !null or undefined (with and without /no_copy). * testsuite/test_null.pro: more tests inside "test_null" * testsuite/test_isa.pro: adding tests into "test_isa": numbers types can be now scalar or array. * src/basic_fun_jmg.cpp, src/libinit_jmg.cpp: ISA() should now be complete. 2014-07-14 alaingdl * src/basic_fun_jmg.cpp, src/basic_pro.cpp: improvments in ISA(), for Objects and Undefined/!null; in HELP, now we clearly distinguish !Null and Undefined variables. 2014-07-14 gilles-duvert * testsuite/demo_graphics1.pro, testsuite/demo_graphics2.pro, testsuite/demo_graphics3.pro: three demo files, 1D, 2D and 3D examples. 2014-07-13 gilles-duvert * testsuite/test_device.pro: test on X11 window position was giving error even with idl. passed that test as warning only. * src/devicex.hpp, src/gdlgstream.hpp, src/gdlwinstream.cpp, src/gdlwxstream.cpp, src/gdlxstream.cpp, src/gdlxstream.hpp: Final changes to separate realm of properties related to the DEVICE with those related to the WINDOWs and the STREAMs. Accordingly, correct results for all currently supported DEVICE,GET_* and DEVICE,SET_* commands. 2014-07-12 slayoo * testsuite/Makefile.am, testsuite/test_bug_n000608.pro: adding test_bug_n000608.pro * testsuite/Makefile.am, testsuite/test_bug_n000607.pro: adding test_bug_n000607.pro 2014-07-12 m_schellens * src/basic_fun_jmg.cpp: Fixed SIZE for HASH and LIST 2014-07-11 gilles-duvert * src/deviceps.hpp, src/devicex.hpp, src/devicez.hpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlwxstream.cpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/graphicsdevice.hpp: nearly complete changes to separate realm of properties related to the DEVICE with those related to the WINDOWs and the STREAMs, i.e., better use of C++ objects. Support for some new DEVICE functions/keywords. Removed recent patches that did not maintain the aspect ratio of symbols and orientations after a redimensioning of windows. * src/initsysvar.cpp: removed recent patches that did not maintain the aspect ratio of symbols and orientations after a redimensioning of windows. * src/libinit.cpp: Added a few DEVICE functions/keywords. * src/plotting_device.cpp: nearly complete changes to separate realm of properties related to the DEVICE with those related to the WINDOWs and the STREAMs, i.e., better use of C++ objects. Add some new DEVICE functions/keywords. * src/plotting_windows.cpp: nearly complete changes to separate realm of properties related to the DEVICE with those related to the WINDOWs and the STREAMs, i.e., better use of C++ objects. * src/plotting.hpp: removed recent patches that did not maintain the aspect ratio of symbols and orientations after a redimensioning of windows. 2014-07-11 m_schellens * src/basic_op.cpp, src/default_io.cpp, src/nullgdl.cpp, src/prognodeexpr.cpp: fixed bug 607 and 608: \!NULL EQ/NE for objects and HELP output for pointers 2014-07-11 alaingdl * README, src/basic_fun_jmg.cpp, testsuite/test_isa.pro: continuing ISA(); small bug in TYPENAME(). 2014-07-07 alaingdl * testsuite/test_list.pro: update of "test_list.pro" to check list::IsEmpty(). But where is "test_hash.pro" ? * NEWS: update (ISA() and TYPENAME(), removing of LA_CHOLDC/LA_CHOLSOL) * src/hash.cpp, src/hash.hpp, src/list.cpp, src/list.hpp, src/overload.cpp: initial import for methods hash::isempty() and list::isempty() * testsuite/Makefile.am, testsuite/test_isa.pro: initial import of "test_isa.pro" written by Levan L. 2014-07-05 gilles-duvert * src/magick_cl.cpp: Patch to prevent 16 bit depth PNGs that Magick does not read well to be opened at all (image dimensions zero!) * CMakeModules/FindImageMagick.cmake: ImageMagick comes now in different version with 16 or 8 "quantum depth" (bytes per pixel color, essentially). I've aligned the .cmake with current distro's cmake. Then, I've added a way to find the necessary CXX_FLAGS that are needed to compile accordingly to the distribution's setup (otherwise there are compile warnings, if not bugs). * CMakeLists.txt: warning abour dynamic drivers potential problem needs to be rechecked -- added a conditional 'may'. 2014-07-04 alaingdl * src/basic_fun_jmg.cpp: initial import for ISA(). Object, List, hash are not ready. code by Levan L. 2014-07-03 alaingdl * MAP_INSTALL, testsuite/test_map.pro: one missing file in MAP_INSTALL, one new nice case for demo. 2014-07-03 gilles-duvert * src/magick_cl.cpp: added patch to save the day even in presence of magick's readIndexes() failure. 2014-07-03 alaingdl * MAP_INSTALL, src/file.cpp, src/file.hpp, src/initsysvar.cpp: Improving the way !GSHHS_DATA_DIR is managed in "initsysvar.cpp". Tests on the "gshhs.cpp" side are still not done. * CMakeLists.txt, src/gshhs.cpp, src/gshhs.h, src/initsysvar.cpp, src/initsysvar.hpp: 1/ adding official "gshhs.h" to avoid complicating install. 2/ change "CMakeList" to have GSHHS on by default 3/ creating an internal !GSHHS_DATA_DIR variable to provide the path to shorelines data files 2014-07-02 alaingdl * doc/udg/chapters/credits.tex: adding 2 students * INSTALL, config.h.in: moving files related to the "configure" way into obsolete/ * configure.in: In GDL, the "configure" is no more maintained (and some recent options are not available in), now we use CMake. We move "configure.in" into the new directory "obsolete/". 2014-07-01 gilles-duvert * src/pro/findex.pro: corrects bug #601 following new version found on the web. 2014-06-30 gilles-duvert * src/gshhs.cpp, src/libinit.cpp, src/libinit_jmg.cpp, src/math_fun_jmg.cpp, src/math_fun_jmg.hpp, src/math_utl.cpp, src/math_utl.hpp, src/ncdf_dim_cl.cpp, src/ncdf_var_cl.cpp, src/plotting.cpp, src/plotting.hpp, src/plotting_axis.cpp, src/plotting_contour.cpp, src/plotting_convert_coord.cpp, src/plotting_cursor.cpp, src/plotting_map_proj.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp, src/plotting_shade_surf.cpp, src/plotting_surface.cpp, src/plotting_xyouts.cpp: large rewrites in 21 files to support for all mapping-related commands and graphics. Projection include is now plotting.hpp, definition (actual call to proj.4 library) is in plotting_map_proj.cpp. conversions from and to projections are done mainly in plotting.cpp (gdlProjForward()). Most of the graphics commands have been updated to support projections and associated connectivity problems (how a polygon can be splitted by a proection effect, etc) in better supported althought neither complete nor accurate. both libproj4 and proj.4.8 are ok to link with gdl. See MAP_INSTALL for additional hints. * src/gdlgstream.hpp: removed usage of _HAVE_CONFIG (unnecessary and causes confusion in plplot in some cases) * NEWS, MAP_INSTALL, testsuite/test_map.pro, src/pro/map_clip_set.pro: complete (?) support for all mapping-related commands and graphics. * src/deviceps.hpp: removed last two patches (crash). 2014-06-30 pjb7687 * src/deviceps.hpp: Initialize array after allocation, so that 'strlen' can properly find its length. 2014-06-30 alaingdl * src/libinit_jmg.cpp: suspending LA_CHOLDC and LA_CHOLSOL up we have a clean solution. 2014-06-29 gilles-duvert * src/gdlxstream.cpp: casted (char*) some elements of structure to prevent complains by gcc 4.8.2 2014-06-28 gilles-duvert * src/plotting.cpp: removed cause of warning by fussy compilers 2014-06-28 slayoo * testsuite/Makefile.am, testsuite/test_bug_n000542.pro: adding test_bug_n000542.pro 2014-06-27 alaingdl * src/file.cpp: better version for FILE_EXPAND_PATH() ... 2014-06-27 pjb7687 * src/deviceps.hpp, src/includefirst.hpp: Patch for MSVC: 1. Resolve Windows.h Winsock.h header issue 2. 'new' keyword is used for non-constant length of array allocation 2014-06-26 pjb7687 * CMakeModules/FindNumpy.cmake: Patch for future python3 support * src/basic_pro.cpp: Win32 patch: fnmatch -> PathMatchSpec * CMakeLists.txt, CMakeModules/FindPdcurses.cmake, CMakeModules/Findlibps.cmake, src/deviceps.hpp, src/initsysvar.cpp, src/objects.cpp, src/semshm.cpp, src/basic_pro.cpp: Win32 Support for additional libraries: wxwidgets, pslib, eigen3, and graphicsmagick++ Also includes correction of proper pslib header file path 2014-06-26 alaingdl * src/basic_fun.cpp: fixing 2 details in ROUTINE_INFO: must return "$MAIN$" for calls like "routine_info()" with or without routines already complided. "subList.resize( n);" are not need ! * src/basic_fun.cpp: details in ROUTINE_INFO: warning when no pro/fun already compiled, pro should return $MAIN$ first 2014-06-25 alaingdl * src/basic_pro.cpp, src/libinit.cpp: draft for HELP, /system_variables * src/envt.cpp: When a keyword is passed 2 times, we must Throw(), not just Warming(). * src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: Preparing some rewriting in HELP. Internal help() renamed in help_pro(). Various keywords added into WarmKey list. Preparing keyword names='*filter*' 2014-06-22 gilles-duvert * src/default_io.cpp: better printed representation of arrays of string (nothing printed until the first non-null string) * src/ofmt.hpp: this patch permits to get correct representation of values when printed in free-format (as many digits printed as possible) 2014-06-21 gilles-duvert * src/plotting_contour.cpp: contour with 1d x,y was crashing gdl when a projection was set. 2014-06-18 gilles-duvert * src/plotting_convert_coord.cpp: corrected bug when only one monodimensional array (such as [0.1,0.1]) was passed to the function. 2014-06-17 slayoo * doc/udg/gdl.tex: fixing mwbk/hyperref/tex4ht compatibility issue (thanks to Deimantas Galcius! - http://tug.org/pipermail/tex4ht/2014q2/000957.html) 2014-06-13 gilles-duvert * CMakeLists.txt: Applied Orion's patch #77 2014-06-13 pjb7687 * src/devicewin.hpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp: Support for TV keyword on Windows platform * src/CMakeLists.txt: Hopefully it fixes the compilation on POSIX * src/datatypes.cpp, src/deviceps.hpp, src/devicewin.hpp, src/devicez.hpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/file.cpp, src/gdlwinstream.cpp, src/gdlwinstream.hpp, src/graphicsdevice.cpp, src/gtdhelper.hpp, src/initsysvar.cpp, src/io.cpp, src/io.hpp, src/libinit.cpp, src/math_fun_jmg.cpp, src/plotting_convert_coord.cpp, src/read.cpp, src/semshm.cpp, src/sigfpehandler.cpp, src/sigfpehandler.hpp, src/str.cpp, CMakeLists.txt, src/CMakeLists.txt, src/basegdl.hpp, src/basic_fun.cpp, src/basic_pro.cpp, src/basic_pro.hpp, src/basic_pro_jmg.cpp, src/basic_pro_jmg.hpp, src/convol.cpp: Support for MinGW - Almost the same one as Patch #76 2014-06-11 slayoo * src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/default_io.cpp, src/format.out.g: adding yet more compatibility fixes for std::cout comparisons for win32 2014-06-11 alaingdl * src/libinit_gm.cpp: adding quiet keywords to IGAMMA (iter, itmax, eps, method) 2014-06-11 slayoo * src/FMTOut.hpp, src/format.out.g: hopefully fixing win32 compatibility in format.out.g (when comparing a stream with std::cout) 2014-06-10 m_schellens * NEWS, src/basegdl.hpp: sync 2014-06-09 slayoo * doc/udg/gdldoc.sty: fixing duplicate index entries in LaTeX documentation 2014-06-08 slayoo * doc/udg/chapters/compile-cmake.tex, doc/udg/makeall, CMakeLists.txt, INSTALL.CMake: including CMake installation instructions in the docs * src/pro/online_help.pro: adding atril to the list of pdf viewers in online_help.pro 2014-06-05 gilles-duvert * src/plotting_convert_coord.cpp: corrected severe bug in convert_coord, same scaling was wrongly applied on X and Y axis. 2014-06-05 m_schellens * src/datatypesref.cpp, src/prognode.cpp: fixed object indexing (missing increment of ref counter) 2014-06-03 m_schellens * src/GDLInterpreter.cpp, src/dinterpreter.cpp, src/gdlc.i.g, src/prognode.cpp: fixed PCALLNode::Run() SetRetTree could be overwritten by CLEANUP method * src/envt.cpp, src/print.cpp: fixed: a=\!null & print, a * src/basic_fun_jmg.cpp: fixed ROUTINE_NAMES (wrong variable index, now use GetKW instead of GetPar) 2014-06-02 m_schellens * src/GDLInterpreter.hpp, src/basic_fun.cpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/envt.cpp, src/gdlc.i.g, src/prognode.cpp: Suppress MESSAGE in ROUTINE_NAMES when called from EXECUTE 2014-05-27 gilles-duvert * src/gsl_fun.cpp: Finishing up the work started in previous version: correct behaviuor for /GRID and several last dims equal to 1. 2014-05-26 gilles-duvert * src/gsl_fun.cpp: Corrected bug (see discussion SF#338692) that prevented interpolation on an array whose last dimension was 1. 2014-05-19 alaingdl * src/pro/value_locate.pro: better input type checks + warning if input vector is not monotonic ... 2014-05-17 alaingdl * src/file.cpp: un-finished but not that bad code for FILE_EXPAND_PATH() 2014-05-16 gilles-duvert * src/pro/map_clip_set.pro: revised version. Splittings not yet fully accurate. 2014-05-15 alaingdl * src/file.cpp, src/file.hpp, src/libinit.cpp: interface for missing function FILE_EXPAND_PATH(). Code not finished. * src/file.cpp, testsuite/test_file_search.pro: in "file.cpp", correcting a bug in FileSearch() for FILE_SEARCH() with keyword /FULLY_QUALIFY_PATH. Preliminary associated test added. 2014-05-15 gilles-duvert * src/plotting_convert_coord.cpp: complete rewrite of convert_coord, all options supported * src/math_utl.hpp: removed commented code * src/plotting.cpp: projection limits support in axis range retrieving routine * src/devicex.hpp: Window positions are correct now. * src/datatypes.cpp: initied to zero arrays according to meaning of BaseGDL::ZERO. Was not enabled before (?) 2014-05-15 alaingdl * testsuite/banner_for_testsuite.pro, testsuite/test_modulo.pro, testsuite/test_routine_names.pro: small cleaning in testsuite 2014-05-11 gilles-duvert * src/plotting_contour.cpp, src/plotting_cursor.cpp: Corrected bug that crashed projections with libproj when they were OK with old libproj4. Needs to have different types depending which library is called. All this subtility will be displaced at a single place (plotting.cpp) in the future. * src/math_utl.hpp: Corrected bug that crashed projections with libproj when they were OK with old libproj4. * src/libinit_jmg.cpp: Added COASTS and CONTINENTS handling. * src/math_utl.cpp: Handles all historical projections, with all projection centers and most rotations. Goodes is goode's homolosine only with libproj not the good old libproj4. libproj may present new problems that libproj4 do not show. Work in progress, we may support ALL libproj projections in the end. * src/gshhs.cpp: Added COASTS and CONTINENTS handling. Corrected bug that removed the first segment of a polygon. Unfinished: push all the projection and !MAP.PIPELINE treatment out of this code. * src/magick_cl.cpp: magick_cl does not need math_utl.hpp * src/libinit.cpp: Added CLIP to shade_surf. * src/graphicsdevice.hpp: Added comment * MAP_INSTALL: location of gshh has been renamed. * src/pro/map_clip_set.pro: Adding /SHOW option 2014-05-07 alaingdl * src/basic_fun_jmg.cpp: small modification in "routine_names_value()" to avoid a Throw: with this change, "test_routine_names.pro" can run end-to-end and internal bugs visibles. * testsuite/test_routine_names.pro: adding "test_routine_names.pro" in testsuite * testsuite/Makefile.am: adding "test_routine_names.pro" in testsuite/ 2014-05-04 slayoo * testsuite/Makefile.am, testsuite/test_bug_n000587.pro: adding test for bug no. 587 (!stime) * testsuite/Makefile.am, testsuite/test_bug_n000597.pro: adding test for bug no. 597 (print,a eq !NULL) * testsuite/Makefile.am, testsuite/test_bug_n000599.pro: adding test for bug no. 599 (modulus issue) 2014-04-30 alaingdl * testsuite/Makefile.am, testsuite/test_obj_new.pro: this new test shows that we do have now a problem related to OBJ_NEW(). 2014-04-29 alaingdl * src/initsysvar.cpp, src/initsysvar.hpp, src/math_fun_ng.cpp, testsuite/Makefile.am, testsuite/test_voigt.pro: We create a !GDL_WARNING flag to inform when the outputs in calculations are known to be different between IDL and GDL. Now used only in VOIGT(), to be extended to BeselIJKY functions. Switch !GDL_WARING to 0 to be quiet. * src/math_fun_ng.cpp, src/voigt.cpp: in VOIGT(), correcting the Dim for the cases: VOIGT([1],1) and VOIGT(1,[1]). 2014-04-28 alaingdl * testsuite/test_modulo.pro: we may want to test the code with old GDL versions without TYPENAME() ... * src/basic_op_new.cpp: fixing Modulo() and DModulo() in "basic_op_new.cpp" (conflit with "basic_op.cpp" def.). This bug was found thanks to the test "test_modulo.pro". 2014-04-26 m_schellens * src/basic_op.cpp: use fmod(...) for modulo for DDouble and DFloat 2014-04-23 alaingdl * testsuite/Makefile.am: update * testsuite/test_bug_3147146.pro, testsuite/test_modulo.pro, testsuite/banner_for_testsuite.pro: *** empty log message *** 2014-04-07 alaingdl * src/basic_fun_jmg.cpp: TYPENAME() should be complete now but code review welcome especially for Structure, Obj, List, Hash ! * testsuite/test_typename.pro: few new test in "test_typename.pro" for Structures, Obj, List and Hash. * testsuite/test_structures.pro: few extra tests in "test_structures.pro" (using keywords in SIZE()) * src/basic_fun_jmg.cpp: adding keyword /Sname for SIZE() * src/basic_fun_jmg.cpp, src/libinit_jmg.cpp: in SIZE(), keywords must be exclusive (/sname to be done); adding two missing types in TYPENAME() (just Obj, List and Hash not ready) 2014-04-04 alaingdl * src/gdlxstream.hpp, src/devicex.hpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp: correcting bug 595 (window, 1 & window, 2, xsize=123 & wdelete : crash !) 2014-03-29 m_schellens * src/convert2.cpp, src/hash.cpp, src/list.cpp: Added COUNT and WHERE member functions for LIST and HASH 2014-03-28 m_schellens * src/list.hpp, src/overload.cpp, src/envt.cpp, src/envt.hpp, src/hash.cpp, src/hash.hpp, src/list.cpp: Added COUNT and WHERE member functions for LIST and HASH 2014-03-28 alaingdl * src/list.cpp, src/list.hpp, src/overload.cpp: adding list::count() just for the very basic value (not the where()) * testsuite/Makefile.am, testsuite/test_list.pro: initial import of "test_list.pro", just testing list.add() and list.count(), to be extended ... 2014-03-27 m_schellens * src/GDLTreeParser.cpp, src/gdlc.tree.g, src/ofmt.cpp: undo ticket #585: took back code changes. 2014-03-27 alaingdl * testsuite/Makefile.am, testsuite/test_device.pro, testsuite/test_typename.pro: Initial import for "test_typename.pro", 3 types missing. typos in "test_device.pro". * src/basic_fun_jmg.cpp, src/basic_fun_jmg.hpp, src/libinit_jmg.cpp: initial import for TYPENAME(), 3 types missing; preparing ISA() but not ready. 2014-03-25 alaingdl * src/pro/file_lines.pro: correcting FILE_LINE when first charactere is a "~" (HOME in Unix world) 2014-03-23 m_schellens * src/FMTLexer.cpp, src/FMTParser.cpp, src/FMTParser.hpp, src/fmtnode.hpp, src/format.g, src/ofmt.cpp: fixed ticket #583 string(90,'(I+3.2)') % Format parser: unexpected char: '+' 2014-03-22 m_schellens * src/nullgdl.cpp: fixed ticket #579 (NullGDL::GetTag(...) called) * src/ofmt.cpp: fixed ticket #584 (FORMAT="(A)" for BYTE) * src/GDLTreeParser.cpp, src/gdlc.tree.g: fixed ticket #585 (LIST as variable name) 2014-03-22 gilles-duvert * src/devicesvg.hpp, src/plotting_misc.cpp: SVG output is now color on white background. 2014-03-21 gilles-duvert * src/plotting.cpp: patch hopefully fixing wrong rounding of plot limits (logarithmic axis case) * src/deviceps.hpp: reverted patch by AC to temporarily solve bug #530, see patch in plotting.c. Added preliminary support for implicit SIZE for TV command * src/plotting.cpp: better solution to temporarily solve bug #530 2014-03-20 alaingdl * src/deviceps.hpp: temporary solution for bug 520 and having the good colors in PS output 2014-03-19 alaingdl * testsuite/test_device.pro: don't stop in test due to missing X11 device mode ! * src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/initsysvar.cpp, src/plotting.hpp: correcting GetGeometry for X11: returning the x/y offsets. * testsuite/test_device.pro: extending "test_device" to X11 tests. 2014-03-18 alaingdl * testsuite/Makefile.am, testsuite/test_where.pro: adding a draft of "test_where.pro" to make very basic but useful tests on WHERE: when OpenMP was in use in WHERE code we had a no trivial bug, if OpenMP will come back in, we should be able to detect basic problems. * src/basic_pro.cpp, src/envt.cpp, src/envt.hpp, src/initsysvar.cpp, src/objects.cpp, src/objects.hpp, src/typedefs.hpp: Trying to fix CPU procedure (was crashing !). TPOOL_MIN_ELTS and TPOOL_MAX_ELTS are now fully managed in Long64. * src/datatypes.cpp: correcting bug 592 in WHERE just by removing the OpenMP directives. 2014-03-13 alaingdl * src/plotting_convert_coord.cpp: small improvments in consistency in CONVERT_COORD: if x or y or z in double, double computation. message that /T3D is not ready. * testsuite/Makefile.am, testsuite/test_convert_coord.pro: initial import of "test_convert_coord.pro", to be extended ... 2014-03-10 m_schellens * src/initsysvar.cpp, src/initsysvar.hpp, src/prognodeexpr.cpp: two points: (1) restoring \!stime; (2) in X mode, updating \!D.{x|y}_size (more elegant :-) 2014-03-10 alaingdl * src/initsysvar.cpp, src/initsysvar.hpp, src/prognodeexpr.cpp: two points: (1) restoring !stime; (2) in X mode, updating !D.{x|y}_size (not elegant but works !) 2014-02-28 gilles-duvert * src/basic_pro.cpp: Corrected bugs #591 and #590 (thanks to igor) 2014-02-27 alaingdl * src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/libinit.cpp: fixing details in code (std::string) because it was not compiling on some recent distros/gcc. * src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/plotting_device.cpp: Continuing adding keywords to DEVICE for X11 device type. To be add soon into HELP,/device ... * src/plotting_windows.cpp: re-introducing correction 1.19 : fix: WINDOW, WSET, WSHOW and WDELETE are defined only for device types X and WIN, should return "not defined" for other types of devices (set via SET_PLOT) 2014-02-26 alaingdl * src/plotting_windows.cpp: The procedure WINDOW should work when xsize or ysize keywords are negative. It is not a problem when keywords xpos or y pos are negative. * src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/libinit.cpp, src/plotting_device.cpp: adding few keywords to DEVICE, now values of GET_WINDOW_POSITION keywords should be OK 2014-02-24 gilles-duvert * src/plotting.cpp, src/plotting_plots.cpp: Optimized use of color arrays (in PLOTS , COLOR=[...]) when array is only a 1 element vector. * src/dinterpreter.cpp, src/gdl.cpp: Reinstalled GDLEventHandler as default handler of readline events, even if it brings bug 562 back. The previous unfortunate patch removed completely the graphics event handling (window resizing, etc). Still not evident how to avoid bug 562 when editing the command line with keyboard arrows. 2014-02-24 alaingdl * src/plotting_windows.cpp: fix: WINDOW, WSET, WSHOW and WDELETE are defined only for device types X and WIN, should return "not defined" for other types of devices (set via SET_PLOT) 2014-02-21 alaingdl * NEWS: updating NEWS file (NULL device type added) * src/graphicsdevice.cpp, src/graphicsdevice.hpp, src/initsysvar.cpp, src/plotting_misc.cpp, src/basic_pro.cpp: Finishing (??) the case we are on a Unix like OS without X11 lib. Only 4 device types are then available. No more crash when trying to plot, or printing just !D. Default is then to be on NULL device. 2014-02-20 alaingdl * src/basic_pro.cpp, src/libinit.cpp: initial import of HELP,/DEVICE, not fully finished. * src/devicenull.hpp, src/graphicsdevice.cpp, src/graphicsdevice.hpp, src/initsysvar.cpp, src/plotting.hpp, src/plotting_misc.cpp, src/Makefile.am: adding NULL Device type. 2014-02-18 alaingdl * src/basic_pro_jmg.cpp: to have CALL_EXTERNAL working, we have to keep : RTLD_NOW || RTLD_GLOBAL in dlopen(). * src/basic_fun_jmg.cpp, src/objects.cpp: smarter return types (long64) for few fields in SIZE( /L64,/Struct) 2014-02-14 gilles-duvert * src/gdl.cpp, src/dinterpreter.cpp: Removed GDLEventHandler as default handler of readline events. Was the cause of bug 562. AFAIK the default libreadline event handler is sufficient here. * src/pro/moment.pro: Removed protection against zero-dim x since even zero-dim x have a mean (x) and moments (Nan). 2014-02-08 gilles-duvert * src/gdlxstream.cpp, src/gdlxstream.hpp: modified GetGin for simpler and faster use. Added GetExtendedGin for further reference (traps ^C). * src/devicex.hpp, src/graphicsdevice.hpp: added (still unused) SetFocus() * src/plotting_cursor.cpp: simplified cursor function * src/pro/read_ascii.pro: added documentation 2014-02-06 gilles-duvert * src/pro/strsplit.pro: strsplit now uses the ESCAPE and FOLD_CASE options available in strtok(). * src/basic_fun.cpp, src/libinit_mes.cpp: added FOLD_CASE to strtok, hence to strsplit! 2014-02-05 gilles-duvert * src/pro/read_ascii.pro: More robust tests of inconsistencies in definition of tags for output structure * src/pro/read_ascii.pro: Corrected improper behaviour where blanks and minus in tag names were not converted to underscores prior to creating the output structure. Also added check that tag names do not begin with a digit. * src/plotting_xyouts.cpp: Behaviour when coordinates of a XYOUTS are not arrays is now correct (value is repeated). 2014-01-25 gilles-duvert * src/plotting.cpp: this optimization should speed up plotting lines and symbols. 2014-01-23 alaingdl * src/libinit_jmg.cpp: if GDL is compiled without GSHHG (former GSHHS), an external MAP_CONTINENT can be used. 2014-01-22 alaingdl * src/ncdf_cl.cpp: restoring normal behavior of NCDF_OPEN (with URL/OpenDAP support), adding few extra messages or errors (default messages are not clear if files do not exist or cannot be read). * src/gsl_fun.cpp: in HISTOGRAM, testing if input array is an array. * src/ncdf4_group.cpp: Adding the 2 last missing function for NetCDF-4 support: NCDF_VARIDSINQ and NCDF_UNLIMDIMSINQ. This is not fully tested. * src/pro/tic.pro: detail in TIC 2014-01-22 gilles-duvert * src/pro/write_png.pro: transparency should work * src/magick_cl.cpp: support for transparent channels (works with write_png) 2014-01-21 gilles-duvert * src/magick_cl.cpp: added warning to inform about truncation of images by local implementation of Magick library. * src/plotting.hpp: updated comments and reset use of flush() that appear needed to finish all drawing sequences with X11. 2014-01-20 gilles-duvert * src/pro/showfont.pro: this version of showfont is faster (avoids bug #576) and looks better... * src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/plotting.hpp: Return of double buffering for X11 plots, with safe use of nonstandard graphic context write modes such as XOR. 2014-01-19 gilles-duvert * src/devicex.hpp: TV now supports non-truecolor vectors as input. * src/plotting.hpp: Removed double buffering. Was not compatible with non-standard modes (eg: device,set_graphics=6) which are used in all cursor-driven drawings (ex: DEFROI). * src/gdlxstream.cpp, src/plotting_cursor.cpp: Corrected bug #582 (/UP option not correctly working) * src/convol.sav.cpp, src/convol.opt.cpp: remove unwanted file 2014-01-18 slayoo * testsuite/CMakeLists.txt: CMake: adding handling for the 77 SKIP return code (as used by autoconf); making the tests depend on building gdl binary * testsuite/Makefile.am, testsuite/test_bug_3426399.pro: adding test for bug 3426399 * testsuite/Makefile.am, testsuite/test_bug_3394430.pro: adding test for bug 3394430 * testsuite/test_same_name.pro, testsuite/Makefile.am: adding test_same_name.pro 2014-01-14 slayoo * testsuite/test_bug_n000581.pro: adding test for bug 581 2014-01-14 alaingdl * testsuite/test_stregex.pro: adding new test case from bug report 581 in "test_stregex.pro". * src/basic_fun.cpp: trying to correct bug 581 in STREGEX when lenght= is used. 2014-01-14 slayoo * testsuite/Makefile.am, testsuite/test_bug_n000580.pro: test added for bug 580 2014-01-13 alaingdl * src/ncdf4_group.cpp: various fixes in NCDF_NCIDINQ for NetCDF-4 support. 2014-01-12 alaingdl * src/initsysvar.cpp: NewTag in SysVar must be in uper case to be OK. 2014-01-11 alaingdl * src/ncdf4_group.cpp: correcting typo in unfinished code, sorry. * src/ncdf_cl.cpp: details about NCDF_CREATE and NCDF_OPEN, testing also if lib. NetCDF-4 is available or not. 2014-01-10 alaingdl * src/ncdf4_group.cpp: the NetCDF code should remains compilable even old netcdf lib. only is available (before 4.1 is available) * src/libinit_cl.cpp, src/ncdf4_group.cpp, src/ncdf_att_cl.cpp, src/ncdf_cl.cpp, src/ncdf_cl.hpp, src/ncdf_dim_cl.cpp, src/ncdf_var_cl.cpp: continuing cleaning and improvments in NetCDF related codes (not finished) 2014-01-10 slayoo * testsuite/Makefile.am, testsuite/test_bug_3595172.pro: adding test for bug 3595172 2014-01-09 slayoo * testsuite/Makefile.am, testsuite/test_bug_2949487.pro: adding test fo bug 2949487 2014-01-09 alaingdl * src/libinit_cl.cpp: typo in ifdef/endif for new netcdf-4 functions * src/libinit_cl.cpp: some new netCDF-4 functions should not be visible without NetCDF-4 ! * NEWS, src/CMakeLists.txt, src/Makefile.am, src/libinit_cl.cpp, src/ncdf4_group.cpp, src/ncdf_cl.cpp, src/ncdf_cl.hpp, src/ncdf_var_cl.cpp: initial import of new NetCDF-4 capabilities (groups related) * CMakeLists.txt, config.h.cmake: preparing extension to some NetCDF-4 finctionnalities. 2014-01-08 gilles-duvert * src/convol.cpp, src/datatypes.cpp: specialization of convol() for ULONG and ULONG64 2014-01-08 alaingdl * src/libinit_jmg.cpp, src/widget.cpp: attempt adding EVENT_FUNC keyword into WIDGET_CONTROL (preparing GDL Widgets for ATV !) * NEWS, src/initsysvar.cpp: adding !Const * src/gdlwidget.cpp: change needed on CentOS (GCC 4.1.2, wx-2.8) for using wxTreeItemId::wxTreeItemId(long int) 2014-01-05 gilles-duvert * CMakeLists.txt: corrected typo in message about gshhs. 2014-01-04 slayoo * testsuite/Makefile.am: updating testsuite/Makefile.am * testsuite/test_bug_3285659.pro: adding test_bug_3285659.pro 2014-01-04 gilles-duvert * testsuite/test_convol.pro: convol() now correctly behaves for all combinations of options and data types. this is a sample test file. * src/CMakeLists.txt, src/convol.cpp, src/convol_inc0.cpp, src/convol_inc1.cpp, src/convol_inc2.cpp, src/datatypes.cpp: convol() now correctly behaves for all combinations of options and data types. 2014-01-02 slayoo * testsuite/test_bug_2892631.pro: adding test_bug_2892631.pro * testsuite/test_bug_2876372.pro: adding test_bug_2876372.pro 2013-12-30 slayoo * testsuite/test_bug_3572473.pro: adding test_bug_3572473.pro 2013-11-26 alaingdl * src/pro/tic.pro, src/pro/toc.pro: fixing details in TIC and TOC. 2013-11-26 m_schellens * src/basic_fun.cpp, src/datatypes.cpp, src/initsysvar.cpp, src/prognodeexpr.cpp, testsuite/test_suite.pro: fixed NE and EQ with \!NULL 2013-11-26 alaingdl * NEWS: updating NEWS * src/pro/tic.pro, src/pro/toc.pro, src/pro/Makefile.am: initial import of TIC and TOC (both as pro and func), currently not working due to issue on !null EQ/NE * testsuite/test_null.pro, testsuite/Makefile.am: initial import of test cases on logical operatios (NE and EQ) with !null 2013-11-25 slayoo * src/gsl_fun.cpp: fixing OSX Mavericks clang compilation issue (tracker bug no. 577) 2013-11-22 m_schellens * src/datatypes.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp: OpemMP for CatInsert * src/basic_pro.cpp, src/datatypes.cpp, src/gdlarray.hpp: fixed CPU 2013-11-21 gilles-duvert * testsuite/test_widgets.pro: added a commented text that generates a crash if uncommented. Patch welcome. * src/initsysvar.cpp: reverted passing TPOOL_MIN_ELTS and TPOOL_MAX_ELTS to Long64 since it will need some careful editing in basic_pro.cpp and envt.cpp to prevent the commabd 'CPU' to crash. * src/convol_inc0.cpp: put back a missing line 2013-11-20 m_schellens * src/datatypes.cpp: OMP for WHERE 2013-11-18 gilles-duvert * src/plotting_misc.cpp: tentative patch for bug #530. * src/deviceps.hpp: reverted code to prevent crash when writing eps color files. 2013-11-18 m_schellens * src/default_io.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp, src/widget.hpp: WIDGET_TREE and WIDGET_TABLE preparations 2013-11-18 alaingdl * src/basic_fun.cpp: GDL_TMPDIR/IDL_TMPDIR now by default in /var/tmp, using available on Linux and OSX. MSwin way not ready. * src/initsysvar.cpp: in !cpu, two fields now in Long64 2013-11-15 m_schellens * src/pro/xmanager.pro: initial import (xmanager.pro) 2013-11-15 slayoo * doc/udg/makeall: updating doc/udg/makeall with checks for missing executables (thanks Alain!) * doc/udg/README.txt: updating doc/udg/README.txt * doc/udg/gdl.tex: getting rid of copernicus.bst dependency 2013-11-12 slayoo * doc/udg/gdl.tex: old-mwcls+natbib workaround 2013-11-07 gilles-duvert * src/basegdl.cpp, src/convol_inc1.cpp, src/nullgdl.cpp, src/CMakeLists.txt, src/basegdl.hpp, src/basic_fun.cpp, src/convol.cpp, src/convol_inc0.cpp, src/datatypes.cpp, src/datatypes.hpp, src/libinit.cpp, src/nullgdl.hpp: Support for /NAN, MISSING=, INVALID=, /EDGE_NULL in CONVOL. To be improved, EDGE_NULL is not fully functional. Possible other features. Scaling for BYTEs was and is still wrong. Removed use of convol_inc2.cpp to simplify maintainance at the expanse of readability... 2013-11-05 m_schellens * config.h.in: update test 2013-11-04 m_schellens * src/gdlwidget.cpp, src/gdlwidget.hpp, src/libinit_jmg.cpp, src/widget.cpp: GDLWidgetTree preparations 2013-11-04 alaingdl * src/pro/Makefile.am: configure checked for missing files 2013-11-04 m_schellens * src/widget.cpp: GDLWidgetTable preparations 2013-11-03 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/libinit_jmg.cpp, src/prognodeexpr.cpp, src/widget.cpp, testsuite/test_widgets.pro: GDLWidgetTable preparations 2013-11-02 m_schellens * src/GDLInterpreter.cpp, src/basic_fun.cpp, src/prognode.cpp, src/prognodeexpr.cpp: fixed return of local parmeter in UD functions 2013-10-30 m_schellens * src/libinit_jmg.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/widget.cpp, testsuite/test_widgets.pro: WIDGET_CONTROL,SET_BUTTON working. Update test. 2013-10-30 alaingdl * src/gdlwidget.cpp: being able to compile CVS even without WxWidgets 2013-10-30 m_schellens * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/pro/cw_bgroup.pro: CW_BGROUP * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp, src/objects.cpp, src/widget.cpp: widget system ok 2013-10-29 alaingdl * src/pro/interpol.pro: tricky bug in INTERPOL, found thanks to another bug in external code ! 2013-10-29 m_schellens * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgeteventhandler.cpp: corrected wxWidgets comments (2.8 compatibility) * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwidgeteventhandler.cpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/widget.cpp, src/widget.hpp: two phase initialization of widgets * src/gdlwidgeteventhandler.cpp, src/objects.cpp, src/plotting.hpp, src/typedefs.hpp, src/widget.cpp, src/widget.hpp, src/gdleventhandler.cpp, src/gdleventhandler.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp: introduced OnShow() for GDLWidgets 2013-10-28 m_schellens * src/gdlwidgeteventhandler.cpp, src/plotting.hpp, src/widget.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp: wxWidgets 2.8 compatibility * src/gdlwidget.hpp, src/plotting.hpp, src/gdlwidget.cpp: corrected thread handling 2013-10-27 m_schellens * src/plotting.hpp, src/gdlwidget.hpp, src/gdlwidget.cpp, src/gdlwidgetdraw.cpp, src/gdlwidgeteventhandler.cpp, src/widget.cpp, src/libinit_jmg.cpp, src/objects.cpp, src/CMakeLists.txt, src/Makefile.am: WIDGET_SLIDER. All widgets working. 2013-10-26 m_schellens * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/libinit_jmg.cpp, src/plotting_contour.cpp, src/widget.cpp, src/widget.hpp: changed widget thread handling * src/gdleventhandler.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/objects.cpp, src/plotting.hpp, src/widget.cpp: tab widget (incomplete) 2013-10-25 m_schellens * src/gdlwidget.cpp, src/gdlwidget.hpp, src/objects.cpp, src/widget.cpp: text event handling 2013-10-25 alaingdl * src/libinit.cpp, src/plotting.hpp, src/plotting_plot.cpp: adding PLOT_IO, PLOT_OO, PLOT_OI. 2013-10-24 m_schellens * src/gdlwidget.cpp, src/gdlwidget.hpp, src/objects.cpp, src/plotting.hpp, src/widget.cpp: WIDGET_LABEL and WIDGET_TEXT update 2013-10-24 slayoo * CMakeLists.txt: updated package hints in CMakeLists.txt 2013-10-24 alaingdl * testsuite/test_bug_3244840.pro, testsuite/test_format.pro, testsuite/test_readf.pro, testsuite/Makefile.am: moving "test_bug_3244840.pro" test into a new file "test_format.pro" dedicated to various tests on Formating issues. To be extended. 2013-10-24 slayoo * doc/www/_news.inc.php, doc/www/downloads.php: updating news and urls 2013-10-24 alaingdl * src/widget.cpp: continuing being able to compile without WxWidget * src/plotting.hpp: removing #define HAVE_PLPLOT_WIDTH, this is managed outside and depend on plplot version 2013-10-24 m_schellens * src/gdlwidget.hpp: WIDGET_DROPLIST and WIDGET_COMBOBOX (incomplete) 2013-10-23 m_schellens * src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/libinit_jmg.cpp, src/objects.cpp, src/plotting.hpp, src/widget.cpp, src/widget.hpp: WIDGET_DROPLIST and WIDGET_COMBOBOX (incomplete) * src/read.cpp: Fixed bug #573 'readf errors' * src/basic_pro.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp: Radio button and check box events 2013-10-23 alaingdl * src/plotting.hpp: removing #define HAVE_PLPLOT_WIDTH, this is managed outside and depend on plplot version 2013-10-23 m_schellens * src/gdlwidget.hpp, src/gdlwidget.cpp, src/gdlwxstream.cpp, src/libinit_jmg.cpp, src/plotting.hpp, src/widget.cpp: prepared [NON]EXCLUSIVE bases. 2013-10-22 alaingdl * src/libinit_jmg.cpp: now, the two versions of INVERT() are stored in "matrix_invert.hpp" (GSL and Eigen3) * src/gsl_fun.cpp, src/gsl_fun.hpp: removing "invert_fun" from "gsl_fun.cpp/hpp" * src/CMakeLists.txt, src/Makefile.am, src/matrix_invert.cpp, src/matrix_invert.hpp: initial import of revised version of INVERT() with Eigen3, allowing usage of /GSL or /EIGEN (Eigen is the default when compiled with, GSL always available since GSL is a mandatory dependance) (INVERT() with Eigen is about 4 times faster than GSL (1600^2 on 8cores)) 2013-10-22 m_schellens * src/gdlwidgetdraw.cpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/libinit_jmg.cpp, src/widget.cpp, src/widget.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp: WIDGET_DRAW: resize parent 2013-10-22 alaingdl * src/plotting.hpp, src/devicex.hpp, src/gdlwidget.hpp, src/gdlwxstream.cpp: being able to compile without WxWidget and with older plplot versions (< 5.9.10) 2013-10-21 m_schellens * src/gdlwidget.cpp, src/devicex.hpp, src/gdlwidget.hpp, src/plotting.hpp, src/plotting_windows.cpp: GUI cleanup 2013-10-21 alaingdl * src/gdleventhandler.cpp, src/devicex.hpp, src/gdlwxstream.hpp, src/gdlwidget.cpp: being able to compile without WxWidget 2013-10-21 m_schellens * src/plotting.hpp, src/plotting.cpp, src/plotting_contour.cpp, src/plotting_convert_coord.cpp, src/plotting_cursor.cpp, src/plotting_device.cpp, src/plotting_misc.cpp, src/plotting_windows.cpp, src/plotting_xyouts.cpp, src/CMakeLists.txt, src/Makefile.am, src/deviceps.hpp, src/devicesvg.hpp, src/devicex.hpp, src/devicez.hpp, src/gdleventhandler.cpp, src/gdlgstream.cpp, src/gdlpsstream.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/gdlxstream.cpp, src/gdlzstream.cpp, src/gdlzstream.hpp, src/graphics.cpp, src/graphics.hpp, src/graphicsdevice.cpp, src/graphicsdevice.hpp, src/image.cpp, src/initct.cpp, src/initsysvar.cpp, src/math_fun_jmg.cpp, src/objects.cpp: some rearragement for WIDGET_DRAW 2013-10-21 alaingdl * src/plotting.hpp: conflicting #define HAVE_PLPLOT_WIDTH for old plplot versions (< 5.9.10) 2013-10-21 m_schellens * src/plotting_contour.cpp, src/plotting_xyouts.cpp, src/widget.cpp, src/devicex.hpp, src/gdlgstream.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/graphics.cpp, src/graphics.hpp, src/plotting.cpp, src/plotting.hpp: WIDGET_DRAW working (initial version - not complete) 2013-10-20 gilles-duvert * testsuite/test_zip.pro: added tests to check that readf() works well after a stat() or (equivalent) a point_lun of nonzero argument. Removed unnecessary calls to specific linux external spawn commands. 2013-10-18 m_schellens * src/gdlwxstream.cpp, src/gdlgstream.hpp: WIDGET_DRAW almost working 2013-10-17 m_schellens * src/devicex.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/widget.cpp: WIDGET_DRAW (not working) * src/gdlgstream.hpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp, src/devicex.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp: WIDGET_DRAW implementation (not yet working) 2013-10-16 m_schellens * src/libinit_jmg.cpp, src/widget.cpp, src/widget.hpp, src/CMakeLists.txt, src/Makefile.am, src/gdlgstream.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlwidgetdraw.cpp, src/gdlwxstream.cpp, src/gdlwxstream.hpp: WIDGET_DRAW function (not yet working) * src/devicex.hpp, src/dstructgdl.cpp: sync 2013-10-15 m_schellens * src/gdlwidget.cpp, src/gdlwidget.hpp, src/objects.cpp: widets working. * src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp: fixes for widgets 2013-10-14 m_schellens * src/gdlwidget.hpp, src/gdlwidget.cpp, src/widget.cpp: widgets update. Not yet working. 2013-10-13 m_schellens * src/gdleventhandler.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp: correct widget event handling 2013-10-12 gilles-duvert * src/io.cpp: This patch seems to fix the 'seek position' problem encountered when reading compressed streams. 2013-10-12 m_schellens * src/basic_pro.cpp, src/gdleventhandler.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp: fixes for widget system 2013-10-11 gilles-duvert * src/base64.hpp, src/basic_fun.cpp: changes to avoid warnigs by xcode under Mac OS X 10.9 (Mavericks). (Reported by M.S., HMUG packager). 2013-10-11 alaingdl * doc/www/_news.inc.php, doc/www/resources.php: continuing adding news (link to adass paper) * doc/www/_news.inc.php: few extra links 2013-10-10 m_schellens * src/widget.cpp: fix problem when building w/o wxWidgets * src/CMakeLists.txt, src/gdlwidget.cpp, src/gdlwidget.hpp, src/nullgdl.cpp, src/widget.cpp, src/widget.hpp: reorganize widget handling (not ok yet - but better than before) 2013-10-10 gilles-duvert * CMakeLists.txt, config.h.cmake: check for HAVE_EXT_STDIO_FILEBUF_H would fail for many platforms because the include file is hidden in the gcc directories. This patch hopefully helps finding this useful addition, that permits to read/ (write?) compressed files. 2013-10-08 gilles-duvert * src/pro/read_jpeg2000.pro: new: READ_JPEG2000 (needs **Magick with libjasper). Reads JP2 and the rare JPC flavor. * src/pro/read_jpeg.pro: added support for JNG style JPEG (needs **Magick with libjasper) * src/pro/read_jpeg.pro, src/pro/read_png.pro: Reverted to previous version --- !ORDER should not be checked in read_* files. Only /ORDER is relevant. * src/pro/read_jpeg.pro, src/pro/read_png.pro: Added support for !ORDER system variable * src/pro/read_gif.pro: removed commented part about "order" (kw not used) * src/devicex.hpp: Rewritten TV and TVRD to support ORDER kw and cured some bugs (truecolor, orientation). * src/initsysvar.cpp, src/initsysvar.hpp: Added TV_ORDER(), support for !ORDER system variable 2013-10-08 alaingdl * src/gdljournal.cpp, src/math_fun_jmg.cpp: continuing correcting errors found by "cppcheck", here a bad delete. 2013-10-07 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp: cleanup * src/gdlc.i.g: applied patch #35 * src/GDLInterpreter.hpp, src/gdlc.i.g, src/prognode.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/GDLInterpreter.cpp: some cleanup * HACKING: applied patch #35 * src/gshhs.cpp, src/plotting_map_proj.cpp: applied patch #72 2013-10-06 m_schellens * src/datatypes.cpp: for windows 2013-10-06 gilles-duvert * src/devicex.hpp: correct for bug #572 * src/libinit.cpp, src/plotting_device.cpp: added GET_WINDOW_POSITION kw and function * src/plotting_windows.cpp, src/gdlxstream.cpp: added comments 2013-10-06 m_schellens * CMakeLists.txt, CMakeModules/FindLibproj4.cmake, CMakeModules/FindLibproj4new.cmake: use 1st http://home.comcast.net/~gevenden56/proj/ then http://trac.osgeo.org/proj/ for projections * src/math_utl.cpp, src/math_utl.hpp, src/plotting.cpp, src/plotting_contour.cpp, src/plotting_convert_coord.cpp, src/plotting_cursor.cpp, src/plotting_map_proj.cpp, src/plotting_xyouts.cpp, CMakeLists.txt, CMakeModules/FindLibproj4.cmake, src/math_fun_jmg.cpp: use http://trac.osgeo.org/proj/ for projections * CMakeLists.txt: removed patch #42 * CMakeLists.txt: applied patch #42 * CMakeLists.txt, testsuite/Makefile.am, testsuite/try: applied patch #44 * src/plotting.cpp, src/plotting_contour.cpp, src/plotting_xyouts.cpp: some changes for new plplot::width * CMakeLists.txt, config.h.cmake, src/allix.hpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/deviceps.hpp, src/dnode.cpp, src/dpro.cpp, src/envt.cpp, src/envt.hpp, src/gdlexception.cpp, src/gdlexception.hpp, src/plotting.cpp, src/plotting_contour.cpp, src/plotting_xyouts.cpp, src/prognode.cpp, src/prognodeexpr.cpp: applied reorder and plwidth patches * src/basic_pro.cpp, src/objects.cpp: for windows * src/file.cpp, src/objects.cpp: linux after windows compatibility, all tests ok 2013-10-05 m_schellens * src/dirent.c, src/dirent.h, src/file.cpp, src/gdlgstream.hpp, src/gshhs.cpp, src/gshhs.hpp, src/io.cpp, src/math_fun_gm.hpp, src/new.cpp, src/new.hpp, src/objects.cpp, src/plotting_axis.cpp, src/plotting_convert_coord.cpp, src/plotting_cursor.cpp, src/plotting_erase.cpp, src/plotting_map_proj.cpp, src/plotting_misc.cpp, src/plotting_polyfill.cpp, src/plotting_windows.cpp, src/plotting_xyouts.cpp, src/basic_pro.cpp: linux compatibility 2013-10-04 m_schellens * src/dirent.h, src/basic_fun_cl.cpp, src/deviceps.hpp, src/devicewin.hpp, src/dimension.hpp, src/dinterpreter.cpp, src/dirent.c, src/file.cpp, src/gdlgstream.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gsl_fun.cpp, src/math_fun_ac.cpp, src/math_fun_gm.cpp, src/math_fun_jmg.cpp, src/matrix_cholesky.cpp, src/objects.cpp, src/plotting.cpp, src/plotting_plot.cpp: Windows VS2010 compatibility 2013-10-03 alaingdl * src/basic_pro.cpp: missing closedir, as detected by "cppchecker" (line 339: (error) Resource leak: dirp) 2013-10-02 m_schellens * src/gsl_matrix.cpp, src/prognode.cpp, src/prognode_lexpr.cpp, src/GDLInterpreter.cpp: avoid some unnecessary copying in WHILE/REPEAT/CASE/IF statements * src/gsl_matrix.cpp: moved GDLGuard 2013-10-02 alaingdl * src/gsl_matrix.cpp: correcting gsl_permutation_* issue for LUDC/LUSOL (bug #570), patch by Orion P. * src/pythongdl.cpp: correcting issue in Python binding, patch by Orion P. 2013-10-01 m_schellens * src/gdlc.i.g: a bit cleanup * src/GDLInterpreter.hpp, src/gdlc.i.g: some comments * src/GDLInterpreter.cpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/convert2.cpp, src/datalistt.hpp, src/devicex.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/gsl_fun.cpp, src/ncdf_var_cl.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: correction for DEREFNode to extend lifetime of ptr till end of function 2013-09-29 gilles-duvert * NEWS: updated the description to match the graphic status at the time of 0.9.4 * src/gsl_fun.cpp: interpolate now accepts COMPLEX and DCOMPLEX types. 2013-09-29 slayoo * doc/www/_news.inc.php: doc/www/_news: 0.9.4 release 2013-09-29 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/assocdata.hpp, src/dinterpreter.cpp, src/gdlc.i.g, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: ASSOC fix for structs. Use no assoc array index where possible. 2013-09-28 m_schellens * CMakeLists.txt, configure.in: 0.9.4 CVS * src/prognode.cpp, src/prognode_lexpr.cpp: optimized reference parameter passing with ++/-- 2013-09-27 m_schellens * testsuite/test_suite.pro, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/gdlc.g, src/gdlc.i.g, src/prognode.cpp: DEC/INC EvalRefCheck optimization (no temporary anymore) * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/dcompiler.cpp, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp, src/prognode.hpp: corrected reference parameter passing with ++/-- GDL 0.9.4: 2013-09-26 m_schellens * ChangeLog, README: gdl 0.9.4 * src/prognode.cpp, src/prognodeexpr.cpp, src/basic_fun.cpp, src/envt.hpp: fixed return by reference for return of local variables * src/basic_fun.cpp, src/dcompiler.cpp, src/newprognode.cpp, src/prognode.cpp, src/prognode.hpp: fixed reference parameters with ++ -- r+ 2013-09-26 m_schellens * src/prognode.cpp, src/prognodeexpr.cpp, src/basic_fun.cpp, src/envt.hpp: fixed return by reference for return of local variables * src/basic_fun.cpp, src/dcompiler.cpp, src/newprognode.cpp, src/prognode.cpp, src/prognode.hpp: fixed reference parameters with ++ -- r+ 2013-09-25 m_schellens * src/prognode.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: trinary operator optimizations * src/pro/str_sep.pro: working STR_SEP * src/pro/factorial.pro, src/GDLInterpreter.hpp, src/envt.cpp, src/envt.hpp, src/gdlarray.hpp, src/gdlc.i.g, src/prognode.cpp: ref check function return value * src/basic_fun.cpp, src/prognode.cpp: fixed ParameterDirect (wrong return reference set) * testsuite/test_suite.pro, src/GDLTreeParser.cpp, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/GDLInterpreter.cpp: fixed pass by reference for functions as parameters 2013-09-24 slayoo * doc/www/faq.php: updating FAQ entry on CATCH 2013-09-24 gilles-duvert * src/math_utl.cpp: functions machar_[s,d] must not be optimized by clever compilers such as icc -- will then loop forever... Perhaps should be revised... * src/math_fun_jmg.cpp: permits to compile with icc 2013-09-24 m_schellens * src/envt.cpp, src/gsl_fun.cpp, src/prognode.cpp, src/widget.cpp: fixed widget.cpp * src/GDLTreeParser.cpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/overload.cpp, src/prognode.cpp, src/prognodeexpr.cpp, src/GDLInterpreter.cpp: sync 2013-09-23 m_schellens * src/envt.hpp, src/gdlc.i.g, src/gsl_fun.cpp, src/list.cpp, src/math_fun_gm.cpp, src/overload.cpp, src/prognode.cpp, src/typedefs.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/basic_fun.cpp, src/basic_fun_cl.cpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/datalistt.hpp, src/dvar.cpp: small optimizations 2013-09-23 alaingdl * src/initsysvar.cpp: correcting typo in "initsysvar.cpp" * src/initsysvar.cpp, src/objects.cpp: removing a comment; adding a "bluid_date" in !GDL 2013-09-23 m_schellens * src/dstructdesc.hpp, src/envt.cpp, src/envt.hpp, src/list.cpp, src/list.hpp, src/overload.cpp: Made LIST HEAP_GC friendly 2013-09-22 m_schellens * src/basic_fun_jmg.cpp: small changes relating to OVERWRITE keywords * src/basic_fun.cpp, src/basic_fun_jmg.cpp, src/gsl_fun.cpp, src/libinit.cpp: Fixes for changed API for library functions: left-return values must be explicitely set * src/fftw.cpp, src/gsl_fun.cpp, src/libinit_jmg.cpp, src/basic_fun.cpp, src/envt.cpp, src/prognodeexpr.cpp: fixed regression test_bug_3152899 * src/default_io.cpp, src/devicex.hpp, src/dinterpreter.cpp, src/dstructgdl.hpp, src/envt.cpp, src/envt.hpp, src/gdlarray.hpp, src/gdlc.i.g, src/gsl_fun.cpp, src/hdf5_fun.cpp, src/io.cpp, src/libinit.cpp, src/libinit_ac.cpp, src/libinit_cl.cpp, src/libinit_gm.cpp, src/libinit_jmg.cpp, src/libinit_mes.cpp, src/libinit_ng.cpp, src/list.cpp, src/math_fun_gm.cpp, src/math_fun_jmg.cpp, src/math_fun_ng.cpp, src/math_utl.cpp, src/ncdf_var_cl.cpp, src/overload.cpp, src/plotting.cpp, src/plotting_map_proj.cpp, src/prognode.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/widget.cpp, src/GDLInterpreter.hpp, src/assocdata.cpp, src/assocdata.hpp, src/basic_fun.cpp, src/basic_fun_cl.cpp, src/basic_fun_jmg.cpp, src/basic_op.cpp, src/basic_pro.cpp, src/basic_pro_jmg.cpp, src/GDLInterpreter.cpp: Changed API for library functions: left-return values must be explicitely set 2013-09-20 gilles-duvert * src/gsl_matrix.cpp: apparently the permutation order 's' is not used here. * src/plotting_cursor.cpp: variable "idata" was used before its value was set... 2013-09-19 alaingdl * testsuite/test_bug_3104326.pro: revisiting this test to check 3 important points when Execution is halted (line number in file, path to the file, name of the pro/func) * src/basic_pro.cpp, src/libinit.cpp: adding (obsolete) keyword /All_Keys to HELP procedure, with few useful examples. 2013-09-17 gilles-duvert * src/getas.cpp, src/hash.cpp, src/hash.hpp, src/list.hpp, src/matrix_cholesky.cpp, src/overload.cpp: added linefeed at end of file -- was generating warnings for some compilers. * src/gsl_fun.cpp: patch to stop ekopath's 'pathcc' compiler error. * src/math_fun_gm.cpp, src/plotting_contour.cpp, src/plotting_shade_surf.cpp, src/plotting_surface.cpp, src/antlr/ASTFactory.hpp: support for ekopath's 'pathcc' compiler * src/plotting.cpp, src/plotting_convert_coord.cpp, src/plotting_plots.cpp, src/plotting_xyouts.cpp: removed simple nan-test that apparently is 'optimized' by compilers 2013-09-17 m_schellens * src/assocdata.cpp, src/assocdata.hpp, src/basic_pro.cpp: fixed bug #557 * src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/list.cpp, src/GDLInterpreter.cpp: fixed bug emerging from test_bug_3300626 2013-09-17 alaingdl * src/gdlgstream.hpp: fixing warning format in a "fprintf" * src/dstructgdl.cpp, src/envt.cpp: continuing cleaning code using CLang options (here dangling Else) * src/file.cpp: continuing cleaning code using CLang options (here 2x dangling Else) * src/dpro.cpp: continuing cleaning code using CLang options (here dangling Else) * src/datatypesref.cpp: continuing cleaning code using CLang options (here 2x dangling Else) * src/basic_fun_jmg.cpp, src/arrayindex.cpp: continuing cleaning code using CLang options (here dangling Else) * src/datatypes.cpp: continuing cleaning code using CLang options (here 2x dangling Else) * src/gdlgstream.hpp: CLang complains here due to [-Wlogical-op-parentheses] * src/list.cpp, src/str.cpp, src/read.cpp: continuing cleaning code using CLang options (here dangling Else) 2013-09-16 alaingdl * src/gsl_fun.cpp: "dangling else", thanks to CLang warnings. * src/gsl_fun.cpp: fixing trivial warning coming from CLang default compilation. * src/GDLInterpreter.hpp, src/devicex.hpp, src/plotting_windows.cpp, src/widget.cpp: starting fixing obvious bugs (= instead ==) or "dangling else", thanks to CLang warnings. 2013-09-16 m_schellens * src/list.cpp: fixed LIST with negative LENGTH KW 2013-09-10 gilles-duvert * src/basic_pro.cpp: option LAST_MESSAGE for HELP now correctly supports the presence of the OUTPUT keyword 2013-09-07 gilles-duvert * src/basic_pro.cpp: Corrected positive year dates that were wrong by 1 day. Note that Julian date does not vary between 5 and 15 October 1582 (correct behaviour). 2013-09-04 gilles-duvert * src/plotting.cpp: solves bug #565 2013-08-30 alaingdl * src/pro/calendar.pro: fixing a (old) input conversion error (bug #218) in CALENDAR. * testsuite/Makefile.am, testsuite/test_array_equal.pro, testsuite/test_netcdf.pro: initial import of "test_array_equal.pro" (some basic test cases for ARRAY_EQUAL were wrong) and "test_netcdf.pro", a to-be-finished merging of various tests cases for NetCDF format. * src/basic_fun.cpp: correction a bug in ARRAY_EQUAL when one of the inputs arrays is an array with only one element: ARRAY_EQUAL(1,[1,1]) is True, ARRAY_EQUAL([1],[1,1]) is False !! Test cases to be put in the testsuite. * src/envt.cpp: in "envt.cpp", GetParDefined() should throw when the variable is undefined OR explicitly equal to !Null * testsuite/test_strsplit.pro: Adding few tests cases in TEST_STRSPLIT related to Length= keyword. A bug related to ARRAY_EQUAL() was also corrected. * src/ncdf_var_cl.cpp: Correcting bug #524 NCDF_VARGET fails for string array, thanks to Harald. (test case to be add in testsuite/) 2013-08-29 gilles-duvert * src/plotting_windows.cpp, src/devicex.hpp: Adds support for preference values GDL_GR_[WIN or X]_WIDTH, HEIGHT and QSCREEN. To be used as their *DL equivalents in the environment. 2013-08-26 gilles-duvert * src/plotting_contour.cpp: solves bug #561 ( contour desperately stuck ) 2013-08-26 alaingdl * src/plotting_contour.cpp: clarifying logic in CONTOUR inputs to avoid crashing without x/y and /irregular 2013-08-22 alaingdl * src/datatypes.cpp: I revert this change in CONVOL input types, because it is not compilable with "old" GCC (4.3, 4.4). Looking for a more partable version. 2013-08-11 alaingdl * testsuite/test_idl_validname.pro: new test cases in "test_idl_validname.pro" * src/pro/idl_validname.pro: three improvments in pro IDL_VALIDNAME: 1/ input as list of string OK, 2/ thanks to patch 66, better managment of 3 special chars: $, ! and \, 3/ "!" at first place and /convert_all is well managed. 2013-08-05 alaingdl * src/datatypes.cpp: in CONVOL(), allowing Ulong and Ulong64 (work by Nodar K.). 2013-08-04 alaingdl * src/basic_pro_jmg.cpp: In CALL_EXTERNAL C code, removing fixed defaultAlign = 16 (Eigen Case). This is problematic for structures on 32b linux. * src/basic_pro_jmg.cpp: for CALL_EXTERNAL, pbs running "test_ce.pro" : applying patch 69 from Orion, plus an extra test for string. Now all tests but "struct" OK ! 2013-08-03 gilles-duvert * src/ofmt.cpp: c++ code ready for C() format. Needs separate work on antlr code... 2013-08-02 gilles-duvert * src/gdlgstream.hpp: corrected wrong orientation of XOUTS characters when axes are inverted * src/plotting.cpp: corrected wrong orientation of symbols when axes are inverted * src/plotting_xyouts.cpp: corrected wrong orientation of XOUTS characters when axes are inverted 2013-08-01 gilles-duvert * src/basic_pro_jmg.cpp: solves bug #559 however reason why the string pointer was corrupted to begin with is unclear for me. 2013-07-31 gilles-duvert * testsuite/test_strsplit.pro: test for bug #554 and others related to use of LENGTH Keyword * src/pro/strsplit.pro: should solve bug #554 and other related to use of LENGTH Keyword * src/matrix_cholesky.cpp: should solve bug #555 2013-07-26 m_schellens * src/basic_op.cpp, src/datatypes.cpp, src/hash.cpp, src/hash.hpp, src/list.cpp, src/list.hpp, src/overload.cpp, src/prognode.cpp: IsTrue for LIST and HASH 2013-07-26 gilles-duvert * src/plotting.cpp: cosmetic changes after patch #68 * src/plotting_contour.cpp, src/plotting_shade_surf.cpp, src/plotting_surface.cpp, src/plotting_plot.cpp: applied patch #68 * src/pro/oploterr.pro: behaviour of oploterr should be to clip errorbars... 2013-07-26 m_schellens * src/math_fun.cpp, src/pythongdl.cpp: fix for python module 2013-07-25 gilles-duvert * src/pro/delvar.pro: implements delvar as a procedure using code from old version of delvarx.pro (under BSD license) 2013-07-25 m_schellens * src/math_fun.cpp, src/basic_fun.cpp, src/datatypes.hpp, src/dpro.cpp, src/dpro.hpp, src/dstructgdl.hpp, src/typedefs.hpp: sync * src/envt.hpp, src/extrat.cpp, src/hash.cpp, src/math_fun_jmg.cpp, src/typedefs.hpp, src/basic_fun.cpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/dcommon.hpp, src/dpro.hpp, src/dstructdesc.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/dvar.hpp, src/envt.cpp: replaced deque by vector where possible 2013-07-24 gilles-duvert * src/pro/ploterr.pro: trick to plot errorbars waaay faster using nan-separated values in arrays. * src/pro/oploterr.pro: introduced simple oploterr version as in idl. 2013-07-24 m_schellens * src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/pro/strsplit.pro: fixed STRSPLIT * src/basic_fun.cpp, src/datatypesref.cpp, src/hash.cpp: some fixed for HASH * src/dinterpreter.cpp, src/hash.cpp: sync 2013-07-23 m_schellens * src/hash.cpp, src/list.cpp, NEWS, src/dinterpreter.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: dot access for GDL_OBJECTs (left and right-side) 2013-07-22 alaingdl * src/basic_pro.cpp: adding working TRANSFER_COUNT keyword for READU/WRITEU, this is used in a procedure (BLKSHIFT) in the AstroLib (work by Nodar K.) * src/libinit.cpp: in RESTORE, we need to have obsolete keyword (without effect) for CMSVlib. 2013-07-21 m_schellens * NEWS, src/GDLInterpreter.hpp, src/basic_op.cpp, src/hash.cpp, src/overload.cpp: HASH complete 2013-07-19 m_schellens * src/hash.cpp, src/hash.hpp, src/overload.cpp: sync 2013-07-18 m_schellens * NEWS, src/basic_pro.cpp, src/hash.cpp, src/list.cpp, src/list.hpp: HASH::HASH___OverloadPlus (no structs yet) 2013-07-18 alaingdl * NEWS: initial import of CHOLSOL/CHOLDC and LA_CHOLSOL/LA_CHOLDC using Eigen3 (Work by Nodar K.) * src/matrix_cholesky.hpp, src/CMakeLists.txt, src/Makefile.am, src/datatypes.cpp, src/gsl_fun.hpp, src/libinit_jmg.cpp, src/matrix_cholesky.cpp: Initial import of CHOLSOL/CHOLDC and LA_CHOLSOL/LA_CHOLDC using Eigen3. This is not optimal because Eigen3 does not separate the steps, then computations are done 2 times. Work by Nodar K. Also temporary change in CONVOL to help compiling on older GCC compilers. 2013-07-18 m_schellens * src/gdlc.i.g, src/hash.cpp, src/hash.hpp, src/list.cpp, src/objects.cpp, src/objects.hpp, src/overload.cpp, src/prognode.cpp, src/GDLInterpreter.hpp, src/basegdl.hpp, src/datatypesref.cpp: HASH: ToStruct, Keys, Values, HasKey 2013-07-18 alaingdl * src/basic_fun.cpp, src/basic_fun.hpp, src/libinit.cpp: back to a working version for the CVS, due to files related to changes in CONVOL 2013-07-17 m_schellens * src/basegdl.hpp, src/basic_fun.cpp, src/datatypes.hpp, src/hash.cpp, src/hash.hpp, src/libinit.cpp, src/list.cpp, src/overload.cpp: HASH::REMOVE (pre-alpha) 2013-07-17 alaingdl * src/convol.hpp, src/libinit.cpp: CONVOL: one file forgotten, one typo in new calling name * src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/convol.cpp, src/datatypes.cpp, src/libinit.cpp, src/nullgdl.cpp, src/nullgdl.hpp: two new keywords managed inside CONVOL(): BIAS and NORMALIZE (see request in bug report 542). Work by Nodar K. 2013-07-17 m_schellens * src/gdlarray.hpp, src/hash.cpp, src/hash.hpp, src/list.cpp, src/objects.cpp, src/overload.cpp: HASH::_OverloadBracketsRightSide 2013-07-17 alaingdl * src/pro/write_png.pro: correcting bug 553 (good order for 2D image and R,G,B keywords) 2013-07-16 m_schellens * src/basic_pro.cpp, src/hash.cpp: fixed HELP output for arrays * src/basic_fun.hpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypesref.cpp, src/default_io.cpp, src/hash.cpp, src/hash.hpp, src/libinit.cpp, src/list.hpp: HASH (still alpha) 2013-07-15 m_schellens * src/nullgdl.hpp, src/objects.cpp, src/overload.cpp, src/prognode.cpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/hash.cpp, src/nullgdl.cpp: hash (pre-alpha) * src/prognodeexpr.cpp: fixed test_bug_3152829 2013-07-15 alaingdl * testsuite/CMakeLists.txt: including Orion' patch to catch when the test case fully crashes GDL. 2013-07-15 m_schellens * src/hash.cpp: sync * src/CMakeLists.txt, src/Makefile.am, src/hash.cpp, src/hash.hpp: add files for HASH 2013-07-13 m_schellens * NEWS: Full support of LIST * src/datatypesref.cpp: Fixed LIST::NewIx * src/GDLInterpreter.cpp, src/basic_pro.cpp, src/default_io.cpp, src/gdlc.i.g, src/list.cpp, src/list.hpp, src/prognode_lexpr.cpp: HELP and PRINT support for LIST * src/list.cpp, src/list.hpp, src/overload.cpp: full support for LIST except for PRINT and HELP * src/basic_fun.cpp, src/basic_op.cpp, src/basic_op_add.cpp, src/basic_op_sub.cpp, src/basic_pro.cpp, src/datatypes.cpp, src/envt.cpp, src/envt.hpp, src/list.cpp, src/list.hpp, src/overload.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: added operations for LIST 2013-07-12 m_schellens * src/list.cpp, src/list.hpp, src/overload.cpp: LIST::REMOVE and LIST::REVERSE procedures 2013-07-12 alaingdl * src/Makefile.am: 4 missing files in "Makefile.am" for the "configure" way (OK on Debian stable) 2013-07-11 m_schellens * src/envt.cpp, src/envt.hpp, src/list.cpp, src/objects.hpp: Correct cleanup for LIST 2013-07-10 m_schellens * src/list.cpp, src/overload.cpp: ADD::REMOVE (still alpha) * src/basic_fun.cpp, src/list.cpp, src/list.hpp, src/overload.cpp: LIST::REMOVE (alpha version) 2013-07-09 m_schellens * src/list.cpp, src/list.hpp: add * src/CMakeLists.txt, src/GDLInterpreter.hpp, src/basic_fun.cpp, src/basic_pro.hpp, src/gdlc.i.g, src/overload.cpp, src/dpro.hpp, src/envt.cpp, src/envt.hpp, src/overload.hpp, src/specializations.hpp, src/datalistt.hpp, src/datatypes.cpp, src/datatypes.hpp, src/datatypesref.cpp, src/dpro.cpp: LIST::ADD 2013-07-08 alaingdl * src/dinterpreter.cpp: switching back the default history to 200: convenient, and similar behavior on the other side ;-) * src/gsl_fun.cpp: In QROMB and QROMO, better managment of keyword EPS=, thanks to patch 67. At the same time, correcting a long living bug in the order of parameters when calling GSL function : gsl_integration_qag(). Please report pbs !! 2013-07-05 alaingdl * testsuite/test_bug_3057520.pro, testsuite/test_bug_3275334.pro: just giving a message before exiting. 2013-07-04 m_schellens * src/envt.cpp, src/gdlarray.hpp, src/gdlc.i.g, src/objects.cpp, src/overload.cpp, src/GDLInterpreter.cpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/basic_pro_jmg.cpp: LIST (function and right[]) 2013-07-03 m_schellens * src/envt.hpp, src/gdlc.i.g, src/libinit.cpp, src/prognode.cpp, src/prognodeexpr.cpp, src/typedefs.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/basic_fun.cpp, src/basic_pro.cpp, src/deviceps.hpp, src/envt.cpp: fixed TEST_PS_DECOMPOSED 2013-07-02 alaingdl * testsuite/test_ce.pro, testsuite/test_python_module_0.pro, testsuite/test_python_module_1.pro: the field "!system.os_name" is now always in Lower Case. 2013-07-01 m_schellens * src/GDLInterpreter.cpp, src/arrayindex.cpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/basic_fun.hpp, src/envt.hpp, src/gdlc.i.g, src/libinit.cpp, src/objects.cpp, src/overload.cpp, src/prognode.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: fixed a = ptr_new(1) & *a= reform(*a, /over) & *a= reform(*a, /over) bug 2013-07-01 alaingdl * src/str.cpp: Work by Nodar K. One more attempt to better processing of space(s) within WordExp(). This time, names with multi consecutives spaces should be well managed. * src/file.cpp, src/file.hpp, src/libinit.cpp: import of internal C++ versions of FILE_BASENAME() and FILE_DIRNAME(), with a better management of (some) special chars. (e.g. see bug 550). * src/basic_pro.cpp: removing useless comment ! * src/pro/Makefile.am, src/pro/file_basename.pro, src/pro/file_basename_old.pro, src/pro/file_dirname.pro, src/pro/file_dirname_old.pro: moving into obsoleting names the two functions file_basename.pro file_dirname.pro to be substitute to C++ versions. 2013-06-29 m_schellens * src/datalistt.hpp, src/envt.hpp, src/libinit_cl.cpp, src/libinit_jmg.cpp, src/prognode.cpp: some more small optimizations * src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/gdlc.i.g, src/prognode_lexpr.cpp, src/GDLInterpreter.cpp: some optimizations * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/dpro.hpp, src/envt.hpp, src/gdlc.g, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: several optimizations 2013-06-26 gilles-duvert * src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.hpp, src/format.out.g, src/nullgdl.cpp, src/nullgdl.hpp, src/ofmt.cpp, src/specializations.hpp: first steps to support calendar format C(). * src/libinit.cpp: added CHANNEL as unsupported option for plot routines (was not present). Needs however to be fully supported. 2013-06-26 m_schellens * src/FMTTokenTypes.txt, src/basic_fun_jmg.cpp, src/cformat.g, src/libinit_mes.cpp, src/print.cpp, src/pro/str_sep.pro, src/CFMTLexer.cpp, src/CFMTLexer.hpp, src/CFMTTokenTypes.hpp, src/CFMTTokenTypes.txt, src/FMTIn.cpp, src/FMTIn.hpp, src/FMTInTokenTypes.hpp, src/FMTInTokenTypes.txt, src/FMTLexer.cpp, src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/FMTParser.cpp, src/FMTParser.hpp, src/FMTTokenTypes.hpp: fixed cformat issue (uncommented 'ALL') 2013-06-26 alaingdl * src/libinit.cpp: forgot to update helpKeys (re-ordered and also /path_cache and /help added) * src/basic_pro.cpp: in HELP, adding keywords /Path_cache and /help in JULDAY, full management of 3 to 6 inputs params. * src/envt.cpp, src/envt.hpp: /bin/bash: q: command not found (only available now in HELP pro and Besel functions !) 2013-06-24 m_schellens * src/envt.cpp, src/envt.hpp: FreeListT for EnvUDT * src/envt.cpp, src/envt.hpp, src/extrat.cpp, src/gsl_fun.cpp, src/math_fun.cpp, src/read.cpp, src/basic_fun.cpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypesref.cpp, src/dstructdesc.cpp: removed dynamic_cast<>s * src/gsl_fun.cpp: fixed bug #548 (HISTOGRAM,OMAX=value with BYTE) 2013-06-23 m_schellens * src/arrayindexlistnoassoct.hpp, src/gdlexception.cpp, src/gdlexception.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: made ARRAYEXPR node distinugish between indexee and index error. Needed for ARRAYEXPR_FCALL resolving. 2013-06-22 m_schellens * src/prognodeexpr.cpp: changed order to try in ARRAYEXPR_FCALL nodes 2013-06-21 m_schellens * src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/pro/smooth.pro, src/typedefs.hpp: memory management optimization 2013-06-18 gilles-duvert * src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: Added JULDAY! 2013-06-17 m_schellens * src/assocdata.cpp, src/assocdata.hpp, src/datatypes.cpp, src/datatypes.hpp: sync * src/basic_pro.cpp, src/typedefs.hpp: cleanup * src/basic_pro_jmg.cpp, src/dstructdesc.hpp, src/gsl_fun.cpp, src/typedefs.hpp: fixed memeory leak in call_external 2013-06-14 alaingdl * src/file.cpp, src/str.cpp: trying to improve WordExp(), work by Nodar K. 2013-06-13 m_schellens * src/math_fun.cpp, src/ncdf_att_cl.cpp, src/fftw.cpp, src/gsl_matrix.cpp: fixed bug with wrong sizeof(long - should be Dlong) * src/basic_fun_cl.cpp: fixed mismatched new[] delete (removed the allocation) 2013-06-12 m_schellens * src/CFMTTokenTypes.hpp, src/CFMTTokenTypes.txt, src/FMTIn.cpp, src/FMTIn.hpp, src/FMTInTokenTypes.hpp, src/FMTInTokenTypes.txt, src/FMTLexer.cpp, src/FMTLexer.hpp, src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/FMTParser.cpp, src/FMTParser.hpp, src/FMTTokenTypes.hpp, src/FMTTokenTypes.txt, src/cformat.g, src/format.g, NEWS, src/CFMTLexer.cpp, src/CFMTLexer.hpp: fixed C string grammar (still not implemented) 2013-06-12 gilles-duvert * src/plotting.cpp, src/plotting.hpp: handle X11 window resizes better, writes [XYZ].REGION, uses !P.REGION etc. * src/plotting_plot.cpp: plot knows about !P.NSUM 2013-06-12 alaingdl * src/plotting.cpp: trying to manage !P.region when !P.position is equivalent to unset. 2013-06-11 m_schellens * NEWS, src/GDLInterpreter.hpp, src/arrayindex.hpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/gdl.cpp, src/gdlc.i.g, src/gdlexception.cpp, src/objects.cpp: Added .RESET_SESSION and .FULL_RESET_SESSION commands * src/dinterpreter.cpp, src/dinterpreter.hpp, src/gdlc.g, src/gdlc.i.g, src/graphics.cpp, src/objects.cpp, src/objects.hpp, src/GDLInterpreter.hpp, src/GDLLexer.cpp, src/GDLParser.cpp, src/arrayindex.hpp, src/dcommon.cpp: .RESET command (not complete yet); Fixed bug with ARRAYEXPR_FCALL and more than 8 parameters 2013-06-11 alaingdl * src/basic_fun_cl.cpp: fixing a small memory leak in SYSTIME() (Nodar) 2013-06-10 gilles-duvert * src/plotting.cpp: oops, small ticks were not small anymore... 2013-06-10 alaingdl * configure.in: updating the Configure way with new capabilities ralted to plplot. 2013-06-09 gilles-duvert * src/plotting.cpp: removed a memory loss * src/gdlgstream.hpp, src/gdlgstream.cpp: change in TranslateFormatCodes to avoid Valgrind complaining. previous version would return the c_str() of a std::string created in the function. Apparently the std::string is deleted on return, and the c_str() was pointing to a deallocated memory. Current version manages the string on the caller side. 2013-06-08 gilles-duvert * src/plotting_shade_surf.cpp: better defaults for shading lightsource. plplot's shading is definitely not very efficient, alas. * src/devicex.hpp: should solve bug 535 2013-06-07 gilles-duvert * src/plotting.cpp, src/plotting_axis.cpp: variant of gdlAxis to handle special case of AXIS command (to have correct ticklengths) * src/plotting_plots.cpp: bug in use of !P.T3D and 3 parameters * src/plotting.hpp, src/plotting_contour.cpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_polyfill.cpp, src/plotting_shade_surf.cpp, src/plotting_surface.cpp, src/plotting_xyouts.cpp: support for use of !P.T3D * src/gshhs.cpp: temporarily solves ticket 474. A severe rewriting is needed to handle all the special projection cases especially for contour filling (poles, projection limits but also map levels: ponds in inslands in lakes in continents...) 2013-06-07 alaingdl * CMakeLists.txt: Better management of GM and IM: when GM available, using it. If GM not available, if IM available, using IM. The selection of IM or GM if both presents should still be possible (-DGRAPHICSMAGICK=off). Tested on CentOS and OSX. Patch by Nodar K. with Alain C. * CMakeModules/FindImageMagick.cmake: change in the file provided by CMake to support local install of IM (tested on CentOs and OSX) 2013-06-06 alaingdl * src/objects.cpp: fixing warning when computing Thread Numbers (NK) 2013-06-03 m_schellens * src/magick_cl.cpp: fixed memory leak in magick_write 2013-06-03 alaingdl * src/gdl.cpp, src/objects.cpp: when not compiled with Eigen3, must add in these 2 files. * src/plotting.cpp: needed on OSX with gcc 4.2.1 2013-06-01 m_schellens * src/basic_fun.cpp, src/gdlgstream.hpp: bugfix: replaced Guard with ArrayGuard 2013-05-31 gilles-duvert * src/math_fun_jmg.cpp, src/math_fun_jmg.hpp: solves last bug on poly_2d #3613920 2013-05-30 alaingdl * src/basic_pro.cpp, src/gdl.cpp, src/objects.cpp, src/objects.hpp: On muticores with non null load, performances are strongly dependant to a pertinent choice of OMP_NUM_THREADS value. A mechanism is proposed to estimate a optimal value for the number of Threads, is applied at startup time and propagated into !cpu.TPOOL_NTHREADS (work by Nodar K.) 2013-05-30 gilles-duvert * src/plotting_windows.cpp: annotations * src/plotting_cursor.cpp: correct warping of pointer (command tvcrs) * src/gdlxstream.cpp: erase was not properly erasing window when subpages were present. Also, correct warping of pointer (command tvcrs) * src/gdlxstream.cpp, src/gdlgstream.hpp, src/gdlxstream.hpp, src/plotting.hpp: uses pixmap double-buffering provided by plplot to speed up operations with X11 windows. to be tested. could solve bug 3612116, also. 2013-05-29 alaingdl * src/basic_pro.cpp: in pro CPU, restore= and /reset are exclusive. 2013-05-26 gilles-duvert * src/plotting_shade_surf.cpp, src/plotting_surface.cpp, src/plotting_contour.cpp: solves bug #3613926 by removing unfortunate optimization 2013-05-25 gilles-duvert * src/plotting_surface.cpp, src/plotting_shade_surf.cpp: handles correctly combinations of min/max_values and zrange. 2013-05-24 gilles-duvert * src/plotting_contour.cpp: better handling of 1 contour and associated c_color vector * src/gsl_fun.cpp, src/interp_multid.h, testsuite/test_congrid.pro: solves bug #3612274! 2013-05-21 gilles-duvert * src/basic_pro.cpp, src/libinit.cpp: Support for MESSAGE, /REISSUE_LAST and corresponding HELP, /LAST_MESSAGE (used in, e.g., CoyoteGraphics library) * src/gdlgstream.hpp: change to enable compiling gdl on old plplot versions while a new feature depending on the presence of the 'pllegend' function has been added. 2013-05-18 cokhavim * src/gdlgstream.hpp: In gdlGetmmStringLength moved legend position to avoid showing up in postscripts * src/deviceps.hpp: Added improvements for encapsulated postscripts * src/gdlgstream.cpp: GetGeometry outpus incorrect dimensions for PS device * src/plotting.cpp: Increased default top margin slightly to accomodate subscripts and superscripts 2013-05-17 alaingdl * src/Makefile.am: Missing new filename "plotting_shade_surf.cpp" in src/Makefile.am 2013-05-16 gilles-duvert * config.h.cmake, CMakeLists.txt: change to enable compiling gdl on old plplot versions while a new feature depending on the presence of the 'pllegend' function has been added. * src/deviceps.hpp, src/devicesvg.hpp, src/devicex.hpp: due to popluar demand ;^), reinstalled colormap initialisation for colormap#1 in device[ps,x,svg]. * src/plotting.cpp: Patch for Bug item #3613383, 2013-05-16 alaingdl * src/basic_fun.cpp: removing extra "cout <<" * src/basic_fun.cpp, src/libinit.cpp: Initial managment of /source keyword in ROUTINE_INFO() [bug report 3612842]. Not ready when no parameter provided (in that case, all compiled procedures or functions name/path informations must returned) 2013-05-16 gilles-duvert * src/devicex.hpp, src/plotting_windows.cpp: when opening several windows whose position are not given, dispatch them at the 4 corners of display in sequence. handy and mimics the (default) 'Tile' of IDL_GR_WIN_LAYOUT preference (such external preferences not being part of gdl yet) * src/plotting_xyouts.cpp: removed unnecessary warning 2013-05-16 alaingdl * src/gsl_fun.cpp: managing /Double keyword for INVERT() (patch by Nodar K.) 2013-05-15 gilles-duvert * CMakeLists.txt, config.h.cmake, src/gdlgstream.hpp, src/plotting_xyouts.cpp: Solves problems related to variable string lengths in XYOUTS (Hersey chars are not monospaced): if the plplot shared library contains the private function plstrl(), it is used. If not, (Ubuntu, debian) implemented a workaround by using a feature of pllegend(). Needs a full recompilation (after removing CMakeCache.txt and config.h). * doc/udg/README.txt: added infos about absent style files seemingly needed on my distro. 2013-05-14 alaingdl * src/pro/dialog_pickfile.pro: in gnome3, we need to tell to Zenity the current path :( 2013-05-13 gilles-duvert * src/plotting_xyouts.cpp: returned string width in option width= of xyouts is inexact since glyphs have a variable spacing. Added a warning about this. Since using plplot's private headers is not permitted (use of plstrl()) , one could consider adding the functionality to plplot (i.e., that plstrl() be public) or get access to a copy of the current PLStream structure and use its information. 2013-05-12 gilles-duvert * src/plotting.cpp: test patch: changed axis labelling to be clearer and more similar to original layout (exponents no more at end of axis etc). * src/plotting.hpp: removed some private structs from plotting.hpp to plotting.cpp 2013-05-10 gilles-duvert * src/plotting_polyfill.cpp, src/CMakeLists.txt, src/libinit.cpp, src/plotting.cpp, src/plotting.hpp, src/plotting_axis.cpp, src/plotting_contour.cpp, src/plotting_convert_coord.cpp, src/plotting_erase.cpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_surface.cpp, src/plotting_xyouts.cpp: Added almost full support for 3D plots in CONTOUR,PLOT,PLOTS,OPLOT,XYOUTS,SURFACE,SHADE_SURF,CONVERT_COORD,T3D,SCALE3,POLYFILL,SET_SHADING,AXIS(not complete). Still lacking 3D support:TV,TVSCL enabled /IRREGULAR for CONTOUR. * src/deviceps.hpp, src/devicesvg.hpp, src/devicex.hpp: removed colormap initialisation in device[ps,x,svg] since it seems to slow the display and does not appear to be needed. * src/plotting_windows.cpp: give window creation in "wset,0" same properties as a normal window (except backingStore) * src/plotting_shade_surf.cpp: adding shade_surf 2013-05-08 gilles-duvert * testsuite/CMakeLists.txt: Applied Orion's patch #3606092. Solves indeed the hangups of 'make check' when using CMake. 2013-05-07 m_schellens * CMakeLists.txt, CMakeModules/FindNetCDF.cmake, configure.in, src/ncdf_att_cl.cpp, src/ncdf_cl.hpp, src/ncdf_dim_cl.cpp, src/ncdf_var_cl.cpp: applied patch ID: 3608649 * src/basic_fun.cpp, src/datatypes.cpp, src/gsl_fun.cpp, src/math_fun_ac.cpp, src/math_fun_gm.cpp, src/math_fun_jmg.cpp, src/plotting.cpp, src/plotting_plot.cpp, src/plotting_polyfill.cpp: applied patch ID: 3612678 (with some mods) * src/antlr/LLkParser.cpp, src/gdlc.g: added some comments * src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/antlr/LLkParser.cpp, src/gdlc.g, testsuite/test_suite.pro: fixed deref for arrayexpr_mfcall (bug tracker ID: 3612104) 2013-05-06 gilles-duvert * src/deviceps.hpp: Added Joanna's patches #3612688 while reverting some code back to before rev.1.37 ( since forcing background erase in gdlpsstream.cpp rev. 1.7 was not a good solution to bug #361189) -- now we seem to have both PS and EPS color/bw landscape/portrait outputs generally quite good, * src/plotting_misc.cpp: Previous patch (inverting !P.COLOR and !P.BACKGROUND values when device=PS) had side effects. * src/gdlgstream.hpp, src/gdlpsstream.cpp, src/gdlpsstream.hpp: Reverted last patch (1.6) -- forcing background erase was not a good solution. 2013-05-06 m_schellens * src/pro/read_ascii.pro: fixed DATA_START for READ_ASCII * src/libinit_cl.cpp: added missing KLISTEND 2013-04-30 gilles-duvert * src/plotting_misc.cpp: Joanna Patch item #3611949. thanks. * src/deviceps.hpp, src/gdlpsstream.cpp, src/gdlpsstream.hpp, src/gdlgstream.hpp: Should solve Bug #3611897. By forcing background to erase the PS plot, one can have the correct background even on the first page. Note that now PS behave exactly as X, i.e., PS has also the option DECOMPOSED and color tables varies accordingly. 2013-04-29 alaingdl * src/deviceps.hpp: patch 3611949 by Joanna to restore Horizontal/Vertical placements in PostScript. * src/deviceps.hpp: better version for bug 3611898. I suspect we can play directly with Lun ... * src/deviceps.hpp: first attempt to solve bug report 3611898. But it is not enough 2013-04-26 alaingdl * src/deviceps.hpp: patch 3611864: two corrections: orientation (value for "sdiori" should be in expressed related to !pi/2) and color. 2013-04-24 alaingdl * CMakeLists.txt: in CMake way, if both packets present, we prefer to use GraphicsMagick than ImageMagick 2013-04-23 alaingdl * CMakeModules/FindGraphicsMagick.cmake, CMakeLists.txt: initial import of patch 3611651 to activate GraphicsMagick instead of ImageMagick in the CMake way. 2013-04-18 alaingdl * src/pro/online_help.pro: in ONLINE_HELP, activating book= and /full_path keywords, used inside HEALPix lib. 2013-04-11 gilles-duvert * src/libinit.cpp: changes related to options accepted now by plotting_surface. * src/plotting_surface.cpp: intermediate version before tackling the T3D transforms. 2013-04-11 alaingdl * testsuite/test_matrix_multiply.pro, testsuite/Makefile.am: new test for matrix multiplication, using matrix with rotation property. Types 14 and 15 are not ready on the GDL side due to INVERT(). May be INVERT has to be rewrite using Eigen3 ? 2013-04-11 gilles-duvert * src/plotting.cpp: solves bug #3610459 2013-04-11 alaingdl * src/pro/diag_matrix.pro: in DIAG_MATRIX(), type for output should be derived from the type of the input vector ! 2013-04-09 gilles-duvert * src/plotting_cursor.cpp: solves bug #3608752 2013-04-07 m_schellens * src/basic_op.cpp, src/datatypes.hpp, src/specializations.hpp: took change of Data_ template back (too early) 2013-04-04 m_schellens * src/dinterpreter.cpp: fixed usage of Guard * src/datatypes.hpp, src/math_fun_ac.cpp: added some clarifiying macros 2013-04-02 m_schellens * src/basegdl.hpp, src/math_fun_ac.cpp, src/prognodeexpr.cpp: refactored complex-double type promotion 2013-03-28 alaingdl * src/pro/matrix_multiply.pro: removing usage of MATMUL() 2013-03-27 m_schellens * src/datatypes.hpp, src/test_template_grouping.cpp: enabled default template parameters 2013-03-26 m_schellens * src/basegdl.hpp, src/basic_op.cpp, src/datatypes.cpp, src/math_fun_ac.cpp, src/prognodeexpr.cpp: eigen3 with matrix operator working * src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_op.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/libinit_ac.cpp, src/math_fun_ac.cpp, src/math_fun_ac.hpp, src/nullgdl.cpp, src/nullgdl.hpp, src/specializations.hpp: depoyed eigen3 for matrix operator (still buggy) 2013-03-25 m_schellens * src/GDLTreeParserTokenTypes.txt, src/arrayindex.hpp, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/gdlc.i.g, src/nullgdl.cpp, src/nullgdl.hpp, src/specializations.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLLexer.hpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp: test overload funtion with template 2013-03-25 opoplawski * CMakeLists.txt: Make cmake look for python 2 or PYTHONVERSION if specified * testsuite/test_ce.pro: Make test_ce.pro look in current directory for libtest_ce.so for cmake builds 2013-03-25 m_schellens * src/datatypes.cpp, src/datatypes.hpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_surface.cpp, src/prognode.cpp, src/typedefs.hpp, src/typetraits.hpp: fixed usage of Guard (replaced usage of operator=) 2013-03-25 alaingdl * src/datatypes.hpp: commenting c++11 line apparently not need/used now 2013-03-22 m_schellens * src/datatypes.hpp: commented out c++11 stuff * src/deviceps.hpp, src/devicex.hpp, src/dinterpreter.cpp, src/envt.cpp, src/envt.hpp, src/fftw.cpp, src/gdlarray.hpp, src/gdlc.i.g, src/gdlwidget.cpp, src/gsl_fun.cpp, src/gsl_matrix.cpp, src/magick_cl.cpp, src/math_fun.cpp, src/math_fun_ac.cpp, src/math_fun_gm.cpp, src/math_fun_jmg.cpp, src/ncdf_cl.cpp, src/ncdf_var_cl.cpp, src/newprognode.cpp, src/plotting.cpp, src/plotting_contour.cpp, src/plotting_convert_coord.cpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp, src/plotting_surface.cpp, src/plotting_xyouts.cpp, src/print.cpp, src/prognode.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/pythongdl.cpp, src/read.cpp, src/typedefs.hpp, src/widget.cpp, CMakeLists.txt, src/GDLInterpreter.cpp, src/accessdesc.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/basic_fun_cl.cpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/datatypesref.cpp, src/dcompiler.cpp: replaced obsoleted std::auto_ptr with Guard 2013-03-21 m_schellens * src/basic_op.cpp, src/basic_op_add.cpp, src/basic_op_div.cpp, src/basic_op_mult.cpp, src/basic_op_new.cpp, src/basic_op_sub.cpp, src/datatypes.cpp, src/dstructgdl.cpp: moved DStructGDL invalid functions 2013-03-21 alaingdl * testsuite/test_bytscl.pro: initial of "test_bytscl.pro", not finished and not included in automatic test suite. We do have a problem when using /nan in BYTSCL() ... 2013-03-20 gilles-duvert * src/libinit_jmg.cpp, src/math_fun_jmg.cpp, src/math_fun_jmg.hpp: Preparation for all (?) gridding-related functions that can (easily?) be added using QHULL Library which is also a dependency (optional) of plplot. * src/basic_fun.cpp: patched incorrect behaviour for TOP > 255. Possibly caused problems in (related) tvscl, hist_equal. 2013-03-19 m_schellens * src/basegdl.hpp, src/basic_op.cpp, src/datatypes.cpp, src/dpro.hpp, src/typedefs.hpp, src/typetraits.hpp: added new type trait IS_FLOAT * src/gdlarray.hpp, src/libinit_ac.cpp, src/math_fun_ac.cpp: un-uncommented some GDLArray members * src/gdlarray.hpp: fixed bug in GDLArray's allocation logic 2013-03-18 m_schellens * src/gdlarray.hpp, src/typedefs.hpp, src/typetraits.hpp: restructure and refactoring for easier addition of new types 2013-03-16 m_schellens * src/basic_op_add.cpp, src/basic_pro_jmg.cpp, src/datatypes.cpp, src/datatypes.hpp, src/specializations.hpp, src/typedefs.hpp, src/typetraits.cpp, src/typetraits.hpp, src/basegdl.hpp: refactoring, preparation for new types 2013-03-16 gilles-duvert * src/gdlgstream.cpp: patch should cure bug reported by AC (incorrect behaviour for !P.MULTI=[2,0,0]) 2013-03-14 alaingdl * src/math_fun_ac.cpp: continue being able to compile without Eigen3 2013-03-13 m_schellens * src/math_fun.cpp: deployed eigen3 for SQRT 2013-03-12 m_schellens * src/basic_op_add.cpp: own specialization adding a scalar string to avoid eigen usage * src/envt.hpp: added some const specifiers to ForLoopInfo * src/basic_op_add.cpp: fixed bug with string addition * src/CFMTLexer.cpp, src/cformat.g: applied change suggested by patch tracker ID: 3465879 * src/math_fun.cpp, src/overload.cpp, src/typedefs.hpp, src/basic_fun.cpp, src/basic_op.cpp, src/basic_op_add.cpp, src/basic_op_div.cpp, src/basic_op_mult.cpp, src/basic_op_new.cpp, src/basic_op_sub.cpp, src/basic_pro.cpp, src/convert2.cpp, src/datatypesref.cpp, src/fftw.cpp: introduced OMPInt for OpenMP loop variables * src/basic_op.cpp, src/basic_op_add.cpp, src/basic_op_div.cpp, src/basic_op_mult.cpp, src/basic_op_sub.cpp, src/ncdf_var_cl.cpp: updated some int to string conversions 2013-03-11 m_schellens * src/magick_cl.cpp, src/ncdf_cl.cpp, src/ncdf_var_cl.cpp: updated some int to string conversions 2013-03-10 m_schellens * src/basic_op.cpp, src/basic_op_new.cpp, src/math_fun.cpp: use eigen3 for + - and * * src/basic_op.cpp, src/basic_op_new.cpp, src/math_fun.cpp: use eigen3 for + - and * (incomplete) * src/libinit_ac.cpp, src/math_fun_ac.cpp, src/math_fun_ac.hpp, src/typedefs.hpp: deploy eigen3 noalias() 2013-03-09 gilles-duvert * src/libinit.cpp, src/plotting_device.cpp, src/plotting_windows.cpp: support for "RETAIN" in DEVICE. Will not really do anything useful, though, until some other patch informs plplot of the necessity to redraw the plot. 2013-03-08 m_schellens * src/ofmt.cpp: Fixed binary output format * src/plotting_oplot.cpp, src/arrayindex.hpp, src/basic_op.cpp, src/deviceps.hpp, src/gdlgstream.hpp, src/math_utl.hpp, src/ofmt.cpp, src/overload.cpp, src/plotting.cpp, src/plotting_contour.cpp: applied patch ID: 3606722 * src/math_fun_ac.cpp: sync 2013-03-08 alaingdl * src/math_fun_ac.cpp: in "math_fun_ac.cpp" being able to compile without Eigen3; 2013-03-08 m_schellens * src/math_fun_ac.cpp: refactoring for matmul_fun * src/math_fun_ac.cpp: correct output type for matmul_fun * src/math_fun_ac.cpp: optimization for matmul_fun * src/math_fun_ac.cpp: fix error message 2013-03-07 m_schellens * src/math_fun_ac.cpp: Aligned access in malmul_fun * src/dstructgdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/typedefs.hpp, src/dstructdesc.hpp, src/includefirst.hpp: alignment for eigne3 (also for structs) * src/datatypes.cpp, src/includefirst.hpp, src/math_fun_ac.cpp, src/math_fun_ac.hpp, src/typedefs.hpp: eigen3 alignment for GDLArray 2013-03-06 gilles-duvert * src/math_fun_ac.cpp: Last and final optimizations: directly address memory location using Map<> object instead of MatrixXX, added GDL_FLOAT case to speed up this last case. 2013-03-06 m_schellens * src/math_fun_ac.cpp: optimizations for MATMUL 2013-03-05 gilles-duvert * src/pro/matrix_multiply.pro: Modified matmul_fun to accept also complex and dcomplex matrices. Modified matrix_multiply accordingly. * src/math_fun_ac.cpp: Modified matmul_fun to accept also complex and dcomplex matrices. Behaviour is now idem idl for Vectors (implicit transposition) Acceleration even better due to Eigen's use of .transpose() and direct copy of arrays with memcpy(). 2013-03-05 alaingdl * src/pro/online_help.pro: is ONLINE_HELP, better management of default browser * src/pro/online_help.pro: details for ONLINE_HELP: trying to use default browser if any; "open" for OSX ... 2013-03-04 m_schellens * src/dinterpreter.cpp: removed: return CC_OK; for ? command :-) * src/dinterpreter.cpp: added: return CC_OK; for ? command 2013-03-04 alaingdl * src/pro/online_help.pro: ONLINE_HELP: correct help header; testing if computing node; managing void "name" input * src/pro/online_help.pro: limited changes in ONLINE_HELP, more to come. * src/dinterpreter.cpp: removing useless comments. * src/dinterpreter.cpp: activating "?" command, calling ONLINE_HELP (e.g.: ?fft) * src/pro/Makefile.am: I forgot to add these 2 files names here ... 2013-03-01 alaingdl * src/pro/doc_library.pro, src/pro/online_help.pro: initial import of DOC_LIBRARY (Feature request 3606434) and ONLINE_HELP procedures. 2013-02-28 m_schellens * src/arrayindexlistnoassoct.hpp, src/basic_fun.cpp, src/basic_op_new.cpp, src/envt.hpp: fixed extra allocation in Data_::PowIntNew. bug tracker ID: 3605947 2013-02-26 alaingdl * src/gsl_fun.cpp: temporary solution for bug report 3602623 related to inaccurary in bins computations for histograms in the GSL, sensitive on 64b versions ... 2013-02-25 alaingdl * src/ncdf_var_cl.cpp: correcting bug 3605899: creating big NetCDF files (> 4 GB). Tested OK on CentOS 5.8 64b by AC. 2013-02-20 alaingdl * testsuite/test_histo.pro: adding "TEST_UNITY_BIN_HISTO" procedure into "test_histo.pro" to trace bug 3602623. Up to now, this bug occurs only on 64b computers, not on 32b, GSL versions chenged nothing. * src/pro/interpol.pro: correcting small regression when testing size of inputs for INTERPOL(/spline) 2013-02-19 alaingdl * CMakeLists.txt, configure.in: for CMake, now default is trying to use Eigen3 if found in default place (/usr/include/eigen3) or if path provided (-DEIGEN3DIR= then checked and found) then same for Configure (--with-eigen3=). Both ways checked with success on U 12.04 with libeigen3-dev. 2013-02-18 alaingdl * src/pro/interpol.pro: correcting INTERPOL() when we have NaN or Inf values in third vector (bug 3602770) * CMakeModules/FindEigen3.cmake: initial input of this file for patch 3603806 (Eigen3 support in CMake) * CMakeLists.txt, config.h.cmake: applying patch 3603806 to have Eigen3 choice in CMake 2013-02-06 gilles-duvert * NEWS: update for summary of GD's recent changes * src/plotting_contour.cpp, src/plotting_plot.cpp: corrected regression: plot,findgen(4),color=0,background=255 would not change background correctly since it is changed only at subpage change, which was called before setting background value. To be checked for the other plotting functions on which i have not yet worked. 2013-02-05 alaingdl * INSTALL, NEWS, README: updating informative files about Eigen lib. usage. * src/libinit_ac.cpp, src/math_fun_ac.cpp, src/pro/matrix_multiply.pro: extension of MATMUL, to exploit /atranspose and /btranspose. Change into z=MATRIX_MULTIPLY() to switch with or without Eigen disponibility. 2013-02-05 m_schellens * src/basic_pro.cpp, src/libinit.cpp: started SOURCE_FILES keyword for HELP 2013-02-04 alaingdl * configure.in: managing Include Path for Eigen is still a work in progress, sorry ... * src/libinit_ac.cpp, src/math_fun_ac.cpp, src/math_fun_ac.hpp, configure.in: initial import of fast matrix multiplication code res=MATMUL(a,b) based on external library Eigen 2013-01-29 alaingdl * testsuite/Makefile.am: new "test_structures.pro" file for test suite 2013-01-29 gilles-duvert * src/devicex.hpp, src/graphics.hpp, src/plotting_windows.cpp: First pass to implement support for RETAIN=0,1,2 in window. Should be revised to fully mimic IDL's behaviour. Difficulty: backing store is noticeably device and OS dependent... 2013-01-29 m_schellens * testsuite/test_structures.pro, src/prognodeexpr.cpp: fixed indexed structure access. Bug tracker ID: 3601949 2013-01-28 alaingdl * testsuite/test_structures.pro: adding a test for internal indexing in structures, to avoid any future regression ... (was bug 3601949) 2013-01-26 gilles-duvert * CMakeLists.txt, config.h.cmake: should permit, through the use of HAS_PLPLOT_SLABELFUNC, to disable the user-format option for labels of axis in plplot, functionality which is at the basis of the support of [XYZ]TICKFORMAT, [XYZ]TICKNAME etc but which has only been introduced in plplot after 5.9.6 (as far as I can guess). 2013-01-25 gilles-duvert * src/plotting.cpp: severe regression corrected: 'x' modifier for plbox() is in plplot > 5.9.7 and does not replace the 't' option, only modifies it. I restore the 't' option (draw labels) and labels should reappear for older plplot versions. 2013-01-23 gilles-duvert * src/gdlxstream.cpp, src/devicex.hpp, src/gdlgstream.hpp, src/gdlxstream.hpp, src/graphics.hpp, src/libinit.cpp, src/plotting.hpp, src/plotting_cursor.cpp, src/plotting_device.cpp, src/plotting_windows.cpp: Added full support for CURSOR command, which is interruptible by control-c (rewrote the plplot's cursor function. Note that cursor as in plplot can be moved by the arrow keys with the modifiers keys as accelerators, useful for fine positioning and absent from idl). Now RDPIX procedure works. Added cursor-related functions TVCRS (for completeness: since PlPlot's X11 window is not fully event-driven the cursor positioning has no visible effect---help welcome), EMPTY (idem), DEVICE options CURSOR_CROSSHAIR, CURSOR_STANDARD, CURSOR_ORIGINAL and GET/SET_GRAPHICS_FUNCTION (GXoR, GXand, etc). Disabled by default the focus in the X11 graphics windows as idl does. * CMakeLists.txt, src/plotting.cpp: Modified plotting.cpp and CMakelists.txt to fix problem of absence of 'plslabelfunc()' in old plplot versions. * src/devicez.hpp: uncommented useful lines! 2013-01-14 m_schellens * src/envt.hpp: made call to member expilcit * src/basic_op.cpp: changed loop var to SizeT in MatrixOp 2013-01-13 alaingdl * src/pro/wmenu.pro, src/pro/zenity_check.pro: typos when improving ZENITY_CHECK() * src/pro/dialog_pickfile.pro, src/pro/wmenu.pro, src/pro/zenity_check.pro: fixing details in DIALOG_PICKFILE, WMENU and ZENITY_CHECK 2013-01-11 m_schellens * src/new.cpp: sync 2013-01-10 gilles-duvert * src/plotting.cpp, src/plotting.hpp: Support for [XYZ]Tickformat with format='an external function' or format='(a valid GDL format)'. The C() time format code and LABEL_DATE() functions have yet to be written for this part to be complete, however. 2013-01-09 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g: optimization setting \!ERROR_STATE * src/basic_pro.cpp, src/GDLInterpreter.cpp, src/gdlc.i.g, src/initsysvar.cpp, src/initsysvar.hpp, src/io.cpp: set \!ERROR_STATE 2013-01-08 m_schellens * src/basic_pro.cpp, src/gdlexception.hpp, src/io.cpp, src/gdlc.i.g, src/gdlexception.cpp, src/gdlxstream.cpp, src/GDLInterpreter.cpp, src/accessdesc.hpp, src/allix.cpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/datatypes.cpp: infrastructure for error codes 2013-01-08 alaingdl * doc/www/_news.inc.php: updating last builds (Gentoo, Debian); links. 2013-01-08 gilles-duvert * src/plotting.cpp: oops, DeviceToNorm should not be used, only DeviceTo NormedDevice is consistent with the rest of coordinates transforms unless special cases. 2013-01-08 m_schellens * src/basic_pro.cpp, src/GDLInterpreter.cpp, src/dinterpreter.cpp, src/envt.hpp, src/gdlc.i.g, src/gdlgstream.cpp, src/prognode.cpp: working CATCH 2013-01-08 gilles-duvert * src/plotting.cpp: solves bug 2880540 (plots the non-zero values of a dataset in logscale). 2013-01-07 m_schellens * src/GDLInterpreter.hpp, src/dinterpreter.cpp, src/gdlc.i.g, src/plotting_contour.cpp: refactoring 2013-01-05 gilles-duvert * src/plotting_plot.cpp: solves bug 2880540 (2nd part, plot,[-1,1],/ylog) * src/plotting.cpp: In view of bug 2880540 (solved), it is better for the time to avoid plplot getting loose on crazy coordinates. 2013-01-04 m_schellens * src/GDLInterpreter.hpp, src/accessdesc.hpp, src/dinterpreter.cpp, src/envt.cpp, src/gdlc.i.g, src/prognodeexpr.cpp: refactoring for GDL_OBJECT::Get/SetProperty 2013-01-04 gilles-duvert * src/plotting.cpp: plslabelfunc() and associated "o" option for custom axis labelling is not present until plplot v.5.9.5 I remove the few lines associated with the use of custom labeling with HAVE_PLPLOT_BEFORE_5994, but the labeling will be bad! Users should update their plplot version to the last one. * src/plotting_contour.cpp: removed attempt to record path, should solve problems arising from changes in fill() definition which varies with plplot versions. * src/plotting.cpp: supports request #3389025 in that !P.LINESTYLE works with CONTOUR. (not described in the IDL documentation, but the case nevertheless) 2013-01-03 gilles-duvert * src/gshhs.cpp, src/libinit.cpp, src/libinit_jmg.cpp, src/plotting_cursor.cpp, src/plotting_map_proj.cpp, src/plotting_surface.cpp: miminum set of changes to be compatible with new plotting routines etc. * src/plotting_misc.cpp: code layout changed as in NetBeans for readability. * src/plotting_device.cpp: gets /XSIZE etc options correctly to pass to, e.g., PS device. * src/plotting_plots.cpp: All keywords supported except Z and T3D Provides /CONTINUE Correct handling of log/DATA/NORMAL/DEVICE coordinates CLIP ok. * src/plotting_oplot.cpp: All keywords supported. Correct handling of log/DATA/NORMAL/DEVICE overplots CLIP ok. * src/plotting_polyfill.cpp: miminum changes to be compatible with new plotting.cpp version. Still lacking: IMAGE_COORD, IMAGE_INTERp, PATTERN, TRANSPARENT,T3D,Z. * src/plotting_xyouts.cpp: Support of all options except TEXT_AXES and T3D Better than IDL: ORIENTATION, ALIGNMENT, CHARSIZE, CHARTHICK and COLOR may be vectors. * src/plotting.cpp, src/plotting.hpp: large changes to provide new functionalities and use our overloading of several plplot functions. All symbols now exactly as IDL. * src/plotting_contour.cpp: Support of all options except ZVALUE, ZAXIS,CELL_FILL, C_ANNOTATIONS, CLOSED, DOWNHILL, IRREGULAR, TRIANGULATION,PATH_*** Correct implementation of Z, [X,Y], i.e., contours may be skewed, rotated, etc depending on X and Y. Better than IDL: - a new ZLOG option makes log contours as well. - C_ORIENTATION, C_SPACING are also vectors. - log axes give better results - good contouring of Not-A-Number values in Z and MIN_VALUE/MAX_VALUE - CLIP ok. Automatic limits in some cases still different from idl. * src/plotting_axis.cpp: Support of all 2D options (i.e., all X*** and Y***) Formatting of strings by XTICKFORMAT not yet working. TICKLAYOUT=2 not implemented * src/plotting_plot.cpp: Support of all 2D options except 'FONT' and 'T3D'. All symbols exactly as IDL. Formatting of strings by XTICKFORMAT not yet working. TICKLAYOUT=2 not implemented Automatic limits in some cases still different from idl. * src/graphics.hpp: SetColor() has now 1 arg. * src/gdlgstream.cpp, src/gdlgstream.hpp: overloading of many useful plplot functions to keep track of positions, sizes, etc. Possibly overkill. * src/gdlxstream.cpp: instrumented according to our overloading of several plplot functions. * src/gdlpsstream.hpp: better plplot options management * src/devicesvg.hpp: setup of initial values to satisfy our overloading of several plplot functions. * src/deviceps.hpp: setup of initial values to satisfy our overloading of several plplot functions. workaround for bugs in plplot+pslib drivers. Not entirely convincing though. * src/devicewin.hpp: setup of initial values to satisfy our overloading of several plplot functions. Not tested on windows. * src/devicez.hpp: setup of initial values to satisfy our overloading of several plplot functions. * src/devicex.hpp: defaulted initial position top right of screen. setup of initial values to satisfy our overloading of several plplot functions. * src/initsysvar.cpp: updated clip box values * src/pro/loadct.pro, src/image.cpp, src/image.hpp: command LOADCT supports BOTTOM, NCOLORS, RGB_TABLE, SILENT * src/gdlwidget.cpp: change needed to compile with my g++ 4.4.3 x86_64-manbo-linux-gnu (?) * src/envt.cpp, src/envt.hpp: added KeywordPresent with string instead of id. 2013-01-02 gilles-duvert * CMakeModules/Findlibps.cmake: needed to find libps on some 64 bits architectures 2013-01-02 alaingdl * doc/www/contribute.html, doc/www/credits.html, doc/www/download.html, doc/www/feedback.html, doc/www/home.html, doc/www/index.html, doc/www/menu.html, doc/www/require.html, doc/www/resources.html, doc/www/screenshot.html, doc/www/support.html, doc/www/tdl.html: small changes to be OK with http://validator.w3.org/ * doc/www/_news.inc.php, doc/www/credits.php, doc/www/faq.php, doc/www/menu.html: updating informations: 0.9.3 delivered (news), MSwin version, credit (JBPark) 2012-12-30 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/accessdesc.hpp, src/gdlc.i.g, src/prognodeexpr.cpp: refactorizations GDL 0.9.3: 2012-12-27 m_schellens * CMakeLists.txt, configure.in, src/GDLInterpreter.cpp, src/accessdesc.hpp, src/dstructgdl.cpp, src/gdlc.i.g, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: GDL 0.9.3 2012-12-21 m_schellens * src/gdlc.i.g, src/GDLInterpreter.cpp: replaced dynamic_cast * src/basic_op.cpp, src/basic_op_new.cpp, src/datatypes.hpp, src/overload.cpp, src/prognodeexpr.cpp, src/specializations.hpp: Added _overloadMinus for GDL_OBJECT 2012-12-20 m_schellens * src/math_fun_jmg.cpp: slight improvements for check_math_fun * src/math_fun_jmg.cpp: Fixed CHECK_MATH; bug tracker ID: 3597463 2012-12-19 m_schellens * src/basic_op.cpp, src/basic_op_new.cpp, src/datatypes.hpp, src/dinterpreter.cpp, src/overload.cpp, src/prognodeexpr.cpp, NEWS: completed _overloadPlus * src/datatypes.hpp, src/objects.hpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/specializations.hpp, src/typedefs.hpp, ChangeLog, NEWS, src/basegdl.hpp, src/basic_op.cpp: preparations for _overloadPlus 2012-12-18 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, src/dinterpreter.cpp, src/dinterpreter.hpp, src/objects.hpp: implemented .SKIP command * src/prognodeexpr.cpp, src/GDLTreeParser.cpp, src/gdlc.tree.g, src/prognode_lexpr.cpp: ARRAYEXPR_FCALL ambiguity some minor improvements 2012-12-18 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, src/dinterpreter.cpp, src/dinterpreter.hpp, src/objects.hpp: implemented .SKIP command * src/prognodeexpr.cpp, src/GDLTreeParser.cpp, src/gdlc.tree.g, src/prognode_lexpr.cpp: ARRAYEXPR_FCALL ambiguity some minor improvements 2012-12-17 m_schellens * src/GDLTreeParser.cpp, src/gdlc.tree.g, src/newprognode.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: Fixed ARRAYEXPR_FCALL ambiguity * src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/gdlc.g, src/gdlc.tree.g, src/newprognode.cpp, src/prognodeexpr.hpp, src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLParser.cpp: in progress: ARRAYEXPR_FCALL ambiguity 2012-12-17 alaingdl * src/plotting_plot.cpp: Being able managning Log. plots with negative values only (bug report 3595172). Please notice PLplot is not able to manage "xtick/ytick" in plbox() when "l" option activated. 2012-12-13 m_schellens * src/GDLInterpreter.hpp, src/GDLParser.cpp, src/assocdata.hpp, src/basegdl.hpp, src/basic_op.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.hpp, src/gdlc.g, src/gdlc.i.g, src/overload.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/specializations.hpp, src/typedefs.hpp: Added _overloadEQ and _overloadNE 2012-12-11 m_schellens * src/overload.cpp: A bit cleanup * src/allix.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basic_pro.cpp, src/dimension.hpp, src/envt.hpp, src/overload.cpp: Completed GDL_OBJECT::_overloadBracketsRightSide 2012-12-10 m_schellens * src/nullgdl.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: Changed some warning messages * src/arrayindexlistt.hpp, src/overload.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/typedefs.hpp: Corrections for bracketsLeftSideOverload. Prepared bracketsRightSideOverload. * src/dpro.cpp, src/dpro.hpp, src/overload.cpp: Changed DPro::AddPar(...) for prettier definition of internal UD subroutines * src/basic_fun.cpp, src/default_io.cpp, src/dpro.hpp, src/envt.cpp, src/envt.hpp, src/overload.cpp, src/prognode_lexpr.cpp: Added internal GDL_OBJECT::_overloadBracketsLeftSide procedure. * src/GDLInterpreter.cpp, src/gdlc.i.g, src/prognode.hpp, src/prognode_lexpr.cpp: avoid copy or rvalue for call of internal GDL_Object::_overloadBracketsLeftSide 2012-12-09 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, src/prognode_lexpr.cpp: Completed implementation of GDL_Object::_overloadBracketsLeftSide * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/datatypes.cpp, src/dcompiler.cpp, src/dnode.hpp, src/envt.cpp, src/gdlc.i.g, src/gdlc.tree.g, src/newprognode.cpp, src/print_tree.cpp, src/prognode_lexpr.cpp, src/prognodeexpr.hpp: fixed constant array generation for array indices (compiled already from GDLTreeParser) * src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp: InitAsOverloadIndex member functions for ArrayIndexList... classes 2012-12-08 m_schellens * testsuite/test_stregex.pro, src/arrayindex.cpp, src/arrayindex.hpp: OverloadIndexNew member functions for [C]ArrayIndex... classes * src/GDLTreeParser.cpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/dcompiler.cpp, src/gdlc.i.g, src/gdlc.tree.g, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, testsuite/test_suite.pro, src/GDLInterpreter.cpp: fixed (recently changed (for overload)) array indexing * src/dnode.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypesref.cpp, src/dcompiler.cpp, src/dcompiler.hpp, src/dinterpreter.cpp: Preparation of array indices (CArrayIndex...) for object overload indexing (keep original types of indices accessible) 2012-12-07 alaingdl * src/basic_fun.cpp: revisited MEDIAN code for dim= keyword. (TEST_NANS_IN_SORT_AND_MEDIAN and TEST_MINMAX both OK) 2012-12-06 m_schellens * src/ofmt.cpp, src/overload.cpp: fixed binary output for LONG64 * src/overload.cpp, src/GDLInterpreter.cpp, src/dpro.hpp, src/dstructdesc.hpp, src/gdlc.i.g, src/objects.cpp, src/overload.hpp, src/prognode.cpp, src/prognode.hpp: full implementation of GDL_OBJECT::_overloadIsTrue function 2012-12-05 m_schellens * src/typedefs.hpp: removed debug setting * src/gsl_fun.cpp, src/typedefs.hpp: proper return value conversion for GDL function used by QROMB * src/dpro.cpp, src/gsl_fun.cpp: fixed memory leak in QROMB function. Bug tracker ID: 3592762 * src/GDLInterpreter.hpp, src/dpro.cpp, src/dpro.hpp, src/gdlc.i.g, src/overload.cpp, src/prognode.cpp, src/prognode.hpp: Implemented WRAPPED_FUN/PRONode (call c++ functions as GDL subroutines) 2012-12-04 m_schellens * src/print_tree.cpp, src/basic_pro.cpp, src/dpro.cpp, src/dpro.hpp, src/libinit.cpp, src/print_tree.hpp: fixed print_tree for circular ProgNodeP trees * src/dinterpreter.cpp, src/dpro.cpp: disabled debug output for CVS * src/dinterpreter.cpp, src/dpro.cpp, src/prognode.hpp: Fixed: BREAK when loop is last statement in subroutine 2012-12-02 m_schellens * src/datatypes.cpp, src/nullgdl.hpp: rename IsNULL function * src/GDLInterpreter.hpp, src/basic_pro_jmg.cpp, src/datatypes.cpp, src/dinterpreter.cpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/gsl_fun.cpp, src/math_fun_ng.cpp, src/nullgdl.cpp, src/nullgdl.hpp, src/specializations.hpp, src/widget.cpp: implemented _overloadIsTrue 2012-12-01 m_schellens * src/GDLParser.cpp, src/gdlc.g, src/objects.cpp, src/objects.hpp, src/prognode.cpp: made GDL_OBJECT's name a constant 2012-11-30 m_schellens * src/prognode.cpp, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/dcompiler.cpp, src/dstructdesc.cpp, src/dstructdesc.hpp, src/gdlc.g, src/gdlexception.cpp, src/objects.cpp, src/overload.cpp, src/overload.hpp: full infrastructure for operator overloading (not depoyed yet) 2012-11-29 m_schellens * src/prognodeexpr.cpp, src/topython.cpp, src/typetraits.cpp, src/CMakeLists.txt, src/Makefile.am, src/accessdesc.hpp, src/assocdata.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun_cl.cpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/basic_pro_jmg.cpp, src/convert2.cpp, src/datatypes.cpp, src/dstructdesc.cpp, src/dstructdesc.hpp, src/envt.cpp, src/envt.hpp, src/gdlexception.cpp, src/libinit.cpp, src/math_fun.cpp, src/math_fun_jmg.cpp, src/ncdf_var_cl.cpp, src/nullgdl.cpp, src/objects.cpp, src/overload.cpp, src/overload.hpp: operator overloading (only basic definitions - not supported yet) 2012-11-28 alaingdl * src/basic_pro.cpp, src/libinit.cpp, src/objects.cpp: Initial (unfinished) import of keyword /pref in HELP * src/preferences.hpp, src/Makefile.am, src/preferences.cpp: very preliminary (and not working) import of a way to process external text files for setting variables like GDL_GR_X_HEIGHT (ToDo: SET_PREF/GET_PREF) 2012-11-27 alaingdl * src/gdl.cpp, doc/gdl.1: preparing ingesting external preference file (gdl -pref=/path/to/PrefFile) 2012-11-26 alaingdl * src/pro/zenity_check.pro: setting !zenity.version to -1 when no Zenity found. Used in WMENU() 2012-11-25 alaingdl * src/pro/save.pro: extending SAVE from 30 params to 100. Only limited tests done ... 2012-11-21 alaingdl * configure.in: applying patch from Debian (0.9.2-4 fix-muldefs) * doc/gdl.1: applying patch from Debian 0.9.2-4 (hyphen-used-as-minus-sign and one typo) 2012-11-21 m_schellens * src/io.cpp, src/io.hpp, src/objects.cpp: Fixed GET_LUN bug (TEST_GET_LUN) 2012-11-20 m_schellens * src/objects.cpp: added some struct descriptors (commented out) 2012-11-20 alaingdl * src/libinit.cpp: in DEVICE, warning keyword TRUE_COLOR (for compatibility with Pluto 4.0 code) * src/devicex.hpp: typo: removing double declaration * src/devicex.hpp: desactivating useless debuging "cout << " * src/plotting_device.cpp: missing WordExp() when writing SVG or PS files. * src/magick_cl.cpp: missing WordExp() in MagickPing and MagickWrite; now we can query and write in ~/ directory ! 2012-11-19 alaingdl * src/pro/Makefile.am, src/pro/wmenu.pro: initial import of WMENU(), with a Zenity based version (working) and a text-based version (to be verified ASAP) 2012-11-16 alaingdl * src/pro/dialog_message.pro: correcting compatibility issues with old zenity versions in DIALOG_MESSAGE 2012-11-15 alaingdl * src/pro/dialog_message.pro, testsuite/test_dialog_message.pro: finishing refinements in DIALOG_MESSAGE and related test cases in TEST_DIALOG_MESSAGE 2012-11-15 m_schellens * src/basic_fun.cpp, src/basic_fun_jmg.cpp, src/basic_fun_jmg.hpp, src/libinit_jmg.cpp, src/prognodeexpr.cpp: fixed ROUTINE_NAMES,/FETCH (lead to crash in cmsvlib) 2012-11-15 alaingdl * src/pro/dialog_message.pro, src/pro/zenity_check.pro: revised DIALOG_MESSAGE but not fully finished; new !zenity structure to be faster and with less redundant messages when using obsolete zenity code * testsuite/test_dialog_message.pro: initial import of TEST_DIALOG_MESSAGE, interactive tests case for revisited DIALOG_MESSAG. 2012-11-14 alaingdl * src/pro/Makefile.am: stupid typo in new function name :( * src/pro/dialog_pickfile.pro: updating DIALOG_PICKFILE: large part of code moved into ZENITY_CHECK() * src/pro/dialog_message.pro: updating DIALOG_MESSAGE: large part of code moved into ZENITY_CHECK() * src/pro/Makefile.am, src/pro/zenity_check.pro: creating ZENITY_CHECK(), a function checking the availability of "zenity" in the path and also checks the version. This code was common in DIALOG_PICKFILE and DIALOG_MESSAGE and this should help for future maintenance and extensions 2012-11-13 alaingdl * src/pro/restore.pro: in RESTORE, fixing feature request 3581835 and various tricks around filename 2012-11-13 m_schellens * src/antlr/LLkParser.cpp, src/antlr/Parser.cpp, src/antlr/Parser.hpp: sync 2012-11-12 alaingdl * config.h.cmake: tuning HAVE_PLPLOT_BEFORE_5994 to have success on more than Debian ;-) * configure.in, src/plotting_xyouts.cpp: tuning HAVE_PLPLOT_BEFORE_5994 to have success on latest Debian too ;-) 2012-11-12 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g: Line numbers in IF statements; bug tracker ID: 3579702 * testsuite/test_suite.pro, src/GDLParser.cpp, src/gdlc.g: parser error with: tmp=cos(str.data(0).value); bug tracker ID: 3579499 * src/prognodeexpr.cpp, src/typedefs.hpp: Fixed segfault with undefined variable; bug tracker ID: 3585392 2012-11-10 alaingdl * CMakeLists.txt: first attempt managing recent plplot lib. with CMake ... * src/plotting_xyouts.cpp: typo in plotting_xyouts.cpp 2012-11-09 alaingdl * src/plotting_xyouts.cpp, configure.in: trying to manage hidden symbols in recent Debian plplot 5.9.9-4 in XYOUTS; patch 3575295 from Joanna 2012-11-07 slayoo * configure.in: removing color-tests from configure.in - it causes problems, and the autotools-based install is anyhow going to be obsoleted soon... 2012-11-07 alaingdl * doc/www/resources.php: updating ADASS refs * doc/www/credits.php: adding my 2 students this summer 2012 * src/antlr/LLkParser.cpp: desactiviating verbose mode in interpretor "trace" ! 2012-11-07 slayoo * gsl.m4: removing the gsl.m4 file * src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in, testsuite/Makefile.in, depcomp, doc/Makefile.in, install-sh, ltmain.sh, missing, mkinstalldirs, src/Makefile.in, INSTALL, Makefile.cvs, Makefile.in, aclocal.m4, config.guess, config.h.in, config.sub, configure: removing autotools-generated files from the repository * AUTHORS, doc/udg/chapters/credits.tex, doc/www/credits.php: adding Gilles to the author lists 2012-11-06 m_schellens * src/antlr/LLkParser.cpp, src/GDLParser.cpp, src/gdlc.g: nicer tracing 2012-10-29 gilles-duvert * src/interp_multid.h: Solved bug keyword "Missing" not working for upper side in 1D INTERPOLATE. The range for interpolation was deemed valid including the upper boundary, when in IDL thid is not the case. 2012-10-18 alaingdl * src/pro/str_sep.pro, testsuite/test_str_sep.pro: improvment of STR_SEP, should be OK for Separator with more than one element. Unfinished for pecular cases with one element. * testsuite/test_str_sep.pro: adding news cases failing with current STR_SEP code (to be updated soon ;-) * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_get_lun.pro: inclusion of "test_get_lun.pro" in the "make check" test suite. Currently, this test fails. 2012-10-12 m_schellens * src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: HEAP_FREE initial version 2012-10-10 alaingdl * testsuite/test_deriv.pro, src/pro/deriv.pro: continuing cleaning DERIV() 2012-10-09 m_schellens * HACKING, src/deviceps.hpp, src/gshhs.cpp, src/typedefs.hpp: renamed GSLGuard to GDLGuard; redefined FILEGuard 2012-10-09 alaingdl * testsuite/test_qromo.pro, src/gsl_fun.cpp: improving QROMO when diverging at one of the boundaries: switch from QAG to QAGS. General case not ready, but testsuite improved ... * src/pro/deriv.pro: better behavior, we desactivate extra checks ... 2012-10-08 alaingdl * src/typedefs.hpp: missing for Ubuntu OS ... * src/gsl_fun.cpp: in QROMO, allowing paired sizes for inputs [1][N] or [N][1] should give [N] 2012-10-05 m_schellens * src/gsl_fun.cpp, src/typedefs.hpp: Fixed several memory leaks 2012-10-04 m_schellens * src/deviceps.hpp, src/gshhs.cpp, src/gsl_fun.cpp, src/gsl_matrix.cpp, src/math_fun.cpp, src/typedefs.hpp, CMakeModules/Findlibps.cmake: removed LIBPS_LIBRARY_DIRS from CMake pslib stuff; added exception savety 2012-10-03 alaingdl * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_nans_in_sort_and_median.pro: Why this important test on MEDIAN() and SORT() with NaN wasn't in the automatic test suite ? We do have a serious problem ! * testsuite/test_random.pro, testsuite/test_wait.pro: typos: STOP forgot in "test_random"; wait is unaccurate on Suse :( 2012-10-02 m_schellens * src/CFMTLexer.cpp, src/CFMTLexer.hpp, src/CFMTTokenTypes.hpp, src/CFMTTokenTypes.txt, src/FMTIn.cpp, src/FMTIn.hpp, src/FMTInTokenTypes.hpp, src/FMTInTokenTypes.txt, src/FMTLexer.cpp, src/FMTLexer.hpp, src/FMTParser.cpp, src/FMTParser.hpp, src/FMTTokenTypes.hpp, src/FMTTokenTypes.txt, src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/format.out.g: Fixed : format code; Bug ID: 3572473 * src/basic_fun.cpp, src/envt.cpp, src/envt.hpp, src/typedefs.hpp: Fixed SCOPE_VARFETCH; Bug tracker ID: 3573558 * src/basegdl.hpp: include xdr.h for windows, rpc.h otherwise * src/read.cpp: fixed READ; bug tracker ID: 3573790 2012-10-02 alaingdl * src/basegdl.hpp: reverting change in "basegdl.hpp" (bug 3573468) for #include (we cannot compile on OSX with #include ) * src/gsl_fun.cpp: two problems in RANDOM: checking when amplitude for Binonial is below 1; removing regression introduced mid-july when "seed" is not set outside. * testsuite/test_random.pro: improvment in "test_random.pro": being less sensitive for small amp. in Binomial; introducing new basic tests to check very basic regressions ... * testsuite/test_wait.pro: relaxing tol. error for TEST_WAIT 2012-10-01 alaingdl * testsuite/test_scope_varfetch.pro: following bug report 3573558: extended test cases for SCOPE_VARFETCH * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_ptrarr.pro: initial import of "test_ptrarr.pro", related to bug report 3573202 2012-10-01 m_schellens * src/arrayindexlistnoassoct.hpp: Fixed salar array indexing (return scalar if all indices are scalar); bug tracker ID: 3573202 2012-09-28 alaingdl * src/gtdhelper.cpp, src/gtdhelper.hpp: initial import of 2 missing files for compilation under MSwin. * CMakeModules/FindPCRE.cmake, CMakeModules/FindXdr.cmake: initial import of 2 missing CMake-related files for compilation under MSwin: FindPCRE.cmake FindXdr.cmake 2012-09-20 alaingdl * testsuite/test_fft_dim.pro: deeper test cases for DIM keyword in FFT * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_systime.pro, testsuite/test_wait.pro: 3 new tests in automatic "make check". * testsuite/test_call_function.pro, testsuite/test_call_procedure.pro: following idea in bug report 3569697, improved tests (on keyword values too) for CALL_FUNCTION and CALL_PROCEDURE 2012-09-19 m_schellens * testsuite/test_call_function.pro, testsuite/test_call_procedure.pro, configure: sync * src/GDLInterpreter.cpp, src/gdlc.i.g: New GDL_... type codes for ANTLR files * src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLLexer.cpp, src/GDLTokenTypes.hpp, src/GDLTreeParserTokenTypes.hpp, src/envt.cpp, src/extrat.cpp, src/extrat.hpp: Fixed keyword handling for CALL_FUNCTION and CALL_PROCEDURE (when calling user defined subroutines) * src/extrat.cpp: Fixed behaviour of _EXTRA (bug tracker ID: 3568388) 2012-09-18 alaingdl * src/basic_op.cpp: better accuracy in Modulo with Double * src/file.cpp, src/file.hpp, src/libinit.cpp: recovering FILE_SEARCH for non MSwin OS * src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: recovering SPAWN capability under non-MSwin OS 2012-09-18 m_schellens * src/math_fun_gm.cpp, src/math_fun_jmg.cpp, src/math_fun_ng.cpp, src/nullgdl.cpp, src/ofmt.cpp, src/plotting.cpp, src/plotting_contour.cpp, src/plotting_map_proj.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp, src/plotting_windows.cpp, src/read.cpp, src/semshm.cpp, src/sigfpehandler.cpp, src/sigfpehandler.hpp, src/str.cpp, CMakeLists.txt, src/CMakeLists.txt, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun_cl.cpp, src/basic_pro.cpp, src/basic_pro.hpp, src/basic_pro_jmg.cpp, src/basic_pro_jmg.hpp, src/color.cpp, src/convert2.cpp, src/datatypes.cpp, src/datatypes.hpp, src/default_io.cpp, src/deviceps.hpp, src/devicewin.hpp, src/devicez.hpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/dnode.cpp, src/file.cpp, src/file.hpp, src/gdl.cpp, src/gdlgstream.hpp, src/gdljournal.cpp, src/gdlpsstream.hpp, src/gdlwidget.hpp, src/gdlwinstream.hpp, src/graphics.cpp, src/grib.cpp, src/gsl_fun.cpp, src/includefirst.hpp, src/initsysvar.cpp, src/io.cpp, src/io.hpp, src/libinit.cpp, src/math_fun.cpp, src/math_fun_ac.cpp: applied patches 2 and 3 from tracker ID 3568748 (windows compatibility) * HACKING: remarks on exception save programming * src/math_fun_ng.cpp, src/prognode_lexpr.cpp, src/allix.cpp: sync 2012-09-18 alaingdl * testsuite/test_extra_keywords.pro: new file TEST_EXTRA_KEYWORD to test whether the _extra keywords are well managed. 2012-09-18 m_schellens * src/dll/two.cpp, src/arrayindexlistt.hpp, src/assocdata.cpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun_cl.cpp, src/basic_fun_jmg.cpp, src/basic_op.cpp, src/basic_op_new.cpp, src/basic_pro.cpp, src/basic_pro_jmg.cpp, src/convert2.cpp, src/datatypes.cpp, src/datatypesref.cpp, src/default_io.cpp, src/devicex.hpp, src/dstructdesc.cpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/envt.cpp, src/envt.hpp, src/extrat.cpp, src/extrat.hpp, src/fftw.cpp, src/gdlpython.cpp, src/gdlxstream.cpp, src/gsl_fun.cpp, src/gsl_matrix.cpp, src/hdf_fun.cpp, src/magick_cl.cpp, src/math_fun.cpp, src/math_fun_ac.cpp, src/math_fun_gm.cpp, src/math_fun_jmg.cpp, src/math_fun_ng.cpp, src/math_utl.cpp, src/math_utl.hpp, src/ncdf_att_cl.cpp, src/ncdf_cl.cpp, src/ncdf_dim_cl.cpp, src/ncdf_var_cl.cpp, src/nullgdl.cpp, src/ofmt.cpp, src/plotting.cpp, src/plotting_contour.cpp, src/plotting_convert_coord.cpp, src/plotting_map_proj.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp, src/plotting_surface.cpp, src/plotting_windows.cpp, src/plotting_xyouts.cpp, src/print.cpp, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/pythongdl.cpp, src/read.cpp, src/strassenmatrix.hpp, src/topython.cpp, src/typedefs.hpp, src/typetraits.cpp, src/widget.cpp, src/FMTIn.cpp, src/FMTInTokenTypes.hpp, src/FMTLexer.cpp, src/FMTOut.cpp, src/FMTOutTokenTypes.hpp, src/FMTParser.cpp, src/FMTTokenTypes.hpp, src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLLexer.cpp, src/GDLTokenTypes.hpp, src/GDLTreeParserTokenTypes.hpp, src/accessdesc.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistnoassoct.hpp: applied patch 1 from tracker ID: 3568748 (rename GDL types to GDL_...) 2012-09-18 alaingdl * testsuite/test_call_function.pro, testsuite/test_call_procedure.pro: adding more explicit messages when problems encoutered runnning TEST_CALL_FUNCTION and TEST_CALL_PROCEDURE * testsuite/test_call_procedure.pro: adding explicit messages when problems encoutered 2012-09-16 alaingdl * src/plotting.cpp: applying patch 3567803 by S. Hony for histogram plot. 2012-09-14 alaingdl * CMakeModules/FindNetCDF.cmake, CMakeModules/Findlibps.cmake, CMakeLists.txt: including patch 3538449 for CMake way (better way to find external libs. NetCDF and LibPS) * src/gdlwidget.cpp, src/gdlwidget.hpp, src/libinit_jmg.cpp, src/objects.cpp, src/widget.cpp, src/widget.hpp, NEWS: applying patch 3567344: new widgets WIDGET_LIST and CW_GROUP 2012-09-13 m_schellens * src/read.cpp: skip till end of line when reading multiple parameters with READF 2012-09-13 alaingdl * src/gsl_fun.cpp: fixing general case in FFT() when using GSL way only 2012-09-12 m_schellens * src/gsl_fun.cpp: fixed memeory leak in random_template 2012-09-12 alaingdl * testsuite/test_fft.pro, testsuite/test_fft_dim.pro: test cases for FFT, unfinished :( 2012-09-11 m_schellens * src/basegdl.hpp, src/basic_fun.cpp, src/envt.cpp, src/extrat.cpp, src/gsl_fun.cpp, src/nullgdl.cpp, src/nullgdl.hpp: fixed several memory leaks in fft_template (gsl fft version) 2012-09-09 alaingdl * testsuite/test_fft.pro, src/gsl_fun.cpp: FFT in the GSL way was not OK when input was in double * NEWS, src/gsl_fun.cpp: sorry, I put the wrong version for corrected FFT using GSL ... 2012-09-07 slayoo * src/convert2.cpp: fixing overzealous error-reporting in convert2.cpp version 1.30 - see bug no. 3565657 (thanks Gilles) 2012-09-07 alaingdl * src/gsl_fun.cpp: various changes for FFT(): should work for DIMENSION keyword and when FFTw is not used. More test cases especially when DIM is used are needed. * src/envt.cpp: EnvT::KeywordSet() (in "envt.cpp") must behave as KEYWORD_SET() in "basic_fun.cpp". 2012-09-07 gilles-duvert * testsuite/test_bug_3483402.pro: add test_bug_3483402.pro , closes the corresponding ticket. * testsuite/Makefile.am: added testsuite/test_bug_3483402.pro 2012-09-05 gilles-duvert * src/plotting.cpp: box aspect correct with /ISOTROPIC and /[X|Y]LOG * src/plotting_oplot.cpp: Should solve bug #3563928. 2012-09-04 gilles-duvert * src/plotting.cpp: Modified support for '/ISOTROPIC' in graphic commands to align boxes more in the IDL style. * src/libinit.cpp, src/plotting.cpp, src/plotting.hpp, src/plotting_contour.cpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_surface.cpp: Support for '/ISOTROPIC' in graphic commands. 2012-08-30 alaingdl * src/basic_fun.cpp, src/libinit.cpp: adding keyword /Double in function COMPLEX() 2012-08-18 slayoo * src/convert2.cpp, src/dnode.cpp, testsuite/Makefile.am, testsuite/test_bug_3559291.pro: fixing bug no. 3559291 (float('1.5D-1') != 0.15) 2012-08-17 alaingdl * configure.in: sorry for not updated the main "configure.in" including src/pro/envi/Makefile 2012-08-16 alaingdl * src/devicex.hpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/libinit.cpp, src/plotting_windows.cpp, NEWS: Initial import of keyword ICONIC in WSHOW. The SHOW param. is not efficient ? Help welcome to fix the sub-window value when iconifying. 2012-08-14 alaingdl * src/pro/read_bmp.pro, src/pro/read_gif.pro, src/pro/read_image.pro, src/pro/read_jpeg.pro, src/pro/read_pict.pro, src/pro/read_png.pro, src/pro/read_tiff.pro, src/pro/read_xwd.pro, src/pro/strmatch.pro, src/pro/strsplit.pro: Since now GDL enforces scalar type in FOR loop, we have to take care with STRLEN when the input is a one element array. All the READ_(images) procedures don't really checked whether we try to read back more than one and only one file * src/pro/Makefile.am, src/pro/Makefile.in: fixing details in MakefileS related to new Envi sub-dir. 2012-08-13 alaingdl * src/pro/image_statistics.pro: adding Labeled keyword to the IMAGE_STATISTICS procedure, thanks to Sixy6e 2012-08-12 alaingdl * NEWS, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/STATUS, src/pro/UrgentNeed.txt, src/pro/rot.pro: initial import of ROT, calling internal POLY_2D code * NEWS: few updates in NEWS 2012-08-11 alaingdl * src/pro/write_jpeg.pro, src/pro/write_png.pro: revisiting buggy WRITE_JPEG and WRITE_PNG: gray images can now be stored, but not via best pure Gray type; Order was activated for missing cases in WRITE_PNG (tested on Saturn.jpg for WRITE_JPEG and WRITE_PNG, color and Gray) 2012-08-02 gilles-duvert * src/pro/mean.pro: patched MEAN so it continues to work with non-arrays. 2012-08-02 m_schellens * src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/prognode.cpp, src/specializations.hpp, NEWS, README: Promotion of FOR loop index variable type 2012-07-25 m_schellens * src/basic_fun.cpp, src/prognodeexpr.cpp: Improved SCOPE_VARFETCH * src/basic_fun.cpp, src/basic_fun.hpp, src/basic_fun_jmg.cpp, src/basic_fun_jmg.hpp, src/datatypes.cpp, src/libinit.cpp, src/libinit_jmg.cpp, src/prognodeexpr.cpp: Fixed SCOPE_VARFETCH 2012-07-24 alaingdl * src/pro/interpol.pro: detail of test version in INTERPOL, sorry * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/interpol.pro: since "scope_varfetch.pro" was removed from src/pro/, we need to removed it in the Makefile.(am/in) 2012-07-24 slayoo * src/pro/scope_varfetch.pro: removing GDL-written version of scope_varfetch from the repository 2012-07-24 m_schellens * NEWS: Update NEWS * src/gdlc.tree.g, src/libinit_jmg.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/basic_fun_jmg.cpp, src/basic_fun_jmg.hpp, configure: Working trinary operator for undefined l-values. SCOPE_VARFETCH (only LEVEL keyword). 2012-07-23 m_schellens * src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp: trinary operator redefined, working for r-values only. L-value support to be done * src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/Makefile.in, src/datatypes.cpp, src/datatypesref.cpp, src/dcompiler.cpp, src/dcompiler.hpp, src/gdl.cpp, src/gdlc.tree.g, src/gsl_fun.cpp, src/gsl_matrix.cpp, src/libinit.cpp, src/math_fun.cpp, src/math_fun_jmg.cpp, src/prognodeexpr.cpp, HACKING, NEWS, README, configure.in: Proper error handling for GSL. Some minor corrections. 2012-07-22 m_schellens * src/nullgdl.cpp, src/nullgdl.hpp: add files for \!NULL 2012-07-21 m_schellens * src/CMakeLists.txt, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/Makefile.am, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_pro.cpp, src/basic_pro_jmg.cpp, src/datalistt.hpp, src/datatypes.cpp, src/default_io.cpp, src/dnode.cpp, src/dvar.cpp, src/envt.cpp, src/extrat.hpp, src/gdlc.g, src/gdlc.tree.g, src/gdlwidget.cpp, src/grib.cpp, src/gsl_fun.cpp, src/gsl_matrix.cpp, src/hdf_pro.cpp, src/initsysvar.cpp, src/libinit.cpp, src/ncdf_att_cl.cpp, src/ncdf_cl.cpp, src/ncdf_dim_cl.cpp, src/ncdf_var_cl.cpp, src/plotting_misc.cpp, src/prognode.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/pythongdl.cpp, src/typedefs.hpp, src/typetraits.cpp, src/widget.cpp: \!NULL sysvar (full support). Proper error handling for GSL functions (set up framework + partial implementation) 2012-07-18 m_schellens * src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp: Fixed array indexing with negative scalars (introduced in last commit) 2012-07-17 m_schellens * src/pythongdl.cpp: Fixed compile error when compiled as python module. * src/GDLTreeParser.cpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/basegdl.hpp, src/dcompiler.cpp, src/dimension.hpp, src/gdlc.tree.g, src/prognode.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: Fixed lvaue handling for parameters with trinary operator. Fixed return of scalar/single element array for array indexing. 2012-07-16 m_schellens * src/gdlc.i.g, src/GDLInterpreter.cpp, src/envt.cpp, src/envt.hpp, src/extrat.cpp, src/extrat.hpp: Fixed keyword parameters to CALL_FUNCTION and CALL_PROCEDURE 2012-07-14 alaingdl * testsuite/test_moment.pro: is this way, can work with GDL, new 8 and old IDL versions * src/gsl_fun.cpp: typo ... * src/gsl_fun.cpp, src/pro/moment.pro, testsuite/test_moment.pro: validity of Dimension keyword is now tested ASAP in MOMENT(); visual tests for this keyword; a cout less in FZ_ROOTS ... 2012-07-14 m_schellens * src/GDLInterpreter.cpp, src/arrayindex.hpp, src/gdlc.i.g: fixed bug with array indexing in lhs dot expressions 2012-07-13 alaingdl * NEWS: news in NEWS ! * src/pro/kurtosis.pro, src/pro/mean.pro, src/pro/moment.pro, src/pro/skewness.pro, src/pro/stddev.pro, src/pro/variance.pro: updating MEAN(), STDDEV(), VARIANCE(), SKEWNESS(), KURTOSIS() to have Dim= keyword since it is now available via the MOMENT() function. (Tests needed :( 2012-07-11 m_schellens * src/dinterpreter.cpp: Fixed proper handling of _retTree in stopped subroutines 2012-07-11 alaingdl * testsuite/test_strsplit.pro: adding 4 new test cases into TEST_STRSPLIT * src/pro/strsplit.pro: STRSPLIT(): a detail in a test ... * src/pro/strsplit.pro: in STRSPLIT(), we must return strarr even with single element except for '' ! 2012-07-10 m_schellens * src/arrayindexlistnoassoct.hpp, src/convert2.cpp, src/datatypes.cpp: fixed bug when copying byte to string array element, COPY_BYTE_AS_INT behaviour in Convert2 was changed 2012-07-05 alaingdl * src/gsl_fun.cpp, testsuite/test_fft_dim.pro: FFT( dim= ) should worked now. Test using TEST_FFT_DIM, improvment welcome ! * testsuite/test_fx_root.pro, src/gsl_fun.cpp: improvments in FX_ROOT(): when x_i is a root, short-cut; pure complex code in do-loop. Revisited TEST_FX_ROOT, comparison with NEWTON in simple cases. * testsuite/test_dicom.pro: limited extension of TEST_DICOM, cannot reproduce bug 3150207, but "new" bug when this test called with /version * src/gsl_fun.cpp: in FX_ROOT, when result is a real, return a real ... 2012-07-04 alaingdl * src/pro/file_lines.pro: correcting bugs 3175753 and 3189065 for FILE_LINES(); now FILE_LINES() can manage input files list; but still having pbs when files name prefixed or suffixed by white spaces ... (due to known hard bug 3439079 in WordExp() in "str.cpp") 2012-07-02 m_schellens * src/envt.cpp, src/envt.hpp, src/gsl_fun.cpp: Fixed keyword support for CALL_FUNCTION/PROCEDURE 2012-07-02 gilles-duvert * src/gdlwidget.cpp: compilation with gcc 4.4.3 (linux) was complaining about a possible confusion on this call: gdlwidget.cpp: In constructor 'GDLWidgetDropList::GDLWidgetDropList(WidgetIDT, BaseGDL*, BaseGDL*, DString, DLong, DLong)': gdlwidget.cpp:629: error: call of overloaded 'wxString(wxCStrData, wxMBConvStrictUTF8&)' is ambiguous /usr/local/include/wx-2.9/wx/string.h:1309: note: candidates are: wxString::wxString(const wchar_t*, const wxMBConv&) /usr/local/include/wx-2.9/wx/string.h:1296: note: wxString::wxString(const unsigned char*, const wxMBConv&) /usr/local/include/wx-2.9/wx/string.h:1283: note: wxString::wxString(const char*, const wxMBConv&) Solved by forcing type const wchar_t*, proceed with fingers crossed. 2012-06-29 alaingdl * testsuite/test_call_function.pro, testsuite/test_call_procedure.pro: adding keyword in call to CALL_FUNCTION and CALL_PROCEDURE. Both fail today :( 2012-06-28 alaingdl * src/math_fun_jmg.cpp: not clear if my pragma give better times in FINITE() ! * testsuite/test_finite.pro, src/math_fun_jmg.cpp: correcting bug into FINITE(, sign=) [various OS don't behave the same]. should be OK on INT related and FLOAT related types, not ready for complex. Extending "test_finite". 2012-06-28 m_schellens * src/pro/Makefile.in, src/pro/dicom/Makefile.in, testsuite/Makefile.in, doc/Makefile.in, src/CMakeLists.txt, src/Makefile.in, src/antlr/Makefile.in, src/basic_fun.cpp, src/basic_fun_jmg.cpp, src/fftw.cpp, Makefile.in, configure: Fixed direct function call via CALL_FUNCTION 2012-06-28 slayoo * src/plotting_surface.cpp: switching from plmesh to plstream::mesh in plotting_surface() 2012-06-28 alaingdl * NEWS: now FX_ROOT() in GDL, coded in c++ by B. Laurent. 2012-06-27 alaingdl * src/gsl_fun.cpp: quiet work inside FX_ROOT(). check on p0 (3 elmnts) not finished. * testsuite/test_fx_root.pro: test for FX_ROOT() : one new test on roots values * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3441031.pro, testsuite/test_call_function.pro, testsuite/test_call_procedure.pro, testsuite/test_execute.pro: 1/ adding 2 new tests : "test_call_procedure', "test_call_function" (now failing on intrinsic functions), 2/ extending "test_execute", moving "test_bug_3441031" inside "test_execute". 3/ adding "test_call_procedure', "test_call_function", "test_fx_root", "test_fz_roots" in Makefile 4/ removing "test_bug_3441031" from Makefile 2012-06-27 slayoo * src/plot3d_nr.cpp, src/Makefile.am, src/Makefile.in, src/plotting_surface.cpp: removing plot3d_nr.cpp (thanks to Joel for providing instructions) 2012-06-27 alaingdl * testsuite/test_fx_root.pro: initial import of TEST_FX_ROOT * src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit_ac.cpp: initial import of C++ version of FX_ROOT() 2012-06-20 alaingdl * NEWS, testsuite/Makefile.am, testsuite/Makefile.in: details (update NEWS !) * src/math_fun_jmg.cpp, src/libinit_jmg.cpp: adding SIGN Keyword in FINITE ... (M. Pinter) * src/plotting_oplot.cpp: correcting a bug detected in OPLOT via "test_healpix.pro" * testsuite/test_moment.pro: for old idl version, no DIM in MOMENT ... * testsuite/test_finite.pro, testsuite/test_moment.pro: initial import of TEST_FINITE, including new SIGN keyword tests. 2012-06-19 alaingdl * testsuite/test_moment.pro, testsuite/test_qromo.pro: fixing details in test cases QROMO and MOMENT. 2012-06-16 alaingdl * NEWS: details in what we changed * src/gsl_fun.cpp: correcting code ... isfinite instead lot of tests ... * src/pro/moment.pro, testsuite/test_moment.pro: revisited MOMENT (new keywords, esp. DIM !) * testsuite/test_qromo.pro: update test cases for QROMO (we should now cover all the cases) * src/gsl_fun.cpp: revised version of QROMO by M. Pinter. Should cover all the cases. Good managment of NaN/Inf ... * testsuite/test_fz_roots.pro: tests cases for FZ_ROOTS (preliminary version, errors accumulation not managed !) * src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit_ac.cpp, NEWS: initial import of FZ_ROOTS, but works only for input polynomials with real coefs. We used the same code in the GSL than the IMSL_ZEROPOLY code ... 2012-06-12 alaingdl * src/pro/tvscl.pro: we decided to overcome NaN problems in TVSCL. 2012-05-25 alaingdl * src/pro/read_png.pro: with a fake extra INTERNAL_READ_PNG, pro and func do work transparently. * src/pro/hist_equal.pro, src/libinit.cpp: adding quiet /COMPILE_FULL_FILE in RESOLVE_ROUTINE; typo corrected in HIST_EQUAL. 2012-05-22 alaingdl * src/pro/hist_equal.pro, testsuite/test_hist_equal.pro: initial import of HIST_EQUAL; associated test suite. 2012-05-16 alaingdl * src/pro/standardize.pro: fixing the sign pb in STANDARDIZE 2012-05-14 alaingdl * testsuite/test_standardize.pro, testsuite/test_zip.pro: details in tests ... * src/pro/hist_equal.pro: fake temporary file (sync. with SF to do) * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/STATUS: I forgot to update Makefile.am in src/pro with new files HIST_EQUAL and STANDARDIZE * testsuite/test_zip.pro: revised TEST_ZIP because "stat" options are various ... 2012-05-12 alaingdl * testsuite/Makefile.am, testsuite/Makefile.in: adding "test_standardize" in testsuite * testsuite/test_standardize.pro, src/pro/standardize.pro, NEWS: initial import of STANDARDIZE and related test file 2012-05-10 alaingdl * configure.in: Only in classic "configure" way, you can choice between ImageMagick (--with-Magick, default) or GraphicsMagick (--with-GraphicsMagick, off by default, if you used it, please desactivate IM via : --without-Magick). Both ways should give same results on PNG and JPEG. * src/magick_cl.cpp: QUERY_IMAGE should now be OK for ALL JPEG and PNG, please report problems, with link to images giving problems ! * configure.in: adding --with-GraphicsMagick=DIR as an alternative to ImageMagick. Tested on Ubuntu 10.04 with success. * testsuite/test_read_standard_images.pro, src/magick_cl.cpp: extended test suite for PNG and JPEG formats. Useful comments in magick wrapper for later work ... 2012-05-08 alaingdl * doc/www/_news.inc.php, src/pro/smooth.pro, testsuite/test_smooth.pro: SMOOTH: revised faster algo for 2D smooth; test_smooth.pro updated too. 2012-04-30 alaingdl * doc/www/_news.inc.php, doc/www/resources.php: correcting broken links to ADASS 2011 paper 2012-04-13 gilles-duvert * INSTALL: Reverted to version 1.21 by Slayoo + a small addendum on libtool problems that I encounter often... * testsuite/test_random.pro: more precise "verbose" mode. test fails randomly, which is normal with random numbers ;^)) * testsuite/test_congrid.pro: test fails on byte arrays, but this is due to the conversion from double to byte by gdl basics, not by interpolate. This shoudl be investigated separately. I've changed the byte arrays to double by default, keeping byte as an option 2012-04-13 alaingdl * src/interp_multid.h: adding a missing file for revised version of INTERPOLATE 2012-04-13 gilles-duvert * src/gsl_fun.cpp, src/libinit_jmg.cpp: I more or less rewrote INTERPOLATE to support all documented (and some undocumented) features. I added a gsl-like handling of multi-D interpolation (which could be ported easily to gsl), but gsl does not have the same parametric cubic convolution as we want, and does not know about missing values, hence the necessity to overload its basic methods and structures. I added the /NEAREST_NEIGHBOUR option in the list of INTERPOLATE options since it makes for a very simple CONGRID procedure, and could be possibly of use elsewhere. * src/pro/congrid.pro: supports all options now that interpolate has the /nearest_neighbour option. * src/basic_fun.cpp: small typo 2012-03-20 gilles-duvert * src/extrat.cpp: It looks to me that if a kw is in the "warnkey" list it should be considered as valid kw for the "_STRICT_EXTRA" kw passing mechanism. * src/libinit.cpp: added several keywords to the "warnKey" list of axis, surface and contour. These keywords are to be really supported at some point but it is possible to ignore thme and still have correct outputs, in particular with procedures like the coyotegraphics where *all* the possible keywords are used, even with default values. 2012-03-17 alaingdl * src/devicex.hpp: TVRD: beeing able to manage x0, y0, Nx, Ny parameters; no check made :( maybe mirroring effect pending 2012-03-15 alaingdl * src/devicex.hpp, src/pro/loadct.pro: better managment for color tables in LOADCT (good resultS around Coyote lib.) 2012-03-13 alaingdl * src/plotting_erase.cpp: ERASE: working version for Decompose == 0 or 1 * src/libinit.cpp, src/plotting_erase.cpp, NEWS: color keyword or parameter for ERASE (maybe not OK when not in /decomposed). Now default !p.background is also take into account. Preparing support for Coyote Lib. 2012-03-06 alaingdl * testsuite/test_image_statistics.pro: easy switch introducing fake error in this script. 2012-03-05 gilles-duvert * src/plotting.cpp, src/plotting.hpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp: Corrected regression introduced in previous version: while that version was correctly supporting the MIN_VALUE and MAX_VALUE keywords for PLOT and OPLOT when they were present, it was forcing these values even in the absence of the keywords, and even worse, for the PLOTS command. 2012-03-05 alaingdl * testsuite/test_interpol.pro, src/pro/interpol.pro: bug corrected in INTERPOL; better testsuite for this function. 2012-02-28 alaingdl * src/pro/findex.pro, src/pro/interpol.pro: INTERPOL.pro: temporary solution for bug 3495104. Not the final answer ... 2012-02-21 alaingdl * testsuite/test_bug_3441031.pro: no blocking version of the test. This test was generating a crash before mid-Nov. 2011. 2012-02-21 slayoo * testsuite/test_bug_3152892.pro: commiting a forgotten file 2012-02-20 slayoo * testsuite/test_bug_3488003.pro, testsuite/Makefile.am: adding test routine for bug no. 3488003 * doc/www/_news.inc.php: website update (Ubutnu package) 2012-02-20 m_schellens * src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp: fixed an indexing issue (bug ID 3488003) * src/Makefile.in, src/gdlwidget.cpp, src/math_fun_jmg.cpp, src/widget.cpp, testsuite/Makefile.in, configure: corrected EXECUTE like calls to fit new stack handling 2012-02-19 slayoo * CMakeLists.txt, configure.in: adding a warning about the planned move from Autotools to CMake to configure.in 2012-02-16 gilles-duvert * src/devicex.hpp: solves bug 3477639 * src/devicex.hpp: solves bug 3485528 and possibly 3434849. 2012-02-15 alaingdl * src/pro/write_image.pro: initial version of WRITE_IMAGE * src/pro/write_image.pro, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/read_image.pro, src/pro/read_png.pro: initial import of READ_IMAGE(). WRITE_IMAGE to be add later. 2012-02-13 alaingdl * testsuite/test_ludc_lusol.pro: in LUDC and LUSOL, we can now testing Float and Double. * src/gsl_matrix.cpp, src/libinit_ac.cpp: for DETERM, LUDL, LUSOL, extension to "any" input types (not only double). Details may not be fully fixed (exception catching, keywords ...) Help welcome. 2012-02-10 alaingdl * testsuite/test_congrid.pro: adding a self consistant test (which is not working now !) 2012-02-08 slayoo * CMakeLists.txt, configure.in: adding Fedora package name hints to CMakeLists.txt and configure.in 2012-02-07 alaingdl * src/pro/read_jpeg.pro: typo ... * src/pro/read_jpeg.pro, src/pro/read_png.pro: testing agreement of formats before efective reading * src/pro/read_jpeg.pro, src/pro/read_png.pro, src/magick_cl.cpp: improved reading of JPEG (gray + colors) and PNG files (1,2,3 & 4 channels) * src/plotting_misc.cpp: when TVLCT applyed, we have to upgrade the color table (check OK on X) 2012-02-06 alaingdl * testsuite/test_read_standard_images.pro: more reliable behavior * testsuite/test_tvlct.pro: direct switch into TrueColor mode * testsuite/test_read_standard_images.pro, testsuite/test_tvlct.pro: initial import of two tests : reading 2 JPEG and 4 PNG as basic cases; verifying TVLCT is working ... 2012-02-03 alaingdl * src/gsl_matrix.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_trisol.pro, NEWS: better version for TRISOL (any input types); TEST_TRISOL self-consistant. * testsuite/test_congrid.pro: in such a way, can be tested on both ways ... * src/devicex.hpp, src/plotting_windows.cpp: correcting Window, xpos= , ypos= (bug 3482821) 2012-02-02 alaingdl * src/gsl_matrix.cpp, src/gsl_matrix.hpp, src/libinit_ac.cpp: initial import of a working draft for TRISOL only for inputs in Double. To be extend to any types. * src/pro/read_png.pro: coorecting order when reading PNG. Tested on various files with success. 2012-01-30 gilles-duvert * src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp: Silently takes care of different sizes in X and Y dimensions for PLOT, PLOTS and OPLOT. test, e.g.: plot,findgen(1000),findgen(100)*5,/POL oplot,findgen(1000),findgen(10)*5,/POL,psym=4 2012-01-28 alaingdl * src/plotting.cpp: {X|Y}range keyword in type double should be managed ... * src/pro/read_jpeg.pro: correction in READ_JPEG when GrayScale, bug report 3471918 2012-01-27 alaingdl * src/pro/Makefile.am: in src/pro/Makefile.am, *.pro list must be alphabeticaly ordered 2012-01-27 gilles-duvert * src/plotting.cpp, src/plotting.hpp, src/plotting_axis.cpp: Better support of the Log options (and values in CRANGE). PLOTS can now plot outside box in DATA mode. Cursor give correct data values even in log plots. valmin, valmax are handled at plot level, not at box limits. passes all the graphic tests. Removed temporarily support for 'clip" , to be continued. axis: changes only to follow changes in a function call arguments. * src/plotting_contour.cpp, src/plotting_cursor.cpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp, src/plotting_surface.cpp, src/plotting_xyouts.cpp: Better support of the Log options (and values in CRANGE). PLOTS can now plot outside box in DATA mode. Cursor give correct data values even in log plots. valmin, valmax are handled at plot level, not at box limits. passes all the graphic tests. Removed temporarily support for 'clip" , to be continued. Polyfill and surface: changes only to follow changes in a function call arguments. 2012-01-26 gilles-duvert * src/gdlxstream.cpp: It seems to me that this small patch mimics better the *DL behaviour and its doc (?) * testsuite/test_plotting_ranges.pro: updated test to sync with new capability, CRANGE OK in /YLOG mode 2012-01-25 gilles-duvert * src/plotting.cpp: changed pow(x,10) in pow(10,x) 2012-01-25 alaingdl * src/plotting.cpp: hum, better way to have the !X.type info at the right places for get/set !{xyz}.crange * src/plotting.cpp: small change for !X.CRange (!Y.crange and !Z.crange too !) to manage Log. plots. 2012-01-24 gilles-duvert * INSTALL: Added a comment about how to update aclocal to local version of libtool if there is a problem. Tested on Mandriva Linux, your mileage may vary. 2012-01-24 alaingdl * doc/udg/README.txt: initial import of an HowTo to help compiling the documentation. * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/get_login_info.pro: initial import of GET_LOGIN_INFO * testsuite/test_congrid.pro: TEST_CONGRID now needs ImageMagick, we have to exist if not linked to. * testsuite/test_read_jpeg.pro: missing factor parameter when screen too small * testsuite/test_diag_matrix.pro: initial import of TEST_DIAG_MATRIX. This test is not really self-testing :( * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/diag_matrix.pro, src/pro/la_invert.pro: initial import of DIAG_MATRIX and LA_INVERT (both need by iCosmo) 2012-01-23 m_schellens * src/arrayindex.cpp: fixed assoc var with one index * src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/gsl_fun.cpp: fixed assoc var with one index (ArrayIndexListOneT) 2012-01-23 alaingdl * src/plotting_oplot.cpp: same typo in OPLOT * src/plotting_plot.cpp: correcting a typo in PLOT, simplest case broken (plot, indgen(10)) 2012-01-23 gilles-duvert * src/libinit.cpp, src/plotting.cpp, src/plotting.hpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_xyouts.cpp: Corrected bugs that prevented correct positioning of datapoints (lines, psyms...) with commands PLOTS, XYOUTS and OPLOT when PLOT was done with /[X|Y]LOG. Added support for NSUM=xxx and /POLAR options used in PLOT, OPLOT. Treatment for DATAMIN,DATAMAX and CLIP is not OK however. needs some more changes. Debugged the /NORMAL, /DEVICE and /CONTINUE option of PLOTS. Should be OK even for some (not all) cases when !P.MULTI is not 0. Added SIZE=xxx undocumented option as a replacement for CHARSIZE for the XYOUTS command (support for several legacy procedures). * testsuite/test_poly2d.pro: changed missing value to 128 to better show the influence of the "missing=xxx" keyword. Also, serves as test of my ability to commit patches... 2012-01-22 alaingdl * NEWS, src/gsl_fun.cpp, src/libinit_ac.cpp, testsuite/test_qromo.pro: small improvments in QROMO (but not finished at all) * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_qromb.pro, testsuite/test_qromo.pro: initial import of TEST_QROMB and TEST_QROMO. To be expanded ... 2012-01-21 alaingdl * src/gsl_fun.cpp: NEWTON mus accepted "singleton" too; temporary change in QROMO for ]a,b[ range (to be generalize ASAP) 2012-01-20 alaingdl * src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit_ac.cpp: QROMO: initial import of limited version only for range [a,+inf]; help welcome. * src/gsl_fun.cpp: QROMB: better managment of inputs (vectors, matrix); IDL doc. is wrong for that ([1],[8]) return [8], not [1] 2012-01-12 alaingdl * NEWS: update * src/libinit_ac.cpp: introducing QSIMP, using QROMB ... * src/gsl_fun.cpp: managing arrays in QROMB 2012-01-10 alaingdl * NEWS, src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit_ac.cpp: initial import for QROMB, not ready for arrays. 2012-01-07 m_schellens * src/arrayindex.hpp, src/arrayindex.cpp: Fixed bug ID 3464519 2012-01-05 alaingdl * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_random.pro: initial import of TEST_RANDOM, very basic tests to check consistancy of basic computations (gamma and binomial cases) * NEWS: details in NEWS ... * src/gsl_fun.cpp: in RANDOM(N/U): now, Binomial keyword works; serious rewriting; conflicting keywords detected. 2012-01-04 alaingdl * src/gsl_fun.cpp: in RANDOM(U/N), better managment of GAMMA values (exit if <= 0.; put to 1 if 0.0 < Gamma < 1.0) 2012-01-03 slayoo * src/deviceps.hpp: TV/PostScript: plplot compatibility fix * doc/udg/examples/obj_class_1/obj_class_1.out.txt, doc/udg/routines/appleman.pro.tex, doc/udg/examples/call_external_0/call_external_0.pro, doc/udg/examples/file_lines_0/file_lines_0.out.txt, doc/udg/examples/h5_get_libversion_0/h5_get_libversion_0.out.txt, doc/udg/diag/broken-references, doc/udg/chapters/credits.tex, doc/udg/gdl.tex, doc/udg/makeall: doc/udg update 2012-01-03 alaingdl * CMakeLists.txt: correcting typo in CMakeLists.txt 2012-01-02 slayoo * CMakeLists.txt, CMakeModules/FindNumpy.cmake: CMake: working version of PYTHONDIR and PYTHONVERSION support * doc/gdl.1: manpage updae * src/deviceps.hpp, src/dinterpreter.cpp, src/gdlgstream.hpp, src/libinit_jmg.cpp, src/pro/appleman.pro, src/typedefs.hpp: misc cleanups 2012-01-02 alaingdl * src/gdlgstream.hpp: correcting bug introduced by Sylwester to have X11 plots ... 2011-12-31 slayoo * config.h.cmake: fixing CMake support for PSlib 2011-12-30 alaingdl * src/math_fun_jmg.cpp: removing comment in POLY_2D * src/math_fun_jmg.cpp, src/math_fun_jmg.hpp: managing keyword Missing for POLY_2D [patch from G. Duvert] (see TEST_POLY2D_NEW in testsuite/test_poly2d.pro). When no missing value, case of <> [sic] is still pending ... * testsuite/test_get_kbrd.pro: hum, I forgot to manage "wait" keyword in third case ... * testsuite/test_get_kbrd.pro: initial import of TEST_GET_KBRD. 3 main cases are tested. * src/basic_fun.cpp: in GET_KBRD(), better managment of GET_KBRD(0) (see testsuite/test_get_kbrd.pro) [should be retest on OSX] * src/pro/identity.pro: in IDENTITY, bug corrected when N=1 * src/pro/appleman.pro: small changes, one in order to have return of the array without internal TV * testsuite/test_congrid.pro, testsuite/test_postscript.pro, testsuite/test_ps_decomposed.pro: various minor bugs corrections and few extensions (TEST_POSTSCRIPT_APPLEMAN ;-) 2011-12-29 slayoo * src/deviceps.hpp: PostScript: fixing a memory leak in TV 2011-12-28 slayoo * src/deviceps.hpp, src/devicez.hpp, src/graphics.cpp: TV: a draft of PostScript support (tracker items 3460150 and 3110007) * src/gdlgstream.hpp, src/gdlpsstream.hpp: gdlpsstream.hpp: correcting typo (ps-ttf -> psttf) * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3453775.pro: adding a test for bug no. 3453775 * doc/www/resources.php: doc/www: adding a link in the resources section 2011-12-27 slayoo * doc/www/images/Colourise.css, doc/www/_header.inc.php, doc/www/_news.inc.php: doc/www: website update 2011-12-21 alaingdl * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_congrid.pro: initial import of TEST_CONGRID. maybe not needed in "make check" as long as we don't have null test * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/bilinear.pro, src/pro/congrid.pro, NEWS: initial import of CONGRID and BILINEAR (both in GDL syntax, in src/pro), thanks to G. Duvert 2011-12-16 alaingdl * src/gsl_fun.cpp: a bug corrected in INTERPOLATE (patch by G. Duvert); we still do not have a good testsuite for INTERPOLATE. 2011-12-15 alaingdl * testsuite/test_poly2d.pro: revisiting TEST_POLY2D. more simple way to show few problems in POLY_2D 2011-12-14 m_schellens * src/basic_fun_jmg.cpp: Adapt ROUTINE_NAMES to new callstack layout 2011-12-13 alaingdl * src/CMakeLists.txt, src/gsl_matrix.hpp: adding new files (gsl_matrix.hpp and gsl_matrix.cpp) in CMakeLists.txt 2011-12-13 m_schellens * src/prognode.cpp, src/prognode.hpp: Fixed break with breakTarget == NULL. Bug ID 3454317 2011-12-09 alaingdl * NEWS, src/gsl_matrix.cpp, src/gsl_matrix.hpp, src/libinit_ac.cpp: initial import of DETERM(), only for type DOUBLE (help welcome) * src/gsl_matrix.cpp, NEWS: alignment bug in LUDC * testsuite/test_ludc_lusol.pro: details in TEST_LUDC_LUSOL * testsuite/Makefile.am, testsuite/test_ludc_lusol.pro: typo corrected in TEST_LUDC_LUSOL * src/Makefile.am, src/Makefile.in, src/gsl_matrix.cpp, src/gsl_matrix.hpp, src/libinit_ac.cpp: initial import of C++ LUDC and LUSOL (based on GDL). Work BUT only on DOUBLE ... Help needed. * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/ludc.pro: removing the fake LUDC, to be remplace by a draft of LUDC/LUSOL pair in C++ * testsuite/test_ludc_lusol.pro: initial import for TEST_LUDC_LUSOL tests (very preliminary). * src/plotting.cpp: patch by G. Duvert correcting in USERSYM behavior of !P.CHARSIZE, !P.SYMSIZE, /CHARSIZE= and /SYMSIZE= 2011-12-08 m_schellens * src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/specializations.hpp, src/typedefs.hpp: Fixed SHIFT(a,0). Bug ID 3453775 2011-12-07 m_schellens * src/envt.cpp: Fixed EnvBaseT::Caller() 2011-12-06 alaingdl * NEWS: upgrade of NEWS * src/gsl_fun.cpp, src/libinit_jmg.cpp: new keyword /nan added to HISTOGRAM. It is not fully finished/tested but working in basic cases. * testsuite/test_histo.pro: upgrade of TEST_HISTO for to be introduced new keyword /Nan 2011-12-05 m_schellens * src/basic_fun.cpp, src/prognodeexpr.cpp: fixed wrong delete in lib::execute function * src/gdlwidget.cpp: corrected callstack handling 2011-12-05 alaingdl * src/pro/Makefile.am, src/pro/Makefile.in: missing two new files (READ_GIF and WRITE_GIF) in Makefile* 2011-12-03 m_schellens * src/GDLInterpreter.hpp, src/basic_fun.cpp, src/envt.hpp, src/gdlc.i.g, src/print.cpp, src/prognodeexpr.cpp: EnvStackT now with EnvUDT instead EnvBaseT * src/basic_pro.cpp, src/envt.cpp, src/envt.hpp, src/gsl_fun.cpp, src/prognode.cpp, src/prognodeexpr.cpp, src/basic_fun.cpp: EnvT for library functions is no longer pushed onto the call stack. Fix for random_fun binominalKey 2011-11-30 alaingdl * src/gsl_fun.cpp: code like RANDOMN(seed,10, BINOMIAL=[3,.5]) is wrong ... (should return int-like values) * src/pro/read_gif.pro, src/pro/write_gif.pro: initial inclusion of READ_GIF and WRITE_GIF. Very limited functionalities but OK to read and write GIF derivated from testsuite/Saturn.jpg (256 colors) * src/pro/read_jpeg.pro: typo in READ_JPEG 2011-11-30 m_schellens * src/basic_fun.cpp, src/gdlc.i.g, src/str.cpp, src/str.hpp: Faster STRUPCASE and STRLOWCASE 2011-11-29 alaingdl * testsuite/test_str_functions.pro: testing also /reverse_offset in STRMID (test is not perfect) * src/libinit.cpp: reverting typo in "libinit.cpp" for keyword /rever in STRMID() 2011-11-28 alaingdl * src/plotting.cpp, testsuite/test_usersym.pro: correcting bug related to USERSYM: beeing able to manage 1 or 2 points only on plot 2011-11-25 m_schellens * src/gdlc.i.g, src/GDLInterpreter.cpp: sync 2011-11-25 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3441031.pro: adding test_bug_3441031.pro 2011-11-25 m_schellens * src/GDLInterpreter.cpp, src/prognodeexpr.cpp, src/arrayindexlistnoassoct.hpp, src/gdlc.i.g, src/libinit.cpp: Fixed bug ID 3441031 2011-11-24 m_schellens * src/basic_fun.cpp: insert some assert macros * src/math_fun.cpp: optimization for IMAGINARY and CONJ * src/basic_fun.cpp, src/basic_fun.hpp, src/envt.hpp, src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp: direct call for several functions * src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp: direct call EXP function 2011-11-22 alaingdl * src/pro/usersym.pro: since a working C++ code for USERSYM was added today, the fake "usersym.pro" can be removed ! * src/pro/Makefile.am, src/pro/Makefile.in: STRMATCH was added in CVS, USERSYM was moved as a C++ code. * src/initsysvar.cpp, src/initsysvar.hpp, src/libinit.cpp, src/plotting.cpp, src/plotting.hpp, src/plotting_oplot.cpp: initial import for USERSYM procedure, thanks to a contribution by Gilles Duvert 2011-11-22 slayoo * src/pro/strmatch.pro, testsuite/test_strmatch.pro: STRMATCH: yet another improvement * src/pro/strmatch.pro, testsuite/test_strmatch.pro: STRMATCH: improvement * src/pro/strmatch.pro, testsuite/Makefile.am, testsuite/test_strmatch.pro: STRMATCH: initial import 2011-11-20 m_schellens * src/str.cpp: removed escaping of space in WordExp function * src/devicex.hpp: fixed bug ID 3438651 2011-11-18 m_schellens * src/basic_fun.cpp, src/basic_fun.hpp, src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp: direct call API for more library functions * src/objects.cpp, src/str.cpp: changed WordExp: esc only non escaped blanks * src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dpro.cpp, src/dpro.hpp, src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp, src/prognodeexpr.cpp: faster ALOG ALOG10 N_ELEMENTS 2011-11-16 alaingdl * testsuite/test_mpfit.pro: managing multiple occurences in TEST_MPFIT 2011-11-16 slayoo * doc/www/faq.php: doc/www: a new faq item * src/gshhs.cpp: MAP_CONTINENTS: fixing argument number check * doc/www/resources.php: doc/www: resources.php: adding a link to Alain's ADASS XXI talk * doc/www/_news.inc.php: doc/www: news updates 2011-11-16 alaingdl * src/pro/Makefile.am, src/pro/Makefile.in: fixing files list in Makefile* * testsuite/test_file_copy.pro, testsuite/test_file_delete.pro: limited updates preparing next better tests ... * src/pro/usersym.pro: initial import of a fake USERSYM to avoid stopping codes just because we don't know how to write USERSYM * src/pro/read_ascii.pro, src/pro/read_jpeg.pro, src/pro/read_png.pro, src/pro/read_xwd.pro: better managment when we try to read a directory when a real file is expected. * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test-read_ascii.pro, testsuite/test_image_statistics.pro: initial import of TEST_IMAGE_STATISTICS; correction in TEST-READ_ASCII to be able to go to the end. 2011-11-15 m_schellens * src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/dpro.cpp, src/dpro.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.g, src/gdlc.tree.g, src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp, src/newprognode.cpp, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp: direct calls for lib functions 2011-11-15 slayoo * doc/www/_news.inc.php: www: typo fix 2011-11-15 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basic_fun.cpp, src/gdlc.g, src/gdlc.tree.g, src/newprognode.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: FCALL_N_ELEMENTSNode 2011-11-15 alaingdl * src/pro/image_statistics.pro: hum, we need to use /double ... * src/pro/image_statistics.pro: type conversion for 3 outputs of IMAGE_STATISTICS 2011-11-15 slayoo * doc/www/_news.inc.php: www: Macports port news (0.9.2) 2011-11-14 slayoo * doc/www/_news.inc.php: www: ArchLinux package news (0.9.2) 2011-11-14 alaingdl * src/pro/Makefile.am, src/pro/Makefile.in: adding IMAGE_STATISTICS.pro in Makefile files 2011-11-14 m_schellens * src/getas.cpp: com,ented out typename * src/getas.cpp: add file * src/arrayindex.cpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/convert2.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.hpp, src/newprognode.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: faster 2D indexing 2011-11-13 slayoo * doc/www/_news.inc.php: www: Fedora 0.9.2 package info * doc/www/_news.inc.php: www: FreeBSD 0.9.2 port info 2011-11-12 slayoo * doc/www/_header.inc.php, doc/www/faq.php: www: adding FAQ page 2011-11-10 alaingdl * src/pro/image_statistics.pro: initial import of IAMGE_STATISTICS procedure, coded in GDL syntax. 4 keywords are missing 2011-11-09 alaingdl * testsuite/test_read_jpeg.pro: adding a call to READ_JPEG, /Gray * src/pro/read_jpeg.pro: /Gray should work now in READ_JPEG (tested on testsuite/Saturn.jpg) * src/magick_cl.cpp: MAGICK_QUANTIZE don't need 2 mandatory arg.; small code factoring; order changed for lisibility 2011-11-09 slayoo * doc/www/_news.inc.php: www: news about 0.9.2 release and ADASS XXI 2011-11-09 m_schellens * CMakeLists.txt, configure, configure.in: GDL 0.9.2 CVS GDL 0.9.2: 2011-11-08 m_schellens * configure, configure.in, src/typedefs.hpp, ChangeLog, NEWS, src/str.cpp: release 2011-11-08 alaingdl * NEWS: details in NEWS * src/initsysvar.cpp: in !version, OS must be in lower case for Linux and Darwin ... 2011-11-07 m_schellens * src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/arrayindex.cpp, src/arrayindexlistnoassoct.hpp, src/envt.cpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/newprognode.cpp, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp: optimized parameter passing * src/prognodeexpr.cpp: fix bug 3300626 * src/arrayindex.hpp, src/arrayindexlistt.hpp: sync * src/CMakeLists.txt, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/Makefile.am, src/Makefile.in, src/arrayindex.cpp, src/arrayindexlistnoassoct.hpp, src/arrayindexlistt.hpp, src/basic_pro.cpp, src/dnode.cpp, src/dnode.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp: add file 2011-11-06 m_schellens * src/basic_fun.cpp: Fixed STREGEX * src/arrayindex.hpp, src/envt.cpp: re-fix bug 3300626 2011-11-06 alaingdl * CMakeLists.txt: version 0.9.2 in CMake way ;-) * src/devicex.hpp: correcting bug 3433502 in TV 2011-11-05 m_schellens * src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/envt.cpp, src/envt.hpp, src/prognode.cpp, src/typedefs.hpp: bug fixes * src/GDLInterpreter.cpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/datalistt.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp: removal of ArrayIndexT::Index() 2011-11-04 m_schellens * src/GDLInterpreter.cpp, src/GDLTreeParser.cpp, src/dnode.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.hpp: implemented check for number of arguments to subroutines (TEST_DERIV bug) 2011-11-03 m_schellens * src/basic_op.cpp, src/basic_op_new.cpp, src/sigfpehandler.cpp: fixed error handling at division by 0 2011-11-03 slayoo * doc/www/resources.php: www: adding a link to Mark Pipers website to resources.php * doc/www/_header.inc.php: ITT -> Exelis in website header 2011-11-03 m_schellens * src/arrayindex.hpp, src/arrayindexlistt.hpp, src/datatypes.cpp, src/prognode_lexpr.cpp: optimization for Index with single element 2011-11-02 alaingdl * src/pro/idl_validname.pro: we subsitute to the current limited version of IDL_VALIDNAME() a version provided by Hon Xu * testsuite/test_idl_validname.pro: before running TEST_IDL_VALIDNAME, we need to be sure STREGEX is working. * testsuite/Makefile.am, testsuite/Makefile.in: adding two files (test_idl_validname.pro and test_stregex.pro) in Makefile.am in order to be run ... * testsuite/test_idl_validname.pro: one more case ($) in "test_idl_validname.pro" 2011-11-02 m_schellens * src/basic_op.cpp, src/basic_op_new.cpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/prognodeexpr.cpp: optimization for scalar division and modulo * src/prognode.cpp, src/prognodeexpr.cpp, src/GDLInterpreter.cpp, src/gdlc.i.g, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.hpp: cleanup * ltmain.sh, src/GDLInterpreter.cpp, src/GDLTreeParser.cpp, src/gdlc.i.g, src/gdlc.tree.g, src/prognodeexpr.cpp, src/prognodeexpr.hpp: fix make build system 2011-11-01 m_schellens * doc/Makefile.in, src/Makefile.in, src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in, testsuite/Makefile.in, Makefile.in, aclocal.m4, configure: fix make build system * src/gdlc.i.g, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/GDLInterpreter.cpp: fixed bug around lib_function_call * src/GDLInterpreter.cpp, src/gdlc.i.g, src/newprognode.cpp, src/prognode.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: sync 2011-10-31 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp: new Eval functions replacing calls in GDLInterpreter * src/CMakeLists.txt, src/GDLInterpreter.cpp, src/Makefile.am, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: Eval for DOTNode 2011-10-31 slayoo * src/magick_cl.cpp: Magick: adding a FIXME-throw in readindexes() * src/deviceps.hpp: PostScript: handling case when getlogin() returns a null pointer (apparently it happens!) * src/deviceps.hpp, NEWS, README: PostScript: making advantage of the change in plspage() introduced in plplot 5.9.9 2011-10-31 m_schellens * src/prognode.hpp, src/prognode_lexpr.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/gdlc.i.g, src/newprognode.cpp: replacing parts of gdlc.i.g 2011-10-29 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, src/prognode.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: Removed _retTree setting in Eval functions 2011-10-29 slayoo * src/deviceps.hpp: fixing device,/close behaviour when no plot was created before * src/deviceps.hpp, testsuite/test_ps_decomposed.pro: fixing bug 3428043 (PSlib was changing locale of GDL) 2011-10-29 m_schellens * testsuite/Makefile.am, testsuite/test_ce.pro: undo testsuite changes * testsuite/Makefile.am, testsuite/test_ce.pro, src/GDLInterpreter.cpp, src/gdlc.i.g, src/newprognode.cpp, src/prognode.cpp, src/prognode.hpp: More LEval/Eval functions * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/gdlc.i.g: Interpreter improvements 2011-10-28 alaingdl * CMakeLists.txt, testsuite/test_healpix.pro: option -muldefs no more needed in CMake; update for HealPix tests when PNG not available * testsuite/test_stregex.pro: initial import of TEST_STREGEX, not finished. 2011-10-28 m_schellens * src/basic_fun.cpp: Fixed STREGEX with /EXTRACT * src/GDLLexer.cpp, src/GDLLexer.hpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/arrayindexlistt.hpp, src/datalistt.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: custom new/delete for Env[UD]T 2011-10-26 m_schellens * src/allix.cpp, src/allix.hpp, src/arrayindex.cpp, src/arrayindexlistt.hpp: introduced ArrayIndexListMultiAllIndexedT * src/allix.cpp, src/allix.hpp, src/arrayindexlistt.hpp, src/prognodeexpr.cpp, config.h.in, configure: Faster sequential indexing 2011-10-25 m_schellens * src/pro/Makefile.in, src/pro/dicom/Makefile.in, testsuite/Makefile.in, doc/Makefile.in, src/Makefile.in, src/antlr/Makefile.in, Makefile.in, aclocal.m4: fix linking * src/arrayindex.hpp, src/envt.hpp, src/typedefs.hpp: inline specialized GDLArray functions 2011-10-25 alaingdl * CMakeLists.txt: typo netDCF / netCDF * testsuite/test_ps_decomposed.pro: now, if bad locale when calling "test_ps_decomposed.pro", problem. 2011-10-24 m_schellens * src/prognode.hpp: inline 2011-10-23 m_schellens * src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in, testsuite/Makefile.in, doc/Makefile.in, src/Makefile.in, src/allix.cpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/envt.hpp, src/typedefs.hpp, Makefile.in, aclocal.m4, configure: Improved indexing. Fixed bug tracker ID 3426399 (\!sysvar.tag crash) 2011-10-20 m_schellens * src/basic_op.cpp: Fixed: OrOpInvS called OrOp (instead of OrOpS) 2011-10-20 alaingdl * src/math_fun_ac.cpp: correcting small bug in X/Y lengths checks for "spl_init_fun(x,y, ...)" 2011-10-20 m_schellens * src/gsl_fun.cpp, src/typedefs.hpp: Fixing bug in BaseGDL* zeropoly(EnvT*) (causing failure in test_zeropoly.pro) 2011-10-19 m_schellens * src/GDLInterpreter.cpp, src/accessdesc.hpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/datatypes.cpp, src/gdlc.i.g, src/specializations.hpp: fixed handling of temporary array indices * src/allix.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/dimension.hpp, src/dvar.hpp: non-copy dim stride 2011-10-18 alaingdl * testsuite/test_healpix.pro: initial import of test for the HealPix Library. Thanks to E. Hivon. * NEWS: news in NEWS 2011-10-18 m_schellens * src/allix.hpp, src/arrayindex.cpp, src/arrayindexlistt.hpp, src/allix.cpp: 2D index optimization * src/arrayindex.cpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/datalistt.hpp, src/datatypes.cpp, src/datatypes.hpp, src/envt.cpp, src/prognode.cpp: sync 2011-10-17 m_schellens * src/allix.hpp, src/basic_op_new.cpp: sync * src/convert2.cpp: one element optimization for Convert2 2011-10-17 alaingdl * src/CMakeLists.txt: adding two new files for CMake 2011-10-17 m_schellens * src/Makefile.am, src/Makefile.in, src/allix.cpp, src/arrayindexlistt.hpp: fast indexing with only one variable dimension (e. g. a[1,*]) * src/allix.cpp, src/arrayindex.cpp: sync * src/allix.cpp: add file * src/Makefile.am, src/Makefile.in, src/allix.hpp, src/arrayindex.cpp, src/arrayindexlistt.hpp, src/dimension.hpp: indexing 2011-10-14 m_schellens * src/datatypes.cpp: sync * src/prognodeexpr.cpp: All OpNew functions utilized * src/datatypes.cpp, src/prognodeexpr.cpp: OpNew functions utilized. Faster TRANSPOSE 2D 2011-10-13 m_schellens * src/datatypes.cpp: Fast SHIFT for all dimensions and types * src/datatypes.cpp: fast SHIFT 3D and 4D (STRING only 1D and 2D) * src/datatypes.cpp, src/dstructgdl.cpp, src/typedefs.hpp: Fast SHIFT for 1D and 2D cases * src/datatypes.cpp, src/typedefs.hpp: GDLArray buffer cache 2011-10-12 alaingdl * doc/gdl.1: upgrade of man page, in concordance to new options in main "gdl". * src/gdl.cpp: short and long (-h, --help) ways to call options, we always forgot the good way to call them. No effect on options known by IDL. * src/basic_fun.cpp: improvments in STREGEX, but not finished :( (no test in testsuite; STRMATCH still missing) 2011-10-12 m_schellens * src/basegdl.cpp, src/basegdl.hpp, src/basic_op.cpp, src/basic_op_new.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.hpp, src/prognodeexpr.cpp, src/sigfpehandler.cpp, src/specializations.hpp: 37 new operator functions (not utilized yet) * src/basic_op_new.cpp, src/dimension.hpp, src/prognodeexpr.cpp, src/basegdl.hpp: added file for RetNew operators 2011-10-11 alaingdl * CMakeLists.txt: 1/ now, we mandatory need the "-z muldefs" flag at linking in CMake way. See altenative in CMakeList.txt. 2/ typo PSLIBS --> PSLIB 2011-10-11 m_schellens * src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_op.cpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dimension.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/math_fun_ng.cpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/typedefs.hpp: For Eval(): AddNew, AddSNew and friends. GDLArray optimization * src/allix.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun_jmg.cpp, src/datalistt.hpp, src/datatypes.cpp, src/dimension.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/gsl_fun.cpp, src/math_fun_jmg.cpp: stride storage for dimension 2011-10-10 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/basegdl.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g: Customized container for FoorLoopInfoT * src/GDLInterpreter.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basegdl.hpp, src/datalistt.hpp, src/datatypes.cpp, src/datatypesref.cpp, src/envt.cpp, src/envt.hpp, src/typedefs.hpp: New ExprListT definition 2011-10-08 m_schellens * src/Makefile.am, src/Makefile.in, src/accessdesc.hpp, src/allix.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basegdl.cpp, src/basegdl.hpp, src/convert2.cpp, src/datatypes.cpp, src/datatypes.hpp, src/datatypesref.cpp: Sequential indexing. Fixed Convert2(STRING). 2011-10-07 m_schellens * src/arrayindex.hpp, src/basic_op.cpp, src/arrayindex.cpp: optimizations for scalar handling (especially with OpenMP) * src/accessdesc.hpp, src/allix.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/dimension.hpp: indexing optimizations * src/allix.hpp: add allix.hpp 2011-10-06 m_schellens * src/accessdesc.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/datatypesref.cpp, src/dimension.hpp, src/dstructgdl.cpp, src/gdlc.tree.g, src/typedefs.hpp, src/GDLTreeParser.hpp, src/Makefile.am, src/Makefile.in: more efficient indexing (5x faster for indexed case) 2011-10-04 m_schellens * src/Makefile.am, src/Makefile.in, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/datatypes.cpp, src/typedefs.hpp: indexing speed up 2011-09-29 m_schellens * src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basic_fun.cpp, src/basic_op.cpp, src/basic_pro.cpp, src/convert2.cpp, src/datatypes.cpp, src/fftw.cpp, src/math_fun.cpp, src/strassenmatrix.hpp, src/typedefs.hpp: tracing for OMP calls 2011-09-25 alaingdl * src/math_fun.cpp: bad name for a counter in LAGUERE(), no time to fix 2011-09-25 m_schellens * src/basic_op.cpp, src/convert2.cpp, src/datatypes.cpp, src/magick_cl.cpp, src/math_fun.cpp, src/arrayindex.hpp, src/basic_fun.cpp: Removed usage of OpenMP for all simple copy operations 2011-09-24 m_schellens * src/arrayindex.hpp, src/arrayindexlistt.hpp, src/typedefs.hpp: changed defintion of AllIxT 2011-09-23 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLLexer.hpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/gdlc.g, src/prognode.hpp: Lookup table for NonCopyNode() * src/magick_cl.cpp: fix g++ segfault with -O2 and OpenMP 2011-09-20 m_schellens * src/GDLInterpreter.hpp, src/GDLLexer.hpp, src/GDLParser.cpp, src/GDLParser.hpp, src/basic_pro.cpp, src/dinterpreter.cpp, src/dstructdesc.cpp, src/gdlc.g, src/gdlc.i.g, src/pro/Makefile.in, src/pythongdl.cpp, testsuite/Makefile.in, config.h.in: Made GDL distinguish PRO and FUNCTION when searching for a subroutine (bug tracker ID 3394134) 2011-09-19 slayoo * CMakeLists.txt, INSTALL, NEWS, README, configure.in, doc/udg/chapters/math-func.tex, doc/udg/makeall, doc/www/requirements.php, src/gdlpsstream.cpp, src/gdlpsstream.hpp, src/graphics.hpp, src/initsysvar.cpp, src/initsysvar.hpp, src/libinit.cpp, src/plotting.cpp, src/plotting_contour.cpp, src/plotting_device.cpp, CMakeModules/Findlibps.cmake, src/deviceps.hpp: non-Encapsulated PostScript support along with XSIZE, YSIZE, XOFFSET, YOFFSET, PORTRAIT, LANDSCAPE and SCALE_FACTOR settings support for PostScript output (requires pslib - http://pslib.sourceforge.net/) 2011-09-01 slayoo * testsuite/test_sem.pro: test_sem.pro: uncommenting debug printfs 2011-08-31 m_schellens * src/basic_fun_jmg.cpp: fixed MAKE_ARRAY(/STRING, /INDEX,...) * src/Makefile.in, src/dstructdesc.hpp, src/pro/dicom/Makefile.in, config.h.in: allignment for structs 2011-08-31 alaingdl * testsuite/test_spher_harm.pro: fixing doc.; this code required at least IDL 8.0 on IDL side 2011-08-31 slayoo * testsuite/test_spher_harm.pro: test_spher_harm: making it work with IDL too (epsilon 1e-7 -> 1e-6) 2011-08-30 alaingdl * testsuite/test_spher_harm.pro: hum, stupid typo (duplicate begin ...) * testsuite/Makefile.in, testsuite/image_test.pro, testsuite/test_spher_harm.pro: fixing details in testsuite/ * src/pro/write_bmp.pro, src/pro/write_jpeg.pro, src/pro/write_pict.pro, src/pro/write_png.pro: some cleaning in the WRITE_* procedures, not finished. N_PARAMS() tests not done :( * src/pro/save.pro: details in SAVE * testsuite/image_test.pro: rewriting the "IMAGE_TEST" procedure to be usable, using the "Saturn.jpg" internal file. Some tests in initial version are missing (ToDo) * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_postscript.pro, testsuite/test_systime.pro: 1/ very preliminary test suite for the PostScript output (esp. XOFFSET and YOFFSET keywords are not working now) 2/ initial import of TEST_SYSTIME. The related bug was corrected in "gdl.cpp" by Sylwester. When an external library (e.g. ImageMagick) is compiled with "bad" locale, it may propagate inside GDL (one consequence: breaking SYSTIME(), another bad format in "printf"). 2011-08-29 slayoo * src/gdl.cpp: adding a note on why setlocale() has to be called after LibInit() * src/gdl.cpp: trying to fix MagickInit-locale conflict * doc/www/resources.php, doc/www/_news.inc.php: website update 2011-08-27 alaingdl * src/pro/write_jpeg.pro: in WRITE_JPEG, changing q*1U to UINT(q) (blocking bug); other "input checks" changes 2011-08-24 slayoo * doc/udg/chapters/cmdline.tex, doc/udg/chapters/credits.tex, doc/udg/chapters/debug.tex, doc/udg/chapters/dynload.tex, doc/udg/chapters/exec.tex, doc/udg/chapters/filesys.tex, doc/udg/chapters/image.tex, doc/udg/chapters/io-ascii.tex, doc/udg/chapters/io-bin.tex, doc/udg/chapters/io-fits.tex, doc/udg/chapters/io-grib.tex, doc/udg/chapters/io-hdf4.tex, doc/udg/chapters/io-hdf5.tex, doc/udg/chapters/io-idlsave.tex, doc/udg/chapters/io-img.tex, doc/udg/chapters/io-netcdf.tex, doc/udg/chapters/io.tex, doc/udg/chapters/math-basic.tex, doc/udg/chapters/math-bits.tex, doc/udg/chapters/math-constants.tex, doc/udg/chapters/math-fourier.tex, doc/udg/chapters/math-func.tex, doc/udg/chapters/math-geom.tex, doc/udg/chapters/math-interpol.tex, doc/udg/chapters/math-la.tex, doc/udg/chapters/math-multiroots.tex, doc/udg/chapters/math-ode.tex, doc/udg/chapters/math-poly.tex, doc/udg/chapters/math-rng.tex, doc/udg/chapters/math-stats.tex, doc/udg/chapters/math-wavelet.tex, doc/udg/chapters/net.tex, doc/udg/chapters/os.tex, doc/udg/chapters/plot-2d.tex, doc/udg/chapters/plot-3d.tex, doc/udg/chapters/plot-colours.tex, doc/udg/chapters/plot-fonts.tex, doc/udg/chapters/plot-map.tex, doc/udg/chapters/plot-misc.tex, doc/udg/chapters/plot-raster.tex, doc/udg/chapters/plot-term.tex, doc/udg/chapters/plot-windows.tex, doc/udg/chapters/python-in-gdl.tex, doc/udg/chapters/python-module.tex, doc/udg/chapters/strings.tex, doc/udg/chapters/syntax-arguments.tex, doc/udg/chapters/syntax-array.tex, doc/udg/chapters/syntax-errhandle.tex, doc/udg/chapters/syntax-flowcon.tex, doc/udg/chapters/syntax-heap.tex, doc/udg/chapters/syntax-help.tex, doc/udg/chapters/syntax-infnans.tex, doc/udg/chapters/syntax-oop.tex, doc/udg/chapters/syntax-ops.tex, doc/udg/chapters/syntax-stru.tex, doc/udg/chapters/syntax-sysvars.tex, doc/udg/chapters/syntax-types.tex, doc/udg/chapters/syntax-udsub.tex, doc/udg/chapters/syntax.tex, doc/udg/chapters/time.tex, doc/udg/chapters/widgets.tex, doc/udg/diag/broken-references, doc/udg/examples/get_login_info_0/get_login_info_0.out.txt, doc/udg/examples/showfont_4/gdl.ps, doc/udg/examples/showfont_7/gdl.ps, doc/udg/gdl.tex: doc/udg update * doc/www/resources.php: doc/www: updating resources.php with links to three other papers mentioning use of GDL 2011-08-22 opoplawski * src/deviceps.hpp, src/devicesvg.hpp, src/devicewin.hpp, src/devicex.hpp, src/devicez.hpp: Make setopt usage conditional on HAVE_OLDPLPLOT * src/deviceps.hpp, src/devicesvg.hpp, src/devicewin.hpp, src/devicex.hpp, src/devicez.hpp: SetOpt() was removed in plplot 5.9.8, use setopt() instead * src/gdlgstream.cpp: Use std::string() in gdlgstream.cpp to avoid ambiguity 2011-08-22 slayoo * src/libinit.cpp: DEVICE: ignoring XOFFSET and YOFFSET 2011-08-20 alaingdl * src/pro/idl_validname.pro: improvment of IDL_VALIDNAME, but not finished * testsuite/test_idl_validname.pro: initial import of test for IDL_VALIDNAME (not finished) * src/initsysvar.cpp: initial import of a EPOCH field in the !GDL structure * src/basic_fun.cpp: in STRCMP(), 2 bugs corrected when 2 arrays of string are provided. 2011-08-19 alaingdl * testsuite/test_file_which.pro, src/pro/file_which.pro: fixing last "/" in FILE_WHICH(), improving the related test file * testsuite/test_bug_3286031.pro, testsuite/test_bug_3376577.pro, testsuite/test_strsplit.pro: cleanup in 3 files in testsuite/ * CMakeModules/FindFFTW.cmake, CMakeModules/FindGSL.cmake, CMakeModules/FindGrib.cmake, CMakeModules/FindHDF.cmake, CMakeModules/FindLibproj4.cmake, CMakeModules/FindNetCDF.cmake, CMakeModules/FindNumpy.cmake, CMakeModules/FindPlplot.cmake, CMakeModules/FindReadline.cmake, CMakeModules/FindUdunits.cmake, CMakeLists.txt: update GDL version in CMakeLists.txt; copyright and GNU GPL licences added to all CMake files in dir. CMakeModules/ * quick_start_GDL.sh: in the script for quick start, preserving GDL_PATH/GDL_STARTUP 2011-08-18 slayoo * src/magick_cl.cpp: MAGICK_READ: fixing alpha channel read 2011-08-18 alaingdl * src/pro/idl_validname.pro: adding two fake keywords in IDL_VALIDNAME (/CONVERT_ALL] [, /CONVERT_SPACES) in order to be able to run End-To-End test of HealPix test program from E. Hivon. * src/pro/read_jpeg.pro: hum, bad if/then/else correction * src/pro/read_png.pro: better inputs checks for READ_PNG * src/pro/query_bmp.pro, src/pro/query_dicom.pro, src/pro/query_gif.pro, src/pro/query_image.pro, src/pro/query_jpeg.pro, src/pro/query_pict.pro, src/pro/query_png.pro, src/pro/query_ppm.pro, src/pro/query_tiff.pro, src/pro/read_jpeg.pro: now, we check we have compiled with ImageMagick support for these pro/functs which are using this external lib. * src/magick_cl.cpp: in MAGICK_OPEN, when filename is non existant, it is better to exist ... 2011-08-17 alaingdl * testsuite/test_interpolate_missing.pro: initial import (at the right place) of this file for testsuite 2011-08-17 slayoo * NEWS: NEWS update * testsuite/Makefile.am, testsuite/Makefile.in, src/gsl_fun.cpp, src/libinit_jmg.cpp: INTERPOLATE: support for the MISSING keyword 2011-08-16 slayoo * src/libinit_cl.cpp, src/magick_cl.cpp: moving fix of bug 3376577 from magick_open info libinit (so magick_create and magick_ping also benefit from it) 2011-08-15 slayoo * src/pro/findex.pro, src/pro/interpol.pro: fixing 3104537 in interpo.pro (patch by boudgdl) * doc/www/resources.php: adding a link to the redbranch blog in the resources section of the website 2011-08-12 alaingdl * doc/www/_news.inc.php: bad formatting news column * doc/www/_news.inc.php, doc/www/index.php, doc/www/requirements.php: few news; typo; details for libs. * src/pro/strsplit.pro: various bugs solved in STRSPLIT * testsuite/test_strsplit.pro: correcting and improving testsuite for STRSPLIT 2011-08-11 slayoo * doc/www/requirements.php: updating TeXtoIDL website address 2011-08-10 slayoo * doc/www/_footer.inc.php, doc/www/credits.php: Website update (incl. change of license for the website content so it is compatible with Wikipedia) * src/magick_cl.cpp: update to the fix of bug 3376577 2011-08-09 slayoo * src/gdlgstream.hpp: commiting changes suggested at https://sourceforge.net/projects/gnudatalanguage/forums/forum/338692/topic/4562373 * src/magick_cl.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3376577.pro: fixing bug 3376577 in Magick++ routines (fix by Lorenzo/lclem) * NEWS: NEWS update * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/idl_validname.pro: IDL_VALIDNAME: initial import (by Rene Preusker) 2011-07-11 slayoo * NEWS: NEWS update 2011-07-08 slayoo * doc/www/_header.inc.php: doc/www: new website 2011-07-08 alaingdl * doc/www/credits.php: itypo in Sylwester email 2011-07-08 slayoo * doc/www/_footer.inc.php, doc/www/_header.inc.php, doc/www/_news.inc.php, doc/www/contribute.html, doc/www/credits.html, doc/www/credits.php, doc/www/documentation.php, doc/www/download.html, doc/www/downloads.php, doc/www/feedback.html, doc/www/gdl.css, doc/www/home.html, doc/www/images/Colourise.css, doc/www/images/bg.jpg, doc/www/images/bullet.gif, doc/www/images/footer-top.jpg, doc/www/images/header-search.jpg, doc/www/index.html, doc/www/index.php, doc/www/menu.html, doc/www/require.html, doc/www/requirements.php, doc/www/resources.html, doc/www/resources.php, doc/www/screenshot.html, doc/www/screenshots.php, doc/www/screenshots/make_thumbnails, doc/www/screenshots/screenshot01_thumb.png, doc/www/screenshots/screenshot02_thumb.png, doc/www/screenshots/screenshot03_thumb.png, doc/www/screenshots/screenshot04_thumb.png, doc/www/screenshots/screenshot05_thumb.png, doc/www/screenshots/screenshot06_thumb.png, doc/www/screenshots/screenshot07_thumb.png, doc/www/screenshots/screenshot08_thumb.png, doc/www/screenshots/screenshot09_thumb.png, doc/www/screenshots/screenshot10_thumb.png, doc/www/screenshots/screenshot11_thumb.png, doc/www/screenshots/screenshot12_thumb.png, doc/www/screenshots/screenshot13_thumb.png, doc/www/support.html, doc/www/support.php, doc/www/tdl.html: doc/www: new website * src/gshhs.cpp: plotting: uploading missing files * src/plotting.hpp, src/plotting_axis.cpp, src/plotting_erase.cpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp, src/plotting_surface.cpp, src/plotting_xyouts.cpp: plotting: uploading missing changes 2011-07-07 slayoo * src/libinit.cpp, src/plotting_contour.cpp: CONTOUR: the C_COLORS keyword * AUTHORS, doc/udg/diag/broken-references, doc/udg/gdl.tex, doc/udg/chapters/credits.tex, doc/udg/chapters/semshm.tex: doc/udg update 2011-07-06 slayoo * src/basic_fun.cpp, src/libinit.cpp, testsuite/Makefile.am, testsuite/Makefile.in: fixing bug no. 3151760 2011-07-05 slayoo * src/deviceps.hpp: one compiler warning less * CMakeLists.txt: CMake: fix for supporting SPAWN, UNIT... * src/devicex.hpp: one compiler warning less 2011-07-04 slayoo * src/semshm.cpp: semshm.cpp: include fix * src/CMakeLists.txt: updating CMakeLists.txt - new files * src/io.hpp: io.hpp: fixing include issue 2011-07-03 slayoo * doc/udg/examples/showfont_3/gdl.ps, doc/udg/examples/showfont_4/gdl.ps, doc/udg/examples/showfont_7/gdl.ps, doc/udg/examples/surface_ax/gdl.ps, doc/udg/examples/surface_ax/surface_ax.out.txt, doc/udg/examples/surface_ax/surface_ax.pro, doc/udg/examples/surface_az/gdl.ps, doc/udg/examples/surface_az/surface_az.out.txt, doc/udg/examples/surface_az/surface_az.pro, doc/udg/routines/str-sep.fun.tex, doc/udg/routines/surface.pro.tex, doc/udg/diag/broken-references, doc/udg/examples/dist_0/gdl.ps, doc/udg/examples/file_lines_0/file_lines_0.out.txt, doc/udg/examples/routine_names_s_functions/routine_names_s_functions.out.txt: doc/udg update * src/basic_pro.cpp, src/plotting_contour.cpp, src/plotting_surface.cpp: SURFACE: using AutoIntvAC for xStart etc * testsuite/test_plotting_ranges.pro, src/plotting.cpp, src/plotting.hpp, src/plotting_axis.cpp, src/plotting_contour.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp: CONTOUR: logscale plots when explicitely specifying X/Y values (tracker item no. 3321973) 2011-07-02 slayoo * src/devicex.hpp, src/initsysvar.cpp, src/libinit.cpp, src/plotting.cpp, src/plotting.hpp, src/plotting_contour.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_surface.cpp, src/plotting_windows.cpp: SURCAFE: updating !Z.CRANGE; !P.T: initial values; default window size as a function of screen resolution (IDL behaviour); PLOTS: towards 3D support * src/semshm.cpp: semaphores: fixing on_exit behaviour (by Mateusz Turcza) 2011-07-01 slayoo * NEWS: NEWS update * testsuite/test_sem.pro: sanitizing test_sem.pro * src/basic_pro.cpp, testsuite/Makefile.am, testsuite/test_sem.pro, src/Makefile.am, src/Makefile.in, src/libinit.cpp, src/semshm.cpp, src/semshm.hpp: SEM_CREATE, SEM_LOCK, SEM_RELEASE, SEM_DELETE: initial import (by Mateusz Turcza) * src/hdf5_fun.cpp, src/hdf_fun.cpp, src/libinit_jmg.cpp, src/ncdf_cl.cpp: filename expansion in NCDF_OPEN, H5F_OPEN, HDF_OPEN & HDF_SD_START (tracker item no. 3164308) 2011-06-29 slayoo * src/basic_fun.cpp, src/envt.cpp, src/envt.hpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3313522.pro: fixing bug 3313522 2011-06-28 slayoo * testsuite/test_bug_3275334.pro: skipping test_bug_3275334.pro when X-server connection not available * src/gshhs.cpp: plotting routines: first step towards code clean-up * NEWS, configure.in, testsuite/Makefile.am, testsuite/test_spawn_unit.pro, src/basic_pro.cpp, src/io.cpp, src/io.hpp, src/libinit.cpp: SPAWN: support for the UNIT keyword (relies on GNU extensions to libstdc++, patch by Greg Huey) * src/ncdf_cl.cpp: NCDF_CONTROL: fixing error message (tracker item no. 3192226) * src/pro/dicom/Makefile.in, src/pro/dicom/gdlffdicom__assoc__define.pro, src/pro/dicom/gdlffdicom__assoc__test.pro, src/pro/dicom/gdlffdicom__define.pro, src/pro/dicom/gdlffdicom__test.pro, src/pro/dicom/gdlffdicom_copy_lun.pro, src/pro/dicom/gdlffdicom_date.pro, src/pro/dicom/gdlffdicom_time.pro, src/pro/dicom/gdlffdicom_trim.pro, COPYING: FSF address update in various files * src/Makefile.am, src/plotting.cpp, src/plotting.hpp, src/plotting_axis.cpp, src/plotting_contour.cpp, src/plotting_cursor.cpp, src/plotting_erase.cpp, src/plotting_misc.cpp, src/plotting_oplot.cpp, src/plotting_plot.cpp, src/plotting_plots.cpp, src/plotting_polyfill.cpp, src/plotting_surface.cpp, src/plotting_xyouts.cpp, src/Makefile.in: plotting routines: first step towards code clean-up 2011-06-18 slayoo * src/pro/UrgentNeed.txt: updating src/pro/UrgentNeed.txt 2011-06-15 alaingdl * src/pro/dialog_pickfile.pro: correcting a bug due to the fact that very long results from Zenity may be cut in several parts (1024 here) and need to be joined. 2011-06-07 alaingdl * testsuite/image_test.pro, testsuite/test-read_ascii.pro, testsuite/test-swap_endian.pro, testsuite/test-total.pro, testsuite/test_erfinv.pro, testsuite/test_plot_linestyle.pro, testsuite/test_suite.pro: 1/ all progs. are changed to Procedures to help compilation tests. 2/ we changed the way isGDL test is done * src/pro/dialog_pickfile.pro: Fixing parentheses around STRPOS 2011-06-06 alaingdl * src/pro/dialog_pickfile.pro: Using ":" as separator for zenity was not the best idea because some ESO FITS are using ":" inside the date format (in the file names); we move to "|" and also prepare a keyword: ZENITY_SEP to have more flexibility. 2011-05-13 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3152899.pro: adding test routine for bug no. 3152899 * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3300626.pro: adding test routine for bug no. 3300626 * testsuite/test_bug_3147733.pro, testsuite/Makefile.am, testsuite/Makefile.in: adding test routine for bug no. 3147733 * testsuite/test_bug_3290532.pro, testsuite/Makefile.am, testsuite/Makefile.in: adding test_bug_3290532.pro * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3189072.pro: adding test_bug_3189072.pro * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3286031.pro: adding test_bug_3286031.pro 2011-05-12 m_schellens * src/arrayindex.hpp, src/arrayindexlistt.hpp: Fixed ASSOC var indexing with a variable. Bug tracker ID 3300626 2011-05-11 m_schellens * src/GDLInterpreter.cpp, src/default_io.cpp, src/gdlc.i.g, src/print.cpp: Fixed bug tracker ID 3290532 and 3286031 2011-05-09 m_schellens * src/envt.hpp, src/fftw.cpp, src/gsl_fun.cpp, src/prognode.cpp: removed EnvT::StealLocalParUndefGlobal function * src/antlr/Makefile.in, src/pro/Makefile.in, testsuite/Makefile.in, src/Makefile.in, src/prognode.cpp: Fixed segfault in ASSIGN_REPLACENode::Run(). See Bug tracker ID 3152899 2011-05-06 slayoo * src/math_fun_gm.cpp, testsuite/Makefile.am, testsuite/test_bug_3298378.pro: fixing bug 3298378 (scalar return values from BETA, IGAMMA and EXPINT) 2011-05-04 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3296360.pro: adding test_bug_3296360.pro * src/typedefs.hpp: fixing bug no. 3296360 * testsuite/test_str_sep.pro: adding test_str_sep.pro 2011-05-02 slayoo * testsuite/Makefile.in, testsuite/Makefile.am, testsuite/test_bug_3275334.pro: adding test_bug_3275334.pro * src/devicex.hpp: TVRD: fixing bug no. 3275334 * testsuite/libtest_ce.cpp: fixing format labels in libtest_ce.cpp * src/gsl_fun.cpp: IMSL_CONSTANT: fixing wrong unit of Gravity * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_clip.pro, testsuite/test_fix.pro, testsuite/test_plotting_ranges.pro, testsuite/test_zzz.pro: testsuit update * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/README, testsuite/test_angles.pro, testsuite/test_bug_3189068.pro, testsuite/test_nans_in_sort_and_median.pro, testsuite/test_zzz.pro, testsuite/try: testsuite update 2011-05-01 slayoo * src/prognode.cpp: fixing memory leak bug no. 3282679 (and probably 3292468) 2011-04-27 slayoo * doc/udg/examples/call_external_0/CMakeLists.txt, doc/udg/examples/call_external_0/call_external_0.out.txt, doc/udg/examples/call_external_0/call_external_0.pro, doc/udg/examples/call_external_0/libexample.c: doc/udg: adding call_external example to the repository * doc/udg/examples/routine_names_0/library.pro, doc/udg/examples/routine_names_0/routine_names_0.out.txt, doc/udg/examples/routine_names_0/routine_names_0.pro, doc/udg/examples/routine_names_arg_name/procedure.pro, doc/udg/examples/routine_names_arg_name/routine_names_arg_name.out.txt, doc/udg/examples/routine_names_arg_name/routine_names_arg_name.pro, doc/udg/examples/routine_names_fetch/routine_names_fetch.out.txt, doc/udg/examples/routine_names_fetch/routine_names_fetch.pro, doc/udg/examples/routine_names_level/func.pro, doc/udg/examples/routine_names_level/routine_names_level.out.txt, doc/udg/examples/routine_names_level/routine_names_level.pro, doc/udg/examples/routine_names_s_functions/routine_names_s_functions.out.txt, doc/udg/examples/routine_names_s_functions/routine_names_s_functions.pro, doc/udg/examples/routine_names_s_procedures/routine_names_s_procedures.out.txt, doc/udg/examples/routine_names_s_procedures/routine_names_s_procedures.pro, doc/udg/examples/routine_names_store/routine_names_store.out.txt, doc/udg/examples/routine_names_store/routine_names_store.pro, doc/udg/examples/routine_names_variables/procedure.pro, doc/udg/examples/routine_names_variables/routine_names_variables.out.txt, doc/udg/examples/routine_names_variables/routine_names_variables.pro: doc/udg: adding routine_names examples to the repository * doc/udg/routines/acos.fun.tex, doc/udg/routines/asin.fun.tex, doc/udg/routines/atan.fun.tex, doc/udg/routines/ceil.fun.tex, doc/udg/routines/complex.fun.tex, doc/udg/routines/conj.fun.tex, doc/udg/routines/cos.fun.tex, doc/udg/routines/cosh.fun.tex, doc/udg/routines/file-mkdir.pro.tex, doc/udg/routines/floor.fun.tex, doc/udg/routines/hist-2d.fun.tex, doc/udg/routines/hist-nd.fun.tex, doc/udg/routines/idl-base64.fun.tex, doc/udg/routines/imaginary.fun.tex, doc/udg/routines/logical-and.fun.tex, doc/udg/routines/logical-or.fun.tex, doc/udg/routines/logical-true.fun.tex, doc/udg/routines/magick-writeindexes.pro.tex, doc/udg/routines/product.fun.tex, doc/udg/routines/ptrarr.fun.tex, doc/udg/routines/round.fun.tex, doc/udg/routines/routine-names.fun.tex, doc/udg/routines/sin.fun.tex, doc/udg/routines/sinh.fun.tex, doc/udg/routines/sqrt.fun.tex, doc/udg/routines/strcompress.fun.tex, doc/udg/routines/strlen.fun.tex, doc/udg/routines/strlowcase.fun.tex, doc/udg/routines/strmid.fun.tex, doc/udg/routines/strpos.fun.tex, doc/udg/routines/strput.pro.tex, doc/udg/routines/strtrim.fun.tex, doc/udg/routines/strupcase.fun.tex, doc/udg/routines/tan.fun.tex, doc/udg/routines/tanh.fun.tex, doc/udg/routines/total.fun.tex: doc/udg: new routine descriptions (mostly only the OpenMP info) * doc/udg/diag/broken-references, doc/udg/gdldoc.sty, doc/udg/makeall: doc/udg: doc scripts/styles/diag update * doc/udg/routines/abs.fun.tex: doc/udg updates: indexing routines which use OpenMP * doc/udg/routines/call-external.fun.tex: doc/udg updates: CALL_EXTERNAL docs * doc/udg/routines/exp.fun.tex, doc/udg/routines/fft.fun.tex, doc/udg/routines/where.fun.tex: doc/udg updates: indexing routines which use OpenMP 2011-04-26 slayoo * configure.in: quick'n'dirty solution to problems with compilation with GRIB when GRIB itself requires libpng (only autotools, not in CMake files) * src/libinit.cpp, src/plotting.hpp, src/plotting_map_proj.cpp: fixing compilation issue without Python 2011-04-18 slayoo * src/basic_fun_jmg.cpp, testsuite/Makefile.am, testsuite/test_bug_3288652.pro: ROUTINE_NAMES: fixing bug 3288652 2011-04-17 slayoo * src/libinit.cpp: PLOT: moving not supported keywords to a warn-list 2011-04-15 slayoo * doc/udg/diag/broken-references, doc/udg/examples/file_basename_2/file_basename_2.out.txt, doc/udg/examples/file_basename_2/file_basename_2.pro, doc/udg/examples/ncdf_exists_0/ncdf_exists_0.pro: doc/udg: various updates * doc/udg/examples/imsl_constant_0/imsl_constant_0.out.txt, doc/udg/examples/imsl_constant_0/imsl_constant_0.pro, doc/udg/routines/imsl-constant.fun.tex, doc/udg/routines/imsl-zeropoly.fun.tex: doc/udg: imcl_constant example 2011-04-14 slayoo * src/CMakeLists.txt, src/Makefile.am: src/Makefile.am: not installing the Python library to default system library location * CMakeModules/FindPythonLibs.cmake: removing FindPythonLibs.cmake 2011-04-12 slayoo * doc/udg/routines/dist.fun.tex, doc/udg/routines/imsl-zeropoly.fun.tex, doc/udg/examples/dist_0/dist_0.out.txt, doc/udg/examples/dist_0/dist_0.pro, doc/udg/examples/dist_0/gdl.ps, doc/udg/examples/imsl_zeropoly_0/gdl.ps, doc/udg/examples/imsl_zeropoly_0/imsl_zeropoly_0.out.txt, doc/udg/examples/imsl_zeropoly_0/imsl_zeropoly_0.pro: doc/udg: new examples (imsl_zeropoly, dist) * src/basic_pro.cpp: CATCH: warning the user just once that it is not implemented * src/file.cpp, src/file.hpp, src/libinit.cpp, src/pro/Makefile.in: FILE_MKDIR: initial import * src/pro/Makefile.am, src/pro/scope_varfetch.pro, testsuite/Makefile.am, testsuite/test_scope_varfetch.pro: SCOPE_VARFETCH: initial import * src/gdlgstream.cpp, src/plotting.cpp, src/plotting.hpp, src/plotting_xyouts.cpp: XYOUTS: handling P.MULTI vs. P.POSITION, support for ORIENTATION with logscales, making ORIENTATION work with arbitrary axis scales * INSTALL.CMake, README, testsuite/README: doc updates * doc/udg/examples/compile_opt_0/compile_opt_0.out.tex, doc/udg/examples/helloworld_2/gdl.ps, doc/udg/examples/loadct_0/gdl.ps, doc/udg/examples/python_fun_0/python_fun_0.out.txt, doc/udg/examples/showfont_11/gdl.ps, doc/udg/examples/showfont_11/showfont_11.out.txt, doc/udg/examples/showfont_11/showfont_11.pro, doc/udg/examples/showfont_12/gdl.ps, doc/udg/examples/showfont_12/showfont_12.out.txt, doc/udg/examples/showfont_12/showfont_12.pro, doc/udg/examples/showfont_13/gdl.ps, doc/udg/examples/showfont_13/showfont_13.out.txt, doc/udg/examples/showfont_13/showfont_13.pro, doc/udg/examples/showfont_14/gdl.ps, doc/udg/examples/showfont_14/showfont_14.out.txt, doc/udg/examples/showfont_14/showfont_14.pro, doc/udg/examples/showfont_15/gdl.ps, doc/udg/examples/showfont_15/showfont_15.out.txt, doc/udg/examples/showfont_15/showfont_15.pro, doc/udg/examples/showfont_16/gdl.ps, doc/udg/examples/showfont_16/showfont_16.out.txt, doc/udg/examples/showfont_16/showfont_16.pro, doc/udg/examples/showfont_17/gdl.ps, doc/udg/examples/showfont_17/showfont_17.out.txt, doc/udg/examples/showfont_17/showfont_17.pro, doc/udg/examples/showfont_18/gdl.ps, doc/udg/examples/showfont_18/showfont_18.out.txt, doc/udg/examples/showfont_18/showfont_18.pro, doc/udg/examples/showfont_20/gdl.ps, doc/udg/examples/showfont_20/showfont_20.out.txt, doc/udg/examples/showfont_20/showfont_20.pro, doc/udg/examples/showfont_3/gdl.ps, doc/udg/examples/showfont_3/showfont_3.out.txt, doc/udg/examples/showfont_3/showfont_3.pro, doc/udg/examples/showfont_4/gdl.ps, doc/udg/examples/showfont_4/showfont_4.out.txt, doc/udg/examples/showfont_4/showfont_4.pro, doc/udg/examples/showfont_5/gdl.ps, doc/udg/examples/showfont_5/showfont_5.out.txt, doc/udg/examples/showfont_5/showfont_5.pro, doc/udg/examples/showfont_6/gdl.ps, doc/udg/examples/showfont_6/showfont_6.out.txt, doc/udg/examples/showfont_6/showfont_6.pro, doc/udg/examples/showfont_7/gdl.ps, doc/udg/examples/showfont_7/showfont_7.out.txt, doc/udg/examples/showfont_7/showfont_7.pro, doc/udg/examples/showfont_8/gdl.ps, doc/udg/examples/showfont_8/showfont_8.out.txt, doc/udg/examples/showfont_8/showfont_8.pro, doc/udg/examples/showfont_9/gdl.ps, doc/udg/examples/showfont_9/showfont_9.out.txt, doc/udg/examples/showfont_9/showfont_9.pro, doc/udg/routines/showfont.pro.tex, doc/udg/chapters/syntax-udsub.tex, doc/udg/diag/broken-references, doc/udg/examples/calendar_0/gdl.ps, doc/udg/examples/colours_0/gdl.ps, doc/udg/examples/colours_1/gdl.ps, doc/udg/makeall, doc/udg/makeclean: doc/udg: various updates including SHOWFONT examples 2011-04-11 slayoo * src/gdlpython.cpp, src/gdlpython.hpp: reverting a previous (working) version of gdlpython.* * src/libinit.cpp, src/plotting_axis.cpp, src/plotting_contour.cpp: XYOUTS: handling XLOG and YLOG keywords * src/plotting.cpp: ignoring !P.MULTI when !POSITION set in PLOT and other plotting routines * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_misc.cpp: moving ERASE,SET_PLOT and TVLCT to a separate file (plotting_misc.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_map_proj.cpp: moving MAP_PROJ_FORWARD and MAP_PROJ_INVERSE to a separate file (plotting_map_proj.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_convert_coord.cpp: moving CONVERT_COORD to a separate file (plotting_convert_coord.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_windows.cpp: moving WINDOW,WSET,WSHOW,WDELETE,GET_SCREEN_SIZE to a separate file (plotting_windows.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_polyfill.cpp: moving POLYFILL to a separate file (plotting_polyfill.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_xyouts.cpp: moving XYOUTS to a separate file (plotting_xyouts.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting.hpp, src/plotting_plots.cpp: moving PLOTS to a separate file (plotting_plots.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_axis.cpp: moving AXIS to a separate file (plotting_axis.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_surface.cpp: moving SURFACE to a separate file (plotting_surface.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting.hpp, src/plotting_contour.cpp: moving CONTOUR to a separate file (plotting_contour.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_cursor.cpp: moving CURSOR to a separate file (plotting_cursor.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_device.cpp: moving DEVICE to a separate file (plotting_device.cpp) * src/CMakeLists.txt, src/Makefile.am, src/Makefile.in, src/plotting.cpp, src/plotting_oplot.cpp: moving OPLOT to a separate file (plotting_oplot.cpp) 2011-04-10 slayoo * src/Makefile.in, src/antlr/Makefile.in: Makefile.in update * src/antlr/CMakeLists.txt: cmake: updating antlr/CMakeLists.txt forgotten in one of previous commits * src/libinit.cpp: device: ignoring yet some more font-related keywords * src/pro/Makefile.in: src/pro/Makefile.in update * src/CMakeLists.txt, src/Makefile.am, src/plotting.cpp, src/plotting.hpp, src/plotting_plot.cpp: moving PLOT to a separate file (plotting_plot.cpp) * src/arrayindex.hpp, src/arrayindexlistt.hpp, src/datatypes.cpp, src/dinterpreter.hpp, src/envt.hpp, src/io.hpp: clang compatibility (mostly getting rid of compiler warnings) 2011-04-09 slayoo * doc/udg/examples/compile_opt_0/compile_opt_0.out.txt, doc/udg/examples/helloworld_2/gdl.ps, doc/udg/examples/loadct_0/gdl.ps, doc/udg/gdl.tex, doc/udg/chapters/syntax-compileopt.tex, doc/udg/chapters/testsuite.tex, doc/udg/examples/calendar_0/gdl.ps, doc/udg/examples/colours_0/gdl.ps, doc/udg/examples/colours_1/gdl.ps: doc/udg: various updates... * doc/udg/examples/openr_2/openr_2.pro, doc/udg/examples/query_bmp_0/query_bmp_0.pro, doc/udg/gdl.tex, doc/udg/gdldoc.sty, doc/udg/makeall, doc/udg/makeclean: doc/udg: various updates * doc/udg/examples/compile_opt_0/compile_opt_0.out.tex, doc/udg/examples/compile_opt_0/compile_opt_0.pro, doc/udg/examples/compile_opt_0/example.pro, doc/udg/examples/compile_opt_1/compile_opt_1.out.txt, doc/udg/examples/compile_opt_1/compile_opt_1.pro, doc/udg/examples/compile_opt_1/example.pro: doc/udg: adding two examples for compile_opt * src/basic_pro.cpp: CATCH: warning the user that cathing is not implemented yet * doc/udg/examples/calendar_0/calendar_0.out.txt, doc/udg/examples/colours_0/colours_0.out.txt, doc/udg/examples/colours_1/colours_1.out.txt, doc/udg/examples/correlate_0/correlate_0.out.txt, doc/udg/examples/correlate_1/correlate_1.out.txt, doc/udg/examples/correlate_2/correlate_2.out.txt, doc/udg/examples/execute_0/execute_0.out.txt, doc/udg/examples/exit_0/exit_0.out.txt, doc/udg/examples/exp_0/exp_0.out.txt, doc/udg/examples/fft_1/fft_1.out.txt, doc/udg/examples/file_basename_0/file_basename_0.out.txt, doc/udg/examples/file_basename_1/file_basename_1.out.txt, doc/udg/examples/file_basename_2/file_basename_2.out.txt, doc/udg/examples/file_lines_0/file_lines_0.out.txt, doc/udg/examples/foreach_0/foreach_0.out.txt, doc/udg/examples/foreach_1/foreach_1.out.txt, doc/udg/examples/get_login_info_0/get_login_info_0.out.txt, doc/udg/examples/goto_0/goto_0.out.txt, doc/udg/examples/h5_get_libversion_0/h5_get_libversion_0.out.txt, doc/udg/examples/helloworld_0/helloworld_0.out.txt, doc/udg/examples/helloworld_1/helloworld_1.out.txt, doc/udg/examples/helloworld_2/helloworld_2.out.txt, doc/udg/examples/if_0/if_0.out.txt, doc/udg/examples/if_1/if_1.out.txt, doc/udg/examples/if_2/if_2.out.txt, doc/udg/examples/imsl_binomialcoef_0/imsl_binomialcoef_0.out.txt, doc/udg/examples/imsl_binomialcoef_1/imsl_binomialcoef_1.out.txt, doc/udg/examples/ncdf_exists_0/ncdf_exists_0.out.txt, doc/udg/examples/obj_class_0/obj_class_0.out.txt, doc/udg/examples/obj_class_1/obj_class_1.out.txt, doc/udg/examples/openr_2/openr_2.out.txt, doc/udg/examples/parse_url_0/parse_url_0.out.txt, doc/udg/examples/pm_0/pm_0.out.txt, doc/udg/examples/ptr_free_0/ptr_free_0.out.txt, doc/udg/examples/python_fun_0/python_fun_0.out.txt, doc/udg/examples/query_bmp_0/query_bmp_0.out.txt, doc/udg/examples/scope_0/scope_0.out.txt, doc/udg/examples/string_4/string_4.out.txt, doc/udg/examples/strjoin_0/strjoin_0.out.txt, doc/udg/examples/strjoin_1/strjoin_1.out.txt, doc/udg/examples/abs_0/abs_0.out.txt, doc/udg/examples/strjoin_2/strjoin_2.out.txt: doc/udg: adding text output files for examples into the repository (they are all auto-generted during makeall run but keeping them in the repository can help to track regressions) * doc/udg/examples/obj_new_0/obj_new_0.out.txt, doc/udg/examples/obj_new_0/obj_new_0.pro, doc/udg/examples/obj_new_0/test__define.pro: doc/udg: adding an OBJ_NEW example * doc/udg/examples/loadct_0/listct.pro, doc/udg/examples/loadct_0/loadct_0.out.txt, doc/udg/examples/loadct_0/loadct_0.pro, doc/udg/examples/loadct_1/loadct_1.out.txt, doc/udg/examples/loadct_1/loadct_1.pro: doc/udg: adding LOADCT examples * doc/udg/routines/loadct.pro.tex, doc/udg/routines/obj-new.fun.tex: doc/udg: LOADCT docs with two examples (incl. graphical colour-table list) 2011-04-08 slayoo * testsuite/CMakeLists.txt: cmake/testsuite: cleanup in testsuite/CMakeLists.txt * src/gdlpython.cpp, src/gdlpython.hpp: fixing compilation issue with python * CMakeLists.txt, testsuite/CMakeLists.txt, testsuite/test_ce.pro: cmake: fxing issue with conflicting system-wide antlr headers, testsuite upgrades (list of test routines is now automatically extracted from Makefile.am, the libtest_ce.so and launchtest are now excluded from the all target but built during make-check) 2011-04-05 slayoo * src/libinit.cpp, src/libinit_jmg.cpp, src/widget.cpp, src/widget.hpp, src/gdlpython.cpp: TV: accepting the DEVICE keyword (corresponding to the current default behaviour); including WIDGET_* and PYTHON routines in the library routine list regardless of GDL configuration, and warning the user of missing features if necesarry 2011-04-03 alaingdl * testsuite/test_ce.pro: inline compilation for OSX now OK in "test_ce.pro" 2011-04-01 alaingdl * testsuite/test_ce.pro: improved version of TEST_CE.pro with the hope to have "dynamic" compilation of the lib. 2011-04-01 slayoo * src/pro/loadct.pro: LOADCT: not prompting for an argument when GET_NAMES is set (tracker item no. 3206594) 2011-03-30 slayoo * src/ofmt.hpp, testsuite/Makefile.am, testsuite/test_bug_3244840.pro: fixing bug 3244840 (bogus formatting of float zero after printing a string) * src/pro/Makefile.am, testsuite/Makefile.am, testsuite/test_file_which.pro, src/pro/file_which.pro: FILE_WHICH: initial import (patch by H Xu - xuhdev) * testsuite/test_correlate.pro, src/pro/correlate.pro: CORRELATE: support for the single-argument case * CMakeLists.txt, src/CMakeLists.txt: yet another cmake patch by Orion * CMakeLists.txt: cmake: numarray -> numpy transition (patch by Orion) * CMakeModules/FindNetCDF.cmake: cmake: patch by Orion to get netcdf working with centos 5 * CMakeModules/FindNumpy.cmake: cmake: as suggested by Orion, removing FindPythonLibs.cmake and adding FindNumpy.cmake 2011-03-29 m_schellens * configure.in: Put back CVS label for version string * configure.in, config.h.in, src/pro/Makefile.in, testsuite/Makefile.in: sync for release 2011-03-29 slayoo * NEWS: NEWS update * src/libinit.cpp: DEVICE: ignoring SET_FONT kw * src/libinit.cpp: WSHOW: ignoring ICONIC kw * src/pro/Makefile.am, testsuite/Makefile.am, src/pro/correlate.pro, testsuite/test_correlate.pro: CORRELATE: initial import (still without the single-argument option) 2011-03-28 slayoo * src/libinit.cpp, src/devicex.hpp, src/graphics.hpp, src/plotting.cpp: DEVICE: support for the WINDOW_STATE keyword * CMakeModules/FindNetCDF.cmake: cmake/netcdf fix (tracker item no. 3058299, patch by Orion Poplawski) * CMakeLists.txt: cmake/hdf4 fix (tracker item no. 3058299, patch by Orion Poplawski) * configure.in, src/gsl_fun.cpp: fixing bug no. 3233853 (Udunits-2 include path) * testsuite/Makefile.am, testsuite/test_bug_3199465.pro: adding test_bug_3199465.pro * testsuite/Makefile.am, testsuite/test_bug_3189068.pro: adding test_bug_3189068.pro * NEWS: updating NEWS (0.9.1) 2011-03-22 m_schellens * NEWS, src/gsl_fun.cpp: Included patch for udunits2. Bug tracker ID 3233853 * ChangeLog: Update ChangeLog GDL 0.9.1: 2011-03-18 slayoo * configure, gdl/configure: updating configure to reflect changes in configure.in (tracker item no. 3221630) 2011-03-17 slayoo * gdl/src/gdl.cpp, src/gdl.cpp: fixing behaviour with non-comma locale-defined decimal separators (tracker item no. 3164856) 2011-03-14 m_schellens * gdl/src/GDLInterpreter.cpp, gdl/src/GDLInterpreter.hpp, gdl/src/dinterpreter.cpp, gdl/src/envt.hpp, gdl/src/gdlc.i.g, gdl/src/image.cpp, gdl/src/prognode.cpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/dinterpreter.cpp, src/envt.hpp, src/gdlc.i.g, src/image.cpp, src/prognode.cpp: Fixed infinite recursion when struct are referenced but not defined in STRUCTNAME__DEFINE. Bug tracker ID 3189072 2011-03-13 m_schellens * gdl/src/envt.cpp, gdl/src/envt.hpp, src/envt.cpp, src/envt.hpp: Made HEAP_GC consider EnvBaseT::toDestroy list * gdl/src/envt.cpp, gdl/src/io.cpp, gdl/src/io.hpp, src/envt.cpp, src/io.cpp, src/io.hpp: Fixed bug tracker ID 3189068. PRINTF to closed stream segfault * gdl/src/envt.cpp, src/envt.cpp: Fixed bug tracker ID 3199465. HEAP_GC segfault. * gdl/src/GDLInterpreter.cpp, gdl/src/GDLInterpreter.hpp, gdl/src/envt.cpp, gdl/src/envt.hpp, gdl/src/gdlc.i.g, gdl/src/prognode.cpp, gdl/src/prognodeexpr.cpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/prognode.cpp, src/prognodeexpr.cpp: Fixed bug tracker ID 3152892. Temprorary pointers were garbage collected too early. 2011-03-12 m_schellens * gdl/src/envt.hpp, gdl/src/fftw.cpp, gdl/src/gsl_fun.cpp, src/envt.hpp, src/fftw.cpp, src/gsl_fun.cpp: Bug tracker ID: 3152899 - now input variable is explicitely undefined 2011-03-11 m_schellens * doc/Makefile.in, gdl/doc/Makefile.in, gdl/src/GDLInterpreter.hpp, gdl/src/Makefile.in, gdl/src/antlr/Makefile.in, gdl/src/envt.cpp, gdl/src/fftw.cpp, gdl/src/gdlc.i.g, gdl/src/gsl_fun.cpp, gdl/src/pro/Makefile.in, gdl/src/pro/dicom/Makefile.in, gdl/src/prognode.cpp, gdl/testsuite/Makefile.in, src/GDLInterpreter.hpp, src/Makefile.in, src/antlr/Makefile.in, src/envt.cpp, src/fftw.cpp, src/gdlc.i.g, src/gsl_fun.cpp, src/pro/Makefile.in, src/pro/dicom/Makefile.in, src/prognode.cpp, testsuite/Makefile.in, Makefile.in, aclocal.m4, gdl/Makefile.in, gdl/aclocal.m4: Fixed: FFT: segfault when overwriting a heap variable - Bug tracker ID: 3152899 2011-03-03 slayoo * gdl/doc/udg/examples/execute_0/execute_0.pro, gdl/doc/udg/makeall, gdl/doc/udg/routines/execute.fun.tex: doc/udg updates (EXECUTE + fixes in makeall) 2011-03-03 alaingdl * gdl/src/pro/dialog_message.pro, src/pro/dialog_message.pro: improved version of DIALOG_MESSAGE 2011-03-02 slayoo * gdl/testsuite/test_idl8.pro, testsuite/test_idl8.pro: adding test for a single-element negative array addressing to test_idl8.pro 2011-03-01 slayoo * configure.in, gdl/configure.in, gdl/src/pro/Makefile.am, src/pro/Makefile.am: Debian compatibility fixes in configure.in 2011-03-01 alaingdl * NEWS, gdl/NEWS: I just add ref. to new DIALOG_MESSAGE * gdl/src/pro/dialog_message.pro, src/pro/dialog_message.pro: initial import of DIALOG_MESSAGE, derived from DIALOG_PICKFILE, provided by P. Corona. You must have "zenity" to be able to use this functionality. 2011-02-28 slayoo * gdl/doc/udg/chapters/routine-list.tex, gdl/doc/udg/examples/helloworld_2/helloworld_2.pro, gdl/doc/udg/makeall, gdl/doc/udg/makeclean, gdl/doc/udg/routinelist.pro, gdl/doc/udg/routines/imsl-binomialcoef.fun.tex: doc/udg update: keywords are now listed in alphabetical order; some cosmetic changes and minor fixes 2011-02-27 slayoo * gdl/doc/udg/examples/if_0/if_0.pro, gdl/doc/udg/examples/if_1/if_1.pro, gdl/doc/udg/examples/if_2/if_2.pro, gdl/doc/udg/examples/if_2/replace_with_nans.pro, gdl/doc/udg/examples/imsl_binomialcoef_0/imsl_binomialcoef_0.pro, gdl/doc/udg/examples/imsl_binomialcoef_0/pascal.pro, gdl/doc/udg/examples/imsl_binomialcoef_1/imsl_binomialcoef_1.pro, gdl/doc/udg/examples/ncdf_exists_0/ncdf_exists_0.pro, gdl/doc/udg/examples/obj_class_0/alcoholic_drink__define.pro, gdl/doc/udg/examples/obj_class_0/beer__define.pro, gdl/doc/udg/examples/obj_class_0/drink__define.pro, gdl/doc/udg/examples/obj_class_0/obj_class_0.pro, gdl/doc/udg/examples/obj_class_1/obj_class_1.pro, gdl/doc/udg/examples/openr_2/openr_2.pro, gdl/doc/udg/examples/parse_url_0/parse_url_0.pro, gdl/doc/udg/examples/pm_0/pm_0.pro, gdl/doc/udg/examples/ptr_free_0/ptr_free_0.pro, gdl/doc/udg/examples/python_fun_0/python_fun_0.pro, gdl/doc/udg/examples/query_bmp_0/query_bmp_0.pro, gdl/doc/udg/examples/scope_0/scope_0.pro, gdl/doc/udg/examples/string_4/string_4.pro, gdl/doc/udg/examples/strjoin_0/strjoin_0.pro, gdl/doc/udg/examples/strjoin_1/strjoin_1.pro, gdl/doc/udg/examples/strjoin_2/strjoin_2.pro, gdl/doc/udg/routines/abs.fun.tex, gdl/doc/udg/routines/appleman.pro.tex, gdl/doc/udg/routines/array-indices.fun.tex, gdl/doc/udg/routines/calendar.pro.tex, gdl/doc/udg/routines/call-external.fun.tex, gdl/doc/udg/routines/correlate.fun.tex, gdl/doc/udg/routines/exit.pro.tex, gdl/doc/udg/routines/exp.fun.tex, gdl/doc/udg/routines/fft.fun.tex, gdl/doc/udg/routines/file-basename.fun.tex, gdl/doc/udg/routines/file-lines.fun.tex, gdl/doc/udg/routines/get-login-info.fun.tex, gdl/doc/udg/routines/h5-get-libversion.fun.tex, gdl/doc/udg/routines/imsl-binomialcoef.fun.tex, gdl/doc/udg/routines/linkimage.pro.tex, gdl/doc/udg/routines/ll-arc-distance.fun.tex, gdl/doc/udg/routines/map-continents.pro.tex, gdl/doc/udg/routines/ncdf-exists.fun.tex, gdl/doc/udg/routines/ncdf-varput.pro.tex, gdl/doc/udg/routines/newton.fun.tex, gdl/doc/udg/routines/obj-class.fun.tex, gdl/doc/udg/routines/openr.pro.tex, gdl/doc/udg/routines/parse-url.fun.tex, gdl/doc/udg/routines/pm.pro.tex, gdl/doc/udg/routines/ptr-free.pro.tex, gdl/doc/udg/routines/python.fun.tex, gdl/doc/udg/routines/query-bmp.fun.tex, gdl/doc/udg/routines/string.fun.tex, gdl/doc/udg/routines/strjoin.fun.tex, gdl/doc/udg/routines/where.fun.tex, gdl/doc/udg/chapters/about.tex, gdl/doc/udg/chapters/api.tex, gdl/doc/udg/chapters/coding.tex, gdl/doc/udg/chapters/compile-autotools.tex, gdl/doc/udg/chapters/compile-cmake.tex, gdl/doc/udg/chapters/compilers.tex, gdl/doc/udg/chapters/credits.tex, gdl/doc/udg/chapters/debug.tex, gdl/doc/udg/chapters/dochowto.tex, gdl/doc/udg/chapters/docs.tex, gdl/doc/udg/chapters/feedback.tex, gdl/doc/udg/chapters/internals.tex, gdl/doc/udg/chapters/io-ascii.tex, gdl/doc/udg/chapters/io-csv.tex, gdl/doc/udg/chapters/io-dicom.tex, gdl/doc/udg/chapters/io-grib.tex, gdl/doc/udg/chapters/io-hdf4.tex, gdl/doc/udg/chapters/io-idlsave.tex, gdl/doc/udg/chapters/io-netcdf.tex, gdl/doc/udg/chapters/io.tex, gdl/doc/udg/chapters/license.tex, gdl/doc/udg/chapters/math-basic.tex, gdl/doc/udg/chapters/math-fitting.tex, gdl/doc/udg/chapters/math-fourier.tex, gdl/doc/udg/chapters/math-multiroots.tex, gdl/doc/udg/chapters/math-ode.tex, gdl/doc/udg/chapters/math-rng.tex, gdl/doc/udg/chapters/openmp.tex, gdl/doc/udg/chapters/plot-2d.tex, gdl/doc/udg/chapters/plot-3d.tex, gdl/doc/udg/chapters/plot-colours.tex, gdl/doc/udg/chapters/plot-fonts.tex, gdl/doc/udg/chapters/plot-map.tex, gdl/doc/udg/chapters/python.tex, gdl/doc/udg/chapters/routine-list.tex, gdl/doc/udg/chapters/strings.tex, gdl/doc/udg/chapters/syntax-arguments.tex, gdl/doc/udg/chapters/syntax-array.tex, gdl/doc/udg/chapters/syntax-errhandle.tex, gdl/doc/udg/chapters/syntax-flowcon.tex, gdl/doc/udg/chapters/syntax-oop.tex, gdl/doc/udg/chapters/syntax-scope.tex, gdl/doc/udg/chapters/syntax-types.tex, gdl/doc/udg/chapters/syntax.tex, gdl/doc/udg/chapters/toc.tex, gdl/doc/udg/chapters/widgets.tex, gdl/doc/udg/examples/_post, gdl/doc/udg/examples/_pre, gdl/doc/udg/examples/abs_0/abs_0.pro, gdl/doc/udg/examples/calendar_0/calendar_0.pro, gdl/doc/udg/examples/colours_0/colours_0.pro, gdl/doc/udg/examples/colours_1/colours_1.pro, gdl/doc/udg/examples/correlate_0/correlate_0.pro, gdl/doc/udg/examples/correlate_1/correlate_1.pro, gdl/doc/udg/examples/correlate_2/correlate_2.pro, gdl/doc/udg/examples/exit_0/exit_0.pro, gdl/doc/udg/examples/exp_0/exp_0.pro, gdl/doc/udg/examples/fft_1/fft_1.pro, gdl/doc/udg/examples/fft_1/stddevfft.pro, gdl/doc/udg/examples/fft_1/stddevsum.pro, gdl/doc/udg/examples/file_basename_0/file_basename_0.pro, gdl/doc/udg/examples/file_basename_1/file_basename_1.pro, gdl/doc/udg/examples/file_basename_2/file_basename_2.pro, gdl/doc/udg/examples/file_lines_0/file_lines_0.pro, gdl/doc/udg/examples/foreach_0/foreach_0.pro, gdl/doc/udg/examples/foreach_1/example.pro, gdl/doc/udg/examples/foreach_1/foreach_1.pro, gdl/doc/udg/examples/get_login_info_0/get_login_info_0.pro, gdl/doc/udg/examples/goto_0/example.pro, gdl/doc/udg/examples/goto_0/goto_0.pro, gdl/doc/udg/examples/h5_get_libversion_0/h5_get_libversion_0.pro, gdl/doc/udg/examples/helloworld_0/helloworld_0.pro, gdl/doc/udg/examples/helloworld_1/helloworld_1.pro, gdl/doc/udg/examples/helloworld_2/helloworld_2.pro, gdl/doc/udg/gdl.bib, gdl/doc/udg/gdl.pro, gdl/doc/udg/gdl.tex, gdl/doc/udg/gdldoc.sty, gdl/doc/udg/makeall, gdl/doc/udg/makeclean, gdl/doc/udg/natbib.cfg, gdl/doc/udg/routinefiles.awk, gdl/doc/udg/routinelist.awk, gdl/doc/udg/routinelist.pro: doc/udg: initial import * gdl/src/gdlpsstream.cpp, gdl/src/gdlpsstream.hpp, src/gdlpsstream.cpp, src/gdlpsstream.hpp: PostScript: fixing bogus empty first page bug (tracker item no. 3029064) * configure.in, gdl/configure.in: configure.in: adding hints for Debian/Ubuntu users * gdl/testsuite/checks, testsuite/checks: fixing backslash escape warning * gdl/src/pro/identity.pro, gdl/src/pro/trace.pro, src/pro/identity.pro, src/pro/trace.pro, gdl/src/pro/checks, src/pro/checks: minor fixes in src/pro/ 2011-02-22 alaingdl * gdl/src/basic_fun_jmg.cpp, src/basic_fun_jmg.cpp: correcting a problem in FSTAT(nlun) when "nlun" is not open 2011-01-23 slayoo * doc/www/screenshot.html, doc/www/tdl.html, gdl/doc/www/screenshot.html, gdl/doc/www/tdl.html: fixing two typos in doc/www (reported by Reuben Thomas) 2011-01-19 slayoo * gdl/testsuite/CMakeLists.txt, testsuite/CMakeLists.txt: cmake: update of test-routine list 2011-01-17 slayoo * gdl/src/print.cpp, src/print.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_2876161.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_2876161.pro: PRINT: fixing behaviur with e.g. print,[1],1,[1] (tracker item no. 2876161) 2011-01-16 slayoo * gdl/src/plotting.cpp, src/plotting.cpp: XYOUTS: fixing vertical position of text (moving it half the charsize up) - tracker item no. 2982623 * gdl/src/libinit.cpp, gdl/src/plotting.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_2610174.pro, src/libinit.cpp, src/plotting.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_2610174.pro: XYOUTS: adding support for the WIDTH keyword (trakcer item no. 2610174) 2011-01-15 slayoo * gdl/src/basic_fun.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_2876150.pro, src/basic_fun.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_2876150.pro: fixing string(1,"()") (tracker item no. 2876150) * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_2974380.pro, gdl/testsuite/test_known_bugs.pro, testsuite/Makefile.am, testsuite/test_bug_2974380.pro, testsuite/test_known_bugs.pro: adding test_bug_2974380.pro * gdl/src/ncdf_att_cl.cpp, gdl/testsuite/test_bug_3100945.pro, src/ncdf_att_cl.cpp, testsuite/test_bug_3100945.pro: NCDF_ATTNAME: fixing argument handling (tracker item no. 3100945) 2011-01-14 slayoo * gdl/src/ncdf_cl.cpp, src/ncdf_cl.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3055720.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3055720.pro: fixing error message in ncdf_varput (tracker item no. 3055720) * gdl/src/ncdf_dim_cl.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3057511.pro, gdl/testsuite/test_bug_3057520.pro, gdl/testsuite/test_bug_3061072.pro, src/ncdf_dim_cl.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3057511.pro, testsuite/test_bug_3057520.pro, testsuite/test_bug_3061072.pro: NCDF_DIMDEF: requireing dimension size for limited dims (tracker item no. 3057511) * gdl/src/ncdf_var_cl.cpp, src/ncdf_var_cl.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3057520.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3057520.pro: NCDF_VARPUT: checking OFFSET kw. dimensions (tracker item no. 3057520) * gdl/src/ncdf_att_cl.cpp, gdl/src/ncdf_cl.cpp, gdl/src/ncdf_var_cl.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3061072.pro, src/ncdf_att_cl.cpp, src/ncdf_cl.cpp, src/ncdf_var_cl.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3061072.pro: proper behaviour with non-existent attributes and variables in NCDF_VARID and NCDF_ATTNAME (tracker item no. 3061072) 2011-01-05 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3151760.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3151760.pro: test_bug_3151760.pro 2011-01-03 slayoo * configure.in, gdl/configure.in: configure.in: trying to be backward compatible (color-tests) * gdl/src/topython.cpp, src/topython.cpp: copying data to Python instead passing a soon-invalid pointer (tracker item no. 3148396) 2011-01-02 slayoo * doc/www/contribute.html, doc/www/require.html, doc/www/screenshot.html, doc/www/screenshots/screenshot13.png, doc/www/screenshots/screenshot13_thumb.png, gdl/doc/www/contribute.html, gdl/doc/www/require.html, gdl/doc/www/screenshot.html, gdl/doc/www/screenshots/screenshot13.png, gdl/doc/www/screenshots/screenshot13_thumb.png: doc/www update (numarray -> Numpy) 2011-01-01 slayoo * README, gdl/README, gdl/src/FMTParser.cpp, gdl/src/format.g, gdl/src/ofmt.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3147181.pro, src/FMTParser.cpp, src/format.g, src/ofmt.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3147181.pro: fixing two formatting bugs: 3147181 & 2555865 2010-12-31 slayoo * gdl/doc/misc/gdlffdicom.html, gdl/doc/misc/gdlffdicom__assoc.html, gdl/src/pro/dicom/Makefile.am, gdl/src/pro/dicom/Makefile.in, gdl/src/pro/dicom/gdlffdicom__assoc__define.pro, gdl/src/pro/dicom/gdlffdicom__assoc__test.pro, gdl/src/pro/dicom/gdlffdicom__assoc_generateuid.pro, gdl/src/pro/dicom/gdlffdicom__define.pro, gdl/src/pro/dicom/gdlffdicom__dictionary.pro, gdl/src/pro/dicom/gdlffdicom__test.pro, gdl/src/pro/dicom/gdlffdicom_copy_lun.pro, gdl/src/pro/dicom/gdlffdicom_date.pro, gdl/src/pro/dicom/gdlffdicom_time.pro, gdl/src/pro/dicom/gdlffdicom_trim.pro, src/pro/dicom/Makefile.am, src/pro/dicom/Makefile.in, src/pro/dicom/gdlffdicom__assoc__define.pro, src/pro/dicom/gdlffdicom__assoc__test.pro, src/pro/dicom/gdlffdicom__assoc_generateuid.pro, src/pro/dicom/gdlffdicom__define.pro, src/pro/dicom/gdlffdicom__dictionary.pro, src/pro/dicom/gdlffdicom__test.pro, src/pro/dicom/gdlffdicom_copy_lun.pro, src/pro/dicom/gdlffdicom_date.pro, src/pro/dicom/gdlffdicom_time.pro, src/pro/dicom/gdlffdicom_trim.pro: updating gdlffdicom to v20100309 (http://idl.barnett.id.au/idl-code/dicom20100309.zip) * gdl/testsuite/test_python.pro, testsuite/test_python.pro: test_python.pro update * gdl/src/gdl.cpp, gdl/src/gdlpython.cpp, gdl/src/gdlpython.hpp, gdl/src/objects.cpp, gdl/src/pythongdl.cpp, gdl/src/topython.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/test_python.pro, gdl/testsuite/test_python_module_1.pro, src/gdl.cpp, src/gdlpython.cpp, src/gdlpython.hpp, src/objects.cpp, src/pythongdl.cpp, src/topython.cpp, testsuite/Makefile.am, testsuite/test_python.pro, testsuite/test_python_module_1.pro, PYTHON.txt, README, configure.in, gdl/PYTHON.txt, gdl/README, gdl/configure.in, gdl/src/datatypes.cpp, gdl/src/datatypesref.cpp, src/datatypes.cpp, src/datatypesref.cpp: numarray -> Numpy transition (based on the patch by Orion Poplawski, the Gentoo GDL patch by Sebastien Fabbro and a helpful post by Ondrej Certik: http://mail.scipy.org/pipermail/numpy-discussion/2009-October/045888.html) 2010-12-29 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3091610.pro, gdl/testsuite/test_common.pro, gdl/testsuite/test_python_module_1.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3091610.pro, testsuite/test_common.pro, testsuite/test_python_module_1.pro: testsuite update * configure.in, gdl/configure.in: fixing Python module compilation on OSX * gdl/src/basic_fun.cpp, src/basic_fun.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/test_python_module_0.pro, gdl/testsuite/test_python_module_1.pro, gdl/testsuite/test_python_module_2.pro, testsuite/Makefile.am, testsuite/test_python_module_0.pro, testsuite/test_python_module_1.pro, testsuite/test_python_module_2.pro: fixing Python module + test_python_module* test routines (tracker item no. 3127190) 2010-12-28 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_2846561.pro, testsuite/Makefile.am, testsuite/test_bug_2846561.pro: adding test_bug_2846561.pro * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_2555865.pro, testsuite/Makefile.am, testsuite/test_bug_2555865.pro: adding test_bug_2555865.pro * gdl/src/FMTLexer.cpp, gdl/src/FMTOut.cpp, gdl/src/FMTParser.cpp, gdl/src/FMTParser.hpp, gdl/src/assocdata.hpp, gdl/src/basegdl.cpp, gdl/src/basegdl.hpp, gdl/src/convert2.cpp, gdl/src/datatypes.hpp, gdl/src/default_io.cpp, gdl/src/dstructgdl.hpp, gdl/src/fmtnode.hpp, gdl/src/format.g, gdl/src/format.out.g, gdl/src/gdl.cpp, gdl/src/ofmt.cpp, gdl/src/ofmt.hpp, gdl/src/specializations.hpp, gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_1779553.pro, gdl/testsuite/test_bug_3147146.pro, gdl/testsuite/test_deriv.pro, gdl/testsuite/test_dicom.pro, gdl/testsuite/test_grib.pro, gdl/testsuite/test_minmax.pro, gdl/testsuite/test_rk4.pro, gdl/testsuite/try, src/FMTLexer.cpp, src/FMTOut.cpp, src/FMTParser.cpp, src/FMTParser.hpp, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/convert2.cpp, src/datatypes.hpp, src/default_io.cpp, src/dstructgdl.hpp, src/fmtnode.hpp, src/format.g, src/format.out.g, src/gdl.cpp, src/ofmt.cpp, src/ofmt.hpp, src/specializations.hpp, testsuite/Makefile.am, testsuite/test_bug_1779553.pro, testsuite/test_bug_3147146.pro, testsuite/test_deriv.pro, testsuite/test_dicom.pro, testsuite/test_grib.pro, testsuite/test_minmax.pro, testsuite/test_rk4.pro, testsuite/try: zero padding in format strings, testsuite update 2010-12-16 alaingdl * gdl/src/plotting.cpp, src/plotting.cpp: continuing improving XYOUTS, PLOTS and POLYFILL. May have effects on others graphic routines (CONTOUR, SURFACE , ...) * gdl/src/plotting.cpp, src/plotting.cpp: extra factor 1.1111 for Y axis; option /device in XYOUTS and PLOTS (correcting bug 3085586). Maybe new bug for /data introduced but easy to see and solve. 2010-12-06 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, testsuite/Makefile.am, testsuite/Makefile.in: adding test_common.pro to the make-check file list 2010-12-04 m_schellens * gdl/src/io.cpp, src/io.cpp: fixed problem with CentOS (missing != operator) 2010-12-03 m_schellens * gdl/src/dinterpreter.cpp, src/dinterpreter.cpp: prevent identical lines being added to history * gdl/src/envt.hpp, gdl/src/io.cpp, gdl/src/io.hpp, src/envt.hpp, src/io.cpp, src/io.hpp, gdl/src/basic_pro_jmg.cpp, gdl/src/envt.cpp, src/basic_pro_jmg.cpp, src/envt.cpp: LONG64 for POINT_LUN (bug tracker ID: 3126348) * gdl/src/dpro.cpp, gdl/src/prognode.hpp, src/dpro.cpp, src/prognode.hpp, gdl/testsuite/Makefile.in, testsuite/Makefile.in: handle empty subroutine tree (NULL) (bug tracker ID: 3079713) 2010-11-30 alaingdl * gdl/testsuite/test_common.pro, testsuite/test_common.pro: initial import of a fast way to check if "common" are OK at compilation level (.r step) 2010-11-29 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_3104326.pro, testsuite/Makefile.am, testsuite/test_bug_3104326.pro: test_bug_3104326.pro * gdl/testsuite/Makefile.am, gdl/testsuite/test_step.pro, testsuite/Makefile.am, testsuite/test_step.pro: test_step.pro * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_3104209.pro, testsuite/Makefile.am, testsuite/test_bug_3104209.pro: test_bug_3104209.pro * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_3085858.pro, testsuite/Makefile.am, testsuite/test_bug_3085858.pro: test_bug_3085858.pro * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_3091599.pro, testsuite/Makefile.am, testsuite/test_bug_3091599.pro: test_bug_3091599.pro 2010-11-28 m_schellens * gdl/src/GDLInterpreter.cpp, gdl/src/GDLInterpreter.hpp, gdl/src/dinterpreter.cpp, gdl/src/dinterpreter.hpp, gdl/src/gdlc.i.g, gdl/src/objects.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/gdlc.i.g, src/objects.hpp: .STEP command * gdl/src/dstructgdl.cpp, src/dstructgdl.cpp: STRUCT: Made single array index access return array[1] (bug tracker ID: 3091599) * gdl/src/arrayindex.hpp, gdl/src/basegdl.cpp, gdl/src/basegdl.hpp, gdl/src/datatypes.cpp, gdl/src/datatypes.hpp, gdl/src/datatypesref.cpp, src/arrayindex.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/datatypesref.cpp: Fixed negative index access * gdl/src/GDLInterpreter.cpp, gdl/src/GDLLexer.hpp, gdl/src/dinterpreter.cpp, gdl/src/gdlc.g, gdl/src/gdlc.i.g, gdl/src/prognode.cpp, src/GDLInterpreter.cpp, src/GDLLexer.hpp, src/dinterpreter.cpp, src/gdlc.g, src/gdlc.i.g, src/prognode.cpp: Fixed line number reporting for the call stack dump 2010-11-25 m_schellens * gdl/src/prognode.cpp, src/prognode.cpp: Clearer error message for CONTINUE outside loops 2010-11-24 m_schellens * configure.in, gdl/configure.in, gdl/src/gdl.cpp, gdl/src/includefirst.hpp, src/gdl.cpp, src/includefirst.hpp: Fixed preprocessor's HAVE_LIBREADLINE handling with python 2010-11-22 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_3081887.pro, gdl/testsuite/test_plotting_ranges.pro, testsuite/Makefile.am, testsuite/test_bug_3081887.pro, testsuite/test_plotting_ranges.pro: testsuite update 2010-11-21 m_schellens * gdl/src/GDLInterpreter.cpp, gdl/src/dinterpreter.cpp, gdl/src/gdlc.i.g, gdl/src/pro/Makefile.in, gdl/testsuite/Makefile.in, src/GDLInterpreter.cpp, src/dinterpreter.cpp, src/gdlc.i.g, src/pro/Makefile.in, testsuite/Makefile.in: fixed _retTree for indexable_expr (bug tracker ID: 3081887) 2010-11-17 slayoo * gdl/src/gdlgstream.cpp, gdl/src/gdlpython.cpp, gdl/src/plot3d_nr.cpp, gdl/src/plotting.cpp, gdl/testsuite/libtest_ce.cpp, gdl/testsuite/test_ce.pro, src/gdlgstream.cpp, src/gdlpython.cpp, src/plot3d_nr.cpp, src/plotting.cpp, testsuite/libtest_ce.cpp, testsuite/test_ce.pro: fixing compiler warnings with GCC 4.4; temporarily commenting out a part of testsuite/libtest_ce.cpp (the rest works) 2010-11-15 slayoo * gdl/src/gdlwidget.cpp, src/gdlwidget.cpp: fixing compatibility with old (2007) libstdc++ (cf. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31005) * INSTALL.CMake, gdl/INSTALL.CMake: INSTALL.CMake: adding info about the Debug mode 2010-11-12 alaingdl * CMakeLists.txt, gdl/CMakeLists.txt: defaut compilation mode with CMake switched to "Release" in order to have good perfs' 2010-11-07 slayoo * gdl/src/basic_pro.cpp, src/basic_pro.cpp: EXIT: fixed segfault when compiled with wxWidgets and no X-server connection available (tracker item no. 2946058, patch by Orion Poplawski) * gdl/src/plotting.cpp, src/plotting.cpp: CONTOUR: better input dimesion check (tracker item no. 3055761) * gdl/src/pro/interpol.pro, gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_3104349.pro, src/pro/interpol.pro, testsuite/Makefile.am, testsuite/test_bug_3104349.pro: INTERPOL: sanity check added (tracker item no. 3104349) 2010-11-06 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/test_bug_3104214.pro, testsuite/Makefile.am, testsuite/test_bug_3104214.pro, gdl/src/plotting.cpp, src/plotting.cpp: PLOTS vs. logscale fix (tracker item no. 3104214) 2010-10-28 slayoo * gdl/testsuite/libtest_ce.cpp, testsuite/libtest_ce.cpp: libtest_ce.cpp: GCC 4.3.3 (e.g.) compatibility fix 2010-10-27 slayoo * configure.in, gdl/configure.in, gdl/doc/misc/README.call_external, gdl/src/basic_pro_jmg.cpp, gdl/src/basic_pro_jmg.hpp, gdl/src/libinit_jmg.cpp, src/basic_pro_jmg.cpp, src/basic_pro_jmg.hpp, src/libinit_jmg.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/libtest_ce.cpp, gdl/testsuite/test_ce.pro, testsuite/Makefile.am, testsuite/libtest_ce.cpp, testsuite/test_ce.pro: CALL_EXTERNAL: initial import (patch by Christoph Fuchs, tracker item no. 3096214) 2010-10-26 alaingdl * gdl/testsuite/test_mpfit.pro, testsuite/test_mpfit.pro: adding keyword /debug in TEST_MPFIT ... 2010-10-26 slayoo * gdl/src/gshhs.cpp, gdl/src/plotting.cpp, gdl/src/plotting.hpp, src/gshhs.cpp, src/plotting.cpp, src/plotting.hpp, gdl/testsuite/test_clip.pro, testsuite/test_clip.pro: default range (if called before plot) and corrected clipping behaviour in XYOUTS, POLYFILL and PLOTS (patch from Joanna, tracker item no. 3029409) 2010-10-26 alaingdl * gdl/src/pro/restore.pro, gdl/src/pro/save.pro, src/pro/restore.pro, src/pro/save.pro: better messages when CMSV lib. not in the GDL/IDL_PATH * gdl/testsuite/test_get_screen_size.pro, gdl/testsuite/test_mpfit.pro, testsuite/test_get_screen_size.pro, testsuite/test_mpfit.pro: adding details to improve tests and warnings 2010-10-25 m_schellens * gdl/src/dstructgdl.hpp, src/dstructgdl.hpp: Fixed Clear() for tag by tag created structs (bug tracker ID: 3091610) 2010-10-23 slayoo * gdl/src/libinit.cpp, gdl/src/plotting.cpp, src/libinit.cpp, src/plotting.cpp: POLYFILL: support for LINE_FILL, SPACING, LINESTYLE, ORIENTATION and THICK (thanks to Joanna, tracker item no. 3029507) 2010-10-17 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_ps_decomposed.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_ps_decomposed.pro, gdl/src/deviceps.hpp, src/deviceps.hpp: decomposed colours with PostScript + test routine test_ps_decomposed.pro 2010-10-16 alaingdl * gdl/testsuite/test_strsplit.pro, testsuite/test_strsplit.pro, gdl/src/pro/strsplit.pro, src/pro/strsplit.pro: correcting bugs in STRSPLIT(); updating TEST_STRSPLIT in consequence. 2010-10-14 slayoo * gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3054361.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3054361.pro: testsuite/test_bug_3054361.pro: initial import * gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_bug_3086851.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3086851.pro: testsuite/test_bug_3086851.pro: initial import 2010-10-13 alaingdl * gdl/src/pro/strsplit.pro, src/pro/strsplit.pro: STRSPLIT: /REGEX and /PRESERVE_NULL should be compatible (may not work due to the complexity of STRSPLIT(), but "test_strsplit.pro" was OK) * gdl/testsuite/CMakeLists.txt, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_moment.pro, testsuite/CMakeLists.txt, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_moment.pro: adding TEST_MOMENT in testsuite * gdl/src/libinit_cl.cpp, gdl/src/ncdf_cl.cpp, gdl/src/ncdf_cl.hpp, src/libinit_cl.cpp, src/ncdf_cl.cpp, src/ncdf_cl.hpp: renaming all occurences of NCDF_EPOCH to CDF_EPOCH * gdl/src/pro/moment.pro, src/pro/moment.pro: correcting bug for Kurtosis in MOMENT() 2010-10-08 alaingdl * gdl/src/libinit_cl.cpp, gdl/src/ncdf_cl.cpp, gdl/src/ncdf_cl.hpp, src/libinit_cl.cpp, src/ncdf_cl.cpp, src/ncdf_cl.hpp: initial import of interface for NCDF_EPOCH, code not working ... 2010-10-01 alaingdl * gdl/testsuite/CMakeLists.txt, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, testsuite/CMakeLists.txt, testsuite/Makefile.am, testsuite/Makefile.in: upgrading list of files used in launchers of test/check * gdl/testsuite/test_mpfit.pro, testsuite/test_mpfit.pro: initial import of TEST_MPFIT, fast test of widely used Lib. MPFIT * gdl/quick_start_GDL.sh, quick_start_GDL.sh: adding the option for keeping current GDL_PATH when running "fast launcher" 2010-09-21 alaingdl * gdl/src/libinit_ac.cpp, gdl/src/math_fun_ac.cpp, gdl/src/math_fun_ac.hpp, src/libinit_ac.cpp, src/math_fun_ac.cpp, src/math_fun_ac.hpp: Initial import of missing functions PREWITT(), SOBEL() and ROBERTS(). Interfaces only, code not finished. 2010-09-20 alaingdl * gdl/src/math_fun_ac.cpp, src/math_fun_ac.cpp: fixing memory leak in SPL_INIT (bug 3070190) * gdl/src/basic_pro_jmg.cpp, src/basic_pro_jmg.cpp: removing useless comment in revisited WAIT 2010-09-16 slayoo * doc/www/resources.html, gdl/doc/www/resources.html: fixed broken link to a relocated bu.edu website 2010-09-15 alaingdl * gdl/src/basic_pro_jmg.cpp, src/basic_pro_jmg.cpp: WAIT: using nanosleep to avoid using 100% of CPU for long waits ... but keeping old code to have accurates small waits ;-) 2010-09-14 m_schellens * NEWS, gdl/NEWS, gdl/src/basic_fun.cpp, src/basic_fun.cpp: Set constant terminal with of 80 for STRING(/PRINT) (bug tracker ID: 3054361) 2010-09-10 slayoo * doc/www/contribute.html, doc/www/download.html, doc/www/home.html, gdl/doc/www/contribute.html, gdl/doc/www/download.html, gdl/doc/www/home.html: doc/www updates corresponding to the 0.9 release 2010-09-09 alaingdl * gdl/src/pro/save.pro, src/pro/save.pro: consequence of change 1.131 in "basic_fun.cpp" when calling EXECUTE, array not allowed now ... * gdl/testsuite/test_known_bugs.pro, testsuite/test_known_bugs.pro: correcting small bug in "test_known_bugs.pro" * CMakeLists.txt, gdl/CMakeLists.txt: upgrading version number (rc4 is over) 2010-09-02 opoplawski * gdl/CMakeModules/FindHDF.cmake: Search hdf sub-directories - finds hdf4 on Fedora * CMake.tar.gz, CMakeLists.txt, INSTALL.CMake, README.CMake, config.h.cmake, gdl/CMake.tar.gz, gdl/CMakeLists.txt, gdl/CMakeModules/FindFFTW.cmake, gdl/CMakeModules/FindGSL.cmake, gdl/CMakeModules/FindGrib.cmake, gdl/CMakeModules/FindHDF.cmake, gdl/CMakeModules/FindLibproj4.cmake, gdl/CMakeModules/FindNetCDF.cmake, gdl/CMakeModules/FindPlplot.cmake, gdl/CMakeModules/FindPythonLibs.cmake, gdl/CMakeModules/FindReadline.cmake, gdl/CMakeModules/FindUdunits.cmake, gdl/INSTALL.CMake, gdl/README.CMake, gdl/config.h.cmake, gdl/src/CMakeLists.txt, gdl/src/antlr/CMakeLists.txt, gdl/testsuite/CMakeLists.txt, src/CMakeLists.txt, src/antlr/CMakeLists.txt, testsuite/CMakeLists.txt: Check in CMake files into tree 2010-08-31 slayoo * gdl/src/basic_fun.cpp, gdl/src/envt.cpp, gdl/src/libinit.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_fixprint.pro, src/basic_fun.cpp, src/envt.cpp, src/libinit.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_fixprint.pro: FIX: support for TYPE=7 and /PRINT + test routine (test_fixprint.pro) 2010-08-30 alaingdl * CMake.tar.gz, gdl/CMake.tar.gz: Still improving the CMake alternative. Now target (gdl) don't loose PATH to alternative librairies (pb on Debian where we need dedicated Image Magick version). * CMake.tar.gz, gdl/CMake.tar.gz: better managment of alternative path to ImageMagick lib. (need a "by-hand" Image Magick Lib. under Debian to avoid a known pb with Plplot (two seccessive calls to WINDOW will crash, see testsuite/test_known_bugs.pro)) 2010-08-27 slayoo * gdl/src/basic_fun.cpp, gdl/testsuite/Makefile.am, gdl/testsuite/Makefile.in, gdl/testsuite/test_execute.pro, src/basic_fun.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_execute.pro: EXECUTE: disallowing array arguments for compatibility with IDL 2010-08-26 alaingdl * gdl/src/pro/Makefile.am, gdl/src/pro/Makefile.in, src/pro/Makefile.am, src/pro/Makefile.in: adding new function SWAP_ENDIAN_INPLACE in Makefile.am and Makefile.in * gdl/src/pro/dialog_pickfile.pro, src/pro/dialog_pickfile.pro: missing a ")" in DIALOG_PICKFILE ... * gdl/src/default_io.cpp, gdl/src/file.cpp, src/default_io.cpp, src/file.cpp: default_io: being able to read (big) compressed files file.cpp: for FILE_SEARCH() * gdl/src/pro/swap_endian_inplace.pro, src/pro/swap_endian_inplace.pro: initial import of SWAP_ENDIAN_INPLACE(), derivate work from SWAP_ENDIAN(). This function is needed for the PDS Library (Planetary Data System, http://pds.nasa.gov/) * gdl/src/pro/dialog_pickfile.pro, src/pro/dialog_pickfile.pro: in DIALOG_PICKFILE, typos, and also new keywords: Display_name and Ressource_name * CMake.tar.gz, gdl/CMake.tar.gz: Upgrade of CMake tar (the alternative way to compile GDL) 2010-08-25 alaingdl * gdl/src/plotting.cpp, src/plotting.cpp: preliminary version for AX and AZ keywords in SURFACE 2010-08-25 slayoo * gdl/testsuite/README, gdl/testsuite/test_clip.pro, gdl/testsuite/test_fix.pro, gdl/testsuite/test_nans_in_sort_and_median.pro, gdl/testsuite/test_zzz.pro, testsuite/README, testsuite/test_clip.pro, testsuite/test_fix.pro, testsuite/test_nans_in_sort_and_median.pro, testsuite/test_zzz.pro: skipping known-bug cases in testsuite when not run using the CVS version of gdl 2010-08-25 m_schellens * gdl/src/Makefile.am, gdl/src/Makefile.in, src/Makefile.am, src/Makefile.in, configure.in, gdl/configure.in: Fixed inconsistency * ChangeLog, README, configure.in, gdl/ChangeLog, gdl/README, gdl/configure.in, gdl/src/GDLInterpreter.hpp, gdl/src/gdlc.i.g, gdl/src/gdlwidget.cpp, src/GDLInterpreter.hpp, src/gdlc.i.g, src/gdlwidget.cpp: release GDL 0.9 * CMake.tar.gz, README.CMake, README.GRIB, README_GRIB, gdl/CMake.tar.gz, gdl/README.CMake, gdl/README.GRIB, gdl/README_GRIB: added CMake GDL 0.9: 2010-08-25 m_schellens * CMake.tar.gz, README.CMake, README.GRIB, README_GRIB: added CMake 2010-08-23 m_schellens * src/default_io.cpp, NEWS: Handle test files with CR delimiter 2010-08-18 alaingdl * src/plotting.cpp: in WINDOW, allowing title= no present OR to be converted (1e1 must be converted in 10.000) 2010-08-16 slayoo * src/gdlgstream.cpp: fixing lowercase gamma letter in greek script (reported by lolkje on the SF GDL forum) 2010-08-12 m_schellens * src/newprognode.cpp, src/prognode.cpp, src/prognode.hpp: Implemented optional loop index (or hash value) variable for FOREACH 2010-08-11 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g: Added optional loop index (or hash value) variable to FOREACH (not functional yet) 2010-08-05 m_schellens * src/basic_pro.cpp: Changed default behaviour to not assume variable lenght VMS files (see bug tracker ID: 3028279) * src/ncdf_cl.cpp, src/ncdf_var_cl.cpp: Fixed error reporting for netCDF dimension IDs * src/GDLTreeParser.cpp, src/dcompiler.cpp, src/dinterpreter.cpp, src/dpro.cpp, src/gdlc.tree.g: Fixed optimization for self assignment * config.h.in, src/GDLInterpreter.cpp, src/GDLParser.cpp, src/gdlc.i.g: Fixed error message reporting (bug tracker ID: 2999950) 2010-07-27 slayoo * testsuite/test_idl8.pro, testsuite/test_pmulti.pro, testsuite/test_spher_harm.pro, testsuite/test_zeropoly.pro: updating testsuite to match the change in FOREACH syntax * src/GDLParser.cpp, src/gdlc.g: FOREACH: using COMMA instead of OF as in IDL8 (foreach i, arr do ...) 2010-07-25 slayoo * src/CFMTLexer.cpp, src/CFMTLexer.hpp, src/CFMTTokenTypes.hpp, src/CFMTTokenTypes.txt, src/FMTIn.cpp, src/FMTIn.hpp, src/FMTInTokenTypes.hpp, src/FMTInTokenTypes.txt, src/FMTLexer.cpp, src/FMTLexer.hpp, src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/FMTParser.cpp, src/FMTParser.hpp, src/FMTTokenTypes.hpp, src/FMTTokenTypes.txt, src/basegdl.hpp, src/cformat.g, src/format.g, src/format.in.g, src/format.out.g, src/ofmt.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_binfmt.pro: binary format codes for PRINT/STRING/READS/... (tracker item no. 3031999) 2010-07-23 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_bug_3033108.pro: testsuite/test_bug_3033108.pro: initial import 2010-07-19 slayoo * testsuite/test_clip.pro: test_clip.pro: adding PLOTS and XYOUTS (tracker item no. 3029082) * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_clip.pro: adding test_clip.pro to the testsuite (tracker item no. 3029085) 2010-07-16 alaingdl * src/datatypes.cpp: correcting bug 3030379 in REVERSE when call with odd elements and without /overwrite 2010-06-29 slayoo * src/convert2.cpp: STRING: fixing bug 3022828 * src/gdlgstream.cpp, src/plotting.cpp: SET_PLOT: fixing bug 2913872 2010-06-29 alaingdl * testsuite/test_float2string.pro, testsuite/test_point_lun.pro: initial import of 2 new tests, not added in Makefile.am, not well packeged now ... * testsuite/Makefile.in, testsuite/Makefile.am: sing space between ".pro" and "\" * src/pro/Makefile.in: idem: missing files * src/pro/Makefile.am: adding missing new files. * src/pro/escape_special_char.pro: removing stupid duplication of keyword ! * NEWS: mention of Maxime' work on compressed files * testsuite/test_zip.pro: initial import of a testsuite around /compress keyword ... (Maxime L.) * src/assocdata.cpp, src/basic_fun_jmg.cpp, src/gzstream.hpp, src/io.cpp, src/print.cpp, src/read.cpp: Now, compress files (using gzip) should work (impacts on : readf, printf, seek, point_lun). Fstat outputs: size changed, new compress flag. Work done by Maxime L. 2010-06-29 slayoo * src/ncdf_cl.cpp: NCDF_*: fixing inf. loop in error message, corrected variable ids in error messages 2010-06-29 alaingdl * src/pro/file_copy.pro, src/pro/file_delete.pro: initial import of 2 new functionnalities: FILE_COPY and FILE_DELETE (writtent by Lea N.) * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_file_basename.pro, testsuite/test_file_copy.pro, testsuite/test_file_delete.pro, testsuite/test_file_dirname.pro, testsuite/test_strsplit.pro: initial import of a serie of tests (written by Lea) for new functionnalities: file_copy, file_delete and also corrected/improved codes: file_basename, file_dirname (escaping), strsplit Makefile.am and Makefile.in updated. * src/pro/strsplit.pro: some improvments in STRPLIT() bye Lea, including /preserve_null * src/pro/file_expand_path.pro: initial import of FILE_EXPAND_PATH (by Lea) 2010-06-28 alaingdl * src/pro/escape_special_char.pro: initial import of ESCAPE_SPECIAL_CHAR(), used by some procedures managing Strings ... (e.g.: file_basename.pro, file_dirname.pro, file_delete.pro, file_copy.pro, ...) * src/pro/file_basename.pro, src/pro/file_dirname.pro: Escaping special Chars in FILE_DIRNAME and FILE_BASENAME 2010-06-25 alaingdl * src/file.cpp: correction for "." in FILE_SEARCH (Lea) 2010-06-23 slayoo * src/pro/dialog_pickfile.pro: DIALOG_PICKFILE: referencing Macports instead of Darwinports (the latter is bogus, see: http://trac.macports.org/wiki/DarwinPortsFraud) 2010-06-22 alaingdl * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_file_search.pro: initial import of "test_file_search.pro" (Makefile* upgrade done) * src/file.cpp: Activating the /FOLD_CASE keyword in FILE_SEARCH (code by M. Lenoir) * NEWS: upgrading informations in NEWS (important bugs corrections and new features) * src/pro/dialog_pickfile.pro: URL to Zenity HowTo install on OSX; unifying return to null string when failures. 2010-06-22 slayoo * doc/www/credits.html, doc/www/require.html: doc/www updates (fixed broken links in require.html) 2010-06-22 alaingdl * src/pro/dialog_pickfile.pro: Initial import of DIALOG_PICKFILE(), implementation by Maxime Lenoir. This code is using "zenity" (gdialog is now an alias to zenity). This code should work on most Linux distros (tested on CentOS 5.4, Mandriva 2010, Ubuntu 9.04) and OSX (tested on 10.6.2, after installation of Gnome Package). Keyword "filter" works since Zenity >= 2.23.1 2010-06-21 alaingdl * src/pro/str_sep.pro: correcting obsolete STR_SEP routine using /preverse_null in STRSPLIT; test at the end of the file. 2010-06-15 alaingdl * configure: upgrading "configure" in order to have the HAVE_X working ... * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_readf.pro: Initial import for "test_readf.pro" for testing CR/LF/(CR+LF) readings in ASCII files Makefile.am and Makefile.in in testsuite/ also upgraded * testsuite/test_fft_leak.pro: A /continue was missing in test_fft_leak.pro 2010-06-11 slayoo * configure.in, src/basegdl.hpp, src/basic_fun.cpp, src/deviceps.hpp, src/devicex.hpp, src/dinterpreter.hpp, src/file.cpp, src/gdlgstream.hpp, src/gdlwinstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/graphics.cpp, src/math_fun_jmg.hpp, src/plotting.cpp, src/str.cpp: OpenBSD compatibility fixes, making Xlib an optional dependency * src/basic_fun_jmg.cpp, src/objects.cpp: FSTAT: support for large (> 2GB) files (tracker item no. 3014216) 2010-06-09 slayoo * configure.in: configure: simplifying wxWidgets detection - now only wx-config is checked what should help od Fedora 2010-06-08 slayoo * NEWS, src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/imsl_erf.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_erfinv.pro: IMSL_ERF: initial import + test-routine 2010-06-07 alaingdl * testsuite/test_fft_leak.pro: improvments (allowing not to exist with /no_exit, /force mentionned if Linux ...) * src/gsl_fun.cpp: when using GSL version of FFT, correcting input conversion for three types (now testsuite/test_fft.pro works for GSL only and also FFTw) * testsuite/Makefile.am, testsuite/Makefile.in: adding TEST_FFT_LEAK.pro in "make check" * testsuite/test_fft_leak.pro: initial import of TEST_FFT_LEAK.pro, checking memory leak when using GSL FFT or FFTw libs. * src/fftw.cpp: FFTw: correction of memory leak by Léa, using fftw_destroy_plan(p). See test_fft_leak.pro in testsuite/ 2010-06-05 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_get_screen_size.pro, testsuite/test_pmulti.pro: testsuite: adding test_pmulti, skipping test_get_screen_size if no X connection is available * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_nans_in_sort_and_median.pro: adding test_nans_in_sort_and_median.pro (cf. tracker item no. 2985552) * configure.in: configure: compatibility with grib_api 1.9.0 2010-06-04 slayoo * src/basic_pro.cpp: WRITEU: preventing segfault writing to freed/unopened lun (tracker item no. 3007448) * src/gdlwidget.cpp: unicode-wxWidgets compatibility fixes in gdlwidget.cpp (tracker item no. 3005435) * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_memory.pro: adding test_memory.pro * configure.in: configure: fixing auto-detection of FFTW 2010-06-01 alaingdl * src/deviceps.hpp: correcting rounding errors in functions SetXPageSize and SetYPageSize, affecting !D.X_SIZE in postscript mode 2010-05-31 alaingdl * testsuite/Makefile.am, testsuite/Makefile.in: updating Makefile.am and Makefile.in to include "test_spl_init.pro" in testsuite/. Also changing place of "test_get_screen_size" in list (alpha order) * testsuite/test_spl_init.pro: initial import of TEST_SPL_INIT in testsuite/ (by Lea N.) * src/math_fun_ac.cpp: Adding YP0 and YPN_1 keywords to SPL_INIT 2010-05-31 slayoo * NEWS, src/dimension.hpp, src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit.cpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_spher_harm.pro: SPHER_HARM: initial import (using GSL gsl_sf_legendre_sphPlm) + test routine 2010-05-28 slayoo * src/pro/deriv.pro: DERIV: enabling error-reporting via MESSAGE 2010-05-27 jomoga * src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp: Further widget updates 2010-05-16 m_schellens * testsuite/test_suite.pro, config.h.in, src/GDLInterpreter.cpp, src/datalistt.hpp, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, testsuite/Makefile.am: sync 2010-05-05 m_schellens * src/typedefs.hpp, src/GDLInterpreter.cpp, src/basegdl.hpp, src/gdlc.i.g: enable memstats 2010-05-04 m_schellens * src/GDLInterpreter.cpp, src/dpro.hpp, src/gdlc.i.g, src/newprognode.cpp, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/typedefs.hpp: fixed FOR loops within $ 2010-05-03 alaingdl * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_get_screen_size.pro, testsuite/test_product.pro: Less messages in TEST_PRODUCT; adding revised TEST_GET_SCREEN_SIZE in "make check" 2010-05-03 m_schellens * src/GDLInterpreter.cpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/datatypes.cpp, src/gdlc.i.g, src/newprognode.cpp: add file 2010-05-01 m_schellens * src/GDLInterpreter.hpp, src/Makefile.am, src/Makefile.in, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun_cl.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.hpp, src/envt.hpp, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/GDLInterpreter.cpp: removed unnecessary copying in deref, IF, SWITCH, CASE 2010-04-27 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/basegdl.hpp, src/datatypes.cpp, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: interpreter improvements 2010-04-26 slayoo * src/gshhs.cpp, src/plotting.cpp: POLYFILL: mapping support 2010-04-22 slayoo * MAP_INSTALL, src/gshhs.cpp, src/gshhs.hpp, src/libinit.cpp, src/libinit_jmg.cpp: some GSHHS-related cleanups 2010-04-22 alaingdl * src/pro/Makefile.in, src/pro/Makefile.am: forgot to include LUDC.pro in the Makefile.* files :( 2010-04-22 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/Makefile.in, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/envt.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/math_fun_jmg.cpp, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/specializations.hpp, src/typedefs.hpp, src/widget.cpp: optimized interpreter 2010-04-21 alaingdl * src/libinit.cpp, src/libinit_jmg.cpp: moving new SA declarations from "libinit.cpp" to "libinit_jmg.cpp" to keep map_* together and protected by the optionnal block for LIBPROJ4 #if defined(USE_LIBPROJ4) * src/pro/ludc.pro: LUDC.pro: initial import of a fake one to be able to run the full time_test3 suite * src/file.cpp: trying to manage "~" in GDL_PATH, also for EXPAND_PATH. No managment of redundant entry (like "."); not sure path expansion always done ... 2010-04-21 slayoo * MAP_INSTALL: adding a hint to the MAP_INSTALL file * NEWS: update of the NEWS file * src/gshhs.cpp, src/gshhs.hpp, src/libinit.cpp, src/plotting.hpp, src/Makefile.am, src/plotting.cpp, INSTALL, MAP_INSTALL, README, configure.in: MAP_CONTINENTS: initial import (a lot needs to be done... but it works; uses GSHHS - a GPL-licensed shoreline database) 2010-04-20 m_schellens * src/basic_op.cpp, src/datatypes.cpp, src/gdlc.i.g, src/prognode.cpp, src/typedefs.hpp: commented out OpenMP usage for mere copy 2010-04-20 slayoo * doc/www/screenshot.html, src/deviceps.hpp, src/grib.cpp, src/grib.hpp, src/libinit.cpp, src/plotting.cpp, src/plotting.hpp, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_device.pro: DEVICE: support for the INCHES kw, updating !D when called with XSIZE, YSIZE; test_device.pro; some other tiny cleanups 2010-04-20 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/gdlc.i.g, src/prognode.cpp: reduced overhead between statements 2010-04-19 m_schellens * src/GDLInterpreter.cpp, src/basic_fun.cpp, src/gdlc.i.g: reduced overhead between statements * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLLexer.hpp, src/GDLParser.hpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/basic_fun.cpp, src/basic_pro.cpp, src/dinterpreter.cpp, src/dpro.cpp, src/envt.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/libinit.cpp, src/objects.hpp, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/str.cpp: Fixed STRMID for 64 bit systems 2010-04-19 jomoga * src/gdlwidget.cpp, src/gdlwidget.hpp, src/libinit_jmg.cpp, src/objects.cpp, src/widget.cpp: Update widget code 2010-04-19 m_schellens * testsuite/Makefile.in, src/prognode.cpp: fixed FOR_STEP handling also negative steps 2010-04-18 m_schellens * src/str.cpp: debug info for STRMID * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp: interpreter optimizations 2010-04-17 slayoo * configure.in: making the plplot-modules/imagemagick message a warning (instead of an error) 2010-04-17 m_schellens * src/dinterpreter.cpp, src/dpro.cpp, src/dpro.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.g, src/gdlc.i.g, src/math_fun_jmg.cpp, src/prognode.cpp, src/prognode.hpp, src/widget.cpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basic_fun.cpp: changed internal representation of FOR/FOREACH loops 2010-04-16 m_schellens * src/basic_fun.cpp: removed OpenMP usage in STRMID * src/basic_fun.cpp: changed OpenMP options for STRMID 2010-04-16 alaingdl * testsuite/Makefile.am, testsuite/test_str_functions.pro: introduction of TEST_STR_FUNCTIONS in the "make check" testsuite * src/pro/strsplit.pro: updating STRSPLIT, correcting bugs * testsuite/test_str_functions.pro: initial import of TEST_STR_FUNCTIONS, regrouping tests on functions working on STRING, like STRMID, STRSPLIT, ... (to be included in "make check") 2010-04-16 slayoo * doc/www/screenshots/screenshot12.png, doc/www/screenshots/screenshot12_thumb.png, doc/www/screenshot.html: doc/www: adding a new screenshot (by Michal Piadlowski) 2010-04-16 m_schellens * src/basic_fun.cpp: fixed MEDIAN with NaN for floating types (1 dimensional case only) 2010-04-15 m_schellens * src/basic_fun.cpp: fixed SORT for floating types 2010-04-15 alaingdl * src/pro/str_sep.pro, src/pro/strsplit.pro: STR_SEP: rewriting and now managing sep. string with more than only one char STRSPLIT: cleanup and improvments 2010-04-14 m_schellens * src/GDLInterpreter.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g: make CLEANUP call when object is garbage collected 2010-04-14 alaingdl * src/pro/tvscl.pro: in TVSCL, return when input array not given or without elements * testsuite/test_read_jpeg.pro: better managment of big images/small screen (and vertical/horizontal modes) 2010-04-13 m_schellens * src/envt.cpp: fixed reference counting in OBJ_DESTROY 2010-04-12 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g: add comment * src/strassenmatrix.hpp: fixed openmp * src/gdljournal.cpp, src/initsysvar.cpp: changed \!GDL sysvar, true GDL version for journal files * src/GDLInterpreter.cpp, src/basic_fun.cpp, src/gdlc.i.g: fixed EXECUTE messaging * src/envt.cpp, src/gsl_fun.cpp, src/hdf_pro.cpp, src/prognode.hpp, src/read.cpp: removed warning * NEWS, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/dcompiler.cpp, src/dinterpreter.cpp, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp, src/prognode.hpp: fixed IF_ELSE * src/dcompiler.cpp, src/dinterpreter.cpp, src/prognode.hpp, src/prognodeexpr.cpp: fixed empty block handling * src/dcompiler.cpp, src/prognode.hpp: fixed IF_ELSE * src/GDLInterpreter.hpp, src/gdlc.i.g: localization info for out of scope message * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/dcompiler.cpp, src/gdlc.g, src/gdlc.i.g, src/prognode.hpp, src/prognodeexpr.cpp: optimized implementation of REPEAT/WHILE loops 2010-04-11 slayoo * src/gsl_fun.cpp, src/libinit_jmg.cpp: cosmetics... 2010-04-11 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLParser.cpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/basic_fun_jmg.cpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp: implemented special handling for N_ELEMENTS 2010-04-10 m_schellens * src/GDLTreeParser.cpp, src/basic_pro_jmg.cpp, src/envt.cpp, src/gdlc.tree.g, src/prognodeexpr.cpp: fixed error message info * src/envt.cpp: fixed WARNING message * src/read.cpp: Fixed behaviour of READ from cin * src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/dcompiler.cpp, src/dinterpreter.cpp, src/dnode.cpp, src/dnode.hpp, src/dpro.cpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp: fixed error message info 2010-04-09 alaingdl * testsuite/test_tv.pro: more tests for TV: positionning and all Colors Tables 2010-04-09 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_fix.pro: adding test_fix.pro to the make-check list * src/pro/Makefile.am, src/pro/Makefile.in: reordering file list in src/pro/Makefile.* * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/findex.pro, src/pro/interpol.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_interpol.pro: INTERPOL: initial import (using FINDEX and SPL_INTERP, QUADRATIC and LSQUADRATIC not implemented yet) 2010-04-08 slayoo * src/pro/restore.pro: RESTORE: fixing compatibility with current CMSVLIB version; allowing restoration of more than 30 variables 2010-04-08 alaingdl * testsuite/test_tv.pro: adding TEST_TV_DAMIER in TEST_TV to check whether positionning with TV is OK or not * testsuite/Saturn.jpg, testsuite/test_read_jpeg.pro: reading back a JPEG file and testing TVSCL ... (initial import of Saturn.jpg and test_read_jpeg.pro) 2010-04-08 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_idl8.pro: adding test_idl8.pro with short tests of new features: FOREACH statement, negative indices, dot op. for member routine access 2010-04-07 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/checks, testsuite/test_zeropoly.pro, testsuite/test_zzz.pro, testsuite/try: testsuite: checking if all .pro files in testsuite are included in the make-check rule, fixing memory leak in test_zeropoly * src/basic_fun.cpp: adding a specialization for DComplexGDL in product_template() (fixes compilation problem with OpenMP enabled) * src/basic_fun.cpp, src/libinit.cpp, testsuite/test_hist_2d.pro: TOTAL/PRODUCT: support for the PRESERVE_TYPE keyword; test_hist_2d.pro: making the tests shorter 2010-04-07 m_schellens * src/antlr/LLkParser.cpp, src/antlr/Parser.cpp, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTreeParser.hpp, src/basic_pro_jmg.cpp, src/basic_pro_jmg.hpp, src/dinterpreter.cpp, src/gdlc.g, src/gdlc.tree.g, src/libinit_jmg.cpp: fixed tag access 2010-04-06 slayoo * testsuite/test_url.pro: test_url: fixing behaviour on terminals with small number of columns 2010-04-06 m_schellens * NEWS: update NEWS * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/arrayindex.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.hpp, src/gdlc.i.g, src/typedefs.hpp: support negative index ranges -1 is the last element, -2 the one before the last and so on 2010-04-06 alaingdl * testsuite/test_url.pro: try to improve TEST_URL without stopping the "make check" run ... 2010-04-06 m_schellens * NEWS: update NEWS * src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/GDLInterpreter.cpp: added FOREACH statement, syntax: FOREACH loopVar OF array DO 2010-04-05 m_schellens * src/dinterpreter.cpp: enabled auto printing of expressions again (was off dor debug) * src/GDLTreeParser.cpp, src/basic_fun.cpp, src/datatypes.cpp, src/gdlc.tree.g, src/prognodeexpr.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/antlr/LLkParser.cpp, src/antlr/Parser.cpp, src/antlr/TreeParser.cpp, src/dinterpreter.cpp, src/dnode.hpp, src/gdlc.g, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt: allow DOT \(.\) for member function calls 2010-04-02 alaingdl * testsuite/test_known_bugs.pro: Quickly testing known problems 2010-03-31 m_schellens * src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basic_pro.cpp, src/datatypesref.cpp, src/gdlc.g, src/gdlwidget.cpp, src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, README: fixed reference counting 2010-03-30 slayoo * configure.in: configure: checking if plplot uses dynamic drivers when compiling with ImageMagick * testsuite/test_constants.pro: test_constants.pro: re-enabling some tests which do not need UDUNITS 2010-03-30 alaingdl * testsuite/test_constants.pro, testsuite/test_fft.pro: Reducing amount of un-useful messages for "make check"; desactivating UDUNITS if not available 2010-03-30 slayoo * src/libinit.cpp, src/plotting.cpp, src/plotting.hpp: POLYFILL: initial import (just an early draft) 2010-03-27 m_schellens * src/dinterpreter.cpp, src/libinit_jmg.cpp, src/widget.cpp: added keywords to keyword list for WIDGET_CONTROL * src/math_fun.cpp: improved accuracy of TAN for COMPLEX (by using double precision internally) * src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlpsstream.cpp, src/gdlpsstream.hpp, src/gdlsvgstream.cpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/gdlzstream.cpp: working plplot 2010-03-26 m_schellens * src/gdlxstream.cpp, src/gdlgstream.hpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/gdlxstream.hpp, src/widget.cpp, gdl.kdevelop: fixed plplot issues * gdl.kdevelop, src/devicex.hpp: *** empty log message *** * src/gdlpsstream.hpp, configure, configure.in, gdl.kdevelop, src/datatypes.cpp: made wroking reference counting independent from use of python 2010-03-25 jomoga * src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp, src/widget.hpp: Added functionality 2010-03-25 m_schellens * gdl.kdevelop: removed debug message 2010-03-24 m_schellens * src/gdlgstream.hpp, configure.in, gdl.kdevelop, configure: removed debug message * src/devicex.hpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, gdl.kdevelop: sync 2010-03-22 slayoo * testsuite/test_gc.pro, testsuite/Makefile.am, testsuite/Makefile.in: test_gc.pro: initial import 2010-03-20 slayoo * src/plotting.cpp: AXIS: support for the /SAVE keyword 2010-03-16 m_schellens * src/Makefile.am, src/Makefile.in, src/deviceps.hpp, configure, configure.in, gdl.kdevelop: removed ` at end of line 1057 2010-03-16 alaingdl * src/libinit.cpp, src/plotting.cpp: Adding keyword GET_SCREEN_SIZE in DEVICE 2010-03-15 alaingdl * configure, configure.in: Correcting typo in 2 configure files ... 2010-03-15 slayoo * src/sigfpehandler.cpp: sigfpehandler.cpp: adding the system include needed for SIGFPE in GCC 4.3 2010-03-14 m_schellens * src/plotting.cpp: insert checks for sigControlC * src/dcompiler.cpp, src/dinterpreter.cpp, src/gdl.cpp, gdl.kdevelop: catch GDLRetAllException wiht -e 2010-03-13 m_schellens * src/basic_pro.cpp, src/dinterpreter.cpp, src/dinterpreter.hpp: prevent GDL from deleting history file * src/dinterpreter.cpp, src/read.cpp, src/sigfpehandler.cpp: fixed control-C and fpe handling * src/dinterpreter.cpp, src/dinterpreter.hpp, src/io.cpp, src/read.cpp: get input from READ thru readline * src/plotting.cpp, src/envt.hpp: working [XY]RANGE for AXIS * src/GDLInterpreter.hpp, src/convert2.cpp, src/gdlc.i.g: Changed string lenght of string for (unsigned)long to string conversion 2010-03-12 m_schellens * src/GDLInterpreter.hpp, src/gdlc.i.g: reference counting this time without debug messages :-) * src/accessdesc.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp: reference counting this time without fail (so far :-) * src/GDLInterpreter.hpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/datatypesref.cpp, src/gdlc.i.g, src/objects.hpp: corrections for reference counting (more pemding, but previous version was broken 2010-03-11 m_schellens * src/GDLInterpreter.hpp, src/assocdata.hpp, src/basegdl.hpp, src/datatypes.cpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/envt.cpp, src/gdlc.i.g: reference counting for structures 2010-03-10 m_schellens * src/datatypes.cpp, src/GDLInterpreter.hpp, src/Makefile.am, src/Makefile.in, src/datatypesref.cpp, src/gdlc.i.g: reference counting for objects and pointer (only prints an info on out of scope, changes nothing) 2010-03-09 m_schellens * src/antlr/RefCount.hpp, src/GDLInterpreter.hpp, src/Makefile.am, src/Makefile.in, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/datatypesref.cpp, src/gdlc.i.g, src/objects.hpp: reference counting for objects and pointer (only prints an info on out of scope, changes nothing) 2010-03-08 m_schellens * src/io.hpp, src/io.cpp, src/magick_cl.cpp, src/basic_pro.cpp: expand path for ImageMagick-related routines 2010-03-07 m_schellens * src/GDLInterpreter.cpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_op.cpp, src/datatypes.hpp, src/dstructgdl.hpp, src/gdlc.i.g, src/specializations.hpp, src/strassenmatrix.hpp: handle nested ON_ERROR,2 2010-02-26 alaingdl * doc/www/download.html: fixing typo for link 2010-02-23 slayoo * src/plotting.cpp: CONTOUR: support for [x|y]style 2010-02-22 alaingdl * doc/www/screenshot.html: Including Saturn Legend * doc/www/screenshots/screenshot11.png, doc/www/screenshots/screenshot11_thumb.png: Initial import for Saturn page 2010-02-22 slayoo * MAP_INSTALL, README: correcting libproj4 url in README and MAP_INSTALL * src/plotting.cpp: AXIS: support for axes with arbitrary origin (patch from Joanna / cokhavim) 2010-02-20 slayoo * src/libinit.cpp, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/STATUS, src/pro/UrgentNeed.txt, src/pro/hist_2d.pro, src/pro/hist_nd.pro, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_hist_2d.pro, testsuite/test_rebin.pro, src/basic_fun.cpp, src/dpro.cpp: HIST_2D: initial import (using a GPL-licensed HIST_ND) + test routine REBIN: support for specifying new dimensions as an array + test routine dpro.cpp/DLibFunRetNew() - support for specifying warnKeywords TOAL/PRODUCT: ignoring PRESERVE_TYPE keyword (treating as warnKeyword) 2010-02-20 m_schellens * configure.in, src/GDLInterpreter.hpp, src/gdlc.i.g, configure: included suggestion for directly linking dl, see https://sourceforge.net/tracker/?func=detail&aid=2952365&group_id=97659&atid=618683 2010-02-19 m_schellens * src/print.cpp, README, configure, configure.in, gdl.kdevelop: made FORMAT accept (but ignore) an empty format string 2010-02-19 alaingdl * testsuite/test_fft.pro: error in call to EXIT ... * testsuite/test_fft.pro: improved TEST_FFT to test in N dims consitancy of direct then forward FFTs. 2010-02-17 m_schellens * src/math_utl.hpp, doc/www/home.html, configure.in, gdl.kdevelop, configure: use FFTW automatically if found 2010-02-17 slayoo * testsuite/Makefile.am, testsuite/Makefile.in, testsuite/README, testsuite/test_suite.pro: adding test_suite.pro to the make-check rule 2010-02-13 slayoo * INSTALL, README, testsuite/README: initial import of gdl/testsuite/README, minor updates in gdl/README and gdl/INSTALL 2010-02-12 slayoo * src/pythongdl.cpp: pythongdl.cpp: Python >2.4 compatibility (Py_ssize_t) * configure.in, src/antlr/Makefile.am, src/antlr/Makefile.in, src/gdlpython.cpp, src/pythongdl.cpp: not installing libantrl.a during make-install (gdl is statically linked with it), fixing a missing include in pythongdl.cpp, informing about the build type (standalone/Python module) in the post-configure message 2010-02-11 slayoo * src/pro/README.txt, src/math_utl.hpp: GCC 4.5 compatibility (math_utl.hpp); corrected some typos in the src/pro/README.txt file noted by the Debian packager * doc/www/download.html: doc/www: adding info about the Debian GNU/kFreeBSD packages 2010-02-11 alaingdl * testsuite/Makefile.am, testsuite/Makefile.in: upgrading automatic test suite files in directory testsuite/ * testsuite/test_fft.pro: Initial important of "test_fft.pro", a preliminary version of a testsuite for FFT * src/fftw.cpp: Important change in FFT when using FFTw lib. This bug correction is not now propagated in FFT when using GSL (in "gsl_fun.cpp") Please test using "test_fft.pro" * testsuite/test_product.pro: Wider tests for PRODUCT(), including /int, /nan, and dim param. * src/basic_fun.cpp: dding managment of keyword /Integer to PRODUCT function (see test_product.pro) This Keyword is used in current Astron Lib. 2010-02-09 alaingdl * src/libinit.cpp: adding INTEGER keyword in the PRODUCT function 2010-02-08 slayoo * doc/Makefile, testsuite/Makefile, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_product.pro: adding test_product.pro to the make-check rule, removing doc/Makefile and testsuite/Makefile files 2010-02-08 alaingdl * testsuite/test_product.pro: Initial import for TEST_PRODUCT.pro: testing some options of PRODUCT function 2010-02-07 m_schellens * doc/www/credits.html: alphabetic order * src/dinterpreter.cpp: Corrected error reporting for GDLDirectPrint(tm) 2010-02-06 m_schellens * gdl.kdevelop, src/dinterpreter.cpp: command line calculator mode - just type an expression GDL prints it 2010-02-05 m_schellens * src/dnode.cpp: test CVS access 2010-02-03 m_schellens * doc/www/credits.html: rc4 2010-02-02 m_schellens * src/lapack.cpp: add file * src/GDLParser.cpp, src/Makefile.am, src/Makefile.in, src/dnode.cpp, src/dnode.hpp, src/gdlc.g, README, config.h.in, configure: Fixed missing promption of integer constants with DEFINT32 set 2010-02-01 slayoo * configure.in: configure: adding -lrps flag to LIBS for the Cygwin case (patch from Mateusz Turcza) * configure.in: autodetection of OpenMP using AC_CHECK_HEADERS(omp.h) 2010-01-31 slayoo * configure.in: re-enabling autodetection of Ubuntu-style wxWidgets installation; change of GDL version number * src/widget.cpp: fixing widget.cpp after a change in arguments of GDLParser constructor 2010-01-30 slayoo * NEWS: update of the NEWS file (.9rc4 section) 2010-01-30 m_schellens * configure.in, gdl.kdevelop, configure: handling --with-openmp * ChangeLog, NEWS: update NEWS GDL 0.9rc4: 2010-01-30 m_schellens * ChangeLog, Makefile.in, configure, doc/www/credits.html, gdl.kdevelop, src/deviceps.hpp, src/graphics.hpp, src/libinit.cpp, src/plotting.cpp: Applied patch (tracker item 2860573) adding XSIZE, YSIZE, COLOR for PS output to DEVICE (patch from Joanna/cokhavim) 2010-01-29 slayoo * testsuite/Makefile, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_base64.pro, testsuite/test_constants.pro, testsuite/test_nestedloop.pro: testsuite: including test_base64, test_constants and test_nestedloop in the make-check rule * doc/Makefile, doc/Makefile.am, doc/Makefile.in, doc/gdl.1, testsuite/Makefile, testsuite/Makefile.am, testsuite/Makefile.in, testsuite/test_angles.pro, testsuite/test_multiroots.pro, testsuite/test_url.pro, testsuite/test_wavelet.pro, testsuite/test_zeropoly.pro, testsuite/try, Makefile.am, configure.in: including some of the tests from the testsuite in a make-check rule, adding a manpage (+including it in the make-install rule) * src/gdlgstream.hpp: fixing memory leak in GDLGStream::checkPlplotDriver() (thanks Alain/Valgrind) 2010-01-28 m_schellens * src/GDLInterpreter.cpp, src/GDLParser.hpp, src/dinterpreter.cpp, src/dpro.cpp, src/dpro.hpp, src/gdlc.g, src/gdlc.i.g: Fixed some uninitialized value issues detected with valgrind 2010-01-28 slayoo * doc/www/screenshot.html: doc/www: adding screenshots of GDL running on Windows under Cygwin and coLinux * src/file.cpp, src/gsl_fun.cpp, src/plotting.cpp, src/str.cpp: Cygwin and GCC 3.4.4 compatibility fixes (patch by Mateusz Turcza) * src/deviceps.hpp, src/devicesvg.hpp, src/devicewin.hpp, src/devicex.hpp, src/devicez.hpp: helping the compiler to disambiguate plstream->spause() calls and thus fixing compatibility with GCC 3.4.4 (patch by Mateusz Turcza) * README, configure.in: checking for GSL >=1.7 which is requiered to use both FFT and DWT at the same time 2010-01-27 slayoo * doc/www/menu.html, doc/www/screenshot.html, doc/www/screenshot.png: doc/www: update of the screenshots section * src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit.cpp, testsuite/test_zeropoly.pro: IMSL_ZEROPOLY: initial import (using gsl_poly_complex_solve()) 2010-01-25 m_schellens * src/FMTOut.hpp, src/format.out.g, gdl.kdevelop, src/FMTParser.cpp, src/print.cpp: fixed T,TL,TR format codes 2010-01-23 slayoo * src/ncdf_cl.cpp, src/ncdf_dim_cl.cpp, src/ncdf_var_cl.cpp, src/ncdf_att_cl.cpp: NCDF_*: fixes in error handling, support for LENGTH keyword in NCDF_ATTPUT; allowing to specify the global atribute number in NCDF_ATTNAME; outputing byte arrays instead of strings in NCDF_ATTGET; compatibility with netcd-4 (file handles are now Long instead of Int) * src/fftw.cpp, src/libinit_jmg.cpp: FFT: preventing bogus memory freeing with dcomplex input (tracker item no. 2935682) 2010-01-22 slayoo * doc/www/download.html: doc/www: update of the Download section- adding info about CVS access, links to packaged versions, and a note encouraging to use packages based on current release 2010-01-20 m_schellens * doc/www/support.html, doc/www/tdl.html, doc/www/contribute.html, doc/www/credits.html, doc/www/download.html, doc/www/feedback.html, doc/www/gdl.css, doc/www/home.html, doc/www/index.html, doc/www/menu.html, doc/www/require.html, doc/www/resources.html, doc/www/screenshot.html, doc/www/screenshot.png: Added source of http://gnudatalanguage.sourceforge.net/ to doc/www 2010-01-20 slayoo * testsuite/test_wavelet.pro, src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit.cpp: WTN: initial import (using GSL DWT routines) + test-routine (test_wavelet.pro) * src/pro/array_indices.pro, src/pro/calendar.pro, src/pro/file_basename.pro, src/pro/file_dirname.pro, src/pro/imsl_zerosys.pro, src/pro/ishft.pro, src/pro/last_item.pro, src/pro/lmgr.pro, src/pro/loadct.pro, src/pro/map_clip_set.pro, src/pro/matrix_multiply.pro, src/pro/path_sep.pro, src/pro/poly.pro, src/pro/poly_area.pro, src/pro/py_plot.pro, src/pro/py_print.pro, src/pro/query_bmp.pro, src/pro/query_dicom.pro, src/pro/query_gif.pro, src/pro/query_image.pro, src/pro/query_jpeg.pro, src/pro/query_pict.pro, src/pro/query_png.pro, src/pro/query_ppm.pro, src/pro/query_tiff.pro, src/pro/read_bmp.pro, src/pro/read_dicom.pro, src/pro/read_jpeg.pro, src/pro/read_pict.pro, src/pro/read_png.pro, src/pro/read_tiff.pro, src/pro/read_xwd.pro, src/pro/restore.pro, src/pro/rstrpos.pro, src/pro/showfont.pro, src/pro/str_sep.pro, src/pro/uniq.pro, src/pro/write_bmp.pro, src/pro/write_jpeg.pro, src/pro/write_pict.pro, src/pro/write_png.pro, src/pro/appleman.pro: adding on_error,2 for routines implemented in GDL 2010-01-18 slayoo * src/magick_cl.cpp: making ImageMagick format decoder warning non fatal (tracker item no 2934374) 2010-01-17 m_schellens * src/GDLParser.cpp, src/gdlc.g: Honor more than one COMPILE_OPT within $ * src/GDLLexer.hpp, src/GDLParser.hpp, src/dinterpreter.cpp, src/envt.hpp, src/gdlc.g: Honor COMPILE_OPT within $ and EXECUTE 2010-01-16 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLLexer.hpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basic_fun.cpp, src/dcompiler.cpp, src/dinterpreter.cpp, src/dpro.hpp, src/envt.hpp, src/gdlc.g, src/math_fun_jmg.cpp: Honor COMPILE_OPT within $ and EXECUTE * src/devicex.hpp: Fixed segfault caused by TVRD with no window open * gdl.kdevelop, src/datatypes.cpp, src/devicex.hpp: Corrected error message for constant indices 2010-01-16 slayoo * src/dcompiler.cpp, src/gdlexception.cpp, src/gdlexception.hpp: adding a warning about compiling an obsolete routine when it is compiled for the first time, thus changing the behaviour below: GDL> !WARN.OBS_ROUTINES=1 GDL> for i=0, 2 do a=rstrpos(' ',' ') % Compiled module: RSTRPOS. GDL> for i=0, 2 do a=rstrpos(' ',' ') % Routine compiled from an obsolete library: RSTRPOS into: GDL> !WARN.OBS_ROUTINES=1 GDL> for i=0, 2 do a=rstrpos(' ',' ') % Routine compiled from an obsolete library: RSTRPOS % Compiled module: RSTRPOS. GDL> for i=0, 2 do a=rstrpos(' ',' ') % Routine compiled from an obsolete library: RSTRPOS 2010-01-15 slayoo * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt: progagating changes in gdlc.g (previous commit) to gdlc.i.g- and gdlc.tree.g-related GDL*.pp files * src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/gdlc.g, src/GDLLexer.hpp: support for numeric constants in explicit binary format, e.g. a='1010101'b (tracker item no. 2932619) 2010-01-14 slayoo * src/pro/file_lines.pro: FILE_LINES: spawning subprocesses with /NOSHELL keyword to prevent execution of shell startup file (patch by Lucio Baggio, patch-tracker item no. 2932168) 2010-01-10 m_schellens * src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in, Makefile.in, aclocal.m4, config.h.in, configure, configure.in, gdl.kdevelop, ltmain.sh, src/Makefile.in, src/basic_op.cpp, src/datatypes.cpp, src/default_io.cpp: Fixed line number reporting 2010-01-05 slayoo * configure, configure.in, config.h.in: configure script: support for the Debian naming of the HDF4 libraries from the hdf4-alt packages (compiled with --disable-netcdf) 2010-01-04 slayoo * src/hdf5_fun.cpp: HDF5 1.6 compatibility fix (in error handling) 2010-01-03 slayoo * src/hdf5_fun.cpp, src/hdf5_fun.hpp, src/libinit_mes.cpp: error-handling in HDF5-related routines; initial import of: h5f_is_hdf5_fun, h5_get_libversion_fun, h5d_get_type_fun h5t_get_size_fun, h5a_open_name_fun, h5a_open_idx_fun, h5a_get_name_fun, h5a_get_space_fun, h5a_get_type_fun, h5a_get_num_attrs_fun, h5g_open_fun, h5a_close_pro, h5t_close_pro, h5g_close_pro, h5a_read 2010-01-02 slayoo * src/devicex.hpp, src/plotting.cpp: CONTOUR: fixing colours of axes in CONTOUR (.../forum/338692/topic/3306795); making the initial "DECOMPOSED" setting of the X device dependtant on the colour depth reported by the X-server 2010-01-01 slayoo * src/gdlgstream.hpp, src/libinit.cpp: UINDGEN: correcting the keyword list (indKey -> NULL); gdlgstream.hpp: informing the user that the PLplot warning about too few items on the terminal list can be ignored 2009-12-29 slayoo * src/pro/Makefile.am, src/pro/Makefile.in: adding rstrpos.pro to the make-install list * src/pro/rstrpos.pro, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basegdl.hpp, src/dcompiler.cpp, src/dcompiler.hpp, src/dinterpreter.cpp, src/dnode.cpp, src/dnode.hpp, src/dpro.cpp, src/dpro.hpp, src/gdlc.g, src/gdlc.tree.g, src/gdlexception.cpp, src/gdlexception.hpp, src/initsysvar.cpp, src/initsysvar.hpp, src/strassenmatrix.hpp, src/GDLLexer.cpp, src/GDLLexer.hpp, src/GDLParser.cpp: support for COMPILE_OPT OBSOLETE; initial import of RSTRPOS (obsolete) 2009-12-26 slayoo * src/pro/Makefile.in, src/pro/dicom/Makefile.in, Makefile.in, aclocal.m4, config.guess, config.sub, configure, configure.in, depcomp, install-sh, missing, mkinstalldirs, src/Makefile.in, src/antlr/Makefile.in: configuration files: disabling the automake maintainer mode by default - configuration files are not regenerated by default even if timestamps suggest this should be done (what happens often after a CVS update) 2009-12-23 slayoo * src/Makefile.in, src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in, config.h.in, configure, configure.in, aclocal.m4, Makefile.in: after running autoupdate and autoreconf -i * ltmain.sh: after running libtoolize (trying to fix the "X--tag=CXX: command not found" problem) * src/Makefile.am, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/checks: adding poly_area.pro to the make-install list in the src/pro/Makefile.am 2009-12-22 m_schellens * src/strassenmatrix.hpp: improved tolerance for older OpenMP * src/pro/poly_area.pro, src/Makefile.am, src/basic_op.cpp: add file 2009-12-20 slayoo * src/file.cpp, src/gdl.cpp: GCC 4.3.4 compatibility fix (PATH_MAX undefined) * configure, configure.in: configure: handling both single-port (Macports default) and multi-port (Debian default) installations of wxWidgets 2009-12-16 slayoo * Makefile.in, aclocal.m4, config.h.in, configure, configure.in, src/Makefile.in, src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in: re-enabling autodetection of OpenMP (needs autoconf >=2.63) 2009-12-12 m_schellens * config.h.in, configure, configure.in, gdl.kdevelop, src/strassenmatrix.hpp, Makefile.in, aclocal.m4, ltmain.sh, src/Makefile.in, src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in: working configuration files 2009-12-12 slayoo * src/dinterpreter.cpp, src/dinterpreter.hpp, src/gdl.cpp, src/magick_cl.cpp: support for specifying batch files at command line, e.g. $gdl script1.pro script2.pro support for the '-e' command-line option - execute a single statement and exit QUERY_*: fix for the empty-argument case 2009-12-12 m_schellens * src/basic_op.cpp, src/strassenmatrix.hpp, gdl.kdevelop, src/Makefile.am, src/Makefile.in: strassen algorithm for matrix multiplication (deactivated) 2009-12-11 slayoo * src/pro/STATUS, src/pro/UrgentNeed.txt: update of src/pro/STATUS and src/pro/UrgentNeed.txt * src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp: CROSSP: initial import 2009-12-10 slayoo * src/pro/Makefile.in: after running autoreconf * src/pro/Makefile.am, src/pro/query_dicom.pro, src/magick_cl.cpp: QUERY_DICOM: initial import 2009-12-09 slayoo * Makefile.in, aclocal.m4, config.h.in, configure, ltmain.sh, src/Makefile.in, src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in: after running autoreconf and libtoolize * src/pro/STATUS: (that's a comment for patchset 1026 commited a few minutes ago): - initial import of QUERY_BMP, QUERY_GIF, QUERY_IMAGE, QUERY_JPEG, QUERY_PICT, QUERY_PNG, QUERY_PPM and QUERY_TIFF (using Magick++'s ping functionality) - wxWidgets: - compatibility-fixes allowing compilation both with unicode- and non-unicode wxWidgets - adding some already referenced keywords to the keyword lists in libinit_jmg.cpp - configure script: - using a non-mangled function name in AC_CHECK_LIB (cross-compiler compatibility) - acquireing the wxWidgets library name from wx-config (basename+release, previously hardcoded) - checking if wx-config is callable before trying to link with wxWidgets - allowing indication of the wxWidgets installation prefix (--with-wxWidgets=DIR) * src/pro/Makefile.am, src/pro/Makefile.in, src/pro/checks, src/pro/dicom/Makefile.in, src/pro/query_bmp.pro, src/pro/query_gif.pro, src/pro/query_image.pro, src/pro/query_jpeg.pro, src/pro/query_pict.pro, src/pro/query_png.pro, src/pro/query_ppm.pro, src/pro/query_tiff.pro, configure.in, ltmain.sh, src/Makefile.in, src/antlr/Makefile.in, src/gdlwidget.cpp, src/libinit_cl.cpp, src/libinit_jmg.cpp, src/magick_cl.cpp, src/magick_cl.hpp, aclocal.m4, config.h.in, configure, Makefile.in: gdl 2009-12-06 slayoo * src/plotting.cpp: CONTOUR: reverting to previous (IDL-compatible) contour-level-choice mechanism * src/hdf_fun.cpp: HDF_SD_DIMGETID: correcting double error-message prefixes 2009-12-05 slayoo * src/pro/Makefile.am, src/pro/Makefile.in: fix for the last commit (in src/pro/Makefile.in) * src/Makefile.in, src/antlr/Makefile.in, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/dicom/Makefile.in, config.h.in, configure, configure.in, ltmain.sh, Makefile.in, aclocal.m4: using OpenMP only if the compiler supports it (by means of the AC_OPENMP macro) 2009-11-28 m_schellens * src/gdlgstream.hpp: resolved const char** to/from char** compile error * Makefile.in, aclocal.m4, configure, src/Makefile.in, src/antlr/Makefile.in, src/devicez.hpp, src/gdlgstream.hpp, src/pro/Makefile.in, src/pro/dicom/Makefile.in: fixed z buffer error condition (switched back to previous version, no OpenMP support) 2009-11-27 m_schellens * src/accessdesc.hpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basic_op.cpp, gdl.kdevelop: fixed line number reporting for struct and array expressions 2009-11-27 slayoo * src/magick_cl.cpp, src/gdlgstream.hpp: - fixing random behaviour of GDLGStream::checkPlplotDriver() - cleanup of error mesaages in Magick-related routines (removing double prefixes) 2009-11-25 slayoo * src/devicex.hpp, src/graphics.cpp, src/graphics.hpp, src/libinit.cpp, src/plotting.cpp: - !DEVICE.N_COLORS in now dependant on the actual X-window setting - DEVICE: support for the GET_VISUAL_DEPTH keyword - plotting.cpp : making all variables pointing to SysVar::D() non-static in order to allow the code that uses them to track changes in !D caused for example by set_plot 2009-11-24 jomoga * src/basic_fun.cpp: Change [0] to [s] in (*stringExpr)[s].substr in stregex_fun * testsuite/test_poly2d.pro: Initial import 2009-11-23 slayoo * testsuite/example.grib, testsuite/test_grib.pro: adding the GRIB test files * Makefile.in, README_GRIB, aclocal.m4, config.h.in, configure, configure.in, src/Makefile.am, src/Makefile.in, src/antlr/Makefile.in, src/basic_fun.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/grib.cpp, src/grib.hpp, src/libinit.cpp, src/pro/Makefile.in, src/pro/dicom/Makefile.in: - update in locale_get() reflecting the change in IDL 7.1.1 (now it's returning locale of the parent process, tracker item: 2880186) - initial import of GRIB-1/2 file format support using the ECMWF GRIB API - configure: checking if netcdfcpp.hpp is usable (conflicting hdf4/netcdf installation issue) - configure: moving definition of defaults to the header of configure.in - handling "cannot connect to X-server" (previously plPlot exited GDL, tracker item: 2877007) 2009-11-22 m_schellens * Makefile.in, aclocal.m4, configure, src/Makefile.in, src/antlr/Makefile.in, src/gdlgstream.hpp, src/magick_cl.cpp, src/pro/Makefile.in, src/pro/dicom/Makefile.in: corrected memory allocation * configure, configure.in, gdl.kdevelop, src/accessdesc.hpp, src/basic_pro.cpp, src/basic_pro.hpp, src/initsysvar.cpp, src/initsysvar.hpp, src/io.hpp, src/libinit.cpp, src/objects.cpp, src/objects.hpp: Add CPU procedure 2009-11-21 m_schellens * src/datatypes.cpp, src/basic_fun.cpp, src/basic_pro.cpp, src/devicex.hpp, src/devicez.hpp, src/fftw.cpp, src/magick_cl.cpp, src/typedefs.hpp: enhanced thread pool support using OpenMP 2009-11-20 m_schellens * src/GDLInterpreter.cpp, src/basegdl.hpp, src/convert2.cpp, src/datatypes.cpp, src/gdlc.i.g, src/math_fun.cpp, src/real2int.hpp: enhanced thread pool support using OpenMP 2009-11-18 m_schellens * src/GDLInterpreter.cpp, src/accessdesc.hpp, src/basic_op.cpp, src/basic_pro.cpp, src/datatypes.cpp, src/gdlc.i.g, src/gzstream.hpp, src/initsysvar.cpp, src/initsysvar.hpp, src/io.cpp, src/objects.cpp, src/objects.hpp, gdl.kdevelop: added initial thread pool support using OpenMP 2009-11-17 slayoo * config.h.in, configure, configure.in: removing a netCDF header check from the last commit (does not work with custom INCLUDES path) 2009-11-16 slayoo * src/antlr/Makefile.in, src/pro/Makefile.in, src/pro/dicom/Makefile.in, Makefile.in, README, aclocal.m4, config.h.in, configure, configure.in, src/Makefile.in, src/devicesvg.hpp, src/gdlgstream.hpp, src/gdlsvgstream.hpp: configure: - checking if netCDF installation is usable (HDF4 installation conflict) - checking if HDF4 was compiled with --disable-netcdf (+ README update) plplot: - throwing a GDL exception if plplot lacks requested driver - fixing SVG plotting after previous X-win plots (clearing driver options) - SVG: using svgcairo instead of svg driver if present 2009-11-13 m_schellens * src/basic_pro.cpp, src/basic_pro_jmg.cpp, src/dinterpreter.cpp, src/io.cpp, src/io.hpp: fixed startup file bug 2009-11-11 slayoo * src/basic_fun.cpp: STREGEX: preventing bogus call to basic_string::substr(-1,...) (tracker item no. 2895655) * src/basic_pro_jmg.cpp: POINT_LUN: assuring the 2nd par is a global par 2009-11-09 m_schellens * src/GDLInterpreter.cpp, src/basic_fun.cpp, src/gdlc.i.g, src/gdlexception.hpp: fixed error info for errors during parameter initialization 2009-11-08 m_schellens * src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/default_io.cpp, src/envt.cpp, src/extrat.cpp, src/gsl_fun.cpp: correct alignment for all types in PRINT and REVERSE(/OVERWRITE) 2009-11-08 slayoo * src/ncdf_var_cl.cpp: NCDF_VARINQ: fixing failed-assertion condition (dimension(0)) with scalar variables 2009-11-07 slayoo * src/basic_pro.cpp, src/envt.cpp, src/gdlexception.cpp, src/gdlexception.hpp: some more error-message decoration cosmetics 2009-11-07 m_schellens * src/GDLInterpreter.hpp, src/GDLParser.cpp, src/GDLTreeParser.cpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/GDLInterpreter.cpp: correct line numbers of error messages in interupted subroutines * src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/dinterpreter.cpp, src/dpro.cpp, src/envt.cpp, src/gdlc.i.g, src/gdlc.tree.g: Removed even more inconsistencies in deocration of error messages 2009-11-06 m_schellens * src/basic_fun.cpp, src/dpro.cpp, src/envt.hpp, src/gdlexception.cpp, src/gdlexception.hpp: Removed more inconsistencies in deocration of error messages * src/assocdata.cpp, src/basic_pro.cpp, src/envt.cpp, src/plotting.cpp: Removed inconsistencies in deocration of error messages 2009-11-05 m_schellens * src/dinterpreter.cpp, src/dinterpreter.hpp, src/envt.hpp, src/gdl.cpp, src/gdlexception.cpp, src/gdlexception.hpp, src/objects.cpp, src/objects.hpp: Add calling function's name to text of GDLException by default 2009-11-05 slayoo * src/gdl.cpp: making the -quiet option compatible with -arg and -args 2009-11-05 m_schellens * src/convert2.cpp, src/dinterpreter.cpp, src/envt.cpp, src/envt.hpp, src/gsl_fun.cpp: utilized SetPar() in invert_fun 2009-11-04 slayoo * src/devicex.hpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/libinit.cpp, src/plotting.cpp: WSHOW: initial import (ICONIC kwrd not implemented yet) * src/datatypes.cpp, src/gsl_fun.cpp, src/math_fun_jmg.cpp, src/ncdf_att_cl.cpp, src/ncdf_var_cl.cpp: INVERT: fixing a segfault condition with non-global parameter; removing some duplicate prefixes in error messages 2009-11-03 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/basegdl.cpp, src/basegdl.hpp, src/convert2.cpp, src/dinterpreter.cpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/math_fun.cpp, src/prognode.cpp: added identifier info in several error messages 2009-11-02 m_schellens * src/basic_fun.cpp: Fixed CREATE_STRUCT() (no parameters) 2009-11-01 m_schellens * src/basic_fun_jmg.cpp, src/prognode.cpp, README, ChangeLog: ROUTINE_NAMES * src/datatypes.cpp: More verbose error messages * src/basic_fun_jmg.cpp, src/gdlc.i.g, src/prognode.cpp: Fixed ROUTINE_NAMES(/FETCH) 2009-11-01 slayoo * src/plotting.cpp: CURSOR: support for lat/lon query on maps 2009-11-01 m_schellens * src/basic_fun_jmg.cpp: Fixed ROUTINE_NAMES(/FETCH) * src/Makefile.in, src/antlr/Makefile.in, src/basic_fun.cpp, src/datatypes.cpp, src/pro/Makefile.in, src/pro/dicom/Makefile.in, Makefile.in, aclocal.m4, configure, gdl.kdevelop: Fixed STRSPLIT() 2009-11-01 slayoo * src/gdl.cpp: -quiet command line option 2009-11-01 m_schellens * src/datatypes.cpp: More verbose error messages * src/basic_fun_jmg.cpp, src/gdlc.i.g, src/prognode.cpp: Fixed ROUTINE_NAMES(/FETCH) 2009-11-01 slayoo * src/plotting.cpp: CURSOR: support for lat/lon query on maps 2009-11-01 m_schellens * src/basic_fun_jmg.cpp: Fixed ROUTINE_NAMES(/FETCH) * src/Makefile.in, src/antlr/Makefile.in, src/basic_fun.cpp, src/datatypes.cpp, src/pro/Makefile.in, src/pro/dicom/Makefile.in, Makefile.in, aclocal.m4, configure, gdl.kdevelop: Fixed STRSPLIT() 2009-11-01 slayoo * src/gdl.cpp: -quiet command line option 2009-10-31 slayoo * src/pro/checks: src/pro/checks: making it work under all locales * src/Makefile.in, src/antlr/Makefile.in, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/checks, src/pro/dicom/Makefile.am, src/pro/dicom/Makefile.in, Makefile.in, aclocal.m4, configure, configure.in: fixing and re-enabling make-install rules for .pro files (+ one make-check rule for checking if all .pro files from src/pro will be installed) 2009-10-31 m_schellens * src/envt.hpp, src/basic_pro.cpp, src/envt.cpp: corrected HELP output for expressions 2009-10-31 slayoo * src/gsl_fun.cpp, src/ncdf_var_cl.cpp, testsuite/nc_test.pro: LA_TRIRED: checking if the first argument is an array (tracker item no: 2889764) NCDF_VARGET: fixing a segfault condition (tracker item no: 2878720) nc_test.pro: commenting out catch-dependant checks 2009-10-30 slayoo * src/gdl.cpp, testsuite/test_plotting_ranges.pro: MPI: warning the user if MPI changes the working directory of GDL * src/gsl_fun.cpp, src/plotting.cpp, testsuite/test_histo.pro, testsuite/test_plotting_ranges.pro, src/envt.hpp: PLOT/OPLOT: not accepting scalar arguments FFT: sanity check for the rank of argument CONTOUR/SURFACE: sanity checks for the rank and type of arguments HISTOGRAM: correcting binsize definition when max and nbins set, better INPUT-kw-related error message test_histo.pro: testing binsize selection test_plotting_ranges: initial import (testing axis range selection) envt.hpp: adding GetParNumericArrayDefined() 2009-10-27 m_schellens * src/GDLInterpreter.hpp, src/GDLInterpreterOptimized.cpp, src/GDLInterpreterOptimized.inc, src/Makefile.am, src/Makefile.in, src/gdlc.i.g: removed obsolete files 2009-10-26 m_schellens * src/GDLTreeParser.cpp, src/pro/Makefile.in: deactivate GDL_DEBUG define setting (gdlc.tree.g) 2009-10-26 alaingdl * src/plotting.cpp: Better automatic range in PLOT. NOT propagated in CONTOUR and SURFACE (sorry). LOG case still to do. 2009-10-25 m_schellens * src/envt.cpp, src/pro/Makefile.in, testsuite/test_suite.pro: more verbose info on expression parameters 2009-10-25 alaingdl * testsuite/test_get_screen_size.pro, src/plotting.cpp: in GET_SCREEN_SIZE, param DISPLAY now working 2009-10-25 slayoo * src/plotting.cpp, testsuite/test_plotting_misc.pro: CONTOUR: partial support for contouring on maps (+ some tests in test_plotting_misc.pro) 2009-10-24 medericboquien * src/antlr/CharScanner.hpp: Make GDL compile with gcc 4.4. 2009-10-23 m_schellens * Makefile.in, aclocal.m4, configure, gdl.kdevelop, src/GDLInterpreter.cpp, src/Makefile.in, src/antlr/Makefile.in, src/dinterpreter.cpp, src/gdlc.i.g, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/dicom/Makefile.in: Fixed wrong handling of CONTINUE under certain conditions in nested loops 2009-10-23 slayoo * testsuite/test_nestedloop.pro: adding test_nestedloop.pro to the testsuite 2009-10-21 slayoo * src/pro/dicom/Makefile.am, src/pro/dicom/Makefile.in, src/basic_fun.cpp, src/pro/Makefile.am, src/pro/Makefile.in: fixing EXTRA_DIST value in src/pro/Makefile.am; GETENV: error message when called with /ENV and a positional parameter 2009-10-19 slayoo * Makefile.am, Makefile.in, aclocal.m4, config.h.in, configure, configure.in, src/Makefile.am, src/Makefile.in, src/antlr/Makefile.in, src/gdl.cpp, src/pro/Makefile.am, src/pro/Makefile.in, src/pro/dicom/Makefile.am, src/pro/dicom/Makefile.in: installing library .pro files and basic docs during make install; setting default library-routine search path if GDL_PATH/IDL_PATH not defined; welcome message changes 2009-10-18 alaingdl * NEWS: upgrading NEWS file (creating 0.9rc4 entry) * src/libinit.cpp, src/plotting.cpp, src/plotting.hpp: initial import of GET_SCREEN_SIZE(); in CURSOR, verification if we are in X mode * testsuite/test_get_screen_size.pro: initial import of TEST_GET_SCREEN_SIZE, function to be imported in CVS * testsuite/test_voigt.pro: detail in TEST_VOIGT, restoring !p.multi ... 2009-10-18 slayoo * src/gsl_fun.cpp, src/pro/read_ascii.pro: READ_ASCII: printing error message when DATA_START exceeds file length; IMSL_BINOMIALCOEF: sanity check for number of arguments added 2009-10-18 m_schellens * src/basic_pro.cpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructdesc.cpp, src/dstructdesc.hpp, src/dstructgdl.hpp, src/mpi.cpp, src/specializations.hpp, src/typetraits.hpp: Fixed BYTEORDER for STRUCT * src/GDLInterpreter.hpp, src/gdlc.i.g, src/print.cpp, src/prognode.cpp: sync 2009-10-17 slayoo * src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit.cpp, NEWS: IMSL_BINOMIALCOEF: initial import 2009-10-17 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/gdl.cpp, src/gdlc.i.g, src/pro/array_indices.pro: Corrected beahvior of call_fun and call_lfun for RC_ABORT return code. Old behavior lead to endless loop at startup in some conditions. 2009-10-16 m_schellens * src/basic_fun.cpp: Fixed STRMID for missing 3rd parameter * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/gdlc.i.g, src/prognode.hpp: Fixed line tracking for error reporting 2009-10-15 m_schellens * src/initsysvar.cpp: imporved \!VERSION * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/basic_fun_cl.cpp, src/datatypes.cpp, src/dinterpreter.cpp, src/dpro.cpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/gdlexception.cpp, src/print_tree.cpp, src/specializations.hpp: improved line number tracking for error reporting 2009-10-14 slayoo * src/datatypes.cpp: [F,D,L,...]INDGEN: making the values of the resulting array more precise for large arrays (demo: print, (findgen(40000000))[40000000-1]) 2009-10-14 m_schellens * src/basic_fun_jmg.cpp, src/dinterpreter.cpp, src/envt.cpp: Proper ROUTINE_NAMES(/STORE) 2009-10-13 m_schellens * src/deviceps.hpp, src/pro/loadct.pro: Set \!D.TABLE_SIZE from 0 to 256 2009-10-13 slayoo * testsuite/test_multiroots.pro: update of test_multiroots.pro after the two known bugs were fixed * src/basic_fun.cpp, src/basic_pro_jmg.cpp: GCC 3.4.3 compatibility fixes (WAIT, GET_LOGIN_INFO) 2009-10-12 m_schellens * src/basic_fun.cpp, src/str.cpp: Fixed STRMID for negative values of 3rd parameter * src/print.cpp: Corrected output of trailing newline after empty string output for PRINT (and PRINTF) * src/basic_fun_jmg.cpp: Corrected name lookup in ROUTINE_NAMES * src/FMTIn.cpp, src/FMTIn.hpp, src/FMTInTokenTypes.hpp, src/FMTInTokenTypes.txt, src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/FMTParser.cpp, src/gsl_fun.cpp: fixed guarding bug within newton_broyden function set 2009-10-11 alaingdl * src/pro/restore.pro: Revert my change in RESTORE 2009-10-10 m_schellens * src/print.cpp: changed output of trailing newline after empty string output for PRINT (and PRINTF) * src/file.cpp: strip of trailing '/' in FILE_TEST * src/basic_fun.cpp: STRPOS does no longer ignore undefined 3rd parameter * src/basic_fun.cpp, src/basic_pro_jmg.cpp, src/dinterpreter.cpp: Corrected wrong error message due to pre-evaluation of constant functions 2009-10-09 m_schellens * src/basic_pro_jmg.cpp: made WAIT control-c interuptible 2009-10-09 slayoo * src/pro/file_basename.pro: FILE_BASENAME: better handling of empty and space-only strings 2009-10-08 m_schellens * src/basic_fun_jmg.cpp: fixed ARG_NAME keyword in ROUTINE_NAMES for values larger than current level * src/accessdesc.hpp: fixed STRUCT access of non struct struct member (e. g. a={b:0}&print,a.b.c ) * src/default_io.cpp: read ASCII file not ending with newline character 2009-10-08 alaingdl * src/pro/restore.pro: correction RESTORE to be OK with last CMSV lib, delivered 09/05/05 * src/basic_fun.cpp, src/libinit.cpp: re-enter the Length Keyword in N_TAGS; we don't know how to distinguish with /data_length 2009-10-07 slayoo * src/plotting.cpp: ![X,Y].RANGE support in plotting routines (patch from Joanna/cokhavim) 2009-10-07 alaingdl * src/pro/dist.pro: DIST, like many others, should run when call like dist([2,2]) * src/libinit_jmg.cpp: add 2 undocument params in CHECK_MATH() and also keep memory of value, but INT error still not managed * testsuite/test_check_math.pro: test suite for CHECK_MATH() * quick_start_GDL.sh: re-import this script to help beginners to quickly starts GDL with paths (now this script complains if not run properly) * quick_start_GDL.sh: temporary removing of this file to change it into 755 mode * src/math_fun_jmg.cpp: add 2 undocument params in CHECK_MATH() and also keep memory of value, but INT error still not managed 2009-10-05 m_schellens * Makefile.in, aclocal.m4, configure, configure.in, gdl.kdevelop, src/FMTLexer.cpp, src/FMTLexer.hpp, src/FMTParser.cpp, src/FMTParser.hpp, src/FMTTokenTypes.hpp, src/FMTTokenTypes.txt, src/Makefile.in, src/antlr/Makefile.in, src/format.g, src/gdlwidget.hpp, src/ofmt.cpp: Allow neg. width for A format code 2009-10-05 slayoo * src/plotting.cpp: PLOT: adjusting axes when charsize changed (patch from Joanna/cokhavim, tracker item no 2859179) * src/libinit.cpp, src/plotting.cpp: CONTOUR: support for the /OVERPLOT keyword (patch from Joanna/cokhavim) 2009-10-02 slayoo * src/basic_fun.cpp, src/dpro.hpp, src/libinit.cpp, src/pro/file_basename.pro: FILE_BASENAME: support for array argument; ROUTINE_INFO: support for PARAMETERS keyword 2009-10-01 alaingdl * quick_start_GDL.sh: A quick start script for beginners, with easy switch for Valgrind ... * testsuite/test_valgrind.pro: quick check of problems in Contour/Surface with Valgrind: to be extended 2009-09-29 alaingdl * src/plotting.cpp: better freeing/delete in Contour/Surface, thanks to Valgrind 2009-09-26 slayoo * configure, testsuite/test_multiroots.pro: fixing common block name conflict (with RK4) in test_mutiroots.pro; running aclocal/autoconf/automake after version number change 2009-09-26 alaingdl * src/basic_fun.cpp: removing comments/debug info in MEDIAN() * testsuite/test_dims_of_arrays.pro, testsuite/test_outofmem.pro: Exemples of bad inputs when creating arrays ... 2009-09-25 alaingdl * configure.in, src/basic_fun.cpp: Better check of Array dims 2009-09-24 slayoo * ChangeLog, NEWS: updating NEWS and Changelog GDL 0.9rc3: 2009-09-11 m_schellens * testsuite/test_suite.pro, src/GDLInterpreter.cpp, src/envt.hpp, src/gdlc.i.g: Corrected GOTO out of loops within outer blocks * src/datatypes.cpp: corrected array to tag of struct array assignment 2009-09-10 slayoo * src/gsl_fun.cpp: IMSL_CONSTANT: gcc 3.3 compatibility fix * src/basic_fun.cpp, src/basic_fun.hpp, src/file.cpp, src/libinit.cpp: FILE_SEARCH: support for FULLY_QUALIFY_PATH kw.; GET_DRIVE_LIST: initial import; DEVICE: ignoring RETAIN kw. 2009-09-09 slayoo * testsuite/test_constants.pro: IMSL_CONSTANT: new test routine (test_constants.pro) * src/Makefile.in, src/antlr/Makefile.in, src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit.cpp, config.h.in, configure, configure.in, Makefile.in, README, aclocal.m4: - configure/HDF4/HDF5: linking with SZIP if needed (thanks to David Nicholls; previously pointed out in the HDF Group report - http://www.hdfgroup.org/pubs/papers/2009-06_oss_eval.pdf) - HISTOGRAM: using system nexttoward() if available - IMSL_CONSTANT: initial import 2009-09-01 slayoo * src/read.cpp: READF: bugfix - allowing reads from standard input (lun 0) 2009-08-31 slayoo * src/pro/calendar.pro, testsuite/test_histo.pro, src/gsl_fun.cpp: HISTOGRAM: fixing inclusive ranges definition (tracker item no 2846561) + test_histo_basic in test_histo.pro; CALENDAR: always using the C locale (mimicking IDL and avoidin non-printable characters) 2009-08-28 alaingdl * src/pro/spl_init.pro, src/pro/spl_interp.pro: Removing files which have been in fact duplicated then renamed ... * src/pro/spl_init_old.pro, src/pro/spl_interp_old.pro: Renaming the version of SPL_* in GDL syntax to avoid conflits * src/math_fun_ac.cpp, src/math_fun_ac.hpp: Initial import of C++ version of SPL_INIT and SPL_INTERP (y0= and yn_1= not ready) Experimental /help mechanism for Bessel family and SPL_* * src/envt.hpp, src/libinit_ac.cpp: adding e->HELP(*mess, nb_mines) for easy help 2009-08-27 slayoo * src/basic_pro.hpp, src/libinit.cpp, src/print.cpp: PM: initial import 2009-08-26 slayoo * src/base64.hpp, src/basic_fun.cpp, src/basic_fun.hpp, src/gsl_fun.cpp, src/libinit.cpp, src/pro/STATUS, src/pro/imsl_zerosys.pro, testsuite/test_base64.pro: initial import of IDL_BASE64 (+ test routine) and IMSL_ZEROSYS (via NEWTON(..., /HYBRID)) * src/pro/calendar.pro: CALENDAR: initial import 2009-08-23 m_schellens * src/plotting.cpp: applied patches for CONTOUR and XYOUTS from Joanna (cokhavim) * src/antlr/Makefile.in, src/basic_fun.cpp, src/gdlc.i.g, src/gdlc.tree.g, src/GDLInterpreter.cpp, src/GDLTreeParser.cpp, src/Makefile.in, configure, gdl.kdevelop, Makefile.in, README, aclocal.m4: GET_KBRD patch from Fernando Silveira 2009-08-18 slayoo * src/dinterpreter.cpp: fixing two segfault conditions caused by getenv() returning NULL (SHELL and HOME env. variables) 2009-08-15 slayoo * src/basic_fun.cpp, src/basic_fun.hpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/libinit.cpp, src/libinit_jmg.cpp: GET_LOGIN_INFO(): initial import MAKE_ARRAY(): /PTR & /OBJ keywords, /INDEX keyword support for strings HELP: reporting structure data lengths 2009-08-13 slayoo * src/basic_fun.cpp, src/basic_fun.hpp, src/gdl.cpp, src/libinit.cpp: COMMAND_LINE_ARGS(): initial import 2009-08-12 slayoo * src/basic_pro.cpp: SPAWN: fixing segfault when SHELL env. variable not set 2009-08-11 slayoo * src/pro/moment.pro: MOMENT: MAXMOMENT kw support + update of the documentation header 2009-08-09 slayoo * src/plotting.cpp: header-file fix in plotting.cpp (bug introduced in rev. 1.86) * src/initsysvar.cpp, src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp, testsuite/test_angles.pro: - making !DTOR & !RADEG values more precise - ATAN(): - /PHASE keyword support - array-scalar argument combination support - two-complex-arguments case support - precision fixes (atan(float, float) -> float(atan(double, double))) - LL_ARC_DISTANCE(): initial import - new test-routine for angle-related stuff: ATAN(), LL_ARC_DISTANCE(), !PI, !DPI, !DTOR, !RADEG 2009-08-07 slayoo * config.h.in, configure, configure.in, src/basic_fun.cpp, src/basic_fun.hpp, src/libinit.cpp, testsuite/test_url.pro: PARSE_URL() and LOCALE_GET(): initial import + test routine (test_url.pro) 2009-08-01 slayoo * src/basegdl.hpp, src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit.cpp, src/plotting.cpp, testsuite/test_multiroots.pro: NEWTON()/BROYDEN() using GSL multiroots: initial import + test routine 2009-07-30 alaingdl * TODO, src/math_fun_ac.cpp, testsuite/test_besel.pro, testsuite/test_tv.pro: BESEL family functions: non integer order, X neg, Complex, and better managment of arrays dimensions 2009-07-29 alaingdl * testsuite/test_besel.pro: do right calls to Bessel K and Y ! 2009-07-28 slayoo * src/pro/read_xwd.pro: READ_XWD: fixing a conditional statement typo (thaen -> then) 2009-07-25 alaingdl * src/math_fun_gm.cpp, src/math_fun_ng.cpp: Better management of the dimensions of output arrays for several mathematical functions, including BETA and VOIGT. Besel family should be corrected too very soon. Please try that with "test_MathFunctionsDim.pro". Behavior is not exactly the same than IDL (here we do the calculus when [1][n]) * testsuite/test_MathFunctionsDim.pro, testsuite/test_minmax.pro: new test for testing Math Functions Dimensions ... 2009-07-23 slayoo * AUTHORS: adding myself to the AUTHORS file 2009-07-22 slayoo * src/deviceps.hpp, src/devicesvg.hpp, src/devicewin.hpp, src/devicex.hpp, src/devicez.hpp, src/gdlsvgstream.cpp, src/gdlsvgstream.hpp, src/basic_pro.cpp: EXIT: fixing segfault if HOME env. var undefined; SVG: fixing end-of-page bahaviour 2009-07-18 slayoo * src/libinit.cpp, src/plotting.cpp, src/gdlsvgstream.hpp: plotting: partial labelling support, treating OVERPLOT as a warnKeyword, error-message cosmetics; SVG: using svg terminal instead of svgcairo 2009-07-17 alaingdl * src/basic_fun.cpp, src/libinit.cpp: bug in N_TAGS(): rename keyword /LENGTH to /DATA_LENGTH * testsuite/test_ntags.pro: adding a new file (test_ntags.pro) in testsuite/ for testing N_TAGS() (written by T. Mermet) 2009-07-16 slayoo * src/ncdf_var_cl.cpp: NCDF_VARGET: 64-bit fix (SizeT->Dlong for transposed_dim_length[]) + some code cleanup 2009-07-15 slayoo * src/ncdf_var_cl.cpp: NCDF_VARPUT: fixing random behaviour due to type mismatch (size_t -> int) of the 5th argument to nc_inq_var() * src/ncdf_att_cl.cpp: NCDF_ATTPUT: fixing invalid keyword numbering 2009-07-03 slayoo * PYTHON.txt, src/datatypes.hpp, src/pro/STATUS, src/pro/UrgentNeed.txt, HACKING: misc. minor updates in readme/doc files, etc 2009-06-30 alaingdl * testsuite/test_minmax.pro: just changing 755 to 644 atributes for this file * src/pro/strsplit.pro: STRSPLIT: will allow 'str' and ['str'] 1D strings 2009-06-26 alaingdl * testsuite/test_voigt.pro: TEST_VOIGT: better messages * src/pro/path_sep.pro: PATH_SEP: now return good type STRING = '/', before STRING = Array[1] 2009-06-21 slayoo * src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.hpp, src/libinit.cpp, src/specializations.hpp, testsuite/test_minmax.pro: MIN/MAX: DIMENSION keyword support; bugfixes in REVERSE and MEDIAN; dimension-slicing test routine (in test_minmax) 2009-06-19 slayoo * src/ncdf_att_cl.cpp, src/ncdf_dim_cl.cpp, src/ncdf_var_cl.cpp: fixes/code-cleanup in NCDF routines (VARPUT, DIMINQ, ATTGET) 2009-06-14 slayoo * src/devicesvg.hpp, src/gdlsvgstream.cpp, src/gdlsvgstream.hpp: adding SVG-terminal files (missing in previous commit) * src/antlr/Makefile.in, src/libinit.cpp, src/ncdf_var_cl.cpp, src/plotting.cpp, src/typedefs.hpp, INSTALL, Makefile.in, configure, configure.in, src/Makefile.am, src/Makefile.in, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun.hpp, src/basic_fun_cl.cpp, src/datatypes.cpp, src/datatypes.hpp, src/devicez.hpp, src/graphics.cpp, src/initsysvar.cpp, src/io.cpp: - REVERSE: initial import - SYSTIME: correction for /JULIAN flag; conflicting keywords message - SVG terminal (via set_plot, 'svg') - switching off HIGHWATER memory accounting using mallinfo() (too slow) - configure: LDFLAGS from Magick++Config; test if adding X library path helps - ROTATE: better error message - NCDF_VARPUT: fixing uninitialized variable bug 2009-06-09 slayoo * configure, configure.in: configure: correcting (again) the check for presence of numarray * configure, configure.in: configure: correcting the check for presence of numarray * src/basic_pro.hpp, src/io.cpp, src/io.hpp, src/libinit.cpp, src/basic_pro.cpp: FLUSH: initial import (patch from Orion Poplawski) * config.guess, config.sub, configure, configure.in, ltmain.sh: after running libtoolize (tracker item no 2770126) 2009-06-07 slayoo * configure, configure.in: configure: detecting numarray, printing summary information * src/default_io.cpp: 64-bit OSX fix (xdr_long()/xdr_u_long() argument types) - patch from Martin Otte * configure.in, configure: support for linux ppc64 (patch from Orion Poplawski) * src/basic_fun.cpp: MEDIAN: memory leak fix + change DIM into DIMENSION (tracker bug id 1805751) 2009-06-06 slayoo * src/basic_fun_jmg.cpp: fixing datatype (sign) conflict in IDL_SIZE structure assignment (SF tracker bug id 2801342) 2009-05-28 slayoo * src/dinterpreter.cpp, src/gdl.cpp, src/pro/STATUS, MAP_INSTALL: setting history-file lenght in startup file using !EDIT_INPUT + updates in MAP_INSTALL and pro/STATUS 2009-05-26 slayoo * src/antlr/Makefile.in, Makefile.in, configure, configure.in, src/Makefile.in: using nc-config (if present) to determine netcdf LIBS/INCLUDES 2009-05-22 slayoo * src/gdlgstream.cpp, src/gdlgstream.hpp, src/pro/showfont.pro: embedded formatting commands + initial import of SHOWFONT 2009-05-20 slayoo * src/dstructgdl.hpp: removal of one static_cast() which was causing gcc warnings 2009-05-17 slayoo * src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: CALDAT: initial import 2009-05-13 slayoo * src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun.hpp, src/basic_pro.cpp, src/libinit.cpp, src/objects.cpp, config.h.in, configure, configure.in: MEMORY(): initial import + HELP,/MEMORY 2009-05-09 jomoga * src/export.hpp: Zero out arrays of necessary 2009-05-02 slayoo * src/file.cpp, src/file.hpp, src/libinit.cpp, src/objects.cpp: FILE_INFO: initial import 2009-04-30 slayoo * configure, configure.in: better ncurses/curses check, preventing linking both libraries * Makefile.in, aclocal.m4, config.h.in, configure, configure.in, src/Makefile.in, src/antlr/Makefile.in, src/basic_fun.cpp, src/datatypes.hpp, src/file.cpp, src/fmtnode.cpp, src/includefirst.hpp: OpenSolaris compatibility fixes 2009-04-28 slayoo * src/file.cpp, src/file.hpp, src/libinit.cpp: FILE_SAME: initial import * src/file.cpp, src/libinit.cpp: FILE_TEST: handling /NOEXPAND_PATH keyword 2009-04-17 slayoo * src/basic_fun.cpp: STRING: segfault fix for the previous revision * src/basic_fun.cpp: STRING: handling VMS compatibility syntax; demo: help,string(1,"(G)") 2009-04-10 slayoo * src/pro/restore.pro: RESTORE: fixing a typo in variable (filename) name 2009-04-06 slayoo * src/print.cpp: PRINT/PRINTF: handling VMS compatibility syntax; demo: print, "$(F)", 1 2009-03-31 jomoga * src/fftw.cpp: Fix /OVERWRITE with non-global parm bug in FFT 2009-03-24 slayoo * src/basic_pro.cpp: SPAWN: undoing bitwise shit in EXIT_STATUS value; demo: spawn, "exit -1", e=i & help, i * src/dinterpreter.cpp: preventing compiler warning due to ignored return value of a call to system() * src/basic_pro.cpp: SPAWN: setting EXIT_STATUS parameter when nParam==0; demo: spawn, exit=i & help, i 2009-03-23 m_schellens * gdl.kdevelop, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun_cl.cpp, src/basic_fun_jmg.cpp, src/devicex.hpp, src/dimension.hpp, src/envt.cpp, src/envt.hpp, src/gsl_fun.cpp, src/magick_cl.cpp, src/math_fun.cpp, src/math_fun_jmg.cpp, src/plotting.cpp: *** empty log message *** 2009-03-23 slayoo * src/gsl_fun.cpp: HISTOGRAM: setting OMIN/OMAX type according to the type of input data (tracker item no. 2699831) 2009-03-22 slayoo * src/typedefs.hpp, testsuite/test_outofmem.pro: converting bad_alloc exceptions when allocation arrays into GDLExceptions + test_outofmem.pro * src/basic_pro.cpp: OPENW: allowing /APPEND flag for non-existant files (tracker item no 2103871) 2009-03-20 slayoo * testsuite/test_plotting_misc.pro: test routine for various plotting issues 2009-03-19 slayoo * src/plotting.cpp: cosmetic changes to error messages 2009-03-18 slayoo * src/plotting.cpp: recovering changes from rev 1.73 lost in rev 1.76 (Joel: Add support for NORMAL/TO_DEVICE (xy->ll) in CONVERT_COORD) * src/plotting.cpp: XYOUTS: correction for DATA coordinates, demo: !P.MULTI=[0,2,1]&plot,findgen(10)&xyouts,.5,.5,a * src/plotting.cpp: PLOTS: correction for DATA coordinates, demo: !P.MULTI=[0,2,1]&plot,findgen(10)&plots,[0,1],[0,2] * src/gdlgstream.cpp: better default font size for terminals other than X (notably PS) * src/plotting.cpp: CONTOUR: avoiding plplot error messages when filling (shade_max must exceed shade_min) 2009-03-17 m_schellens * src/envt.hpp: gcc 4.4 compatibility (patch from opoplawski) * src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/basic_fun.cpp, src/gdlc.g: allow tag names with leading '\!' 2009-03-17 slayoo * src/ncdf_dim_cl.cpp: NCDF_DIMINQ: accepting long integers as file and dimension ids 2009-03-16 slayoo * src/pro/read_ascii.pro: handling both whitespace and tab as delimiter by default; using FILE_LINES instead of spawning wc * src/basic_fun.cpp: CREATE_STRUCT: accepting excl. mark as a first char of a tag name (tracker item no. 2688389) * src/hdf5_fun.hpp: HDF5 v1.8 compatibility fix (tracker item no. 2680132, help forum thread no. 2988711) 2009-03-15 jomoga * src/objects.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp, src/widget.hpp: Added widget functionality 2009-03-12 jomoga * src/fftw.cpp: Fix auto_ptr bug wite DOUBLE 2009-03-11 slayoo * src/libinit_jmg.cpp: MAKE_ARRAY: keyword name changed from INT to INTEGER * src/gsl_fun.cpp: binsize = (max - min) / (nbins - 1) when NBINS specified with neither MAX nor BINSIZE 2009-03-06 slayoo * src/gsl_fun.cpp: LOCATION keyword set correctly when HISTOGRAM called with NBINS and without BINSIZE or MAX, demo: print, histogram([1.,2.], n=3, l=l) & print, l 2009-03-06 alaingdl * src/devicex.hpp: in TV, managing [1,n,m], [n,1,m] and [n,m,1] cases when TRUE=0 2009-03-05 alaingdl * testsuite/test_tv.pro, INSTALL: testing all permutations for TV 2009-03-03 m_schellens * Makefile.in, aclocal.m4, configure, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/Makefile.am, src/Makefile.in, src/antlr/Makefile.in, src/datalistt.hpp, src/dinterpreter.cpp, src/dpro.cpp, src/dpro.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp: imroved DataListT an empty procedure call by extimated 40% 2009-02-26 m_schellens * gdl.kdevses: removed gdl.kdevses (storing actual kdevelop session details) from repository * src/GDLTreeParser.hpp, src/datatypes.cpp, src/gdlc.tree.g: detect change of type of FOR index variable 2009-02-23 slayoo * src/Makefile.in, src/antlr/Makefile.in, Makefile.in, aclocal.m4, configure: after running aclocal, automake, autoconf * configure, configure.in: determining ImageMagick flags using Magick++-config (tracker entry no 1963366) 2009-02-21 jomoga * src/math_fun_jmg.cpp, src/math_utl.cpp, src/math_utl.hpp, src/plotting.cpp, MAP_INSTALL, config.h.in, configure, configure.in: Add support for new LIBPROJ4 2009-02-18 slayoo * src/plotting.cpp: fixing segfault when contouring NaNs, e.g.: contour, replicate(!VALUES.F_NAN,3,3) 2009-02-10 slayoo * src/pro/file_lines.pro: no longer calling awk to parse wc output (tracker entry no 1980041) 2009-02-10 alaingdl * TODO, src/pro/file_lines.pro: upgrade of ToDo list; bug in FILE_LINES when last line does not have a LF 2009-02-08 m_schellens * gdl.kdevelop, PYTHON.txt: GDL as a python module tested * gdl.kdevses, src/Makefile.am, src/Makefile.in: made python modulw work (not tested) 2009-02-07 slayoo * src/ncdf_var_cl.cpp: reading text data in NCDF_VARGET/NCDF_VARGET1 (tracker bug no 2109502) 2009-02-04 alaingdl * src/hdf_fun.cpp, src/hdf_pro.cpp: data type change (DLong -> int32) in hdf_* (thanks to Sylvester A.) 2009-01-27 alaingdl * src/str.cpp: bug correction in CD for OSX, thanks to Sylvester A. 2009-01-26 m_schellens * src/GDLTreeParser.cpp, src/basic_fun_jmg.cpp, src/dcompiler.hpp, src/gdlc.tree.g: allow common blocks outside subroutines 2009-01-25 m_schellens * ChangeLog, NEWS, configure, configure.in, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/basic_fun_jmg.cpp, src/dcompiler.cpp, src/dcompiler.hpp, src/gdlc.g, src/gdlc.tree.g, src/prognode.cpp, src/prognode.hpp: allow common blocks outside subroutines GDL 0.9rc2: 2009-01-20 m_schellens * src/prognodeexpr.cpp: Copy sibling nodes for constant REF expressions * src/basic_fun_jmg.cpp, src/hdf_fun.cpp, src/hdf_fun.hpp, src/hdf_pro.cpp, src/hdf_pro.hpp, src/libinit_jmg.cpp, src/prognode.hpp, src/prognodeexpr.cpp: Copy sibling nodes for constant REF_CHECK expressions (e. g. REFORM(INDGEN(100),10,10) 2009-01-19 m_schellens * gdl.kdevses, src/basic_fun.cpp, src/libinit.cpp: undocumented BYTSCL accepting three parameters (value,min,max) from Sylvester Arabas 2009-01-12 jomoga * src/basic_fun_jmg.cpp: Fix seg fault in SIZE when structure undefined 2008-12-09 m_schellens * src/gdlexception.hpp, src/str.hpp, src/typedefs.hpp, src/gdlexception.cpp: changed assert to exception for error diagnostics 2008-12-08 m_schellens * gdl.kdevses, src/basic_fun.cpp, src/basic_fun.hpp, src/libinit.cpp, src/typedefs.hpp: fixed REGEXP with /SUBEXPR 2008-12-01 alaingdl * NEWS, src/pro/spl_init.pro, src/pro/spl_interp.pro: initial import for SPL_INIT() and SPL_INTERP(), GDL syntax; thanks to Ph. Prugniel, Lyon's Obs. 2008-11-27 m_schellens * src/basic_fun.cpp: fixed 64bit incompatibility 2008-11-18 alaingdl * src/plotting.cpp: recovering /fill and details in CONTOUR 2008-11-16 m_schellens * gdl.kdevelop, gdl.kdevses, src/antlr/Parser.cpp, src/antlr/TreeParser.cpp, src/basic_fun.cpp: g++ 4.3 compatibility 2008-11-15 m_schellens * src/ncdf_var_cl.cpp, src/plotting.cpp: from Sylwester Arabas 2008-10-19 m_schellens * src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/gdlc.tree.g: ignore something like a=(a=a) (so it is allowed even if a is undefined) * src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/gdlc.tree.g: accept self assignment of undefined variables 2008-10-13 m_schellens * gdl.kdevelop, gdl.kdevses, src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/gdlc.g: fixed print, ', ', FORMAT='(A)' 2008-09-25 alaingdl * src/pro/matrix_multiply.pro: missing ";" 2008-09-22 jomoga * src/basic_fun.cpp: Add SUBEXPR keyword support for STREGEX * src/basic_fun_jmg.cpp, src/libinit_jmg.cpp: Add S_FUNCTIONS/S_PROCEDURES keywords for ROUTINE_NAMES * src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp: Add stub for RESOLVE_ROUTINE 2008-09-06 jomoga * src/typedefs.hpp: GDLArray buffer default set to scalar size rather than to NULL 2008-08-29 m_schellens * src/gdlexception.cpp, src/libinit.cpp, src/prognode.hpp, src/prognodeexpr.cpp: correct transforming of parameter_def siblings wich are constant expressions 2008-08-29 alaingdl * NEWS, src/basic_fun.cpp: in MEDIAN(), managing "width" parameter (by Nicolas Galmiche) [please report bugs to Alain C.] 2008-08-28 m_schellens * src/prognode.cpp, src/prognodeexpr.cpp: corrected the advancing of the actual node pointer (_t) in struct Eval() functions 2008-08-26 m_schellens * src/GDLTreeParser.cpp, src/dpro.cpp, src/dpro.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/libinit.cpp, src/print_tree.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/GDLInterpreter.cpp, gdl.kdevelop, gdl.kdevses: precalculation for (selected) constant parmeter functions. Optimization of lib function calls 2008-08-17 m_schellens * src/prognodeexpr.cpp, src/prognodeexpr.hpp: precalculation for constant arrays composed of constant expressions * src/prognode.hpp, src/prognodeexpr.cpp, src/prognodeexpr.hpp: precalculation for constant expressions and constant arrays, a major improvement * src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/dnode.cpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/prognode.cpp, src/GDLTreeParser.hpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreter.cpp: speedup for constant arrays 2008-08-16 m_schellens * src/prognodeexpr.cpp: removed duplicate ARRAYDEFNode::Eval() 2008-08-15 m_schellens * src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/typedefs.hpp, src/gdlc.tree.g, src/datatypes.hpp, src/gdlc.i.g, src/GDLInterpreter.hpp, src/basegdl.cpp, src/basegdl.hpp, src/GDLInterpreter.cpp, gdl.kdevelop: made memory deallocation more solid 2008-08-09 m_schellens * gdl.kdevelop, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/dstructgdl.hpp, src/gdlc.i.g, src/prognode.cpp, src/prognode.hpp, src/prognodeexpr.cpp, src/typedefs.hpp: interpreter optimization 2008-08-03 m_schellens * src/prognodeexpr.cpp, src/prognodeexpr.hpp, src/real2int.hpp, src/dpro.hpp, src/gdlc.i.g, src/gdlexception.hpp, src/print_tree.hpp, src/prognode.cpp, src/prognode.hpp, src/Makefile.am, src/Makefile.in, src/convert2.cpp, src/dnode.cpp, src/dnode.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterOptimized.cpp, src/GDLInterpreterOptimized.inc, gdl.kdevses: fixed conversion of real to unsigned interger types 2008-08-01 alaingdl * MAP_INSTALL: info about 2 news projections (7, 17); mapping is working for x86_64 2008-07-31 alaingdl * NEWS: what's new ?! * testsuite/test_contour_extra.pro: Testing new capabilities in CONTOUR (Levels=, Nlevels= and /FILL) * src/plotting.cpp: add /FILL and Nlevels= to CONTOUR * src/basegdl.hpp: numbering the TYPE value in comments (no effect) * testsuite/test_fix.pro: test for FIX since type 12, 13 and 15 where found broken by Nicolas for negatives values 2008-07-28 alaingdl * testsuite/test_map.pro: 2 new Projections in examples (TEST_MAP) 2008-07-25 m_schellens * src/gdl.cpp, configure.in, configure: more precise version info on startup 2008-07-25 jomoga * src/hdf_pro.cpp: Fix start/count keyword ordering bug in HDF_SD_ADDDATA * src/plotting.cpp: Add support for NORMAL/TO_DEVICE (xy->ll) in CONVERT_COORD * src/math_utl.cpp: Add support for ROBINSON & SATELLITE projections 2008-07-25 alaingdl * src/GDLInterpreterOptimized.cpp: bug correction 2008-07-23 m_schellens * src/GDLInterpreterOptimized.cpp, src/GDLInterpreterOptimized.inc: adding file 2008-07-17 alaingdl * testsuite/test_rk4.pro, NEWS, TODO: Updated NEWS, TODO list, and testsuite/test_rk4.pro * src/math_fun_ng.cpp, src/math_fun_ng.hpp: Initial import of RK4() version by Nicolas Galmiche * testsuite/test_rk4.pro: Testsuite for RK4 based on Nose-Hoover equation (Thanks to S. Arabas) 2008-07-16 m_schellens * src/GDLInterpreter.hpp, src/Makefile.am, src/Makefile.in, src/antlr/Makefile.in, src/gdl.cpp, src/gdlc.i.g, src/GDLInterpreter.cpp, gdl.kdevses, configure, Makefile.in, aclocal.m4: startup message slightly changed 2008-07-07 jomoga * src/libinit_jmg.cpp, src/math_fun_jmg.cpp, src/math_fun_jmg.hpp: Rename RK4 to RK4JMG 2008-06-10 jomoga * src/datalistt.hpp: Add pop_back() to DataListT class * src/libinit_jmg.cpp, src/math_fun_jmg.hpp, src/math_fun_jmg.cpp: Add rk4_fun * src/envt.hpp: add DelEnv() * src/dpro.hpp: Add DelVar() 2008-06-06 alaingdl * src/math_fun_ng.cpp, src/libinit_ng.cpp: for VOIGT(): add forgotten file "src/libinit_ng.cpp"; correction in "src/math_fun_ng.cpp" * src/antlr/Makefile.in, src/Makefile.in, src/Makefile.am, configure, aclocal.m4, Makefile.in: since 3 new files in src/, need to change src/Makefile.am and propagate changes via (aclocal, autoconf & automake) * NEWS: what's new in 0.9rc1 ?! * src/voigt.cpp, src/math_fun_ng.hpp, src/math_fun_ng.cpp, src/libinit.cpp: initial import of codes for function VOIGT() * src/pro/real_part.pro: initial import of function REAL_PART() in GDL syntax * testsuite/test_voigt.pro: initial import of test suite for VOIGT() 2008-05-28 jomoga * src/fftw.cpp: Fix memory leak 2008-05-05 m_schellens * src/basic_pro.cpp, src/gdlc.g, src/gdlc.tree.g, src/GDLTreeParser.cpp, src/GDLLexer.cpp, src/GDLParser.cpp: changes reported to be necessary for g++ 4.3 2008-05-01 m_schellens * src/antlr/CharScanner.hpp, gdl.kdevelop: g++ 4.3 compatibility * testsuite/test_suite.pro, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/Makefile.in, src/antlr/Makefile.in, src/gdlc.g, src/typedefs.hpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLLexer.hpp, src/GDLParser.cpp, gdl.kdevelop, gdl.kdevses, configure, Makefile.in, aclocal.m4: allow floats without exponent number like 1e 2008-04-30 alaingdl * src/gdljournal.cpp: for JOURNAL: working gethostname() on Mac OS X and Debian ... 2008-04-17 alaingdl * src/pro/factorial.pro: FACTORIAL(): correcting bug when inputs are Integers; managing arrays * testsuite/test_factorial.pro: Testing the FACTORIAL() function 2008-04-06 m_schellens * src/pro/read_ascii.pro: Made for READ_ASCII DATA_START independent of HEADER * src/Makefile.in, src/Makefile.am: removed double linking of plot3d_nr.cpp * src/basic_pro.cpp, gdl.kdevelop, configure.in, ChangeLog, README, config.h.in, configure: 0.9rc1 GDL 0.9rc1: 2008-04-03 m_schellens * src/plot3d_nr.cpp, gdl.kdevelop, configure.in, configure, config.h.in: sync 2008-04-03 alaingdl * src/pro/skip_lun.pro, testsuite/test_skip_lun.pro: SKIP_LUN: initial import; should work for /lines, don't know if other cases (byte) OK * src/devicex.hpp: TV: improved message when 3D array have wrong size 2008-04-02 alaingdl * src/devicex.hpp: in TV, better handling of input arrays with bad dimensions 2008-03-28 alaingdl * NEWS, TODO: revisiting the TODO list * testsuite/test_widgets.pro: basic tests for Widgets. GDL must have been compiled with lib WXWIDGETS * src/pro/smooth.pro: in SMOOTH(), mananing 0- and 1-elem input and bad type (Struc and String) * testsuite/test_cursor.pro: a small change in TEST_CURSOR * testsuite/test_invert_matrix.pro: improved INVERT() testsuite (and benchmark frame included) 2008-03-27 jomoga * src/math_fun_jmg.cpp: Allow sub-pixel interpolation for translations in POLY_2D 2008-03-26 alaingdl * src/devicex.hpp: managing in TV the ORDER keyword (see also !order) * src/basic_pro.cpp: now compiled and work with and without libREADLINE ! 2008-03-20 alaingdl * testsuite/test_surface_basic.pro, testsuite/test_contour_basic.pro: managing non square cases too ! * src/plotting.cpp: correcting SURFACE (when not square, or x,y provided) 2008-03-19 alaingdl * src/plotting.cpp: details in CURSOR; bugs due to zValT in SURFACE * testsuite/test_surface_basic.pro, testsuite/test_contour_basic.pro: test suite for CONTOUR and SURFACE * testsuite/test_cursor.pro, testsuite/test_get_lun.pro: Testing GET_LUN 2008-03-14 alaingdl * src/plotting.cpp, src/real2int.hpp: Recovering the working CURSOR version ! 2008-03-13 jomoga * src/plotting.cpp: Use transpose in SURFACE for rect case 2008-03-13 m_schellens * src/plot3d_nr.cpp: undo last (accidental) commit for plplot3d_nr.cpp * src/typedefs.hpp, src/plotting.cpp, src/real2int.hpp, src/specializations.hpp, src/datatypes.hpp, src/plot3d_nr.cpp, src/convert2.cpp, src/datatypes.cpp, src/arrayindex.hpp: remove (comment out) GDLarray min() max() 2008-03-12 alaingdl * testsuite/test_byte_conversion.pro: Testing conversion to Byte for large Float and Double ... * src/real2int.hpp, src/convert2.cpp: Float2Byte and Double2Byte need a modulus to work fine 2008-03-12 jomoga * src/plot3d_nr.cpp: Port to plplot-5.9 * src/typedefs.hpp: Fix min()/max() functions 2008-03-12 alaingdl * src/plotting.cpp: Updating CURSOR for RDPIX full compatibility * src/basic_pro_jmg.cpp: Working version of WAIT (see test_wait.pro) * testsuite/test_wait.pro: Testing (new version of) WAIT 2008-03-12 m_schellens * src/real2int.hpp, src/convert2.cpp: fix BYTE function overflow behaviour for real values 2008-03-11 m_schellens * src/plotting.cpp, src/format.out.g, src/gdlgstream.cpp, src/plot3d_nr.cpp, src/Makefile.am, src/Makefile.in, src/devicex.hpp, src/format.g, src/FMTParser.hpp, src/FMTTokenTypes.hpp, src/FMTTokenTypes.txt, src/FMTLexer.cpp, src/FMTLexer.hpp, src/FMTOut.cpp, src/FMTOut.hpp, src/FMTOutTokenTypes.hpp, src/FMTOutTokenTypes.txt, src/FMTParser.cpp, src/FMTIn.cpp, src/FMTIn.hpp, src/FMTInTokenTypes.hpp, src/FMTInTokenTypes.txt, ChangeLog, configure: fix FORMAT="(/)" bug 2008-03-11 alaingdl * src/initsysvar.cpp, src/libinit_jmg.cpp: addinf !ORDER system variable (used in TV, TVSCL and TVRD, needed by RDPIX ...) 2008-03-06 jomoga * src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp, src/widget.hpp: Add WIDGET_TEXT * src/objects.cpp: Add WIDGET_TEXT structure * src/libinit_jmg.cpp: Add widget routines * src/libinit.cpp: Remove widget routines 2008-03-03 alaingdl * src/gsl_fun.cpp: improvment of INVERT : one element array, checking if square matrix, String ... * src/pro/matrix_multiply.pro: Initial import of MATRIX_MULTIPLY * testsuite/test_invert_matrix.pro: Extensive tests of INVERT() (matrix inversion) 2008-03-01 alaingdl * NEWS, src/plotting.cpp, src/plotting.hpp: Initial import of CURSOR. Some limitations, help welcome ! * testsuite/test_cursor.pro: two basics tests for CURSOR procedure 2008-02-26 alaingdl * src/libinit.cpp: initial import of interface for CURSOR procedure, re-import of RECALL_COMMANDS() * src/initsysvar.cpp, src/initsysvar.hpp: initial import for !mouse (to be used by CURSOR ...) 2008-02-15 jomoga * src/libinit.cpp: Add additional widget keywords * src/gdlwidget.cpp, src/gdlwidget.hpp, src/widget.cpp, src/widget.hpp: Add WIDGET_INFO & WIDGET_EVENT * src/objects.cpp: Add WIDGET_BUTTON structure * src/gdl.cpp: Remove widget initialization * src/basic_pro.cpp: Add widget initialization 2008-02-15 alaingdl * src/basic_pro.cpp, src/basic_pro.hpp: initial input of code for function RECALL_COMMANDS() and equivalent keyword in HELP proc. * src/libinit.cpp: add function RECALL_COMMANDS() and keyword /RECALL in HELP procedure 2008-02-07 alaingdl * src/libinit.cpp: new keywords for PLOT, CONTOUR, ... * testsuite/test_titles.pro: demo suite for title, subtitle, ... and title formatting capabilities (initial import) * testsuite/test_axis.pro: demo of AXIS capabilities (initial import) * testsuite/test_greek_letters.pro: Greek Letters demo (initial import) 2008-02-01 jomoga * configure, configure.in, src/basic_pro.cpp, src/gdl.cpp, src/gdlwidget.cpp, src/gdlwidget.hpp, src/libinit.cpp, src/widget.cpp, src/widget.hpp: (Very) Preliminary implementation of widgets GDL 0.9pre6: 2007-12-21 alaingdl * INSTALL, NEWS, src/basic_pro.cpp, src/dinterpreter.cpp, src/gdljournal.cpp: history file managment (~/.gdl/history) 2007-12-09 m_schellens * src/basic_fun_jmg.cpp, src/objects.cpp: moved definition of IDL_SIZE into InitStructs function (objects.cpp) 2007-12-07 jomoga * src/basic_fun_jmg.cpp: Initialize dims to 0 in SIZE w/STRUCTURE keyword 2007-12-05 jomoga * src/datatypes.cpp: Fix CShift bug 2007-11-08 m_schellens * src/antlr/Makefile.in, src/Makefile.in, src/assocdata.cpp, src/assocdata.hpp, gdl.kdevelop, gdl.kdevses, configure, Makefile.in, aclocal.m4: added missing new/delete operators for ASSOC types 2007-10-27 m_schellens * ChangeLog, NEWS, gdl.kdevses: sync with tagged 2007-10-22 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/gdlc.i.g: fixed append int to struct array bug * gdl.kdevelop, gdl.kdevses, src/dstructdesc.hpp, src/typetraits.cpp, src/typetraits.hpp: ref count for DStructDesc 2007-10-22 jomoga * src/math_utl.cpp: Change Get to GetTag (structure method) 2007-10-22 m_schellens * src/default_io.cpp, gdl.kdevelop, gdl.kdevses: Fixed reading/writing for struct arrays 2007-10-20 m_schellens * src/typetraits.cpp, src/typetraits.hpp, testsuite/test_suite.pro, src/devicez.hpp, src/dstructdesc.cpp, src/dstructdesc.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/envt.cpp, src/extrat.cpp, src/gdl.cpp, src/gdlc.i.g, src/gdlexception.cpp, src/gdljournal.cpp, src/graphics.hpp, src/ifmt.cpp, src/initsysvar.cpp, src/math_fun_gm.cpp, src/ncdf_att_cl.cpp, src/ncdf_var_cl.cpp, src/plotting.cpp, src/specializations.hpp, src/typedefs.hpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/accessdesc.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/default_io.cpp, src/devicex.hpp, gdl.kdevses: more effective internal memory handling for structs 2007-09-17 m_schellens * src/basic_fun.cpp: fixed: strpos takes any to string convertible type as 2nd parameter * src/datatypes.hpp, src/dstructgdl.hpp, src/arrayindex.hpp: fixed: a[[scalar]] returns one element array 2007-09-12 jomoga * src/ncdf_var_cl.cpp: Fix VARPUT bugs 2007-09-11 jomoga * src/ncdf_var_cl.cpp: Fix input parameter bugs 2007-09-10 jomoga * src/libinit_cl.cpp, src/ncdf_att_cl.cpp, src/ncdf_dim_cl.cpp: Fix various input parameter bugs 2007-09-08 m_schellens * src/basic_op.cpp, src/typedefs.hpp: Fixed AND for FLOAT 2007-09-07 m_schellens * src/basic_op.cpp: Fixed AND bug 2007-09-06 jomoga * src/ncdf_var_cl.cpp: Change var_id to varid 2007-09-05 jomoga * src/ncdf_var_cl.cpp: Allow varid to be variable name in VARGET, VARGET1, VARPUT 2007-09-05 alaingdl * testsuite/test_plot_benchmark.pro: correcting bug when selecting only one test * src/pro/file_basename.pro, src/pro/file_dirname.pro: initial import of File_Basename and File_Dirname, thanks to S. Masson 2007-09-03 m_schellens * src/basegdl.hpp, src/basic_op.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dimension.hpp, src/typedefs.hpp, src/typetraits.hpp, gdl.kdevelop, gdl.kdevses: Introduced GDLArray 2007-09-01 m_schellens * src/ofmt.cpp, src/topython.cpp, gdl.kdevses, src/basic_op.cpp, src/convert2.cpp, src/convol.cpp, src/datatypes.cpp, src/default_io.cpp, src/dstructgdl.hpp, src/ifmt.cpp: channel all data (dd member) access through [] operator 2007-08-30 m_schellens * aclocal.m4, configure, gdl.kdevelop, gdl.kdevses, src/Makefile.in, src/antlr/Makefile.in, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, Makefile.in: custom operator new/delete 2007-08-30 jomoga * src/ncdf_var_cl.cpp: Preliminary fix for INT bug in NCDF_VARGET 2007-08-25 jomoga * src/basic_fun.cpp, src/libinit.cpp: Add support for DIM & DOUBLE keywords in MEDIAN 2007-08-23 jomoga * src/libinit_jmg.cpp, src/gsl_fun.cpp, src/gsl_fun.hpp: Add LA_TRIRED routine 2007-08-21 m_schellens * src/dnode.hpp, src/GDLLexer.hpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/dnode.cpp, src/GDLLexer.cpp, gdl.kdevses: Fixed discrepency in conversion of constant numbers 2007-08-13 jomoga * src/basic_fun.cpp: Fix indexing bug in MEDIAN with EVEN keyword 2007-08-08 m_schellens * NEWS, gdl.kdevses, src/libinit_cl.cpp, src/ncdf_att_cl.cpp, src/ncdf_var_cl.cpp: Applied two patches from Sylwester Arabas 2007-07-09 alaingdl * NEWS, testsuite/test_plot_benchmark.pro: remove 3 duplicated lines in NEWS; bug in "test_plot_benchmark.pro" 2007-07-05 m_schellens * src/basic_pro.cpp, configure.in, configure: sync 0.9pre5 * gdl.kdevses, NEWS, README, configure: edit 2007-06-28 jbronn * configure.in: fixed python configure bug (no sub version numbers, e.g., 2.5 not 2.5.1) 2007-06-25 alaingdl * testsuite/test_plot_benchmark.pro, testsuite/test_plot_linestyle.pro, NEWS: info in NEWS; correction of details in "test_plot_benchmark.pro" and "test_plot_linestyle.pro" 2007-06-23 m_schellens * src/basic_fun.cpp, src/basic_pro.cpp, src/convert2.cpp, src/envt.cpp, src/envt.hpp, src/basegdl.hpp, gdl.kdevses, gdl.kdevelop: Full ON_IOERROR support 2007-06-19 m_schellens * src/io.cpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/basic_fun.cpp, src/basic_pro.cpp, src/gdlc.i.g, gdl.kdevses: ON_IOERROR support 2007-06-19 jomoga * src/export.hpp: Change to GDL_VarCopy() * src/basic_pro_jmg.cpp: Small changes to LINKIMAGE * src/export.hpp: Initial import. 2007-06-18 m_schellens * gdl.kdevelop, src/dinterpreter.cpp, src/gdl.cpp: init readline already before interpreter is instantiated 2007-06-18 alaingdl * src/plotting.cpp: several important changes in "plotting.cpp" -- autoscaling providing better mimic of IDL except when all data are equal -- providing 6 linestyle, managing keyword versus !p.linestyle -- rewriting of "draw_polyline" using <> to improve speed for large datasets * testsuite/test_histo.pro: initial import of a test program for histogram with 2 procedures * testsuite/test_plot_inf_nan.pro, testsuite/test_plot_info.pro, testsuite/test_plot_linestyle.pro, testsuite/test_map.pro, testsuite/test_minmax.pro, testsuite/test_plot_basic.pro, testsuite/test_plot_benchmark.pro: initial import of 5 programs for checking plotting options (/nan now works on Nan and +-Inf; linestyle, "fast" plot) 2007-06-11 m_schellens * gdl.kdevelop, configure, configure.in, README: sync 2007-06-10 m_schellens * src/math_fun_ac.cpp: small corrections 2007-06-07 alaingdl * src/basic_fun.cpp, src/datatypes.cpp: In "basic_fun.cpp", correcting /Nan keyword for Min() and Max() In "datatypes.cpp", managing -/+ Inf and also solve case when NaN is first element. * testsuite/test_minmax.pro: Add testsuite/test_minmax.pro, a serie of tests for Min() and Max() 2007-06-03 m_schellens * src/antlr/Makefile.in, src/terminfo.cpp, src/Makefile.in, configure.in, gdl.kdevses, aclocal.m4, config.h.in, configure, Makefile.in: Some small changes for OS X 2007-06-02 m_schellens * src/basic_fun_jmg.cpp, src/dstructgdl.hpp: use of New( dim, BaseGDL::INIT * src/assocdata.cpp, src/dstructgdl.hpp: Fixed ASSOC for STRUCTS * src/assocdata.cpp, src/basic_fun.cpp: Fixed ASSOC for structs and 1 element arrays * gdl.kdevelop, gdl.kdevses, src/Makefile.in, src/basic_pro.cpp, src/terminfo.cpp: Fixed APPEND keyword for OPENW 2007-05-29 alaingdl * src/libinit_gm.cpp, src/math_fun_gm.cpp, src/math_fun_gm.hpp: Initial import of GAUSSINT() using gsl_sf_erf() * testsuite/test_gammas.pro: removing +-Inf for plotting in test_gammas * NEWS: the new functions (erf, erfc, ...) are added in NEWS 2007-05-25 alaingdl * src/Makefile.am, src/Makefile.in: Makefile should now link to Gregory's files ... (libinit_gm.cpp, math_fun_gm.*) * src/basic_fun_cl.cpp, src/basic_fun_cl.hpp, src/libinit_cl.cpp: Since reworked of Gregory, GAMMA(), LnGAMMA(), IGamma() and BETA() are removed from C. Lee codes. * src/math_fun_gm.cpp, src/math_fun_gm.hpp: Initial import of Gregory's work in C++: ERF(), ERFC(), EXPINT() and ERRORF() (clone of ERF() for old IDL codes) Rework of functions with weakness in many cases: GAMMA(), LnGAMMA(), IGamma() and BETA(). These functions were previously in "basic_fun_cl.*" where they have been removed. (please see related test functions in testsuite/) [tested on x86, x86_64 and MacOS] * src/libinit.cpp, src/libinit_gm.cpp: Initial import of libinit_gm.cpp (Gregory's functions to come) Modification of libinit.cpp to take into account libinit_gm.cpp * testsuite/test_erfs.pro, testsuite/test_expint.pro, testsuite/test_gammas.pro: adding 3 files in testsuite/ for testing: ERF(), ERFC(), GAMMA(), LnGAMMA(), IGamma(), BETA() and EXPINT() Files are : test_erfs.pro test_expint.pro test_gammas.pro * testsuite/test_map.pro: removing useless warning of x86_64 bugs in test_map 2007-05-23 jomoga * src/gsl_fun.cpp: Fix random Poisson for large mu 2007-05-10 jomoga * src/terminfo.cpp: Fix bug with initscr() for batch or ssh mode 2007-05-08 jomoga * src/plotting.cpp: Fix DEVICE & NORMAL bug in xyouts,plots * src/basic_fun_jmg.cpp, src/hdf_fun.cpp, src/hdf_pro.cpp, src/gsl_fun.cpp, src/math_fun_jmg.cpp, src/ncdf_var_cl.cpp, src/plotting.cpp: Change cast in 1st arg to dim() from SizeT to DLong to fix alloc buf on x86_64 2007-05-07 jomoga * src/gsl_fun.cpp: Add 3D support for INTERPOLATE 2007-05-01 jomoga * src/basic_pro.cpp: Allow leading '~/' in OPEN filenames 2007-04-25 jomoga * src/initsysvar.cpp: Apply patch for environment variable GDL_DIR 2007-04-22 m_schellens * src/file.cpp, src/Makefile.in: Fixed FILE_SEARCH multiple repetition of dir in result strings 2007-04-21 alaingdl * src/libinit_ac.cpp: forgotten file for BESELx functions (sorry) 2007-04-20 alaingdl * NEWS: updated "NEWS" for Bessel Functions initial import * src/Makefile.am, src/libinit.cpp, src/math_fun_ac.cpp, src/math_fun_ac.hpp: initial import for BESEL {I,J,K,Y} functions * testsuite/test_besel.pro: initial import for test BESEL {I,J,K,Y} functions 2007-04-18 jomoga * src/math_utl.cpp: Fix CONIC p0lon/lat bug * src/plotting.cpp: Fix !p.multi bugs introduced by map support 2007-04-17 alaingdl * testsuite/test_map.pro: TEST_MAP: checking if data are in !dir; more explicite messages 2007-04-16 jomoga * src/plotting.cpp: Fix PS newpage plotting bug * src/gdlgstream.cpp, src/gdlpsstream.hpp: Remove PS eop() function 2007-04-11 m_schellens * src/math_fun.cpp: All types for SVDC * src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp, configure, configure.in, gdl.kdevses: SVDC 2007-04-07 m_schellens * src/dnode.cpp: short circuit for logical 'or' and 'and' * src/basegdl.cpp, src/basegdl.hpp, src/basic_op.cpp, src/datatypes.hpp, src/dnode.cpp, src/dstructgdl.hpp, src/specializations.hpp: Changed scalar op one_element_array result to array 2007-04-06 m_schellens * src/dcompiler.cpp, gdl.kdevses: Changed order of function/variable lookup 2007-04-02 jomoga * src/basic_fun.cpp: Trap 0 values in dimensions for array generator functions. 2007-03-31 m_schellens * src/dcompiler.cpp: Changed: variable and function ambiguity: variables precede now * src/convert2.cpp, gdl.kdevses: Fixed conversion of empty string to byte 2007-03-29 m_schellens * src/envt.cpp: Fix for HEAP_GC 2007-03-28 jomoga * src/print.cpp: Fix MSG_NOSIGNAL compile problem on OS X 2007-03-28 m_schellens * gdl.kdevses, src/envt.cpp: Handle nested HEAP_GC calls from CLEANUP 2007-03-27 jomoga * NEWS, src/devicex.hpp: Add support for TRUE/CHANNEL keywords in TVRD for X 2007-03-25 m_schellens * src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_op.cpp, src/datatypes.hpp, src/dnode.cpp, src/dstructgdl.hpp, src/specializations.hpp: Speedup for POW 2007-03-24 m_schellens * gdl.kdevses, src/basic_op.cpp, configure, configure.in: added -ltermcap to LDFLAGS in 2007-03-24 jomoga * src/devicez.hpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/gdlzstream.cpp, src/gdlzstream.hpp, src/graphics.hpp, src/plotting.cpp: Add support for bkgr color in ERASE/Fix zbuf fill problem 2007-03-23 jomoga * src/math_utl.cpp: Add support for Oblique Cylindrical projection 2007-03-22 m_schellens * src/envt.cpp, src/print.cpp: fixed printf,-1,var 2007-03-21 m_schellens * src/GDLTreeParser.cpp, src/basic_pro.cpp, src/dnode.cpp, src/gdlc.tree.g: Fixed problem (segfault) compiling subroutines containing only common blocks 2007-03-20 m_schellens * gdl.kdevses, src/devicex.hpp: Fixed: segfault closing X graphic window 2007-03-19 m_schellens * src/basic_pro.hpp, src/envt.cpp: Proper message for HEAP_GC,/VERBOSE * gdl.kdevses, src/envt.cpp: Fixed HEAP_GC (freeing of objects without CLEANUP method) * gdl.kdevses, src/datatypes.cpp: Fixed assignment bug: struct.tag=[one_element_array] 2007-03-19 jomoga * src/pro/value_locate.pro: Remove 'default', Add 'is_defined' and 'is_scalar' * src/math_fun_jmg.cpp: Fix memory overwrite in poly_2d_fun for BYTE arrays 2007-03-19 alaingdl * src/basic_pro.cpp: Try to correct a bug in DEFSYSV when the Variable is not defined (previously, if x is undefined, this will crash : DEFSYSV, '!x', x). 2007-03-19 jomoga * src/libinit.cpp: Change max # params in ERASE to 1 for background color * src/plotting.cpp: Add support for non-X devices in CONVERT_COORD * src/libinit_jmg.cpp: Add TYPE keyword to hdf_sd_attrinfo * src/initsysvar.cpp, src/initsysvar.hpp: Add support for Device system variable access * src/hdf_pro.cpp: Add support for string attributes * src/hdf_fun.cpp: Remove cout statement 2007-03-18 m_schellens * src/envt.cpp, NEWS, src/GDLInterpreter.hpp, src/basic_pro.cpp, src/basic_pro.hpp, src/dstructdesc.hpp, src/envt.hpp, src/gdlc.i.g, src/libinit.cpp, src/math_fun.cpp, src/typedefs.hpp: Added HEAP_GC * configure.in, configure: changed configure.in for checking gsl version 1.4 or higher 2007-03-17 m_schellens * Makefile.in, gdl.kdevses, src/Makefile.in, src/antlr/Makefile.in, src/datatypes.cpp, src/devicex.hpp: Fixed WSET (ProcessDeleted did set actWin) bug 2007-03-15 alaingdl * gsl.m4: initial import for "gsl.m4" which is used by "configure.in" to check the GSL version * configure.in, INSTALL, README, config.h.in, configure: changes in configure.in : checking GSL version (>= 1.4), Zlib presence details in README and INSTALL 2007-03-14 jomoga * src/plotting.cpp: Fix cast in TYPE write in set_mapset 2007-03-09 jomoga * src/gdlpsstream.hpp, src/gdlgstream.cpp: Fix initial blank page for PS output 2007-03-09 alaingdl * src/pro/findfile.pro: bug Keyword --> keyword_set ;-) 2007-03-08 alaingdl * src/pro/findfile.pro: add very basic FINDFILE (as a .pro) since oftenly used in old codes. please consider FILE_SEARCH --provided by GDL-- instead. 2007-03-04 jomoga * src/gzstream.hpp: Initial import. * src/assocdata.cpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_pro.cpp, src/datatypes.hpp, src/default_io.cpp, src/dstructgdl.hpp, src/gdljournal.cpp, src/io.cpp, src/io.hpp, src/specializations.hpp: Add partial support for COMPRESS keyword in OPEN (read only) 2007-03-02 jomoga * configure, configure.in: Check for libfftw3f library 2007-03-02 alaingdl * README: how to really have FFTw in GDL ! 2007-02-28 alaingdl * src/pro/save.pro, testsuite/test_map.pro, testsuite/test_restore.pro, testsuite/test_save.pro, MAP_INSTALL, src/pro/restore.pro: add options and several checks when using SAVE and RESTORE, especially the verbose keyword in RESTORE and the check of unamed variables in SAVE in testsuite/, add TEST_SAVE and TEST_RESTORE for fast basic tests in testsuite/, add TEST_MAP for quicky run a demo for MAP_SET,/continent ! 2007-02-28 jomoga * src/basic_fun_jmg.hpp: Fix title statement * src/hdf_fun.cpp, src/hdf_fun.hpp, src/hdf_pro.cpp, src/hdf_pro.hpp: Transfer include mfhdf.h statement from include to source files * src/libinit_jmg.cpp: Remove dpro.hpp statement 2007-02-27 jomoga * INSTALL, MAP_INSTALL, NEWS: Update libproj4 info 2007-02-25 jomoga * src/libinit.cpp, src/math_fun.cpp: ADD L64 keyword to ROUND 2007-02-21 jomoga * src/libinit_jmg.cpp, src/math_fun_jmg.cpp, src/math_fun_jmg.hpp: Add TRIGRID function * MAP_INSTALL: Initial import. 2007-02-17 m_schellens * src/accessdesc.hpp, src/datatypes.cpp, src/datatypes.hpp: fixed assignment of arrays to struct expressions * gdl.kdevses, src/basic_pro.cpp: allow all types for REPLICATE_INPLACE 2007-02-13 jomoga * src/math_utl.cpp, src/math_utl.hpp, src/plotting.cpp, src/plotting.hpp: Transfer map_init() from plotting.cpp to math_utl.cpp 2007-02-09 jomoga * src/read.cpp: Replace 'push_back' loop with 'append' method in READF 2007-02-08 jomoga * src/basic_fun.cpp: Set default pattern to ' ' in STRTOK for /REGEX 2007-02-06 jomoga * src/gsl_fun.cpp: Speed up INTERPOLATE 2007-02-06 m_schellens * configure.in, gdl.kdevelop, gdl.kdevses, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/arrayindex.cpp, src/arrayindexlistt.hpp, src/basic_pro.cpp, src/basic_pro.hpp, src/dstructgdl.hpp, src/gdlc.tree.g, src/libinit.cpp, configure: REPLICATE_INPLACE from Sergio Gelato 2007-02-06 jomoga * src/pro/read_jpeg.pro: 16-bit image redux 2007-02-05 jomoga * src/pro/read_jpeg.pro: Convert 16-bit image to byte 2007-02-04 jomoga * src/plotting.cpp: Add TO_DEVICE keyword support for ll->xy map conversions * src/libinit_jmg.cpp: Add XSIZE/YSIZE keywords to tvKey 2007-02-02 jomoga * src/plotting.cpp, src/plotting.hpp: Add map support to XYOUTS 2007-02-01 jomoga * src/libinit.cpp: Add 'Z' to xyoutsKey 2007-01-30 m_schellens * Makefile.in, aclocal.m4, config.h.in, configure, gdl.kdevelop, gdl.kdevses, src/FMTIn.cpp, src/FMTIn.hpp, src/FMTInTokenTypes.hpp, src/FMTInTokenTypes.txt, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/Makefile.in, src/antlr/Makefile.in, src/assocdata.cpp, src/basic_fun.cpp, src/datatypes.cpp, src/gsl_fun.hpp, src/ifmt.cpp, src/io.cpp, src/io.hpp: Fixed ASSOC bug (bug tracker ID 1631690) 2007-01-29 jomoga * src/plotting.cpp: Add MERCATOR projection. Fix grid/cont line jumps 2007-01-25 jomoga * NEWS: SOCKET & FFT/DIMENSION keyword support * src/fftw.cpp, src/gsl_fun.cpp: Add support for DIMENSION keyword in FFT 2007-01-19 jomoga * src/basic_fun.cpp, src/basic_pro.hpp, src/io.cpp, src/io.hpp, src/libinit.cpp, src/print.cpp, src/read.cpp, src/basic_pro.cpp: Add SOCKET support 2007-01-07 jomoga * src/basic_fun_jmg.cpp: Rewrite ROUTINE_NAMES without pop_back 2006-12-30 m_schellens * src/basic_pro.cpp, src/libinit.cpp, src/ncdf_att_cl.cpp, src/ncdf_var_cl.cpp: Added the unofficial CALLS keyword to HELP 2006-12-29 m_schellens * gdl.kdevses, src/dcompiler.cpp, src/dcompiler.hpp: purge common blocks before recursive compilation 2006-12-21 jomoga * src/gsl_fun.cpp: Fix 'ny' for vector output 2006-12-19 jomoga * src/pro/ishft.pro: Fix for column vectors 2006-12-19 alaingdl * src/pro/restore.pro, src/pro/save.pro: since EXECUTE is now working in GDL, finalization of CMSVlib checks and users informations in SAVE/RESTORE 2006-12-19 m_schellens * gdl.kdevses, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/basic_fun.cpp, src/gdlc.i.g: Corrected return value of EXECUTE * AUTHORS, src/arrayindex.hpp, src/arrayindexlistt.hpp: made something like a[3,i] scalar 2006-12-18 alaingdl * src/pro/README.txt, src/pro/UrgentNeed.txt: dd direct link to http://idlastro.gsfc.nasa.gov/idllibsrch.html which provides some files from the IDL lib. 2006-12-15 alaingdl * src/pro/restore.pro, src/pro/save.pro: add in headers of these 2 files link to the external CMSV lib. add a test to check wether the CMSV lib. is available or not * src/pro/README.txt, src/pro/UrgentNeed.txt: typo corrected 2006-12-15 m_schellens * gdl.kdevses, src/extrat.cpp: Fixed problem with _EXTRA=undefined keywords 2006-12-14 alaingdl * src/pro/README.txt, src/pro/STATUS, src/pro/UrgentNeed.txt: add README.txt in order to give explainations about the content of this directory. add UrgentNeed.txt in order to indicate clearly the most urgent procedures and is someone has started to work on. update STATUS since I have added few files * src/pro/file_lines.pro: add FILE_LINES, pro file of a function appering in IDL 5.5 2006-12-11 alaingdl * AUTHORS, NEWS: add Alain as tester in AUTHORS' list; typo for integer in NEWS * testsuite/test_colors.pro, testsuite/test_op_elem.pro, testsuite/test_op_power.pro: add 3 test files : one for checking colors, 2 for time test. 2006-12-02 m_schellens * src/ncdf_att_cl.cpp, src/ncdf_var_cl.cpp: Included patch from opoplawski 2006-11-27 jomoga * NEWS: Update NEWS * src/basic_pro.cpp, src/io.cpp, src/io.hpp: Remove streamVMS support; Add variable-length file support * src/gdljournal.cpp: Conform to new Open method * src/default_io.cpp: Remove XDR conversion for BYTE (Not in IDL) * src/basic_pro_jmg.cpp: Remove streamVMS adjustment from POINT_LUN 2006-11-22 jomoga * src/basic_pro.cpp: STREAM keyword only supported in VMS * src/basic_pro_jmg.cpp: Add STREAM file fix to POINT_LUN 2006-11-22 m_schellens * src/gdljournal.cpp, src/initsysvar.cpp, src/initsysvar.hpp, src/libinit.cpp, configure.in, src/GDLInterpreter.cpp, src/basic_pro.cpp, src/gdl.cpp, src/gdlc.i.g: 0.9pre3 2006-11-21 jomoga * src/gdl.cpp: Remove HELP,/INFO message 2006-11-20 jomoga * NEWS: Update NEWS * src/basic_pro.cpp, src/gdljournal.cpp, src/io.cpp, src/io.hpp: Add support for STREAM keyword in OPEN 2006-11-17 jomoga * src/initsysvar.cpp: Change MAP structure tag to UP_NAME * NEWS: Update NEWS * src/basic_pro.cpp, src/libinit.cpp: Add support for PROCEDURES, FUNCTIONS keywords in HELP 2006-11-16 m_schellens * src/datatypes.cpp, src/io.cpp: Fixed XDR bug 2006-11-15 m_schellens * src/basic_fun_jmg.cpp, configure, configure.in: Made REFORM conforming (no folding of all dimensions anymore) 2006-11-13 m_schellens * src/basegdl.cpp, src/typetraits.cpp: proper type names 2006-11-11 m_schellens * configure, configure.in, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/default_io.cpp, src/io.cpp, src/io.hpp, config.h.in: Proper handling of XDR structure, OS X 10.5 compliance 2006-11-10 m_schellens * src/datatypes.cpp: Fixed problem with gcc 4.1.1 error: specialization after instantiation 2006-11-04 jomoga * src/pro/value_locate.pro: Fix concatenation problems 2006-11-04 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, src/gdlc.tree.g, testsuite/test_suite.pro: fixed left assignment (soemthing like: ((a=2))=3) 2006-11-01 m_schellens * src/dnode.cpp, src/dnode.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, testsuite/test_suite.pro, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/arrayindexlistt.hpp, src/GDLLexer.cpp, configure.in, gdl.kdevelop, gdl.kdevses, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, README: fixed op= (+=, *= ...) for indexed expressions on the left side 2006-10-30 jomoga * NEWS: update NEWS 2006-10-25 jomoga * src/basic_pro.cpp: HELP displays compiled pro/fun * src/basic_fun_jmg.cpp: ROUTINE_NAMES returns compiled pro/fun if no keywords specified 2006-10-23 m_schellens * testsuite/test_suite.pro, src/dstructgdl.hpp, src/gdlc.i.g, src/dstructgdl.cpp, src/GDLInterpreter.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/dstructdesc.cpp, Doxyfile, gdl.kdevelop, gdl.kdevses: Allow named struct tags to be converted to first definition in redefiniton (raised an error before) 2006-10-23 jomoga * src/basic_fun_jmg.cpp: Fix seg fault with ROUTINE_NAMES if no keywords 2006-10-20 jomoga * src/gsl_fun.cpp: Implement INPUT keyword in HISTOGRAM 2006-10-19 jomoga * src/pro/value_locate.pro: Modified to return array with same dimensions as second argument 2006-10-18 jomoga * src/gdlgstream.cpp, src/gdlgstream.hpp: Use decomposed value in Background() method 2006-10-17 jomoga * src/libinit.cpp, src/math_fun.cpp: Support for L64 keyword in CEIL/FLOOR * src/plotting.cpp: Fix various COLOR/BACKGROUND bugs 2006-10-16 alaingdl * src/initsysvar.cpp: add a "!GDL" constant system variable in order to easily distinguish IDL and GDL (sometimes we know some tricky differences between both) 2006-10-12 jomoga * src/gdlgstream.cpp, src/gdlgstream.hpp: Use decomposed value in Color method * src/plotting.cpp: Get # of colors from DEVICE system variable * src/devicex.hpp: Change default N_COLORS to 16777216 2006-10-11 jomoga * src/dnode.cpp: Fix AdjustType bug (1st operand determines type) 2006-10-11 alaingdl * testsuite/test_uf77.pro: add a demo file in order to test /f77unformatted writeu/readu 2006-10-08 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, gdl.kdevses: Changed structs to be arrays 2006-10-05 m_schellens * NEWS: update NEWS * src/gdlc.i.g, src/pro/deriv.pro, src/pro/smooth.pro, testsuite/test_deriv.pro, testsuite/test_smooth.pro: Added SMOOTH and DERIV from Alain Coulais * src/gdlc.i.g, src/GDLInterpreter.cpp, src/dcompiler.cpp, gdl.kdevses: Fixed bug with FOR statement when the loop contains EXECUTE and within this a new variable is created 2006-09-28 jomoga * src/pro/ishft.pro: Get name right in header * src/pro/ishft.pro: Initial import 2006-09-27 m_schellens * src/ofmt.cpp: Fixed I format code zero padding (I0x formats are not supported) * src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/math_fun.cpp: log10( valarray<...>) for ALOG10, gcc 3.2.x compliance for ALOG and ALOG10 2006-09-27 jomoga * src/Makefile.in: Recommit V 1.47 * src/antlr/Makefile.in: Recommit V 1.32 * src/Makefile.in, src/antlr/Makefile.in, src/plotting.cpp: Fix bug [1560714] (PLOTS log scaling)plotting.cpp 2006-09-26 m_schellens * src/FMTOut.cpp, src/basic_pro.cpp, src/format.out.g: Fixed 'z' format code * src/Makefile.in, src/antlr/Makefile.in, src/basic_fun.cpp, src/plotting.cpp, Makefile.in, configure, configure.in: Fixed offset without dim1,... for type conversion functions (BYTE, FIX, LONG, ...) 2006-09-26 jomoga * src/GDLInterpreter.cpp: Add support for ON_IOERROR 2006-09-25 jomoga * config.h.in, configure, configure.in: Fix 64-bit OS check 2006-09-24 jomoga * src/basic_fun_jmg.cpp: Fix st_atim bug [1563930] 2006-09-22 m_schellens * configure.in, config.h.in, configure, gdl.kdevses, src/plotting.cpp: Handle something like PLOT,/XLOG,/YLOG,[x,x],[y,y] 2006-09-21 jomoga * src/specializations.hpp: Install Patch [ 1561592 ] * src/basic_fun_jmg.cpp: Add ATIME, CTIME, MTIME to FSTAT 2006-09-20 jomoga * src/typedefs.hpp: Make SizeT typedef 32/64 OS-dependent * configure.in, config.h.in, configure: Check for 64-bit OS 2006-09-19 jomoga * src/plotting.cpp: Change wIx from int to DLong in wdelete 2006-09-18 m_schellens * src/arrayindex.hpp, src/arrayindexlistt.hpp, src/default_io.cpp, src/dstructgdl.hpp, gdl.kdevelop: Fixed boundary check for ArrayIndexListMultiT ALLONE 2006-09-17 m_schellens * src/FMTIn.cpp, src/FMTOut.cpp, src/format.in.g, src/format.out.g, gdl.kdevelop, gdl.kdevses: fixed T format code (starts from 1) 2006-09-16 m_schellens * src/FMTOut.cpp, src/FMTOut.hpp, src/convert2.cpp, src/format.g, src/format.out.g, src/ofmt.cpp, src/str.cpp: Fixed T format code (now count from 1, before fomr 0) 2006-09-15 jomoga * src/plotting.cpp: Add support for ORTHOGRAPHIC,STEREO,AZIMUTHAL,GNOMIC,CONIC,LAMBERT,AITOFF projections * src/devicex.hpp, src/devicez.hpp, src/image.hpp, src/libinit_jmg.cpp: Add support for CHANNEL keyword in TV/TVSCL 2006-09-14 m_schellens * src/ofmt.cpp: Fixed I format code (removed zero padding) * src/datatypes.cpp, src/dstructgdl.cpp, gdl.kdevses, src/FMTIn.hpp, src/default_io.cpp, src/format.in.g, src/gdlc.i.g, src/gdlexception.hpp, src/io.cpp, testsuite/test_suite.pro: Fixed assignment 'at' (one dim index: var[0]=...) for multi dim var 2006-09-13 jomoga * src/plotting.cpp: Change INF to NAN in CONVERT_COORD * src/basic_fun_jmg.cpp: Fix REFORM with 1 parameter 2006-09-12 m_schellens * src/convert2.cpp: Removed warning message for converting empty string to DOUBLE * src/default_io.cpp: Made read strings without FORMAT handle DOS mode files 2006-09-08 jomoga * src/basic_fun_jmg.cpp: Fix ROUTINE_NAMES GetPar (STORE) bug 2006-09-07 m_schellens * src/accessdesc.hpp, src/basic_fun.cpp: tags containing one element are skiped from dimension 2006-09-06 m_schellens * src/basic_fun.cpp: Minor chnages to CREATE_STRUCT * src/basic_pro.cpp: Output of HELP,/STRUCT for struct arrays 2006-09-04 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g, testsuite/test_suite.pro, gdl.kdevses: Fixed: CASE with empty statement list 2006-09-03 jomoga * src/basic_fun_jmg.cpp: Fix structure store bug in ROUTINE_NAMES * src/basic_fun.cpp: Structure variable bug fixes * src/GDLInterpreter.cpp: Make new structure single-element array rather than scalar * src/libinit.cpp, src/basic_pro.cpp: Add support for OUTPUT in HELP 2006-09-02 jomoga * src/pro/str_sep.pro: Initial import 2006-09-01 jomoga * src/pro/restore.pro, src/pro/save.pro: Add GPL license 2006-08-31 jomoga * src/basic_fun.cpp: Fix CREATE_STRUCTURE for undefined name 2006-08-30 jomoga * src/basic_fun_jmg.cpp: Add /STRUCTURE to SIZE * src/initsysvar.cpp, src/initsysvar.hpp: Add !CPU system variable * src/pro/write_png.pro: Fix /ORDER bug * src/pro/map_clip_set.pro: Initial import 2006-08-25 m_schellens * gdl.kdevses, src/basic_pro.cpp: CLOSE,/ALL now also frees LUNs 2006-08-25 jomoga * config.h.in: Preliminary support for map projections 2006-08-24 jomoga * INSTALL, NEWS, src/libinit_jmg.cpp, src/plotting.cpp, src/plotting.hpp, configure, configure.in: Preliminary support for map projections 2006-08-23 jomoga * src/pro/last_item.pro, src/pro/value_locate.pro: Inital import * NEWS: Support for XDR I/O & POLY_2D * src/basegdl.cpp, src/basegdl.hpp, src/basic_pro.cpp, src/datatypes.hpp, src/default_io.cpp, src/dstructgdl.hpp, src/gdljournal.cpp, src/io.cpp, src/io.hpp, src/print.cpp, src/specializations.hpp, src/assocdata.cpp: Support for XDR I/O 2006-08-06 m_schellens * src/extrat.cpp: Made empty _EXTRA values undefined * src/arrayindex.hpp, gdl.kdevses: made [*] to return one-dim index (not preserve indices) 2006-08-03 jomoga * src/math_fun_jmg.cpp: Fix perfect square test for coeff array 2006-08-02 jomoga * src/initsysvar.cpp, src/initsysvar.hpp: Add !MAP system variable 2006-07-30 m_schellens * gdl.kdevses, src/extrat.cpp, testsuite/test_suite.pro: Fixed _EXTRA with undefined variable bug 2006-07-29 m_schellens * src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/arrayindex.cpp, src/gdlc.tree.g: Fixed indexing with loop variable bug 2006-07-27 jomoga * src/math_fun_jmg.cpp: Fix SQRT cast bug 2006-07-18 jomoga * src/libinit_jmg.cpp, src/math_fun_jmg.cpp, src/math_fun_jmg.hpp: Add POLY_2D function 2006-07-08 m_schellens * src/basic_fun.cpp: Fixed N_PARAMS for member subroutines * src/basic_fun.cpp: Allow structs for KEYWORD_SET (always 1) 2006-06-24 m_schellens * gdl.kdevses, src/GDLTreeParser.hpp, src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basic_pro.cpp, src/datatypes.cpp, src/file.cpp, src/gdlc.tree.g: Indexing bug (arg[0,0]) and STRUCT_ASSIGN bug 2006-06-20 jomoga * src/basic_fun.cpp, src/libinit_mes.cpp, src/pro/strsplit.pro: Add REGEX keyword support to strtok * src/basic_fun_cl.cpp: Fix gsl_exp bug (1509339) 2006-06-16 m_schellens * gdl.kdevses, src/GDLParser.cpp, src/gdlc.g: Fixed named struct syntax bug 2006-06-14 m_schellens * src/datatypes.hpp, src/dnode.cpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_op.cpp: fixed binary operator results if one operand is an one element array 2006-06-13 m_schellens * src/basic_op.cpp, src/specializations.hpp: Allow EQ and NE for ptr and objects * INSTALL, PYTHON.txt, README: Corrected spelling (pyhton -> python) * src/basic_fun.cpp, src/libinit.cpp, NEWS, gdl.kdevelop, gdl.kdevses: INTEGER Keyword for TOTAL (by Erin Sheldon) 2006-06-06 m_schellens * src/gdlc.g, src/GDLLexer.cpp: Fixed U suffix for decimal constants 2006-06-04 m_schellens * gdl.kdevses, src/convert2.cpp: Suppress warning for conversion of null string 2006-05-31 m_schellens * README, gdl.kdevses: Notification for the need of development packages * src/ofmt.cpp: Correct zero padding for I format 2006-05-22 m_schellens * configure, configure.in, gdl.kdevses: Make configure look in additional direcotries fro HDF(4/5) includes and libs 2006-05-19 m_schellens * src/basic_pro.cpp: Raise error for XDR keyword for OPEN procedures * src/plotting.cpp: Fixed XYOUTS [XY]LOG keyword * NEWS, gdl.kdevelop, gdl.kdevses, src/plotting.cpp: sync 2006-05-17 retsil * src/pro/dicom/gdlffdicom__assoc__define.pro, src/pro/dicom/gdlffdicom__define.pro, src/pro/dicom/gdlffdicom__dictionary.pro, src/pro/dicom/gdlffdicom_copy_lun.pro, src/pro/dicom/gdlffdicom_date.pro, src/pro/dicom/gdlffdicom_time.pro, src/pro/dicom/gdlffdicom_trim.pro: Adding code for the GDLffDICOM class. This class reads and writes to DICOM files. 2006-05-16 m_schellens * README, src/initsysvar.cpp: Added GDLffDICOM object * gdl.kdevses, src/gdlgstream.cpp, src/gdlgstream.hpp, src/plotting.cpp, gdl.kdevelop: Joel: fixed \!P.MULTI bug 2006-05-10 m_schellens * src/accessdesc.hpp, configure, Makefile.in, aclocal.m4: removed rank restrictions for struct assignment * src/Makefile.in, src/antlr/Makefile.in, src/gdl.cpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/plotting.cpp, testsuite/test_suite.pro, configure.in, gdl.kdevelop, ChangeLog, HACKING, INSTALL, NEWS, README, configure: syncing CVS with release 2006-04-05 jomoga * src/gdlgstream.cpp, src/gdlgstream.hpp: Fix color='ff'x bug * src/plotting.cpp: Fix oplot P.MULTI bug/Fix color='ff'x bug 2006-03-31 m_schellens * many changes (ChangeLog incomplete due to CVS server problems) * please see NEWS for an overview GDL 0.8.11: 2005-10-17 m_schellens * AUTHORS, HACKING, INSTALL, NEWS, README, src/basic_pro.cpp: update 2005-10-14 m_schellens * src/arrayindex.hpp: sync 2005-10-13 m_schellens * gdl.kdevelop, src/basic_pro.cpp, src/gdljournal.cpp, src/io.cpp, src/io.hpp: Added F77_UNFORMATTED error message (OPEN) 2005-10-12 m_schellens * src/assocdata.cpp, src/assocdata.hpp, src/envt.hpp, src/arrayindex.hpp: Some bugfixes 2005-10-11 m_schellens * gdl.kdevelop, src/FMTIn.cpp, src/FMTLexer.cpp, src/FMTOut.cpp, src/FMTParser.cpp, src/GDLInterpreter.cpp, src/Makefile.am, src/Makefile.in, src/datatypes.cpp, src/dcompiler.cpp, src/format.g, src/format.in.g, src/format.out.g, src/gdlc.i.g: Fixed: some shadowed variables 2005-10-07 medericboquien * NEWS: Adding GAUSS_PDF and GAUSS_CVF functions 2005-10-05 m_schellens * src/GDLInterpreter.cpp, src/Makefile.in, src/arrayindexlistt.hpp, src/datatypes.hpp, src/dcompiler.cpp, src/fftw.cpp, src/libinit_jmg.cpp, src/math_fun.cpp, config.h.in, configure, configure.in, gdl.kdevelop: Fixed array indexing error 2005-10-04 jomoga * NEWS, configure.in, src/Makefile.in, src/libinit_jmg.cpp: Support for FFTW * src/fftw.cpp, src/fftw.hpp: Initial import 2005-10-03 m_schellens * src/basic_fun_cl.cpp, src/libinit.cpp, src/math_fun.cpp, src/math_fun.hpp, src/new.cpp, src/new.hpp: Added GAUSS_PDF and GAUSS_CVF functions. More precise SYSTIME function 2005-09-30 m_schellens * src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun.hpp, src/datatypes.cpp, src/datatypes.hpp, src/libinit.cpp: Added ROTATE function * src/basic_fun.cpp, src/ofmt.hpp: fixed F FORMAT bug * src/arrayindex.cpp, src/arrayindexlistt.hpp, NEWS: fixed array index bug 2005-09-29 m_schellens * src/basic_fun.cpp, src/basic_fun.hpp, src/gdlc.i.g, src/libinit.cpp: Added CREATE_STRUCT function * src/arrayindex.cpp, src/arrayindex.hpp, src/arrayindexlistt.hpp: array index bugfix 2005-09-28 jomoga * src/plotting.cpp: Fix plvpor bug in CONTOUR 2005-09-27 m_schellens * src/arrayindex.cpp: add file * src/GDLTreeParser.hpp, src/Makefile.am, src/Makefile.in, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/dnode.hpp, src/dstructgdl.cpp, src/gdlc.i.g, src/gdlc.tree.g, src/GDLInterpreter.cpp, src/GDLTreeParser.cpp: scalar array index optimization 2005-09-26 m_schellens * Makefile.in, aclocal.m4, configure, gdl.kdevses, src/GDLInterpreter.hpp, src/Makefile.in, src/antlr/Makefile.in, src/gdlc.i.g, src/plotting.cpp: Fixed recognition of PLOT,/[XY]LOG keywords 2005-09-24 m_schellens * Makefile.in, aclocal.m4, config.h.in, configure, configure.in, gdl.kdevelop, gdl.kdevses, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/Makefile.in, src/antlr/Makefile.in, src/dinterpreter.cpp, src/extrat.hpp, src/gdlc.i.g, src/initsysvar.cpp: Added DIR system variable 2005-09-22 m_schellens * src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/Makefile.am, src/Makefile.in, src/accessdesc.hpp, src/antlr/Makefile.in, src/arrayindex.hpp, src/arrayindexlistt.hpp, src/assocdata.cpp, src/datatypes.cpp, src/dnode.cpp, src/dstructgdl.cpp, src/gdlc.tree.g, src/typedefs.hpp, Makefile.in, aclocal.m4, configure, gdl.kdevelop: array index optimization 2005-09-20 m_schellens * gdl.kdevses, src/Makefile.in, src/antlr/Makefile.in, src/arrayindex.hpp, src/gdlc.tree.g, src/math_fun.cpp, Makefile.in, aclocal.m4, configure: optimizations * Makefile.in, aclocal.m4, configure, src/Makefile.in, src/antlr/Makefile.in, src/arrayindex.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/dimension.hpp: array index optimization 2005-09-19 m_schellens * src/dimension.hpp: dimension optimization * configure, configure.in, src/envt.cpp, src/envt.hpp, src/extrat.cpp: Subroutine call optimization (EnvT) 2005-09-18 m_schellens * src/dinterpreter.cpp, src/gdl.cpp: Make GDL handle non-tty input. * Makefile.in, aclocal.m4, configure, gdl.kdevelop, gdl.kdevses, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/Makefile.in, src/antlr/Makefile.in, src/arrayindex.hpp, src/basic_fun.cpp, src/basic_pro.cpp, src/dcompiler.cpp, src/dcompiler.hpp, src/dinterpreter.cpp, src/dnode.cpp, src/dnode.hpp, src/dpro.hpp, src/envt.cpp, src/envt.hpp, src/extrat.cpp, src/extrat.hpp, src/gdl.cpp, src/gdlc.i.g, src/gdlc.tree.g: EnvT optimization. Startup file is not prepended with users home anymore. 2005-09-16 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basegdl.cpp, src/basegdl.hpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dinterpreter.cpp, src/dpro.cpp, src/dpro.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/libinit.cpp, src/math_fun.cpp: Fixed EXIT_STATUS for SPAWN procedure 2005-09-14 m_schellens * src/GDLInterpreter.cpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/basic_op.cpp, src/datatypes.cpp, src/gdlc.tree.g, src/plotting.cpp, src/pro/read_pict.pro: Fixed scalar +(operator) array bug 2005-09-13 m_schellens * src/datatypes.cpp: Fixed problem with New( dim, BaseGDL::INIT) 2005-09-12 m_schellens * configure, src/Makefile.in, src/antlr/Makefile.in, src/basic_fun.cpp, src/libinit.cpp, src/new.cpp, src/new.hpp, Makefile.in, NEWS, aclocal.m4: Fixed bug in COMPLEX(arr,scalar) 2005-09-11 m_schellens * Makefile.in, aclocal.m4, configure, gdl.kdevses, src/Makefile.in, src/antlr/Makefile.in, src/arrayindex.hpp, src/dnode.cpp, src/dnode.hpp, src/gdlc.tree.g: Fixed ^ operator bug. 2005-09-09 jomoga * src/devicex.hpp: Fix closed window core dump * src/math_fun_jmg.cpp: Fix ambiguous sqrt call in radon 2005-09-09 m_schellens * src/GDLInterpreter.cpp, src/arrayindex.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/gdlc.i.g: AssignAt optimization * Makefile.in, aclocal.m4, configure, src/GDLInterpreter.cpp, src/GDLLexer.cpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/Makefile.in, src/antlr/Makefile.in, src/arrayindex.hpp, src/basegdl.cpp, src/basegdl.hpp, src/datatypes.cpp, src/datatypes.hpp, src/dnode.cpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/libinit.cpp, src/math_fun.cpp, src/pro/test_suite.pro: Index optimization 2005-09-08 m_schellens * gdl.kdevelop, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/arrayindex.hpp, src/dinterpreter.cpp, src/dnode.cpp, src/dnode.hpp, src/gdlc.tree.g: comp_assign_expr (+=,*=,...) fix. 2005-09-07 m_schellens * configure, src/GDLInterpreter.cpp, src/datatypes.cpp, src/gdlc.i.g, src/pro/test_suite.pro: NewIx... return statement fix * src/antlr/Makefile.in, Makefile.in, aclocal.m4, configure, configure.in, gdl.kdevelop, gdl.kdevses, src/Makefile.in, src/arrayindex.hpp, src/basic_op.cpp, src/datatypes.cpp: Index optimization * src/GDLInterpreter.cpp, src/accessdesc.hpp, src/arrayindex.hpp, src/assocdata.cpp, src/assocdata.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/gdlc.i.g, src/typedefs.hpp: Indexing optimization. 2005-09-05 m_schellens * NEWS, src/basic_fun.cpp, src/basic_fun.hpp, src/libinit.cpp: STRCMP function * NEWS, src/GDLInterpreter.cpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/basic_op.cpp, src/datatypes.cpp, src/dnode.cpp, src/dnode.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/specializations.hpp: unary minus optimization for constants 2005-09-01 m_schellens * Makefile.in, aclocal.m4, configure, gdl.kdevses, src/GDLInterpreter.cpp, src/GDLParser.cpp, src/GDLTreeParser.cpp, src/Makefile.in, src/antlr/Makefile.in, src/arrayindex.hpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_op.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dnode.cpp, src/dstructgdl.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g: Operator optimizations. 2005-08-30 jomoga * src/libinit_jmg.cpp, src/math_fun_jmg.cpp, src/math_fun_jmg.hpp: Add support for RADON function * src/initsysvar.cpp: Add MAP system variable 2005-08-25 m_schellens * gdl.kdevelop, gdl.kdevses, src/basegdl.cpp, src/basegdl.hpp, src/basic_op.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dnode.cpp: Optimize ^ r expressions * src/arrayindex.hpp: array index optimization 2005-08-24 m_schellens * src/basegdl.hpp, src/basic_op.cpp, src/dnode.cpp: Significant speedup for complex^int 2005-08-23 m_schellens * Makefile.in, aclocal.m4, configure, gdl.kdevelop, gdl.kdevses, src/arrayindex.hpp: Fixed array index memory leak * README, src/basic_op.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dnode.cpp, src/dnode.hpp: Avoid copying in r_expr 2005-08-22 m_schellens * src/Makefile.in, src/antlr/Makefile.in, src/dnode.cpp, src/dnode.hpp, src/gdlc.i.g: Avoid copying in r_expr 2005-08-19 m_schellens * src/basic_op.cpp, src/dinterpreter.cpp, src/dnode.cpp, gdl.kdevses: Cleaned up right expression evaluation 2005-08-18 m_schellens * src/GDLInterpreter.cpp, src/GDLTreeParser.cpp, src/basic_fun.cpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/dnode.cpp, src/dnode.hpp, src/dpro.hpp, src/gdlc.i.g: Introduced heterogenous AST 2005-08-17 m_schellens * src/basic_fun.cpp, src/dinterpreter.cpp, src/dnode.cpp, src/dnode.hpp, src/gdlc.tree.g, gdl.kdevelop: transfer files 2005-08-16 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/gdlc.g, src/gdlc.i.g, src/pro/test_suite.pro, configure: Fixed || operator bug * configure, configure.in: FC4 complicance for netCDF HDF4 and Magick * INSTALL, Makefile.in, NEWS, README, aclocal.m4, configure, src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/Makefile.in, src/antlr/Makefile.in, src/gdlc.g, src/print_tree.cpp: Fixed LOG_NEG (~) operator syntax bug. 2005-08-14 m_schellens * src/arrayindex.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, gdl.kdevelop, gdl.kdevses, src/basegdl.cpp, src/basegdl.hpp, src/dstructgdl.hpp, src/specializations.hpp: WHERE optimization 2005-08-11 m_schellens * src/Makefile.in, src/antlr/Makefile.in, src/arrayindex.hpp, src/datatypes.cpp, Makefile.in, aclocal.m4, configure, gdl.kdevses, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/accessdesc.hpp, src/dcompiler.cpp, src/dcompiler.hpp, src/dnode.cpp, src/dnode.hpp, src/gdlc.i.g, src/gdlc.tree.g: Array index optimization 2005-08-09 m_schellens * src/arrayindex.hpp, src/datatypes.cpp, src/dimension.hpp, src/dstructgdl.cpp, src/initct.cpp: Optimization for InsAt (b[0]=a) * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/Makefile.in, src/antlr/Makefile.in, src/arrayindex.hpp, src/datatypes.cpp, src/dcompiler.cpp, src/gdlc.i.g, configure, Makefile.in, aclocal.m4: Avoid extra copying in replace assignment 2005-08-07 m_schellens * src/antlr/Makefile.in, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/Makefile.in, src/basic_op.cpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, configure.in, gdl.kdevses, configure, Makefile.in, aclocal.m4: Avoid additional copy in replace assignment 2005-08-05 m_schellens * src/plotting.cpp, src/dpro.cpp, gdl.kdevses: Fixed AXIS bug 2005-08-03 jomoga * src/plotting.cpp: Fix plot/oplot/erase bugs 2005-07-29 m_schellens * src/dpro.cpp, src/gdlc.i.g, gdl.kdevses, src/GDLInterpreter.cpp: Fixed bug which made GDL crash on empty subroutines 2005-07-27 jomoga * src/libinit.cpp, src/plotting.hpp, src/plotting.cpp: Preliminary version of CONTOUR 2005-07-26 m_schellens * src/format.g, src/plotting.cpp: Fixed PLOT/OPLOT no erase bug. 2005-07-25 jomoga * src/devicex.hpp: Fix memory leak in plimage_gdl 2005-07-25 m_schellens * src/pro/regression-total.pro, src/FMTLexer.cpp, src/format.g: Fixed H format code. * src/pro/dist.pro, src/pro/kurtosis.pro, src/pro/mean.pro, src/pro/meanabsdev.pro, src/pro/moment.pro, src/pro/skewness.pro, src/pro/stddev.pro, src/pro/strsplit.pro, src/pro/variance.pro, NEWS: NAN keyword for MOMENT related functions. * src/Makefile.in, src/antlr/Makefile.in, src/basic_fun.cpp, src/basic_pro.cpp, src/basic_pro.hpp, src/dimension.hpp, src/gdljournal.cpp, src/initsysvar.cpp, configure, Makefile.in, aclocal.m4: Added keywords: NAN for TOTAL, STRUCTURES fro HELP. Small correction for JOUNRAL. 2005-07-21 jomoga * src/plotting.cpp: Fix xrange plot bug 2005-07-14 m_schellens * src/default_io.cpp, src/io.hpp, gdl.kdevelop, gdl.kdevses: EOF function: EOF status was not reset properly. Fixed. 2005-07-12 m_schellens * src/pro/primes.pro: file removal * README: Update HDF5 and netCDF problems. * src/hdf5_fun.cpp, gdl.kdevelop, gdl.kdevses: Compliance with HDF 1.6.4 2005-07-12 c_lee * src/pro/poly.pro: POLY function to calculate polynomials 2005-07-10 m_schellens * src/gsl_fun.cpp, gdl.kdevelop, gdl.kdevses: Fixed INTERPOLATE bug. * src/Makefile.in, src/antlr/Makefile.in, src/basic_pro.cpp, gdl.kdevelop, gdl.kdevses, configure, Makefile.in, aclocal.m4: Fixed HELP,/LIB: number of printed functions. GDL 0.8.10: 2005-07-08 m_schellens * INSTALL: INSTALL update * src/basic_op.cpp: POW optimization 2005-07-07 m_schellens * src/basic_op.cpp: Changed raise to power calculation for integral types * src/antlr/Makefile.in, src/basic_op.cpp, src/convert2.cpp, src/default_io.cpp, src/gdlc.i.g, src/initsysvar.cpp, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/Makefile.am, src/Makefile.in, configure.in, configure, INSTALL, Makefile.in, PYTHON.txt, README, aclocal.m4: Fixed inconistency with return type of ^ operator for integer types 2005-07-06 m_schellens * src/basic_fun_jmg.cpp, src/dstructdesc.hpp: VALUE keyword for MAKE_ARRAY. 2005-07-05 m_schellens * src/basic_fun_cl.cpp: Extensions to LEGENDRE. Fixed memory leaks 2005-07-03 m_schellens * gdl.kdevelop, gdl.kdevses, src/ncdf_var_cl.cpp: remove some diagnostic prints. 2005-07-02 m_schellens * src/libinit_cl.cpp, src/magick_cl.cpp: 4 parameters for NCDF_ATTPUT. Fixed memory leak in magick_writeColorTable * src/antlr/Makefile.in, src/plotting.cpp, src/pythongdl.cpp, src/Makefile.in, src/magick_cl.cpp, src/ofmt.hpp, gdl.kdevelop, gdl.kdevses, configure, Makefile.in, aclocal.m4: avoid linker error under OS X 2005-07-01 jomoga * src/gsl_fun.cpp: Fix memory leak in INTERPOLATE 2005-07-01 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/dinterpreter.cpp, src/gdlc.i.g, gdl.kdevses: Code refactorization * src/convert2.cpp: double to string conversion * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/arrayindex.hpp, src/dinterpreter.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/includefirst.hpp, src/pro/test_suite.pro, NEWS, config.h.in, configure, configure.in: stride index support ([n:n:n]) 2005-06-29 jomoga * src/plotting.cpp: Support for YNOZERO 2005-06-29 m_schellens * src/gdlc.i.g, src/GDLInterpreter.cpp, src/arrayindex.hpp, src/datatypes.cpp, src/dnode.cpp, src/dnode.hpp, src/dstructgdl.cpp, NEWS, gdl.kdevses: move ConvertAST to source file. Fixed arrayindex list BuildIx memory leak. 2005-06-28 jomoga * src/devicex.hpp, src/devicez.hpp, src/gdlzstream.cpp, src/gdlzstream.hpp, src/graphics.hpp, src/plotting.cpp, src/plotting.hpp: Support for additional plotting keywords and COLORBAR * src/libinit.cpp: Added AXIS,ERASE routines * src/gsl_fun.cpp: interpolation scalar bug fix 2005-06-28 m_schellens * src/print.cpp, src/print_tree.cpp, src/print_tree.hpp: PRINT, correction. * src/GDLInterpreter.hpp, src/GDLTreeParser.cpp, src/arrayindex.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dcompiler.cpp, src/dcompiler.hpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/dnode.cpp, src/dnode.hpp, src/dpro.cpp, src/dpro.hpp, src/dstructgdl.hpp, src/envt.cpp, src/envt.hpp, src/gdlc.i.g, src/gdlc.tree.g, src/gdlexception.cpp, src/gdlexception.hpp, src/objects.cpp, src/GDLInterpreter.cpp: ProgNode type for interpreter. 2005-06-21 m_schellens * src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLTreeParser.cpp, src/Makefile.in, src/antlr/Makefile.in, src/dinterpreter.cpp, src/gdlc.g, configure.in, Makefile.in, aclocal.m4, configure: Make .RUN handle files without subroutine. 2005-06-20 m_schellens * src/dinterpreter.cpp, src/pythongdl.cpp, configure.in, gdl.kdevelop, gdl.kdevses, configure, Makefile.in, README, aclocal.m4: python module 2005-06-17 m_schellens * src/dinterpreter.cpp, src/dinterpreter.hpp, src/envt.cpp, src/print.cpp, src/pythongdl.cpp: python module 2005-06-16 m_schellens * src/antlr/Makefile.in, src/datatypes.hpp, src/Makefile.in: GCC 4.0 compliancy * src/datatypes.cpp, src/gdlc.tree.g, src/gdlexception.hpp, src/gdlpython.cpp, src/gdlpython.hpp, src/pythongdl.cpp, src/topython.cpp: python module 2005-06-15 m_schellens * src/Makefile.am, src/Makefile.in, src/antlr/Makefile.am, src/antlr/Makefile.in, src/cformat.g, src/dpro.hpp, src/format.g, src/format.in.g, src/format.out.g, src/gdl.cpp, src/gdlc.i.g, src/gdljournal.cpp, src/gdlpython.cpp, src/includefirst.hpp, src/print_tree.cpp, src/pythongdl.cpp, src/sigfpehandler.hpp, src/CFMTLexer.cpp, src/FMTIn.cpp, src/FMTIn.hpp, src/FMTLexer.cpp, src/FMTLexer.hpp, src/FMTOut.cpp, src/FMTOut.hpp, src/FMTParser.cpp, src/FMTParser.hpp, src/GDLInterpreter.cpp, configure.in, gdl.kdevses, ltmain.sh, Makefile.in, config.guess, config.sub, configure: python module 2005-06-13 m_schellens * src/dinterpreter.cpp: .R equivalent to .RUN 2005-06-10 m_schellens * src/gdlpython.cpp, gdl.kdevelop, gdl.kdevses, Doxyfile, src/envt.cpp, src/extrat.cpp, src/file.cpp, src/format.in.g, src/gdl.cpp, src/gdleventhandler.cpp, src/gdlexception.cpp, src/gdlgstream.cpp, src/gdlpsstream.cpp, src/gdlwidget.cpp, src/gdlwinstream.cpp, src/gdlxstream.cpp, src/gdlzstream.cpp, src/getfmtast.cpp, src/graphics.cpp, src/gsl_fun.cpp, src/hdf5_fun.cpp, src/hdf_fun.cpp, src/hdf_pro.cpp, src/image.cpp, src/includefirst.hpp, src/initct.cpp, src/initsysvar.cpp, src/io.cpp, src/libinit.cpp, src/libinit_cl.cpp, src/libinit_jmg.cpp, src/libinit_mes.cpp, src/magick_cl.cpp, src/math_fun.cpp, src/math_fun_jmg.cpp, src/math_utl.cpp, src/ncdf_att_cl.cpp, src/ncdf_cl.cpp, src/ncdf_dim_cl.cpp, src/ncdf_var_cl.cpp, src/objects.cpp, src/plotting.cpp, src/print.cpp, src/read.cpp, src/sigfpehandler.cpp, src/str.cpp, src/typedefs.hpp, src/typetraits.cpp, src/widget.cpp, src/FMTIn.cpp, src/FMTIn.hpp, src/assocdata.cpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun_cl.cpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/basic_pro_jmg.cpp, src/convert2.cpp, src/datatypes.cpp, src/dcommon.cpp, src/dcompiler.cpp, src/dinterpreter.cpp, src/dnode.cpp, src/dpro.cpp, src/dpro.hpp, src/dstructdesc.cpp, src/dstructgdl.cpp, src/dvar.cpp, configure.in, config.h.in, configure: python module 2005-06-06 m_schellens * src/FMTIn.cpp, src/FMTIn.hpp, src/format.in.g: Fixed READS 'z' format code bug. 2005-06-03 m_schellens * src/basic_fun.cpp, src/basic_fun_cl.cpp, src/gdlc.i.g, src/GDLInterpreter.cpp, configure: Fixed return from FOR bug. 2005-06-01 m_schellens * src/devicex.hpp, src/envt.cpp, src/envt.hpp, src/graphics.hpp, src/libinit.cpp, src/plotting.cpp, src/plotting.hpp: DEVICE,GET_DECOMPOSED. Consistent using CHARSIZE as float (instead of double). 2005-05-31 m_schellens * src/pro/loadct.pro, src/devicex.hpp, src/graphics.cpp, src/graphics.hpp, src/image.cpp, src/libinit_jmg.cpp: common block COLORS for LOADCT * src/image.cpp, config.h.in, configure, configure.in: remove wxWidgets from configure script. * src/pro/lmgr.pro, src/Makefile.am, src/Makefile.in, src/gdlwidget.cpp, src/gdlwidget.hpp, src/graphics.cpp, src/graphics.hpp, src/image.cpp, src/libinit_jmg.cpp, src/widget.cpp, configure.in, gdl.kdevses, config.h.in, configure: LMGR function. 2005-05-24 jomoga * src/gsl_fun.cpp, src/gsl_fun.hpp, src/libinit_jmg.cpp: Initial version of INTERPOLATE 2005-05-12 m_schellens * src/default_io.cpp, src/ifmt.cpp, src/io.hpp, README: Fixed input and eof detection. 2005-05-10 m_schellens * src/devicex.hpp: Second parameter for TV. 2005-05-09 m_schellens * src/arrayindex.hpp, src/envt.cpp, src/plotting.cpp: Removed BACKGROUND keyword check from XYOUTS. * src/accessdesc.hpp, src/arrayindex.hpp, src/datatypes.cpp, src/devicex.hpp, src/dstructgdl.cpp: Set AllIxT to valarray. * src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/gdlc.g: Allow BREAK, CONTINUE as identifiers. 2005-04-30 c_lee * src/plotting.cpp, src/plotting.hpp: more refactoring (xyouts) * src/plotting.cpp, src/plotting.hpp: refactored to common plot subroutines (crange, type) * src/plotting.cpp, src/plotting.hpp: refactored to common plot subroutines (color, background, symsize,psym, line) * src/datatypes.hpp: include cassert 2005-04-28 jomoga * src/gdlxstream.hpp, src/devicex.hpp: TV writes to off-screen window 2005-04-28 m_schellens * NEWS, src/gdlc.i.g, src/math_fun.cpp, src/pro/appleman.pro, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/accessdesc.hpp, src/arrayindex.hpp, src/basegdl.hpp, src/basic_fun_cl.cpp, src/basic_op.cpp, src/convert2.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.cpp, ChangeLog, INSTALL, README: Optimization for complex (pow, abs). Non-copy constants 2005-04-22 m_schellens * src/basic_pro.cpp, src/datatypes.cpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/gdl.cpp, src/math_fun_jmg.cpp, src/pro/test_suite.pro, ChangeLog, NEWS: OS X compilance. GDL 0.8.9: 2005-04-21 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/dcompiler.cpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/dpro.cpp, src/dpro.hpp, src/gdlc.i.g, src/gdleventhandler.cpp, src/pro/test_suite.pro, ChangeLog: Added .RUN command. 2005-04-20 jomoga * src/libinit_jmg.cpp, src/basic_pro_jmg.hpp, src/basic_pro_jmg.cpp: Added WAIT procedure 2005-04-20 m_schellens * src/dcompiler.cpp, src/dcompiler.hpp, src/dpro.hpp, src/gdlc.tree.g, src/GDLTreeParser.cpp: correct common blocks and gotos for command line. 2005-04-19 m_schellens * src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/dcompiler.cpp, src/devicez.hpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/dpro.hpp, src/gdl.cpp, src/gdlc.g, src/gdlc.tree.g, src/gdlzstream.hpp, src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp: Accept main programs. * src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlzstream.hpp: plplot mem driver eop() workaround. 2005-04-18 m_schellens * src/devicex.hpp, src/basic_op.cpp, src/deviceps.hpp, src/devicewin.hpp, src/devicez.hpp, src/graphics.hpp, src/image.cpp, src/libinit.cpp, src/plotting.cpp, src/plotting.hpp, src/sigfpehandler.cpp, ChangeLog: Fixed MOD 0 bug. 2005-04-15 m_schellens * src/devicez.hpp, gdl.kdevses: Fixed SetResolution bug. 2005-04-14 m_schellens * src/devicez.hpp, src/image.cpp: Fixed TV for z-buffer device. * src/devicez.hpp, src/Makefile.in, src/deviceps.hpp, src/devicex.hpp, src/gdlzstream.cpp, src/gdlzstream.hpp, src/graphics.cpp, src/graphics.hpp, src/image.cpp, src/libinit.cpp, src/plotting.cpp, src/Makefile.am: Added z-buffer device. 2005-04-13 m_schellens * src/devicex.hpp, src/graphics.hpp, src/libinit.cpp, src/plotting.cpp: DECOMPOSED keyword for DEVICE. * src/gstream.hpp, src/gdlgstream.cpp: Fix for multiple plots in one window. 2005-04-12 m_schellens * src/GDLInterpreter.cpp, src/gdlc.i.g: Line number output for interrupts (cntrl-c). 2005-04-11 m_schellens * src/pro/test_suite.pro, src/deviceps.hpp, src/devicewin.hpp, src/gdlc.i.g, src/gdlgstream.cpp, src/gdlgstream.hpp, src/plotting.cpp, src/GDLInterpreter.cpp: Fixed OPLOT, PLOTS for /DEVICE, /NORMAL. Code cleanup. 2005-04-09 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/gdlc.i.g: Avoid copying for indexed expressions. 2005-04-07 m_schellens * src/FMTOut.cpp, src/FMTParser.cpp, src/format.g, src/format.out.g: Fixed format-code 'x' bug. 2005-04-06 m_schellens * ChangeLog, src/image.cpp: Proper multi-plot handling for TV. 2005-04-05 jomoga * src/image.cpp: Compatible with PLPLOT-5.5.0 2005-04-05 m_schellens * src/basic_pro.cpp, src/libinit.cpp, ChangeLog: NTOHL, NTOHS, HTONL, HTONS keywords to BYTEORDER. 2005-04-04 m_schellens * src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.hpp, src/libinit.cpp, src/specializations.hpp: NAN keyword for MAX, MIN, BYTSCL. SUBSCRIPT_MIN/MAX for MAX/MIN. 2005-04-01 m_schellens * src/dcompiler.cpp: Fix: Allowed x=x(0) for a function x (defined in x.pro). 2005-03-31 m_schellens * src/dcompiler.cpp: Fix: Allowed x=x(0) for a function x. * src/image.cpp: Removed debug output. * src/GDLInterpreter.cpp, src/basic_fun_jmg.cpp, src/dcompiler.cpp, src/gdlc.tree.g, src/image.cpp: Allowed x=x(0) for a function x (defined in x.pro). 2005-03-30 m_schellens * gdl.kdevses, src/image.cpp: Fixed TV bug. 2005-03-29 m_schellens * gdl.kdevses, src/gdlgstream.cpp, src/plotting.cpp: plplot 5.5.0 compatibility. 2005-03-24 jomoga * src/image.cpp: Fix orientation bug in TVRD 2005-03-24 m_schellens * src/devicex.hpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/plotting.cpp: Constant charsize for graphics. 2005-03-23 jomoga * src/image.cpp: Fix orientation bug in TV 2005-03-23 m_schellens * src/pro/test_suite.pro, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/gdl.cpp, src/gdlc.i.g, src/gsl_fun.cpp, README: Fixed braced (r)expr bug. 2005-03-22 m_schellens * src/basic_fun.cpp, HACKING, README, gdl.kdevses: ULONARR, LON64ARR, ULON64ARR bugfix. 2005-03-21 jomoga * src/image.hpp, src/image.cpp: Support for TRUE keyword in TV 2005-03-21 c_lee * src/basic_fun_jmg.cpp: CL: update make_array to use TYPE keyword and sorted argument precendence (fixed) * src/basic_fun_jmg.cpp: CL: update make_array to use TYPE keyword and sorted argument precendence 2005-03-19 m_schellens * src/gsl_fun.cpp: Fixed RANDOM bug. 2005-03-18 m_schellens * src/plotting.cpp: PLOT: POSITION keyword. 2005-03-17 m_schellens * src/arrayindex.hpp, src/basic_pro.cpp, src/datatypes.cpp, src/datatypes.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/gdl.cpp, src/libinit.cpp, src/pro/test_suite.pro, configure, configure.in: Fixed assignment bug. * src/basic_fun.cpp: Fixed ASSOC bug. 2005-03-16 jomoga * src/basic_fun_jmg.cpp: Set FLOAT as default for make_array 2005-03-16 m_schellens * src/basic_fun.cpp, src/libinit.cpp: Sorted libFunList and libProList. * src/GDLInterpreter.cpp, src/gdlc.i.g, ChangeLog: Fixed interpreter memory leak. 2005-03-15 m_schellens * src/pro/test_suite.pro, src/GDLInterpreter.cpp, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g: Cleaned up compiler/interpreter. * src/pro/dist.pro, src/pro/tvscl.pro, src/gdlc.tree.g, src/GDLTreeParser.cpp: Add dist.pro and tvscl.pro 2005-03-14 m_schellens * src/pro/test_suite.pro, src/gdlc.tree.g, src/GDLTreeParser.hpp, src/dcompiler.cpp, src/dinterpreter.cpp, src/gdlc.g, src/gdlc.i.g, src/GDLParser.cpp, src/GDLTreeParser.cpp, src/GDLInterpreter.hpp, src/GDLLexer.cpp, src/GDLInterpreter.cpp: Allow assignment for parameters/keywords. 2005-03-13 m_schellens * src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/dcompiler.cpp, src/dinterpreter.cpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/GDLInterpreter.cpp, gdl.kdevses, gdl.kdevelop, src/pro/test_suite.pro, src/dcommon.cpp, src/dcommon.hpp, src/dcompiler.hpp, src/dpro.hpp, src/envt.cpp, src/envt.hpp: maintenance. 2005-03-10 m_schellens * src/pro/test_suite.pro, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basegdl.hpp, src/dnode.hpp, src/gdlc.g, src/gdlc.i.g, src/gdlc.tree.g, src/gdlexception.hpp, src/gdlpython.cpp, src/print_tree.cpp, gdl.kdevses: Allow braced indexed expressions as l-values. Line number info. 2005-03-08 m_schellens * src/basic_fun.hpp, src/basic_fun_jmg.cpp, src/libinit.cpp, src/pro/test_suite.pro, src/GDLInterpreter.cpp, src/basic_fun.cpp, ChangeLog: Added TEMPORARY function. * src/pro/test_suite.pro, src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/basic_fun.cpp, src/datalistt.hpp, src/dstructgdl.hpp, src/envt.hpp, src/gdlc.i.g: Allow library functions as l-functions. Fixed REPLICATE for structs. 2005-03-07 m_schellens * src/pro/test_suite.pro, src/GDLInterpreter.cpp, src/datalistt.hpp, src/envt.hpp, src/gdlc.i.g, src/print.cpp: Return reference variable via library function (/OVERWRITE) now works. * src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basic_fun.cpp, src/dinterpreter.cpp, src/gdlc.g, src/gdlc.tree.g, src/GDLInterpreter.cpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp: Made RETURN not a reserved word. 2005-03-06 messmer * src/print.cpp: Removed '\n' if the last element to print is a scalar null string (''). * src/basic_fun.cpp: arr was limited to n scalar arguments to specify the array dimension. IDL, however, also allows a single array-valued argument. This little patch should enable now stuff like a = indgen([2,3]) or a =[[1,2],[3,4]] & print, reform(a, [1,4]). 2005-03-03 m_schellens * src/basic_fun.cpp, src/basic_fun.hpp, src/datatypes.cpp, src/libinit.cpp, ChangeLog, HACKING: Add ROUTINE_INFO. 2005-03-01 jomoga * src/libinit_jmg.cpp: Added UNIFORM keyword RANDOMU/RANDOMN 2005-03-01 m_schellens * src/gsl_fun.cpp, ChangeLog: Corrected RANDOMU/N. * src/gsl_fun.cpp: New RANDOMU/N keywords. 2005-02-28 m_schellens * src/dpro.hpp, src/envt.cpp, src/gsl_fun.cpp, src/dpro.cpp: Functionality for warn keywords. * src/gsl_fun.cpp, configure.in, configure: Cosmetic change. 2005-02-27 jomoga * src/libinit_jmg.cpp, src/dinterpreter.cpp, src/dinterpreter.hpp, src/math_fun_jmg.hpp, src/math_fun_jmg.cpp: Support for CHECK_MATH 2005-02-25 c_lee * src/basic_fun_cl.cpp, src/libinit_cl.cpp: adding warnings for IGAMMA unsupported keywords 2005-02-25 m_schellens * src/dpro.cpp, src/dpro.hpp: Added warn keyword list. * src/dcompiler.cpp, src/dcompiler.hpp: Corrected common block handling of compiler. 2005-02-25 jomoga * src/math_fun_jmg.cpp: Support for DOUBLE keyword in MACHAR * src/libinit_jmg.cpp, src/gsl_fun.hpp, src/gsl_fun.cpp: Improved support of RANDOMU, RANDOMN 2005-02-24 m_schellens * src/basic_fun.cpp, TODO: Add all keywords to INDGEN. * src/pro/test_suite.pro, src/dcommon.cpp, src/dcompiler.cpp, src/dcompiler.hpp, src/dinterpreter.cpp, src/dpro.cpp, src/dpro.hpp, src/envt.cpp, src/gdl.cpp, src/libinit_jmg.cpp, src/math_fun_jmg.cpp, src/math_utl.cpp, src/math_utl.hpp, src/objects.cpp, src/str.hpp: Allow multiple common blocks in one subroutine. 2005-02-24 c_lee * src/basic_fun_cl.cpp, src/basic_fun_cl.hpp, src/libinit_cl.cpp: Fixed keywords in IGAMMA and BETA, commented out unsupported keywordsin IGAMMA. added DOUBLE keyword to BETA 2005-02-22 m_schellens * src/pro/factorial.pro, src/pro/swap_endian.pro: Add SWAP_ENDIAN, FACTORIAL * src/math_fun_jmg.cpp, ChangeLog: Update ChangeLog. Some small improvements. * src/math_fun.cpp, src/sigfpehandler.cpp, src/sigfpehandler.hpp, src/Makefile.am, src/Makefile.in, src/basic_fun_cl.cpp, src/basic_op.cpp, src/basic_pro.cpp, src/devicex.hpp, src/gdl.cpp, src/gdlgstream.cpp, src/gdlgstream.hpp, src/gdlxstream.cpp, src/gdlxstream.hpp, src/image.cpp, src/initsysvar.cpp, configure.in, configure: SIGFPE handler. 2005-02-21 jomoga * src/libinit.cpp: Add TYPE keyword to FIX * src/libinit_jmg.cpp: Add TVRD & FINITE * src/basic_fun.cpp: Support for TYPE keyword in FIX * src/math_fun_jmg.hpp, src/math_fun_jmg.cpp: Support for FINITE function * src/image.hpp, src/image.cpp: Support for TVRD 2005-02-18 m_schellens * src/Makefile.in, src/antlr/Makefile.in, src/basic_op.cpp, src/pro/test_suite.pro, configure, Makefile.in, aclocal.m4: Fixed # operator (1D # 2D). 2005-02-17 m_schellens * src/basic_pro.cpp, src/basic_pro.hpp, src/dinterpreter.cpp, src/libinit.cpp, src/topython.cpp, ChangeLog, INSTALL, README, gdl.kdevses: Add SPAWN procedure. 2005-02-15 m_schellens * src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basic_fun.cpp, src/gdlc.g, src/GDLInterpreter.cpp, README: Allow leading '!' also in struct names. GDL 0.8.8: 2005-02-14 m_schellens * src/GDLInterpreter.cpp, src/GDLInterpreter.hpp, src/GDLInterpreterTokenTypes.hpp, src/GDLInterpreterTokenTypes.txt, src/GDLLexer.cpp, src/GDLLexer.hpp, src/GDLParser.cpp, src/GDLParser.hpp, src/GDLTokenTypes.hpp, src/GDLTokenTypes.txt, src/GDLTreeParser.cpp, src/GDLTreeParser.hpp, src/GDLTreeParserTokenTypes.hpp, src/GDLTreeParserTokenTypes.txt, src/basic_fun.cpp, src/default_io.cpp, src/gdlc.g, src/gdlc.tree.g, ChangeLog, README: Widen rules for struct tag names to allow a leading '!'. * src/GDLLexer.cpp, src/basegdl.cpp, src/basegdl.hpp, src/basic_fun.cpp, src/basic_fun.hpp, src/basic_pro.cpp, src/basic_pro.hpp, src/datatypes.cpp, src/datatypes.hpp, src/default_io.cpp, src/dinterpreter.cpp, src/gdlc.g, src/libinit_mes.cpp, src/ofmt.hpp, ChangeLog, README: Include subroutines by Peter Messmer. 2005-02-12 jomoga * src/image.cpp, src/libinit_jmg.cpp: X,Y support for TV 2005-02-10 m_schellens * ChangeLog, gdl.kdevses: ChangeLog update. * src/GDLInterpreter.hpp, src/GDLLexer.cpp, src/dinterpreter.cpp, src/gdlc.g, src/gdlc.i.g, src/str.cpp, src/str.hpp: made @ honor !PATH * src/Makefile.in, src/antlr/Makefile.in, src/default_io.cpp, src/dstructdesc.cpp, src/dstructdesc.hpp, src/dstructgdl.cpp, src/dstructgdl.hpp, src/extrat.cpp, src/gdlc.i.g, src/ifmt.cpp, src/initsysvar.cpp, src/ncdf_att_cl.cpp, src/ofmt.cpp, src/typetraits.cpp, src/typetraits.hpp, src/GDLInterpreter.cpp, configure.in, gdl.kdevses, configure, ChangeLog, Makefile.in, aclocal.m4: Changed handling of unnamed struct descriptors. 2005-02-08 jomoga * src/gsl_fun.hpp, src/gsl_fun.cpp: Improved FFT routine; OMIN,OMAX keyword support HISTOGRAM 2005-02-08 m_schellens * src/plotting.cpp: Fixed TVLCT bug. 2005-02-03 m_schellens * src/antlr/Makefile.in, src/Makefile.in, src/basic_op.cpp, src/convol.cpp, src/convol_inc0.cpp, src/convol_inc1.cpp, src/convol_inc2.cpp, src/datatypes.cpp, src/ofmt.cpp, aclocal.m4, configure, ChangeLog, Makefile.in: g++ 3.4 compliance 2005-01-29 c_lee * src/antlr/Makefile.in, src/Makefile.in, src/libinit.cpp, src/plotting.cpp, aclocal.m4, configure, Makefile.in: Added NOCLIP support to PLOTS/OPLOT. Added XYOUTS command with support for COLOR, ORIENTATION, ALIGNMENT,CHARSIZE,CLIP,DEVICE,DATA,COLOR. Also supports array format for COLOR, ORIENTATION keywords, and X, Y, STRING arguments. Does not support the pseudo line continuation using only 1 argument. 2005-01-26 m_schellens * src/GDLInterpreter.cpp, src/basic_fun.cpp, src/basic_fun.hpp, src/basic_fun_jmg.cpp, src/basic_op.cpp, src/datalistt.hpp, src/datatypes.cpp, src/envt.hpp, src/extrat.cpp, src/gdlc.i.g, src/libinit.cpp, ChangeLog: Fixed OR and AND bug. Fixed lib function /OVERWRITE bug. 2005-01-20 m_schellens * src/basic_fun.hpp, src/basic_fun_jmg.cpp, src/basic_pro.cpp, src/basic_pro.hpp, src/libinit.cpp, src/basic_fun.cpp, ChangeLog: Added SWAP_ENDIAN and BYTEORDER. Fixed /OVERWRITE bug in REFORM. 2005-01-19 m_schellens * src/GDLInterpreter.cpp, src/basic_fun.cpp, src/basic_fun.hpp, src/datatypes.hpp, src/dstructdesc.cpp, src/dstructgdl.cpp, src/gdlc.i.g, src/libinit.cpp, ChangeLog, INSTALL, README: Added OBJ_ISA. Changed struct compatibility checking. 2005-01-18 m_schellens * src/basic_fun.cpp, src/basic_fun.hpp, src/dstructdesc.hpp, src/libinit.cpp: Added OBJ_CLASS function. 2005-01-17 m_schellens * src/GDLTreeParser.cpp, src/basic_op.cpp, src/default_io.cpp, src/gdlc.tree.g, src/libinit.cpp, src/plotting.cpp: fixed bug concerning braced variables passed by reference; added PLOTS procedure (2D only) 2005-01-14 m_schellens * src/plotting.cpp, src/libinit_cl.cpp, gdl.kdevses: re-insert JOURNAL into lib procedure list, removed diagnostic message in OPLOT 2004-12-14 m_schellens * src/basic_fun_cl.cpp: small corrections. * src/basic_fun_cl.cpp, src/basic_fun_cl.hpp, src/initsysvar.cpp, src/initsysvar.hpp, src/libinit_cl.cpp, src/plotting.cpp, ChangeLog: added LEGENDRE, IGAMMA, LNGAMMA and BETA functions from cl 2004-12-09 m_schellens * ALL FILES Initial import. gdl-0.9.7/templates/0000775000175100017510000000000013040614613014155 5ustar coulaiscoulaisgdl-0.9.7/templates/cpp0000664000175100017510000000174213040614410014661 0ustar coulaiscoulais/*************************************************************************** $FILENAME$ - description ------------------- begin : $DATE$ copyright : (C) $YEAR$ by $AUTHOR$ email : $EMAIL$ ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ gdl-0.9.7/templates/h0000664000175100017510000000174213040614410014326 0ustar coulaiscoulais/*************************************************************************** $FILENAME$ - description ------------------- begin : $DATE$ copyright : (C) $YEAR$ by $AUTHOR$ email : $EMAIL$ ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ gdl-0.9.7/AUTHORS0000664000175100017510000000125013040614410013220 0ustar coulaiscoulaisProject founder: Marc Schellens Contributors: Joel Gales Christopher Lee Gaurav Khanna Peter Messmer Pierre Chanial Justin Bronn Médéric Boquien Alain Coulais (tests, bugs) Sylwester Arabas Gilles Duvert ... see doc/udg/chapters/credits.tex for a more complete list gdl-0.9.7/doc/0000775000175100017510000000000013040614467012733 5ustar coulaiscoulaisgdl-0.9.7/doc/gdl.10000664000175100017510000001431413040614410013552 0ustar coulaiscoulais.TH GDL 1 "2017-01-06" "The GDL Team" .SH NAME gdl \- GNU Data Language incremental compiler .SH SYNOPSIS .B gdl .RI [\-\-help] .RI [\-h] .RI [\-\-version] .RI [\-v] .RI [\-V] .RI [[\-]\-quiet] .RI [\-q] .RI [ \-arg value ] .RI [ \-args ... ] .RI [ \-e statement ] .RI [ \-pref=/path/to/preferenceFile ] .RI [ batch_file ... ] .SH DESCRIPTION .B gdl is an incremental compiler for the GNU Data Language (GDL). GDL is being developed with the aim of providing an open\-source drop\-in replacement for ITTVIS Interactive Data Language (IDL). It is also partially compatible with Visual Numerics (VN) PV\-WAVE. IDL and PV\-WAVE are registered trademarks of ITTVIS and VN, respectively. GDL and its library routines are designed as a tool for numerical data analysis and visualisation. GDL is dynamically typed, vectorized and has object\-oriented programming capabilities. The library routines handle numerical calculations, data visualisation, signal/image processing, file input/output (incl. graphical and scientific data formats such as TIFF, PNG, netCDF, HDF etc) and interaction with host OS. Information on GDL/IDL/PV\-WAVE syntax and library routines can be found in e.g.: \- GDL documentation draft at: http://gnudatalanguage.sf.net/gdl.pdf \- IDL manual on\-line @ NASA.gov: http://idlastro.gsfc.nasa.gov/idl_html_help/home.html \- ITTVIS (ittvis.com) and Visual Numerics (vni.com) websites \- comp.lang.idl\-pvwave newsgroup \- newsletter at: https://sympa.obspm.fr/wws/info/gdl-announces A vast part of GDL library routines is implemented using open\-source libraries including GSL, plPlot, and optionally: readline, FFTW, Eigen3, ImageMagick, netCDF, HDF4, HDF5, libproj4, UDUNITS\-2, libps and others. .SH OPTIONS .TP .B \-\-help (or \-h) Show summary of options .TP .B \-\-version (or \-v, \-V) Show version of program .TP .B \-\-quiet (or \-quiet, \-q) Suppress welcome messages .TP .B \-arg value Tells COMMAND_LINE_ARGS() to report the following argument (may be specified more than once) .TP .B \-args ... Tells COMMAND_LINE_ARGS() to report all following arguments .TP .B \-e statement Execute given statement and exit (last occurance taken into account only, executed after startup file, may not be specified together with batch files) .TP .B \-pref=/path/to/PreferenceFile (only partially working now) setting using external text file few variables including default preferences (e.g. X11 Windows Size) .TP .B \-\-fakerelease version setting !VERSION.RELASE to that value. !VERSION.RELASE is often tested by procedures to decide whether some function or option should be used. It is sometimes possible to use this option to fool a procedure that request a specific value of !VERSION.RELEASE .TP The \-demo, \-em, \-novm, \-queue, \-rt, \-ulicense and \-vm options are ignored for compatibility with IDL. .TP A list of batch files to be executed before entering the interactive mode (but after executing a startup file, if specified) may be given when not using the \-e option. .SH FILES .TP .B $DATADIR/gnudatalanguage/lib/*.pro Library routines implemented in GDL. $DATADIR is specified during compilation and usually translates to /usr/share, /usr/local/share or alike. GDL includes this directory in its search path unless GDL_PATH or IDL_PATH env. variables are set (see below). .TP .B $HOME/.gdl/history A file used for storing the history of commands issued in the interactive mode .SH ENVIRONMENT The following environment variables have special meaning to .BR gdl . The .B GDL_* variant, if defined, takes precedence over any corresponding .B IDL_* variant. .TP .B GDL_PATH, IDL_PATH The GDL command (script) search path. .TP .B GDL_STARTUP, IDL_STARTUP A file of commands to be executed on startup. .TP .B GDL_TMPDIR, IDL_TMPDIR A directory in which temporary files may be created. .TP .B HOME, SHELL Variables influencing shell invocations from within GDL (SPAWN procedure and the $ interpreter command). Value of HOME determines as well the location of the GDL history\-file. .TP .B PATH Determines search path when spawning child processes using the SPAWN procedure with the /NOSHELL keyword set. .TP .B PYTHONPATH Influences behaviour of PYTHON procedure and PYTHON() function (available if GDL is compiled with support for calling Python code) .TP .B GDL_MPI A message to be sent out using MPI_Send before initialization of the interpreter (available if GDL is compiled with support for MPI) .TP .B DISPLAY, XENVIRONMENT Tell GDL how to connect to the X server .TP .B PLPLOT_DRV_DIR Override the default location of PLplot dynamic drivers. .TP .B LC_* The locale\-related settings accessible via LOCALE_GET() (GDL always uses the C locale internally) .TP .B GDL_GR_WIN_HEIGHT Sets the preference for the default height of a Windows(tm) graphic window .TP .B GDL_GR_WIN_QSCREEN if set to true (1) this will prevent the use of the GDL_GR_WIN_HEIGHT and GDL_GR_WIN_WIDTH preferences and the default dimensions of graphic windows will be 1/4 of the screen dimensions .TP .B GDL_GR_WIN_WIDTH Sets the preference for the default width of a Windows(tm) graphic window .TP .B GDL_GR_X_HEIGHT Sets the preference for the default height of an X11 graphic window .TP .B GDL_GR_X_QSCREEN if set to true (1) this will prevent the use of the GDL_GR_X_HEIGHT and GDL_GR_X_WIDTH preferences and the default dimensions of graphic windows will be 1/4 of the screen dimensions .TP .B GDL_GR_X_WIDTH Sets the preference for the default width of an X11 graphic window .TP .B GDL_WX_BACKEND can be set to [0,1,2] which will select, respectively, the backends 0,1 or 2 of plplot's old wxWidgets driver (plplot versions < 5.10). Backend 2 has antialiasing enabled. .TP .B GSHHS_DATA_DIR If not automatically found, tells GDL where the gshhs files (coasts rivers, etc) are located. .SH BUGS Please report bugs, comments, patches or feature requests at http://sf.net/projects/gnudatalanguage/ .SH AUTHOR The primary author of GDL is Marc Schellens . A list of contributors is available in the AUTHORS file shipped with GDL, and on the project website (see above). .PP The original version of this manual page was written by Sergio Gelato . It is currently a part of the GDL package, and is maintained by the GDL Team. .SH SEE ALSO netcdf(3), hdf(1), gsl(3) gdl-0.9.7/doc/Makefile.am0000664000175100017510000000005213040614410014750 0ustar coulaiscoulaisman_MANS = gdl.1 EXTRA_DIST = $(man_MANS) gdl-0.9.7/Doxyfile0000664000175100017510000002264013040614410013664 0ustar coulaiscoulais# Doxyfile 1.4.1-KDevelop #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = gdl.kdevelop PROJECT_NUMBER = 0.9 OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = NO STRIP_FROM_PATH = /usr/local/gdl/ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES DISTRIBUTE_GROUP_DOC = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = YES FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = /usr/local/gdl FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.C \ *.H \ *.tlh \ *.diff \ *.patch \ *.moc \ *.xpm \ *.dox RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = YES LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO gdl-0.9.7/README.GRIB0000664000175100017510000001271113040614410013556 0ustar coulaiscoulaisGRIB file format support in GDL is implemented using the ECMWF GRIB_API library. In order to use it please - obtain and install GRIB API: - website: http://www.ecmwf.int/products/data/software/grib_api.html - compiling grib_api with ,,--disable-fortran'' and ,,--disable-jpeg'' is ok for GDL - configure GDL enabling the --with-grib option Naming of GDL routines resembles the one from F90 GRIB API interface (Fortran logic, as opposed to the one from C interface, seemed more compliant with IDL). The routines are not documented for the moment so please: - refer to GRIB API manual for explanation, - look in the testsuite/test_grib.pro file for an example of usage, - read the following few lines. Currently the followng routines are implemented: * GRIB files related: file_id = grib_open_file(filename) | opens a file and returns an id that is used to refer to it grib_count_in_file(file_id) | returns the number of messages in file grib_close_file, file_id | closes a file * GRIB messages related: | mesg_id = grib_new_from_file(file_id) | decodes a message into memory (multiple calls yield subsequent messages) grib_release, mesg_id | frees the decoded message from memory mesg_id = grib_clone(another_mesg_id) | clones a message * routines for extracting data from GRIB messages: | grib_get, mesg_id, keyname, values | extracts data associated with "keyname" into variable _values_ grib_get_data, mesg_id, lats, lons, data | extracts the "values" key into variable _data_ placing the latitude, | longitude values in variables _lats_ and _lons_ grib_get_size, mesg_id, keyname | returns number of elements in the "keyname" In the above list: - mesg_id, file_id are id numbers similiar to these returned by ncdf_open or hdf_sd_start - keyname is a string, for example "values" or "numberOfPointsAlongAParallel" - lats, lons, values are ment to be identifiers of variables that will be fed with data The table below tries to summarize how the GDL interface relates to Fortran and C interfaces. (the table is still not complete) ._ this column shows if the routine is implemented in GDL / (,,!'' indicates known problems with implementation) | --- | ---------------------------------------------------------------------- | V GDL fun/pro | F90 counterpart | C routines called ---------------------------------------------------------------------------- F | + grib_open_file() | grib_open_file | fopen I | - /ro, /rw | mode | L | + grib_close_file() | grib_close_file | fclose E | + grib_count_in_file() | grib_count_in_file | grib_count_in_file ---------------------------------------------------------------------------- M | + grib_new_from_file | grib_new_from_file | grib_handle_new_from_file E | - grib_new_from_message | grib_new_from_message | grib_handle_new_from_message (...multi_message?, ..._message_copy) S | - grib_new_from_template | grib_new_from_template | grib_handle_new_from_template S | + grib_release | grib_release | grib_handle_delete A | + grib_clone | grib_clone | grib_handle_clone G | ! grib_get_message_size | E | - grib_copy_message | | - grib_write | ---------------------------------------------------------------------------- D | + grib_get_data | grib_get_data | grib_iterator_new A | + | | grib_iterator_next T | + | | grib_iterator_delete A | + | | ... GDL::grib_get_data | - /float | grib_get_data_real4 | | - /double | grib_get_data_real8 | | + grib_get_size | | - grib_get_offset | - grib_get_element | + grib_get | grib_get | grib_get_long | + | | grib_get_long_array | + | | grib_get_double | + | | grib_get_double_array | - missing= | grib_set_missing | | - offset=, count= | grib_get_element | | - grib_set | grib_set | ------------------------------------------------------------------------ N | | grib_find_nearest E | A | R | E | S | T | ------------------------------------------------------------------------ K | - grib_keys | grib_keys_iterator_new E | - | grib_keys_iterator_next Y | - | grib_keys_iterator_delete S | - | grib_keys_iterator_get_name | - | grib_keys_iterator_rewind | - /skip_readonly | grib_skip_readonly | - /skip_duplicates | grib_skip_duplicates | - /skip_coded | grib_skip_coded | - /skip_computed | grib_skip_computed ------------------------------------------------------------------------ N | | grib_check | / | | grib_dump | A | | Sylwester Arabas January 2009 gdl-0.9.7/MAP_INSTALL0000664000175100017510000001321113040614410013676 0ustar coulaiscoulaisRevised version by Gilles Duvert on July 2014 To provide map projections support your first need to make sure the proj.4 library is installed. There are two libraries, the 'classic PROJ.4' library maintained by the original author, G. Evenden: http://home.comcast.net/~gevenden56/proj/ (http://home.comcast.net/~gevenden56/proj/libproj4.3_20081120.tar.bz2) and a more complete (but by no means bug free!) fork of this library available at http://trac.osgeo.org/proj. Both work with GDL and provide all projection-related internal facilities. We tend to prefer G. Evenden's trimmed classical version since it handles correctly rotations and has fever crashes. Unfortunately the fancy interrupted Goode Homomsine is not present in GE's library. It is recommendend to recompile either of these libraries instead of using the version that may come with your software distribution (but it can work, too). If GDL does not find (lib)proj4 files automatically, use "-DLIBPROJ4=YES" "-DLIBPROJ4DIR=DIR" as arguments for cmake. (were 'DIR' is the location of the compiled library. To finish the support of projections in GDL, first the following additional PRO files must be acquired and placed in a directory of the GDL PATH: http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_grid.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_horizon.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_image.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_patch.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_point_valid.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_proj_image.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_proj_info.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_proj_init_commonblock.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_proj_init_common.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_proj_init.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_satellite_limit.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_set.pro http://idlastro.gsfc.nasa.gov/ftp/exelislib/map_struct_append.pro (cd src/pro/ ; mkdir map; cd map; grep 'gsfc.nasa' ../../../MAP* | xargs wget) Note that 'map_continents.pro' is not in this list. map_continents is inside GDL. If these .pro files are not available, google is your friend;^). These are proprietary files and not part of the GDL distribution. They do lots of complicated things in a not-very-general way, and should be rewritten completely for GDL. As GDL uses Proj.4 and Proj know all the tricks used in these procedures, it should not be such a terrible job. Help would be most appreciated. See below for an example where new projections are used that do not need the above procedures... =========================================================================== MAP_CONTINENTS is implemented in GDL using the GSHHSG (Global Self-consistent, Hierarchical, High-resolution Geography Database) available under the GNU GPL. To provide support for MAP_CONTINENTS the database files and one header file (gshhs.h) need to be downloaded e.g. from: ftp://ftp.soest.hawaii.edu/pwessel/gshhsg see file ftp://ftp.soest.hawaii.edu/pwessel/gshhg/README.TXT for complete description. The header file for the 2.0 dataset is in the gshhs_1.12_src.zip file. The datafiles (*.b) are in the gshhs_2.0.tbz file. When compiling GDL, the "-DGSHHS=YES" option must be given (not enabled by default), optionally with an argument pointing to the GSHHS installation prefix: -DGSHHSDIR="DIR" Warning: At execution time, GDL will look for the GSHHS datafiles (gshhs_f.b, gshhs_l.b, etc...) in the $GSHHS_DATA_DIR. Before running GDL you can setup this variable (e.g. in bash : export GSHHS_DATA_DIR=/my/path/to/gshhs/). When GDL is compiled, if $GSHHS_DATA_DIR unknown, if $GDLDATADIR exists and if $GDLDATADIR/../gshhs/ exist too, this path is used as a defaut directory for gshhs data. So the files can/must be put there. (we need a more flexible solution - FIXME!) Reference: Wessel, P. and Smith, W.H.F., 1996. A global, self-consistent, hierarchical, high-resolution shoreline database. J. Geophys. Res., 101(B4): 8741--8743. =========================================================================== NOTE ON PROJECTION-RELATED PROCEDURES IN GDL (and IDL) =========================================================================== All the historical projections are supported fully (Godde's Homolosine will not be truncated if you link with G.Evenden's library). The GCTP supplementary projections are at least partially supported. They lack the proper initialisation of the map.pipeline array, which governs the clipping and avoids spurious lines. Moreover, ALL the projections in the PROJ.4 library linked with GDL are supported via a trick: passing a valid PROJ.4 command line in the projection name of a map structure, with the projection number set to 999 example: a=!map a.up_name="+proj=mbtfpq +a=1" a.projection=999 map_clip_set,/TRANSFORM,map=a b=map_proj_forward(lon, lat,map=a) a.uv_box=[min(b(0,*)),min(b(1,*)),max(b(0,*)),max(b(1,*))]; (lon and lat being a table of "test" longitudes and latitudes) plot, a.uv_box[[0,2]],a.uv_box[[1,3]],/NODATA, /ISOTROPIC, XSTYLE=1, YSTYLE=1 map_continents,map=a map_grid,map=a Some warnings: - MAP_SET is straightforward to use but is restricted to historical projections. - MAP_PROJ_INIT is very long to compile (GDL bug!) but gives access to all projections. However some projections may crash with MAP_PROJ_INIT since proj.4 is not protected at all (against null pointers, unknown projection inverses, etc...). We recommend G.Ewenden's library which is not so "good programmer practice" but has more "good sense"! Joel Gales, Gilles Duvert PS (by AC): a demo ("test_map.pro") is now available in the testsuite/gdl-0.9.7/NEWS0000664000175100017510000011412013040614410012650 0ustar coulaiscoulais0.6: initial release 0.6.1: made GDL compile with g++ 3.3 (datatypes.hpp) 0.6.2: fixed bug with # and ## operator (basic_op.cpp) added -I.. cpp option (Makefile.am) 0.7: added graphic support (PLOT, WINDOW, WDELETE, SET_PLOT, WSET) some small bug fixes. 0.7.1: added 64 bit integer support (LONG64, ULONG64) added python support (PYTHON function and procedure) completed type functions for all types (ULONG, UINT, ...) completed INDGEN and INTARR functions for all types New library routines: SYSTIME, LEGENDRE, MACHAR, FFT, TVLCT, MAX, MIN, TOTAL, ARRAY_EQUAL, CATCH, ON_ERROR Library routines written in GDL (check out *.pro files not starting with test_) several bugfixes: conversion between BYTE and STRING. GOTO within IF statement. Memory leakage concatenating struct arrays. 0.7.2: Bugfix: dereferenced pointers are now passed by reference 0.8: added netCDF support. several new library routines. support for .COMPILE command. Improved formatted and unformatted output. Improved configure script. Extended and cleaned up the API for library routines (envt.hpp) Fixed: GOTO,undefined_label made GDL crash. Several other bugfixes. 0.8.1: Updated the configuration files (automake). 0.8.2: added HDF support. added support for several image file formats. changed the code and configuration files to make GDL build also on Mac OS X. bug fix for TRANSPOSE function. 0.8.3: now netCDF and HDF can be used together (there were linker errors in 0.8.2). updated some obsolete commands in configure.in more complete HDF support. added DEFSYSV procedure. addef CONJ and IMAGINARY functions. 0.8.4: introduced _STRICT_EXTRA solved remaining problem of using netCDF and HDF together. HELP now reports variable names correctly. the line continuation operator ($) is now also recognized in interactive mode. Added SORT, UNIQ, SHIFT (1 dim only), STRTOK, FILE_TEST, CD, HISTOGRAM and REFORM function. Added LOADCT, CD and TV procedure. Basic HDF5 support. 0.8.5: Fixed bug in STRING with PRINT or FORMAT keywords set. Fixed bug in STRMID with 3rd parameter undefined or not given. Added MESSAGE procedure (some keywords not enforced) Added FILE_SEARCH, ARG_PRESENT and EOF functions. Fixed bug in AssignAt functions. Fixed subtle bug concerning arrays() and function() which made GDL not recognize library functions when identifier was used before as array. 0.8.6: Added CONVOL function (very fast). Added EXP function. Added JOURNAL procedure. Completed SHIFT for multiple dimensions. HISTOGRAM now supports REVERSE_INDICES keyword. HELP,/LIB sorts now the output. Made # and ## operators IDL conforming for 1 dimensional arrays. N_ELEMENTS now returns LONG (before ULONG) 0.8.7: Support for GDL_PATH (falls back to IDL_PATH) environment variable. Added EXPAND_PATH, ARRAY_INDICES, REBIN, LEGENDRE, IGAMMA, LNGAMMA, BETA functions. Added OPLOT procedure. Bugfixes for ATAN (with 2 floats), CONVOL (1-dim kernel), MESSAGE (prefix). 0.8.8: Added OBJ_CLASS, OBJ_ISA, N_TAGS, SWAP_ENDIAN, BYTSCL functions. Added PLOTS, XYOUTS (both 2D only), BYTEORDER procedures. Improved FFT. OMIN,OMAX keyword support for HISTOGRAM. Fixed braced reference argument bug. Changed equality checking to compatibility checking for struct array definitions. Added structure compatibility check for assignment to struct arrays. Fixed offset bug for conversion functions (BYTE, FIX, ...). Fixed libfunction returning parameter bug. Fixed AND, OR operator bug. Fixed TVLCT bug. @file now honors !PATH. Changed configure.in to support python on OS X (fink) Added SETENV, STRUCT_ASSIGN pro. Added GETENV, STREGEX, TAG_NAMES functions. Minor adjustments of default output (no FORMAT keyword). Widen struct tag name rules: "!", "!$" and "!TEXT" are allowed. System variables can be named "!$", or "!$TEXT". 0.8.9: Added SPAWN, WAIT procedure. Added FINITE, ROUTINE_INFO, TEMPORARY functions. Added DIST function and TVSCL procedure (as .pro files). !EXCEPT system variable. Changed common block compilation. Allow RETURN as jump label (remove it from reserved words) Allow library functions to return their own parameters if used in a return statement. Allow library functions as l-functions. Fixed assignment to indexed array at one position (insert at) for indices which are 0. Cleaned up Compiler/Interpreter. Added NAN keywords to BYTSCL, MIN, MAX. Added SUBSCRIPT_MIN/MAX keywords to MAX/MIN. Added NTOHL, NTOHS, HTONL, HTONS keywords to BYTEORDER. Added z-buffer device Fixed MOD division by zero for integers. Support for files with main programs. Fixed COMMON and GOTO for interactive use. Added .RUN command True color support for TV (X-device). 0.8.10: Optimization (~10%): Arrayindexing, non-copy constants, Complex (pow, abs). Optimization (>200%): Dedicated ProgNodes for compiled programs Fixed RETURN statement in FOR loops. Made GDL buildable as a python module. .RUN handle files without subroutines. GCC 4.0 compilance. INTERPOLATE function. Fixed eof detection on input. Implemented strided index support. Improved raise to power (^ operator) for integer types. 0.8.11: Added CONTOUR procedure. Added CREATE_STRUCT, RADON, LAGUERRE, STRCMP, GAUSS_PDF, GAUSS_CVF functions. Added STRUCTURES keyword to HELP. Added NAN keyword to TOTAL. Sub-millisecond resolution for SYSTIME function Added !DIR system variable Much faster array indexing. Much faster operators (+-/*^...) Faster FFT (requires FFTW library: http://www.fftw.org/download.html) 0.9: Added HEAP_GC, PRODUCT, FILEPATH, MEDIAN (no filtering), READ_ASCII, PUSHD, POPD, PRINTD, PRIMES, NORM, T_PDF, POLY_2D routines. Support for SAVE and RESTORE through Craig Markwardt's CMSVLIB library. Added SMOOTH and DERIV as external functions. Full support of ON_IOERROR Full support of F77_UNFORMATTED. Support for XDR I/O. Fixed positional index (value and dimension) returned by STREGEX. HELP without parameters and keywords puts out a list of all local variables as well as compiled procedures and functions. Add support for PROCEDURES & FUNCTIONS keywords in HELP Made GDL compile under x86_64 linux. Fixed incompatibility with # operator and one-dim vectors. Speedup for ^ operator for integer types. Speedup (>100x!) for REVERSE_INDICES of HISTOGRAM. Implement INPUT keyword in HISTOGRAM. Support for non-rectangular (x,y 2d arrays) calls to SURFACE and CONTOUR. Support for DICOM files (GDLffDICOM object). INTEGER keyword for TOTAL. Add support for variable-length VMS files. Add support for CHANNEL keyword in TV/TVSCL. Add support for TRUE/CHANNEL keywords in TVRD (X only) Add support for DIMENSION keyword in FFT. Add REGEX keyword support to STRTOK. Add preliminary support for MPI. Add initial support for SOCKET. Preliminary support for map projections. (requires libproj4 from (http://members.verizon.net/~vze2hc4d/proj4/lbp4_050319S.tar.gz) Add initial support for BESELI, BESELJ, BESELK and BESELY but only for integer order due to limitations of GSL Bessel functions Added Erf() [and Errorf() for compatibility], Erfc(), Expint(), Gaussint(). Fixed I/O of Gamma(), Igamma(), LnGamma() and Beta() +-Inf now managed in MIN and MAX (if called with /Nan) NaN and +-Inf now properly managed in PLOT, OPLOT, PLOTS Speedup in PLOT, OPLOT, PLOTS for large data sets (see test_plot_benchmark.pro) Add 6 linestyles (via !p.linestyle or keyword) for PLOT, OPLOT, PLOTS Improved memory management. Improved new implementation of struct arrays. Managment of an history (ASCII) file save in ~/.gdl/history (with memory of previous sessions) Add initial CURSOR, limited but functionnal (know limitations documented in program) and !mouse 0.9rc1: fixing memory leak in FFT when using FFTw lib. fixing FACTORIAL (GDL syntax) add SKIP_LUN (used by Astron Lib.; GDL syntax) add VOIGT() function (in C++) based on Wells' paper. add REAL_PART() function (GDL syntax) add RK4() function (in C++) in CONTOUR: throw when levels= are not ordered, manage NaN and Inf values, add Nlevels= and /Fill Two new projections in MAP_SET: Satellite and Robinson Preliminary version for Width parameter in MEDIAN() initial import for SPL_INIT() and SPL_INTERP() (GDL syntax) 0.9rc2: undocumented BYTSCL accepting three parameters (value,min,max) g++ 4.3 compatibility ignore something like a=(a=a) (so it is allowed even if a is undefined) accept self assignment of undefined variables fixed print, ', ', FORMAT='(A)' Add SUBEXPR keyword support for STREGEX Add S_FUNCTIONS/S_PROCEDURES keywords for ROUTINE_NAMES in MEDIAN(), managing "width" parameter precalculation for (selected) constant parmeter functions. precalculation for constant arrays composed of constant expressions precalculation for constant expressions and constant arrays, a major improvement speedup for constant arrays add FILL and NLEVELS for CONTOUR Initial import of RK4 initial import of codes for function VOIGT initial import of function REAL_PART in GDL syntax allow floats without exponent number like 1e FACTORIAL correcting bug when inputs are Integers; managing arrays Made for READ_ASCII DATA_START independent of HEADER 0.9rc3: interpreter: - corrected GOTO out of loops within outer blocks - corrected array to tag of struct array assignment - $: fixing two segfault conditions when SHELL or HOME env. variables not set - allowing tag names with leading '!' - imroved DataListT an empty procedure call by extimated 40% - detecting change of type of FOR index variable - allowing common blocks outside subroutines library routines: - ATAN: precision fixes (atan(float, float) -> float(atan(double, double))), /PHASE keyword support, array-scalar argument combination support, two-complex-arguments case support - BESEL*: non integer order, X neg, Complex, and better managment of arrays dimensions - BETA: better management of the dimensions of output arrays - BROYDEN: initial import - CALENDAR: initial import - CALDAT: initial import - CD: avoiding segfault on OSX (wordexp() bug) - COMMAND_LINE_ARGS: initial import - CONTOUR: avoiding plplot error messages when filling, fixing segfault when contouring NaNs, smarter contour-level choice, partial labelling support - CREATE_STRUCT: accepting excl. mark as a first char of a tag name - EXIT: fixing segfault if HOME env. var undefined - EXPINT: better management of the dimensions of output arrays - FILE_INFO: initial import - FILE_LINES: no longer calling awk to parse wc output - FILE_SAME: initial import - FILE_SEARCH: support for FULLY_QUALIFY_PATH kw. - FILE_TEST: handling /NOEXPAND_PATH keyword - FFT: Fix /OVERWRITE with non-global parm bug (FFTW), fix auto_ptr bug with DOUBLE - FLUSH: initial import - GET_DRIVE_LIST: initial import - GET_KBRD: reading only one character (setting stdin to non-echo and non-canonical mode) - GET_LOGIN_INFO: initial import - HISTOGRAM: fixing inclusive ranges definition setting OMIN/OMAX type according to the type of input data binsize = (max - min) / (nbins - 1) when NBINS specified with neither MAX nor BINSIZE LOCATION keyword set correctly when HISTOGRAM called with NBINS and without BINSIZE or MAX - HELP: reporting structure data lengths, /MEMORY keyword support - IDL_BASE64: initial import - IGAMMA: better management of the dimensions of output arrays - IMSL_CONSTANT: initial import (using UDUNITS-2) - IMSL_ZEROSYS: initial import - LL_ARC_DISTANCE: initial import - LOCALE_GET: initial import - MAKE_ARRAY: /PTR & /OBJ keywords, /INDEX keyword support for strings - MAKE_ARRAY: keyword name changed from INT to INTEGER - MAX: DIMENSION keyword support - MIN: ditto - MEDIAN: memory leak fix + change DIM into DIMENSION - MEMORY: initial import - MOMENT: MAXMOMENT kw support + update of the documentation header - N_TAGS: rename keyword /LENGTH to /DATA_LENGTH - NCDF_ATTGET: code cleanup + fixes - NCDF_ATTPUT: fixing invalid keyword numbering - NCDF_DIMINQ: accepting long integers as file and dimension ids - NCDF_VARGET: 64-bit fix (SizeT->Dlong for transposed_dim_length[]) reading text data - NCDF_VARGET1: reading text data - NCDF_VARPUT: fixing random behaviour due to type mismatch (size_t -> int), fixing uninitialized variable bug - NEWTON: initial import - OPENW: allowing /APPEND flag for non-existant files - PARSE_URL: initial import - PATH_SEP: now return good type STRING = '/', before STRING = Array[1] - PLOTS: correction for DATA coordinates - PM: initial import - PRINT: handling VMS compatibility syntax; demo: print, "$(F)", 1 - PRINTF: ditto - READ_ASCII: handling both whitespace and tab as delimiter by default; using FILE_LINES instead of spawning wc - READ_XWD: fixing a conditional statement typo - READF: bugfix - allowing reads from standard input (lun 0) - REVERSE: initial import - ROTATE: better error message - SIZE: fixing datatype (sign) conflict in IDL_SIZE structure assignment - SHOWFONT: initial import - SPAWN: fixed segfault when SHELL env. variable not set, undoing bitwise shift in EXIT_STATUS value; demo: spawn, "exit -1", e=i & help, i setting EXIT_STATUS parameter when nParam==0; demo: spawn, exit=i & help, i - SPL_INIT: initial import of C++ version (y0= and yn_1= not ready) - SPL_INTERP: ditto - STRING: handling VMS compatibility syntax; demo: help,string(1,"(G)") - STRSPLIT: will allow 'str' and ['str'] 1D strings - SYSTIME: correction for /JULIAN flag; conflicting keywords message - TV: managing [1,n,m], [n,1,m] and [n,m,1] cases when TRUE=0 - VOIGT: better management of the dimensions of output arrays - XYOUTS: axis thickness fix, DATA coordinates fix configure script: - HDF4/HDF5: linking with SZIP if needed - detecting presence of Python numarray package - printing summary information - support for linux ppc64 - using nc-config (if present) to determine netcdf LIBS/INCLUDES - using Magick++Config (if present) to determine Magick LIBS/INCLUDES - better ncurses/curses check, preventing linking both libraries other: - embedded formatting commands for plotting routines (TEXTOIDL works) - !DTOR & !RADEG values more precise - SVG terminal available via set_plot, 'svg' - misc. minor updates in readme/doc files - several new test routines - input/output: 64-bit OSX fix (xdr_long()/xdr_u_long() argument types) - allowing setting history-file lenght in startup file using !EDIT_INPUT - OpenSolaris compatibility fixes - handling some out-of-memory exceptions - gcc 4.4 compatibility fix - HDF5: v1.8 compatibility fix - widgets: some new functionality - mapping: support for new LIBPROJ4 0.9rc4: in short: --------- - thread pool support using OpenMP (G++ >= 4.2), - enhanced error-reporting (line numbering, message decoration, etc.) - new library routines, including: CPU, CROSSP, GET_SCREEN_SIZE, IMSL_BINOMIALCOEF, IMSL_CONSTANT, IMSL_ZEROPOLY, QUERY_*, WSHOW, WTN (wavelet transform), ... - enhanced HDF5 (15 new routines) and netCDF support - support for GRIB 1/2 file format (read-only, using ECMW GRIB_API) - several new command-line options, support for specifying batch files at command-line - bug-fixes in library routines and the interpreter - new plotting functionalities (contouring on maps, color PostScript output, ...) - enhanced detection of libraries in the configure script - enhanced "make install" and "make check" rules - compatibility fixes for various GCC versions and UNIX flavours in detail: -------------- interpreter: - fixed/enhanced numerous error-reporting related features including: line number tracking, error message "decoration" (prefixes etc.), inclusion of string-representation of error-related values in error messages - fixed STRUCT access of non struct struct member (e. g. a={b:0}&print,a.b.c ) - corrected beahvior of call_fun and call_lfun for RC_ABORT return code, old behavior lead to endless loop at startup in some conditions - fixed wrong handling of CONTINUE under certain conditions in nested loops - support for COMPILE_OPT OBSOLETE & !WARN.OBS_ROUTINES - support for numeric constants in explicit binary format, e.g. a='1010101'b - honouring COMPILE_OPT within $ and EXECUTE library routines: - BROYDEN: fixed behaviour with constant-returning functions - BYTEORDER: support for structures - CHECK_MATH: 2 undocument params and also keep memory of value - CONTOUR: memory-leak fix (thanks to Valgrind), support for the /OVERPLOT keyword, partial support for contouring on maps, more sanity checks for argument types, better filled-contour level-choice mechanism, fixing axis colour - CPU: initial import - CREATE_STRUCT: fixed behaviour with no parameters - CROSSP: initial import - CURSOR: verification if we are in X mode, support for lat/lon query on maps - DEVICE: support for /COLOR, XSIZE and YSIZE for PostScript driver, support for the GET_VISUAL_DEPTH keyword - DIST: runs correctly when called like dist([2,2]) - FFT: sanity check for the rank of argument, preventing bogus memory freeing with dcomplex input - FILE_BASENAME: support for array argument, better handling of empty and space-only strings - FILE_LINES: spawning subprocesses with /NOSHELL keyword to prevent execution of shell startup file - FILE_TEST: stripping the trailing '/' if present - [F,D,L,...]INDGEN: making the values of the resulting array more precise for large arrays (demo: print, (findgen(40000000))[40000000-1]) - GET_SCREEN_SIZE: initial import - GETENV: error message when called with /ENV and a positional parameter - GRIBAPI_*: initial import of GRIB-1/2 file format support using the ECMWF GRIB API - H5F_IS_HDF5, H5_GET_LIBVERSION, H5D_GET_TYPE, H5T_GET_SIZE, H5A_OPEN_NAME, H5A_OPEN_IDX, H5A_GET_NAME, H5A_GET_SPACE, H5A_GET_TYPE, H5A_GET_NUM_ATTRS, H5G_OPEN, H5A_CLOSE, H5T_CLOSE, H5G_CLOSE, H5A_READ: initial import - HELP: corrected output for expressions - HISTOGRAM: correcting binsize definition when max and nbins set, better INPUT-kw-related error message - IMSL_BINOMIALCOEF: initial import - IMSL_ZEROPOLY: initial import (using gsl_poly_complex_solve()) - IMSL_ZEROSYS: fixed behaviour with constant-returning functions - INVERT: fixing a segfault condition with non-global parameter - LA_TRIRED: checking if the first argument is an array - LOADCT: set !D.TABLE_SIZE from 0 to 256 - LOCALE_GET: returning locale of the parent process - N_TAGS: support for LENGTH keyword (currently equal to DATA_LENGTH) - NCDF_ATTGET: outputing byte arrays instead of strings - NCDF_ATTNAME: allowing to specify the global atribute number - NCDF_ATTPUT: support for LENGTH keyword - NCDF_VARGET: fixing a segfault condition - NCDF_VARINQ: fixing failed-assertion condition (dimension(0)) with scalar variables - NCDF_*: fixes in error handling, compatibility with netcd-4 (file handles are now Long instead of Int) - NEWTON: fixed behaviour with constant-returning functions - OPLOT: sanity checks for the rank of arguments - PLOT: adjusting axes when charsize changed, better automatic range selection, sanity checks for the rank of arguments - POINT_LUN: assuring the 2nd par is a global par - POLY_AREA: initial import - PRINT/PRINTF: changed output of trailing newline after empty string output, corrected alignment for all types - RSTRPOS: initial import - READ_TIFF: ignoring errors related to GeoTIFF fields in TIFF files - QUERY_BMP, QUERY_DICOM, QUERY_GIF, QUERY_IMAGE, QUERY_JPEG, QUERY_PICT, QUERY_PNG: QUERY_PPM, QUERY_TIFF: initial import (using Magick++'s ping functionality) - READ_ASCII: printing error message when DATA_START exceeds file length - REVERSE: support for /OVERWRITE keyword - ROUTINE_INFO: support for PARAMETERS keyword - ROUTINE_NAMES: fixed ARG_NAME keyword for values larger than current level, corrected name lookup, proper behaviour with the /STORE kw., fixed support for /FETCH kw. - STREGEX: preventing bogus call to basic_string::substr(-1,...) - STRMID: fixed behaviour for negative values of 3rd parameter - STRPOS: does no longer ignore undefined 3rd parameter - STRSPLIT: fixed probem related with STRTOK bug - STRTOK: fixed output dimensions - SURFACE: memory-leak fix (thanks to Valgrind), more sanity checks for argument types - TVRD: fixed segfault with no window open - WAIT: allowing interruption with control-c - WSHOW: initial import (ICONIC kwrd not implemented yet) - WTN: initial import (using GSL DWT routines) configuration/installation: - installing library .pro files, manpage and basic docs during make install - setting default library-routine search path if GDL_PATH/IDL_PATH not defined - checking if HDF4 was compiled with --disable-netcdf - checking if netCDF installation is usable (HDF4 installation conflict) - configure: checking if netcdfcpp.hpp is usable (conflicting hdf4/netcdf installation issue) - fixes in wxWidgets detection code - support for the Debian naming of the HDF4 libraries from the hdf4-alt packages (compiled with --disable-netcdf) - checking for GSL >=1.7 which is requiered to use both FFT and DWT at the same time other: - adding a manpage - Cygwin compatibility fixes (as of version 1.7.1, Cygwin still needs a patch for rpc and fenv) - adding on_error,2 for all routines implemented in GDL - error reporting for HDF5 support - Strassen algorithm for matrix multiplication (needs manual enabling) - !DEVICE.N_COLORS in now dependant on the actual X-window setting - handling "cannot connect to X-server" via a GDL error message - initial thread pool support using OpenMP - checking if PLplot supports the requested driver (ps, xwin, mem) and informing the user via a GDL error message if not - SVG plots: swithing between svg and svgcairo drivers by checking which drivers are supported by PLplot - support for -quiet and -e command-line options and for specifying batch files at command-line; ignoring numerous license-related options for compatibility - warning the user if MPI changes the working directory of GDL - welcome message changes (informing about the library-routine search path) - more meaningful contnents of the !VERSION structure - GCC 3.4.3, 3.4.4, 4.3.4, and 4.4 compatibility fixes - support for reading ASCII files not ending with newline character - ![X,Y].RANGE support in plotting routines - Allow neg. width for A format code, fixed T,TL,TR format codes - sanity checks in array-returning library routines preventing segfaults when called with invalid arguments - new test-routines: test_dims_of_arrays.pro, test_valgrind.pro, test_check_math.pro, test_get_screen_size.pro, test_nestedloop.pro, test_plotting_misc.pro, test_plotting_ranges.pro, test_grib.pro, test_poly2d.pro, test_wavelet.pro - inclusion of some of the test-routines in the "make check" rule - quick_start_GDL.sh script - making the initial "DECOMPOSED" setting of the X device dependant on the colour depth reported by the X-server 0.9: - FOREACH statement, syntax: FOREACH loopVar,array[,indexVar] DO - member function and procedure calls with '.' e. g.: object.aProcedure - support of negative index ranges. -1 is the last element, -2 the one before the last and so on. E.g.: array[-7:-5] - new widget features incl. WIDGET_DROPLIST - automatic garbage collection - numerous bugfixes (incl. SAVE/RESTORE, WRITEU, ...) - memory leak in FFT when using FFTw lib should be solved - all input types OK in FFT when using GSL FFT - new routines: HIST_2D, INTERPOL, MAP_CONTINENTS, POLYFILL, RESOLVE_ROUTINE, SPHER_HARM, IMSL_ERF - new keywords/calling sequences handled: - DEVICE, /INCHES, GET_SCREEN_SIZE - PRODUCT, /PRESERVE_TYPE, /INTEGER - REBIN: support for specifying new dimensions as an array - TOTAL, /PRESERVE_TYPE - FILE_SEARCH, /FOLD_CASE - STRSPLIT, /preserve_null - new test routines (invoked during "make check") - DIALOG_PICKFILE, based on Zenity, OK on most Linux and OSX - FILE_DELETE, FILE_COPY and FILE_EXPAND_PATH - SPL_INIT: now y0= and yn_1= ready - Compressed files should be well processed now (readf, printf, fstat, point_lun, ...). See test_zip.pro 0.9.1: - fixes/improveents in: CONTOUR, DIALOG_PICKFILE, EXECUTE, EXIT, FIX (TYPE=7 and /PRINT), FFT, FSTAT, HEAP_GC, MOMENT, NCDF_ATTNAME, NCDF_DIMDEF, NCDF_VARID, NCDF_VARPUT, INTERPOL, PLOTS, POINT_LUN (64-bit addressing), POLYFILL (support for LINE_FILL, SPACING, LINESTYLE, ORIENTATION and THICK), PRINT, PRINTF, SAVE/RESTORE, SPL_INIT (mem leak), STRSPLIT, SURFACE (added AX,AZ), WAIT, XYOUTS (support for the WIDTH kw), DEVICE (WINDOW_STATE kw) - other improvements: fixed reading of (big) compressed files, decomposed colours with PostScript, gdlffdicom update (v20100309), new test routines, improved cmake configuration (still experimental), fixed behaviour with non-comma locale-defined decimal separators - early draft of GDL User's & Developer's guide: source files in doc/udg, current pdf version at: http://gnudatalanguage.sf.net/gdl.pdf - Python bridge: Numarray -> NumPy transition (several known bugs still exist) - the .STEP command - new routines: CALL_EXTERNAL (by Christoph Fuch), DIALOG_MESSAGE, ROBERTS, SWAP_ENDIAN_INPLACE, CORRELATE 0.9.2: - tremendous speed improvements: Indexing, subroutine calls, operators (especially for scalar values in conjunction with OpenMP), ... - UNIT keyword for SPAWN (thanks to a patch by Greg Huey) - fixed ASSOC var indexing with a variable - new routines: FILE_MKDIR, FILE_WHICH (patch by H Xu), IDL_VALIDNAME (by Rene Preusker), SCOPE_VARFETCH, SEM_CREATE, SEM_LOCK, SEM_RELEASE, SEM_DELETE (SEM_* routines by Mateusz Turcza), - fixes/enhancements in: BETA, CONTOUR, CORRELATE, DIALOG_PICKFILE, EXPINT, HDF_OPEN, H5F_OPEN, HDF_SD_START, IGAMMA, IMSL_CONSTANT, INTERPOL, LOADCT, NCDF_CONTROL, NCDF_OPEN, ROUTINE_NAMES, TV, TVRD, XYOUTS (!P.MULTI vs. !P.POSITION, ORIENTATION with logscales), INTERPOLATE (the MISSING kw) - fixes in STREGEX, STRPOS, STRSPLIT - non-Encapsulated PostScript support along with XSIZE, YSIZE, XOFFSET, YOFFSET, PORTRAIT, LANDSCAPE and SCALE_FACTOR settings support for PostScript output (requires pslib - http://pslib.sourceforge.net/ and makes advantage of PLplot fixes introduced in PLplot 5.9.9) - memory leak fix (bug introduced in the previous version) - various testsuite & docs updates (incl. docs and examples for CALL_EXTERNAL) - fix in WordExp() when filename argument contain whitespaces (useful in various cases, including OPENR/W, FILE_MKDIR, ...) [AC 2012/01/04: not finished :( - !version.os now in lower case for Linux and Darwin 0.9.3: - activities on speed improvements continuing - Initial import of STRMATCH() - Initial import of USERSYM - SCOPE_VARFETCH (only LEVEL keyword supported) - keyword /NaN for HISTOGRAM - Initial import of LUDC, LUSOL and DETERM, OK now only for DOUBLE - Initial import of ROT, CONGRID and BILINEAR - Initial import of TV for PS output - fix in RANDOMN/RANDOMU (Binomial OK, conflicting keywords detected ...) - Initial import for QROMB(), QSIMP() (based on QROMB) and QROMO() - Initial import for TRISOL() - fix in ERASE for background color (preparing Coyote lib. support) - Initial import of STANDARDIZE and HIST_EQUAL - improvment in MAGICK related codes, especially MAGICK_PING (pb with ImageMagick (IM) in Ubuntu 12.04; GraphicsMagick can also be used instead of IM) - FZ_ROOTS: initial import (same way than IMSL_ZEROPOLY using gsl_poly_complex_solve(), only real coefs. for input poly) - FX_ROOT: initial import. in c++ - keyword DIM in MOMENT(), MEAN(), STDDEV(), VARIANCE(), SKEWNESS(), KURTOSIS() (requested DIM and other improvments) - keyword SIGN in FINITE - support for empty arrays and !NULL system variable - promotion of FOR loop index variable type - various improvments on READ_JPEG, READ_PNG, WRITE_JPEG, WRITE_PNG - keyword ICONIC in WSHOW - keyword ISOTROPIC in PLOT, CONTOUR - new widget features incl. WIDGET_LIST and CW_GROUP - various fix in FFT: DIM keyword, memory leak when using GSL - support for some overloaded operators (_overloadIsTrue, _overloadPlus, _overloadMinus, _overloadBracketsLeftSide, _overloadBracketsRightSide, _overloadEQ, _overloadNE) - support for .SKIP [NSteps] command 0.9.4: - when compiled with Eigen3 library, significant speed improvement in MATRIX_MULTIPLY() (and # operators), especially on multi-cores Basic loading managment included (if some core are busy). - LIST and HASH are fully supported even left-side struct access is possible e. g.: GDL> h = HASH('key',{tag1:1}) & h['key'].tag1 = 3 this even works with all (derived) GDL_OBJECTs: In this case (a variable set to) !NULL is passed as the OBJREF parameter to the OBJECT::_OVERLOADBRACKETSLEFTSIDE member procedure, it must in turn set this OBJREF parameter (the variable) to a POINTER to the heap variable to access. - .RESET_SESSION and .FULL_RESET_SESSION commands - CHOLSOL/CHOLDC using Eigen3 (sub-optimal but efficient for big matrix on multicores) (LA_CHOLSOL/LA_CHOLDC removed for technical issues) - large change in various graphic/plotting keywords (see below). 3D options supported, but some limitations due to the use of the plplot library. - PLOT, OPLOT: All keywords supported except FONT and CHANNEL, Correct handling of log/DATA/NORMAL/DEVICE coordinates and CLIPPING. - PSYMs shapes now identical to IDL's. - PLOTS: idem as above, all keywords now supported. - XYOUTS: idem as above, one-argument support (XYOUTS,"string"). Enhancement wrt. reference program: color,size,angle,etc of text are vectors. FONT and TEXT_AXES not supported. - CONTOUR: Support of all options except CELL_FILL, C_ANNOTATIONS, CLOSED, DOWNHILL, IRREGULAR, TRIANGULATION,PATH_*** Correct implementation of Z, [X,Y], i.e., contours may be skewed, rotated, etc depending on X and Y. Better than IDL: - a new ZLOG option makes log contours as well. - C_ORIENTATION, C_SPACING are also vectors. - log axes give better results - good contouring of Not-A-Number values in Z and MIN_VALUE/MAX_VALUE - CLIPPING ok. - Automatic limits in some cases still different from IDL. - AXIS and boxes in plots: all [XYZ]TICK[***] options supported except TICKV and a few TICKFORMAT specifics. - CURSOR: full support for CURSOR command, which is interruptible by control-c and has all the options. - SURFACE: all Keywords supported except "LEGO" and "CHANNEL". - Added SHADE_SURF (slow and imperfect shading from the plplot library). - Added cursor-related functions TVCRS and command EMPTY. - Added DEVICE options CURSOR_CROSSHAIR, CURSOR_STANDARD, CURSOR_ORIGINAL and GET/SET_GRAPHICS_FUNCTION (GXoR, GXand, etc). - Disabled by default the focus in the X11 graphics windows as IDL does and repositioned WINDOWS by default to top-right of screen. Screen size and behaviour using GDL_GR_X_WIDTH, GDL_GR_Y_WIDTH and GDL_GR_X_QSCREEN environment variables (X window) (GDL_GR_WIN_WIDTH, GDL_GR_WIN_WIDTH and GDL_GR_WIN_QSCREEN under windows) - WSHOW works irregularly, depending on the window manager. 0.9.5: - lot of improvments in Widgets related code. Available widgets: WIDGET_DRAW(!), WIDGET_BASE, WIDGET_BUTTON, WIDGET_DROPLIST, WIDGET_COMBOBOX, WIDGET_LIST, WIDGET_SLIDER, WIDGET_TAB, WIDGET_TEXT, WIDGET_LABEL, CW_BGROUP (Note: Not all keywords are supported yet (however, they are accepted) but almost all functional keywords. This means: Programs using these widgets should work but maybe look a bit different) Controlling routines: WIDGET_EVENT, WIDGET_CONTROL, XMANAGER - TIC and TOC - !CONST system variable - initial import of NetCDF-4 related codes: NCDF_GROUPSINQ, NCDF_GROUPNAME, NCDF_GROUPDEF, NCDF_FULLGROUPNAME, NCDF_GROUPPARENT, NCDF_DIMIDSINQ, NCDF_NCIDINQ, NCDF_VARIDSINQ - introducing the NULL device type, better result on Unix like system without X11 (e. g. computing nodes on HPC) - better free format for print, preserving precision digits. - ISA() and TYPENAME() 0.9.6: - support for projections now complete. See MAP_INSTALL for details. - new keywords (BOOLEAN,INTEGER,FLOAT,COMPLEX,STRING) in ISA() - two new system variables: !TRUE and !FALSE - initial import for SCOPE_TRACEBACK() (/sys and /struct not ready) - combination of input arrays in math. special functions now ok with IDL - SVSOL(); RESOLVE_ALL, more keywords in RESOLVE_ROUTINE - initial import of LA_LEAST_SQUARES (for Ulyss), required Eigen3 - keyword LEVEL in MESSAGE - support for Calendar format codes in input/output - better handling of multiaxes in plot - option --fakerelease for gdl: "$gdl --fakerelease 6.2" will pretend that the software release is 6.2 by setting !VERSION.RELASE to that value. !VERSION.RELASE is often tested by procedures to decide whether some function or option should be used. It is sometimes possible to use this option to fool a procedure that request a specific value of !VERSION.RELEASE 0.9.7 - Huge gains in plotting speed for X device by bypassing plplot's X11 color handling. Especially noticeable for remote X11 displays. - Widget numbering scheme aligned to IDL's. - Patched several buggy output formats (PRINT, etc). - better report of memory size (MEMORY command) for unix. - .RESET_SESSION OK. - better behaviour of WRITE_GIF and WRITE_PNG as well as other graphic formats. - Correct setup of !D.N_COLORS and !P.COLOR when switching devices and decomposed state. - Window-related commands (WSET,EMPTY,WINDOW...) now correctly handle the managed/widget/free/absent cases. - ISHFT() now an internal C++ function (for speed). - Begun implementation of TRIANGULATE when GDL is compiled with the QHULL library. Only the most basic support is provided. - Experimental: use device wxWidgets as replacement of X11 and WIN devices (of course when GDL is linked with the wxWidgets library). This is at the moment triggered by the environment variable GDL_USE_WX="YES" : setting this variable, the device 'X' or 'WIN' will actually be a wxWidgets device, with antialiasing and trueType fonts. - Experimental: calling GDL with option "--fussy" or setting the environment variable "GDL_IS_FUSSY" enforces the STRICTARR compiling scheme (array index always between "[]"). This generally speeds up procedure compilation. gdl-0.9.7/COPYING0000664000175100017510000003543313040614410013215 0ustar coulaiscoulais GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS gdl-0.9.7/quick_start_GDL.sh0000755000175100017510000000522613040614410015533 0ustar coulaiscoulais#!/bin/bash # # must be run as a BASH Shell # # AC: improved shell to avoid "big" when sourcing (or ".") this file ... # echo "(ba)sh or source ? "$BASH_SOURCE # # AC 01/10/2010: we can keep the current $GDL_PATH using -g [--gdl_path] # Absolute_PATH="`dirname \"$0\"`" Absolute_PATH="`( cd \"$Absolute_PATH\" && pwd )`" # if [ $BASH_SOURCE != $0 ] ; then echo "Please run this script throw one in the 2 next commands:" echo "1/ ./quick_run_GDL.sh" echo "2/ bash ./quick_run_GDL.sh" return fi # # AC 2011/08/19 to avoid conflict with other IDL/GDL environmments # which have been setup before # REF_IDL_PATH=${IDL_PATH} REF_GDL_PATH=${GDL_PATH} REF_IDL_STARTUP=${IDL_STARTUP} REF_GDL_STARTUP=${GDL_STARTUP} # IDL_PATH="" GDL_PATH="" IDL_STARTUP="" GDL_STARTUP="" # if [ -z $flag_help ] ; then flag_help=0 ; fi if [ -z $flag_quiet ] ; then flag_quiet=0 ; fi if [ -z $flag_valgrind ] ; then flag_valgrind=0 ; fi if [ -z $flag_gdl_path ] ; then flag_gdl_path=0 ; fi # while getopts ":ghqv-:" opt ; do case $opt in - ) case $OPTARG in quiet* ) echo "Quiet keyword swith ON" flag_quiet=1 ;; gdl_path) echo "Keeping GDL_PATH swith ON" flag_gdl_path=1 ;; help* ) echo "Help keyword swith ON" flag_help=1 ;; valgrind* ) echo "Valgrind keyword swith ON" flag_valgrind=1 ;; ? ) echo "option illegal -$OPTARG exit ;; * ) echo "option illegal -$OPTARG exit esac ;; q ) echo "Quiet keyword swith ON" flag_quiet=1 ;; g ) echo "Keeping GDL_PATH swith ON" flag_gdl_path=1 ;; h ) echo "Help keyword swith ON" flag_help=1 ;; v* ) echo "Valgrind keyword swith ON" flag_valgrind=1 ;; ? ) echo "option illegal -$OPTARG" exit ;; esac done # if [ "$flag_help" -eq 1 ] ; then echo "Usage: gdl -g [--gdl_path] -h [--help] -q [--quiet] -v [--valgrind]" exit fi # if [ "$flag_quiet" -eq 0 ] ; then echo "Running current GDL with ./src/pro and ./testsuite in GDL_PATH" fi # if [ "$flag_gdl_path" -eq 0 ] ; then export GDL_PATH='+'${Absolute_PATH}'/src/pro/:+'${Absolute_PATH}'/testsuite/' else export GDL_PATH='+'${Absolute_PATH}'/src/pro/:+'${Absolute_PATH}'/testsuite/:'${REF_GDL_PATH} fi # if [ "$flag_quiet" -eq 0 ] ; then echo $GDL_PATH fi # if [ "$flag_valgrind" -eq 1 ] ; then valgrind ${Absolute_PATH}/src/gdl else ${Absolute_PATH}/src/gdl fi # # restoring initial envionment # export IDL_PATH=${REF_IDL_PATH} export GDL_PATH=${REF_GDL_PATH} export IDL_STARTUP=${REF_IDL_STARTUP} export GDL_STARTUP=${REF_GDL_STARTUP} gdl-0.9.7/TODO0000664000175100017510000001045213040614410012644 0ustar coulaiscoulais Last update by Alain on 30 July 2009 Updated by Alain on 28 March 2008 This file contains: -- a ToDo list of missing commands -- a ToDo list related to system variables -- a ToDo list of missing Functions and Procedures -- a ToDo list of incomplete Functions and Procedures, missing keywords and limited/buggy functionnalities in existing func/pro -- some comments -- a DONE list containing info for future troubles/needs ToDo list of missing commands (not exhaustive, most requested) .rnew .skip .reset_session ToDo list related to system variables !ERROR, !ERR and !ERROR_STATE are not properly set by all library functions !EDIT_INPUT, preferences IDL_EDIT_INPUT, IDL_RBUF_PERSIST and IDL_RBUF_SIZE. ToDo list of Functions and Procedures * WMENU function Category: user interface Langage: GDL, later may be in C++ with widgets ! Difficulty: easy Contact: Alain Comments: undocumented feature coming from the old IDL versions (before 4.0). A draft exists, substiting the X11 interface by a console one. ToDo list of incomplete Function/Procedure, missing keywords ... * ON_ERROR and CATCH procedures Category: system Langage: C++ Difficulty: unknow Contact: Marc Comments: ON_ERROR and CATCH are not fully implemented (GDL recognizes them, but does not perform any action, ie. in case of error, the data is not used). * HELP Category: system Langage: C++ Difficulty: unknow Contact: Comments: some useful keywords are not handle * PLOT, OPLOT, PLOTS, CONTOUR, SURFACE, AXIS, XYOUTS Category: display Langage: C++ Difficulty: parts are obvious, other may be impossible with plplot lib! Contact: Alain Comments: some useful keywords are not handle * USERSYM Category: display Langage: C++ (linked to plplot library Difficulty: may be impossible with plplot lib! Contact: Joel or Alain Comments: * TVRD : keyword !order Category: display Langage: C++ (in devicex.hpp) Difficulty: unknow. Contact: Alain Comments: to be complete for !order keyword (managed in TV). A priori, the method p->Rotate(7) cannot be used on Byte arrays. * LA_ serie (based on the LAPACK routines) Category: numeric Langage: a priori C++ Difficulty: some existing algo, not under GPL ?? Contact: Comments: different personns have asked ... It is better to implement it in C/C++ because it is computer intensif Comments; About recently added Pro/Functions I move here some important procedures and functions which have been recently added; because they are important, they need to extensively tested. * MEDIAN: implementation of parameter "width" was done in summer 2008 Category: numeric Langage: C++ Difficulty: very difficult Contact: Alain Comments: codes in C/C++ in public domain or under GPL available, "interfaces" missing. Please make biblio before writing it, it is not obvious. Availability/efficienty of algo depend on data type !! It is better to implement it in C/C++ because it is computer intensif. --> Not sure all the cases have been tested. Please report tests and problems. * SPLINE serie (SPL_INIT, SPL_INTERP) Category: numeric Langage: C++ Difficulty: existing algo in NR, not under GPL. Contact: Alain Comments: A working version in GDL syntax has been put in CVS under src/pro It is better to implement it in C/C++ because it is computer intensif. * INVERT function : some exceptions Category: numeric Langage: C++ (in gsl_fun.cpp) Difficulty: easy. Contact: Alain Comments: the last exceptions shjould have been cleaned (input size, no-square matrix, string conversion should work). Very easy but could be time consuming if extensive tests. See currents tests in testsuite/test_invert_matrix.pro DONE and revisited * BESELI/BESELJ/BESELK Category: numeric Langage: C++ (in math_fun_ac.cpp) Difficulty: unknow. Contact: Alain Comments: 1/ some details need to be fix when the arrays are not commensurable. It is highly probable that other functions do suffer from the same problems. Some have been corrected (the GAMMA/BETA family) and can be used as template. 2/ since mid-2008 (?) GSL does include non integer Besel functions ... The Besel family has been revisted during summer 2009. Non integer orders have been added. Boundaries tests should be OK. Clean processing of input arrays dimensionning was take into account, with consequence on other functions like VOIGT, BETA ... (see examples in testsuite/test_MathFunctionsDim.pro and also bugs in IDL) gdl-0.9.7/INSTALL.CMake0000664000175100017510000000610613040614410014165 0ustar coulaiscoulaisBe sure that you have at least CMake 2.6 (cmake --version) Create a new directory where the objects and executables will be built, e.g. $ mkdir build; cd !$ Then run cmake pointing it to the root directory of gdl: $ cmake .. You can optionally specify a custom install prefix, e.g.: $ cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/../install The default build mode is "Release" which enables compiler optimisations and disables storing debugging symbols in the GDL binary. To use the "Debug" mode type: $ cmake .. -DCMAKE_BUILD_TYPE=Debug To use a non-default C++ compiler, one needs to call e.g.: $ cmake .. -DCMAKE_CXX_COMPILER=clang++ Numerous features of GDL rely on external libraries. These features can be enabled or disabled using CMake options. Most of the optional features have a flag that controls enabling/disabling the feature (e.g. EIGEN3, FFTW, HDF5, MAGICK, PSLIB, GRAPHICSMAGICK, GRIB, GSHHS, HDF, ...) and a flag that allows to specify a custom location of a given package (e.g. EIGEN3DIR, FFTWDIR, HDF5DIR, ...). Both the on/off and the path-spec options are passed to CMake as command=line options prefixed with "-D", e.g.: $ cmake .. -DREADLINE=OFF' # to disable readline $ cmake .. -DFFTWDIR=/opt/local/ # alternative FFTW path Other options include: - PYTHONVERSION to chose a particular Python version if multiple are installed on the system, - OLDPLPLOT to switch off features requiring newer plplot versions, - GDL_DATA_DIR (default: /share/gnudatalanguage) to specify a custom installation location for GDL files (a subdirectory of the main installation prefix) The list of all GDL-related options accepted by CMake along with their default values can be obtained by calling: $ cmake .. -LAH | grep -A1 "// GDL: " Results are cached. So if you need to specify a new libraries that have already been found you have to delete CMakeCache.txt and rerun cmake. If you are on a Unix system, you can run `make' to begin compilation (optionally with the number of concurrent processes specified using the -j option): $ make -j 3 For other systems, a native project file will be produced. To launch the tests, run: $ make check To install, type: $ make install Other useful commands include `make help' to view a list of targets and `make edit_cache' to edit cache results (variables defined in advanced mode shouldn't be edited). examples: mkdir gdl-clang cd gdl-clang cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DPYTHON=NO -DCMAKE_CXX_FLAGS_RELEASE=" -Wno-return-type -Wno-switch -Wno-format -O3 " -DPLPLOTDIR="somewhere" -DLIBPROJ4=YES -DGSHHS=YES -DGSHHSDIR="/where/is/gshhs" -DHDF=YES -DUDUNITS=YES -DUDUNITSDIR=/usr/include/udunits2 -DQHULL=OFF ../gdl-lastversionfromcvs make -j 4 sudo make install or mkdir gdl-gcc cd gdl-gcc cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON=NO -DCMAKE_CXX_FLAGS_RELEASE=" -Wno-return-type -Wno-switch -Wno-format -O3 " -DPLPLOTDIR="somewhere" -DLIBPROJ4=YES -DGSHHS=YES -DGSHHSDIR="/where/is/gshhs" -DHDF=YES -DUDUNITS=YES -DUDUNITSDIR=/usr/include/udunits2 -DQHULL=OFF ../gdl-lastversionfromcvs make -j 4 sudo make install gdl-0.9.7/Makefile.am0000664000175100017510000000036713040614410014214 0ustar coulaiscoulais# not a GNU package. You can remove this line, if # have all needed files, that a GNU package needs # AUTOMAKE_OPTIONS = foreign 1.4 SUBDIRS = src testsuite doc basicdocdir = $(GDLDATADIR) basicdoc_DATA = AUTHORS README EXTRA_DIST = prolib_DATA gdl-0.9.7/autom4te.cache/0000775000175100017510000000000013040614613014763 5ustar coulaiscoulaisgdl-0.9.7/src/0000775000175100017510000000000013040614613012746 5ustar coulaiscoulaisgdl-0.9.7/src/prognode.cpp0000664000175100017510000015061313040614410015270 0ustar coulaiscoulais/*************************************************************************** prognode.cpp - GDL's AST is made of ProgNodes ------------------- begin : July 22 2002 copyright : (C) 2002 by Marc Schellens email : m_schellens@users.sf.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "includefirst.hpp" #include #include "prognodeexpr.hpp" #include "dinterpreter.hpp" #include "objects.hpp" #include "nullgdl.hpp" using namespace std; bool* GetNonCopyNodeLookupArray() { static bool nonCopyNodeLookupArray[ GDLTokenTypes::MAX_TOKEN_NUMBER]; static bool doInit = true; if( doInit) { for( int i=0; i ProgNode ProgNode::ProgNode( const RefDNode& refNode): ttype( refNode->getType()), text( refNode->getText()), keepRight( false), keepDown( false), breakTarget( NULL), down( NULL), right( NULL), cData( refNode->StealCData()), // stealing is crucial here because references might exist var( refNode->var), // as arrayindices libFun( refNode->libFun), libPro( refNode->libPro), lineNumber( refNode->getLine()), arrIxList( refNode->StealArrIxList()), arrIxListNoAssoc( refNode->StealArrIxNoAssocList()), // arrIxList( refNode->CloneArrIxList()), labelStart( refNode->labelStart), labelEnd( refNode->labelEnd) { initInt = refNode->initInt; if( libFun != NULL) libFunFun = libFun->Fun(); else if( libPro != NULL) libProPro = libPro->Pro(); } ProgNode::~ProgNode() { // delete cData in case this node is a constant if( (getType() == GDLTokenTypes::CONSTANT)) { GDLDelete(cData); } if( (getType() == GDLTokenTypes::ARRAYIX)) { delete arrIxList; delete arrIxListNoAssoc; } if( !keepDown) delete down; if( !keepRight) delete right; } ProgNodeP ProgNode::GetNULLProgNodeP() { return interpreter->GetNULLProgNodeP(); } void FORNode::KeepRight( ProgNodeP r) { throw GDLException( "Internal error: FORNode::KeepRight() called. Please report."); } void FOR_STEPNode::KeepRight( ProgNodeP r) { throw GDLException( "Internal error: FOR_STEPNode::KeepRight() called. Please report."); } void FOREACHNode::KeepRight( ProgNodeP r) { throw GDLException( "Internal error: FOREACHNode::KeepRight() called. Please report."); } void FOREACH_INDEXNode::KeepRight( ProgNodeP r) { throw GDLException( "Internal error: FOREACH_INDEXNode::KeepRight() called. Please report."); } bool ProgNode::ConstantNode() { if( this->getType() == GDLTokenTypes::SYSVAR) { // note: this works, because system variables are never // passed by reference SizeT rdOnlySize = sysVarRdOnlyList.size(); for( SizeT i=0; ivar) return true; } return this->getType() == GDLTokenTypes::CONSTANT; } ///////////////////////////////////////////////////////// // Eval ///////////////////////////////////////////////////////// BaseGDL* ASSIGNNode::Eval() { ProgNodeP _t = this->getFirstChild(); BaseGDL* res = _t->Eval(); Guard r_guard( res); BaseGDL** l=_t->getNextSibling()->LExpr( res); //l_expr(_t, res); r_guard.release(); return res; } BaseGDL* ASSIGN_ARRAYEXPR_MFCALLNode::Eval() { ProgNodeP _t = this->getFirstChild(); BaseGDL* res = _t->Eval(); Guard r_guard( res); ProgNodeP mark = _t->getNextSibling(); // try MFCALL try { BaseGDL** l=interpreter->l_arrayexpr_mfcall_as_mfcall( mark); if( res != (*l)) { GDLDelete(*l); *l = res->Dup(); // if( r_guard.get() == res) // owner // r_guard.release(); // else // res = res->Dup(); } } catch( GDLException& ex) { // try ARRAYEXPR try { BaseGDL** l=interpreter->l_arrayexpr_mfcall_as_arrayexpr(mark, res); // if( r_guard.get() == res) // owner // r_guard.release(); // else // res = res->Dup(); } catch( GDLException& ex2) { throw GDLException(ex.toString() + " or "+ex2.toString()); } } r_guard.release(); return res; } BaseGDL* ASSIGN_REPLACENode::Eval() { ProgNodeP _t = this->getFirstChild(); // Guard r_guard; // BaseGDL* res; // if( _t->getType() == GDLTokenTypes::FCALL_LIB) // { // // res=interpreter->lib_function_call(_t); // // _t = interpreter->GetRetTree(); // res = static_cast(_t)->EvalFCALL_LIB(); // _t = _t->getNextSibling(); // if( !interpreter->CallStackBack()->Contains( res)) // r_guard.Init( res); // else if( res == (*l)) // return; // } // else // { // // res=interpreter->tmp_expr(_t); // // _t = interpreter->GetRetTree(); // res = _t->Eval(); // _t = _t->getNextSibling(); // r_guard.Init( res); // } BaseGDL* res = _t->Eval(); Guard r_guard( res); _t = _t->getNextSibling(); BaseGDL** l=_t->LEval(); if( *l != res) { GDLDelete(*l); *l = res; } r_guard.Release(); return res->Dup(); } BaseGDL** ASSIGN_REPLACENode::LEval() { ProgNodeP _t = this->getFirstChild(); BaseGDL* res = _t->Eval(); Guard r_guard( res); _t = _t->getNextSibling(); BaseGDL** l=_t->LEval(); if( (*l) != res) { GDLDelete(*l); *l = res; } r_guard.Release(); return l; } BaseGDL* ARRAYDEFNode::Eval() { // GDLInterpreter:: DType cType=GDL_UNDEF; // conversion type SizeT maxRank=0; ExprListT exprList; BaseGDL* cTypeData; //ProgNodeP __t174 = this; //ProgNodeP a = this; //match(antlr::RefAST(_t),ARRAYDEF); ProgNodeP _t = this->getFirstChild(); while( _t != NULL) { BaseGDL* e=_t->Eval();//expr(_t); _t = _t->getNextSibling(); //WRONG _t = ProgNode::interpreter->_retTree; // add first (this way it will get cleaned up anyway) if( e == NullGDL::GetSingleInstance()) continue; exprList.push_back(e); DType ty=e->Type(); if( ty == GDL_UNDEF) { throw GDLException( _t, "Variable is undefined: "+ ProgNode::interpreter->Name(e),true,false); } if( cType == GDL_UNDEF) { // array of struct is (of course) fine // if( DTypeOrder[ty] >= 100) // struct, ptr, object // { // throw // GDLException( _t, e->TypeStr()+ // " is not allowed in this context.",true,false); // } cType=ty; cTypeData=e; } else { if( cType != ty) { // update order if larger type (or types are equal) if( DTypeOrder[ty] >= DTypeOrder[cType]) { if( DTypeOrder[ty] >= 100) // struct, ptr, object { throw GDLException( _t, e->TypeStr()+ " is not allowed in this context.",true,false); } cType=ty; cTypeData=e; } else if( DTypeOrder[cType] >= 100) // struct, ptr, object { throw GDLException( _t, cTypeData->TypeStr()+ " is not allowed in this context.",true,false); } } if( ty == GDL_STRUCT) { // check for struct compatibility DStructDesc* newS= static_cast(e)->Desc(); DStructDesc* oldS= static_cast(cTypeData)->Desc(); // *** here (*newS) != (*oldS) must be set when // unnamed structs not in struct list anymore // WRONG! This speeds up things for named structs // unnamed structs all have their own desc // and thus the next is always true for them if( newS != oldS) { if( (*newS) != (*oldS)) throw GDLException( _t, "Conflicting data structures: "+ ProgNode::interpreter->Name(cTypeData)+", "+ProgNode::interpreter->Name(e),true,false); } } } // memorize maximum Rank SizeT rank=e->Rank(); if( rank > maxRank) maxRank=rank; } _t = this->getNextSibling(); if( exprList.empty()) return NullGDL::GetSingleInstance(); BaseGDL* res=cTypeData->CatArray(exprList,this->arrayDepth,maxRank); // ProgNode::interpreter->_retTree = _t; return res; } BaseGDL* STRUCNode::Eval() { // don't forget the struct in extrat.cpp if you change something here // "$" as first char in the name is necessary // as it defines unnnamed structs (see dstructdesc.hpp) DStructDesc* nStructDesc = new DStructDesc( "$truct"); // instance takes care of nStructDesc since it is unnamed // DStructGDL* instance = new DStructGDL( nStructDesc, dimension(1)); DStructGDL* instance = new DStructGDL( nStructDesc); Guard instance_guard(instance); ProgNodeP rTree = this->getNextSibling(); // match(antlr::RefAST(_t),STRUC); ProgNodeP _t = this->getFirstChild(); for (; _t != NULL;) { ProgNodeP si = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); BaseGDL* e=_t->Eval(); //interpreter->expr(_t); _t = _t->getNextSibling(); //WRONG _t = ProgNode::interpreter->_retTree; // also adds to descriptor, grabs instance->NewTag( si->getText(), e); } instance_guard.release(); BaseGDL* res=instance; // ProgNode::interpreter->_retTree = rTree; return res; } BaseGDL* NSTRUCNode::Eval() { ProgNodeP id = NULL; ProgNodeP i = NULL; ProgNodeP ii = NULL; DStructDesc* nStructDesc; Guard nStructDescGuard; BaseGDL* e; BaseGDL* ee; ProgNodeP n = this; // match(antlr::RefAST(_t),NSTRUC); ProgNodeP _t = this->getFirstChild(); id = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); // definedStruct: no tags present if( n->structDefined == 1) ProgNode::interpreter->GetStruct( id->getText(), _t); // find struct 'id' (for compatibility check) DStructDesc* oStructDesc= FindInStructList( structList, id->getText()); if( oStructDesc == NULL || oStructDesc->NTags() > 0) { // not defined at all yet (-> define now) // or completely defined (-> define now and check equality) nStructDesc= new DStructDesc( id->getText()); // guard it nStructDescGuard.Reset( nStructDesc); } else { // NTags() == 0 // not completely defined yet (only name in list) nStructDesc= oStructDesc; } // the instance variable // DStructGDL* instance= new DStructGDL( nStructDesc, // dimension(1)); DStructGDL* instance= new DStructGDL( nStructDesc); Guard instance_guard(instance); while( _t != NULL) { switch ( _t->getType()) { case DInterpreter::IDENTIFIER: { i = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); e=_t->Eval();//expr(_t); _t = _t->getNextSibling(); //WRONG _t = ProgNode::interpreter->_retTree; // also adds to descriptor, grabs instance->NewTag( i->getText(), e); break; } case DInterpreter::INHERITS: { //ProgNodeP tmp61_AST_in = _t; // match(antlr::RefAST(_t),INHERITS); _t = _t->getNextSibling(); ii = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); DStructDesc* inherit=ProgNode::interpreter->GetStruct( ii->getText(), _t); // nStructDesc->AddParent( inherit); instance->AddParent( inherit); // adds operatorList if GDL_OBJECT // set up operators form member functions // they were set when the struct was not derived from GDL_OBJECT and hence ignored if( nStructDesc == oStructDesc && inherit->Name() == GDL_OBJECT_NAME) { // operatorList should have been set in instance->AddParent( inherit); assert( nStructDesc->GetOperatorList() != NULL); // find operators in member subroutines nStructDesc->SetupOperators(); } break; } default: /* case ASSIGN: case ASSIGN_REPLACE: case ARRAYDEF: case ARRAYEXPR: case CONSTANT: case DEREF: case EXPR: case FCALL: case FCALL_LIB: case FCALL_LIB_RETNEW: case MFCALL: case MFCALL_PARENT: case NSTRUC: case NSTRUC_REF: case POSTDEC: case POSTINC: case STRUC: case SYSVAR: case VAR: case VARPTR: case DEC: case INC: case DOT: case QUESTION:*/ { ee=_t->Eval();//expr(_t); _t = _t->getNextSibling(); //WRONG _t = ProgNode::interpreter->_retTree; // also adds to descriptor, grabs instance->NewTag( oStructDesc->TagName( nStructDesc->NTags()), ee); break; } } // switch } // while // inherit refers to nStructDesc, in case of error both have to // be freed here if( oStructDesc != NULL) { if( oStructDesc != nStructDesc) { oStructDesc->AssureIdentical(nStructDesc); instance->DStructGDL::SetDesc(oStructDesc); //GDLDelete(nStructDesc); // auto_ptr } } else { // release from guard (if not NULL) nStructDescGuard.release(); // insert into struct list structList.push_back(nStructDesc); } instance_guard.release(); BaseGDL* res=instance; // ProgNode::interpreter->_retTree = this->getNextSibling(); return res; } BaseGDL* NSTRUC_REFNode::Eval() { if( this->dStruct == NULL) { // ProgNodeP rTree = this->getNextSibling(); // match(antlr::RefAST(_t),NSTRUC_REF); ProgNodeP _t = this->getFirstChild(); ProgNodeP idRef = _t; // match(antlr::RefAST(_t),IDENTIFIER); // find struct 'id' // returns it or throws an exception /* DStructDesc* */ dStruct=ProgNode::interpreter->GetStruct( idRef->getText(), _t); _t = _t->getNextSibling(); } BaseGDL* res = new DStructGDL( dStruct, dimension(1)); // ProgNode::interpreter->_retTree = this->getNextSibling(); return res; } // parameter nodes //////////////////////////////////////////////// // 1. keywords //// void KEYDEF_REFNode::Parameter( EnvBaseT* actEnv) { ProgNodeP _t = this->getFirstChild(); // ProgNodeP knameR = _t; // match(antlr::RefAST(_t),IDENTIFIER); // _t = _t->getNextSibling(); BaseGDL** kvalRef=_t->getNextSibling()->LEval(); //ProgNode::interpreter->ref_parameter(_t->getNextSibling(), actEnv); // pass reference actEnv->SetKeyword( _t->getText(), kvalRef); ProgNode::interpreter->_retTree = this->getNextSibling(); } void KEYDEF_REF_EXPRNode::Parameter( EnvBaseT* actEnv) { ProgNodeP _t = this->getFirstChild(); // // ProgNodeP knameE = _t; // // match(antlr::RefAST(_t),IDENTIFIER); // // _t = _t->getNextSibling(); // BaseGDL* kval= _t->getNextSibling()->Eval();//expr(_t); // GDLDelete(kval); // // _t = ProgNode::interpreter->_retTree; // BaseGDL** kvalRef=_t->getNextSibling()->getNextSibling()->LEval(); // // BaseGDL** kvalRef=ProgNode::interpreter->_retTree->LEval(); // // ProgNode::interpreter-> // // ref_parameter(ProgNode::interpreter->_retTree, actEnv); BaseGDL** kvalRef= _t->getNextSibling()->LEval();//expr(_t); // pass reference actEnv->SetKeyword( _t->getText(), kvalRef); ProgNode::interpreter->_retTree = this->getNextSibling(); } void KEYDEFNode::Parameter( EnvBaseT* actEnv) { ProgNodeP _t = this->getFirstChild(); // match(antlr::RefAST(_t),IDENTIFIER); // _t = _t->getNextSibling(); BaseGDL* kval= _t->getNextSibling()->Eval();//expr(_t); // _t = ProgNode::interpreter->_retTree; // pass value actEnv->SetKeyword( _t->getText(), kval); ProgNode::interpreter->_retTree = this->getNextSibling(); } void KEYDEF_REF_CHECKNode::Parameter( EnvBaseT* actEnv) { // ProgNodeP _t = this->getFirstChild(); // ProgNodeP knameCk = _t; // match(antlr::RefAST(_t),IDENTIFIER); // _t = _t->getNextSibling(); ProgNodeP p = this->getFirstChild()->getNextSibling(); BaseGDL* rVal; BaseGDL** lVal = p->EvalRefCheck( rVal); if( lVal != NULL) { // pass reference actEnv->SetKeyword(this->getFirstChild()->getText(), lVal); } else { // pass value actEnv->SetKeyword(this->getFirstChild()->getText(), rVal); } ProgNode::interpreter->_retTree = this->getNextSibling(); } // 2. Parameters //// bool REFNode::ParameterDirect( BaseGDL*& ref) { BaseGDL** pvalRef=this->getFirstChild()->LEval(); ref = *pvalRef; return true; } void REFNode::Parameter( EnvBaseT* actEnv) { // ProgNodeP _t = this->getFirstChild(); BaseGDL** pvalRef=this->getFirstChild()->LEval(); // ProgNode::interpreter->ref_parameter(this->getFirstChild(), actEnv); // _t = ProgNode::interpreter->_retTree; // pass reference actEnv->SetNextParUnchecked(pvalRef); ProgNode::interpreter->_retTree = this->getNextSibling(); } void REFVNNode::Parameter( EnvBaseT* actEnv) { BaseGDL** pvalRef=this->getFirstChild()->LEval(); actEnv->SetNextParUncheckedVarNum(pvalRef); ProgNode::interpreter->_retTree = this->getNextSibling(); } bool REF_EXPRNode::ParameterDirect( BaseGDL*& ref) { // BaseGDL* pval= this->getFirstChild()->Eval();//expr(_t); // GDLDelete(pval); // BaseGDL** pvalRef=this->getFirstChild()->getNextSibling()->LEval(); BaseGDL** pvalRef=this->getFirstChild()->LEval(); ref = *pvalRef; return true; } void REF_EXPRNode::Parameter( EnvBaseT* actEnv) { // match(antlr::RefAST(_t),REF_EXPR); // BaseGDL* pval= this->getFirstChild()->Eval();//expr(_t); // GDLDelete(pval); // BaseGDL** pvalRef=this->getFirstChild()->getNextSibling()->LEval(); BaseGDL** pvalRef=this->getFirstChild()->LEval(); // pass reference actEnv->SetNextParUnchecked(pvalRef); ProgNode::interpreter->_retTree = this->getNextSibling(); } void REF_EXPRVNNode::Parameter( EnvBaseT* actEnv) { // BaseGDL* pval= this->getFirstChild()->Eval();//expr(_t); // GDLDelete(pval); // BaseGDL** pvalRef=this->getFirstChild()->getNextSibling()->LEval(); BaseGDL** pvalRef=this->getFirstChild()->LEval(); actEnv->SetNextParUncheckedVarNum(pvalRef); ProgNode::interpreter->_retTree = this->getNextSibling(); } // returns true if reference, false else bool REF_CHECKNode::ParameterDirect( BaseGDL*& pval) { ProgNodeP p = this->getFirstChild(); BaseGDL** lVal = p->EvalRefCheck( pval); return (lVal != NULL); } void REF_CHECKNode::Parameter( EnvBaseT* actEnv) { ProgNodeP p = this->getFirstChild(); BaseGDL* rVal; BaseGDL** lVal = p->EvalRefCheck( rVal); if( lVal != NULL) { // pass reference actEnv->SetNextParUnchecked( lVal); } else { // pass value actEnv->SetNextParUnchecked( rVal); } ProgNode::interpreter->_retTree = this->getNextSibling(); } void REF_CHECKVNNode::Parameter( EnvBaseT* actEnv) { ProgNodeP p = this->getFirstChild(); BaseGDL* rVal; BaseGDL** lVal = p->EvalRefCheck( rVal); if( lVal != NULL) { // pass reference actEnv->SetNextParUncheckedVarNum( lVal); } else { // pass value actEnv->SetNextParUncheckedVarNum( rVal); } ProgNode::interpreter->_retTree = this->getNextSibling(); } bool ParameterNode::ParameterDirect( BaseGDL*& pval) { pval = this->getFirstChild()->Eval(); return false; } void ParameterNode::Parameter( EnvBaseT* actEnv) { // BaseGDL* pval=this->Eval();//expr(this); // pass value actEnv->SetNextParUnchecked(this->getFirstChild()->Eval()); ProgNode::interpreter->_retTree = this->getNextSibling(); } void ParameterVNNode::Parameter( EnvBaseT* actEnv) { actEnv->SetNextParUncheckedVarNum(this->getFirstChild()->Eval()); ProgNode::interpreter->_retTree = this->getNextSibling(); } RetCode WRAPPED_FUNNode::Run() { EnvUDT* env = static_cast( ProgNode::interpreter->CallStackBack()); BaseGDL* res = (*this->fun)( env); interpreter->SetRetTree( this->getNextSibling()); // ??? assert( ProgNode::interpreter->returnValue == NULL); // GDLDelete(ProgNode::interpreter->returnValue); ProgNode::interpreter->returnValue = res; return RC_RETURN; } RetCode WRAPPED_PRONode::Run() { EnvUDT* env = static_cast( ProgNode::interpreter->CallStackBack()); (*this->pro)( env); interpreter->SetRetTree( this->getNextSibling()); // ??? return RC_RETURN; } RetCode ASSIGNNode::Run() { BaseGDL* r; BaseGDL** l; Guard r_guard; // match(antlr::RefAST(_t),ASSIGN); ProgNodeP _t = this->getFirstChild(); if( NonCopyNode(_t->getType())) { r= _t->EvalNC(); //ProgNode::interpreter->indexable_expr(_t); _t = _t->getNextSibling(); l=_t->LExpr( r); //ProgNode::interpreter->l_expr(_t, r); } else { BaseGDL** ref = _t->EvalRefCheck(r); //ProgNode::interpreter->indexable_tmp_expr(_t); if( ref == NULL) { r_guard.Init( r); } else { r = *ref; } _t = _t->getNextSibling(); l=_t->LExpr( r); //ProgNode::interpreter->l_expr(_t, r); } ProgNode::interpreter->_retTree = this->getNextSibling(); return RC_OK; } RetCode ASSIGN_ARRAYEXPR_MFCALLNode::Run() { BaseGDL* r; BaseGDL** l; Guard r_guard; //match(antlr::RefAST(_t),ASSIGN_REPLACE); ProgNodeP _t = this->getFirstChild(); { // BOTH { // ASSIGN if( NonCopyNode(_t->getType())) { r= _t->EvalNC(); //ProgNode::interpreter->indexable_expr(_t); _t = _t->getNextSibling(); // ProgNode::interpreter->_retTree; } else { BaseGDL** ref = _t->EvalRefCheck( r); //ProgNode::interpreter->indexable_tmp_expr(_t); if( ref == NULL) { r_guard.Reset( r); } else { r = *ref; } _t = _t->getNextSibling(); } } } // try MFCALL try { l=ProgNode::interpreter->l_arrayexpr_mfcall_as_mfcall(_t); if( r != (*l)) { GDLDelete(*l); if( r_guard.get() == r) *l = r_guard.release(); else *l = r->Dup(); } } catch( GDLException& e) { // try ARRAYEXPR try { l=ProgNode::interpreter->l_arrayexpr_mfcall_as_arrayexpr(_t/*lExpr*/, r); } catch( GDLException& e2) { throw GDLException(e.toString() + " or "+e2.toString()); } } ProgNode::interpreter->_retTree = this->getNextSibling(); return RC_OK; } RetCode ASSIGN_REPLACENode::Run() { //match(antlr::RefAST(_t),ASSIGN_REPLACE); ProgNodeP _t = this->getFirstChild(); BaseGDL* r = _t->Eval(); Guard r_guard( r); _t = _t->getNextSibling(); assert(_t != NULL); BaseGDL** l = _t->LEval(); if( r != (*l)) // && (*l) != NullGDL::GetSingleInstance()) { GDLDelete(*l); *l = r; } r_guard.Release(); ProgNode::interpreter->SetRetTree( this->getNextSibling()); return RC_OK; } RetCode PCALL_LIBNode::Run() { // match(antlr::RefAST(_t),PCALL_LIB); ProgNodeP _t = this->getFirstChild(); ProgNodeP pl = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); EnvT* newEnv=new EnvT( this, pl->libPro);//libProList[pl->proIx]); ProgNode::interpreter->parameter_def_nocheck(_t, newEnv); Guard guardEnv( newEnv); // make the call // static_cast(newEnv->GetPro())->Pro()(newEnv); pl->libProPro(newEnv); ProgNode::interpreter->SetRetTree( this->getNextSibling()); // ProgNode::interpreter->_retTree = this->getNextSibling(); return RC_OK; } RetCode MPCALLNode::Run() { BaseGDL *self; EnvUDT* newEnv; // match(antlr::RefAST(_t),MPCALL); ProgNodeP _t = this->getFirstChild(); self=_t->Eval(); //ProgNode::interpreter->expr(_t); _t = _t->getNextSibling(); // ProgNode::interpreter->_retTree; ProgNodeP mp = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); Guard self_guard(self); newEnv=new EnvUDT( mp, self); self_guard.release(); ProgNode::interpreter->parameter_def(_t, newEnv); { // this block is crucial as guard has to be destroyed before SetRetTree // better than auto_ptr: auto_ptr wouldn't remove newEnv from the stack StackGuard guard(ProgNode::interpreter->CallStack()); // push environment onto call stack ProgNode::interpreter->callStack.push_back(newEnv); // make the call ProgNode::interpreter->call_pro(static_cast(newEnv->GetPro())->GetTree()); } ProgNode::interpreter->SetRetTree( this->getNextSibling()); return RC_OK; } RetCode MPCALL_PARENTNode::Run() { BaseGDL *self; EnvUDT* newEnv; // match(antlr::RefAST(_t),MPCALL_PARENT); ProgNodeP _t = this->getFirstChild(); self=_t->Eval(); //ProgNode::interpreter->expr(_t); _t = _t->getNextSibling(); // ProgNode::interpreter->_retTree; // self=ProgNode::interpreter->expr(_t); // _t = ProgNode::interpreter->_retTree; ProgNodeP parent = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); ProgNodeP pp = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); Guard self_guard(self); newEnv = new EnvUDT( pp, self, parent->getText()); self_guard.release(); ProgNode::interpreter->parameter_def(_t, newEnv); //if( this->getLine() != 0) ProgNode::interpreter->callStack.back()->SetLineNumber( this->getLine()); { // this block is crucial as guard has to be destroyed before SetRetTree // better than auto_ptr: auto_ptr wouldn't remove newEnv from the stack StackGuard guard(ProgNode::interpreter->callStack); // push environment onto call stack ProgNode::interpreter->callStack.push_back(newEnv); // make the call ProgNode::interpreter->call_pro(static_cast(newEnv->GetPro())->GetTree()); } ProgNode::interpreter->SetRetTree( this->getNextSibling()); // ProgNode::interpreter->_retTree = this->getNextSibling(); return RC_OK; } RetCode PCALLNode::Run() { ProgNodeP _t = this->getFirstChild(); ProgNodeP p = _t; // match(antlr::RefAST(_t),IDENTIFIER); _t = _t->getNextSibling(); ProgNode::interpreter->SetProIx( p); EnvUDT* newEnv = new EnvUDT( p, proList[p->proIx]); ProgNode::interpreter->parameter_def(_t, newEnv); { // this block is crucial as guard has to be destroyed before SetRetTree // better than auto_ptr: auto_ptr wouldn't remove newEnv from the stack StackGuard guard(ProgNode::interpreter->callStack); // push environment onto call stack ProgNode::interpreter->callStack.push_back(newEnv); // make the call ProgNode::interpreter->call_pro(static_cast(newEnv->GetPro())->GetTree()); } ProgNode::interpreter->SetRetTree( this->getNextSibling()); // ProgNode::interpreter->_retTree = this->getNextSibling(); return RC_OK; } BaseGDL* POSTDECNode::Eval() { BaseGDL* res; BaseGDL** ref=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::POSTDEC, res); return res; } // BaseGDL** POSTDECNode::LEval() // { // throw GDLException(this,"Internal error: POSTDECNode::LEVal() called.",true,false); // return NULL; // } BaseGDL* DECNode::Eval() { BaseGDL* res; BaseGDL** ref=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::DEC, res); return res; } BaseGDL** DECNode::EvalRefCheck( BaseGDL*& res) { BaseGDL** ref=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::DEC_REF_CHECK, res); // if( ref != NULL) // { // GDLDelete( res); // res = *ref; // } return ref; } BaseGDL** DECNode::LEval() { BaseGDL* res; BaseGDL** ref=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::DEC_REF_CHECK, res); if( ref == NULL) { GDLDelete( res); throw GDLException(this,"-- requires left-value.",true,false); } return ref; // BaseGDL** res = this->getFirstChild()->LEval(); // (*res)->Dec(); // return res; } RetCode DECNode::Run() { // match(antlr::RefAST(_t),DEC); ProgNodeP _t = this->getFirstChild(); BaseGDL* dummy; ProgNode::interpreter->l_decinc_expr(_t, GDLTokenTypes::DECSTATEMENT, dummy); ProgNode::interpreter->SetRetTree( this->getNextSibling()); return RC_OK; } BaseGDL* POSTINCNode::Eval() { BaseGDL* res; BaseGDL** ref=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::POSTINC, res); return res; } // BaseGDL** POSTINCNode::LEval() // { // throw GDLException(this,"Internal error: POSTINCNode::LEVal() called.",true,false); // return NULL; // } BaseGDL* INCNode::Eval() { BaseGDL* res; BaseGDL** ref=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::INC, res); return res; } BaseGDL** INCNode::EvalRefCheck( BaseGDL*& res) { BaseGDL** ref=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::INC_REF_CHECK, res); // if( ref != NULL) // { // GDLDelete( res); // res = *ref; // } return ref; } BaseGDL** INCNode::LEval() { BaseGDL* res; BaseGDL** ref=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::INC_REF_CHECK, res); if( ref == NULL) { GDLDelete( res); throw GDLException(this,"++ requires left-value.",true,false); } return ref; // BaseGDL** res = this->getFirstChild()->LEval(); // (*res)->Inc(); // // BaseGDL* res=interpreter->l_decinc_expr( this->getFirstChild(), GDLTokenTypes::INC); // // interpreter->SetRetTree(this->getNextSibling()); // return res; } RetCode INCNode::Run() { // match(antlr::RefAST(_t),INC); ProgNodeP _t = this->getFirstChild(); BaseGDL* dummy; ProgNode::interpreter->l_decinc_expr(_t, GDLTokenTypes::INCSTATEMENT, dummy); ProgNode::interpreter->SetRetTree( this->getNextSibling()); return RC_OK; } RetCode FORNode::Run()//for_statement(ProgNodeP _t) { { EnvUDT* callStack_back = static_cast(GDLInterpreter::CallStackBack()); ForLoopInfoT& loopInfo = callStack_back->GetForLoopInfo( this->forLoopIx); ProgNodeP vP = this->GetNextSibling()->GetFirstChild(); BaseGDL** v=vP->LEval(); //ProgNode::interpreter->l_simple_var(vP); BaseGDL* s=this->GetFirstChild()->Eval(); // BaseGDL* s=ProgNode::interpreter->expr( this->GetFirstChild()); Guard s_guard(s); GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar=this->GetFirstChild()->GetNextSibling()->Eval(); // loopInfo.endLoopVar=ProgNode::interpreter->expr(this->GetFirstChild()->GetNextSibling()); s->ForCheck( &loopInfo.endLoopVar); if( loopInfo.endLoopVar->Type() != s->Type()) // promote s { BaseGDL* sPromote = s->Convert2(loopInfo.endLoopVar->Type(), BaseGDL::COPY); s_guard.Reset( sPromote); } // ASSIGNMENT used here also GDLDelete((*v)); (*v)= s_guard.release(); // s held in *v after this if( (*v)->ForCondUp( loopInfo.endLoopVar)) { ProgNode::interpreter->_retTree = vP->GetNextSibling(); return RC_OK; } else { // skip if initial test fails ProgNode::interpreter->_retTree = this->GetNextSibling()->GetNextSibling(); return RC_OK; } } RetCode FOR_LOOPNode::Run() { EnvUDT* callStack_back = static_cast(GDLInterpreter::CallStack().back()); ForLoopInfoT& loopInfo = callStack_back->GetForLoopInfo( this->forLoopIx); // BaseGDL* endLoopVar = loopInfo.endLoopVar; if( loopInfo.endLoopVar == NULL) { // non-initialized loop (GOTO) ProgNode::interpreter->_retTree = this->GetNextSibling(); return RC_OK; } // // problem: // // EXECUTE may call DataListT.loc.resize(), as v points to the // // old sequence v might be invalidated -> segfault // // note that the value (*v) is preserved by resize() BaseGDL** v=this->getFirstChild()->LEval();//ProgNode::interpreter->l_simple_var(this->getFirstChild()); // shortCut:; if( (*v)->ForAddCondUp( loopInfo.endLoopVar)) { ProgNode::interpreter->_retTree = this->statementList; //GetFirstChild()->GetNextSibling(); // if( ProgNode::interpreter->_retTree == this) goto shortCut; } else { GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar = NULL; ProgNode::interpreter->_retTree = this->GetNextSibling(); } return RC_OK; } RetCode FOR_STEPNode::Run()//for_statement(ProgNodeP _t) { { EnvUDT* callStack_back = static_cast(GDLInterpreter::CallStack().back()); ForLoopInfoT& loopInfo = callStack_back->GetForLoopInfo( this->forLoopIx); ProgNodeP vP = this->GetNextSibling()->GetFirstChild(); BaseGDL** v=vP->LEval(); //ProgNode::interpreter->l_simple_var(vP); BaseGDL* s=this->GetFirstChild()->Eval(); // BaseGDL* s=ProgNode::interpreter->expr( this->GetFirstChild()); Guard s_guard(s); GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar=this->GetFirstChild()->GetNextSibling()->Eval(); // loopInfo.endLoopVar=ProgNode::interpreter->expr(this->GetFirstChild()->GetNextSibling()); GDLDelete(loopInfo.loopStepVar); loopInfo.loopStepVar=this->GetFirstChild()->GetNextSibling()->GetNextSibling()->Eval(); // loopInfo.loopStepVar=ProgNode::interpreter->expr(this->GetFirstChild()->GetNextSibling()->GetNextSibling()); s->ForCheck( &loopInfo.endLoopVar, &loopInfo.loopStepVar); if( loopInfo.endLoopVar->Type() != s->Type()) // promote s { BaseGDL* sPromote = s->Convert2(loopInfo.endLoopVar->Type(), BaseGDL::COPY); s_guard.Reset( sPromote); assert( loopInfo.loopStepVar->Type() == s_guard.get()->Type()); } // ASSIGNMENT used here also GDLDelete((*v)); (*v)= s_guard.release(); // s held in *v after this if( loopInfo.loopStepVar->Sgn() == -1) { if( (*v)->ForCondDown( loopInfo.endLoopVar)) { ProgNode::interpreter->_retTree = vP->GetNextSibling(); return RC_OK; } } else { if( (*v)->ForCondUp( loopInfo.endLoopVar)) { ProgNode::interpreter->_retTree = vP->GetNextSibling(); return RC_OK; } } // skip if initial test fails ProgNode::interpreter->_retTree = this->GetNextSibling()->GetNextSibling(); return RC_OK; } RetCode FOR_STEP_LOOPNode::Run() { EnvUDT* callStack_back = static_cast(GDLInterpreter::CallStack().back()); ForLoopInfoT& loopInfo = callStack_back->GetForLoopInfo( this->forLoopIx); if( loopInfo.endLoopVar == NULL) { // non-initialized loop (GOTO) ProgNode::interpreter->_retTree = this->GetNextSibling(); return RC_OK; } // // problem: // // EXECUTE may call DataListT.loc.resize(), as v points to the // // old sequence v might be invalidated -> segfault // // note that the value (*v) is preserved by resize() BaseGDL** v=this->GetFirstChild()->LEval(); //ProgNode::interpreter->l_simple_var(this->GetFirstChild()); (*v)->ForAdd(loopInfo.loopStepVar); if( loopInfo.loopStepVar->Sgn() == -1) { if( (*v)->ForCondDown( loopInfo.endLoopVar)) { ProgNode::interpreter->_retTree = this->GetFirstChild()->GetNextSibling(); return RC_OK; } } else { if( (*v)->ForCondUp( loopInfo.endLoopVar)) { ProgNode::interpreter->_retTree = this->GetFirstChild()->GetNextSibling(); return RC_OK; } } GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar = NULL; GDLDelete(loopInfo.loopStepVar); loopInfo.loopStepVar = NULL; ProgNode::interpreter->_retTree = this->GetNextSibling(); return RC_OK; } RetCode FOREACHNode::Run() { EnvUDT* callStack_back = static_cast(GDLInterpreter::CallStack().back()); ForLoopInfoT& loopInfo = callStack_back->GetForLoopInfo( this->forLoopIx); ProgNodeP vP = this->GetNextSibling()->GetFirstChild(); BaseGDL** v=vP->LEval(); // ProgNode::interpreter->l_simple_var(vP); GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar=this->GetFirstChild()->Eval(); // loopInfo.endLoopVar=ProgNode::interpreter->expr(this->GetFirstChild()); SizeT nEl = loopInfo.endLoopVar->N_Elements(); if( nEl == 0) { GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar = NULL; ProgNode::interpreter->_retTree = this->GetNextSibling()->GetNextSibling(); return RC_OK; } loopInfo.foreachIx = 0; // currently there are no empty arrays //SizeT nEl = loopInfo.endLoopVar->N_Elements(); // ASSIGNMENT used here also GDLDelete((*v)); (*v) = loopInfo.endLoopVar->NewIx( 0); ProgNode::interpreter->_retTree = vP->GetNextSibling(); return RC_OK; } RetCode FOREACH_LOOPNode::Run() { EnvUDT* callStack_back = static_cast(GDLInterpreter::CallStack().back()); ForLoopInfoT& loopInfo = callStack_back->GetForLoopInfo( this->forLoopIx); if( loopInfo.endLoopVar == NULL) { // non-initialized loop (GOTO) ProgNode::interpreter->_retTree = this->GetNextSibling(); return RC_OK; } BaseGDL** v=this->GetFirstChild()->LEval(); //ProgNode::interpreter->l_simple_var(this->GetFirstChild()); ++loopInfo.foreachIx; SizeT nEl = loopInfo.endLoopVar->N_Elements(); if( loopInfo.foreachIx < nEl) { // ASSIGNMENT used here also GDLDelete((*v)); (*v) = loopInfo.endLoopVar->NewIx( loopInfo.foreachIx); ProgNode::interpreter->_retTree = this->GetFirstChild()->GetNextSibling(); return RC_OK; } GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar = NULL; // loopInfo.foreachIx = -1; ProgNode::interpreter->SetRetTree( this->GetNextSibling()); return RC_OK; } RetCode FOREACH_INDEXNode::Run() { EnvUDT* callStack_back = static_cast(GDLInterpreter::CallStack().back()); ForLoopInfoT& loopInfo = callStack_back->GetForLoopInfo( this->forLoopIx); ProgNodeP vP = this->GetNextSibling()->GetFirstChild(); ProgNodeP indexP = vP->GetNextSibling(); BaseGDL** v=vP->LEval(); //ProgNode::interpreter->l_simple_var(vP); BaseGDL** index=indexP->LEval(); //ProgNode::interpreter->l_simple_var(indexP); GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar=this->GetFirstChild()->Eval(); // loopInfo.endLoopVar=ProgNode::interpreter->expr(this->GetFirstChild()); SizeT nEl = loopInfo.endLoopVar->N_Elements(); if( nEl == 0) { GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar = NULL; ProgNode::interpreter->_retTree = this->GetNextSibling()->GetNextSibling(); return RC_OK; } loopInfo.foreachIx = 0; // currently there are no empty arrays //SizeT nEl = loopInfo.endLoopVar->N_Elements(); // ASSIGNMENT used here also GDLDelete((*v)); (*v) = loopInfo.endLoopVar->NewIx( 0); // HASH sets here TABLE_FOREACH to key ptr // ASSIGNMENT used here also GDLDelete((*index)); if( loopInfo.endLoopVar->Type() == GDL_OBJ && loopInfo.endLoopVar->StrictScalar()) { DObj s = (*static_cast(loopInfo.endLoopVar))[0]; DStructGDL* oStruct= GDLInterpreter::GetObjHeap( s); DStructDesc* oStructDesc = oStruct->Desc(); if( oStructDesc->IsParent( "HASH")) { unsigned forEachTag = oStructDesc->TagIndex( "TABLE_FOREACH"); DPtr pForEach = (*static_cast( oStruct->GetTag( forEachTag, 0)))[0]; // pForEach is pointer to current key (*index) = GDLInterpreter::GetHeap( pForEach)->Dup(); } else { (*index) = new DLongGDL( 0); } } else { (*index) = new DLongGDL( 0); } ProgNode::interpreter->_retTree = indexP->GetNextSibling(); return RC_OK; } RetCode FOREACH_INDEX_LOOPNode::Run() { EnvUDT* callStack_back = static_cast(GDLInterpreter::CallStack().back()); ForLoopInfoT& loopInfo = callStack_back->GetForLoopInfo( this->forLoopIx); if( loopInfo.endLoopVar == NULL) { // non-initialized loop (GOTO) ProgNode::interpreter->_retTree = this->GetNextSibling(); return RC_OK; } ProgNodeP thisGetFirstChildGetNextSibling = this->GetFirstChild()->GetNextSibling(); BaseGDL** v=this->GetFirstChild()->LEval(); //ProgNode::interpreter->l_simple_var(this->GetFirstChild()); BaseGDL** index=thisGetFirstChildGetNextSibling->LEval(); //ProgNode::interpreter->l_simple_var(this->GetFirstChild()->GetNextSibling()); ++loopInfo.foreachIx; SizeT nEl = loopInfo.endLoopVar->N_Elements(); if( loopInfo.foreachIx < nEl) { // ASSIGNMENT used here also GDLDelete((*v)); (*v) = loopInfo.endLoopVar->NewIx( loopInfo.foreachIx); // HASH sets here TABLE_FOREACH to key ptr // ASSIGNMENT used here also GDLDelete((*index)); if( loopInfo.endLoopVar->Type() == GDL_OBJ && loopInfo.endLoopVar->StrictScalar()) { DObj s = (*static_cast(loopInfo.endLoopVar))[0]; DStructGDL* oStruct= GDLInterpreter::GetObjHeap( s); DStructDesc* oStructDesc = oStruct->Desc(); if( oStructDesc->IsParent( "HASH")) { unsigned forEachTag = oStructDesc->TagIndex( "TABLE_FOREACH"); DPtr pForEach = (*static_cast( oStruct->GetTag( forEachTag, 0)))[0]; // pForEach is pointer to current key (*index) = GDLInterpreter::GetHeap( pForEach)->Dup(); } else { // ASSIGNMENT used here also (*index) = new DLongGDL( loopInfo.foreachIx); } } else { (*index) = new DLongGDL( loopInfo.foreachIx); } ProgNode::interpreter->_retTree = thisGetFirstChildGetNextSibling->GetNextSibling(); return RC_OK; } GDLDelete(loopInfo.endLoopVar); loopInfo.endLoopVar = NULL; // loopInfo.foreachIx = -1; ProgNode::interpreter->SetRetTree( this->GetNextSibling()); return RC_OK; } RetCode REPEATNode::Run() { // _t is REPEAT_LOOP, GetFirstChild() is expr, GetNextSibling is first loop statement if( this->GetFirstChild()->GetFirstChild()->GetNextSibling() == NULL) ProgNode::interpreter->SetRetTree( this->GetFirstChild()); else ProgNode::interpreter->SetRetTree( this->GetFirstChild()->GetFirstChild()->GetNextSibling()); // statement return RC_OK; } RetCode REPEAT_LOOPNode::Run() { Guard eVal( this->GetFirstChild()->Eval()); // Guard eVal( ProgNode::interpreter->expr(this->GetFirstChild())); if( eVal.get()->False()) { ProgNode::interpreter->SetRetTree( this->GetFirstChild()->GetNextSibling()); // 1st loop statement if( this->GetFirstChild()->GetNextSibling() == NULL) throw GDLException(this, "Empty REPEAT loop entered (infinite loop).",true,false); return RC_OK; } ProgNode::interpreter->SetRetTree( this->GetNextSibling()); // statement return RC_OK; } RetCode WHILENode::Run() { Guard e1_guard; BaseGDL* e1; ProgNodeP evalExpr = this->getFirstChild(); if( NonCopyNode( evalExpr->getType())) { e1 = evalExpr->EvalNC(); } else { BaseGDL** ref = evalExpr->EvalRefCheck( e1); if( ref == NULL) e1_guard.Init(e1); else e1 = *ref; } // Guard eVal( ProgNode::interpreter->expr( this->GetFirstChild())); if( e1->True()) { ProgNode::interpreter->SetRetTree( this->GetFirstChild()->GetNextSibling()); if( this->GetFirstChild()->GetNextSibling() == NULL) throw GDLException(this,"Empty WHILE loop entered (infinite loop).",true,false); } else { ProgNode::interpreter->SetRetTree( this->GetNextSibling()); } return RC_OK; } RetCode IFNode::Run() { Guard e1_guard; BaseGDL* e1; ProgNodeP evalExpr = this->getFirstChild(); if( NonCopyNode( evalExpr->getType())) { e1 = evalExpr->EvalNC(); } else { BaseGDL** ref = evalExpr->EvalRefCheck( e1); if( ref == NULL) e1_guard.Init(e1); else e1 = *ref; } // Guard eVal( ProgNode::interpreter->expr( this->GetFirstChild())); if( e1->True()) { ProgNode::interpreter->SetRetTree( this->GetFirstChild()->GetNextSibling()); } else { ProgNode::interpreter->SetRetTree( this->GetNextSibling()); } return RC_OK; } RetCode IF_ELSENode::Run() { Guard e1_guard; BaseGDL* e1; ProgNodeP evalExpr = this->getFirstChild(); if( NonCopyNode( evalExpr->getType())) { e1 = evalExpr->EvalNC(); } else { BaseGDL** ref = evalExpr->EvalRefCheck( e1); if( ref == NULL) e1_guard.Init(e1); else e1 = *ref; } // Guard eVal( ProgNode::interpreter->expr( this->GetFirstChild())); if( e1->True()) { ProgNode::interpreter->SetRetTree( this->GetFirstChild()->GetNextSibling()->GetFirstChild()); } else { ProgNode::interpreter->SetRetTree( this->GetFirstChild()->GetNextSibling()->GetNextSibling()); } return RC_OK; } RetCode CASENode::Run() { Guard e1_guard; BaseGDL* e1; ProgNodeP evalExpr = this->getFirstChild(); if( NonCopyNode( evalExpr->getType())) { e1 = evalExpr->EvalNC(); } else { BaseGDL** ref = evalExpr->EvalRefCheck( e1); if( ref == NULL) e1_guard.Init(e1); else e1 = *ref; } // Guard eVal( ProgNode::interpreter->expr( this->GetFirstChild())); if( !e1->Scalar()) throw GDLException( this->GetFirstChild(), "Expression must be a" " scalar in this context: "+ProgNode::interpreter->Name(e1),true,false); ProgNodeP b=this->GetFirstChild()->GetNextSibling(); // remeber block begin for( int i=0; inumBranch; ++i) { if( b->getType() == GDLTokenTypes::ELSEBLK) { ProgNodeP sL = b->GetFirstChild(); // statement_list if(sL != NULL ) { ProgNode::interpreter->SetRetTree( sL); } else { ProgNode::interpreter->SetRetTree( this->GetNextSibling()); } return RC_OK; } else { ProgNodeP ex = b->GetFirstChild(); // EXPR Guard ee_guard; BaseGDL* ee; if( NonCopyNode( ex->getType())) { ee = ex->EvalNC(); } else { BaseGDL** ref = ex->EvalRefCheck( ee); if( ref == NULL) ee_guard.Init(ee); else ee = *ref; } // BaseGDL* ee=ProgNode::interpreter->expr(ex); // Guard ee_guard(ee); bool equalexpr=e1->EqualNoDelete(ee); // Equal deletes ee if( equalexpr) { ProgNodeP bb = ex->GetNextSibling(); // statement_list if(bb != NULL ) { ProgNode::interpreter->SetRetTree( bb); return RC_OK; } else { ProgNode::interpreter->SetRetTree( this->GetNextSibling()); return RC_OK; } } } b=b->GetNextSibling(); // next block } // for throw GDLException( this, "CASE statement found no match.",true,false); return RC_OK; } RetCode SWITCHNode::Run() { Guard e1_guard; BaseGDL* e1; ProgNodeP evalExpr = this->getFirstChild(); if( NonCopyNode( evalExpr->getType())) { e1 = evalExpr->EvalNC(); } else { BaseGDL** ref = evalExpr->EvalRefCheck( e1); if( ref == NULL) e1_guard.Init(e1); else e1 = *ref; } // Guard eVal( ProgNode::interpreter->expr( this->GetFirstChild())); if( !e1->Scalar()) throw GDLException( this->GetFirstChild(), "Expression must be a" " scalar in this context: "+ProgNode::interpreter->Name(e1),true,false); ProgNodeP b=this->GetFirstChild()->GetNextSibling(); // remeber block begin bool hook=false; // switch executes everything after 1st match for( int i=0; inumBranch; i++) { if( b->getType() == GDLTokenTypes::ELSEBLK) { hook=true; ProgNodeP sL = b->GetFirstChild(); // statement_list if(sL != NULL ) { ProgNode::interpreter->SetRetTree( sL); return RC_OK; } } else { ProgNodeP ex = b->GetFirstChild(); // EXPR if( !hook) { Guard ee_guard; BaseGDL* ee; if( NonCopyNode( ex->getType())) { ee = ex->EvalNC(); } else { BaseGDL** ref = ex->EvalRefCheck( ee); if( ref == NULL) ee_guard.Init(ee); else ee = *ref; } // BaseGDL* ee=ProgNode::interpreter->expr(ex); // Guard ee_guard(ee); hook=e1->EqualNoDelete(ee); // Equal deletes ee } if( hook) { ProgNodeP bb = ex->GetNextSibling(); // statement_list // statement there if(bb != NULL ) { ProgNode::interpreter->SetRetTree( bb); return RC_OK; } } } b=b->GetNextSibling(); // next block } // for ProgNode::interpreter->SetRetTree( this->GetNextSibling()); return RC_OK; } RetCode BLOCKNode::Run() { ProgNode::interpreter->SetRetTree( this->getFirstChild()); return RC_OK; } RetCode GOTONode::Run() { ProgNode::interpreter->SetRetTree( static_cast(GDLInterpreter::CallStack().back())-> GotoTarget( targetIx)->GetNextSibling()); return RC_OK; } RetCode CONTINUENode::Run() { if( this->breakTarget == NULL) { assert( interpreter != NULL); EnvBaseT* e = interpreter->CallStack().back(); throw GDLException( this, "CONTINUE must be enclosed within a FOR, WHILE, or REPEAT loop.", true, false); } ProgNode::interpreter->SetRetTree( this->breakTarget); return RC_OK; } RetCode BREAKNode::Run() { if( !this->breakTargetSet) { assert( interpreter != NULL); EnvBaseT* e = interpreter->CallStack().back(); throw GDLException( this, "BREAK must be enclosed within a loop (FOR, WHILE, REPEAT), CASE or SWITCH statement.", true, false); } ProgNode::interpreter->SetRetTree( this->breakTarget); return RC_OK; } RetCode LABELNode::Run() { ProgNode::interpreter->SetRetTree( this->GetNextSibling()); return RC_OK; } RetCode ON_IOERROR_NULLNode::Run() { static_cast(GDLInterpreter::CallStack().back())->SetIOError( -1); ProgNode::interpreter->SetRetTree( this->GetNextSibling()); return RC_OK; } RetCode ON_IOERRORNode::Run() { static_cast(GDLInterpreter::CallStack().back())->SetIOError( this->targetIx); ProgNode::interpreter->SetRetTree( this->GetNextSibling()); return RC_OK; } RetCode RETFNode::Run() { ProgNodeP _t = this->getFirstChild(); assert( _t != NULL); EnvUDT* callStackBack = static_cast(GDLInterpreter::CallStack().back()); EnvUDT::CallContext actualCallContext = callStackBack->GetCallContext(); if ( actualCallContext == EnvUDT::RFUNCTION) { // pure r-function BaseGDL* e=_t->Eval(); //ProgNode::interpreter->expr(_t); interpreter->SetRetTree( _t->getNextSibling()); // ??? assert(ProgNode::interpreter->returnValue == NULL); assert(ProgNode::interpreter->returnValueL == NULL); ProgNode::interpreter->returnValue=e; //GDLInterpreter::CallStack().back()->RemoveLoc( e); // steal e from local list } else if ( actualCallContext == EnvUDT::LRFUNCTION) { // for RefCheck context BaseGDL** eL = NULL; BaseGDL* e = NULL; eL =_t->EvalRefCheck( e); interpreter->SetRetTree( _t->getNextSibling()); if( eL != NULL) { e = *eL; callStackBack->SetPtrToReturnValue( eL); eL = callStackBack->GetPtrToGlobalReturnValue(); callStackBack->SetPtrToReturnValue( eL); } assert(ProgNode::interpreter->returnValue == NULL); assert(ProgNode::interpreter->returnValueL == NULL); // ProgNode::interpreter->returnValueL=eL; ProgNode::interpreter->returnValue=e; } else // EnvUDT::LFUNCTION { // pure l-function // BaseGDL** eL=ProgNode::interpreter->l_ret_expr(_t); BaseGDL** eL=_t->LEval(); if( eL != NULL) { BaseGDL* e = *eL; callStackBack->SetPtrToReturnValue( eL); eL = callStackBack->GetPtrToGlobalReturnValue(); callStackBack->SetPtrToReturnValue( eL); if( eL == NULL) GDLDelete( e); // was stolen in GetPtrToGlobalReturnValue(); } assert(ProgNode::interpreter->returnValue == NULL); assert(ProgNode::interpreter->returnValueL == NULL); ProgNode::interpreter->returnValueL=eL; } //if( !(interruptEnable && sigControlC) && ( debugMode == DEBUG_CLEAR)) //return RC_RETURN; return RC_RETURN; } RetCode RETPNode::Run() { return RC_RETURN; } gdl-0.9.7/src/ncdf4_group.cpp0000664000175100017510000001675213040614410015672 0ustar coulaiscoulais/*************************************************************************** ncdf4_group.cpp - NetCDF GDL library function ------------------- begin : January 8 2014 copyright : (C) 2014 by Alain Coulais email : purpose : this file contains some extensions provided by NetCDF-4, e.g. group ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H #include #else // default: assume we have netCDF #define USE_NETCDF 1 #endif #ifdef USE_NETCDF #include "includefirst.hpp" #include "datatypes.hpp" #include "envt.hpp" #include "ncdf_cl.hpp" #define GDL_DEBUG //#undef GDL_DEBUG #ifdef USE_NETCDF4 namespace lib { using namespace std; using namespace antlr; BaseGDL* ncdf_groupsinq(EnvT* e) { size_t nParam=e->NParam(1); DLong grpid; e->AssureLongScalarPar( 0, grpid); int status; int numgrps; int ncids[NC_MAX_VAR_DIMS]; status=nc_inq_grps(grpid, &numgrps, (int *) &ncids); ncdf_handle_error(e, status,"NCDF_GROUPSINQ"); int debug=0; if (debug) { cout << "NCDF_GROUPSINQ : " << status < 0) { dimension dim(numgrps); DLongGDL *res = new DLongGDL(dim,BaseGDL::NOZERO); for (size_t i=0; iNParam(2); DLong grpid; e->AssureLongScalarPar( 0, grpid); DString s; e->AssureScalarPar(1, s); int status; int new_grpid; status=nc_def_grp(grpid, s.c_str(), &new_grpid); ncdf_handle_error(e, status,"NCDF_GROUPDEF"); return new DLongGDL(new_grpid); } BaseGDL* ncdf_groupname(EnvT* e) { size_t nParam=e->NParam(1); DLong grpid; e->AssureLongScalarPar( 0, grpid); int status; char groupname[NC_MAX_NAME]; status=nc_inq_grpname(grpid, groupname); ncdf_handle_error(e, status,"NCDF_GROUPNAME"); return new DStringGDL(groupname); } BaseGDL* ncdf_fullgroupname(EnvT* e) { size_t nParam=e->NParam(1); DLong grpid; e->AssureLongScalarPar( 0, grpid); int status; char fullgroupname[NC_MAX_NAME]; size_t lenp; status=nc_inq_grpname_full(grpid, &lenp, fullgroupname); ncdf_handle_error(e, status,"NCDF_GROUPFULLNAME"); return new DStringGDL(fullgroupname); } BaseGDL* ncdf_groupparent(EnvT* e) { size_t nParam=e->NParam(1); DLong grpid; e->AssureLongScalarPar( 0, grpid); int status; int new_grpid; status=nc_inq_grp_parent(grpid, &new_grpid); ncdf_handle_error(e, status,"NCDF_GROUPPARENT"); return new DLongGDL(new_grpid); } BaseGDL* ncdf_dimidsinq(EnvT* e) { DLong grpid; e->AssureLongScalarPar( 0, grpid); int include_parents=0; if (e->KeywordSet(0)) {include_parents=1;} //"INCLUDE_PARENTS" int status; int ndims; int dimids[NC_MAX_VAR_DIMS]; status=nc_inq_dimids(grpid, &ndims, (int *) &dimids, include_parents); ncdf_handle_error(e, status,"NCDF_DIMIDSINQ"); dimension dim(ndims); DLongGDL *res = new DLongGDL(dim,BaseGDL::NOZERO); for (size_t i=0; iNParam(2); // in fact, we can use the "grpid" to check the file format it-self. DLong grpid; e->AssureLongScalarPar( 0, grpid); DString s; e->AssureScalarPar(1, s); // before going further we have to chech the file format, must be NetCDF-4 int status; int fileformat; status=nc_inq_format(grpid, &fileformat); ncdf_handle_error(e, status,"NCDF_NCIDINQ"); if (fileformat == NC_FORMAT_CLASSIC) Warning("NCDF_NCIDINQ: NetCDF 3 Classic format found. not OK"); if (fileformat == NC_FORMAT_64BIT) Warning("NCDF_NCIDINQ: NetCDF 3 64-BIT format found. not OK"); if ((fileformat == NC_FORMAT_64BIT) || (fileformat == NC_FORMAT_CLASSIC)) { return new DLongGDL(-1); } int sub_grpid; status=nc_inq_ncid(grpid, s.c_str(), &sub_grpid); if (status != 0) { if (status == -125) { Warning("NCDF_NCIDINQ: No group found. (NC_ERROR=-125)"); return new DLongGDL(-1); } else { ncdf_handle_error(e, status,"NCDF_NCIDINQ"); } } return new DLongGDL(sub_grpid); } BaseGDL* ncdf_varidsinq(EnvT* e) { //size_t nParam=e->NParam(1); DLong grpid; e->AssureLongScalarPar( 0, grpid); int status; int nvars, varids[NC_MAX_VAR_DIMS]; status=nc_inq_varids(grpid, &nvars, (int *) &varids); int debug=0; if (debug) { cout << "NCDF_VARIDSINQ: status : " << status << endl; cout << "NCDF_VARIDSINQ: nvars : " << nvars << endl; cout << "NCDF_VARIDSINQ: *varId : "; for (size_t i=0; i 0) { dimension dim(nvars); DLongGDL *res = new DLongGDL(dim,BaseGDL::NOZERO); for (size_t i=0; iAssureLongScalarPar( 0, grpid); // first of all, we check whether the Group ID is a good one int status; char groupname[NC_MAX_NAME]; status=nc_inq_grpname(grpid, groupname); ncdf_handle_error(e, status,"NCDF_GROUPNAME"); int nunlimdimsp, unlimdimidsp[NC_MAX_VAR_DIMS]; status=nc_inq_unlimdims(grpid, &nunlimdimsp, (int *) &unlimdimidsp); ncdf_handle_error(e, status,"NCDF_UNLIMDIMSINQ"); int debug=0; if (debug) { cout << "NCDF_UNLIMDIMSINQ: status : " << status << endl; cout << "NCDF_UNLIMDIMSINQ: nunlimdimsp : " << nunlimdimsp << endl; cout << "NCDF_UNLIMDIMSINQ: *unlimdimidsp : "; for (size_t i=0; iKeywordIx("COUNT"); if (e->KeywordPresent(countIx)) { int count=0; if (nunlimdimsp > 0) count=nunlimdimsp; e->SetKW(countIx, new DLongGDL(count)); } if (nunlimdimsp > 0) { dimension dim(nunlimdimsp); DLongGDL *res = new DLongGDL(dim,BaseGDL::NOZERO); for (size_t i=0; i #endif #include //#include "datatypes.hpp" // included from arrayindex.hpp #include "nullgdl.hpp" #include "dstructgdl.hpp" #include "arrayindexlistt.hpp" #include "assocdata.hpp" #include "io.hpp" #include "dinterpreter.hpp" #include "terminfo.hpp" // needed with gcc-3.3.2 #include // on OS X isnan is not defined #if defined(__APPLE__) && defined(OLD_DARWIN) && !defined(isnan) #ifdef __cplusplus extern "C" { #endif // #define isnan( x ) ( ( sizeof ( x ) == sizeof(double) ) ? \ // __isnand ( x ) : \ // ( sizeof ( x ) == sizeof( float) ) ? \ // __isnanf ( x ) : \ // __isnan ( x ) ) namespace std { template bool isnan( T x) { return ( ( sizeof ( x ) == sizeof(double) ) ? __isnand ( x ) : ( sizeof ( x ) == sizeof( float) ) ? __isnanf ( x ) : __isnan ( x ) );} } #ifdef __cplusplus } #endif #endif #ifdef _MSC_VER #define isfinite _finite #define std__isnan isnan #else #define std__isnan std::isnan #endif //using namespace std; //using std::isnan; // this (ugly) including of other sourcefiles has to be done, because // on Mac OS X a template instantiation request (see bottom of file) // can only be done once #define INCLUDE_GETAS_CPP 1 #include "getas.cpp" #define INCLUDE_BASIC_OP_CPP 1 #include "basic_op.cpp" #include "basic_op_new.cpp" #define INCLUDE_DEFAULT_IO_CPP 1 #include "default_io.cpp" #define INCLUDE_IFMT_CPP 1 #include "ifmt.cpp" #define INCLUDE_OFMT_CPP 1 #include "ofmt.cpp" #define INCLUDE_DATATYPESREF_CPP 1 #include "datatypesref.cpp" #if defined(USE_PYTHON) || defined(PYTHON_MODULE) # define INCLUDE_TOPYTHON_CPP 1 # include "topython.cpp" # define INCLUDE_GDLPYTHON_CPP 1 # include "gdlpython.cpp" # ifdef PYTHON_MODULE # define INCLUDE_PYTHONGDL_CPP 1 # include "pythongdl.cpp" # endif #endif #ifdef _MSC_VER #define isnan _isnan #define isinfinite _isinfinite #endif #ifdef TESTTG #include "test_template_grouping.cpp" template void Data_::TestTemplateGrouping() { // Ty ty = Test1(); bool b = Test2(); } #endif template FreeListT Data_::freeList; #ifdef GDLARRAY_CACHE #ifdef GDLARRAY_DEBUG inline void TraceCache( SizeT& cacheSize, SizeT sz, bool cacheIsNull, SizeT smallArraySize) { // if( cacheSize > smallArraySize && cacheSize == sz && !cacheIsNull) // std::cout << "+++ CACHE HIT\tID: (" << &cacheSize << ") sz: " << cacheSize << std::endl; // else if( sz > smallArraySize) std::cout << "+ New\t\tID: (" << &cacheSize << ") sz: " << sz << " cache size: " << cacheSize < SizeT GDLArray::cacheSize = 0; template<> SizeT GDLArray::cacheSize = 0; template typename GDLArray::Ty* GDLArray::cache = NULL; template typename GDLArray::Ty* GDLArray::Cached( SizeT newSize) { assert( newSize > smallArraySize); if( cache != NULL && cacheSize == newSize) { #ifdef GDLARRAY_DEBUG std::cout << "*** CACHE HIT\tID: (" << &cacheSize << ") sz: " << cacheSize << " ***" << std::endl; #endif Ty* hit = cache; cache = NULL; return hit; } return new Ty[ newSize]; } templateGDLArray::GDLArray( const GDLArray& cp) : sz( cp.size()) { TraceCache( cacheSize, sz, cache==NULL, smallArraySize); try { buf = (sz > smallArraySize) ? Cached( sz) /* new Ty[ cp.size()]*/ : scalar; } catch (std::bad_alloc&) { ThrowGDLException("Array requires more memory than available"); } std::memcpy(buf,cp.buf,sz*sizeof(Ty)); } templateGDLArray:: GDLArray( SizeT s, bool b) : sz( s) { TraceCache( cacheSize, sz, cache==NULL, smallArraySize); try { buf = (sz > smallArraySize) ? Cached( sz) /* new Ty[ sz]*/ : scalar; } catch (std::bad_alloc&) { ThrowGDLException("Array requires more memory than available"); } } templateGDLArray:: GDLArray( Ty val, SizeT s) : sz( s) { TraceCache( cacheSize, sz, cache==NULL, smallArraySize); try { buf = (sz > smallArraySize) ? Cached( sz) /* new Ty[ sz]*/ : scalar; } catch (std::bad_alloc&) { ThrowGDLException("Array requires more memory than available"); } for( SizeT i=0; iGDLArray:: GDLArray( const Ty* arr, SizeT s) : sz( s) { TraceCache( cacheSize, sz, cache==NULL, smallArraySize); try { buf = (sz > smallArraySize) ? Cached( sz) /* new Ty[ sz]*/ : scalar; } catch (std::bad_alloc&) { ThrowGDLException("Array requires more memory than available"); } std::memcpy(buf,arr,sz*sizeof(Ty)); } templateGDLArray::~GDLArray() throw() { #ifdef GDLARRAY_DEBUG if( buf == cache) std::cout << "~~~ recycled cache\tID: (" << &cacheSize << ") sz: " << sz << "\tcacheSize: " << cacheSize << std::endl; #endif assert( buf != cache || sz == cacheSize); if ( buf != NULL && buf != scalar && buf != cache // note: assumes cacheSize never changes for a given cache ) { assert( sz > smallArraySize); if ( sz <= maxCache ) { #ifdef GDLARRAY_DEBUG std::cout << "--- free cache\tID: (" << &cacheSize << ") sz: " << cacheSize << "\tnew: " << sz << std::endl; #endif delete cache; cache = buf; cacheSize = sz; } else { delete[] buf; } } } // as strings may occupy arbitrary memory (regardless of the array size), better not cache them // note: Structs are ok, since GDL cleans up the strings they may contain and uses GDLArray as raw memory template<> GDLArray::~GDLArray() throw() { if ( buf != scalar ) { delete[] buf; } } template class GDLArray; #endif template inline bool gdlValid( const T &value ) { T max_value = std::numeric_limits::max(); T min_value = - max_value; return ( ( min_value <= value && value <= max_value ) && (value == value)); } inline bool gdlValid( const DComplex &value ) { DFloat max_value = std::numeric_limits::max(); DFloat min_value = - max_value; return ( ( min_value <= value.real() && value.real() <= max_value ) && (value.real() == value.real()))&& ( ( min_value <= value.imag() && value.imag() <= max_value ) && (value.imag() == value.imag())); } inline bool gdlValid( const DComplexDbl &value ) { DDouble max_value = std::numeric_limits::max(); DDouble min_value = - max_value; return ( ( min_value <= value.real() && value.real() <= max_value ) && (value.real() == value.real()))&& ( ( min_value <= value.imag() && value.imag() <= max_value ) && (value.imag() == value.imag())); } template void* Data_::operator new( size_t bytes) { assert( bytes == sizeof( Data_)); if( freeList.size() > 0) { return freeList.pop_back(); // void* res = freeList.back(); // freeList.pop_back(); // return res; } const size_t newSize = multiAlloc - 1; static long callCount = 0; ++callCount; // reserve space for all instances // note that reserve must do an allocation // this hack divides the number of those allocation // (for the cost of initially larger allocation - but only for pointers) const long allocDivider = 4; freeList.reserve( ((callCount/allocDivider+1)*allocDivider-1)*multiAlloc); // resize to what is needed now // freeList.resize( newSize); #ifdef USE_EIGEN // we need this allocation here as well (as in typedefs.hpp), because GDLArray needs to be aligned const int alignmentInBytes = 16; // set to multiple of 16 >= sizeof( char*) const size_t realSizeOfType = sizeof( Data_); const SizeT exceed = realSizeOfType % alignmentInBytes; const size_t sizeOfType = realSizeOfType + (alignmentInBytes - exceed); char* res = static_cast< char*>( Eigen::internal::aligned_malloc( sizeOfType * multiAlloc)); // one more than newSize #else const size_t sizeOfType = sizeof( Data_); char* res = static_cast< char*>( malloc( sizeOfType * multiAlloc)); // one more than newSize #endif res = freeList.Init( newSize, res, sizeOfType); // freeList[0] = NULL; // for( size_t i=1; i<=newSize; ++i) // { // freeList[ i] = res; // res += sizeOfType; // } // the one more return res; } template void Data_::operator delete( void *ptr) { freeList.push_back( ptr); } // destructor template Data_::~Data_() {} template<> Data_::~Data_() { if( this->dd.GetBuffer() != NULL) GDLInterpreter::DecRef( this); } template<> Data_::~Data_() { if( this->dd.GetBuffer() != NULL) GDLInterpreter::DecRefObj( this); } // default template Data_::Data_(): Sp(), dd() {} // scalar template Data_::Data_(const Ty& d_): Sp(), dd(d_) {} // template<> Data_::Data_(const Ty& d_): SpDPtr(), dd(d_) // {GDLInterpreter::IncRef(d_);} // template<> Data_::Data_(const Ty& d_): SpDObj(), dd(d_) // {GDLInterpreter::IncRefObj(d_);} // new array, zero fields template Data_::Data_(const dimension& dim_): Sp( dim_), dd( Sp::zero, this->dim.NDimElements()) { this->dim.Purge(); } // new one-dim array from Ty* template Data_::Data_( const Ty* p, const SizeT nEl): Sp( dimension( nEl)), dd( p, nEl) {} template<> Data_::Data_( const Ty* p, const SizeT nEl): SpDPtr( dimension( nEl)), dd( p, nEl) {GDLInterpreter::IncRef(this);} template<> Data_::Data_( const Ty* p, const SizeT nEl): SpDObj( dimension( nEl)), dd( p, nEl) {GDLInterpreter::IncRefObj(this);} // c-i // template Data_::Data_(const Data_& d_): // Sp(d_.dim), dd(d_.dd) {} template Data_::Data_(const dimension& dim_, BaseGDL::InitType iT): Sp( dim_), dd( (iT == BaseGDL::NOALLOC) ? 0 : this->dim.NDimElements(), false) { this->dim.Purge(); if( iT == BaseGDL::INDGEN) { SizeT sz=dd.size(); // Ty val=Sp::zero; // #pragma omp parallel if (sz >= CpuTPOOL_MIN_ELTS)// && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= sz)) { // #pragma omp for for( SizeT i=0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= sz)) { #pragma omp for for (int i = 0; i < sz; ++i) { (*this)[i] = 0; } } } } /*// INDGEN seems to be more precise for large arrays template<> Data_::Data_(const dimension& dim_, BaseGDL::InitType iT): SpDFloat( dim_), dd( (iT == BaseGDL::NOALLOC) ? 0 : this->dim.N_Elements(), false) { this->dim.Purge(); if( iT == BaseGDL::INDGEN) { SizeT sz=dd.size(); for( SizeT i=0; i Data_::Data_(const dimension& dim_, BaseGDL::InitType iT): SpDComplex( dim_), dd( (iT == BaseGDL::NOALLOC) ? 0 : this->dim.N_Elements(), false) { this->dim.Purge(); if( iT == BaseGDL::INDGEN) { SizeT sz=dd.size(); for( SizeT i=0; i Data_::Data_(const dimension& dim_, BaseGDL::InitType iT): SpDDouble( dim_), dd( (iT == BaseGDL::NOALLOC) ? 0 : this->dim.N_Elements(), false) { this->dim.Purge(); if( iT == BaseGDL::INDGEN) { SizeT sz=dd.size(); for( SizeT i=0; i Data_::Data_(const dimension& dim_, BaseGDL::InitType iT): SpDComplexDbl( dim_), dd( (iT == BaseGDL::NOALLOC) ? 0 : this->dim.N_Elements(), false) { this->dim.Purge(); if( iT == BaseGDL::INDGEN) { SizeT sz=dd.size(); for( SizeT i=0; i Data_::Data_(const dimension& dim_, BaseGDL::InitType iT): SpDString(dim_), dd( (iT == BaseGDL::NOALLOC) ? 0 : this->dim.NDimElements(), false) { dim.Purge(); if( iT == BaseGDL::INDGEN) throw GDLException("DStringGDL(dim,InitType=INDGEN) called."); } template<> Data_::Data_(const dimension& dim_, BaseGDL::InitType iT): SpDPtr(dim_), dd( (iT == BaseGDL::NOALLOC) ? 0 : this->dim.NDimElements(), false) { dim.Purge(); if( iT == BaseGDL::INDGEN) throw GDLException("DPtrGDL(dim,InitType=INDGEN) called."); if( iT != BaseGDL::NOALLOC && iT != BaseGDL::NOZERO) { SizeT sz = dd.size(); /*#pragma omp parallel if (sz >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= sz)) { #pragma omp for*/ for( int i=0; i Data_::Data_(const dimension& dim_, BaseGDL::InitType iT): SpDObj(dim_), dd( (iT == BaseGDL::NOALLOC) ? 0 : this->dim.NDimElements(), false) { dim.Purge(); if( iT == BaseGDL::INDGEN) throw GDLException("DObjGDL(dim,InitType=INDGEN) called."); if( iT != BaseGDL::NOALLOC && iT != BaseGDL::NOZERO) { SizeT sz = dd.size(); /*#pragma omp parallel if (sz >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= sz)) { #pragma omp for*/ for( int i=0; i Data_::Data_(const Data_& d_): Sp(d_.dim), dd(d_.dd) {} template<> Data_::Data_(const Data_& d_): SpDPtr(d_.dim), dd(d_.dd) { GDLInterpreter::IncRef( this); } template<> Data_::Data_(const Data_& d_): SpDObj(d_.dim), dd(d_.dd) { GDLInterpreter::IncRefObj( this); } template Data_* Data_::Dup() const { return new Data_(*this);} // template<> // Data_* Data_::Dup() const // { // Data_* p =new Data_(*this); // GDLInterpreter::IncRef( p); // return p; // } // template<> // Data_* Data_::Dup() const // { // Data_* p =new Data_(*this); // GDLInterpreter::IncRefObj( p); // return p; // } template BaseGDL* Data_::Log() { DFloatGDL* res = static_cast (this->Convert2( GDL_FLOAT, BaseGDL::COPY)); res->LogThis(); return res; } template<> BaseGDL* Data_::Log() { Data_* n = this->New( this->dim, BaseGDL::NOZERO); SizeT nEl = n->N_Elements(); if( nEl == 1) { (*n)[ 0] = log( (*this)[ 0]); return n; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for for( int i=0; i BaseGDL* Data_::Log() { Data_* n = this->New( this->dim, BaseGDL::NOZERO); SizeT nEl = n->N_Elements(); if( nEl == 1) { (*n)[ 0] = log( (*this)[ 0]); return n; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::Log() { Data_* n = this->New( this->dim, BaseGDL::NOZERO); SizeT nEl = n->N_Elements(); if( nEl == 1) { (*n)[ 0] = log( (*this)[ 0]); return n; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::Log() { Data_* n = this->New( this->dim, BaseGDL::NOZERO); SizeT nEl = n->N_Elements(); if( nEl == 1) { (*n)[ 0] = log( (*this)[ 0]); return n; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::LogThis() { DFloatGDL* res = static_cast (this->Convert2( GDL_FLOAT, BaseGDL::COPY)); res->LogThis(); // calls correct LogThis for float return res; } template<> BaseGDL* Data_::LogThis() { SizeT nEl = N_Elements(); if( nEl == 1) { (*this)[ 0] = log( (*this)[ 0]); return this; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::LogThis() { //#if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) SizeT nEl = N_Elements(); if( nEl == 1) { (*this)[ 0] = log( (*this)[ 0]); return this; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::LogThis() { //#if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) SizeT nEl = N_Elements(); if( nEl == 1) { (*this)[ 0] = log( (*this)[ 0]); return this; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::LogThis() { //#if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) SizeT nEl = N_Elements(); if( nEl == 1) { (*this)[ 0] = log( (*this)[ 0]); return this; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::Log10() { DFloatGDL* res = static_cast (this->Convert2( GDL_FLOAT, BaseGDL::COPY)); res->Log10This(); return res; } template<> BaseGDL* Data_::Log10() { //#if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) Data_* n = this->New( this->dim, BaseGDL::NOZERO); SizeT nEl = n->N_Elements(); if( nEl == 1) { (*n)[ 0] = log10( (*this)[ 0]); return n; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; idim, log10(dd)); #endif*/ } template<> BaseGDL* Data_::Log10() { //#if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) Data_* n = this->New( this->dim, BaseGDL::NOZERO); SizeT nEl = n->N_Elements(); if( nEl == 1) { (*n)[ 0] = log10( (*this)[ 0]); return n; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; idim, log10(dd)); #endif*/ } template<> BaseGDL* Data_::Log10() { //#if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) Data_* n = this->New( this->dim, BaseGDL::NOZERO); SizeT nEl = n->N_Elements(); if( nEl == 1) { (*n)[ 0] = log10( (*this)[ 0]); return n; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; idim, log10(dd)); #endif*/ } template<> BaseGDL* Data_::Log10() { //#if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) Data_* n = this->New( this->dim, BaseGDL::NOZERO); SizeT nEl = n->N_Elements(); if( nEl == 1) { (*n)[ 0] = log10( (*this)[ 0]); return n; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; idim, log10(dd)); #endif*/ } // see comment at void Data_::LogThis() template BaseGDL* Data_::Log10This() { DFloatGDL* res = static_cast (this->Convert2( GDL_FLOAT, BaseGDL::COPY)); res->Log10This(); // calls correct Log10This for float return res; } template<> BaseGDL* Data_::Log10This() { #if 1 || (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) SizeT nEl = N_Elements(); if( nEl == 1) { (*this)[ 0] = log10( (*this)[ 0]); return this; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::Log10This() { #if 1 || (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) SizeT nEl = N_Elements(); if( nEl == 1) { (*this)[ 0] = log10( (*this)[ 0]); return this; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::Log10This() { #if 1 || (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) SizeT nEl = N_Elements(); if( nEl == 1) { (*this)[ 0] = log10( (*this)[ 0]); return this; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i BaseGDL* Data_::Log10This() { #if 1 || (__GNUC__ == 3) && (__GNUC_MINOR__ == 2) //&& (__GNUC_PATCHLEVEL__ == 2) SizeT nEl = N_Elements(); if( nEl == 1) { (*this)[ 0] = log10( (*this)[ 0]); return this; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel for if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) for( int i=0; i // BaseGDL* Data_::Abs() const // { // return new Data_( this->dim, dd.abs()); // } template inline bool Data_::Greater(SizeT i1, SizeT i2) const { return ((*this)[i1] > (*this)[i2]);} template<> inline bool Data_::Greater(SizeT i1, SizeT i2) const { return (abs((*this)[i1]) > abs((*this)[i2]));} template<> inline bool Data_::Greater(SizeT i1, SizeT i2) const { return (abs((*this)[i1]) > abs((*this)[i2]));} template inline bool Data_::Equal(SizeT i1, SizeT i2) const { return ((*this)[i1] == (*this)[i2]);} // calculates the shift to be applied to the destination index inline SizeT CShiftNormalize( DLong s, SizeT this_dim) { if ( s >= 0 ) return s % this_dim; // s < 0 // long dstIx = -(-s % this_dim); long dstIx = -s % this_dim; dstIx = -dstIx; if( dstIx == 0) // if this_dim == 1 return 0; assert( dstIx + this_dim > 0); return dstIx + this_dim; } template BaseGDL* Data_::CShift( DLong d) const { SizeT nEl = dd.size(); SizeT shift = CShiftNormalize( d, nEl); if( shift == 0) return this->Dup(); Data_* sh = new Data_( this->dim, BaseGDL::NOZERO); SizeT firstChunk = nEl - shift; memcpy( &sh->dd[ shift], &dd[0], firstChunk * sizeof(Ty)); memcpy( &sh->dd[ 0], &dd[firstChunk], shift * sizeof(Ty)); return sh; } template<> BaseGDL* Data_::CShift( DLong d) const { SizeT nEl = dd.size(); SizeT shift = CShiftNormalize( d, nEl); if( shift == 0) return this->Dup(); Data_* sh = new Data_( this->dim, BaseGDL::NOZERO); SizeT firstChunk = nEl - shift; SizeT i=0; for( ; idd[shift++] = dd[ i]; shift = 0; for( ; idd[shift++] = dd[ i]; return sh; } template<> BaseGDL* Data_::CShift( DLong d) const { SizeT nEl = dd.size(); SizeT shift = CShiftNormalize( d, nEl); if( shift == 0) return this->Dup(); // does IncRef Data_* sh = new Data_( this->dim, BaseGDL::NOZERO); SizeT firstChunk = nEl - shift; SizeT i=0; for( ; idd[shift++] = dd[ i]; shift = 0; for( ; idd[shift++] = dd[ i]; GDLInterpreter::IncRef( sh); return sh; } template<> BaseGDL* Data_::CShift( DLong d) const { SizeT nEl = dd.size(); SizeT shift = CShiftNormalize( d, nEl); if( shift == 0) return this->Dup(); // does IncRefObj Data_* sh = new Data_( this->dim, BaseGDL::NOZERO); SizeT firstChunk = nEl - shift; SizeT i=0; for( ; idd[shift++] = dd[ i]; shift = 0; for( ; idd[shift++] = dd[ i]; GDLInterpreter::IncRefObj( sh); return sh; } template inline void CShift1( Ty* dst, SizeT& dstLonIx, const Ty* src, SizeT& srcLonIx, SizeT stride_1, SizeT chunk0, SizeT chunk1) { memcpy( &dst[ dstLonIx], &src[ srcLonIx], chunk0 * sizeof(Ty)); dstLonIx += chunk0; srcLonIx += chunk0; dstLonIx -= stride_1; memcpy( &dst[ dstLonIx], &src[ srcLonIx], chunk1 * sizeof(Ty)); dstLonIx += chunk1 ; srcLonIx += chunk1; dstLonIx += stride_1; } #undef TEST_GOOD_OL_VERSION template BaseGDL* Data_::CShift( DLong s[ MAXRANK]) const { Data_* sh = new Data_( this->dim, BaseGDL::NOZERO); SizeT nDim = this->Rank(); SizeT nEl = N_Elements(); SizeT stride[ MAXRANK + 1]; this->dim.Stride( stride, nDim); long srcIx[ MAXRANK+1]; long dstIx[ MAXRANK+1]; SizeT this_dim[ MAXRANK]; const Ty* ddP = &(*this)[0]; Ty* shP = &(*sh)[0]; if( nDim == 2) { this_dim[ 0] = this->dim[ 0]; this_dim[ 1] = this->dim[ 1]; dstIx[ 0] = CShiftNormalize( s[ 0], this_dim[ 0] ); dstIx[ 1] = CShiftNormalize( s[ 1], this_dim[ 1] ); SizeT dstLonIx = dstIx[ 0] + dstIx[ 1] * stride[ 1]; SizeT freeDstIx_0 = this_dim[ 0] - dstIx[ 0] ; SizeT freeDstIx_1 = this_dim[ 1] - dstIx[ 1] ; if( Sp::t != GDL_STRING) // strings are not POD all others are { SizeT srcLonIx=0; SizeT t=0; for( ; t< freeDstIx_1; ++t) { CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); } dstLonIx -= stride[ 2]; for( ; t< this_dim[ 1]; ++t) { CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); } } else // Sp::t == GDL_STRING { SizeT a=0; SizeT t=0; for( ; t< freeDstIx_1; ++t) { SizeT s=0; for( ; s< freeDstIx_0; ++s) { shP[ dstLonIx++] = ddP[ a++]; } dstLonIx -= stride[ 1]; for( ; s 2); #ifndef TEST_GOOD_OL_VERSION for( SizeT aSp=0; aSpdim[ aSp]; srcIx[ aSp] = 0; dstIx[ aSp] = CShiftNormalize( s[ aSp], this_dim[ aSp]); // dim_stride[ aSp] = this_dim[ aSp] * stride[ aSp]; } // srcIx[ nDim] = dstIx[ nDim] = 0; SizeT dstLonIx = dstIx[ 0]; for( SizeT rSp=1; rSp( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); } dstLonIx -= stride[ 2]; for( ; d1< this_dim[ 1]; ++d1) { CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); } dstLonIx += stride[ 2]; } dstLonIx -= stride[ 3]; for( ; d2< this_dim[ 2]; ++d2) { SizeT d1=0; for( ; d1< freeDstIx_1; ++d1) { CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); } dstLonIx -= stride[ 2]; for( ; d1< this_dim[ 1]; ++d1) { CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); } dstLonIx += stride[ 2]; } assert(srcLonIx == nEl); return sh; } // nDim == 3 if( nDim == 4) { SizeT freeDstIx_0 = this_dim[ 0] - dstIx[ 0] ; SizeT freeDstIx_1 = this_dim[ 1] - dstIx[ 1] ; SizeT freeDstIx_2 = this_dim[ 2] - dstIx[ 2] ; SizeT freeDstIx_3 = this_dim[ 3] - dstIx[ 3] ; SizeT srcLonIx=0; SizeT d3=0; for( ; d3< freeDstIx_3; ++d3) { SizeT d2=0; for( ; d2< freeDstIx_2; ++d2) { SizeT d1=0; for( ; d1< freeDstIx_1; ++d1) CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); dstLonIx -= stride[ 2]; for( ; d1< this_dim[ 1]; ++d1) CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); dstLonIx += stride[ 2]; } dstLonIx -= stride[ 3]; for( ; d2< this_dim[ 2]; ++d2) { SizeT d1=0; for( ; d1< freeDstIx_1; ++d1) CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); dstLonIx -= stride[ 2]; for( ; d1< this_dim[ 1]; ++d1) CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); dstLonIx += stride[ 2]; } dstLonIx += stride[ 3]; } dstLonIx -= stride[ 4]; for( ; d3< this_dim[ 3]; ++d3) { SizeT d2=0; for( ; d2< freeDstIx_2; ++d2) { SizeT d1=0; for( ; d1< freeDstIx_1; ++d1) CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); dstLonIx -= stride[ 2]; for( ; d1< this_dim[ 1]; ++d1) CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); dstLonIx += stride[ 2]; } dstLonIx -= stride[ 3]; for( ; d2< this_dim[ 2]; ++d2) { SizeT d1=0; for( ; d1< freeDstIx_1; ++d1) CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); dstLonIx -= stride[ 2]; for( ; d1< this_dim[ 1]; ++d1) CShift1( shP, dstLonIx, ddP, srcLonIx, stride[ 1], freeDstIx_0, dstIx[0]); dstLonIx += stride[ 2]; } dstLonIx += stride[ 3]; } assert(srcLonIx == nEl); return sh; } // nDim == 4 } // if( Sp::t != GDL_STRING) #else // need to be done earlier within the TEST_GOOD_OL_VERSION section for( SizeT aSp=0; aSpdim[ aSp]; srcIx[ aSp] = 0; dstIx[ aSp] = CShiftNormalize( s[ aSp], this_dim[ aSp]); } SizeT dstLonIx = dstIx[ 0]; for( SizeT rSp=1; rSp= this_dim[ aSp]) { // dstIx[ aSp] -= dim[ aSp]; dstIx[ aSp] = 0; dstLonIx -= dim_stride[ aSp]; } if( srcIx[ aSp] < this_dim[ aSp]) break; srcIx[ aSp] = 0; if( ++aSp >= nDim) break; // ?? ++srcIx[ aSp]; ++dstIx[ aSp]; dstLonIx += stride[ aSp]; } // code from new version (to avoid the worst :-) // copy one line SizeT s=0; for( ; s< freeDstIx_0; ++s) { shP[ dstLonIx++] = ddP[ a++]; } dstLonIx -= stride[ 1]; for( ; s BaseGDL* Data_::Transpose( DUInt* perm) { SizeT rank = this->Rank(); if( rank == 1) // special case: vector { if( perm != NULL) // must be [0] { return Dup(); } else { Data_* res = Dup(); res->dim >> 1; return res; } } // 2 - MAXRANK static DUInt* permDefault = InitPermDefault(); if( perm == NULL) { if( rank == 2) { SizeT srcDim0 = this->dim[0]; SizeT srcDim1 = this->dim[1]; Data_* res = new Data_( dimension( srcDim1, srcDim0), BaseGDL::NOZERO); SizeT srcIx = 0; for(SizeT srcIx1 = 0; srcIx1dim[0]; //.Stride( 1); // SizeT nElem = dd.size(); // SizeT srcDim0 = 0; // SizeT e = 0; // SizeT resDim0 = this->dim[1]; // for(; srcDim0dim[ perm[ d]]; // newDim.Set( d, this_dim[ d]); } Data_* res = new Data_( dimension( this_dim, rank), BaseGDL::NOZERO); // src stride SizeT srcStride[ MAXRANK]; this->dim.Stride( srcStride, rank); // src multi dim SizeT srcDim[MAXRANK]; for( SizeT i=0; i void Data_::Reverse( DLong dim) { // SA: based on total_over_dim_template() // static Data_* tmp = new Data_(dimension(1), BaseGDL::NOZERO); //Guard tmp_guard(tmp); SizeT nEl = N_Elements(); SizeT revStride = this->dim.Stride(dim); SizeT outerStride = this->dim.Stride(dim + 1); SizeT revLimit = this->dim[dim] * revStride; for (SizeT o = 0; o < nEl; o += outerStride) { for (SizeT i = 0; i < revStride; ++i) { SizeT oi = o + i; SizeT last_plus_oi = revLimit + oi - revStride + oi; SizeT half = ((revLimit / revStride) / 2) * revStride + oi; for (SizeT s = oi; s < half; s += revStride) { SizeT opp = last_plus_oi - s; Ty tmp = (*this)[s]; (*this)[s] = (*this)[opp]; (*this)[opp] = tmp; } } } } template BaseGDL* Data_::DupReverse( DLong dim) { // SA: based on total_over_dim_template() Data_* res = new Data_(this->dim, BaseGDL::NOZERO); Guard res_guard(res); SizeT nEl = N_Elements(); SizeT revStride = this->dim.Stride(dim); SizeT outerStride = this->dim.Stride(dim + 1); SizeT revLimit = this->dim[dim] * revStride; for (SizeT o = 0; o < nEl; o += outerStride) { for (SizeT i = 0; i < revStride; ++i) { SizeT oi = o + i; SizeT last_plus_oi = revLimit + oi - revStride + oi; SizeT half = ((revLimit / revStride) / 2) * revStride + oi; for (SizeT s = oi; s < half+1; s += revStride) { SizeT opp = last_plus_oi - s; // cout << s <<" "<< opp << " " << (*this)[s] << " " << (*this)[opp] << endl; (*res)[s] = (*this)[opp]; (*res)[opp] = (*this)[s]; } } } return res_guard.release(); } template<> BaseGDL* Data_::DupReverse( DLong dim) { // SA: based on total_over_dim_template() Data_* res = new Data_(this->dim, BaseGDL::NOZERO); Guard res_guard(res); SizeT nEl = N_Elements(); SizeT revStride = this->dim.Stride(dim); SizeT outerStride = this->dim.Stride(dim + 1); SizeT revLimit = this->dim[dim] * revStride; for (SizeT o = 0; o < nEl; o += outerStride) { for (SizeT i = 0; i < revStride; ++i) { SizeT oi = o + i; SizeT last_plus_oi = revLimit + oi - revStride + oi; SizeT half = ((revLimit / revStride) / 2) * revStride + oi; for (SizeT s = oi; s < half+1; s += revStride) { SizeT opp = last_plus_oi - s; (*res)[s] = (*this)[opp]; (*res)[opp] = (*this)[s]; } } } GDLInterpreter::IncRef( res); return res_guard.release(); } template<> BaseGDL* Data_::DupReverse( DLong dim) { // SA: based on total_over_dim_template() Data_* res = new Data_(this->dim, BaseGDL::NOZERO); Guard res_guard(res); SizeT nEl = N_Elements(); SizeT revStride = this->dim.Stride(dim); SizeT outerStride = this->dim.Stride(dim + 1); SizeT revLimit = this->dim[dim] * revStride; for (SizeT o = 0; o < nEl; o += outerStride) { for (SizeT i = 0; i < revStride; ++i) { SizeT oi = o + i; SizeT last_plus_oi = revLimit + oi - revStride + oi; SizeT half = ((revLimit / revStride) / 2) * revStride + oi; for (SizeT s = oi; s < half+1; s += revStride) { SizeT opp = last_plus_oi - s; (*res)[s] = (*this)[opp]; (*res)[opp] = (*this)[s]; } } } GDLInterpreter::IncRefObj( res); return res_guard.release(); } // rank must be 1 or 2 (already checked) template BaseGDL* Data_::Rotate( DLong dir) { dir = (dir%8+8)%8; // bring into 0..7 range if( dir == 0) return Dup(); if( dir == 2) { Data_* res = new Data_( this->dim, BaseGDL::NOZERO); SizeT nEl = N_Elements(); // #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { // #pragma omp for for( SizeT i=0; iRank() == 1) { if( dir == 7) return Dup(); if( dir == 1 || dir == 4) { return new Data_( dimension( 1, N_Elements()), dd); } if( dir == 5) // || dir == 2 { Data_* res = new Data_( this->dim, BaseGDL::NOZERO); SizeT nEl = N_Elements(); // #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { // #pragma omp for for( SizeT i=0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { // #pragma omp for for( SizeT i=0; idim, BaseGDL::NOZERO); } else { res = new Data_( dimension( this->dim[1], this->dim[0]), BaseGDL::NOZERO); } bool flipX = dir == 3 || dir == 5 || dir == 6; bool flipY = dir == 1 || dir == 6 || dir == 7; SizeT xEl = this->dim[0]; SizeT yEl = this->dim[1]; SizeT i = 0; for( SizeT y=0; y typename Data_::Ty Data_::Sum() const { Ty s= dd[ 0]; SizeT nEl = dd.size(); TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) shared( s) { #pragma omp for reduction(+:s) for( int i=1; i Data_::Ty Data_::Sum() const { Ty s= dd[ 0]; SizeT nEl = dd.size(); for( SizeT i=1; i Data_::Ty Data_::Sum() const { Ty s= dd[ 0]; SizeT nEl = dd.size(); for( SizeT i=1; i Data_::Ty Data_::Sum() const { Ty s= dd[ 0]; SizeT nEl = dd.size(); for( SizeT i=1; i // typename Data_::DataT& Data_:: Resize( SizeT n) // { // if( n > dd.size()) // throw GDLException("Internal error: Data_::Resize(...) tried to grow."); // if( dd.size() != n) // { // DataT rsArr( n); // std::copy( &(*this)[0], &(*this)[n], &rsArr[0]); // dd.resize( n); // discards data // std::copy( &rsArr[0], &rsArr[n], &(*this)[0]); // } // return dd; // } // template // typename Data_::Ty& Data_::operator[] (const SizeT d1) // { return (*this)[d1];} // only used from DStructGDL template Data_& Data_::operator=(const BaseGDL& r) { assert( r.Type() == this->Type()); const Data_& right = static_cast&>( r); assert( &right != this); // if( &right == this) return *this; // self assignment this->dim = right.dim; dd = right.dd; return *this; } // only used from DStructGDL template<> Data_& Data_::operator=(const BaseGDL& r) { assert( r.Type() == this->Type()); const Data_& right = static_cast( r); assert( &right != this); // if( &right == this) return *this; // self assignment this->dim = right.dim; GDLInterpreter::DecRef( this); dd = right.dd; GDLInterpreter::IncRef( this); return *this; } // only used from DStructGDL template<> Data_& Data_::operator=(const BaseGDL& r) { assert( r.Type() == this->Type()); const Data_& right = static_cast( r); assert( &right != this); // if( &right == this) return *this; // self assignment this->dim = right.dim; GDLInterpreter::DecRefObj( this); dd = right.dd; GDLInterpreter::IncRefObj( this); return *this; } template void Data_::InitFrom(const BaseGDL& r) { assert( r.Type() == this->Type()); const Data_& right = static_cast&>( r); assert( &right != this); // if( &right == this) return *this; // self assignment this->dim = right.dim; dd.InitFrom( right.dd); // return *this; } // only used from DStructGDL::DStructGDL(const DStructGDL& d_) template<> void Data_::InitFrom(const BaseGDL& r) { assert( r.Type() == this->Type()); const Data_& right = static_cast( r); assert( &right != this); // if( &right == this) return *this; // self assignment this->dim = right.dim; // GDLInterpreter::DecRef( this); dd.InitFrom( right.dd); GDLInterpreter::IncRef( this); // return *this; } // only used from DStructGDL::DStructGDL(const DStructGDL& d_) template<> void Data_::InitFrom(const BaseGDL& r) { assert( r.Type() == this->Type()); const Data_& right = static_cast( r); assert( &right != this); // if( &right == this) return *this; // self assignment this->dim = right.dim; // GDLInterpreter::DecRefObj( this); dd.InitFrom( right.dd); GDLInterpreter::IncRefObj( this); // return *this; } template< class Sp> bool Data_::EqType( const BaseGDL* r) const { return (this->Type() == r->Type());} template< class Sp> void* Data_::DataAddr()// SizeT elem) { return &(*this)[0];}//elem];} // template<> // void* Data_::DataAddr()// SizeT elem) // { // throw GDLException("STRING not allowed in this context."); // return NULL; // } // template<> // void* Data_::DataAddr()// SizeT elem) // { // throw GDLException("PTR not allowed in this context."); // return NULL; // } // template<> // void* Data_::DataAddr()// SizeT elem) // { // throw GDLException("Object expression not allowed in this context."); // return NULL; // } template< class Sp> SizeT Data_::N_Elements() const { return dd.size();} template<> SizeT Data_::N_Elements() const { if( !this->StrictScalar()) return dd.size(); DObj s = dd[0]; // is StrictScalar() if( s == 0) // no overloads for null object return 1; DStructGDL* oStructGDL= GDLInterpreter::GetObjHeapNoThrow( s); if( oStructGDL == NULL) // if object not valid -> default behaviour return 1; DStructDesc* desc = oStructGDL->Desc(); if( desc->IsParent("LIST")) { // no static here, might vary in derived object unsigned nListTag = desc->TagIndex( "NLIST"); SizeT listSize = (*static_cast(oStructGDL->GetTag( nListTag, 0)))[0]; return listSize; } if( desc->IsParent("HASH")) { // no static here, might vary in derived object unsigned nListTag = desc->TagIndex( "TABLE_COUNT"); SizeT listSize = (*static_cast(oStructGDL->GetTag( nListTag, 0)))[0]; return listSize; } return 1; } template< class Sp> SizeT Data_::Size() const { return dd.size();} template< class Sp> SizeT Data_::Sizeof() const { return sizeof(Ty);} template< class Sp> void Data_::Clear() { SizeT nEl = dd.size(); /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( SizeT i = 0; i void Data_::Construct() { // note that this is not possible in cases where an operation // (here: 'new' which is ok) isn't defined for any POD // (although this code never executes and should be optimized away anyway) const bool isPOD = Sp::IS_POD; // do nothing for POD if( !isPOD) { SizeT nEl = dd.size(); // for( SizeT i = 0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( SizeT i = 0; i void Data_::Construct() { SizeT nEl = dd.size(); // for( SizeT i = 0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( SizeT i = 0; i void Data_::Construct() { SizeT nEl = dd.size(); // for( SizeT i = 0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( SizeT i = 0; i // void Data_< SpDString>::Construct() // { // SizeT nEl = dd.size(); // // for( SizeT i = 0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( SizeT i = 0; i // void Data_< SpDComplex>::Construct() // { // SizeT nEl = dd.size(); // /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( SizeT i = 0; i // void Data_< SpDComplexDbl>::Construct() // { // SizeT nEl = dd.size(); // /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( SizeT i = 0; i void Data_::ConstructTo0() { if( Sp::IS_POD) { SizeT nEl = dd.size(); /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( SizeT i = 0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( SizeT i = 0; i // void Data_< SpDString>::ConstructTo0() // { // SizeT nEl = dd.size(); // /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( int i = 0; i // void Data_< SpDComplex>::ConstructTo0() // { // SizeT nEl = dd.size(); // /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( int i = 0; i // void Data_< SpDComplexDbl>::ConstructTo0() // { // SizeT nEl = dd.size(); // /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( int i = 0; i void Data_::Destruct() { // no destruction for POD if( !Sp::IS_POD) { SizeT nEl = dd.size(); /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( SizeT i = 0; i void Data_< SpDPtr>::Destruct() { GDLInterpreter::DecRef( this); } template<> void Data_< SpDObj>::Destruct() { GDLInterpreter::DecRefObj( this); } // template<> // void Data_< SpDString>::Destruct() // { // SizeT nEl = dd.size(); // /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( SizeT i = 0; i // void Data_< SpDComplex>::Destruct() // { // SizeT nEl = dd.size(); // /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( SizeT i = 0; i // void Data_< SpDComplexDbl>::Destruct() // { // SizeT nEl = dd.size(); // /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) // { // #pragma omp for*/ // for( SizeT i = 0; i BaseGDL* Data_::SetBuffer( const void* b) { dd.SetBuffer( static_cast< Ty*>(const_cast( b))); return this; } template< class Sp> void Data_::SetBufferSize( SizeT s) { dd.SetBufferSize( s); } // template< class Sp> // Data_* Data_::Dup() // { return new Data_(*this);} template< class Sp> Data_* Data_::New( const dimension& dim_, BaseGDL::InitType noZero) const { if( noZero == BaseGDL::NOZERO) return new Data_(dim_, BaseGDL::NOZERO); if( noZero == BaseGDL::INIT) { Data_* res = new Data_(dim_, BaseGDL::NOZERO); SizeT nEl = res->dd.size(); /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( SizeT i=0; i Data_* Data_::NewResult() const { return new Data_(this->dim, BaseGDL::NOZERO); } // template< class Sp> // bool Data_::Scalar() const // { // return (dd.size() == 1); // } // template< class Sp> // bool Data_::Scalar(Ty& s) const // { // if( dd.size() != 1) return false; // s=(*this)[0]; // return true; // } template SizeT Data_::NBytes() const { return (dd.size() * sizeof(Ty));} // string, ptr, obj cannot calculate their bytes // only used by assoc function template<> SizeT Data_::NBytes() const { SizeT nEl = dd.size(); SizeT nB = 0; /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for( int i=0; i SizeT Data_::NBytes() const // { // throw GDLException("object references"); // } // template<> SizeT Data_::NBytes() const // { // throw GDLException("pointers"); // } template SizeT Data_::ToTransfer() const { return dd.size(); } // complex has 2 elements to transfer template<> SizeT Data_::ToTransfer() const { return N_Elements() * 2; } template<> SizeT Data_::ToTransfer() const { return N_Elements() * 2; } // // note that min and max are not defined in BaseGDL // template // typename Data_::Ty Data_::min() const // { return dd.min();} // template // typename Data_::Ty Data_::max() const // { return dd.max();} // template<> // Data_::Ty Data_::min() const // { // throw GDLException("COMPLEX expression not allowed in this context."); // } // template<> // Data_::Ty Data_::max() const // { // throw GDLException("COMPLEX expression not allowed in this context."); // } // template<> // Data_::Ty Data_::min() const // { // throw GDLException("COMPLEXDBL expression not allowed in this context."); // } // template<> // Data_::Ty Data_::max() const // { // throw GDLException("COMPLEXDBL expression not allowed in this context."); // } // for HASH objects template DDouble Data_::HashValue() const { return static_cast((*this)[0]); } template<> DDouble Data_::HashValue() const { return real((*this)[0]); } template<> DDouble Data_::HashValue() const { return real((*this)[0]); } template<> DDouble Data_::HashValue() const { throw GDLException("STRING expression not allowed as index. Please report."); return 0; // get rid of warning } template<> DDouble Data_::HashValue() const { throw GDLException("PTR expression not allowed as index. Please report."); return 0; // get rid of warning } template<> DDouble Data_::HashValue() const { throw GDLException("Object expression not allowed as index. Please report."); return 0; // get rid of warning } // -1 -> p2 is greater // 0 -> equal // 1 -> this is greater // note: this is for internal use only (for HASH objects) // this should not be called on non-numeric types (also for p2) template int Data_::HashCompare( BaseGDL* p2) const { assert( dd.size() == 1); assert( p2->N_Elements() == 1); if( p2->Type() == GDL_STRING) return 1; // strings 1st (smallest) assert( NumericType(p2->Type())); if( this->IS_INTEGER) { if( IntType( p2->Type())) // make full use of data type { RangeT thisValue = this->LoopIndex(); RangeT p2Value = p2->LoopIndex(); if( thisValue == p2Value) return 0; if( thisValue < p2Value) return -1; return 1; } } DDouble thisValue = this->HashValue(); DDouble p2Value = p2->HashValue(); if( thisValue == p2Value) return 0; if( thisValue < p2Value) return -1; return 1; } template<> int Data_::HashCompare( BaseGDL* p2) const { assert( dd.size() == 1); assert( p2->N_Elements() == 1); if( p2->Type() != this->Type()) return -1; // strings 1st (smallest) Data_* p2String = static_cast(p2); if( dd[0].length() == (*p2String)[0].length()) { if( dd[0] == (*p2String)[0]) return 0; if( dd[0] < (*p2String)[0]) return -1; return 1; } else if( dd[0].length() < (*p2String)[0].length()) { return -1; } return 1; } // Scalar2Index // used by the interpreter // -2 < 0 array // -1 < 0 scalar // 0 empty or array // 1 scalar // 2 one-element array template int Data_::Scalar2Index( SizeT& st) const { if( dd.size() != 1) return 0; // the next statement gives a warning for unsigned integer types: // "comparison is always false due to limited range of data type" // This is because the same template is used here for signed and // unsigned data. A template specialization for the unsigned integer // types would result in three identical specializations, which is bad // for maintainability. And as any modern C++ compiler will optimize // away the superflous (for unsigned data) statement anyway, it is // better to keep the code this way here. if( (*this)[0] < 0) { if( this->dim.Rank() != 0) return -2; else return -1; } st= static_cast((*this)[0]); if( this->dim.Rank() != 0) return 2; return 1; } template int Data_::Scalar2RangeT( RangeT& st) const { if( dd.size() != 1) return 0; st= static_cast((*this)[0]); if( this->dim.Rank() != 0) return 2; return 1; } template<> int Data_::Scalar2Index( SizeT& st) const { if( dd.size() != 1) return 0; float r=real((*this)[0]); if( r < 0.0) return -1; st= static_cast(r); if( this->dim.Rank() != 0) return 2; return 1; } template<> int Data_::Scalar2RangeT( RangeT& st) const { if( dd.size() != 1) return 0; float r=real((*this)[0]); st= static_cast(r); if( this->dim.Rank() != 0) return 2; return 1; } template<> int Data_::Scalar2Index( SizeT& st) const { if( dd.size() != 1) return 0; double r=real((*this)[0]); if( r < 0.0) return -1; st= static_cast(r); if( this->dim.Rank() != 0) return 2; return 1; } template<> int Data_::Scalar2RangeT( RangeT& st) const { if( dd.size() != 1) return 0; double r=real((*this)[0]); st= static_cast(r); if( this->dim.Rank() != 0) return 2; return 1; } template<> int Data_::Scalar2Index( SizeT& st) const { if( dd.size() != 1) return 0; SizeT tSize=(*this)[0].size(); if( tSize == 0) { st=0; } else { long int number = Str2L( (*this)[0].c_str()); if( number < 0) return -1; st=number; } if( dim.Rank() != 0) return 2; return 1; } template<> int Data_::Scalar2RangeT( RangeT& st) const { if( dd.size() != 1) return 0; SizeT tSize=(*this)[0].size(); if( tSize == 0) { st=0; } else { long int number = Str2L( (*this)[0].c_str()); st=number; } if( dim.Rank() != 0) return 2; return 1; } template<> int Data_::Scalar2Index( SizeT& st) const { throw GDLException("PTR expression not allowed in this context."); return 0; // get rid of warning } template<> int Data_::Scalar2RangeT( RangeT& st) const { throw GDLException("PTR expression not allowed in this context."); return 0; // get rid of warning } template<> int Data_::Scalar2Index( SizeT& st) const { throw GDLException("Object expression not allowed in this context."); return 0; // get rid of warning } template<> int Data_::Scalar2RangeT( RangeT& st) const { throw GDLException("Object expression not allowed in this context."); return 0; // get rid of warning } // for FOR loop *indices* template RangeT Data_::LoopIndex() const { // if( dd.size() != 1) return 0; // the next statement gives a warning for unsigned integer types: // "comparison is always false due to limited range of data type" // This is because the same template is used here for signed and // unsigned data. A template specialization for the unsigned integer // types would result in three identical specializations, which is bad // for maintainability. And as any modern C++ compiler will optimize // away the superflous (for unsigned data) statement anyway, it is // better to keep the code this way here. // if( (*this)[0] < 0) // throw GDLException( "Index variable <0."); return static_cast((*this)[0]); } template<> RangeT Data_::LoopIndex() const { // if( (*this)[0] < 0.0f) // //if( (*this)[0] <= 1.0f) // throw GDLException( "Index variable <0."); //else // return 0; return static_cast((*this)[0]); } template<> RangeT Data_::LoopIndex() const { // if( (*this)[0] < 0.0) // //if( (*this)[0] <= 1.0) // throw GDLException( "Index variable <0."); //else // return 0; return static_cast((*this)[0]); } template<> RangeT Data_::LoopIndex() const { throw GDLException( "Complex expression not allowed as index."); return 0; } template<> RangeT Data_::LoopIndex() const { throw GDLException( "Complex expression not allowed as index."); return 0; } template<> RangeT Data_::LoopIndex() const { if( (*this)[0] == "") return 0; const char* cStart=(*this)[0].c_str(); char* cEnd; RangeT ix=strtol(cStart,&cEnd,10); if( cEnd == cStart) { Warning( "Type conversion error: " "Unable to convert given STRING: '"+ (*this)[0]+"' to index."); return 0; } return ix; } template<> RangeT Data_::LoopIndex() const { throw GDLException("PTR expression not allowed as index."); return 0; // get rid of warning } template<> RangeT Data_::LoopIndex() const { throw GDLException("Object expression not allowed as index."); return 0; // get rid of warning } // True template bool Data_::True() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s % 2); } template<> bool Data_::True() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != 0.0f); } template<> bool Data_::True() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != 0.0); } template<> bool Data_::True() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != ""); } template<> bool Data_::True() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (real(s) != 0.0 || imag(s) != 0.0); } template<> bool Data_::True() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (real(s) != 0.0 || imag(s) != 0.0); } template<> bool Data_::True() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != 0); } template<> bool Data_::True() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); if( s == 0) return false; // on overloads for null object -> default is 'false' // DStructGDL* oStructGDL= GDLInterpreter::GetObjHeapNoThrow( s); // if( oStructGDL == NULL) // object not valid -> default behaviour // return true; // true is ok here: Default behaviour is to just checks for null object // // DStructDesc* desc = oStructGDL->Desc(); // // DFun* isTrueOverload = static_cast(desc->GetOperator( OOIsTrue)); DSubUD* isTrueOverload = static_cast(GDLInterpreter::GetObjHeapOperator( s, OOIsTrue)); if( isTrueOverload == NULL) return true; // not overloaded, false case for default already returned (s. a.) ProgNodeP callingNode = interpreter->GetRetTree(); // BaseGDL* self = this->Dup(); // Guard selfGuard( self); // EnvUDT* newEnv= new EnvUDT( callingNode, isTrueOverload, &self); // no parameters EnvUDT* newEnv; DObjGDL* self; Guard selfGuard; // Dup() here is not optimal // avoid at least for internal overload routines (which do/must not change SELF or r) bool internalDSubUD = isTrueOverload->GetTree()->IsWrappedNode(); if( internalDSubUD) { self = this; newEnv= new EnvUDT( callingNode, isTrueOverload, &self); } else { self = this->Dup(); selfGuard.Init( self); newEnv= new EnvUDT( callingNode, isTrueOverload, &self); } StackGuard guard(interpreter->CallStack()); interpreter->CallStack().push_back( newEnv); // make the call BaseGDL* res=interpreter->call_fun(static_cast(newEnv->GetPro())->GetTree()); if( !internalDSubUD && self != selfGuard.Get()) { // always put out warning first, in case of a later crash Warning( "WARNING: " + isTrueOverload->ObjectName() + ": Assignment to SELF detected (GDL session still ok)."); // assignment to SELF -> self was deleted and points to new variable // which it owns selfGuard.Release(); if( (BaseGDL*)self != NullGDL::GetSingleInstance()) selfGuard.Reset(self); } if( NullGDL::IsNULLorNullGDL( res)) { throw GDLException( isTrueOverload->ObjectName() + " returned an undefined value.",true,false); } Guard resGuard( res); // prevent recursion if( res->Type() == GDL_OBJ) { ostringstream os; res->ToStream(os); throw GDLException( isTrueOverload->ObjectName() + ": Object reference expression not allowed in this context: " + os.str(),true,false); } return res->LogTrue(); } // False template bool Data_::False() { return !True(); } // Sgn template int Data_::Sgn() // -1,0,1 { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); if( s > 0) return 1; if( s == 0) return 0; return -1; } template<> int Data_::Sgn() // -1,0,1 { throw GDLException("String expression not allowed in this context."); return 0; } template<> int Data_::Sgn() // -1,0,1 { throw GDLException("Complex expression not allowed in this context."); return 0; } template<> int Data_::Sgn() // -1,0,1 { throw GDLException("Complex expression not allowed in this context."); return 0; } template<> int Data_::Sgn() // -1,0,1 { throw GDLException("Ptr expression not allowed in this context."); return 0; } template<> int Data_::Sgn() // -1,0,1 { throw GDLException("Object expression not allowed in this context."); return 0; } // Equal (deletes r) only used in ForCheck(...) template bool Data_::Equal( BaseGDL* r) const { assert( r->StrictScalar()); // if( !r->Scalar()) // { // GDLDelete(r); // throw GDLException("Expression must be a scalar in this context."); // } assert( r->Type() == this->t); Data_* rr=static_cast(r); // Data_* rr=static_cast(r->Convert2( this->t)); bool ret= ((*this)[0] == (*rr)[0]); GDLDelete(rr); return ret; } template<> bool Data_::Equal( BaseGDL* r) const { assert( r->StrictScalar()); // if( !r->Scalar()) // { // GDLDelete(r); // throw GDLException("Expression must be a scalar in this context."); // } assert( r->Type() == this->t); Data_* rr=static_cast(r); // Data_* rr=static_cast(r->Convert2( this->t)); bool ret= fabs((*this)[0] - (*rr)[0]) < 1.0f; GDLDelete(rr); return ret; } template<> bool Data_::Equal( BaseGDL* r) const { assert( r->StrictScalar()); // if( !r->Scalar()) // { // GDLDelete(r); // throw GDLException("Expression must be a scalar in this context."); // } assert( r->Type() == this->t); Data_* rr=static_cast(r); // Data_* rr=static_cast(r->Convert2( this->t)); bool ret= fabs((*this)[0] - (*rr)[0]) < 1.0; GDLDelete(rr); return ret; } // Equal (does not delete r) template bool Data_::EqualNoDelete( const BaseGDL* r) const { if( !r->Scalar()) { throw GDLException("Expression must be a scalar in this context."); } bool ret; if( r->Type() != this->t) { Data_* rr=static_cast(const_cast(r)->Convert2( this->t, BaseGDL::COPY)); ret= ((*this)[0] == (*rr)[0]); GDLDelete(rr); } else { const Data_* rr=static_cast(r); ret= ((*this)[0] == (*rr)[0]); } return ret; } bool DStructGDL::Equal( BaseGDL* r) const { GDLDelete(r); throw GDLException("Struct expression not allowed in this context."); return false; } // For array_equal r must be of same type template bool Data_::ArrayEqual( BaseGDL* rIn) { Data_* r = static_cast< Data_*>( rIn); SizeT nEl = N_Elements(); SizeT rEl = r->N_Elements(); if( rEl == 1) { for( SizeT i=0; i bool Data_::OutOfRangeOfInt() const { assert( this->StrictScalar()); return (*this)[0] > std::numeric_limits< DInt>::max() || (*this)[0] < std::numeric_limits< DInt>::min(); } template<> bool Data_::OutOfRangeOfInt() const { return false; } template<> bool Data_::OutOfRangeOfInt() const { return false; } template<> bool Data_::OutOfRangeOfInt() const { return false; } template<> bool Data_::OutOfRangeOfInt() const { return false; } // for statement compliance (int types , float types scalar only) // (convert strings to floats here (not for first argument) template void Data_::ForCheck( BaseGDL** lEnd, BaseGDL** lStep) { // all scalars? if( !StrictScalar()) throw GDLException("Loop INIT must be a scalar in this context."); if( !(*lEnd)->StrictScalar()) throw GDLException("Loop LIMIT must be a scalar in this context."); if( lStep != NULL && !(*lStep)->StrictScalar()) throw GDLException("Loop INCREMENT must be a scalar in this context."); // only proper types? if( this->t== GDL_UNDEF) throw GDLException("Expression is undefined."); if( this->t== GDL_COMPLEX || this->t == GDL_COMPLEXDBL) throw GDLException("Complex expression not allowed in this context."); if( this->t== GDL_PTR) throw GDLException("Pointer expression not allowed in this context."); if( this->t== GDL_OBJ) throw GDLException("Object expression not allowed in this context."); if( this->t== GDL_STRING) throw GDLException("String expression not allowed in this context."); // check for promotion of this (only GDL_INT) // and GDL_LONG ??? DType lType = (*lEnd)->Type(); if( this->t == GDL_INT && lType != GDL_INT) { if( lType == GDL_COMPLEX || lType == GDL_COMPLEXDBL) throw GDLException("Complex expression not allowed in this context."); if( lType == GDL_STRING) { *lEnd=(*lEnd)->Convert2( GDL_LONG); // try with long if( !(*lEnd)->OutOfRangeOfInt()) { *lEnd=(*lEnd)->Convert2( GDL_INT); // back to GDL_INT if within range } } else if( !(*lEnd)->OutOfRangeOfInt()) { *lEnd=(*lEnd)->Convert2( GDL_INT); // regular conversion } // if the GDL_INT range is exceeded, lEnd is NOT changed if( lStep != NULL) *lStep=(*lStep)->Convert2( (*lEnd)->Type()); return; // finished for GDL_INT } if( this->t == GDL_LONG) { if( lType == GDL_COMPLEX || lType == GDL_COMPLEXDBL) throw GDLException("Complex expression not allowed in this context."); } // no promotion happened *lEnd=(*lEnd)->Convert2( this->t); if( lStep != NULL) *lStep=(*lStep)->Convert2( this->t); } void DStructGDL::ForCheck( BaseGDL** lEnd, BaseGDL** lStep) { throw GDLException("Struct expression not allowed in this context."); } // ForCheck must have been called before template bool Data_::ForAddCondUp( BaseGDL* endLoopVar) // bool Data_::ForAddCondUp( ForLoopInfoT& loopInfo) { (*this)[0] += 1; // Data_* lEnd=static_cast(lEndIn); if( endLoopVar->Type() != this->t) throw GDLException("Type of FOR index variable changed."); Data_* lEnd=static_cast(endLoopVar); /* Data_* lEnd=dynamic_cast(endLoopVar); if( lEnd == NULL) throw GDLException("Type of FOR index variable changed.");*/ return (*this)[0] <= (*lEnd)[0]; } // ForCheck must have been called before template bool Data_::ForCondUp( BaseGDL* lEndIn) { // Data_* lEnd=static_cast(lEndIn); if( lEndIn->Type() != this->t) throw GDLException("Type of FOR index variable changed."); Data_* lEnd=static_cast(lEndIn); /* Data_* lEnd=dynamic_cast(lEndIn); if( lEnd == NULL) throw GDLException("Type of FOR index variable changed.");*/ return (*this)[0] <= (*lEnd)[0]; } template bool Data_::ForCondDown( BaseGDL* lEndIn) { // Data_* lEnd=static_cast(lEndIn); if( lEndIn->Type() != this->t) throw GDLException("Type of FOR index variable changed."); Data_* lEnd=static_cast(lEndIn); /* Data_* lEnd=dynamic_cast(lEndIn); if( lEnd == NULL) throw GDLException("Type of FOR index variable changed.");*/ return (*this)[0] >= (*lEnd)[0]; } // error if the type of the loop variable changed bool DStructGDL::ForCondUp( BaseGDL*) { throw GDLException("Type of FOR index variable changed to STRUCT."); return false; } bool DStructGDL::ForCondDown( BaseGDL*) { throw GDLException("Type of FOR index variable changed to STRUCT."); return false; } template<> bool Data_::ForCondUp( BaseGDL*) { throw GDLException("Type of FOR index variable changed to COMPLEX."); return false; } template<> bool Data_::ForAddCondUp( BaseGDL* loopInfo) // bool Data_::ForAddCondUp( ForLoopInfoT& loopInfo) { throw GDLException("Type of FOR index variable changed to COMPLEX."); return false; } template<> bool Data_::ForCondDown( BaseGDL*) { throw GDLException("Type of FOR index variable changed to COMPLEX."); return false; } template<> bool Data_::ForAddCondUp( BaseGDL* loopInfo) // bool Data_::ForAddCondUp( ForLoopInfoT& loopInfo) { throw GDLException("Type of FOR index variable changed to DCOMPLEX."); return false; } template<> bool Data_::ForCondUp( BaseGDL*) { throw GDLException("Type of FOR index variable changed to DCOMPLEX."); return false; } template<> bool Data_::ForCondDown( BaseGDL*) { throw GDLException("Type of FOR index variable changed to DCOMPLEX."); return false; } // ForCheck must have been called before // general version template void Data_::ForAdd( BaseGDL* addIn) { if( addIn == NULL) { (*this)[0] += 1; return; } Data_* add=static_cast(addIn); (*this)[0] += (*add)[0]; } // cannnot be called, just to make the compiler shut-up void DStructGDL::ForAdd( BaseGDL* addIn) {} // normal (+1) version template void Data_::ForAdd() { (*this)[0] += 1; } // cannnot be called, just to make the compiler shut-up void DStructGDL::ForAdd() {} template void Data_::AssignAtIx( RangeT ixR, BaseGDL* srcIn) { if( ixR < 0) { SizeT nEl = this->N_Elements(); if( -ixR > nEl) throw GDLException("Subscript out of range: " + i2s(ixR)); SizeT ix = nEl + ixR; if( srcIn->Type() != this->Type()) { Data_* rConv = static_cast(srcIn->Convert2( this->Type(), BaseGDL::COPY_BYTE_AS_INT)); // Data_* rConv = static_cast(srcIn->Convert2( this->Type(), BaseGDL::COPY)); Guard conv_guard( rConv); (*this)[ix] = (*rConv)[0]; } else (*this)[ix] = (*static_cast(srcIn))[0]; return; } // ixR >= 0 if( srcIn->Type() != this->Type()) { Data_* rConv = static_cast(srcIn->Convert2( this->Type(), BaseGDL::COPY_BYTE_AS_INT)); // Data_* rConv = static_cast(srcIn->Convert2( this->Type(), BaseGDL::COPY)); Guard conv_guard( rConv); (*this)[ixR] = (*rConv)[0]; } else (*this)[ixR] = (*static_cast(srcIn))[0]; } // assigns srcIn to this at ixList, if ixList is NULL does linear copy // assumes: ixList has this already set as variable // used by DotAccessDescT::DoAssign // GDLInterpreter::l_array_expr template void Data_::AssignAt( BaseGDL* srcIn, ArrayIndexListT* ixList, SizeT offset) { // breakpoint(); // gdbg can not handle breakpoints in template functions Data_* src = static_cast(srcIn); SizeT srcElem= src->N_Elements(); // bool isScalar= (srcElem == 1); bool isScalar= (srcElem == 1) && (src->Rank() == 0); if( isScalar) { // src is scalar Ty scalar=(*src)[0]; if( ixList == NULL) { SizeT nCp=Data_::N_Elements(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()]=scalar; for( SizeT c=1; cSeqAccess()]=scalar; //} // (*this)[ ixList->GetIx( c)]=scalar; } } else { if( ixList == NULL) { SizeT nCp=Data_::N_Elements(); // if (non-indexed) src is smaller -> just copy its number of elements if( nCp > (srcElem-offset)) { if( offset == 0) nCp=srcElem; else throw GDLException("Source expression contains not enough elements."); } /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; cN_Elements(); if( nCp == 1) { SizeT destStart = ixList->LongIx(); // len = 1; SizeT rStride = srcIn->Stride(this->Rank()); (*this)[ destStart] = (*src)[ offset/rStride]; // InsAt( src, ixList, offset); } else { if( offset == 0) { if( srcElem < nCp) throw GDLException("Array subscript must have same size as" " source expression."); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()]=(*src)[0]; for( SizeT c=1; cSeqAccess()]=(*src)[c]; // } // (*this)[ ixList->GetIx( c)]=(*src)[c+offset]; } else { if( (srcElem-offset) < nCp) throw GDLException("Array subscript must have same size as" " source expression."); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()]=(*src)[offset]; for( SizeT c=1; cSeqAccess()]=(*src)[c+offset]; // } // (*this)[ ixList->GetIx( c)]=(*src)[c+offset]; } } } } } template void Data_::AssignAt( BaseGDL* srcIn, ArrayIndexListT* ixList) { assert( ixList != NULL); // breakpoint(); // gdbg can not handle breakpoints in template functions Data_* src = static_cast(srcIn); SizeT srcElem= src->N_Elements(); bool isScalar= (srcElem == 1); if( isScalar) { // src is scalar SizeT nCp=ixList->N_Elements(); if( nCp == 1) { (*this)[ ixList->LongIx()] = (*src)[0]; } else { Ty scalar=(*src)[0]; AllIxBaseT* allIx = ixList->BuildIx(); (*this)[ allIx->InitSeqAccess()]=scalar; /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=1; cSeqAccess()]=scalar; // (*this)[ (*allIx)[ c]]=scalar; // } // (*this)[ ixList->GetIx( c)]=scalar; } } else { // crucial part SizeT nCp=ixList->N_Elements(); if( nCp == 1) { InsAt( src, ixList); } else { if( srcElem < nCp) throw GDLException("Array subscript must have same size as" " source expression."); AllIxBaseT* allIx = ixList->BuildIx(); (*this)[ allIx->InitSeqAccess()]=(*src)[0]; /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=1; cSeqAccess()]=(*src)[c]; // (*this)[ (*allIx)[ c]]=(*src)[c]; // } // (*this)[ ixList->GetIx( c)]=(*src)[c+offset]; } } } template void Data_::AssignAt( BaseGDL* srcIn) { // breakpoint(); // gdbg can not handle breakpoints in template functions Data_* src = static_cast(srcIn); SizeT srcElem= src->N_Elements(); bool isScalar= (srcElem == 1); if( isScalar) { // src is scalar Ty scalar=(*src)[0]; /* dd = scalar;*/ SizeT nCp=Data_::N_Elements(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; c just copy its number of elements if( nCp > srcElem) nCp=srcElem; /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; c void Data_::DecAt( ArrayIndexListT* ixList) { if( ixList == NULL) { dd -= 1; // SizeT nCp=Data_::N_Elements(); // for( SizeT c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()]--; for( SizeT c=1; cSeqAccess()]--; }// } } template void Data_::IncAt( ArrayIndexListT* ixList) { if( ixList == NULL) { dd += 1; // SizeT nCp=Data_::N_Elements(); // for( SizeT c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()]++; for( SizeT c=1; cSeqAccess()]++; }// } } // float, double template<> void Data_::DecAt( ArrayIndexListT* ixList) { if( ixList == NULL) { dd -= 1.0f; // SizeT nCp=Data_::N_Elements(); // for( SizeT c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()] -= 1.0f; for( SizeT c=1; cSeqAccess()] -=1.0f; }// } } template<> void Data_::IncAt( ArrayIndexListT* ixList) { if( ixList == NULL) { dd += 1.0f; // SizeT nCp=Data_::N_Elements(); // for( SizeT c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()] += 1.0f; for( SizeT c=1; cSeqAccess()] +=1.0f; }// } } template<> void Data_::DecAt( ArrayIndexListT* ixList) { if( ixList == NULL) { dd -= 1.0; // SizeT nCp=Data_::N_Elements(); // for( SizeT c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()] -= 1.0; for( SizeT c=1; cSeqAccess()] -=1.0; }// } } template<> void Data_::IncAt( ArrayIndexListT* ixList) { if( ixList == NULL) { dd += 1.0; // SizeT nCp=Data_::N_Elements(); // for( SizeT c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()] += 1.0f; for( SizeT c=1; cSeqAccess()] +=1.0f; }// } } // complex template<> void Data_::DecAt( ArrayIndexListT* ixList) { if( ixList == NULL) { // dd -= 1.0f; SizeT nCp=Data_::N_Elements(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()] -= 1.0; for( SizeT c=1; cSeqAccess()] -=1.0; // for( SizeT c=0; c void Data_::IncAt( ArrayIndexListT* ixList) { if( ixList == NULL) { // dd += 1.0f; SizeT nCp=Data_::N_Elements(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()] += 1.0; for( SizeT c=1; cSeqAccess()] +=1.0; // for( SizeT c=0; c void Data_::DecAt( ArrayIndexListT* ixList) { if( ixList == NULL) { // dd -= 1.0; SizeT nCp=Data_::N_Elements(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()] -= 1.0; for( SizeT c=1; cSeqAccess()] -=1.0; // for( SizeT c=0; c void Data_::IncAt( ArrayIndexListT* ixList) { if( ixList == NULL) { // dd += 1.0; SizeT nCp=Data_::N_Elements(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ allIx->InitSeqAccess()] += 1.0; for( SizeT c=1; cSeqAccess()] +=1.0; // for( SizeT c=0; c void Data_::DecAt( ArrayIndexListT* ixList) { throw GDLException("String expression not allowed in this context."); } template<> void Data_::DecAt( ArrayIndexListT* ixList) { throw GDLException("Pointer expression not allowed in this context."); } template<> void Data_::DecAt( ArrayIndexListT* ixList) { throw GDLException("Object expression not allowed in this context."); } template<> void Data_::IncAt( ArrayIndexListT* ixList) { throw GDLException("String expression not allowed in this context."); } template<> void Data_::IncAt( ArrayIndexListT* ixList) { throw GDLException("Pointer expression not allowed in this context."); } template<> void Data_::IncAt( ArrayIndexListT* ixList) { throw GDLException("Object expression not allowed in this context."); } // used by AccessDescT for resolving, no checking is done // inserts srcIn[ ixList] at offset // used by DotAccessDescT::DoResolve template void Data_::InsertAt( SizeT offset, BaseGDL* srcIn, ArrayIndexListT* ixList) { Data_* src=static_cast(srcIn); if( ixList == NULL) { SizeT nCp=src->N_Elements(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; cN_Elements(); AllIxBaseT* allIx = ixList->BuildIx(); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*this)[ offset]=(*src)[ allIx->InitSeqAccess()]; for( SizeT c=1; cSeqAccess()]; //} // (*this)[ c+offset]=(*src)[ ixList->GetIx( c)]; } } // used for array concatenation template Data_* Data_::CatArray( ExprListT& exprList, const SizeT catRankIx, const SizeT rank) { // breakpoint(); SizeT rankIx = RankIx( rank); SizeT maxIx = (catRankIx > rankIx)? catRankIx : rankIx; dimension catArrDim(this->dim); // list contains at least one element catArrDim.MakeRank( maxIx+1); catArrDim.SetOneDim(catRankIx,0); // clear rank which is added up SizeT dimSum=0; ExprListIterT i=exprList.begin(); for(; i != exprList.end(); i++) { // conversion done already here to throw if type is Assoc_<> (*i)=(*i)->Convert2( this->t); for( SizeT dIx=0; dIx<=maxIx; dIx++) { if( dIx != catRankIx) { if( catArrDim[dIx] == (*i)->Dim(dIx)) continue; if( (catArrDim[dIx] > 1) || ((*i)->Dim(dIx) > 1)) throw GDLException("Unable to concatenate variables " "because the dimensions do not agree"); } else { SizeT add=(*i)->Dim(dIx); dimSum+=(add)?add:1; } } } catArrDim.SetOneDim(catRankIx,dimSum); // the concatenated array Data_* catArr=New(catArrDim, BaseGDL::NOZERO); SizeT at=0; for( i=exprList.begin(); i != exprList.end(); i++) { catArr->CatInsert(static_cast*>( (*i)), catRankIx,at); // advances 'at' } return catArr; } // returns (*this)[ ixList] template Data_* Data_::Index( ArrayIndexListT* ixList) { // ixList->SetVariable( this); Data_* res=Data_::New( ixList->GetDim(), BaseGDL::NOZERO); SizeT nCp=ixList->N_Elements(); // cout << "nCP = " << nCp << endl; // cout << "dim = " << this->dim << endl; // DataT& res_dd = res->dd; AllIxBaseT* allIx = ixList->BuildIx(); if( nCp == 1) { (*res)[0]=(*this)[ (*allIx)[ 0]]; return res; } // else // { /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ (*res)[0]=(*this)[ allIx->InitSeqAccess()]; for( SizeT c=1; cSeqAccess()]; //} // res_(*this)[c]=(*this)[ (*allIx)[ c]]; // (*res)[c]=(*this)[ ixList->GetIx(c)]; // } return res; } // inserts srcIn at index ixDim // respects the exact structure of srcIn template void Data_::InsAt( Data_* srcIn, ArrayIndexListT* ixList, SizeT offset) { // max. number of dimensions to copy SizeT nDim = ixList->NDim(); if( nDim == 1) // { // SizeT destStart = ixList->LongIx(); // SizeT len = srcIn->Dim( 0); // length of segment to copy // // check if in bounds of a // if( (destStart+len) > this->N_Elements()) //dim[0]) // throw GDLException("Out of range subscript encountered (1)."); // DataT& srcIn_dd = srcIn->dd; // SizeT srcIx = 0; // this one simply runs from 0 to N_Elements(srcIn) // SizeT destEnd = destStart + len; // for( SizeT destIx = destStart; destIx < destEnd; ++destIx) // (*this)[ destIx] = (*srcIn)[ srcIx++]; // return; // } { SizeT destStart = ixList->LongIx(); //SizeT len; if( this->N_Elements() == 1) { // len = 1; SizeT rStride = srcIn->Stride(this->Rank()); (*this)[ destStart] = (*srcIn)[ offset/rStride]; } else { SizeT len = srcIn->Dim( 0); // length of segment to copy // TODO: IDL reports here (and probably in the insert-dimension case below as well) // the name of a variable, e.g.: // IDL> a=[0,0,0] & a[2]=[2,2,2] // % Out of range subscript encountered: A. if( (destStart+len) > this->N_Elements()) //dim[0]) throw GDLException("Out of range subscript encountered (length of insert exceeds array boundaries)."); // DataT& srcIn_dd = srcIn->dd; SizeT srcIx = 0; // this one simply runs from 0 to N_Elements(srcIn) SizeT destEnd = destStart + len; for( SizeT destIx = destStart; destIx < destEnd; ++destIx) (*this)[ destIx] = (*srcIn)[ srcIx++]; } return; } SizeT destStart; // 1-dim starting index // ATTENTION: dimension is used as an index here dimension ixDim = ixList->GetDimIx0( destStart); nDim--; dimension srcDim=srcIn->Dim(); srcDim.Purge(); // newly inserted: ticket #675 SizeT len=srcDim[0]; // length of one segment to copy (one line of srcIn) // SizeT nDim =RankIx(ixDim.Rank()); SizeT srcNDim=RankIx(srcDim.Rank()); // number of source dimensions if( srcNDim < nDim) nDim=srcNDim; // check limits (up to Rank to consider) for( SizeT dIx=0; dIx <= nDim; ++dIx) // check if in bounds of a if( (ixDim[dIx]+srcDim[dIx]) > this->dim[dIx]) throw GDLException("Out of range subscript encountered (dimension of insert exceeds array boundaries for dimension " + i2s(dIx +1) + ")."); SizeT nCp=srcIn->Stride(nDim+1)/len; // number of OVERALL copy actions // as lines are copied, we need the stride from 2nd dim on SizeT retStride[MAXRANK]; for( SizeT a=0; a <= nDim; ++a) retStride[a]=srcDim.Stride(a+1)/len; // a magic number, to reset destStart for this dimension SizeT resetStep[MAXRANK]; for( SizeT a=1; a <= nDim; ++a) resetStep[a]=(retStride[a]-1)/retStride[a-1]*this->dim.Stride(a); // SizeT destStart=this->dim.LongIndex(ixDim); // starting pos // DataT& srcIn_dd = srcIn->dd; SizeT srcIx=0; // this one simply runs from 0 to N_Elements(srcIn) for( SizeT c=1; c<=nCp; ++c) // linearized verison of nested loops { // copy one segment SizeT destEnd=destStart+len; for( SizeT destIx=destStart; destIxdim.Stride(a); break; } else { // reset destStart -= resetStep[a]; } } } } // used for concatenation, called from CatArray // assumes that everything is checked (see CatInfo) template void Data_::CatInsert( const Data_* srcArr, const SizeT atDim, SizeT& at) { // length of one segment to copy SizeT len=srcArr->dim.Stride(atDim+1); // src array SizeT nEl=srcArr->N_Elements(); // number of copy actions SizeT nCp=nEl/len; // initial offset SizeT destStart= this->dim.Stride(atDim) * at; // dest array SizeT destEnd = destStart + len; // number of elements to skip SizeT gap=this->dim.Stride(atDim+1); // dest array #ifdef _OPENMP #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for for( OMPInt c=0; cdim[atDim]; // update 'at' at += (add > 1)? add : 1; } // Logical True // integers template bool Data_::LogTrue() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != 0); } template<> bool Data_::LogTrue() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != 0.0f); } template<> bool Data_::LogTrue() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != 0.0); } template<> bool Data_::LogTrue() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != ""); } template<> bool Data_::LogTrue() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (real(s) != 0.0 || imag(s) != 0.0); } template<> bool Data_::LogTrue() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (real(s) != 0.0 || imag(s) != 0.0); } template<> bool Data_::LogTrue() { Ty s; if( !Scalar( s)) throw GDLException("Expression must be a scalar or 1 element array in this context.",true,false); return (s != 0); } template<> bool Data_::LogTrue() { // ::_overloadIsTrue is handled in True() return this->True(); } // structs are not allowed // indexed version // integers template bool Data_::LogTrue(SizeT i) { return ((*this)[i] != 0); } template<> bool Data_::LogTrue(SizeT i) { return ((*this)[i] != 0.0f); } template<> bool Data_::LogTrue(SizeT i) { return ((*this)[i] != 0.0); } template<> bool Data_::LogTrue(SizeT i) { return ((*this)[i] != ""); } template<> bool Data_::LogTrue(SizeT i) { return ((*this)[i].real() != 0.0 || (*this)[i].imag() != 0.0); } template<> bool Data_::LogTrue(SizeT i) { return ((*this)[i].real() != 0.0 || (*this)[i].imag() != 0.0); } template<> bool Data_::LogTrue(SizeT i) { return (*this)[i] != 0; } template<> bool Data_::LogTrue(SizeT i) { return (*this)[i] != 0; } // structs are not allowed // AC: see bug report #592 : it was found on 2014 March, 18, // that WHERE was buggy due to OpenMP option // when n_elements of input bigger than !cpu.TPOOL_MIN_ELTS // // for WHERE, integers, also ptr and object template DLong* Data_::Where( bool comp, SizeT& n) { SizeT nEl = N_Elements(); DLong* ixList = new DLong[ nEl]; SizeT count = 0; if( comp) { SizeT nIx = nEl; // TRACEOMP( __FILE__, __LINE__) //#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i DLong* Data_::Where( bool comp, SizeT& n) { SizeT nEl = N_Elements(); DLong* ixList = new DLong[ nEl]; SizeT count = 0; if( comp) { SizeT nIx = nEl; //#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i DLong* Data_::Where( bool comp, SizeT& n) { SizeT nEl = N_Elements(); DLong* ixList = new DLong[ nEl]; SizeT count = 0; if( comp) { SizeT nIx = nEl; //#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i DLong* Data_::Where( bool comp, SizeT& n) { SizeT nEl = N_Elements(); DLong* ixList = new DLong[ nEl]; SizeT count = 0; if( comp) { SizeT nIx = nEl; //#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i DLong* Data_::Where( bool comp, SizeT& n) { SizeT nEl = N_Elements(); DLong* ixList = new DLong[ nEl]; SizeT count = 0; if( comp) { SizeT nIx = nEl; //#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i DLong* Data_::Where( bool comp, SizeT& n) { SizeT nEl = N_Elements(); DLong* ixList = new DLong[ nEl]; SizeT count = 0; if( comp) { SizeT nIx = nEl; //#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { //#pragma omp for for( SizeT i=0; i void Data_::MinMax( DLong* minE, DLong* maxE, BaseGDL** minVal, BaseGDL** maxVal, bool omitNaN, SizeT start, SizeT stop, SizeT step, DLong valIx) { // default: start = 0, stop = 0, step = 1, valIx = -1 if (stop == 0) stop = dd.size(); if (minE == NULL && minVal == NULL) { DLong maxEl = start; Ty maxV = (*this)[maxEl]; for( DLong i = start + step; i < stop; i += step) if ((*this)[i] > maxV) maxV = (*this)[maxEl = i]; if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( maxV); else (*static_cast(*maxVal))[valIx] = maxV; } return; } if (maxE == NULL && maxVal == NULL) { DLong minEl = start; Ty minV = (*this)[minEl]; for( DLong i = start + step; i < stop; i += step) if ((*this)[i] < minV) minV = (*this)[minEl = i]; if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( minV); else (*static_cast(*minVal))[valIx] = minV; } return; } DLong maxEl, minEl; Ty maxV, minV; maxV = minV = (*this)[maxEl = minEl = start]; for( DLong i = start + step; i < stop; i += step) { if ((*this)[i] > maxV) maxV = (*this)[maxEl = i]; else if( (*this)[i] < minV) minV = (*this)[minEl = i]; } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( maxV); else (*static_cast(*maxVal))[valIx] = maxV; } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( minV); else (*static_cast(*minVal))[valIx] = minV; } } // the code for ::MinMax is a "template" for Double, Complex and DoubleComplex ... // Please note that IDL does not take care of order for {-Inf, Nan, Inf} // when NaN is present with Inf and -Inf ONLY. We follow this rule ... // (we took the last one) template<> void Data_::MinMax( DLong* minE, DLong* maxE, BaseGDL** minVal, BaseGDL** maxVal, bool omitNaN, SizeT start, SizeT stop, SizeT step, DLong valIx) { // default: start = 0, stop = 0, step = 1, valIx = -1 if (stop == 0) stop = dd.size(); if (minE == NULL && minVal == NULL) { DLong maxEl = start; Ty maxV = (*this)[maxEl]; DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i]) && isfinite((*this)[i])) flag = 0; if (i + step >= stop) flag = 0; i += step; } maxV = (*this)[maxEl = i - step]; i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN) { if (std__isnan((*this)[i]) || !isfinite((*this)[i])) continue; } if ((*this)[i] > maxV) maxV = (*this)[maxEl = i]; } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( maxV); else (*static_cast(*maxVal))[valIx] = maxV; } return; } if (maxE == NULL && maxVal == NULL) { DLong minEl = start; Ty minV = (*this)[minEl]; DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i]) && isfinite((*this)[i])) flag = 0; if (i + step >= stop) flag = 0; i += step; } minV = (*this)[minEl = i - step]; i_min = i; } for (i = i_min; i < stop; i+= step) { if (omitNaN) { if (std__isnan((*this)[i]) || !isfinite((*this)[i])) continue; } if ((*this)[i] < minV) minV = (*this)[minEl = i]; } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( minV); else (*static_cast(*minVal))[valIx] = minV; } return; } DLong maxEl, minEl; Ty maxV, minV; maxV = minV = (*this)[maxEl = minEl = start]; DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i]) && isfinite((*this)[i])) flag = 0; if (i + step >= stop) flag = 0; i += step; } maxV = minV = (*this)[maxEl = minEl = i - step]; i_min = i; } for (i = i_min; i < stop; i+= step) { if (omitNaN){ if (std__isnan((*this)[i]) || !isfinite((*this)[i])) continue; } if ((*this)[i] > maxV) maxV = (*this)[maxEl = i]; else if( (*this)[i] < minV) minV = (*this)[minEl = i]; } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( maxV); else (*static_cast(*maxVal))[valIx] = maxV; } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( minV); else (*static_cast(*minVal))[valIx] = minV; } } template<> void Data_::MinMax( DLong* minE, DLong* maxE, BaseGDL** minVal, BaseGDL** maxVal, bool omitNaN, SizeT start, SizeT stop, SizeT step, DLong valIx) { // default: start = 0, stop = 0, step = 1, valIx = -1 if (stop == 0) stop = dd.size(); if (minE == NULL && minVal == NULL) { DLong maxEl = start; Ty maxV = (*this)[maxEl]; DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i]) && isfinite((*this)[i])) flag = 0; if (i + step >= stop) flag = 0; i += step; } maxV = (*this)[maxEl = i - step]; i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN) { if (std__isnan((*this)[i]) || !isfinite((*this)[i])) continue; } if ((*this)[i] > maxV) maxV = (*this)[maxEl = i]; } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( maxV); else (*static_cast(*maxVal))[valIx] = maxV; } return; } if (maxE == NULL && maxVal == NULL) { DLong minEl = start; Ty minV = (*this)[minEl]; DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i]) && isfinite((*this)[i])) flag = 0; if (i + step >= stop) flag = 0; i += step; } minV = (*this)[minEl = i - step]; i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN) { if (std__isnan((*this)[i]) || !isfinite((*this)[i])) continue; } if ((*this)[i] < minV) minV = (*this)[minEl = i]; } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( minV); else (*static_cast(*minVal))[valIx] = minV; } return; } DLong maxEl, minEl; Ty maxV, minV; maxV = minV = (*this)[maxEl = minEl = start]; DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i]) && isfinite((*this)[i])) flag = 0; if (i + step >= stop) flag = 0; i += step; } minV = maxV = (*this)[minEl = maxEl = i - step]; i_min = i; } for (i = i_min; i < stop; i+= step) { if (omitNaN){ if (std__isnan((*this)[i]) || !isfinite((*this)[i])) continue; } if ((*this)[i] > maxV) maxV = (*this)[maxEl = i]; else if( (*this)[i] < minV) minV = (*this)[minEl = i]; } if (maxE != NULL) *maxE = maxEl; if( maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( maxV); else (*static_cast(*maxVal))[valIx] = maxV; } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( minV); else (*static_cast(*minVal))[valIx] = minV; } } template<> void Data_::MinMax( DLong* minE, DLong* maxE, BaseGDL** minVal, BaseGDL** maxVal, bool omitNaN, SizeT start, SizeT stop, SizeT step, DLong valIx) { // default: start = 0, stop = 0, step = 1, valIx = -1 if (stop == 0) stop = dd.size(); if (minE == NULL && minVal == NULL) { DLong maxEl = start; Ty maxV = (*this)[maxEl]; for (DLong i = start + step; i < stop; i += step) if ((*this)[i] > maxV) maxV = (*this)[maxEl = i]; if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( maxV); else (*static_cast(*maxVal))[valIx] = maxV; } return; } if( maxE == NULL && maxVal == NULL) { DLong minEl = start; Ty minV = (*this)[minEl]; for (DLong i = start + step; i < stop; i += step) if ((*this)[i] < minV) minV = (*this)[minEl = i]; if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( minV); else (*static_cast(*minVal))[valIx] = minV; } return; } DLong maxEl, minEl; Ty maxV, minV; maxV = minV = (*this)[maxEl = minEl = start]; for (DLong i = start + step; i < stop; i += step) { if ((*this)[i] > maxV) maxV = (*this)[maxEl = i]; else if((*this)[i] < minV) minV = (*this)[minEl = i]; } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( maxV); else (*static_cast(*maxVal))[valIx] = maxV; } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( minV); else (*static_cast(*minVal))[valIx] = minV; } } template<> void Data_::MinMax( DLong* minE, DLong* maxE, BaseGDL** minVal, BaseGDL** maxVal, bool omitNaN, SizeT start, SizeT stop, SizeT step, DLong valIx) { // default: start = 0, stop = 0, step = 1, valIx = -1 if (stop == 0) stop = dd.size(); if (minE == NULL && minVal == NULL) { DLong maxEl = start; float maxV = (*this)[maxEl].real(); DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!isnan((*this)[i].real()) && isfinite((*this)[i].real())) flag = 0; if (i + step >= stop) flag = 0; i += step; } maxV = (*this)[maxEl = i - step].real(); i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN) { if (isnan((*this)[i].real()) || !isfinite((*this)[i].real())) continue; } if ((*this)[i].real() > maxV) maxV = (*this)[maxEl = i].real(); } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( (*this)[ maxEl]); else (*static_cast(*maxVal))[valIx] = maxV; } return; } if (maxE == NULL && maxVal == NULL) { DLong minEl = start; float minV = (*this)[minEl].real(); DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!isnan((*this)[i].real()) && isfinite((*this)[i].real())) flag = 0; if (i + step >= stop) flag = 0; i += step; } minV = (*this)[minEl = i - step].real(); i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN) { if (isnan((*this)[i].real()) || !isfinite((*this)[i].real())) continue; } if ((*this)[i].real() < minV) minV = (*this)[minEl = i].real(); } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( (*this)[ minEl]); else (*static_cast(*minVal))[valIx] = minV; } return; } DLong maxEl, minEl; float maxV, minV; maxV = minV = (*this)[maxEl = minEl = start].real(); DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!isnan((*this)[i].real()) && isfinite((*this)[i].real())) flag = 0; if (i + step >= stop) flag = 0; i += step; } minV = maxV = (*this)[minEl = maxEl = i - step].real(); i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN){ if (isnan((*this)[i].real()) || !isfinite((*this)[i].real())) continue; } if ((*this)[i].real() > maxV) maxV = (*this)[maxEl = i].real(); else if( (*this)[i].real() < minV) minV = (*this)[minEl = i].real(); } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( (*this)[ maxEl]); else (*static_cast(*maxVal))[valIx] = maxV; } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( (*this)[ minEl]); else (*static_cast(*minVal))[valIx] = minV; } } template<> void Data_::MinMax( DLong* minE, DLong* maxE, BaseGDL** minVal, BaseGDL** maxVal, bool omitNaN, SizeT start, SizeT stop, SizeT step, DLong valIx) { // default: start = 0, stop = 0, step = 1, valIx = -1 if (stop == 0) stop = dd.size(); if (minE == NULL && minVal == NULL) { DLong maxEl = start; double maxV = (*this)[maxEl].real(); DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i].real()) && isfinite((*this)[i].real())) flag = 0; if (i + step >= stop) flag = 0; i += step; } maxV = (*this)[maxEl = i - step].real(); i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN) { if (std__isnan((*this)[i].real()) || !isfinite((*this)[i].real())) continue; } if ((*this)[i].real() > maxV) maxV = (*this)[maxEl = i].real(); } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( (*this)[ maxEl]); else (*static_cast(*maxVal))[valIx] = maxV; } return; } if( maxE == NULL && maxVal == NULL) { DLong minEl = start; double minV = (*this)[minEl].real(); DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i].real()) && isfinite((*this)[i].real())) flag = 0; if (i + step >= stop) flag = 0; i += step; } minV = (*this)[minEl = i - step].real(); i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN) { if (std__isnan((*this)[i].real()) || !isfinite((*this)[i].real())) continue; } if ((*this)[i].real() < minV) minV = (*this)[minEl = i].real(); } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( (*this)[ minEl]); else (*static_cast(*minVal))[valIx] = minV; } return; } DLong maxEl, minEl; double maxV, minV; minV = maxV = (*this)[minEl = maxEl = start].real(); DLong i, i_min = start + step; if (omitNaN) { i = start; int flag = 1; while (flag == 1) { if (!std__isnan((*this)[i].real()) && isfinite((*this)[i].real())) flag = 0; if (i + step >= stop) flag = 0; i += step; } minV = maxV = (*this)[minEl = maxEl = i - step].real(); i_min = i; } for (i = i_min; i < stop; i += step) { if (omitNaN){ if (std__isnan((*this)[i].real()) || !isfinite((*this)[i].real())) continue; } if ((*this)[i].real() > maxV) maxV = (*this)[maxEl = i].real(); else if( (*this)[i].real() < minV) minV = (*this)[minEl = i].real(); } if (maxE != NULL) *maxE = maxEl; if (maxVal != NULL) { if (valIx == -1) *maxVal = new Data_( (*this)[ maxEl]); else (*static_cast(*maxVal))[valIx] = maxV; } if (minE != NULL) *minE = minEl; if (minVal != NULL) { if (valIx == -1) *minVal = new Data_( (*this)[ minEl]); else (*static_cast(*minVal))[valIx] = minV; } } template<> BaseGDL* Data_::Convol( BaseGDL* kIn, BaseGDL* scaleIn, BaseGDL* bias, bool center, bool normalize, int edgeMode, bool doNan, BaseGDL* missing, bool doMissing, BaseGDL* invalid, bool doInvalid) { throw GDLException("String expression not allowed in this context."); } template<> BaseGDL* Data_::Convol( BaseGDL* kIn, BaseGDL* scaleIn, BaseGDL* bias, bool center, bool normalize, int edgeMode, bool doNan, BaseGDL* missing, bool doMissing, BaseGDL* invalid, bool doInvalid) { throw GDLException("Object expression not allowed in this context."); } template<> BaseGDL* Data_::Convol( BaseGDL* kIn, BaseGDL* scaleIn,BaseGDL* bias, bool center, bool normalize, int edgeMode, bool doNan, BaseGDL* missing, bool doMissing, BaseGDL* invalid, bool doInvalid) { throw GDLException("Pointer expression not allowed in this context."); } #define INCLUDE_CONVOL_CPP 1 #define CONVOL_BYTE__ #include "convol.cpp" #undef CONVOL_BYTE__ #define CONVOL_UINT__ #include "convol.cpp" #undef CONVOL_UINT__ #define CONVOL_INT__ #include "convol.cpp" #undef CONVOL_INT__ #define CONVOL_ULONG__ #include "convol.cpp" #undef CONVOL_ULONG__ #define CONVOL_ULONG64__ #include "convol.cpp" #undef CONVOL_ULONG64__ #include "convol.cpp" template<> BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { throw GDLException("String expression not allowed in this context."); } template<> BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { throw GDLException("Complex expression not allowed in this context."); } template<> BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { throw GDLException("Double complex expression not allowed in this context."); } // rebin over dimIx, new value: newDim // newDim != srcDim[ dimIx] -> compress or expand template< typename T> T* Rebin1( T* src, const dimension& srcDim, SizeT dimIx, SizeT newDim, bool sample) { SizeT nEl = src->N_Elements(); if( newDim == 0) newDim = 1; // get dest dim and number of summations dimension destDim = srcDim; destDim.MakeRank( dimIx + 1); SizeT srcDimIx = destDim[ dimIx]; destDim.SetOneDim( dimIx, newDim); SizeT resStride = destDim.Stride( dimIx); // dimStride is also the number of linear src indexing SizeT dimStride = srcDim.Stride( dimIx); SizeT outerStride = srcDim.Stride( dimIx + 1); SizeT rebinLimit = srcDimIx * dimStride; if( newDim < srcDimIx) // compress { SizeT ratio = srcDimIx / newDim; if( sample) { T* res = new T( destDim, BaseGDL::NOZERO); for( SizeT o=0; o < nEl; o += outerStride) // outer dim for( SizeT i=0; i < dimStride; ++i) // src element offset (lower dim) { SizeT oi = o+i; SizeT oiLimit = oi + rebinLimit; for( SizeT s=oi; sN_Elements(); /*#pragma omp parallel if (resEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= resEl)) { #pragma omp for*/ for( int r=0; r < resEl; ++r) (*res)[ r] /= ratio; // } return res; } } else // expand { T* res = new T( destDim, BaseGDL::NOZERO); if( sample) { SizeT ratio = newDim / srcDimIx; for( SizeT o=0; o < nEl; o += outerStride) // outer dim for( SizeT i=0; i < dimStride; ++i) // src element offset (lower dim) { SizeT oi = o+i; SizeT oiLimit = oi + rebinLimit; for( SizeT s=oi; s T* Rebin1Int( T* src, const dimension& srcDim, SizeT dimIx, SizeT newDim, bool sample) { SizeT nEl = src->N_Elements(); if( newDim == 0) newDim = 1; // get dest dim and number of summations dimension destDim = srcDim; destDim.MakeRank( dimIx + 1); SizeT srcDimIx = destDim[ dimIx]; destDim.SetOneDim( dimIx, newDim); SizeT resStride = destDim.Stride( dimIx); // dimStride is also the number of linear src indexing SizeT dimStride = srcDim.Stride( dimIx); SizeT outerStride = srcDim.Stride( dimIx + 1); SizeT rebinLimit = srcDimIx * dimStride; if( newDim < srcDimIx) // compress { SizeT ratio = srcDimIx / newDim; if( sample) { T* res = new T( destDim, BaseGDL::NOZERO); SizeT ratio = srcDimIx / newDim; for( SizeT o=0; o < nEl; o += outerStride) // outer dim for( SizeT i=0; i < dimStride; ++i) // src element offset (lower dim) { SizeT oi = o+i; SizeT oiLimit = oi + rebinLimit; for( SizeT s=oi; s BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { SizeT resRank = newDim.Rank(); SizeT srcRank = this->Rank(); SizeT nDim; if( resRank < srcRank) nDim = srcRank; else nDim = resRank; dimension actDim( this->dim); Data_* actIn = this; // 1st compress for( SizeT d=0; ddim[d]) { // compress Data_* act = Rebin1( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } // 2nd expand for( SizeT d=0; d this->dim[d]) { // expand Data_* act = Rebin1( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } if( actIn == this) return actIn->Dup(); return actIn; } // integer types template<> BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { SizeT resRank = newDim.Rank(); SizeT srcRank = Rank(); SizeT nDim; if( resRank < srcRank) nDim = srcRank; else nDim = resRank; dimension actDim( dim); Data_* actIn = this; // 1st compress for( SizeT d=0; d( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } // 2nd expand for( SizeT d=0; d dim[d]) { // expand Data_* act = Rebin1Int( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } if( actIn == this) return actIn->Dup(); return actIn; } template<> BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { SizeT resRank = newDim.Rank(); SizeT srcRank = Rank(); SizeT nDim; if( resRank < srcRank) nDim = srcRank; else nDim = resRank; dimension actDim( dim); Data_* actIn = this; // 1st compress for( SizeT d=0; d( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } // 2nd expand for( SizeT d=0; d dim[d]) { // expand Data_* act = Rebin1Int( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } if( actIn == this) return actIn->Dup(); return actIn; } template<> BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { SizeT resRank = newDim.Rank(); SizeT srcRank = Rank(); SizeT nDim; if( resRank < srcRank) nDim = srcRank; else nDim = resRank; dimension actDim( dim); Data_* actIn = this; // 1st compress for( SizeT d=0; d( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } // 2nd expand for( SizeT d=0; d dim[d]) { // expand Data_* act = Rebin1Int( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } if( actIn == this) return actIn->Dup(); return actIn; } template<> BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { SizeT resRank = newDim.Rank(); SizeT srcRank = Rank(); SizeT nDim; if( resRank < srcRank) nDim = srcRank; else nDim = resRank; dimension actDim( dim); Data_* actIn = this; // 1st compress for( SizeT d=0; d( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } // 2nd expand for( SizeT d=0; d dim[d]) { // expand Data_* act = Rebin1Int( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } if( actIn == this) return actIn->Dup(); return actIn; } template<> BaseGDL* Data_::Rebin( const dimension& newDim, bool sample) { SizeT resRank = newDim.Rank(); SizeT srcRank = Rank(); SizeT nDim; if( resRank < srcRank) nDim = srcRank; else nDim = resRank; dimension actDim( dim); Data_* actIn = this; // 1st compress for( SizeT d=0; d( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } // 2nd expand for( SizeT d=0; d dim[d]) { // expand Data_* act = Rebin1Int( actIn, actDim, d, newDim[d], sample); actDim = act->Dim(); if( actIn != this) GDLDelete(actIn); actIn = act; } if( actIn == this) return actIn->Dup(); return actIn; } // plain copy of nEl from src // no checking template void Data_::Assign( BaseGDL* src, SizeT nEl) { Data_* srcT; // = dynamic_cast( src); Guard< Data_> srcTGuard; if( src->Type() != Data_::t) { srcT = static_cast( src->Convert2( Data_::t, BaseGDL::COPY)); srcTGuard.Init( srcT); } else { srcT = static_cast( src); } /*#pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for*/ for(long k=0; k < nEl; ++k) { (*this)[ k] = (*srcT)[ k]; }// } } // return a new type of itself (only for one dimensional case) template BaseGDL* Data_::NewIx( SizeT ix) { return new Data_( (*this)[ ix]); } template Data_* Data_::NewIx( AllIxBaseT* ix, const dimension* dIn) { SizeT nCp = ix->size(); Data_* res=Data_::New( *dIn, BaseGDL::NOZERO); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; c Data_* Data_::NewIxFrom( SizeT s) { SizeT nCp = dd.size() - s; Data_* res=Data_::New( dimension( nCp), BaseGDL::NOZERO); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; c Data_* Data_::NewIxFrom( SizeT s, SizeT e) { SizeT nCp = e - s + 1; Data_* res=Data_::New( dimension( nCp), BaseGDL::NOZERO); /*#pragma omp parallel if (nCp >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nCp)) { #pragma omp for*/ for( int c=0; c Data_* Data_::NewIxFromStride( SizeT s, SizeT stride) { SizeT nCp = (dd.size() - s + stride - 1)/stride; Data_* res=Data_::New( dimension( nCp), BaseGDL::NOZERO); for( SizeT c=0; c Data_* Data_::NewIxFromStride( SizeT s, SizeT e, SizeT stride) { SizeT nCp = (e - s + stride)/stride; Data_* res=Data_::New( dimension( nCp), BaseGDL::NOZERO); for( SizeT c=0; c Data_* Data_::NewIx( BaseGDL* ix, bool strict) { assert( ix->Type() != GDL_UNDEF); // no type checking needed here: GetAsIndex() will fail with grace // int typeCheck = DTypeOrder[ dType]; // if( typeCheck >= 100) // throw GDLException("Type "+ix->TypeStr()+" not allowed as subscript."); SizeT nElem = ix->N_Elements(); Data_* res = New( ix->Dim(), BaseGDL::NOZERO); Guard guard( res); SizeT upper = dd.size() - 1; Ty upperVal = (*this)[ upper]; if( strict) { for(SizeT i = 0 ; i < nElem; ++i) { SizeT actIx = ix->GetAsIndexStrict( i); if( actIx > upper) throw GDLException("Array used to subscript array " "contains out of range (>) subscript (at index: "+i2s(i)+")."); (*res)[i]= (*this)[ actIx]; } } else // not strict { for(SizeT i = 0 ; i < nElem; ++i) { SizeT actIx = ix->GetAsIndex( i); if( actIx >= upper) (*res)[i] = upperVal; else (*res)[i]= (*this)[ actIx]; } } return guard.release(); } // unsigned types template SizeT Data_::GetAsIndex( SizeT i) const { return (*this)[ i]; } template SizeT Data_::GetAsIndexStrict( SizeT i) const { return (*this)[ i]; // good for unsigned types } template<> SizeT Data_::GetAsIndex( SizeT i) const { if( (*this)[i] < 0) return 0; return (*this)[i]; } template<> SizeT Data_::GetAsIndexStrict( SizeT i) const { if( (*this)[i] < 0) throw GDLException(-1,NULL,"Array used to subscript array " "contains out of range (<0) subscript (at index: " + i2s(i) + ").",true,false); return (*this)[i]; } template<> SizeT Data_::GetAsIndex( SizeT i) const { if( (*this)[i] < 0) return 0; return (*this)[i]; } template<> SizeT Data_::GetAsIndexStrict( SizeT i) const { if( (*this)[i] < 0) throw GDLException(-1,NULL,"Array used to subscript array " "contains out of range (<0) subscript (at index: " + i2s(i) + ").",true,false); return (*this)[i]; } template<> SizeT Data_::GetAsIndex( SizeT i) const { if( (*this)[i] < 0) return 0; return (*this)[i]; } template<> SizeT Data_::GetAsIndexStrict( SizeT i) const { if( (*this)[i] < 0) throw GDLException(-1,NULL,"Array used to subscript array " "contains out of range (<0) subscript (at index: " + i2s(i) + ").",true,false); return (*this)[i]; } template<> SizeT Data_::GetAsIndex( SizeT i) const { if( (*this)[i] <= 0.0) return 0; return Real2Int((*this)[i]); } template<> SizeT Data_::GetAsIndexStrict( SizeT i) const { if( (*this)[i] <= -1.0) throw GDLException(-1,NULL,"Array used to subscript array " "contains out of range (<0) subscript (at index: " + i2s(i) + ").",true,false); if( (*this)[i] <= 0.0) return 0; return Real2Int((*this)[i]); } template<> SizeT Data_::GetAsIndex( SizeT i) const { if( (*this)[i] <= 0.0) return 0; return Real2Int((*this)[i]); } template<> SizeT Data_::GetAsIndexStrict( SizeT i) const { if( (*this)[i] <= -1.0) throw GDLException(-1,NULL,"Array used to subscript array " "contains out of range (<0) subscript (at index: " + i2s(i) + ").",true,false); if( (*this)[i] <= 0.0) return 0; return Real2Int((*this)[i]); } template<> SizeT Data_::GetAsIndex( SizeT i) const { const char* cStart=(*this)[i].c_str(); char* cEnd; long l=strtol(cStart,&cEnd,10); if( cEnd == cStart) { Warning("Type conversion error: Unable to convert given STRING to LONG (at index: " + i2s(i) + ")"); return 0; } if( l < 0) return 0; return l; } template<> SizeT Data_::GetAsIndexStrict( SizeT i) const { const char* cStart=(*this)[i].c_str(); char* cEnd; long l=strtol(cStart,&cEnd,10); if( cEnd == cStart) { Warning("Type conversion error: Unable to convert given STRING to LONG (at index: " + i2s(i) + ")"); return 0; } if( l < 0) throw GDLException(-1,NULL,"Array used to subscript array " "contains out of range (<0) subscript.",true,false); return l; } template<> SizeT Data_::GetAsIndex( SizeT i) const { if( real((*this)[i]) <= 0.0) return 0; return Real2Int(real((*this)[i])); } template<> SizeT Data_::GetAsIndexStrict( SizeT i) const { if( real((*this)[i]) <= -1.0) throw GDLException(-1,NULL,"Array used to subscript array " "contains out of range (<0) subscript (at index: " + i2s(i) + ").",true,false); if( real((*this)[i]) <= 0.0) return 0; return Real2Int(real((*this)[i])); } template<> SizeT Data_::GetAsIndex( SizeT i) const { if( real((*this)[i]) <= 0.0) return 0; return Real2Int(real((*this)[i])); } template<> SizeT Data_::GetAsIndexStrict( SizeT i) const { if( real((*this)[i]) <= -1.0) throw GDLException(-1,NULL,"Array used to subscript array " "contains out of range (<0) subscript (at index: " + i2s(i) + ").",true,false); if( real((*this)[i]) <= 0.0) return 0; return Real2Int(real((*this)[i])); } //#include "instantiate_templates.hpp" template class Data_< SpDByte>; template class Data_< SpDInt>; template class Data_< SpDUInt>; template class Data_< SpDLong>; template class Data_< SpDULong>; template class Data_< SpDLong64>; template class Data_< SpDULong64>; template class Data_< SpDPtr>; template class Data_< SpDFloat>; template class Data_< SpDDouble>; template class Data_< SpDString>; template class Data_< SpDObj>; template class Data_< SpDComplex>; template class Data_< SpDComplexDbl>; gdl-0.9.7/src/plplot_wxwidgets.h0000664000175100017510000004716613040614410016547 0ustar coulaiscoulais// $Id: plplot_wxwidgets.h,v 1.1 2014/09/21 15:15:08 pjb7687 Exp $ // // Copyright (C) 2008 Werner Smekal // // This file is part of PLplot. // // PLplot is free software; you can redistribute it and/or modify // it under the terms of the GNU Library General Public License as published // by the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // PLplot 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 Library General Public License for more details. // // You should have received a copy of the GNU Library General Public License // along with PLplot; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // #ifndef __WXWIDGETS_H__ #define __WXWIDGETS_H__ // some special wxWidgets headers #include // freetype headers and macros #ifdef PL_HAVE_FREETYPE #include "plfreetype.h" #endif #ifndef max_number_of_grey_levels_used_in_text_smoothing #define max_number_of_grey_levels_used_in_text_smoothing 64 #endif #define NDEV 100 // Max number of output device types in menu //-------------------------------------------------------------------------- // Physical dimension constants used by the driver // Virtual coordinate scaling parameter, used to do calculations at // higher resolution. Chosen so that maximum plP_setphy coordinate // is 32000 which is close to but still less than the maximum possible // which is 32767. // // The trick here is to do everything in device coordinates on the driver // side, but report/receive everything in virtual coordinates to/from the // PLplot core. // #define VSCALE ( 40. ) // pixels per inch #define DEVICE_PIXELS_PER_IN ( 80. ) #define VIRTUAL_PIXELS_PER_IN ( DEVICE_PIXELS_PER_IN * VSCALE ) // mm per inch #define MM_PER_IN ( 25.4 ) // pixels per mm #define DEVICE_PIXELS_PER_MM ( DEVICE_PIXELS_PER_IN / MM_PER_IN ) #define VIRTUAL_PIXELS_PER_MM ( VIRTUAL_PIXELS_PER_IN / MM_PER_IN ) // Default dimensions of the canvas (in inches) #define CANVAS_WIDTH ( 10.0 ) #define CANVAS_HEIGHT ( 7.5 ) // size of plot in pixels on screen if not given #define PLOT_WIDTH ( 800 ) #define PLOT_HEIGHT ( 600 ) // These need to be distinguished since the handling is slightly different. #define LOCATE_INVOKED_VIA_API 1 #define LOCATE_INVOKED_VIA_DRIVER 2 // Available backends #define wxBACKEND_DC 0 #define wxBACKEND_AGG 1 #define wxBACKEND_GC 2 class wxPLplotFrame; // base device class class wxPLDevBase { public: // methods wxPLDevBase( int bcknd ); virtual ~wxPLDevBase( void ); // virtual functions which need to implemented virtual void DrawLine( short x1a, short y1a, short x2a, short y2a ) = 0; virtual void DrawPolyline( short *xa, short *ya, PLINT npts ) = 0; virtual void ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1 = -1, PLINT y1 = -1, PLINT x2 = -1, PLINT y2 = -1 ) = 0; virtual void FillPolygon( PLStream *pls ) = 0; virtual void BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ) = 0; void AddtoClipRegion( int x1, int y1, int x2, int y2 ); virtual void CreateCanvas() = 0; virtual void SetWidth( PLStream *pls ) = 0; virtual void SetColor0( PLStream *pls ) = 0; virtual void SetColor1( PLStream *pls ) = 0; virtual void SetExternalBuffer( void* buffer ) = 0; #ifdef PL_HAVE_FREETYPE virtual void PutPixel( short x, short y, PLINT color ) = 0; virtual void PutPixel( short x, short y ) = 0; virtual PLINT GetPixel( short x, short y ) = 0; #endif // PL_HAVE_FREETYPE virtual void ProcessString( PLStream* pls, EscText* args ) = 0; virtual void PSDrawText( PLUNICODE* ucs4, int ucs4Len, bool drawText ); virtual void PSDrawTextToDC( char* utf8_string, bool drawText ) = 0; virtual void PSSetFont( PLUNICODE fci ) = 0; public: // variables const int backend; bool ready; bool ownGUI; bool showGUI; bool waiting; bool resizing; bool exit; int comcount; wxPLplotFrame* m_frame; PLINT xpos; PLINT ypos; PLINT width; PLINT height; PLINT bm_width; PLINT bm_height; PLINT xmin; PLINT xmax; PLINT ymin; PLINT ymax; PLFLT scalex; PLFLT scaley; bool plstate_width; // Flags indicating change of state before bool plstate_color0; // device is fully initialized bool plstate_color1; // taken from gcw driver PLGraphicsIn gin; // Graphics input structure int locate_mode; // Set while in locate mode bool draw_xhair; // Set during xhair draws // clipping region int clipminx, clipmaxx; int clipminy, clipmaxy; bool newclipregion; // variables for antializing int freetype; int smooth_text; const char ** devDesc; // Descriptive names for file-oriented devices. Malloc'ed. const char ** devName; // Keyword names of file-oriented devices. Malloc'ed. int ndev; wxBitmapType bitmapType; // font variables static const int max_string_length = 500; wxFont * m_font; bool underlined; double fontSize; double fontScale; wxCoord textWidth, textHeight, textDescent, textLeading; PLUNICODE fci; //the distance between the superscript top and subscript base from the baseline wxCoord superscriptHeight, subscriptDepth; double lineSpacing; double yOffset; PLINT posX, posY; PLFLT rotation, cos_rot, sin_rot; PLFLT shear, cos_shear, sin_shear; PLFLT stride; }; class wxPLDevDC : public wxPLDevBase { public: // methods wxPLDevDC( void ); ~wxPLDevDC( void ); void DrawLine( short x1a, short y1a, short x2a, short y2a ); void DrawPolyline( short *xa, short *ya, PLINT npts ); void ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1 = -1, PLINT y1 = -1, PLINT x2 = -1, PLINT y2 = -1 ); void FillPolygon( PLStream *pls ); void BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ); void CreateCanvas(); void SetWidth( PLStream *pls ); void SetColor0( PLStream *pls ); void SetColor1( PLStream *pls ); void SetExternalBuffer( void* buffer ); #ifdef PL_HAVE_FREETYPE void PutPixel( short x, short y, PLINT color ); void PutPixel( short x, short y ); PLINT GetPixel( short x, short y ); #endif // PL_HAVE_FREETYPE void ProcessString( PLStream* pls, EscText* args ); void PSDrawTextToDC( char* utf8_string, bool drawText ); void PSSetFont( PLUNICODE fci ); private: // variables wxBitmap* m_bitmap; wxDC * m_dc; }; #ifdef HAVE_AGG // antigrain headers #include "agg2/agg_basics.h" #include "agg2/agg_rendering_buffer.h" #include "agg2/agg_rasterizer_scanline_aa.h" #include "agg2/agg_scanline_u.h" #include "agg2/agg_scanline_bin.h" #include "agg2/agg_conv_stroke.h" #include "agg2/agg_pixfmt_rgb.h" #include "agg2/agg_renderer_base.h" #include "agg2/agg_renderer_scanline.h" #include "agg2/agg_renderer_primitives.h" #include "agg2/agg_path_storage.h" #include "agg2/agg_conv_curve.h" #include "agg2/agg_conv_contour.h" #include "agg2/agg_font_freetype.h" class wxPLDevAGG : public wxPLDevBase { // type definitions and enums typedef agg::pixfmt_rgb24 pixFormat; typedef agg::renderer_base rendererBase; typedef agg::renderer_scanline_aa_solid rendererSolid; typedef agg::font_engine_freetype_int32 fontEngineType; typedef agg::font_cache_manager fontManagerType; typedef agg::font_cache_manager::gray8_adaptor_type fontRasterizer; typedef agg::font_cache_manager::gray8_scanline_type fontScanline; typedef agg::conv_curve convCurve; typedef agg::conv_stroke convStroke; typedef agg::conv_transform pathTransform; typedef agg::conv_transform strokeTransform; enum drawPathFlag { Fill, Stroke, FillAndStroke }; public: // methods wxPLDevAGG( void ); ~wxPLDevAGG( void ); void DrawLine( short x1a, short y1a, short x2a, short y2a ); void DrawPolyline( short *xa, short *ya, PLINT npts ); void ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1 = -1, PLINT y1 = -1, PLINT x2 = -1, PLINT y2 = -1 ); void FillPolygon( PLStream *pls ); void BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ); void CreateCanvas(); void SetWidth( PLStream *pls ); void SetColor0( PLStream *pls ); void SetColor1( PLStream *pls ); void SetExternalBuffer( void* buffer ); #ifdef PL_HAVE_FREETYPE void PutPixel( short x, short y, PLINT color ); void PutPixel( short x, short y ); PLINT GetPixel( short x, short y ); #endif // PL_HAVE_FREETYPE void ProcessString( PLStream* pls, EscText* args ); void PSDrawTextToDC( char* utf8_string, bool drawText ); void PSSetFont( PLUNICODE fci ); void drawPath( drawPathFlag flag ); void AGGAddtoClipRegion( short x1, short y1, short x2, short y2 ); private: // variables wxDC * mDC; wxImage * mBuffer; agg::rendering_buffer mRenderingBuffer; fontEngineType mFontEngine; fontManagerType mFontManager; agg::conv_curve mCurves; agg::conv_contour > mContour; pixFormat mPixFormat; rendererBase mRendererBase; rendererSolid mRendererSolid; agg::scanline_u8 mScanLine; agg::rasterizer_scanline_aa<> mRasterizer; agg::path_storage mPath; agg::trans_affine mTransform; convCurve mConvCurve; convStroke mConvStroke; pathTransform mPathTransform; strokeTransform mStrokeTransform; double mStrokeWidth; wxUint8 mStrokeOpacity; unsigned char mColorRedStroke; unsigned char mColorGreenStroke; unsigned char mColorBlueStroke; unsigned char mColorRedFill; unsigned char mColorGreenFill; unsigned char mColorBlueFill; double textWidth, textHeight; wxString fontdir; }; #endif #if wxUSE_GRAPHICS_CONTEXT #include class wxPLDevGC : public wxPLDevBase { public: // methods wxPLDevGC( void ); ~wxPLDevGC( void ); void DrawLine( short x1a, short y1a, short x2a, short y2a ); void DrawPolyline( short *xa, short *ya, PLINT npts ); void ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1 = -1, PLINT y1 = -1, PLINT x2 = -1, PLINT y2 = -1 ); void FillPolygon( PLStream *pls ); void BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ); void CreateCanvas(); void SetWidth( PLStream *pls ); void SetColor0( PLStream *pls ); void SetColor1( PLStream *pls ); void SetExternalBuffer( void* buffer ); #ifdef PL_HAVE_FREETYPE void PutPixel( short x, short y, PLINT color ); void PutPixel( short x, short y ); PLINT GetPixel( short x, short y ); #endif // PL_HAVE_FREETYPE void ProcessString( PLStream* pls, EscText* args ); void PSDrawTextToDC( char* utf8_string, bool drawText ); void PSSetFont( PLUNICODE fci ); private: // variables wxBitmap * m_bitmap; wxDC * m_dc; wxGraphicsContext* m_context; // text colors unsigned char textRed, textGreen, textBlue; unsigned char mStrokeOpacity; unsigned char mColorRedStroke; unsigned char mColorGreenStroke; unsigned char mColorBlueStroke; unsigned char mColorRedFill; unsigned char mColorGreenFill; unsigned char mColorBlueFill; }; #endif struct dev_entry { wxString dev_name; wxString dev_menu_short; wxString dev_menu_long; wxString dev_file_app; bool pixelDevice; }; // after how many commands the window should be refreshed #define MAX_COMCOUNT 10000 // wxwidgets application definition (if needed) WX_DEFINE_ARRAY( wxPLplotFrame *, wxArrayOfwxPLplotFrame ); class wxPLplotApp : public wxApp { public: virtual bool OnInit(); // virtual int OnExit(); void SetExitFlag( bool flag = true ) { exit = flag; }; bool GetExitFlag( void ) { return exit; }; void SetAdvanceFlag( bool flag = true ) { advance = flag; }; bool GetAdvanceFlag( void ) { return advance; }; void SetRefreshFlag( bool flag = true ); void AddFrame( wxPLplotFrame* frame ) { FrameArray.Add( frame ); }; void RemoveFrame( wxPLplotFrame* frame ) { FrameArray.Remove( frame ); }; size_t FrameCount( void ) { return FrameArray.GetCount(); } void OnIdle( wxIdleEvent& event ); private: bool exit; bool advance; wxArrayOfwxPLplotFrame FrameArray; DECLARE_EVENT_TABLE() }; // definition of the actual window/frame shown class wxPLplotWindow : public wxWindow { public: wxPLplotWindow( wxWindow* parent, PLStream *pls ); void SetRefreshFlag( bool flag = true ) { refresh = flag; }; bool GetRefreshFlag( void ) { return refresh; }; void SetOrientation( int rot ); private: void OnPaint( wxPaintEvent& event ); void OnChar( wxKeyEvent& event ); void OnIdle( wxIdleEvent& event ); void OnErase( wxEraseEvent & WXUNUSED( event ) ); void OnSize( wxSizeEvent & WXUNUSED( event ) ); void OnMaximize( wxMaximizeEvent & WXUNUSED( event ) ); void OnMouse( wxMouseEvent& event ); void Locate( void ); void DrawCrosshair(); PLStream * m_pls; wxPLDevBase* m_dev; // windows needs to know this structure bool refresh; bool xhair_drawn; int mouse_x, mouse_y, old_mouse_x, old_mouse_y; DECLARE_EVENT_TABLE() }; // declaration of the actual window/frame shown class wxPLplotFrame : public wxFrame { public: wxPLplotFrame( const wxString& title, PLStream* pls ); void OnMenu( wxCommandEvent& event ); void OnClose( wxCloseEvent& event ); bool SavePlot( const char* filename, const char* devname, int width, int height ); void SetRefreshFlag( bool flag = true ) { m_window->SetRefreshFlag( flag ); }; bool GetRefreshFlag( void ) { return m_window->GetRefreshFlag(); }; private: wxPanel * m_panel; wxPLplotWindow* m_window; wxPLDevBase * m_dev; // frame needs to know this structure DECLARE_EVENT_TABLE() }; // menu ids enum { wxPL_Save = 10000, wxPL_Next = 10100, wxPL_Locate, wxPL_Orientation_0, wxPL_Orientation_90, wxPL_Orientation_180, wxPL_Orientation_270 }; // Pixel size dialog class wxGetSizeDialog : public wxDialog { public: // constructors and destructors wxGetSizeDialog( wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, int width = 800, int height = 600 ); int getWidth() { return spinControlWidth->GetValue(); } int getHeight() { return spinControlHeight->GetValue(); } private: wxSpinCtrl* spinControlWidth; wxSpinCtrl* spinControlHeight; private: DECLARE_EVENT_TABLE() }; // Use this macro if you want to define your own main() or WinMain() function // and call wxEntry() from there. #define IMPLEMENT_PLAPP_NO_MAIN( appname ) \ wxAppConsole * wxPLCreateApp() \ { \ wxAppConsole::CheckBuildOptions( WX_BUILD_OPTIONS_SIGNATURE, \ "your program" ); \ return new appname; \ } \ wxAppInitializer \ wxAppInitializer( (wxAppInitializerFunction) ( wxApp::GetInitializerFunction() == NULL ? wxPLCreateApp : wxApp::GetInitializerFunction() ) ); \ DECLARE_PLAPP( appname ) \ appname & wxPLGetApp() { return *wx_static_cast( appname *, wxApp::GetInstance() ); } #define DECLARE_PLAPP( appname ) extern appname &wxPLGetApp(); // workaround against warnings for unused variables static inline void Use( void * ) { } #define WX_SUPPRESS_UNUSED_WARN( x ) Use( &x ) //-------------------------------------------------------------------------- // Declarations for the device. //-------------------------------------------------------------------------- void plD_init_wxwidgets( PLStream * ); void plD_init_wxpng( PLStream * ); void plD_line_wxwidgets( PLStream *, short, short, short, short ); void plD_polyline_wxwidgets( PLStream *, short *, short *, PLINT ); void plD_eop_wxwidgets( PLStream * ); void plD_bop_wxwidgets( PLStream * ); void plD_tidy_wxwidgets( PLStream * ); void plD_state_wxwidgets( PLStream *, PLINT ); void plD_esc_wxwidgets( PLStream *, PLINT, void * ); void wx_set_dc( PLStream* pls, wxDC* dc ); void wx_set_buffer( PLStream* pls, wxImage* buffer ); void wx_set_size( PLStream* pls, int width, int height ); int plD_errorexithandler_wxwidgets( char *errormessage ); void plD_erroraborthandler_wxwidgets( char *errormessage ); //-------------------------------------------------------------------------- // Debug functions //-------------------------------------------------------------------------- // define if you want debug output // #define _DEBUG // // #define _DEBUG_VERBOSE // void Log_Verbose( const char *fmt, ... ); void Log_Debug( const char *fmt, ... ); //-------------------------------------------------------------------------- // Font style and weight lookup tables //-------------------------------------------------------------------------- const wxFontFamily fontFamilyLookup[5] = { wxFONTFAMILY_SWISS, // sans-serif wxFONTFAMILY_ROMAN, // serif wxFONTFAMILY_TELETYPE, // monospace wxFONTFAMILY_SCRIPT, // script wxFONTFAMILY_SWISS // symbol }; const int fontStyleLookup[3] = { wxFONTFLAG_DEFAULT, // upright wxFONTFLAG_ITALIC, // italic wxFONTFLAG_SLANT // oblique }; const int fontWeightLookup[2] = { wxFONTFLAG_DEFAULT, // medium wxFONTFLAG_BOLD // bold }; #endif // __WXWIDGETS_H__ gdl-0.9.7/src/overload.cpp0000664000175100017510000006573413040614410015277 0ustar coulaiscoulais/*************************************************************************** overload.cpp - GDL operator overloading for objects ------------------- begin : November 29 2012 copyright : (C) 2012 by Marc Schellens email : m_schellens@users.sf.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "includefirst.hpp" #include "objects.hpp" #include "overload.hpp" #include "prognodeexpr.hpp" #include "dinterpreter.hpp" // #include "basic_pro.hpp" #include "nullgdl.hpp" #include "list.hpp" #include "hash.hpp" using namespace std; std::string overloadOperatorNames[] = { "_OVERLOADBRACKETSLEFTSIDE" , "_OVERLOADBRACKETSRIGHTSIDE" , "_OVERLOADMINUSUNARY" , "_OVERLOADNOT" , "_OVERLOADTILDE" , "_OVERLOADPLUS" , "_OVERLOADMINUS" , "_OVERLOADASTERISK" , "_OVERLOADSLASH" , "_OVERLOADCARET" , "_OVERLOADMOD" , "_OVERLOADLESSTHAN" , "_OVERLOADGREATERTHAN" , "_OVERLOADAND" , "_OVERLOADOR" , "_OVERLOADXOR" , "_OVERLOADEQ" , "_OVERLOADNE" , "_OVERLOADGE" , "_OVERLOADGT" , "_OVERLOADLE" , "_OVERLOADLT" , "_OVERLOADPOUND" , "_OVERLOADPOUNDPOUND" , "_OVERLOADISTRUE" , "_OVERLOADFOREACH" , "_OVERLOADHELP" , "_OVERLOADPRINT" , "_OVERLOADSIZE" }; // except _OVERLOADBRACKETSLEFTSIDE all are functions int OverloadOperatorIndexFun( std::string subName) { assert( !subName.empty()); if( subName[0] != '_') // optimization, true in most cases return -1; for( int i=1; i < NumberOfOverloadOperators; ++i) if( subName == overloadOperatorNames[ i]) return i; return -1; } int OverloadOperatorIndexPro( std::string subName) { if( subName == overloadOperatorNames[ 0]) return 0; return -1; } // for proper error repoerting we need to unwind the stack when throwing from internal subroutines void ThrowFromInternalUDSub( EnvUDT* e, const string& s) { ProgNodeP callingNode = e->CallingNode(); string objectName =e->GetPro()->ObjectName(); delete e; GDLException::Interpreter()->CallStack().pop_back(); throw GDLException( callingNode, objectName+" (internal): " + s, false, false); } // #include BaseGDL* _GDL_OBJECT_OverloadIsTrue( EnvUDT* e) { // // debug/check // std::cout << "_GDL_OBJECT_OverloadIsTrue called" << std::endl; // default behavior: Implict: Another object cannot be the null object return new DIntGDL(1); // if we reach here, defaul is to return 'TRUE' } void _GDL_OBJECT_OverloadBracketsLeftSide( EnvUDT* e) { // // debug/check // std::cout << "_GDL_OBJECT_OverloadBracketsLeftSide called" << std::endl; // this is only called on scalar object references // IDL's default behavior is to just replace SELF (via OBJREF) by RVALUE // no index checking is done. SizeT nParam = e->NParam(); if( nParam < 3) // consider implicit SELF return; // RVALUE not given -> ignore // BaseGDL** objRef = e->GetKW(1); // BaseGDL** objRefP = e->GetPtrTo( objRef); if( !e->GlobalKW(1)) { ThrowFromInternalUDSub( e, "Parameter 1 (OBJREF) must be a passed as reference in this context."); } BaseGDL** objRefP = &e->GetKW(1); BaseGDL* objRef = *objRefP; BaseGDL* rValue = e->GetKW(2); if( rValue == NULL) { ThrowFromInternalUDSub( e, "Parameter 2 (RVALUE) is undefined."); } if( rValue->Type() != GDL_OBJ) { ThrowFromInternalUDSub( e, "Parameter 2 (RVALUE) must be an OBJECT in this context."); } GDLDelete( *objRefP); *objRefP = rValue->Dup(); } BaseGDL* _GDL_OBJECT_OverloadBracketsRightSide( EnvUDT* e) { // // debug/check // std::cout << "_GDL_OBJECT_OverloadBracketsRightSide called" << std::endl; SizeT nParam = e->NParam(); // number of parameters actually given // int envSize = e->EnvSize(); // number of parameters + keywords 'e' (pro) has defined if( nParam < 3) // consider implicit SELF ThrowFromInternalUDSub( e, "At least 2 parameters are needed: ISRANGE, SUB1 [, ...]."); // default behavior: Exact like scalar indexing BaseGDL* isRange = e->GetKW(1); if( isRange == NULL) ThrowFromInternalUDSub( e, "Parameter 1 (ISRANGE) is undefined."); if( isRange->Rank() == 0) ThrowFromInternalUDSub( e, "Parameter 1 (ISRANGE) must be an array in this context: " + e->Caller()->GetString(e->GetKW(1))); SizeT nIsRange = isRange->N_Elements(); if( nIsRange > (nParam - 2)) //- SELF and ISRANGE ThrowFromInternalUDSub( e, "Parameter 1 (ISRANGE) must have "+i2s(nParam-2)+" elements."); Guard isRangeLongGuard; DLongGDL* isRangeLong; if( isRange->Type() == GDL_LONG) isRangeLong = static_cast( isRange); else { try{ isRangeLong = static_cast( isRange->Convert2( GDL_LONG, BaseGDL::COPY)); } catch( GDLException& ex) { ThrowFromInternalUDSub( e, ex.ANTLRException::getMessage()); } isRangeLongGuard.Reset( isRangeLong); } ArrayIndexVectorT ixList; // IxExprListT exprList; try { for( int p=0; pGetKW( p + 2); // implicit SELF, ISRANGE, par1..par8 if( parX == NULL) ThrowFromInternalUDSub( e, "Parameter is undefined: " + e->Caller()->GetString(e->GetKW( p + 2))); DLong isRangeX = (*isRangeLong)[p]; if( isRangeX != 0 && isRangeX != 1) { ThrowFromInternalUDSub( e, "Value of parameter 1 (ISRANGE["+i2s(p)+"]) is out of allowed range."); } if( isRangeX == 1) { if( parX->N_Elements() != 3) { ThrowFromInternalUDSub( e, "Range vector must have 3 elements: " + e->Caller()->GetString(e->GetKW( p + 2))); } DLongGDL* parXLong; Guard parXLongGuard; if( parX->Type() != GDL_LONG) { try{ parXLong = static_cast( parX->Convert2( GDL_LONG, BaseGDL::COPY)); parXLongGuard.Reset( parXLong); } catch( GDLException& ex) { ThrowFromInternalUDSub( e, ex.ANTLRException::getMessage()); } } else { parXLong = static_cast( parX); } // negative end ix is fine -> CArrayIndexRangeS can handle [b:*:s] ([b,-1,s]) ixList.push_back(new CArrayIndexRangeS( (*parXLong)[0], (*parXLong)[1], (*parXLong)[2])); } else // non-range { // ATTENTION: These two grab c1 (all others don't) // a bit unclean, but for maximum efficiency if( parX->Rank() == 0) ixList.push_back( new CArrayIndexScalar( parX->Dup())); else ixList.push_back( new CArrayIndexIndexed( parX->Dup())); } } // for } catch( GDLException& ex) { ixList.Destruct(); // ixList is not valid afterwards, but as we throw this is ok throw ex; } ArrayIndexListT* aL; MakeArrayIndex( &ixList, &aL, NULL); // important to get the non-NoAssoc ArrayIndexListT // because only they clean up ixList on destruction Guard< ArrayIndexListT> aLGuard( aL); IxExprListT ixL; return aL->Index( e->GetKW( 0), ixL); // index SELF } BaseGDL* _GDL_OBJECT_OverloadEQOp( EnvUDT* e) { SizeT nParam = e->NParam(); // number of parameters actually given // int envSize = e->EnvSize(); // number of parameters + keywords 'e' (pro) has defined if( nParam < 2) // consider implicit SELF ThrowFromInternalUDSub( e, "2 parameters are needed: LEFT, RIGHT."); // default behavior: Exact like scalar indexing BaseGDL* l = e->GetKW(1); if( l->Type() != GDL_OBJ) ThrowFromInternalUDSub( e, "Unable to convert parameter #1 to type object reference."); BaseGDL* r = e->GetKW(2); if( r->Type() != GDL_OBJ) ThrowFromInternalUDSub( e, "Unable to convert parameter #2 to type object reference."); DObjGDL* left = static_cast(l); DObjGDL* right = static_cast(r); ULong rEl=right->N_Elements(); ULong nEl=left->N_Elements(); // if( nEl == 0) // nEl=N_Elements(); assert( rEl); assert( nEl); // if( !rEl || !nEl) throw GDLException("Variable is undefined."); Data_* res; DObj s; if( right->StrictScalar(s)) { res= new Data_( left->Dim(), BaseGDL::NOZERO); if( nEl == 1) { (*res)[0] = (s == (*left)[0]); return res; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for for( OMPInt i=0; i < nEl; ++i) (*res)[i] = ((*left)[i] == s); } } else if( left->StrictScalar(s)) { res= new Data_( right->Dim(), BaseGDL::NOZERO); if( rEl == 1) { (*res)[0] = ((*right)[0] == s); return res; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (rEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= rEl)) { #pragma omp for for( OMPInt i=0; i < rEl; ++i) (*res)[i] = ((*right)[i] == s); } } else if( rEl < nEl) { res= new Data_( right->Dim(), BaseGDL::NOZERO); TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (rEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= rEl)) { #pragma omp for for( OMPInt i=0; i < rEl; ++i) (*res)[i] = ((*right)[i] == (*left)[i]); } } else // ( rEl >= nEl) { res= new Data_( left->Dim(), BaseGDL::NOZERO); if( rEl == 1) { (*res)[0] = ((*right)[0] == (*left)[0]); return res; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for for( OMPInt i=0; i < nEl; ++i) (*res)[i] = ((*right)[i] == (*left)[i]); } } return res; } BaseGDL* _GDL_OBJECT_OverloadNEOp( EnvUDT* e) { SizeT nParam = e->NParam(); // number of parameters actually given // int envSize = e->EnvSize(); // number of parameters + keywords 'e' (pro) has defined if( nParam < 3) // consider implicit SELF ThrowFromInternalUDSub( e, "Two parameters are needed: LEFT, RIGHT."); // default behavior: Exact like scalar indexing BaseGDL* l = e->GetKW(1); if( l->Type() != GDL_OBJ) ThrowFromInternalUDSub( e, "Unable to convert parameter #1 to type object reference."); BaseGDL* r = e->GetKW(2); if( r->Type() != GDL_OBJ) ThrowFromInternalUDSub( e, "Unable to convert parameter #2 to type object reference."); DObjGDL* left = static_cast(l); DObjGDL* right = static_cast(r); ULong rEl=right->N_Elements(); ULong nEl=left->N_Elements(); // if( nEl == 0) // nEl=N_Elements(); assert( rEl); assert( nEl); // if( !rEl || !nEl) throw GDLException("Variable is undefined."); Data_* res; DObj s; if( right->StrictScalar(s)) { res= new Data_( left->Dim(), BaseGDL::NOZERO); if( nEl == 1) { (*res)[0] = (s != (*left)[0]); return res; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for for( OMPInt i=0; i < nEl; ++i) (*res)[i] = ((*left)[i] != s); } } else if( left->StrictScalar(s)) { res= new Data_( right->Dim(), BaseGDL::NOZERO); if( rEl == 1) { (*res)[0] = ((*right)[0] != s); return res; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (rEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= rEl)) { #pragma omp for for( OMPInt i=0; i < rEl; ++i) (*res)[i] = ((*right)[i] != s); } } else if( rEl < nEl) { res= new Data_( right->Dim(), BaseGDL::NOZERO); TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (rEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= rEl)) { #pragma omp for for( OMPInt i=0; i < rEl; ++i) (*res)[i] = ((*right)[i] != (*left)[i]); } } else // ( rEl >= nEl) { res= new Data_( left->Dim(), BaseGDL::NOZERO); if( rEl == 1) { (*res)[0] = ((*right)[0] != (*left)[0]); return res; } TRACEOMP( __FILE__, __LINE__) #pragma omp parallel if (nEl >= CpuTPOOL_MIN_ELTS && (CpuTPOOL_MAX_ELTS == 0 || CpuTPOOL_MAX_ELTS <= nEl)) { #pragma omp for for( OMPInt i=0; i < nEl; ++i) (*res)[i] = ((*right)[i] != (*left)[i]); } } return res; } // for GDL_OBJECT all other overloads are illegal operations as default // however, they need to be accessible for (nonsense) parent method calls. // But we can use just this one function for all of them BaseGDL* _GDL_OBJECT_OverloadReportIllegalOperation( EnvUDT* e) { ThrowFromInternalUDSub( e, "Operation illegal with object reference types."); return 0; } // set up the _overload... subroutines for GDL_OBJECT void SetupOverloadSubroutines() { // // The call // BaseGDL* res=interpreter->call_fun(static_cast(newEnv->GetPro())->GetTree()); // in call_fun eventually (in GDLInterpreter::statement) tree->Run() is called DStructDesc* gdlObjectDesc = FindInStructList(structList, GDL_OBJECT_NAME); assert( gdlObjectDesc != NULL); DStructDesc* listDesc = FindInStructList(structList, "LIST"); assert( listDesc != NULL); DStructDesc* hashDesc = FindInStructList(structList, "HASH"); assert( hashDesc != NULL); WRAPPED_FUNNode *tree; // automatically adds "SELF" parameter (object name is != "") DFun *_overloadIsTrue = new DFun("_OVERLOADISTRUE",GDL_OBJECT_NAME,INTERNAL_LIBRARY_STR); WRAPPED_FUNNode *tree1 = new WRAPPED_FUNNode(_GDL_OBJECT_OverloadIsTrue); _overloadIsTrue->SetTree( tree1); // we are NOT setting the operator to have (faster) default behavior // the functions must be there nevertheless for expicit callingNode // that's why we add them to the functions list gdlObjectDesc->FunList().push_back(_overloadIsTrue); // gdlObjectDesc->SetOperator(OOIsTrue,_overloadIsTrue); DPro *_overloadBracketsLeftSide = new DPro("_OVERLOADBRACKETSLEFTSIDE",GDL_OBJECT_NAME,INTERNAL_LIBRARY_STR); _overloadBracketsLeftSide->AddPar("OBJREF")->AddPar("RVALUE")->AddPar("ISRANGE"); _overloadBracketsLeftSide->AddPar("SUB1")->AddPar("SUB2")->AddPar("SUB3")->AddPar("SUB4"); _overloadBracketsLeftSide->AddPar("SUB5")->AddPar("SUB6")->AddPar("SUB7")->AddPar("SUB8"); WRAPPED_PRONode *tree2 = new WRAPPED_PRONode(_GDL_OBJECT_OverloadBracketsLeftSide); _overloadBracketsLeftSide->SetTree( tree2); gdlObjectDesc->ProList().push_back(_overloadBracketsLeftSide); // gdlObjectDesc->SetOperator(OOBracketsLeftSide,_overloadBracketsLeftSide); DFun *_overloadBracketsRightSide = new DFun("_OVERLOADBRACKETSRIGHTSIDE",GDL_OBJECT_NAME,INTERNAL_LIBRARY_STR); _overloadBracketsRightSide->AddPar("ISRANGE"); _overloadBracketsRightSide->AddPar("SUB1")->AddPar("SUB2")->AddPar("SUB3")->AddPar("SUB4"); _overloadBracketsRightSide->AddPar("SUB5")->AddPar("SUB6")->AddPar("SUB7")->AddPar("SUB8"); WRAPPED_FUNNode *tree3 = new WRAPPED_FUNNode(_GDL_OBJECT_OverloadBracketsRightSide); _overloadBracketsRightSide->SetTree( tree3); gdlObjectDesc->FunList().push_back(_overloadBracketsRightSide); // gdlObjectDesc->SetOperator(OOBracketsRightSide,_overloadBracketsRightSide); DFun *_overloadEQ = new DFun("_OVERLOADEQ",GDL_OBJECT_NAME,INTERNAL_LIBRARY_STR); _overloadEQ->AddPar("LEFT")->AddPar("RIGHT"); WRAPPED_FUNNode *tree4 = new WRAPPED_FUNNode(_GDL_OBJECT_OverloadEQOp); _overloadEQ->SetTree( tree4); gdlObjectDesc->FunList().push_back(_overloadEQ); // gdlObjectDesc->SetOperator(OOEQ,_overloadEQ); DFun *_overloadNE = new DFun("_OVERLOADNE",GDL_OBJECT_NAME,INTERNAL_LIBRARY_STR); _overloadNE->AddPar("LEFT")->AddPar("RIGHT"); WRAPPED_FUNNode *tree5 = new WRAPPED_FUNNode(_GDL_OBJECT_OverloadNEOp); _overloadNE->SetTree( tree5); gdlObjectDesc->FunList().push_back(_overloadNE); // gdlObjectDesc->SetOperator(OONE,_overloadNE); DFun *_overloadPlus = new DFun("_OVERLOADPLUS",GDL_OBJECT_NAME,INTERNAL_LIBRARY_STR); _overloadPlus->AddPar("LEFT")->AddPar("RIGHT"); WRAPPED_FUNNode *tree6 = new WRAPPED_FUNNode(_GDL_OBJECT_OverloadReportIllegalOperation); _overloadPlus->SetTree( tree6); gdlObjectDesc->FunList().push_back(_overloadPlus); // gdlObjectDesc->SetOperator(OOPlus,_overloadPlus); DFun *_overloadMinus = new DFun("_OVERLOADMINUS",GDL_OBJECT_NAME,INTERNAL_LIBRARY_STR); _overloadMinus->AddPar("LEFT")->AddPar("RIGHT"); WRAPPED_FUNNode *tree7 = new WRAPPED_FUNNode(_GDL_OBJECT_OverloadReportIllegalOperation); _overloadMinus->SetTree( tree7); gdlObjectDesc->FunList().push_back(_overloadMinus); // gdlObjectDesc->SetOperator(OOMINUS,_overloadMinus); // LIST DFun *DFunLIST__overloadBracketsRightSide = new DFun("_OVERLOADBRACKETSRIGHTSIDE","LIST",INTERNAL_LIBRARY_STR); DFunLIST__overloadBracketsRightSide->AddPar("ISRANGE"); DFunLIST__overloadBracketsRightSide->AddPar("SUB1")->AddPar("SUB2")->AddPar("SUB3")->AddPar("SUB4"); DFunLIST__overloadBracketsRightSide->AddPar("SUB5")->AddPar("SUB6")->AddPar("SUB7")->AddPar("SUB8"); tree = new WRAPPED_FUNNode( lib::LIST___OverloadBracketsRightSide); DFunLIST__overloadBracketsRightSide->SetTree( tree); listDesc->FunList().push_back(DFunLIST__overloadBracketsRightSide); listDesc->SetOperator(OOBracketsRightSide,DFunLIST__overloadBracketsRightSide); DPro *DFunPro_overloadBracketsLeftSide = new DPro("_OVERLOADBRACKETSLEFTSIDE","LIST",INTERNAL_LIBRARY_STR); DFunPro_overloadBracketsLeftSide->AddPar("OBJREF")->AddPar("RVALUE")->AddPar("ISRANGE"); DFunPro_overloadBracketsLeftSide->AddPar("SUB1")->AddPar("SUB2")->AddPar("SUB3")->AddPar("SUB4"); DFunPro_overloadBracketsLeftSide->AddPar("SUB5")->AddPar("SUB6")->AddPar("SUB7")->AddPar("SUB8"); tree2 = new WRAPPED_PRONode(lib::LIST___OverloadBracketsLeftSide); DFunPro_overloadBracketsLeftSide->SetTree( tree2); listDesc->ProList().push_back(DFunPro_overloadBracketsLeftSide); listDesc->SetOperator(OOBracketsLeftSide,DFunPro_overloadBracketsLeftSide); DFun *LIST_overloadPlus = new DFun("_OVERLOADPLUS","LIST",INTERNAL_LIBRARY_STR); LIST_overloadPlus->AddPar("LEFT")->AddPar("RIGHT"); tree6 = new WRAPPED_FUNNode(lib::LIST___OverloadPlus); LIST_overloadPlus->SetTree( tree6); listDesc->FunList().push_back(LIST_overloadPlus); listDesc->SetOperator(OOPlus,LIST_overloadPlus); DFun *LIST_overloadEQ = new DFun("_OVERLOADEQ","LIST",INTERNAL_LIBRARY_STR); LIST_overloadEQ->AddPar("LEFT")->AddPar("RIGHT"); tree4 = new WRAPPED_FUNNode(lib::LIST___OverloadEQOp); LIST_overloadEQ->SetTree( tree4); listDesc->FunList().push_back(LIST_overloadEQ); listDesc->SetOperator(OOEQ,LIST_overloadEQ); DFun *LIST_overloadNE = new DFun("_OVERLOADNE","LIST",INTERNAL_LIBRARY_STR); LIST_overloadNE->AddPar("LEFT")->AddPar("RIGHT"); tree4 = new WRAPPED_FUNNode(lib::LIST___OverloadNEOp); LIST_overloadNE->SetTree( tree4); listDesc->FunList().push_back(LIST_overloadNE); listDesc->SetOperator(OONE,LIST_overloadNE); DFun *LIST_overloadIsTrue = new DFun("_OVERLOADISTRUE","LIST",INTERNAL_LIBRARY_STR); tree4 = new WRAPPED_FUNNode(lib::LIST___OverloadIsTrue); LIST_overloadIsTrue->SetTree( tree4); listDesc->FunList().push_back(LIST_overloadIsTrue); listDesc->SetOperator(OOIsTrue,LIST_overloadIsTrue); // LIST::ADD DPro *DProLIST__ADD = new DPro("ADD","LIST",INTERNAL_LIBRARY_STR); DProLIST__ADD->AddKey("EXTRACT","EXTRACT")->AddKey("NO_COPY","NO_COPY"); DProLIST__ADD->AddPar("VALUE")->AddPar("INDEX"); tree2 = new WRAPPED_PRONode( lib::list__add); DProLIST__ADD->SetTree( tree2); listDesc->ProList().push_back(DProLIST__ADD); // LIST::REMOVE() DFun *DFunLIST__REMOVE = new DFun("REMOVE","LIST",INTERNAL_LIBRARY_STR); DFunLIST__REMOVE->AddKey("ALL","ALL"); DFunLIST__REMOVE->AddPar("INDEX"); tree = new WRAPPED_FUNNode( lib::list__remove_fun); DFunLIST__REMOVE->SetTree( tree); listDesc->FunList().push_back(DFunLIST__REMOVE); // LIST::REMOVE PRO DPro *DProLIST__REMOVE = new DPro("REMOVE","LIST",INTERNAL_LIBRARY_STR); DProLIST__REMOVE->AddKey("ALL","ALL"); DProLIST__REMOVE->AddPar("INDEX"); tree2 = new WRAPPED_PRONode( lib::list__remove_pro); DProLIST__REMOVE->SetTree( tree2); listDesc->ProList().push_back(DProLIST__REMOVE); // LIST::REVERSE PRO DPro *DProLIST__REVERSE = new DPro("REVERSE","LIST",INTERNAL_LIBRARY_STR); tree2 = new WRAPPED_PRONode( lib::list__reverse); DProLIST__REVERSE->SetTree( tree2); listDesc->ProList().push_back(DProLIST__REVERSE); // LIST::ToArray() DFun *DFunLIST__TOARRAY = new DFun("TOARRAY","LIST",INTERNAL_LIBRARY_STR); DFunLIST__TOARRAY->AddKey("TYPE","TYPE"); DFunLIST__TOARRAY->AddKey("MISSING","MISSING"); tree = new WRAPPED_FUNNode( lib::list__toarray); DFunLIST__TOARRAY->SetTree( tree); listDesc->FunList().push_back(DFunLIST__TOARRAY); // LIST::CLEANUP DPro *DProLIST__CLEANUP = new DPro("CLEANUP","LIST",INTERNAL_LIBRARY_STR); tree2 = new WRAPPED_PRONode( lib::list__cleanup); DProLIST__CLEANUP->SetTree( tree2); listDesc->ProList().push_back(DProLIST__CLEANUP); // LIST::COUNT() DFun *DFunLIST__COUNT = new DFun("COUNT","LIST",INTERNAL_LIBRARY_STR); DFunLIST__COUNT->AddPar("VALUE"); tree = new WRAPPED_FUNNode( lib::list__count); DFunLIST__COUNT->SetTree( tree); listDesc->FunList().push_back(DFunLIST__COUNT); // LIST::ISEMPTY() DFun *DFunLIST__ISEMPTY = new DFun("ISEMPTY","LIST",INTERNAL_LIBRARY_STR); tree = new WRAPPED_FUNNode( lib::list__isempty); DFunLIST__ISEMPTY->SetTree( tree); listDesc->FunList().push_back(DFunLIST__ISEMPTY); // LIST::WHERE() DFun *DFunLIST__WHERE = new DFun("WHERE","LIST",INTERNAL_LIBRARY_STR); DFunLIST__WHERE->AddKey("COMPLEMENT","COMPLEMENT"); DFunLIST__WHERE->AddKey("COUNT","COUNT"); DFunLIST__WHERE->AddKey("NCOMPLEMENT","NCOMPLEMENT"); DFunLIST__WHERE->AddPar("VALUE"); tree = new WRAPPED_FUNNode( lib::list__where); DFunLIST__WHERE->SetTree( tree); listDesc->FunList().push_back(DFunLIST__WHERE); // HASH DFun *DFunHASH__overloadBracketsRightSide = new DFun("_OVERLOADBRACKETSRIGHTSIDE","HASH",INTERNAL_LIBRARY_STR); DFunHASH__overloadBracketsRightSide->AddPar("ISRANGE"); DFunHASH__overloadBracketsRightSide->AddPar("SUB1")->AddPar("SUB2")->AddPar("SUB3")->AddPar("SUB4"); DFunHASH__overloadBracketsRightSide->AddPar("SUB5")->AddPar("SUB6")->AddPar("SUB7")->AddPar("SUB8"); tree = new WRAPPED_FUNNode( lib::HASH___OverloadBracketsRightSide); DFunHASH__overloadBracketsRightSide->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__overloadBracketsRightSide); hashDesc->SetOperator(OOBracketsRightSide,DFunHASH__overloadBracketsRightSide); DPro *DProHASH_overloadBracketsLeftSide = new DPro("_OVERLOADBRACKETSLEFTSIDE","HASH",INTERNAL_LIBRARY_STR); DProHASH_overloadBracketsLeftSide->AddPar("OBJREF")->AddPar("RVALUE")->AddPar("ISRANGE"); DProHASH_overloadBracketsLeftSide->AddPar("SUB1")->AddPar("SUB2")->AddPar("SUB3")->AddPar("SUB4"); DProHASH_overloadBracketsLeftSide->AddPar("SUB5")->AddPar("SUB6")->AddPar("SUB7")->AddPar("SUB8"); tree2 = new WRAPPED_PRONode(lib::HASH___OverloadBracketsLeftSide); DProHASH_overloadBracketsLeftSide->SetTree( tree2); hashDesc->ProList().push_back(DProHASH_overloadBracketsLeftSide); hashDesc->SetOperator(OOBracketsLeftSide,DProHASH_overloadBracketsLeftSide); DFun *HASH_overloadPlus = new DFun("_OVERLOADPLUS","HASH",INTERNAL_LIBRARY_STR); HASH_overloadPlus->AddPar("LEFT")->AddPar("RIGHT"); tree6 = new WRAPPED_FUNNode(lib::HASH___OverloadPlus); HASH_overloadPlus->SetTree( tree6); hashDesc->FunList().push_back(HASH_overloadPlus); hashDesc->SetOperator(OOPlus,HASH_overloadPlus); DFun *HASH_overloadEQ = new DFun("_OVERLOADEQ","HASH",INTERNAL_LIBRARY_STR); HASH_overloadEQ->AddPar("LEFT")->AddPar("RIGHT"); tree4 = new WRAPPED_FUNNode(lib::HASH___OverloadEQOp); HASH_overloadEQ->SetTree( tree4); hashDesc->FunList().push_back(HASH_overloadEQ); hashDesc->SetOperator(OOEQ,HASH_overloadEQ); DFun *HASH_overloadNE = new DFun("_OVERLOADNE","HASH",INTERNAL_LIBRARY_STR); HASH_overloadNE->AddPar("LEFT")->AddPar("RIGHT"); tree4 = new WRAPPED_FUNNode(lib::HASH___OverloadNEOp); HASH_overloadNE->SetTree( tree4); hashDesc->FunList().push_back(HASH_overloadNE); hashDesc->SetOperator(OONE,HASH_overloadNE); DFun *HASH_overloadIsTrue = new DFun("_OVERLOADISTRUE","HASH",INTERNAL_LIBRARY_STR); tree4 = new WRAPPED_FUNNode(lib::HASH___OverloadIsTrue); HASH_overloadIsTrue->SetTree( tree4); hashDesc->FunList().push_back(HASH_overloadIsTrue); hashDesc->SetOperator(OOIsTrue,HASH_overloadIsTrue); // HASH::REMOVE() DFun *DFunHASH__REMOVE = new DFun("REMOVE","HASH",INTERNAL_LIBRARY_STR); DFunHASH__REMOVE->AddKey("ALL","ALL"); DFunHASH__REMOVE->AddPar("INDEX"); tree = new WRAPPED_FUNNode( lib::hash__remove_fun); DFunHASH__REMOVE->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__REMOVE); // HASH::REMOVE PRO DPro *DProHASH__REMOVE = new DPro("REMOVE","HASH",INTERNAL_LIBRARY_STR); DProHASH__REMOVE->AddKey("ALL","ALL"); DProHASH__REMOVE->AddPar("INDEX"); tree2 = new WRAPPED_PRONode( lib::hash__remove_pro); DProHASH__REMOVE->SetTree( tree2); hashDesc->ProList().push_back(DProHASH__REMOVE); // HASH::HASKEY() DFun *DFunHASH__HASKEY = new DFun("HASKEY","HASH",INTERNAL_LIBRARY_STR); DFunHASH__HASKEY->AddPar("KEYLIST"); tree = new WRAPPED_FUNNode( lib::hash__haskey); DFunHASH__HASKEY->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__HASKEY); // HASH::KEYS() DFun *DFunHASH__KEYS = new DFun("KEYS","HASH",INTERNAL_LIBRARY_STR); tree = new WRAPPED_FUNNode( lib::hash__keys); DFunHASH__KEYS->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__KEYS); // HASH::VALUES() DFun *DFunHASH__VALUES = new DFun("VALUES","HASH",INTERNAL_LIBRARY_STR); tree = new WRAPPED_FUNNode( lib::hash__values); DFunHASH__VALUES->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__VALUES); // HASH::TOSTRUCT() DFun *DFunHASH__TOSTRUCT = new DFun("TOSTRUCT","HASH",INTERNAL_LIBRARY_STR); DFunHASH__TOSTRUCT->AddKey("SKIPPED","SKIPPED"); DFunHASH__TOSTRUCT->AddKey("MISSING","MISSING"); tree = new WRAPPED_FUNNode( lib::hash__tostruct); DFunHASH__TOSTRUCT->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__TOSTRUCT); // HASH::COUNT() DFun *DFunHASH__COUNT = new DFun("COUNT","HASH",INTERNAL_LIBRARY_STR); DFunHASH__COUNT->AddPar("VALUE"); tree = new WRAPPED_FUNNode( lib::hash__count); DFunHASH__COUNT->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__COUNT); // HASH::ISEMPTY() DFun *DFunHASH__ISEMPTY = new DFun("ISEMPTY","HASH",INTERNAL_LIBRARY_STR); tree = new WRAPPED_FUNNode( lib::hash__isempty); DFunHASH__ISEMPTY->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__ISEMPTY); // HASH::WHERE() DFun *DFunHASH__WHERE = new DFun("WHERE","HASH",INTERNAL_LIBRARY_STR); DFunHASH__WHERE->AddKey("COMPLEMENT","COMPLEMENT"); DFunHASH__WHERE->AddKey("COUNT","COUNT"); DFunHASH__WHERE->AddKey("NCOMPLEMENT","NCOMPLEMENT"); DFunHASH__WHERE->AddPar("VALUE"); tree = new WRAPPED_FUNNode( lib::hash__where); DFunHASH__WHERE->SetTree( tree); hashDesc->FunList().push_back(DFunHASH__WHERE); } gdl-0.9.7/src/gdlpsstream.hpp0000664000175100017510000000351213040614410016000 0ustar coulaiscoulais/* ************************************************************************* gdlpsstream.hpp - graphic stream postscript ------------------- begin : July 22 2002 copyright : (C) 2002 by Marc Schellens email : m_schellens@users.sf.net ***************************************************************************/ /* ************************************************************************* * * * 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. * * * ***************************************************************************/ #ifndef GDLPSSTREAM_HPP_ #define GDLPSSTREAM_HPP_ #include "initsysvar.hpp" #include "gdlgstream.hpp" class GDLPSStream: public GDLGStream { private: int page; bool encapsulated; long bitsPerPix; bool firstTime; //to enable a PS hack on correspondence postscript pixels - plplot position. public: GDLPSStream( int nx, int ny, int pfont, bool encaps, int color, int bpp): #ifdef _MSC_VER GDLGStream( nx, ny, /*pfont == 1 ? "psttf" :*/ (color==0)?"ps":"psc") #else GDLGStream::GDLGStream( nx, ny, /*pfont == 1 ? "psttf" :*/(color==0)?"ps":"psc") #endif { encapsulated = encaps; page = 0; firstTime=true; bitsPerPix=bpp; } ~GDLPSStream() {} void eop(); void Init(); bool PaintImage(unsigned char *idata, PLINT nx, PLINT ny, DLong *pos, DLong tru, DLong chan); }; #endif gdl-0.9.7/src/pro/0000775000175100017510000000000013040615232013544 5ustar coulaiscoulaisgdl-0.9.7/src/pro/UrgentNeed.txt0000664000175100017510000000206713040614410016347 0ustar coulaiscoulais Some of these routines can be find and downloaded from http://idlastro.gsfc.nasa.gov/idllibsrch.html but we cannot includ them now in GDL. ! : non-implemented routines having priority Please indicate what you are doing and starting time !a_correlate.pro !amoeba.pro !bar_plot.pro !binomial.pro !c_correlate.pro !chebyshev.pro !chisqr_cvf.pro !chisqr_pdf.pro !comfit.pro !complexround.pro !coord2to3.pro !cramer.pro !crvlength.pro !curvefit.pro !eigenvec.pro !errplot.pro !f_cvf.pro !f_pdf.pro !fx_root.pro !gauss2dfit.pro !gaussfit.pro !hanning.pro --> AC 2006/12/14 !h_eq_ct.pro !h_eq_int.pro !hilbert.pro !hist_equal.pro !ibeta.pro !int_2d.pro !int_3d.pro !int_tabulated_2d.pro !int_tabulated.pro !ladfit.pro !linfit.pro !lmfit.pro !lmfunct.pro !m_correlate.pro !min_curve_surf.pro !oploterr.pro <-- should easily be derived from PLOTERR !p_correlate.pro !pnt_line.pro !poly_fit.pro !r_correlate.pro !r_test.pro !regress.pro !s_test.pro !sfit.pro !spline_p.pro !spline.pro !standardize.pro !svdfit.pro !t_cvf.pro !t_pdf.pro !t3d.pro !voronoi.pro !xsq_test.pro gdl-0.9.7/src/pro/read_jpeg2000.pro0000664000175100017510000000456213040614410016514 0ustar coulaiscoulaisfunction READ_JPEG2000, filename, red, green, blue, order=order ; ON_ERROR, 2 ;+ ; ; NAME: READ_JPEG2000 ; ; PURPOSE: Reads a jpeg2000 file into memory ; ; CATEGORY: Images (IO) ; ; CALLING SEQUENCE: ; image=READ_JPEG2000(filename, [red, green, blue] [,/order]) ; ; KEYWORD PARAMETERS: ; ORDER: flip the image in the vertical ; ; OUTPUTS: image is a three dimensional array [ncomponents,xsize,ysize] ; ncomponents must be 3??? ; ; OPTIONAL OUTPUTS: For pseudocolor only ; Red,Green,Blue: 3 color vectors ; ; ; SIDE EFFECTS: ; ; ; RESTRICTIONS: ; Requires ImageMagick (that means that GDL must have been ; compiled with ImageMagick AND jasper library) ; ; PROCEDURE: ; Use ImageMagick to read the data as requested ; ; EXAMPLE: An image of Saturn should be around in the GDL CVS ; file='test.jp2' ; image=READ_JPEG(file) ; ; MODIFICATION HISTORY: ; 2013-Oct-09, GD. ; ;- ; LICENCE: ; Copyright (C) 2004, 2011, 2012 ; 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. ; ;- ; ; Do we have access to ImageMagick functionnalities ?? ; if (MAGICK_EXISTS() EQ 0) then begin MESSAGE, /continue, "GDL was compiled without ImageMagick support." MESSAGE, "You must have ImageMagick support to use this functionaly." endif ; if (N_PARAMS() NE 1 and N_PARAMS() ne 4 ) then MESSAGE, "Incorrect number of arguments." ; if (N_ELEMENTS(filename) GT 1) then MESSAGE, "Only one file at once !" if (STRLEN(filename) EQ 0) then MESSAGE, "Null filename not allowed." ; if ((FILE_INFO(filename)).exists EQ 0) then MESSAGE, "Error opening file. File: "+filename if (FILE_TEST(filename, /regular) EQ 0) then MESSAGE, "Not a regular File: "+filename ; ; testing whether the format is as expected ; if ( ~MAGICK_PING(filename, 'JP2') and ~MAGICK_PING(filename, 'JPC') ) then begin MESSAGE, "JPEG200 error: Not a JPEG2000 file:" endif ; mid=MAGICK_OPEN(filename) ; ;flip if order is set if (KEYWORD_SET(order)) then MAGICK_FLIP, mid ; if (N_PARAMS() eq 4) then begin if (MAGICK_INDEXEDCOLOR(mid)) then MAGICK_READCOLORMAPRGB, mid, red, green, blue endif image=MAGICK_READ(mid) image = image[[2,1,0],*,*] return, image end gdl-0.9.7/src/pro/read_binary.pro0000664000175100017510000001076713040614410016555 0ustar coulaiscoulais;+ ; ; NAME: READ_BINARY ; ; ; PURPOSE: Reads an binary file. The output is a structure whose tags contains ; the requested fields. ; ; ; CATEGORY: IO ; ; ; CALLING SEQUENCE: ; structure=read_binary(filename|unit, template=template, ; data_start=datastart, data_type=datatypes, ; data_dims=datadims, endian=endian) ; ; ; INPUT: ; filename Name of the ASCII file to be read ; unit Alternatively, unit of the filename ; ; ; KEYED INPUTS: ; data_start Specify the number of bytes to be skipped ; data_type Numeric type of the binary file ; data_dims Dimensions of the requested field. Allow to read only ; part of the file. ; endian 'native', 'little' or 'big': byte ordering of the binary file ; ; template NOT IMPLEMENTED YET ; structure that defines how the binary file will be processed. ; the tags datastart, typecodes, dimensions and endian ; can be overridden by the keywords data_start, data_type, ; and data_dims and endian ; ; a binary template looks like: ; VERSION FLOAT 1.00000 ; TEMPLATENAME STRING 'tmpl' ; ENDIAN STRING 'native' ; FIELDCOUNT LONG 2 ; TYPECODES INT Array[2] ; NAMES STRING Array[2] ; OFFSETS STRING Array[2] ; NUMDIMS LONG Array[2] ; DIMENSIONS STRING Array[2, 8] ; REVERSEFLAGS BYTE Array[2, 8] ; ABSOLUTEFLAGS BYTE Array[2] ; RETURNFLAGS INT Array[2] ; VERIFYFLAGS INT Array[2] ; DIMALLOWFORMULAS INT = Array[2] ; OFFSETALLOWFORMULAS ; INT = Array[2] ; VERIFYVALS STRING Array[2] ; ; ; OUTPUT: ; output If the template keyword is set, the output is a structure ; containing the fields of the binary file. Otherwise it is ; an array of the requested dimension and type. ; ; ; ; EXAMPLES: ; to read a binary file of floats: ; a = read_binary(filename, type=4) ; ; ; IDL DIFFERENCES: ; template keyword not yet implemented ; ; ; MODIFICATION HISTORY: ; 20-Jan-2006 : written by Pierre Chanial ; ;- ; LICENCE: ; Copyright (C) 2006, P. Chanial ; 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. ; ; ;- function read_binary_filesize, filename compile_opt hidden spawn, ['wc', '-c', filename], output, exit_status=status, /noshell if status ne 0 then message, 'Invalid filename.' return, long64(output[0]) end function read_binary, input, template=template, data_start=datastart, $ data_type=datatypes, data_dims=datadims, endian=endian on_error, 2 if keyword_set(template) then begin message, 'TEMPLATE keyword not implemented yet!' endif if n_elements(datastart) eq 0 then datastart = 0 if n_elements(datatypes) eq 0 then datatypes = 1 if n_elements(datadims) eq 0 then datadims = -1 if n_elements(endian) eq 0 then endian = 'native' if n_elements(template) eq 0 then fieldcount = 1 nbytes = [0, 1, 2, 2, 4, 8, 8, 0, 0, 16, 0, 0, 2, 4, 8, 8] if size(input, /tname) eq 'STRING' then begin filename = input openr, unit, filename, /get_lun, $ swap_if_big_endian=strcmp(endian, 'little', /fold_case), $ swap_if_little_endian=strcmp(endian, 'big', /fold_case) endif else begin unit = input filename = '' endelse point_lun, unit, datastart ;---------------- ; check filesize ;---------------- filesize = read_binary_filesize(filename)-datastart linesize = product(datadims>1)*nbytes[datatypes] linecount = filesize / linesize ;---------------------------- ; optimize case fieldcount=1 ;---------------------------- if fieldcount eq 1 then begin if datadims[0] eq -1 then begin dimensions = linecount endif else begin dimensions = datadims > 1 endelse result = make_array(dimension=dimensions, type=datatypes, /nozero) if datadims[0] eq 0 then begin result = result[0] endif readu, unit, result goto, closing endif ;------------------------- ; create output structure ;------------------------- ;---------- ; clean up ;---------- closing: if size(filename, /tname) eq 'STRING' then free_lun, unit return, result end gdl-0.9.7/src/pro/correlate.pro.~1.2.~0000664000175100017510000000315713040614410017222 0ustar coulaiscoulais; by Sylwester Arabas ; part of GNU Data Language - GDL function correlate, x, y, covariance=covariance, double=double on_error, 2 if n_params() eq 2 then begin l = n_elements(x) < n_elements(y) mx = mean(x[0:l-1], double=double) my = mean(y[0:l-1], double=double) cov = total((x - mx) * (y - my)) / (l - 1.) if keyword_set(covariance) then return, cov sx = sqrt(total((x[0:l-1] - mx)^2, double=double) / (l - 1.)) sy = sqrt(total((y[0:l-1] - my)^2, double=double) / (l - 1.)) return, cov / sx / sy endif else if n_params() eq 1 then begin if (size(x))[0] ne 2 then message, 'Expecting two-dimensional array' dbl = keyword_set(double) || size(x, /type) eq 5 nx = (size(x))[1] cov = dbl ? dblarr(nx, nx, /nozero) : fltarr(nx, nx, /nozero) ; one option would be to call correlate a couple of time... but the code below should be faster ;for i = 0, nx - 1 do for j = 0, nx - 1 do $ ; cov[i, j] = correlate(x[i, *], x[j, *], double=double, covariance=covariance) tmp = dbl ? dblarr(nx, /nozero) : fltarr(nx, /nozero) for i = 0, nx - 1 do tmp[i, *] = mean(x[i, *], double=double) for i = 0, nx - 1 do for j = 0, nx - 1 do begin cov[i, j] = total((x[i, *] - tmp[i]) * (x[j, *] - tmp[j])) endfor cov /= nx - 1 if keyword_set(covariance) then return, cov for i = 0, nx - 1 do tmp[i, *] = sqrt(total((x[i, *] - tmp[i])^2, double=double) / (nx - 1.)) for i = 0, nx - 1 do begin cov[i, *] /= tmp[i] cov[*, i] /= tmp[i] endfor return, cov endif message, 'Incorrect number of arguments.' end gdl-0.9.7/src/pro/image_statistics.pro0000664000175100017510000001121013040614410017612 0ustar coulaiscoulais;+ ; NAME: IMAGE_STATISTICS ; ; PURPOSE: ; ; CATEGORY: ; ; ; ; CALLING SEQUENCE: ; ; ; ; INPUTS: ; ; ; ; OPTIONAL INPUTS: ; ; ; ; KEYWORD PARAMETERS: ; ; ; ; OUTPUTS: ; ; ; ; OPTIONAL OUTPUTS: ; ; ; ; COMMON BLOCKS: none ; ; SIDE EFFECTS: ; ; ; ; RESTRICTIONS: ; ; ; ; PROCEDURE: ; ; ; ; EXAMPLE: ; ; ; LICENCE: this code is under GNU GPL v2 or later. (C) 2011 ; ; MODIFICATION HISTORY: ; -- first draft created by Alain Coulais, 10-Nov-2011 ; -- 15-Nov-2011 : AC : better managmenet of output types ; -- 02-Jul-2012 : Josh Sixsmith : Added the labeled keyword ;- ; pro ImSt_MESS, keyword_name MESSAGE, /continue, 'This keyword '+STRUPCASE(keyword_name)+' is not available' MESSAGE, /continue, 'Please consider to contribute (by submitting Patches on SF.net)' end ; pro IMAGE_STATISTICS, input_data, mask=mask, count=count, $ data_sum=data_sum, maximum=maximum, $ mean=mean_, minimum=minimum, $ stddev=stddev_, sum_of_squares=sum_of_squares, $ variance=variance_, $ lut=lut, vector=vector, $ weight_sum=weight_sum, weighted=weighted, $ labeled=labeled, $ help=help, test=test, verbose=verbose ; if N_PARAMS() NE 1 then MESSAGE, 'Incorrect number of arguments.' ; if ((SIZE(input_data))[0] LT 1) then MESSAGE, 'Expression must be an array in this context' ; if KEYWORD_SET(help) then begin print, 'pro IMAGE_STATISTICS, data, mask=mask, count=count, $' print, ' data_sum=data_sum, maximum=maximum, $' print, ' mean=mean_, minimum=minimum, $' print, ' stddev=stddev_, sum_of_squares=sum_of_squares, $' print, ' variance=variance_, $' print, ' lut=lut, vector=vector, $' print, ' weight_sum=weight_sum, weighted=weighted, $' print, ' labeled=labeled, $' print, ' help=help, test=test, verbose=verbose' return endif ; if KEYWORD_SET(lut) then ImSt_MESS, 'lut' if KEYWORD_SET(vector) then ImSt_MESS, 'vector' if KEYWORD_SET(weight_sum) then ImSt_MESS, 'weight_sum' if KEYWORD_SET(weighted) then ImSt_MESS, 'weighted' ; image=input_data if KEYWORD_SET(mask) then begin if KEYWORD_SET(labeled) then begin hist=HISTOGRAM(mask, reverse_indices=ri) n=N_ELEMENTS(hist) mean_=FLTARR(n, /nozero) maximum=FLTARR(n, /nozero) minimum=FLTARR(n, /nozero) count=ULONARR(n, /nozero) data_sum=FLTARR(n, /nozero) sum_of_squares=FLTARR(n, /nozero) for i=0L, n-1 do begin if ri[i] NE ri[i+1] then begin data=image[ri[ri[i]:ri[i+1]-1]] mean_[i] = MEAN(data,/double) maximum[i] = MAX(data, min=min_i) minimum[i] = min_i count[i] = N_ELEMENTS(data) data_sum[i] = TOTAL(data, /double) sum_of_squares[i] = FLOAT(TOTAL(data^2D, /double)) endif endfor endif else begin OK=WHERE(mask NE 0, nbp_ok) if (nbp_ok GT 0) then image=input_data[OK] endelse endif ; if KEYWORD_SET(labeled) then begin ; basically do nothing, just allows us to create a block for the non-labeled ; calculations endif else begin count=ULONG(N_ELEMENTS(image)) data_sum=FLOAT(TOTAL(image,/double)) mean_=FLOAT(MEAN(image,/double)) maximum=MAX(image, min=minimum) maximum=FLOAT(maximum) minimum=FLOAT(minimum) sum_of_squares=FLOAT(TOTAL(image^2.D,/double)) endelse ; if N_ELEMENTS(image) GT 1 then begin if KEYWORD_SET(labeled) then begin stddev_=FLTARR(n, /nozero) variance_=FLTARR(n, /nozero) for i=0L, n-1 do begin if ri[i] NE ri[i+1] then begin data=image[ri[ri[i]:ri[i+1]-1]] stddev_[i] = STDDEV(data, /double) variance_[i] = VARIANCE(data, /double) endif endfor endif else begin stddev_=FLOAT(STDDEV(image,/double)) variance_=FLOAT(VARIANCE(image,/double)) endelse endif else begin stddev_=0.0 variance_=0.0 endelse ; if KEYWORD_SET(verbose) then begin if KEYWORD_SET(mask) then begin print, 'Statistics on MASKED Image:' endif else begin print, 'Statistics on Image:' endelse print, 'Total Number of Pixels = ', count print, 'Total of Pixel Values = ', data_sum print, 'Maximum Pixel Value = ', maximum print, 'Mean of Pixel Values = ', mean_ print, 'Minimum Pixel Value = ', minimum print, 'Standard Deviation of Pixel Values = ', stddev_ print, 'Total of Squared Pixel Values = ', sum_of_squares print, 'Variance of Pixel Values = ', variance_ endif ; if KEYWORD_SET(test) then STOP ; end gdl-0.9.7/src/pro/xregistered.pro0000664000175100017510000000071213040614410016610 0ustar coulaiscoulaisfunction xregistered,name,noshow=noshow common managed, ids, names, modalList forward_function ValidateManagedWidgets IF ( ~keyword_set(ids)) then return,0 ;update list of managed widgets ValidateManagedWidgets ;which may result in a zero id: if (ids[0] eq 0) then return, 0 occurences=where(names eq name, count) if ( count gt 0 ) then begin if ( ~keyword_set(noshow) ) then widget_control, ids[occurences[0]], /show return, count endif return, 0 end gdl-0.9.7/src/pro/skewness.pro0000664000175100017510000000330713040614410016130 0ustar coulaiscoulais;$Id: skewness.pro,v 1.3 2012/07/13 22:28:02 alaingdl Exp $ ; function skewness, x, double=double, NaN=NaN, dimension=dimension ; ;+ ; ; NAME: SKEWNESS ; ; PURPOSE: ; Calculates the skewness of the input data ; ; CATEGORY: ; Mathematics: Statistics ; ; CALLING SEQUENCE: Result=SKEWNESS(x [, /nan][,/double][, dim=]) ; ; KEYWORD PARAMETERS: ; DOUBLE : Keyword for double precision calculation ; NAN : Flag to treat IEEE Special Floating-Point values as missing data ; DIMENSION : if absent or equal to zero, compute the variance over the ; whole data. otherwise, compute along the related dimension. ; ; OUTPUTS: ; Result is the mean of input data ; ; ; RESTRICTIONS: ; The input x needs to be an array of numbers (i.e not strings, ; struct, ptr, object) ; ; PROCEDURE: ; skewness = 1/N sum((x-mean(x))^3/sqrt(variance(x))), ; Uses the MOMENT function ; ; EXAMPLE: ; a=FINDGEN(100) ; result=SKEWNESS(a) ; print, result ; 0.0000 ; ; MODIFICATION HISTORY: ; 20-Mar-2004 : Written by Christopher Lee ; 18-Jul-2005 : PC, moment.pro update ; 13-Jul-2012 : Alain Coulais : adding DIMENSION keyword, using MOMENT() ; ; LICENCE: ; Copyright (C) 2004, Christopher Lee, 2005 P. Chanial, 2012 Alain Coulais ; ; 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. ; ; ;- ; ON_ERROR, 2 ; tmp = MOMENT(x, skewness=skewness, double=double, NaN=NaN, $ dimension=dimension, maxmoment=3) ; return, skewness ; end gdl-0.9.7/src/pro/write_tiff.pro0000664000175100017510000000614613040614410016434 0ustar coulaiscoulais;+ ; ; NAME: WRITE_TIFF ; ; PURPOSE: write a tiff image from memory to a bitmap ; ; CATEGORY: Images (IO) ; ; CALLING SEQUENCE: ; WRITE_TIFF, filename, image, bits_per_sample, red, green, blue, $ ; compression, verbose=verbose, help=help, test=test, $ ; debug=debug ; ; KEYWORD PARAMETERS: ; ORDER : 1 = top-bottom, 0 = bottom-top ; VERBOSE : Not Used ; TRANSPARENT: ; ; ; OPTIONAL INPUTS: ; bits_per_sample: bits per sample ; compression: compression method ; For pseudocolor only ; red : the Red colormap vector (for PseudoColor images) ; green: the Green colormap vector (for PseudoColor images) ; blue : the Blue colormap vector (for PseudoColor images) ; ; RESTRICTIONS: ; Requires ImageMagick or GraphicsMagick ; ; PROCEDURE: ; Use ImageMagick to write the data as requested ; ; EXAMPLE: ; Currently no example is available ; ; MODIFICATION HISTORY: ; Written by: Jeongbin Park 2015-04-03, based on write_png.pro ; ;- ; LICENCE: ; Copyright (C) 2015: JP ; 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. ; ;- ; pro WRITE_TIFF, filename, image, bits_per_sample, red=red, green=green, blue=blue, $ compression=compreesion, verbose=verbose, help=help, test=test, $ debug=debug ; ; this line allows to compile also in IDL ... FORWARD_FUNCTION MAGICK_EXISTS, MAGICK_PING, MAGICK_READ ; ;if ~KEYWORD_SET(debug) then ON_ERROR, 2 ; if KEYWORD_SET(help) then begin print, 'pro WRITE_TIFF, filename, image, bits_per_sample, red=red, green=green, blue=blue, $' print, ' compression=compression, verbose=verbose, help=help, test=test, $' print, ' debug=debug $' return endif ; ; Do we have access to ImageMagick functionnalities ?? ; if (MAGICK_EXISTS() EQ 0) then begin MESSAGE, /continue, "GDL was compiled without ImageMagick support." MESSAGE, "You must have ImageMagick support to use this functionaly." endif ; rgb=1 ; nb_dims=SIZE(image, /n_dimensions) ; if (nb_dims LT 2) OR (nb_dims GT 3) then begin MESSAGE, "Image array must be (n,m) or (k,n,m)." endif if (nb_dims eq 3) then begin MESSAGE, "Image array with (k,n,m) is not supported yet!" endif ; im_size=SIZE(image,/dimensions) ; if (nb_dims EQ 2) then mid=MAGICK_CREATE(im_size[0],im_size[1]) ; if KEYWORD_SET(red) AND KEYWORD_SET(green) AND KEYWORD_SET(blue) then begin TVLCT, red, green, blue, /get endif else begin red = BINDGEN(256) green = BINDGEN(256) blue = BINDGEN(256) endelse MAGICK_WRITECOLORTABLE, mid, red, green, blue _image=TRANSPOSE([[[red [image]]],$ [[green[image]]],$ [[blue [image]]]],$ [2,0,1]) MAGICK_WRITE, mid, _image, rgb=1 MAGICK_WRITEFILE, mid, filename, "TIFF" MAGICK_CLOSE, mid ; if KEYWORD_SET(test) OR KEYWORD_SET(debug) then STOP ; end gdl-0.9.7/src/pro/lmgr.pro0000664000175100017510000000434213040614410015227 0ustar coulaiscoulais;$Id: lmgr.pro,v 1.3 2016/06/05 14:18:41 gilles-duvert Exp $ ;+ ; ; ; ; NAME: ; LMGR ; ; ; PURPOSE: ; return license information ; emulates an IDL desktop license ; As GDL does not need license management this routine is ; for IDL compatibility only ; ; ; CATEGORY: ; compatibility ; ; ; CALLING SEQUENCE: ; res = LMGR(/CLIENTSERVER,/DEMO,/EMBEDDED, ; /RUNTIME,/STUDENT,/TRIAL,/VM, ; [EXPIRE_DATE=variable],/FORCE_DEMO, ; [INSTALL_NUM=variable],[LMHOSTID=variable], ; [SITE_NOTICE=variable] ; ; ; OUTPUTS: 1 if no keyword is set ; 0 otherwise ; ; ; ; COMMON BLOCKS: ; none ; ; SIDE EFFECTS: ; none ; ; ; MODIFICATION HISTORY: ; Written by: Marc Schellens ; Special undocumented features for testing presence of additional licensed programs added by G. Duvert ; ; ;- ; LICENCE: ; Copyright (C) 2005, ; 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. ; ; ;- function LMGR,some_additional_licensed_program,$ CLIENTSERVER=cs,DEMO=demo,EMBEDDED=eb,$ RUNTIME=rt,STUDENT=student,TRIAL=trial,VM=vm,$ EXPIRE_DATE=expire,FORCE_DEMO=force,$ INSTALL_NUM=install_num,LMHOSTID=hostid,$ SITE_NOTICE=site_notice, VERSION=version on_error, 2 hostid = '000000000001' install_num = '00001' site_notice= 'GNU' ; undocumeted feature: tests for other programs & licences, with their VERSION: ; probably necessary to answer "no" and return a warning if (n_params() gt 0) then begin message,/informational,'Procedure is testing presence of an external program: "'+some_additional_licensed_program+'", absent from GDL' return, 0 endif ; if keyword_set( cs) then return,0 if keyword_set( demo) then return,0 if keyword_set( eb) then return,0 if keyword_set( rt) then return,0 if keyword_set( student) then return,0 if keyword_set( trial) then return,0 if keyword_set( vm) then return,0 return,1 end gdl-0.9.7/src/pro/array_indices.pro0000664000175100017510000000463213040614410017104 0ustar coulaiscoulais;$Id: array_indices.pro,v 1.4 2015/12/02 20:46:44 gilles-duvert Exp $ function Array_Indices,a,ix,dimensions=dimensions on_error, 2 ;+ ; ; ; ; NAME: ; ARRAY_INDICES ; ; PURPOSE: ; translates a one-dimensional index (like given by where() function) ; into a multidimensional one (i.e. the array indices according to ; the multidimensional array) ; ; PARAMETERS: ; a the array ; ix the onedimensional index (or array of indices) ; ; CATEGORY: ; ; ; CALLING SEQUENCE: ; result = array_index(a,i) ; ; ; ; ; KEYWORD PARAMETERS: ; dimensions: with this keyword the array "a" is a vector giving the ; dimensions. Use this keyword if you don't want to spoil the ; memory to generate a sample array "a" with the output dimensions. ; ; ; OUTPUTS: ; ; ; ; ; OPTIONAL OUTPUTS: ; ; ; ; COMMON BLOCKS: ; ; ; SIDE EFFECTS: ; ; ; RESTRICTIONS: ; ; ; PROCEDURE: ; ; ; EXAMPLE: ; GDL> a=intarr(23,24,27,33) ; GDL> a[13,19,2,11]=1 ; GDL> ix=where(a) ; GDL> print,l_getdim(a,ix) ; 13 19 2 11 ; ; ; ; MODIFICATION HISTORY: ; Written by: Marc Schellens, 02-12-2004 ; introduces dimensions keyword by Reto Stockli (2015/11/29) ; ; ;- ; LICENCE: ; Copyright (C) 2004-2015, ; 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. ; ; ;- ;; check number of parameters if n_params() ne 2 then begin message,'Wrong number of parameters.' endif ;; check index type ty = size( ix, /TYPE) if ty ge 6 and ty le 11 then begin message,'Index must be of integer type.' endif ;; get index range maxIx = max( ix, MIN=minIx) ;; check if the array "a" provides the dimensions ;; and evaluate dimensions if (keyword_set(dimensions)) then begin ntot = product(a,/integer) dim = a ndim = n_elements(a) endif else begin ntot = n_elements(a) dim = size(a,/dimensions) ndim = n_elements(dim) endelse if minIx lt 0 or maxIx ge ntot then begin message,'Index out of range.' endif r=lonarr( ndim>1,n_elements(ix)) ;; index 1 r[0,*]=ix mod dim[0] ;; index 2..n-1 sum=1L for i=1,ndim-2 do begin sum=sum*dim[i-1] r[i,*]=(ix / sum) mod dim[i] endfor ;; index n if ndim ge 2 then begin i=ndim-1 sum=sum*dim[i-1] r[i,*]=ix / sum endif return,r end gdl-0.9.7/src/pro/real_part.pro0000664000175100017510000000355313040614410016242 0ustar coulaiscoulais;+ ; NAME: REAL_PART ; ; PURPOSE: ; ; This function returns the real part of a complex number/array ; (of any dimension), in a type consistant to the input variable ; (either FLOAT or DOUBLE). ; If the type of the input is convertible (BYTE, INT, STRING, ...) ; it is promote to FLOAT type. ; ; CATEGORY: ; ; CALLING SEQUENCE: ; ; Result = REAL_PART(Z) ; ; INPUTS: ; ; Z: A scalar or array. Z may be of any numeric type. ; If Z is not complex then the result is simply converted to ; floating-point (single-precision for all integer types, ; double precision for type double). If Z is STRING, it is converted ; to FLOAT when possible, despite, it is converted to "0.0" ; ; OPTIONAL INPUTS: none ; ; KEYWORD PARAMETERS: none ; ; OUTPUTS: A scale or an array of the same size of the input. ; ; OPTIONAL OUTPUTS: none ; ; COMMON BLOCKS: none ; ; SIDE EFFECTS: none ; ; RESTRICTIONS: Behavior on Objects/Structures/Pointers not clear ! ; ; PROCEDURE: ; ; EXAMPLE: ; ; print, REAL_PART(INDGEN(10)) ; print, REAL_PART(COMPLEXARR(2)+1) ; print, REAL_PART(['s','10,']) ; ; MODIFICATION HISTORY: ; Written by: Alain Coulais, 06 June 2008. ; ; LICENCE: ; Copyright (C) 2008, Alain Coulais ; ; 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. ; ;- function real_part, z ; ON_ERROR, 2 ; if (N_PARAMS() lt 1) then MESSAGE, 'Incorrect number of arguments.' ; type=SIZE(z, /TYPE) ; ; When input is a DOUBLE (ie DOUBLE or DCOMPLEX) we ; When input is not of DOUBLE type, it is converted to FLOAT type ... ; ; DOUBLE: type == 5 ; DCOMPLEX: type == 9 ; if ((type EQ 5L) OR (type EQ 9L)) then begin return, DOUBLE(z) endif else begin return, FLOAT(z) endelse ; end ; gdl-0.9.7/src/pro/read_pict.pro0000664000175100017510000000270213040614410016216 0ustar coulaiscoulais;$Id: read_pict.pro,v 1.4 2012/08/14 14:21:37 alaingdl Exp $ pro read_pict, filename, image,red, green, blue on_error, 2 ;+ ; ; ; ; NAME: READ_PICT ; ; ; PURPOSE: Reads a PICT file into memory ; ; ; ; CATEGORY: Images (IO) ; ; ; CALLING SEQUENCE: read_pict,filename,image,red,green,blue ; ; ; ; OUTPUTS: ; IMAGE: A 2d file containing the vector indices ; ; ; ; OPTIONAL OUTPUTS: ; red : the Red colormap vector (for PseudoColor images) ; green: the Green colormap vector (for PseudoColor images) ; blue : the Blue colormap vector (for PseudoColor images) ; ; ; RESTRICTIONS: ; Requires ImageMagick ; ; ; PROCEDURE: ; Use ImageMagick to read the data as requested ; ; EXAMPLE: ; ; ; ; MODIFICATION HISTORY: ; Written by: Christopher Lee 2004-05-17 ; ; ; ;- ; LICENCE: ; Copyright (C) 2004, ; 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. ; ; ;- if (N_ELEMENTS(filename) GT 1) then MESSAGE, "Only one file at once !" mid=magick_open(filename) print, magick_IndexedColor(mid) if(magick_IndexedColor(mid)) then begin image=magick_readIndexes(mid) magick_readcolormapRGB,mid,red,green,blue endif else begin image=magick_read(mid) endelse magick_close,mid end gdl-0.9.7/src/pro/write_png.pro0000664000175100017510000001227613040614410016271 0ustar coulaiscoulais;+ ; ; NAME: WRITE_PNG ; ; PURPOSE: write a image from memory to a bitmap ; ; CATEGORY: Images (IO) ; ; CALLING SEQUENCE: ; WRITE_PNG, filename, image, red, green, blue, $ ; order=order, transparent=transparent, $ ; test=test, verbose=verbose, help=help, debug=debug ; ; KEYWORD PARAMETERS: ; ORDER : 1 = top-bottom, 0 = bottom-top ; VERBOSE : Not Used ; TRANSPARENT: ; ; ; OPTIONAL INPUTS: For pseudocolor only ; red : the Red colormap vector (for PseudoColor images) ; green: the Green colormap vector (for PseudoColor images) ; blue : the Blue colormap vector (for PseudoColor images) ; ; RESTRICTIONS: ; Requires ImageMagick or GraphicsMagick (this is tested) ; ; PROCEDURE: ; Use ImageMagick to write the data as requested ; ; EXAMPLE: ; See "image_test.pro" in testsuite/ ; ; MODIFICATION HISTORY: ; Written by: Christopher Lee 2004-05-28 ; ; JMG 08/30/06 ; Implement /ORDER keyword ; Switch blue & red in TRANSPOSE statements ; Implement greyscale PNG if BYTE input ; ; Modifications by Alain Coulais 09-Aug-2012: ; - now /order should be active not only for 2D images ! ; - 2D images can be writen (but not the best way today :( ; (help welcome, same problem than in WRITE_JPEG) ; ; Modifications by Alain Coulais 17-Jul-2013: ; -correcting bug 553 (color mixing in 2D+RBG) ; test case: next image must be red !! ; WRITE_PNG,'test.png', DIST(256), INDGEN(256), INTARR(256), INTARR(256) ; ;- ; LICENCE: ; Copyright (C) 2004, 2011, 2012: CL, JMG, AC ; 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. ; ;- ; pro WRITE_PNG, filename, image, red, green, blue, $ order=order, transparent=transparent, $ verbose=verbose, help=help, test=test, debug=debug ; ; this line allows to compile also in IDL ... FORWARD_FUNCTION MAGICK_EXISTS, MAGICK_PING, MAGICK_READ ; ;if ~KEYWORD_SET(debug) then ON_ERROR, 2 ; if KEYWORD_SET(help) then begin print, 'pro WRITE_PNG, filename, image, red, green, blue, $' print, ' order=order, transparent=transparent, $' print, ' verbose=verbose, help=help, test=test, debug=debug' return endif ; ; Do we have access to ImageMagick functionnalities ?? ; if (MAGICK_EXISTS() EQ 0) then begin MESSAGE, /continue, "GDL was compiled without ImageMagick support." MESSAGE, "You must have ImageMagick support to use this functionaly." endif ; rgb = 1 ; nb_dims=SIZE(image, /n_dimensions) ; if (nb_dims LT 2) OR (nb_dims GT 3) then begin MESSAGE, "Image array must be (n,m) or (1-4,n,m)." endif ; im_size=SIZE(image,/dimensions) ; ; basic init, to be change for 3D case ! if (nb_dims EQ 2) then nb_channels=1 ;;(pure 2D image) ; if (nb_dims EQ 3) then begin if (im_size[0] GT 4) then begin MESSAGE, "Image array must be (n,m) or (1-4,n,m)." endif nb_channels=im_size[0] endif ; sz = SIZE(image) ty = sz[sz[0]+1] ; if KEYWORD_SET(verbose) then begin print, 'The dimension of the image to be written is : ', im_size print, 'Channel deep is : ', nb_channels endif ; if (nb_channels eq 1) then begin ;; pseudocolor if (N_PARAMS() lt 5) then TVLCT, red, green, blue, /get ;; If BYTE image then use greyscale if ((ty eq 1) and (N_PARAMS() eq 2)) then begin red = BINDGEN(256) green = BINDGEN(256) blue = BINDGEN(256) endif ;; ;;colorvectors provided mid=MAGICK_CREATE(im_size[0],im_size[1]) if (n_elements(transparent) gt 0) then begin alpha=image*0+255 for i=0,n_elements(transparent)-1 do alpha[where(image eq transparent[i])]=0 _image=TRANSPOSE([[[red[image]]],[[green[image]]],[[blue[image]]],[[alpha]]],[2,0,1]) MAGICK_MATTE, mid endif else begin _image=TRANSPOSE([[[red[image]]],$ [[green[image]]],$ [[blue[image]]]],$ [2,0,1]) endelse ;; MAGICK_WRITECOLORTABLE, mid, red, green, blue MAGICK_WRITE, mid, _image, rgb=rgb if (KEYWORD_SET(order)) then MAGICK_FLIP, mid MAGICK_WRITEFILE, mid, filename, "PNG" MAGICK_CLOSE, mid return endif ; ; usual 3D case [3,N,M] ; if(nb_channels EQ 3) then begin mid=MAGICK_CREATE(im_size[1],im_size[2]) MAGICK_WRITE, mid, image, rgb=rgb if (KEYWORD_SET(order)) then MAGICK_FLIP, mid MAGICK_WRITEFILE, mid, filename,"PNG" MAGICK_CLOSE, mid return endif ; ; transparent 3D case [2,N,M] or [4,N,M] ; if (nb_channels EQ 4) then begin mid=MAGICK_CREATE(im_size[1],im_size[2]) MAGICK_MATTE, mid MAGICK_WRITE, mid, image, rgb=rgb if (KEYWORD_SET(order)) then MAGICK_FLIP, mid MAGICK_WRITEFILE, mid, filename, "PNG" MAGICK_CLOSE, mid return endif if (nb_channels EQ 2) then begin mid=MAGICK_CREATE(im_size[1],im_size[2]) MAGICK_MATTE, mid MAGICK_WRITE, mid, image if (KEYWORD_SET(order)) then MAGICK_FLIP, mid MAGICK_WRITEFILE, mid, filename, "PNG" MAGICK_CLOSE, mid return endif ; if KEYWORD_SET(test) OR KEYWORD_SET(debug) then STOP ; end gdl-0.9.7/src/pro/envi/0000775000175100017510000000000013040615232014505 5ustar coulaiscoulaisgdl-0.9.7/src/pro/envi/test_write_read_envi.pro0000664000175100017510000000263413040614410021436 0ustar coulaiscoulais; ; Josh Sixsmith 5 Jul 2012, under GNU GPL v3 or later ; ; A simple test that checks the dimensions of the read and written image ; pro TEST_WRITE_READ_ENVI, columns=columns, rows=rows, bands=bands, $ out_name=out_name, help=help, test=test ; if KEYWORD_SET(help) then begin print, 'pro TEST_WRITE_READ_ENVI, columns=columns, rows=rows, $' print, ' bands=bands, out_name=out_name, $' print, ' help=help, test=test' return endif ; ; create a dummy image if N_ELEMENTS(columns) eq 0 then columns = 400 if N_ELEMENTS(rows) eq 0 then rows = 400 if N_ELEMENTS(bands) eq 0 then begin img = RANDOMN(sd, columns, rows) nb = 1 ns = columns nl = rows endif else begin img = RANDOMN(sd, columns, rows, bands) nb = bands ns = columns nl = rows endelse ; if (N_ELEMENTS(out_name) eq 0) then out_name='envi_test_img' ; ; begin by writing the image ; WRITE_ENVI_FILE, img, out_name=out_name, ns=ns, nl=nl, nb=nb ; ; now to read in the image ; READ_ENVI_FILE, out_name, image=r_img, info=img_info ; ; testing by checking the equivalency of the read image with the ; written image ; check = SIZE(img, /dimensions) eq SIZE(r_img, /dimensions) wh = WHERE(check eq 0, count) if (count eq 0) then begin MESSAGE, 'Test Passed', /continue endif else begin MESSAGE, 'Test Failed', /continue endelse ; if KEYWORD_SET(test) then STOP ; end gdl-0.9.7/src/pro/envi/read_envi_file.pro0000664000175100017510000004653013040614410020167 0ustar coulaiscoulais;+ ; ; NAME: ; READ_ENVI_FILE ; PURPOSE: ; Reads an ENVI style formatted image file (both compressed and ; uncompressed). ; ; CATEGORY: ; File I/O ; ; CALLING SEQUENCE: ; READ_ENVI_FILE, filename, image=image, info=image_info ; ; KEYWORD PARAMETERS: ; FILENAME: A string containing the full filepath name of the image. ; IMAGE: Variable name to contain the image/array ; INFO: Variable name to contain the image information as a structure ; HELP: showing how to use and exit ; ; OUTPUTS: ; image: An array containing the image ; image_info: A structure containing information about the image ; eg. number of samples, number of lines, number of bands, ; data type, interleave, file description, band names. ; ; MODIFICATION HISTORY: ; 02-Jul-2012: Written by Josh Sixsmith ; 16-Feb-2014: Better managment of input filenames ; ; LICENCE: ; Copyright (C) 2012, Josh Sixsmith ; 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 3 of the License, or ; (at your option) any later version. ; ;- ; function NUM_SAMPLES, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fnsw = WHERE(STRPOS(header, "samples") NE -1, count) IF (count NE 0) THEN BEGIN fns = STRTRIM(header[fnsw], 2) fns1 = STRPOS(fns, '=') ns = STRMID(fns, fns1 + 2) ;; RETURN, (LONG(ns))[0] ENDIF ELSE BEGIN MESSAGE, 'Number of Samples Not Found.' ENDELSE ; END ; ;----------------------------------------------------------------------- ; function NUM_LINES, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fnlw = WHERE(STRPOS(header, "lines") NE -1, count) IF (count NE 0) THEN BEGIN fnl = STRTRIM(header[fnlw], 2) fnl1 = STRPOS(fnl, '=') nl = STRMID(fnl, fnl1 + 2) ;; RETURN, (LONG(nl))[0] ENDIF ELSE BEGIN MESSAGE, 'Number of Lines Not Found.' ENDELSE ; END ; ;----------------------------------------------------------------------- ; function NUM_BANDS, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fnbw = WHERE(STRPOS(header, "bands") NE -1, count) IF (count NE 0) THEN BEGIN fnb = STRTRIM(header[fnbw], 2) fnb1 = STRPOS(fnb, '=') nb = STRMID(fnb, fnb1 + 2) ;; RETURN, (LONG(nb))[0] ENDIF ELSE BEGIN MESSAGE, 'Number of Bands Not Found.' ENDELSE ; END ; ;----------------------------------------------------------------------- ; function MAP_INFO, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fmiw = WHERE(STRPOS(header, "map") NE -1, count) IF (count NE 0) THEN BEGIN fmi = STRTRIM(header[fmiw], 2) b1 = STRPOS(fmi, '{') b2 = STRPOS(fmi, '}', /reverse_search) b2b = STRSPLIT(STRMID(fmi, b1+1, b2-b1-1), ',', /extract) mi = {MapInfo, $ ProjectionName : b2b[0], $ ULRefX : b2b[1], $ ULRefY : b2b[2],$ ULXCoord : b2b[3],$ ULYCoord : b2b[4], $ XS : b2b[5], $ YS : b2b[6], $ Zone : b2b[7], $ Units : b2b[8]} ENDIF ELSE BEGIN mi = {map_info, empty:''} ENDELSE ; RETURN, mi ; END ; ;----------------------------------------------------------------------- ; FUNCTION DATATYPE, header ; COMPILE_OPT hidden ON_ERROR, 2 ; ;; Maybe need a check for correct data type, using filesize and array ;; dimensions before trying to read the data. ; fdtw = WHERE(STRPOS(header, "data type") NE -1, count) IF (count NE 0) THEN BEGIN fdt = STRTRIM(header[fdtw], 2) fdt1 = STRPOS(fdt, '=') dtype = STRMID(fdt, fdt1 + 2) ;; RETURN, (FIX(dtype))[0] ENDIF ELSE BEGIN MESSAGE, 'No Data Type Found.' ENDELSE ; END ; ;----------------------------------------------------------------------- ; FUNCTION interleave, header ; COMPILE_OPT hidden ON_ERROR, 2 ; filw = WHERE(STRPOS(header, "interleave") NE -1, count) IF (count NE 0) THEN BEGIN fil = STRTRIM(header[filw], 2) fil1 = STRPOS(fil, '=') ileave = STRMID(fil, fil1 + 2) ;; IF (STRCMP(ileave, 'BSQ', /fold_case)) EQ 1 THEN BEGIN intleave = 0 ENDIF ELSE BEGIN IF (strcmp(ileave, 'BIL', /fold_case)) EQ 1 THEN BEGIN intleave = 1 ENDIF ELSE BEGIN IF (STRCMP(ileave, 'BIP', /fold_case)) EQ 1 THEN BEGIN intleave = 2 ENDIF ELSE BEGIN MESSAGE, 'Unknown Interleaving; Need either BSQ/BIL/BIP.' ENDELSE ENDELSE ENDELSE ;; ENDIF ELSE BEGIN MESSAGE, 'No Interleave Found, Assuming BSQ.', /continue intleave = 0 ENDELSE ; RETURN, intleave ; END ; ;----------------------------------------------------------------------- ; function READ_HEADER, filename ; COMPILE_OPT hidden ON_ERROR, 2 ; OPENR, lun, filename, /get_lun array = '' line = '' ; WHILE NOT EOF(lun) DO BEGIN READF, lun, line array = [array, line] ENDWHILE ; FREE_LUN, lun RETURN, array[1:*] ; END ; ;----------------------------------------------------------------------- ; function SENSOR_TYPE, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fstw = WHERE(STRPOS(header, "sensor type") NE -1, count) IF (count NE 0) THEN BEGIN fst = STRTRIM(header[fstw], 2) fst1 = STRPOS(fst, '=') stype = (STRMID(fst, fst1 + 2))[0] ;; ENDIF ELSE BEGIN stype = "Unknown" ENDELSE ; RETURN, stype END ; ;----------------------------------------------------------------------- ; function WAVELENGTH_UNITS, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fwuw = WHERE(STRPOS(header, "wavelength units") NE -1, count) IF (count NE 0) THEN BEGIN fwu = STRTRIM(header[fwuw], 2) fwu1 = STRPOS(fwu, '=') wvunits = (STRMID(fwu, fwu1 + 2))[0] ;; ENDIF ELSE BEGIN wvunits = "Unknown" ENDELSE ; RETURN, wvunits END ; ;----------------------------------------------------------------------- ; function BAND_NAMES, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fbnw = WHERE(STRPOS(header, "band names") NE -1, count) IF (count NE 0) THEN BEGIN fbn = STRTRIM(header[fbnw], 2) fbn1 = STRPOS(fbn, '{') ;; eb_array = STRPOS(header[fbnw+1:*], '}') names = '' FOR i = 1, N_ELEMENTS(eb_array) DO BEGIN names = names + header[fbnw+i] ENDFOR eb = STRPOS(names, '}') names = STRTRIM(STRMID(names, 0, eb), 2) b_names = STRSPLIT(names, ',', /extract) ;; ENDIF ELSE BEGIN nb = num_bands(header) band = STRING(LONARR(nb)) number=STRING(LONARR(nb)) b_names=STRING(LONARR(nb)) ;; ;;create the array with value 'Band' placed in each element FOR i=0L, nb[0]-1 DO BEGIN band[i]= 'Band ' ENDFOR ;; ;;create the array with values of 1 to the total number of files FOR i=0L, nb[0]-1 DO BEGIN number[i]= STRTRIM(i+1,1) ENDFOR ;; ;;concatenate (join) the band and number arrays into one singular array FOR i=0L, nb[0]-1 DO BEGIN b_names[i]= band[i] + number[i] ENDFOR ENDELSE ; RETURN, b_names END ; ;----------------------------------------------------------------------- ; function BYTE_ORDER, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fbow = WHERE(STRPOS(header, "byte order") NE -1, count) IF (count NE 0) THEN BEGIN fbo = STRTRIM(header[fbow], 2) fbo1 = STRPOS(fbo, '=') byt_order = (FIX(STRMID(fbo, fbo1 + 2)))[0] ENDIF ELSE BEGIN MESSAGE, 'Byte order not found, assuming byte order of current machine.', /continue byt_order = (BYTE(1,0,1))[0] ? 0 : 1 ENDELSE ; RETURN, byt_order ; END ; ;----------------------------------------------------------------------- ; function HEADER_OFFSET, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fhow = WHERE(STRPOS(header, "header offset") NE -1, count) IF (count NE 0) THEN BEGIN fho = STRTRIM(header[fhow], 2) fho1 = STRPOS(fho, '=') offset = (LONG(STRMID(fho, fho1 + 2)))[0] ENDIF ELSE BEGIN MESSAGE, 'No offset found, assuming zero.', /continue offset = 0L ENDELSE ; RETURN, offset ; END ; ;----------------------------------------------------------------------- ; function DESCRIPTION, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fdsw = WHERE(STRPOS(header, "description") NE -1, count) IF (count NE 0) THEN BEGIN fds = STRTRIM(header[fdsw], 2) fds1 = STRPOS(fds, '{') ;; ;; Using the same method as for band names. It seems to work fine. eb_array = STRPOS(header[fdsw+1:*], '}') desc = '' FOR i = 1, N_ELEMENTS(eb_array) DO BEGIN desc = desc + header[fdsw+i] ENDFOR eb = STRPOS(desc, '}') descrip = (STRTRIM(STRMID(desc, 0, eb), 2))[0] ;; ENDIF ELSE BEGIN descrip = 'None' ENDELSE ; RETURN, descrip ; END ; ;----------------------------------------------------------------------- ; FUNCTION FILETYPE, header ; COMPILE_OPT hidden ON_ERROR, 2 ; fftw = WHERE(STRPOS(header, "file type") NE -1, count) IF (count NE 0) THEN BEGIN ff_t = STRTRIM(header[fftw], 2) fft1 = STRPOS(ff_t, '=') ftype = (STRMID(ff_t, fft1 + 2))[0] ENDIF ELSE BEGIN MESSAGE, 'File type not found, assumed ENVI Standard.', /continue ftype = 'ENVI Standard' ENDELSE ; RETURN, ftype ; END ; ;----------------------------------------------------------------------- ; function F_COMPRESSION, header ; COMPILE_OPT hidden ON_ERROR, 2 ; ffcw = WHERE(STRPOS(header, "file compression") NE -1, count) IF (count NE 0) THEN BEGIN ffc = STRTRIM(header[ffcw], 2) ffc1 = STRPOS(ffc, '=') fc = STRMID(ffc, ffc1 + 2) rfc = FIX(fc[0]) ENDIF ELSE BEGIN rfc = 0 ENDELSE ; RETURN, rfc ; END ; ; ----------------------------------------------------- ; better managing finding the files (.IMG + .HDR or .IMG.HDR + .IMG) ; function ENVI_SELECT_FILENAME, filename, hname, fname, test=test, debug=debug ; suffixe=STRMID(filename, 3, /reverse_offset) files_found=0 ; ; testing first case: HDR file as input. ; IF (STRCMP(suffixe, '.hdr', /fold_case)) EQ 1 THEN BEGIN ;; path path=FILE_DIRNAME(filename, /mark_directory) if path EQ './' then path='' ;; bodyname=FILE_BASENAME(filename, '.hdr') fname=FILE_SEARCH(path+bodyname+'.img',/fold) if (STRLEN(fname) EQ 0) then begin mess='No IMG data file found corresponding to HDR header file : ' MESSAGE, mess+filename endif if (N_ELEMENTS(fname) GT 1) then begin MESSAGE,/continue, 'More than one IMG data file found, first used !' fname=fname[0] endif hname=filename files_found=1 endif ; ; testing first case: IMG file as input. ; IF (STRCMP(suffixe, '.img', /fold_case)) EQ 1 THEN BEGIN ;; path path=FILE_DIRNAME(filename, /mark_directory) if path EQ './' then path='' ;; bodyname=FILE_BASENAME(filename, '.img') ;; we use '*.hdr' because we may have '.img.hdr' or '.hdr' hname=FILE_SEARCH(path+bodyname+'*.hdr',/fold) if (STRLEN(hname) EQ 0) then begin mess='No HDR header file found corresponding to IMG data file : ' MESSAGE, mess+filename endif if (N_ELEMENTS(hname) GT 1) then begin MESSAGE,/continue, 'More than one HDR header file found, first used !' hname=hname[0] endif fname=filename files_found=1 endif ; ; if just the "file_basename" is provide, do we have the files ? ; if (files_found EQ 0) then begin ;; path path=FILE_DIRNAME(filename, /mark_directory) if path EQ './' then path='' ;; hname=FILE_SEARCH(filename+'*.hdr',/fold) fname=FILE_SEARCH(filename+'*.img',/fold) ; if (N_ELEMENTS(hname) EQ 0) then $ MESSAGE, /cont, 'no HDR header file found with given basename pattern' ;; if (N_ELEMENTS(fname) EQ 0) then $ MESSAGE, /cont, 'no IMG data file found with given basename pattern' ;; if ((N_ELEMENTS(hname) EQ 1) AND (N_ELEMENTS(fname) EQ 1)) then begin b1=FILE_BASENAME(hname,'.hdr',/fold) b1bis=FILE_BASENAME(hname,'.img.hdr',/fold) b2=FILE_BASENAME(fname,'.img',/fold) if STRCMP(b1,b2,/fold_case) EQ 1 then files_found=1 if STRCMP(b1bis,b2,/fold_case) EQ 1 then files_found=1 if files_found EQ 0 then begin MESSAGE, /cont, 'bad files names, please check the input filter' endif endif ;; txt='found, please check input filename' if (N_ELEMENTS(hname) GT 1) then begin MESSAGE, /cont, 'More than one HDR header file '+txt endif if (N_ELEMENTS(fname) GT 1) then begin MESSAGE, /cont, 'More than one IMG data file '+txt endif endif ; ; Are really the files around ? Are the files void ? ; if (files_found EQ 1) then begin count=0 if ~FILE_TEST(fname) then begin count++ MESSAGE, /continue, 'IMG data file not found (no file/bad name ?)' endif else begin if FILE_TEST(fname,/zero_length) then begin count++ MESSAGE, /continue, 'IMG data file does not contain data !' endif endelse if ~FILE_TEST(hname) then begin count++ MESSAGE, /continue, 'HDR header file not found (no file/bad name ?)' endif else begin if FILE_TEST(hname,/zero_length) then begin count++ MESSAGE, /continue, 'HDR header file does not contain data !' endif endelse if (count NE 0) then files_found=0 endif ; if (files_found GT 0) then begin PRINT, 'IMG data filename = ', fname PRINT, 'HDR header filename = ', hname PRINT, 'Directory name = ', FILE_DIRNAME(hname, /mark_directory) endif ; if KEYWORD_SET(test) then STOP ; return, files_found ; end ; ;----------------------------------------------------------------------- ; pro READ_ENVI_FILE, filename, image=image, info=info, $ help=help, test=test, debug=debug ; if ~KEYWORD_SET(debug) then ON_ERROR, 2 ; if KEYWORD_SET(help) THEN BEGIN PRINT, 'pro TEST_READ_ENVI, filename, image=image, info=info, $' PRINT, ' help=help, test=test, debug=debug' PRINT, '' PRINT, 'Reads an ENVI style image format. Set info to a variable' PRINT, 'that will contain a structure containing the image' PRINT, 'information such as samples, lines, bands, data type etc.' PRINT, '' PRINT, 'Warning : currently, suffixes can be only .IMG for data files and' PRINT, '(.IMG.HRD or .HDR) for Header files [with any Up/Low case combi]' return ENDIF ; txt='FILENAME (.HDR, .IMG or basename)' ; if N_PARAMS() EQ 0 then filename=DIALOG_PICKFILE(filter='*.hdr') if N_ELEMENTS(filename) GT 1 then $ MESSAGE, 'You can provide only one '+txt+' at once' ; ; from a given file name (w/o extension .hrd/.img + w/o path) ; returning ONE and only one pair of Hname+Fname ; files_found=ENVI_SELECT_FILENAME(filename, hname, fname, test=test) if ~files_found then MESSAGE, 'Please check carrefully the input '+txt ; ; after this point, we have one IMG file and one HDR file ; (existances checked) ; if KEYWORD_SET(debug) then STOP ; hdr = READ_HEADER(hname) ; ;; Get the description info descript = DESCRIPTION(hdr) ; ;; Get samples, lines, bands, datatype, interleave ns = NUM_SAMPLES(hdr) nl = NUM_LINES(hdr) nb = NUM_BANDS(hdr) ; dtype = DATATYPE(hdr) intleave = INTERLEAVE(hdr) ; CASE intleave OF ;; BSQ Interleaving 0: BEGIN CASE dtype OF 0: MESSAGE, 'Undefined Data Type.' 1: image = BYTARR(ns, nl, nb, /nozero) 2: image = INTARR(ns, nl, nb, /nozero) 3: image = LONARR(ns, nl, nb, /nozero) 4: image = FLTARR(ns, nl, nb, /nozero) 5: image = DBLARR(ns, nl, nb, /nozero) 6: image = COMPLEXARR(ns, nl, nb, /nozero) 7: image = STRARR(ns, nl, nb) 8: MESSAGE, 'Structured Arrays Not Supported.' 9: image = DCOMPLEXARR(ns, nl, nb, /nozero) 10: image = PTRARR(ns, nl, nb, /nozero) 11: image = OBJARR(ns, nl, nb, /nozero) 12: image = UINTARR(ns, nl, nb, /nozero) 13: image = ULONARR(ns, nl, nb, /nozero) 14: image = LON64ARR(ns, nl, nb, /nozero) 15: image = ULON64ARR(ns, nl, nb, /nozero) ELSE: MESSAGE, 'Unknown Data Type.' ENDCASE BREAK END ; BIL Interleaving 1: BEGIN CASE dtype OF 0: MESSAGE, 'Undefined Data Type.' 1: image = BYTARR(ns, nb, nl, /nozero) 2: image = INTARR(ns, nb, nl, /nozero) 3: image = LONARR(ns, nb, nl, /nozero) 4: image = FLTARR(ns, nb, nl, /nozero) 5: image = DBLARR(ns, nb, nl, /nozero) 6: image = COMPLEXARR(ns, nb, nl, /nozero) 7: image = STRARR(ns, nb, nl) 8: MESSAGE, 'Structured Arrays Not Supported.' 9: image = DCOMPLEXARR(ns, nb, nl, /nozero) 10: image = PTRARR(ns, nb, nl, /nozero) 11: image = OBJARR(ns, nb, nl, /nozero) 12: image = UINTARR(ns, nb, nl, /nozero) 13: image = ULONARR(ns, nb, nl, /nozero) 14: image = LON64ARR(ns, nb, nl, /nozero) 15: image = ULON64ARR(ns, nb, nl, /nozero) ELSE: MESSAGE, 'Unknown Data Type.' ENDCASE BREAK END ; BIP Interleaving 2: BEGIN CASE dtype OF 0: MESSAGE, 'Undefined Data Type.' 1: image = BYTARR(nb, ns, nl, /nozero) 2: image = INTARR(nb, ns, nl, /nozero) 3: image = LONARR(nb, ns, nl, /nozero) 4: image = FLTARR(nb, ns, nl, /nozero) 5: image = DBLARR(nb, ns, nl, /nozero) 6: image = COMPLEXARR(nb, ns, nl, /nozero) 7: image = STRARR(nb, ns, nl) 8: MESSAGE, 'Structured Arrays Not Supported.' 9: image = DCOMPLEXARR(nb, ns, nl, /nozero) 10: image = PTRARR(nb, ns, nl, /nozero) 11: image = OBJARR(nb, ns, nl, /nozero) 12: image = UINTARR(nb, ns, nl, /nozero) 13: image = ULONARR(nb, ns, nl, /nozero) 14: image = LON64ARR(nb, ns, nl, /nozero) 15: image = ULON64ARR(nb, ns, nl, /nozero) ELSE: MESSAGE, 'Unknown Data Type.' ENDCASE BREAK END ELSE: MESSAGE, 'Unknown Interleave.' ENDCASE ; ;; byte order of file f_byte_order = BYTE_ORDER(hdr) ; ;; file type ftype = FILETYPE(hdr) ; ;; byte order of current machine m_byte_order = (BYTE(1,0,1))[0] ? 0 : 1 ; ;; header offset h_offset = HEADER_OFFSET(hdr) ; ;; file compression compressed = F_COMPRESSION(hdr) ; IF (f_byte_order NE m_byte_order) THEN BEGIN IF compressed NE 0 THEN BEGIN OPENR, lun, fname, /get_lun, /swap_endian, /compress ENDIF ELSE BEGIN OPENR, lun, fname, /get_lun, /swap_endian ENDELSE POINT_LUN, lun, h_offset READU, lun, image FREE_LUN, lun ENDIF ELSE BEGIN ;; Open and read the image file IF compressed NE 0 THEN BEGIN OPENR, lun, fname, /get_lun, /compress ENDIF ELSE BEGIN OPENR, lun, fname, /get_lun ENDELSE POINT_LUN, lun, h_offset READU, lun, image FREE_LUN, lun ENDELSE ; stype = SENSOR_TYPE(hdr) wl_units = WAVELENGTH_UNITS(hdr) bnames = BAND_NAMES(hdr) info = {Samples:ns, Lines:nl, Bands:nb, Data_Type:dtype,$ Interleave:intleave, Filename:fname, Sensor_Type:stype, $ Wavelength_Units:wl_units, Band_Names:bnames, $ Byte_Order:f_byte_order, Header_offset:h_offset, $ Description:descript, File_Type:ftype} ; if KEYWORD_SET(test) then STOP ; END gdl-0.9.7/src/pro/envi/Makefile.am0000664000175100017510000000024513040614410016537 0ustar coulaiscoulaisprolibenvidir = $(GDLDATADIR)/lib/envi prolibenvi_DATA = \ read_envi_file.pro \ test_write_read_envi.pro \ write_envi_file.pro EXTRA_DIST = $(prolibenvi_DATA) gdl-0.9.7/src/pro/envi/write_envi_file.pro0000664000175100017510000001177613040614410020412 0ustar coulaiscoulais;+ ; ; NAME: ; WRITE_ENVI_FILE ; PURPOSE: ; Writes an ENVI style formatted image file (both compressed and ; uncompressed). ; ; CATEGORY: ; File I/O ; ; CALLING SEQUENCE: ; WRITE_ENVI_FILE, data, out_name=outname, ns=ns, nl=nl, nb=nb, ; interleave=interleave, bnames=bnames, data_type=dtype, ; byte_order=byte_order, descrip=descrip, ; compress=compress, help=help, test=test ; ; KEYWORD PARAMETERS: ; data: The variable containing the image data ; out_name: A string detailing the name of the file to be written ; ns: The number of samples in the array ; nl: The number of lines in the array ; nb: The number of bands in the array ; interleave: Optional; specify the interleave (0:BSQ, 1:BIL, 2:BIP) ; bnames: Optional; specify the band names to be output ; data_type: Optional; Specify the data type of the array (Check IDL/GDL ; data types for relevant codes) ; byte_order: Optional; Specify the byte ordering of the machine ; descrip: Optional; Specify a description of the data ; Compress: If set will compress the file. ; HELP: Showing how to use and exit ; ; OUTPUTS: ; Writes an ENVI style formatted image file. ; ; MODIFICATION HISTORY: ; 02-Jul-2012: Written by Josh Sixsmith ; ; LICENCE: ; Copyright (C) 2012, Josh Sixsmith ; 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 3 of the License, or ; (at your option) any later version. ; ;- pro WRITE_ENVI_FILE, data, out_name=outname, ns=ns, nl=nl, nb=nb, $ interleave=interleave, bnames=bnames, data_type=dtype, $ byte_order=byte_order, descrip=descrip, $ compress=compress, help=help, test=test IF KEYWORD_SET(help) THEN BEGIN PRINT, 'pro WRITE_ENVI_FILE, data, out_name=outname, ns=ns, $' PRINT, ' nl=nl, nb=nb, interleave=interleave, $' PRINT, ' bnames=bnames, data_type=dtype, $' PRINT, ' byte_order=byte_order, descrip=descrip, $' PRINT, ' compress=compress, help=help, test=test' return ENDIF ;; IF N_ELEMENTS(outname) EQ 0 THEN MESSAGE, 'Output filename not specified.' IF N_ELEMENTS(ns) EQ 0 THEN MESSAGE, 'Number of samples not specified.' IF N_ELEMENTS(nl) EQ 0 THEN MESSAGE, 'Number of lines not specified.' IF N_ELEMENTS(nb) EQ 0 THEN MESSAGE, 'Number of bands not specified.' ;; IF N_ELEMENTS(interleave) EQ 0 THEN interleave=0 IF N_ELEMENTS(offset) EQ 0 THEN offset=0 IF N_ELEMENTS(byte_order) EQ 0 THEN byte_order = (BYTE(1,0,1))[0] ? 0 : 1 IF N_ELEMENTS(dtype) EQ 0 THEN dtype = SIZE(data, /type) ;; ;; Write the header file hname = outname + '.hdr' OPENW, lun, hname, /get_lun ;; IF N_ELEMENTS(descrip) EQ 0 THEN BEGIN PRINTF, lun, format = '(%"ENVI \ndescription= {\n Create New File Result [%s]}")', SYSTIME() ENDIF ELSE BEGIN PRINTF, lun, format = '(%"ENVI \ndescription= {\n %s [%s]}")', descrip, SYSTIME() ENDELSE ;; PRINTF, lun, format = '(%"samples = %i")', ns PRINTF, lun, format = '(%"lines = %i")', nl PRINTF, lun, format = '(%"bands = %i")', nb PRINTF, lun, format = '(%"data type = %i")', dtype ;; IF KEYWORD_SET(compress) THEN BEGIN cmpr = 1 PRINTF, lun, format = '(%"file compression = %i")', cmpr ENDIF ;; CASE interleave OF 0: intleave = 'bsq' 1: intleave = 'bil' 2: intleave = 'bip' ENDCASE ;; PRINTF, lun, format='(%"interleave = %s")', intleave PRINTF, lun, format='(%"byte order = %i")', byte_order ;; IF N_ELEMENTS(bnames) EQ 0 THEN BEGIN ;; band=STRING(LONARR(nb)) number=STRING(LONARR(nb)) bnames=STRING(LONARR(nb)) ;; ;;create the array with value 'Band' placed in each element FOR i=0L, nb-1 DO BEGIN band[i]= 'Band ' ENDFOR ;; ;; create the array with values of 1 to the total number of files FOR i=0L, nb-1 DO BEGIN number[i]= STRTRIM(i+1,1) ENDFOR ;; ;; concatenate (join) the band and number arrays into one singular array FOR i=0L, nb-1 DO BEGIN bnames[i]= band[i] + number[i] ENDFOR ;; ENDIF ; PRINTF, lun, "band names = {" ; IF nb LE 2 THEN BEGIN IF nb EQ 1 THEN BEGIN PRINTF, lun, format='(%"%s}")', bnames ENDIF ELSE BEGIN PRINTF, lun, format='(%"%s,")', bnames[0] PRINTF, lun, format='(%"%s}")', bnames[1] ENDELSE ENDIF ELSE BEGIN FOR i=0, nb-2 DO BEGIN PRINTF, lun, format='(%"%s,")', bnames[i] ENDFOR PRINTF, lun, format='(%"%s}")', bnames[i] ENDELSE ; FREE_LUN, lun ; ; Write the image file ; IF KEYWORD_SET(compress) then begin OPENW, lun, outname, /get_lun, /compress ENDIF ELSE BEGIN OPENW, lun, outname, /get_lun ENDELSE WRITEU, lun, data FREE_LUN, lun ; if KEYWORD_SET(test) then STOP ; END gdl-0.9.7/src/pro/variance.pro0000664000175100017510000000324013040614410016052 0ustar coulaiscoulais;$Id: variance.pro,v 1.3 2012/07/13 22:28:02 alaingdl Exp $ ; function VARIANCE, x, double=double, NaN=NaN, dimension=dimension ; ;+ ; ; NAME: VARIANCE ; ; PURPOSE: ; Calculates the variance of the input data ; ; CATEGORY: ; Mathematics: Statistics ; ; CALLING SEQUENCE: ; Result=variance(x) ; ; KEYWORD PARAMETERS: ; DOUBLE : Keyword for double precision calculation ; NAN : Flag to treat IEEE Special Floating-Point values as missing data ; DIMENSION : if absent or equal to zero, compute the variance over the ; whole data. otherwise, compute along the related dimension. ; ; OUTPUTS: ; Result is the variance of input data ; ; RESTRICTIONS: ; The input x needs to be an array of numbers (i.e not strings, ; struct, ptr, object) ; ; PROCEDURE: ; variance = 1/(N-1) sum((x-mean(x))^2), ; Uses the MOMENT function ; ; EXAMPLE: ; a=FINDGEN(100) ; result=VARIANCE(a) ; print, result ; 841.667 ; ; MODIFICATION HISTORY: ; 20-Mar-2004 : Written by Christopher Lee ; 18-Jul-2005 : PC, moment.pro update ; 13-Jul-2012 : Alain Coulais : adding DIMENSION keyword, using MOMENT() ; ; LICENCE: ; Copyright (C) 2004, Christopher Lee, 2005 P. Chanial, 2012 Alain Coulais ; ; 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. ; ;- ; ON_ERROR, 2 ; tmp = MOMENT(x, variance=variance, double=double, NaN=NaN, $ dimension=dimension, maxmoment=2) ; return, variance ; end gdl-0.9.7/src/pro/read_ascii.pro0000664000175100017510000003402313040614410016350 0ustar coulaiscoulais;+ ; NAME: READ_ASCII ; ; ; PURPOSE: Reads an ASCII file. The output is a structure whose tags contains ; columns (1D array) from the file. Its use is flexible: the user can ; specify the types, and tag names of the fields and he/she also can ; group columns into a single tag (2D array). ; ; ; CATEGORY: IO ; ; ; CALLING SEQUENCE: ; structure=read_ascii(filename, count=, data_start=, delimiter=, ; missing_value=, comment_symbol=, record_start= ; num_records=, template=, header=, verbose=) ; ; ; INPUT: ; filename Name of the ASCII file to be read ; ; ; KEYED INPUTS: ; data_start Specify the number of lines that constitute the header ; These lines will be discarded as records, but are available ; with the header keyword ; ; delimiter If set (or non equal to ''), the records will be split ; according to the supplied delimiter locations and the length ; of the fields is not necessarily the same for all records. ; Otherwise, template.fieldlocations will be used to identify ; the fields (columns). If the template is not provided, the ; delimiter default is ' ' ; ; missing_value Specify the value that will be used for missing or ; non-numeric values ; ; comment_symbol Comment symbol. The part of the line that begins with ; the comment symbol and ends to the end of line is discarded ; Default is ';' ; ; record_start Record number of the first record to be read (starts from 0) ; ; num_record Number of records to be read ; ; template structure that defines how the file will be processed ; the tags datastart, delimiter, missingvalue and commentsymbol ; can be overridden by the keywords data_start, delimiter, ; missing_value and comment_symbol. ; ; template.VERSION template version number (not used) ; template.FIELDCOUNT=n number of fields ; template.FIELDNAMES[n] field names ; template.FIELDTYPES[n] field integer types ; template.FIELDGROUPS[n] group ID. fields can be grouped into a single tag ; template.FIELDLOCATIONS[n] start positions of the fields ; template.DATASTART see data_start keyed input ; template.DELIMITER see delimiter keyed input ; template.MISSINGVALUE see missing_value keyed input ; template.COMMENTSYMBOL see comment_symbol keyed input ; ; if field of different types are grouped together, the following priority ; if assumed to determine the tag type: ; BYTE