diff --git a/examples/regex/regex.f90 b/examples/regex/regex.f90 index ef105d6..6631bf6 100644 --- a/examples/regex/regex.f90 +++ b/examples/regex/regex.f90 @@ -11,9 +11,9 @@ program main character(len=*), parameter :: STRING = 'fortran' character(len=*), parameter :: PATTERN = '^[:lower:]*' - character(len=32), target :: err + character(len=32), target :: err_str integer :: rc - integer(kind=i8) :: sz + integer(kind=c_size_t) :: sz type(c_regex_t) :: regex ! Compile regular expression. @@ -25,27 +25,27 @@ program main if (rc /= 0) then sz = c_regerror(errcode = rc, & preg = regex, & - errbuf = c_loc(err), & - errbuf_size = len(err, kind=i8)) + errbuf = c_loc(err_str), & + errbuf_size = len(err_str, kind=c_size_t)) if (sz > 0) then - print '(2a)', 'regcomp(): ', trim(err) + print '("regcomp(): ", a)', trim(err_str) else call c_perror('regerror()' // c_null_char) end if end if - ! Execute regular expression. Returns `0`, if pattern matches. + ! Execute regular expression. Returns 0 if pattern matches. rc = c_regexec(preg = regex, & string = STRING // c_null_char, & - nmatch = int(0, kind=i8), & + nmatch = 0_c_size_t, & pmatch = c_null_ptr, & eflags = 0) if (rc == 0) then - print '(a)', 'Pattern matches!' + print '("Pattern matches!")' else if (rc == REG_NOMATCH) then - print '(a)', 'Pattern does not match.' + print '("Pattern does not match.")' end if ! Does not free `regex` itself. diff --git a/src/unix_termios.F90 b/src/unix_termios.F90 index f132573..0e6874b 100644 --- a/src/unix_termios.F90 +++ b/src/unix_termios.F90 @@ -7,23 +7,6 @@ module unix_termios #if defined (__linux__) - integer, parameter, public :: c_cc_t = c_unsigned_char - integer, parameter, public :: c_speed_t = c_unsigned_int - integer, parameter, public :: c_tcflag_t = c_unsigned_int - - integer, parameter, public :: NCCS = 32 - - type, bind(c), public :: c_termios - integer(kind=c_tcflag_t) :: c_iflag = 0_c_tcflag_t - integer(kind=c_tcflag_t) :: c_oflag = 0_c_tcflag_t - integer(kind=c_tcflag_t) :: c_cflag = 0_c_tcflag_t - integer(kind=c_tcflag_t) :: c_lflag = 0_c_tcflag_t - integer(kind=c_cc_t) :: c_line = 0_c_cc_t - integer(kind=c_cc_t) :: c_cc(0:NCCS - 1) = 0_c_cc_t - integer(kind=c_speed_t) :: c_ispeed = 0_c_speed_t - integer(kind=c_speed_t) :: c_ospeed = 0_c_speed_t - end type c_termios - integer(kind=c_int), parameter, public :: VINTR = 0 integer(kind=c_int), parameter, public :: VQUIT = 1 integer(kind=c_int), parameter, public :: VERASE = 2 @@ -156,24 +139,21 @@ module unix_termios integer(kind=c_int), parameter, public :: TIOCMBIS = int(z'5416') integer(kind=c_int), parameter, public :: TIOCMSET = int(z'5418') -#elif defined (__FreeBSD__) - - integer, parameter, public :: c_cc_t = c_unsigned_char - integer, parameter, public :: c_speed_t = c_int - integer, parameter, public :: c_tcflag_t = c_int - - integer, parameter, public :: NCCS = 20 + integer, parameter, public :: NCCS = 32 type, bind(c), public :: c_termios integer(kind=c_tcflag_t) :: c_iflag = 0_c_tcflag_t integer(kind=c_tcflag_t) :: c_oflag = 0_c_tcflag_t integer(kind=c_tcflag_t) :: c_cflag = 0_c_tcflag_t integer(kind=c_tcflag_t) :: c_lflag = 0_c_tcflag_t + integer(kind=c_cc_t) :: c_line = 0_c_cc_t integer(kind=c_cc_t) :: c_cc(0:NCCS - 1) = 0_c_cc_t integer(kind=c_speed_t) :: c_ispeed = 0_c_speed_t integer(kind=c_speed_t) :: c_ospeed = 0_c_speed_t end type c_termios +#elif defined (__FreeBSD__) + integer(kind=c_int), parameter, public :: VEOF = 0 ! ICANON integer(kind=c_int), parameter, public :: VEOL = 1 ! ICANON integer(kind=c_int), parameter, public :: VEOL2 = 2 ! ICANON together with IEXTEN @@ -315,6 +295,18 @@ module unix_termios integer(kind=c_int), parameter, public :: TIOCSTART = int(z'2000746e') integer(kind=c_int), parameter, public :: TIOCSTOP = int(z'2000746f') + integer, parameter, public :: NCCS = 20 + + type, bind(c), public :: c_termios + integer(kind=c_tcflag_t) :: c_iflag = 0_c_tcflag_t + integer(kind=c_tcflag_t) :: c_oflag = 0_c_tcflag_t + integer(kind=c_tcflag_t) :: c_cflag = 0_c_tcflag_t + integer(kind=c_tcflag_t) :: c_lflag = 0_c_tcflag_t + integer(kind=c_cc_t) :: c_cc(0:NCCS - 1) = 0_c_cc_t + integer(kind=c_speed_t) :: c_ispeed = 0_c_speed_t + integer(kind=c_speed_t) :: c_ospeed = 0_c_speed_t + end type c_termios + #endif public :: c_cfgetispeed diff --git a/src/unix_types.F90 b/src/unix_types.F90 index 8b050d0..35bcc96 100644 --- a/src/unix_types.F90 +++ b/src/unix_types.F90 @@ -13,43 +13,52 @@ module unix_types integer, parameter, public :: c_uint32_t = c_int32_t integer, parameter, public :: c_uint64_t = c_int64_t - integer, parameter, public :: c_in_addr_t = c_uint32_t - integer, parameter, public :: c_key_t = c_long - integer, parameter, public :: c_pid_t = c_int32_t - #if defined (__linux__) integer, parameter, public :: c_blkcnt_t = c_int64_t integer, parameter, public :: c_blksize_t = c_long + integer, parameter, public :: c_cc_t = c_unsigned_char integer, parameter, public :: c_clockid_t = c_int32_t integer, parameter, public :: c_dev_t = c_unsigned_long integer, parameter, public :: c_gid_t = c_uint32_t + integer, parameter, public :: c_in_addr_t = c_uint32_t integer, parameter, public :: c_ino_t = c_unsigned_long + integer, parameter, public :: c_key_t = c_long integer, parameter, public :: c_mode_t = c_uint32_t integer, parameter, public :: c_mqd_t = c_int integer, parameter, public :: c_nlink_t = c_unsigned_long integer, parameter, public :: c_off_t = c_long + integer, parameter, public :: c_pid_t = c_int32_t integer, parameter, public :: c_socklen_t = c_int64_t + integer, parameter, public :: c_speed_t = c_unsigned_int integer, parameter, public :: c_suseconds_t = c_int + integer, parameter, public :: c_tcflag_t = c_unsigned_int integer, parameter, public :: c_time_t = c_long integer, parameter, public :: c_uid_t = c_uint32_t integer, parameter, public :: c_useconds_t = c_int32_t #elif defined (__FreeBSD__) + integer, parameter, public :: c_blkcnt_t = c_int64_t integer, parameter, public :: c_blksize_t = c_int32_t + integer, parameter, public :: c_cc_t = c_unsigned_char integer, parameter, public :: c_clockid_t = c_int32_t integer, parameter, public :: c_dev_t = c_uint64_t integer, parameter, public :: c_fflags_t = c_uint32_t integer, parameter, public :: c_gid_t = c_uint32_t + integer, parameter, public :: c_in_addr_t = c_uint32_t integer, parameter, public :: c_ino_t = c_uint64_t - integer, parameter, public :: c_mqd_t = c_long + integer, parameter, public :: c_key_t = c_long integer, parameter, public :: c_mode_t = c_uint16_t + integer, parameter, public :: c_mqd_t = c_long integer, parameter, public :: c_nlink_t = c_uint64_t integer, parameter, public :: c_off_t = c_int64_t + integer, parameter, public :: c_pid_t = c_int32_t integer, parameter, public :: c_socklen_t = c_size_t + integer, parameter, public :: c_speed_t = c_int integer, parameter, public :: c_suseconds_t = c_long + integer, parameter, public :: c_tcflag_t = c_int integer, parameter, public :: c_time_t = c_int64_t integer, parameter, public :: c_uid_t = c_uint32_t integer, parameter, public :: c_useconds_t = c_unsigned_int