diff options
Diffstat (limited to 'hl/fortran/src/H5IMff.F90')
-rw-r--r-- | hl/fortran/src/H5IMff.F90 | 667 |
1 files changed, 667 insertions, 0 deletions
diff --git a/hl/fortran/src/H5IMff.F90 b/hl/fortran/src/H5IMff.F90 new file mode 100644 index 0000000..4408dda --- /dev/null +++ b/hl/fortran/src/H5IMff.F90 @@ -0,0 +1,667 @@ +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! Copyright by The HDF Group. * +! Copyright by the Board of Trustees of the University of Illinois. * +! All rights reserved. * +! * +! This file is part of HDF5. The full HDF5 copyright notice, including * +! terms governing use, modification, and redistribution, is contained in * +! the files COPYING and Copyright.html. COPYING can be found at the root * +! of the source code distribution tree; Copyright.html can be found at the * +! root level of an installed copy of the electronic HDF5 document set and * +! is linked from the top-level documents page. It can also be found at * +! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * +! access to either file, you may request a copy from help@hdfgroup.org. * +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! +! +! This file contains FORTRAN interfaces for H5IM functions +! +! NOTES +! +! _____ __ __ _____ ____ _____ _______ _ _ _______ +! |_ _| \/ | __ \ / __ \| __ \__ __|/\ | \ | |__ __| +! **** | | | \ / | |__) | | | | |__) | | | / \ | \| | | | **** +! **** | | | |\/| | ___/| | | | _ / | | / /\ \ | . ` | | | **** +! **** _| |_| | | | | | |__| | | \ \ | |/ ____ \| |\ | | | **** +! |_____|_| |_|_| \____/|_| \_\ |_/_/ \_\_| \_| |_| +! +! If you add a new function here then you MUST add the function name to the +! Windows dll file 'hdf5_hl_fortrandll.def.in' in the hl/fortran/src directory. +! This is needed for Windows based operating systems. +! + +MODULE h5im + USE, INTRINSIC :: ISO_C_BINDING + USE h5fortran_types + USE hdf5 +CONTAINS + +!------------------------------------------------------------------------- +! Function: h5immake_image_8bit_f +! +! Purpose: Creates and writes an image an 8 bit image +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 05, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5immake_image_8bit_f(loc_id,& + dset_name,& + width,& + height,& + buf,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(in) :: width ! width of image + INTEGER(hsize_t), INTENT(in) :: height ! height of image + INTEGER, INTENT(in), DIMENSION(*) :: buf ! buffer + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + + INTERFACE + INTEGER FUNCTION h5immake_image_8bit_c(loc_id,namelen,dset_name,width,height,buf) & + BIND(C,NAME='h5immake_image_8bit_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T, HSIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + INTEGER(size_t) :: namelen ! length of name buffer + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(in) :: width ! width of image + INTEGER(hsize_t), INTENT(in) :: height ! height of image + INTEGER , INTENT(in), DIMENSION(*) :: buf ! buffer + END FUNCTION h5immake_image_8bit_c + END INTERFACE + + namelen = LEN(dset_name) + errcode = h5immake_image_8bit_c(loc_id,namelen,dset_name,width,height,buf) + + END SUBROUTINE h5immake_image_8bit_f + +!------------------------------------------------------------------------- +! Function: h5imread_image_f +! +! Purpose: Reads image data from disk. +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 05, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + SUBROUTINE h5imread_image_f(loc_id,& + dset_name,& + buf,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER, INTENT(inout), DIMENSION(*) :: buf ! buffer + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + + INTERFACE + INTEGER FUNCTION h5imread_image_c(loc_id,namelen,dset_name,buf) & + BIND(C,NAME='h5imread_image_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + INTEGER(size_t) :: namelen ! length of name buffer + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + INTEGER, INTENT(inout), DIMENSION(*) :: buf ! buffer + END FUNCTION h5imread_image_c + END INTERFACE + + namelen = LEN(dset_name) + errcode = h5imread_image_c(loc_id,namelen,dset_name,buf) + + END SUBROUTINE h5imread_image_f + +!------------------------------------------------------------------------- +! Function: h5immake_image_24bit_f +! +! Purpose: Creates and writes an image a 24 bit image +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 05, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5immake_image_24bit_f(loc_id,& + dset_name,& + width,& + height,& + il,& + buf,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(in) :: width ! width of image + INTEGER(hsize_t), INTENT(in) :: height ! height of image + CHARACTER(len=*), INTENT(in) :: il ! interlace + INTEGER, INTENT(in), DIMENSION(*) :: buf ! buffer + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + INTEGER(size_t) :: ILEN ! name length + + INTERFACE + INTEGER FUNCTION h5immake_image_24bit_c(loc_id,namelen,dset_name,ILEN,il,width,height,buf) & + BIND(C,NAME='h5immake_image_24bit_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T, HSIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(in) :: width ! width of image + INTEGER(hsize_t), INTENT(in) :: height ! height of image + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: il ! interlace + INTEGER, INTENT(in), DIMENSION(*) :: buf ! buffer + INTEGER(size_t) :: namelen ! length of name buffer + INTEGER(size_t) :: ILEN ! name length + + END FUNCTION h5immake_image_24bit_c + END INTERFACE + + namelen = LEN(dset_name) + ILEN = LEN(il) + errcode = h5immake_image_24bit_c(loc_id,namelen,dset_name,ILEN,il,width,height,buf) + + END SUBROUTINE h5immake_image_24bit_f + +!------------------------------------------------------------------------- +! Function: h5imget_image_info_f +! +! Purpose: Gets information about an image dataset (dimensions, interlace mode +! and number of associated palettes). +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 05, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5imget_image_info_f(loc_id,& + dset_name,& + width,& + height,& + planes,& + interlace,& + npals,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(inout) :: width ! width of image + INTEGER(hsize_t), INTENT(inout) :: height ! height of image + INTEGER(hsize_t), INTENT(inout) :: planes ! color planes + INTEGER(hsize_t), INTENT(inout) :: npals ! palettes + CHARACTER(len=*), INTENT(inout) :: interlace ! interlace + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + INTEGER(size_t) :: ILEN ! name length + + INTERFACE + INTEGER FUNCTION h5imget_image_info_c(loc_id,namelen,dset_name,width,height,planes,npals,ILEN,interlace) & + BIND(C,NAME='h5imget_image_info_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T, HSIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(inout) :: width ! width of image + INTEGER(hsize_t), INTENT(inout) :: height ! height of image + INTEGER(hsize_t), INTENT(inout) :: planes ! color planes + INTEGER(hsize_t), INTENT(inout) :: npals ! palettes + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(inout) :: interlace ! interlace + INTEGER(size_t) :: namelen ! name length + INTEGER(size_t) :: ILEN ! name length + END FUNCTION h5imget_image_info_c + END INTERFACE + + namelen = LEN(dset_name) + ILEN = LEN(interlace) + errcode = h5imget_image_info_c(loc_id,namelen,dset_name,width,height,planes,npals,ILEN,interlace) + + END SUBROUTINE h5imget_image_info_f + +!------------------------------------------------------------------------- +! Function: h5imis_image_f +! +! Purpose: Inquires if a dataset is an image +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 05, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + INTEGER FUNCTION h5imis_image_f(loc_id,& + dset_name) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + + INTERFACE + INTEGER FUNCTION h5imis_image_c(loc_id,namelen,dset_name) & + BIND(C,NAME='h5imis_image_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + INTEGER(size_t) :: namelen ! length of name buffer + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + END FUNCTION h5imis_image_c + END INTERFACE + + namelen = LEN(dset_name) + errcode = h5imis_image_c(loc_id,namelen,dset_name) + h5imis_image_f = errcode + + END FUNCTION h5imis_image_f + + +!------------------------------------------------------------------------- +! Function: h5immake_palette_f +! +! Purpose: Creates and writes a palette +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 06, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5immake_palette_f(loc_id,& + dset_name,& + pal_dims,& + buf,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(in), DIMENSION(*) :: pal_dims ! dimensions + INTEGER, INTENT(in), DIMENSION(*) :: buf ! buffer + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + + INTERFACE + INTEGER FUNCTION h5immake_palette_c(loc_id,namelen,dset_name,pal_dims,buf) & + BIND(C,NAME='h5immake_palette_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T, HSIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + INTEGER(size_t) :: namelen ! length of name buffer + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(in), DIMENSION(*) :: pal_dims ! dimensions + INTEGER, INTENT(in), DIMENSION(*) :: buf ! buffer + END FUNCTION h5immake_palette_c + END INTERFACE + + namelen = LEN(dset_name) + errcode = h5immake_palette_c(loc_id,namelen,dset_name,pal_dims,buf) + + END SUBROUTINE h5immake_palette_f + +!------------------------------------------------------------------------- +! Function: h5imlink_palette_f +! +! Purpose: This function attaches a palette to an existing image dataset +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 06, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5imlink_palette_f(loc_id,& + dset_name,& + pal_name,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + CHARACTER(len=*), INTENT(in) :: pal_name ! palette name + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + INTEGER(size_t) :: ILEN ! name length + + INTERFACE + INTEGER FUNCTION h5imlink_palette_c(loc_id,namelen,dset_name,ILEN,pal_name) & + BIND(C,NAME='h5imlink_palette_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: pal_name ! palette name + INTEGER(size_t) :: namelen ! name length + INTEGER(size_t) :: ILEN ! name length + END FUNCTION h5imlink_palette_c + END INTERFACE + + namelen = LEN(dset_name) + ILEN = LEN(pal_name) + errcode = h5imlink_palette_c(loc_id,namelen,dset_name,ILEN,pal_name) + + END SUBROUTINE h5imlink_palette_f + + +!------------------------------------------------------------------------- +! Function: h5imunlink_palette_f +! +! Purpose: This function dettaches a palette to an existing image dataset +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 06, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5imunlink_palette_f(loc_id,& + dset_name,& + pal_name,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + CHARACTER(len=*), INTENT(in) :: pal_name ! palette name + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + INTEGER(size_t) :: ILEN ! name length + + INTERFACE + INTEGER FUNCTION h5imunlink_palette_c(loc_id,namelen,dset_name,ILEN,pal_name) & + BIND(C,NAME='h5imunlink_palette_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: pal_name ! palette name + INTEGER(size_t) :: namelen ! name length + INTEGER(size_t) :: ILEN ! name length + END FUNCTION h5imunlink_palette_c + END INTERFACE + + namelen = LEN(dset_name) + ILEN = LEN(pal_name) + errcode = h5imunlink_palette_c(loc_id,namelen,dset_name,ILEN,pal_name) + + END SUBROUTINE h5imunlink_palette_f + +!------------------------------------------------------------------------- +! Function: h5imget_npalettes_f +! +! Purpose: Gets the number of palettes associated to an image +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 05, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5imget_npalettes_f(loc_id,& + dset_name,& + npals,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(inout) :: npals ! palettes + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + + INTERFACE + INTEGER FUNCTION h5imget_npalettes_c(loc_id,namelen,dset_name,npals) & + BIND(C,NAME='h5imget_npalettes_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T, HSIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + INTEGER(hsize_t), INTENT(inout) :: npals ! palettes + INTEGER(size_t) :: namelen ! name length + END FUNCTION h5imget_npalettes_c + END INTERFACE + + namelen = LEN(dset_name) + errcode = h5imget_npalettes_c(loc_id,namelen,dset_name,npals) + + END SUBROUTINE h5imget_npalettes_f + + +!------------------------------------------------------------------------- +! Function: h5imget_palette_info_f +! +! Purpose: Get palette information +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 06, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5imget_palette_info_f(loc_id,& + dset_name,& + pal_number,& + dims,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER, INTENT(in) :: pal_number ! palette number + INTEGER(hsize_t), DIMENSION(*), INTENT(inout) :: dims ! dimensions + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + + INTERFACE + INTEGER FUNCTION h5imget_palette_info_c(loc_id,namelen,dset_name,pal_number,dims) & + BIND(C,NAME='h5imget_palette_info_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T, HSIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + INTEGER, INTENT(in) :: pal_number ! palette number + INTEGER(hsize_t), DIMENSION(*), INTENT(inout) :: dims ! dimensions + INTEGER(size_t) :: namelen ! name length + END FUNCTION h5imget_palette_info_c + END INTERFACE + + namelen = LEN(dset_name) + errcode = h5imget_palette_info_c(loc_id,namelen,dset_name,pal_number,dims) + + END SUBROUTINE h5imget_palette_info_f + +!------------------------------------------------------------------------- +! Function: h5imget_palette_f +! +! Purpose: Reads palette +! +! Return: Success: 0, Failure: -1 +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 06, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + SUBROUTINE h5imget_palette_f(loc_id,& + dset_name,& + pal_number,& + buf,& + errcode ) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER, INTENT(in) :: pal_number ! palette number + INTEGER, INTENT(inout), DIMENSION(*) :: buf ! buffer + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + + INTERFACE + INTEGER FUNCTION h5imget_palette_c(loc_id,namelen,dset_name,pal_number,buf) & + BIND(C,NAME='h5imget_palette_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + INTEGER(size_t) :: namelen ! length of name buffer + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + INTEGER, INTENT(in) :: pal_number ! palette number + INTEGER, INTENT(inout), DIMENSION(*) :: buf ! buffer + END FUNCTION h5imget_palette_c + END INTERFACE + + namelen = LEN(dset_name) + errcode = h5imget_palette_c(loc_id,namelen,dset_name,pal_number,buf) + + END SUBROUTINE h5imget_palette_f + + +!------------------------------------------------------------------------- +! Function: h5imis_palette_f +! +! Purpose: Inquires if a dataset is a palette +! +! Return: true, false, fail +! +! Programmer: pvn@ncsa.uiuc.edu +! +! Date: October 06, 2004 +! +! Comments: +! +! Modifications: +! +!------------------------------------------------------------------------- + + INTEGER FUNCTION h5imis_palette_f(loc_id,& + dset_name) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset + INTEGER :: errcode ! error code + INTEGER(size_t) :: namelen ! name length + + INTERFACE + INTEGER FUNCTION h5imis_palette_c(loc_id,namelen,dset_name) & + BIND(C,NAME='h5imis_palette_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier + INTEGER(size_t) :: namelen ! length of name buffer + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dset_name ! name of the dataset + END FUNCTION h5imis_palette_c + END INTERFACE + + namelen = LEN(dset_name) + errcode = h5imis_palette_c(loc_id,namelen,dset_name) + h5imis_palette_f = errcode + + END FUNCTION h5imis_palette_f + +END MODULE H5IM + + + + + |