Home | History | Annotate | Line # | Download | only in m4
      1 include(head.m4)dnl
      2 dnl
      3 dnl This file contains the specific functions that are not handled in the
      4 dnl m4/specific.m4 file.
      5 
      6 #include "config.h"
      7 #include "kinds.inc"
      8 
      9 dnl This is from GNU m4 examples file foreach.m4:
     10 divert(-1)
     11 # foreach(x, (item_1, item_2, ..., item_n), stmt)
     12 define(`foreach', `pushdef(`$1', `')_foreach(`$1', `$2',
     13 `$3')popdef(`$1')')
     14 define(`_arg1', `$1')
     15 define(`_foreach',
     16         `ifelse(`$2', `()', ,
     17                 `define(`$1', _arg1$2)$3`'_foreach(`$1', (shift$2),
     18 `$3')')')
     19 # traceon(`define', `foreach', `_foreach', `ifelse')
     20 divert
     21 
     22 dnl   NINT specifics
     23 foreach(`ikind', `(4, 8, 16)', `foreach(`rkind', `(4, 8, 10, 16)', `
     24 `#if defined (HAVE_GFC_REAL_'rkind`) && defined (HAVE_GFC_INTEGER_'ikind`)'
     25 elemental function _gfortran_specific__nint_`'ikind`_'rkind (parm)
     26    real (kind=rkind) , intent (in) :: parm
     27    integer (kind=ikind) :: _gfortran_specific__nint_`'ikind`_'rkind
     28    _gfortran_specific__nint_`'ikind`_'rkind = nint (parm)
     29 end function
     30 #endif
     31 ')')
     32 
     33 dnl   CHAR specifics
     34 foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', `
     35 `#if defined (HAVE_GFC_INTEGER_'ikind`)'
     36 elemental function _gfortran_specific__char_`'ckind`_i'ikind (parm)
     37    integer (kind=ikind) , intent (in) :: parm
     38    character (kind=ckind,len=1) :: _gfortran_specific__char_`'ckind`_i'ikind
     39    _gfortran_specific__char_`'ckind`_i'ikind` = char (parm, kind='ckind`)'
     40 end function
     41 #endif
     42 ')')
     43 
     44 dnl   LEN specifics
     45 foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', `
     46 `#if defined (HAVE_GFC_INTEGER_'ikind`)'
     47 elemental function _gfortran_specific__len_`'ckind`_i'ikind (parm)
     48    character (kind=ckind,len=*) , intent (in) :: parm
     49    integer (kind=ikind) :: _gfortran_specific__len_`'ckind`_i'ikind
     50    _gfortran_specific__len_`'ckind`_i'ikind` = len (parm)'
     51 end function
     52 #endif
     53 ')')
     54 
     55 dnl   INDEX specifics
     56 foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', `
     57 `#if defined (HAVE_GFC_INTEGER_'ikind`)'
     58 elemental function _gfortran_specific__index_`'ckind`_i'ikind (parm1, parm2)
     59    character (kind=ckind,len=*) , intent (in) :: parm1, parm2
     60    integer (kind=ikind) :: _gfortran_specific__index_`'ckind`_i'ikind
     61    _gfortran_specific__index_`'ckind`_i'ikind` = index (parm1, parm2)'
     62 end function
     63 #endif
     64 ')')
     65