Skip to content

Commit

Permalink
Refactoring.
Browse files Browse the repository at this point in the history
  • Loading branch information
interkosmos committed Mar 8, 2024
1 parent 395d0d0 commit ec732de
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 38 deletions.
18 changes: 9 additions & 9 deletions examples/regex/regex.f90
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand Down
40 changes: 16 additions & 24 deletions src/unix_termios.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
19 changes: 14 additions & 5 deletions src/unix_types.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit ec732de

Please sign in to comment.