diff --git a/qse/bld/msdos-watcom/makefile b/qse/bld/msdos-watcom/makefile
index ba555fcf..3e36ac8c 100644
--- a/qse/bld/msdos-watcom/makefile
+++ b/qse/bld/msdos-watcom/makefile
@@ -309,6 +309,7 @@ LIBQSESYS_CFLAGS = $(____DOS_CFLAG_p) -i=..\..\include $(CPPFLAGS_BUILD) &
-ox $(CPPFLAGS) $(CFLAGS)
LIBQSESYS_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsesys_rwl.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsesys_thr.obj
@@ -367,6 +368,8 @@ LIBQSEXLI_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_err.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_read.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj
EXEQSEAWK_CFLAGS = $(____DOS_CFLAG_p) -i=..\..\include $(CPPFLAGS_BUILD) &
$(CPPFLAGS_CHAR) $(CPPFLAGS_XCMGRS) $(CPPFLAGS_BUNDLED_UNICODE) &
@@ -837,6 +840,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_uni.ob
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj : .AUTODEPEND ..\..\lib\sys\cnd.c
$(CC) -bt=dos -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj : .AUTODEPEND ..\..\lib\sys\intr.c
+ $(CC) -bt=dos -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj : .AUTODEPEND ..\..\lib\sys\mtx.c
$(CC) -bt=dos -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
@@ -951,6 +957,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_read.o
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj : .AUTODEPEND ..\..\lib\xli\write.c
$(CC) -bt=dos -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj : .AUTODEPEND ..\..\lib\xli\read-ini.c
+ $(CC) -bt=dos -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj : .AUTODEPEND ..\..\lib\xli\write-ini.c
+ $(CC) -bt=dos -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj : .AUTODEPEND ..\..\lib\xli\std.c
$(CC) -bt=dos -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
diff --git a/qse/bld/os2-watcom/makefile b/qse/bld/os2-watcom/makefile
index af56f4b7..bdf090bd 100644
--- a/qse/bld/os2-watcom/makefile
+++ b/qse/bld/os2-watcom/makefile
@@ -537,6 +537,7 @@ DLLQSESYS_CFLAGS = -bd -i=..\..\include $(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) &
$(CPPFLAGS_TCPV40HDRS) -wx $(__DEBUG_INFO) -bm -ot -ox $(CPPFLAGS) $(CFLAGS)
DLLQSESYS_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_cnd.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_intr.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_mtx.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_rwl.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_thr.obj
@@ -545,6 +546,7 @@ LIBQSESYS_CFLAGS = -i=..\..\include $(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) &
$(CPPFLAGS_TCPV40HDRS) -wx $(__DEBUG_INFO) -bm -ot -ox $(CPPFLAGS) $(CFLAGS)
LIBQSESYS_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_rwl.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_thr.obj
@@ -659,6 +661,8 @@ DLLQSEXLI_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_err.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read_ini.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write_ini.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_std.obj
LIBQSEXLI_CFLAGS = -i=..\..\include $(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) &
$(CPPFLAGS_XCMGRS) $(CPPFLAGS_BUNDLED_UNICODE) $(CPPFLAGS_STATIC_MODULE) &
@@ -668,6 +672,8 @@ LIBQSEXLI_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_err.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj
EXEQSEAWK_CFLAGS = -i=..\..\include $(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) &
$(CPPFLAGS_XCMGRS) $(CPPFLAGS_BUNDLED_UNICODE) $(CPPFLAGS_STATIC_MODULE) &
@@ -1709,6 +1715,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_cnd.obj : .AUTODEPEND ..\..\lib\sys\cnd.c
$(CC) -bt=os2 -zq -fo=$^@ $(DLLQSESYS_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_intr.obj : .AUTODEPEND ..\..\lib\sys\intr.c
+ $(CC) -bt=os2 -zq -fo=$^@ $(DLLQSESYS_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_mtx.obj : .AUTODEPEND ..\..\lib\sys\mtx.c
$(CC) -bt=os2 -zq -fo=$^@ $(DLLQSESYS_CFLAGS) $<
@@ -1721,6 +1730,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj : .AUTODEPEND ..\..\lib\sys\cnd.c
$(CC) -bt=os2 -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj : .AUTODEPEND ..\..\lib\sys\intr.c
+ $(CC) -bt=os2 -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj : .AUTODEPEND ..\..\lib\sys\mtx.c
$(CC) -bt=os2 -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
@@ -1943,6 +1955,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write.obj : .AUTODEPEND ..\..\lib\xli\write.c
$(CC) -bt=os2 -zq -fo=$^@ $(DLLQSEXLI_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read_ini.obj : .AUTODEPEND ..\..\lib\xli\read-ini.c
+ $(CC) -bt=os2 -zq -fo=$^@ $(DLLQSEXLI_CFLAGS) $<
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write_ini.obj : .AUTODEPEND ..\..\lib\xli\write-ini.c
+ $(CC) -bt=os2 -zq -fo=$^@ $(DLLQSEXLI_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_std.obj : .AUTODEPEND ..\..\lib\xli\std.c
$(CC) -bt=os2 -zq -fo=$^@ $(DLLQSEXLI_CFLAGS) $<
@@ -1958,6 +1976,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj : .AUTODEPEND ..\..\lib\xli\write.c
$(CC) -bt=os2 -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj : .AUTODEPEND ..\..\lib\xli\read-ini.c
+ $(CC) -bt=os2 -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj : .AUTODEPEND ..\..\lib\xli\write-ini.c
+ $(CC) -bt=os2 -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj : .AUTODEPEND ..\..\lib\xli\std.c
$(CC) -bt=os2 -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
diff --git a/qse/bld/qse.bkl b/qse/bld/qse.bkl
index 1714df57..8fa51244 100644
--- a/qse/bld/qse.bkl
+++ b/qse/bld/qse.bkl
@@ -257,6 +257,7 @@
cnd.c
+ intr.c
mtx.c
rwl.c
thr.c
@@ -307,6 +308,8 @@
err.c
read.c
write.c
+ read-ini.c
+ write-ini.c
std.c
diff --git a/qse/bld/win32-borland/makefile b/qse/bld/win32-borland/makefile
index 336d52cc..e32281ed 100644
--- a/qse/bld/win32-borland/makefile
+++ b/qse/bld/win32-borland/makefile
@@ -297,6 +297,7 @@ DLLQSESYS_CFLAGS = -I$(BCCDIR)\include -I..\..\include $(CPPFLAGS_BUILD) \
$(CPPFLAGS) $(CFLAGS)
DLLQSESYS_OBJECTS = \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_cnd.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_intr.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_mtx.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_rwl.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_thr.obj
@@ -306,6 +307,7 @@ LIBQSESYS_CFLAGS = -I$(BCCDIR)\include -I..\..\include $(CPPFLAGS_BUILD) \
$(CPPFLAGS) $(CFLAGS)
LIBQSESYS_OBJECTS = \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_rwl.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_thr.obj
@@ -432,6 +434,8 @@ DLLQSEXLI_OBJECTS = \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_err.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read_ini.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write_ini.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_std.obj
LIBQSEXLI_CFLAGS = -I$(BCCDIR)\include -I..\..\include $(CPPFLAGS_BUILD) \
$(CPPFLAGS_CHAR) $(CPPFLAGS_XCMGRS) $(CPPFLAGS_BUNDLED_UNICODE) \
@@ -442,6 +446,8 @@ LIBQSEXLI_OBJECTS = \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_err.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj
EXEQSEAWK_CFLAGS = -I$(BCCDIR)\include -I..\..\include $(CPPFLAGS_BUILD) \
$(CPPFLAGS_CHAR) $(CPPFLAGS_XCMGRS) $(CPPFLAGS_BUNDLED_UNICODE) \
@@ -1656,6 +1662,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_cnd.obj: ..\..\lib\sys\cnd.c
$(CC) -q -c -P- -o$@ $(DLLQSESYS_CFLAGS) ..\..\lib\sys\cnd.c
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_intr.obj: ..\..\lib\sys\intr.c
+ $(CC) -q -c -P- -o$@ $(DLLQSESYS_CFLAGS) ..\..\lib\sys\intr.c
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_mtx.obj: ..\..\lib\sys\mtx.c
$(CC) -q -c -P- -o$@ $(DLLQSESYS_CFLAGS) ..\..\lib\sys\mtx.c
@@ -1668,6 +1677,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj: ..\..\lib\sys\cnd.c
$(CC) -q -c -P- -o$@ $(LIBQSESYS_CFLAGS) ..\..\lib\sys\cnd.c
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj: ..\..\lib\sys\intr.c
+ $(CC) -q -c -P- -o$@ $(LIBQSESYS_CFLAGS) ..\..\lib\sys\intr.c
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj: ..\..\lib\sys\mtx.c
$(CC) -q -c -P- -o$@ $(LIBQSESYS_CFLAGS) ..\..\lib\sys\mtx.c
@@ -1890,6 +1902,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write.obj: ..\..\lib\xli\write.c
$(CC) -q -c -P- -o$@ $(DLLQSEXLI_CFLAGS) ..\..\lib\xli\write.c
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read_ini.obj: ..\..\lib\xli\read-ini.c
+ $(CC) -q -c -P- -o$@ $(DLLQSEXLI_CFLAGS) ..\..\lib\xli\read-ini.c
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write_ini.obj: ..\..\lib\xli\write-ini.c
+ $(CC) -q -c -P- -o$@ $(DLLQSEXLI_CFLAGS) ..\..\lib\xli\write-ini.c
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_std.obj: ..\..\lib\xli\std.c
$(CC) -q -c -P- -o$@ $(DLLQSEXLI_CFLAGS) ..\..\lib\xli\std.c
@@ -1905,6 +1923,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj: ..\..\lib\xli\write.c
$(CC) -q -c -P- -o$@ $(LIBQSEXLI_CFLAGS) ..\..\lib\xli\write.c
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj: ..\..\lib\xli\read-ini.c
+ $(CC) -q -c -P- -o$@ $(LIBQSEXLI_CFLAGS) ..\..\lib\xli\read-ini.c
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj: ..\..\lib\xli\write-ini.c
+ $(CC) -q -c -P- -o$@ $(LIBQSEXLI_CFLAGS) ..\..\lib\xli\write-ini.c
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj: ..\..\lib\xli\std.c
$(CC) -q -c -P- -o$@ $(LIBQSEXLI_CFLAGS) ..\..\lib\xli\std.c
diff --git a/qse/bld/win32-msvc/makefile b/qse/bld/win32-msvc/makefile
index b0a3bdfe..8523eafb 100644
--- a/qse/bld/win32-msvc/makefile
+++ b/qse/bld/win32-msvc/makefile
@@ -270,6 +270,7 @@ DLLQSESYS_CFLAGS = /MD$(__DEBUG_INFO_3_0) /DWIN32 /I..\..\include \
/O2 $(CPPFLAGS) $(CFLAGS)
DLLQSESYS_OBJECTS = \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_cnd.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_intr.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_mtx.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_rwl.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_thr.obj
@@ -281,6 +282,7 @@ LIBQSESYS_CFLAGS = /MD$(__DEBUG_INFO_3_0) /DWIN32 /I..\..\include \
/O2 $(CPPFLAGS) $(CFLAGS)
LIBQSESYS_OBJECTS = \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_rwl.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_thr.obj
@@ -431,6 +433,8 @@ DLLQSEXLI_OBJECTS = \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_err.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read_ini.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write_ini.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_std.obj
LIBQSEXLI_CFLAGS = /MD$(__DEBUG_INFO_3_0) /DWIN32 /I..\..\include \
$(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) $(CPPFLAGS_XCMGRS) \
@@ -443,6 +447,8 @@ LIBQSEXLI_OBJECTS = \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_err.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj \
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj \
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj
EXEQSEAWK_CFLAGS = /MD$(__DEBUG_INFO_3_0) /DWIN32 /I..\..\include \
$(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) $(CPPFLAGS_XCMGRS) \
@@ -1741,6 +1747,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_cnd.obj: ..\..\lib\sys\cnd.c
$(CC) /c /nologo /TC /Fo$@ $(DLLQSESYS_CFLAGS) ..\..\lib\sys\cnd.c
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_intr.obj: ..\..\lib\sys\intr.c
+ $(CC) /c /nologo /TC /Fo$@ $(DLLQSESYS_CFLAGS) ..\..\lib\sys\intr.c
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_mtx.obj: ..\..\lib\sys\mtx.c
$(CC) /c /nologo /TC /Fo$@ $(DLLQSESYS_CFLAGS) ..\..\lib\sys\mtx.c
@@ -1753,6 +1762,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj: ..\..\lib\sys\cnd.c
$(CC) /c /nologo /TC /Fo$@ $(LIBQSESYS_CFLAGS) ..\..\lib\sys\cnd.c
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj: ..\..\lib\sys\intr.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBQSESYS_CFLAGS) ..\..\lib\sys\intr.c
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj: ..\..\lib\sys\mtx.c
$(CC) /c /nologo /TC /Fo$@ $(LIBQSESYS_CFLAGS) ..\..\lib\sys\mtx.c
@@ -1975,6 +1987,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write.obj: ..\..\lib\xli\write.c
$(CC) /c /nologo /TC /Fo$@ $(DLLQSEXLI_CFLAGS) ..\..\lib\xli\write.c
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read_ini.obj: ..\..\lib\xli\read-ini.c
+ $(CC) /c /nologo /TC /Fo$@ $(DLLQSEXLI_CFLAGS) ..\..\lib\xli\read-ini.c
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write_ini.obj: ..\..\lib\xli\write-ini.c
+ $(CC) /c /nologo /TC /Fo$@ $(DLLQSEXLI_CFLAGS) ..\..\lib\xli\write-ini.c
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_std.obj: ..\..\lib\xli\std.c
$(CC) /c /nologo /TC /Fo$@ $(DLLQSEXLI_CFLAGS) ..\..\lib\xli\std.c
@@ -1990,6 +2008,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj: ..\..\lib\xli\write.c
$(CC) /c /nologo /TC /Fo$@ $(LIBQSEXLI_CFLAGS) ..\..\lib\xli\write.c
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj: ..\..\lib\xli\read-ini.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBQSEXLI_CFLAGS) ..\..\lib\xli\read-ini.c
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj: ..\..\lib\xli\write-ini.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBQSEXLI_CFLAGS) ..\..\lib\xli\write-ini.c
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj: ..\..\lib\xli\std.c
$(CC) /c /nologo /TC /Fo$@ $(LIBQSEXLI_CFLAGS) ..\..\lib\xli\std.c
diff --git a/qse/bld/win32-watcom/makefile b/qse/bld/win32-watcom/makefile
index 6a0d4b62..96e6c133 100644
--- a/qse/bld/win32-watcom/makefile
+++ b/qse/bld/win32-watcom/makefile
@@ -526,6 +526,7 @@ DLLQSESYS_CFLAGS = -bd -i=..\..\include $(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) &
$(CPPFLAGS_TCPV40HDRS) -wx $(__DEBUG_INFO) -bm -ot -ox $(CPPFLAGS) $(CFLAGS)
DLLQSESYS_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_cnd.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_intr.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_mtx.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_rwl.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_thr.obj
@@ -534,6 +535,7 @@ LIBQSESYS_CFLAGS = -i=..\..\include $(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) &
$(CPPFLAGS_TCPV40HDRS) -wx $(__DEBUG_INFO) -bm -ot -ox $(CPPFLAGS) $(CFLAGS)
LIBQSESYS_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_rwl.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_thr.obj
@@ -648,6 +650,8 @@ DLLQSEXLI_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_err.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read_ini.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write_ini.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_std.obj
LIBQSEXLI_CFLAGS = -i=..\..\include $(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) &
$(CPPFLAGS_XCMGRS) $(CPPFLAGS_BUNDLED_UNICODE) $(CPPFLAGS_STATIC_MODULE) &
@@ -657,6 +661,8 @@ LIBQSEXLI_OBJECTS = &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_err.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj &
+ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj &
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj
EXEQSEAWK_CFLAGS = -i=..\..\include $(CPPFLAGS_BUILD) $(CPPFLAGS_CHAR) &
$(CPPFLAGS_XCMGRS) $(CPPFLAGS_BUNDLED_UNICODE) $(CPPFLAGS_STATIC_MODULE) &
@@ -1698,6 +1704,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_cnd.obj : .AUTODEPEND ..\..\lib\sys\cnd.c
$(CC) -bt=nt -zq -fo=$^@ $(DLLQSESYS_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_intr.obj : .AUTODEPEND ..\..\lib\sys\intr.c
+ $(CC) -bt=nt -zq -fo=$^@ $(DLLQSESYS_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsesys_mtx.obj : .AUTODEPEND ..\..\lib\sys\mtx.c
$(CC) -bt=nt -zq -fo=$^@ $(DLLQSESYS_CFLAGS) $<
@@ -1710,6 +1719,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_cnd.obj : .AUTODEPEND ..\..\lib\sys\cnd.c
$(CC) -bt=nt -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_intr.obj : .AUTODEPEND ..\..\lib\sys\intr.c
+ $(CC) -bt=nt -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsesys_mtx.obj : .AUTODEPEND ..\..\lib\sys\mtx.c
$(CC) -bt=nt -zq -fo=$^@ $(LIBQSESYS_CFLAGS) $<
@@ -1932,6 +1944,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write.obj : .AUTODEPEND ..\..\lib\xli\write.c
$(CC) -bt=nt -zq -fo=$^@ $(DLLQSEXLI_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_read_ini.obj : .AUTODEPEND ..\..\lib\xli\read-ini.c
+ $(CC) -bt=nt -zq -fo=$^@ $(DLLQSEXLI_CFLAGS) $<
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_write_ini.obj : .AUTODEPEND ..\..\lib\xli\write-ini.c
+ $(CC) -bt=nt -zq -fo=$^@ $(DLLQSEXLI_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsexli_std.obj : .AUTODEPEND ..\..\lib\xli\std.c
$(CC) -bt=nt -zq -fo=$^@ $(DLLQSEXLI_CFLAGS) $<
@@ -1947,6 +1965,12 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write.obj : .AUTODEPEND ..\..\lib\xli\write.c
$(CC) -bt=nt -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_read_ini.obj : .AUTODEPEND ..\..\lib\xli\read-ini.c
+ $(CC) -bt=nt -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+
+$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_write_ini.obj : .AUTODEPEND ..\..\lib\xli\write-ini.c
+ $(CC) -bt=nt -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
+
$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsexli_std.obj : .AUTODEPEND ..\..\lib\xli\std.c
$(CC) -bt=nt -zq -fo=$^@ $(LIBQSEXLI_CFLAGS) $<
diff --git a/qse/include/qse/sys/Makefile.am b/qse/include/qse/sys/Makefile.am
index e7d45b44..551d4153 100644
--- a/qse/include/qse/sys/Makefile.am
+++ b/qse/include/qse/sys/Makefile.am
@@ -2,6 +2,7 @@ pkgincludedir = $(includedir)/qse/sys
pkginclude_HEADERS = \
cnd.h \
+ intr.h \
mtx.h \
rwl.h \
thr.h
diff --git a/qse/include/qse/sys/Makefile.in b/qse/include/qse/sys/Makefile.in
index 708174c9..250f6929 100644
--- a/qse/include/qse/sys/Makefile.in
+++ b/qse/include/qse/sys/Makefile.in
@@ -117,7 +117,7 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
-am__pkginclude_HEADERS_DIST = cnd.h mtx.h rwl.h thr.h \
+am__pkginclude_HEADERS_DIST = cnd.h intr.h mtx.h rwl.h thr.h \
SocketAddress.hpp
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
@@ -344,7 +344,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-pkginclude_HEADERS = cnd.h mtx.h rwl.h thr.h $(am__append_1)
+pkginclude_HEADERS = cnd.h intr.h mtx.h rwl.h thr.h $(am__append_1)
all: all-am
.SUFFIXES:
diff --git a/qse/include/qse/sys/cnd.h b/qse/include/qse/sys/cnd.h
index d4a6f680..127ef7bc 100644
--- a/qse/include/qse/sys/cnd.h
+++ b/qse/include/qse/sys/cnd.h
@@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef _QSE_CMN_CND_H_
-#define _QSE_CMN_CND_H_
+#ifndef _QSE_SYS_CND_H_
+#define _QSE_SYS_CND_H_
#include
#include
@@ -100,45 +100,44 @@ struct qse_cnd_t
extern "C" {
#endif
-
-qse_cnd_t* qse_cnd_open (
+QSE_EXPORT qse_cnd_t* qse_cnd_open (
qse_mmgr_t* mmgr,
qse_size_t xtnsize
);
-void qse_cnd_close (
+QSE_EXPORT void qse_cnd_close (
qse_cnd_t* cnd
);
-int qse_cnd_init (
+QSE_EXPORT int qse_cnd_init (
qse_cnd_t* cnd,
qse_mmgr_t* mmgr
);
-void qse_cnd_fini (
+QSE_EXPORT void qse_cnd_fini (
qse_cnd_t* cnd
);
-qse_mmgr_t* qse_cnd_getmmgr (
+QSE_EXPORT qse_mmgr_t* qse_cnd_getmmgr (
qse_cnd_t* cnd
);
-void* qse_cnd_getxtn (
+QSE_EXPORT void* qse_cnd_getxtn (
qse_cnd_t* cnd
);
-void qse_cnd_signal (
+QSE_EXPORT void qse_cnd_signal (
qse_cnd_t* cond
);
-void qse_cnd_broadcast (
+QSE_EXPORT void qse_cnd_broadcast (
qse_cnd_t* cond
);
-void qse_cnd_wait (
- qse_cnd_t* cond,
- qse_mtx_t* mutex,
- qse_ntime_t* waiting_time
+QSE_EXPORT void qse_cnd_wait (
+ qse_cnd_t* cond,
+ qse_mtx_t* mutex,
+ const qse_ntime_t* waiting_time
);
#ifdef __cplusplus
diff --git a/qse/include/qse/sys/intr.h b/qse/include/qse/sys/intr.h
new file mode 100644
index 00000000..03945a27
--- /dev/null
+++ b/qse/include/qse/sys/intr.h
@@ -0,0 +1,52 @@
+/*
+ * $Id$
+ *
+ Copyright (c) 2006-2014 Chung, Hyung-Hwan. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EQSERESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#ifndef _QSE_SYS_INTR_H_
+#define _QSE_SYS_INTR_H_
+
+#include
+#include
+
+/** \file
+ * This file provides simple console interrupt handler management routines.
+ */
+
+typedef void (*qse_intr_handler_t) (void *arg);
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+QSE_EXPORT void qse_setintrhandler (qse_intr_handler_t handler, void* arg);
+QSE_EXPORT void qse_clearintrhandler (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/qse/include/qse/sys/mtx.h b/qse/include/qse/sys/mtx.h
index b254246b..124d6d65 100644
--- a/qse/include/qse/sys/mtx.h
+++ b/qse/include/qse/sys/mtx.h
@@ -25,8 +25,8 @@
*/
-#ifndef _QSE_CMN_MTX_H_
-#define _QSE_CMN_MTX_H_
+#ifndef _QSE_SYS_MTX_H_
+#define _QSE_SYS_MTX_H_
#include
#include
@@ -92,38 +92,38 @@ struct qse_mtx_t
extern "C" {
#endif
-qse_mtx_t* qse_mtx_open (
+QSE_EXPORT qse_mtx_t* qse_mtx_open (
qse_mmgr_t* mmgr,
qse_size_t xtnsize
);
-void qse_mtx_close (
+QSE_EXPORT void qse_mtx_close (
qse_mtx_t* mtx
);
-int qse_mtx_init (
+QSE_EXPORT int qse_mtx_init (
qse_mtx_t* mtx,
qse_mmgr_t* mmgr
);
-void qse_mtx_fini (
+QSE_EXPORT void qse_mtx_fini (
qse_mtx_t* mtx
);
-qse_mmgr_t* qse_mtx_getmmgr (
+QSE_EXPORT qse_mmgr_t* qse_mtx_getmmgr (
qse_mtx_t* mtx
);
-void* qse_mtx_getxtn (
+QSE_EXPORT void* qse_mtx_getxtn (
qse_mtx_t* mtx
);
-int qse_mtx_lock (
- qse_mtx_t* mtx,
- qse_ntime_t* waiting_time
+QSE_EXPORT int qse_mtx_lock (
+ qse_mtx_t* mtx,
+ const qse_ntime_t* waiting_time
);
-int qse_mtx_unlock (
+QSE_EXPORT int qse_mtx_unlock (
qse_mtx_t* mtx
);
diff --git a/qse/include/qse/sys/rwl.h b/qse/include/qse/sys/rwl.h
index 940e7e31..c0c8b770 100644
--- a/qse/include/qse/sys/rwl.h
+++ b/qse/include/qse/sys/rwl.h
@@ -59,49 +59,49 @@ typedef struct qse_rwl_t qse_rwl_t;
extern "C" {
#endif
-qse_rwl_t* qse_rwl_open (
+QSE_EXPORT qse_rwl_t* qse_rwl_open (
qse_mmgr_t* mmgr,
qse_size_t xtnsize,
int flags
);
-void qse_rwl_close (
+QSE_EXPORT void qse_rwl_close (
qse_rwl_t* rwl
);
-int qse_rwl_init (
+QSE_EXPORT int qse_rwl_init (
qse_rwl_t* rwl,
qse_mmgr_t* mmgr,
int flags
);
-void qse_rwl_fini (
+QSE_EXPORT void qse_rwl_fini (
qse_rwl_t* rwl
);
-qse_mmgr_t* qse_rwl_getmmgr (
+QSE_EXPORT qse_mmgr_t* qse_rwl_getmmgr (
qse_rwl_t* rwl
);
-void* qse_rwl_getxtn (
+QSE_EXPORT void* qse_rwl_getxtn (
qse_rwl_t* rwl
);
-int qse_rwl_lockr (
- qse_rwl_t* rwl,
- qse_ntime_t* waiting_time
+QSE_EXPORT int qse_rwl_lockr (
+ qse_rwl_t* rwl,
+ const qse_ntime_t* waiting_time
);
-int qse_rwl_unlockr (
+QSE_EXPORT int qse_rwl_unlockr (
qse_rwl_t* rwl
);
-int qse_rwl_lockw (
- qse_rwl_t* rwl,
- qse_ntime_t* waiting_time
+QSE_EXPORT int qse_rwl_lockw (
+ qse_rwl_t* rwl,
+ const qse_ntime_t* waiting_time
);
-int qse_rwl_unlockw (
+QSE_EXPORT int qse_rwl_unlockw (
qse_rwl_t* rwl
);
diff --git a/qse/include/qse/sys/thr.h b/qse/include/qse/sys/thr.h
index cbfe1cb9..4fc5a625 100644
--- a/qse/include/qse/sys/thr.h
+++ b/qse/include/qse/sys/thr.h
@@ -61,16 +61,20 @@ typedef enum qse_thr_flag_t qse_thr_flag_t;
#if defined(_WIN32)
/* => typedef PVOID HANDLE; */
typedef void* qse_thr_hnd_t;
-#elif defined(__OS2__)
- /* not implemented */
-# error not implemented
+#elif defined(__OS2__)
+ /* typedef unsigned long LHANDLE
+ * typedef LHANDLE TID */
+ typedef unsigned long qse_thr_hnd_t;
+
#elif defined(__DOS__)
/* not implemented */
# error not implemented
+
#elif defined(__BEOS__)
/*typedef thread_id qse_thr_hnd_t;*/
typdef qse_int32_t qse_thr_hnd_t;
+
#else
#if (QSE_SIZEOF_PTHREAD_T == QSE_SIZEOF_INT)
#if defined(QSE_PTHREAD_T_IS_SIGNED)
@@ -98,7 +102,7 @@ extern "C" {
* pointed to by \a routine is executed when qse_thr_start() is called.
*
*/
-qse_thr_t* qse_thr_open (
+QSE_EXPORT qse_thr_t* qse_thr_open (
qse_mmgr_t* mmgr,
qse_size_t xtnsize,
qse_thr_routine_t routine
@@ -108,29 +112,29 @@ qse_thr_t* qse_thr_open (
* The qse_thr_close() function destroys a thread object. Make sure that the
* thread routine has been terminated properly.
*/
-void qse_thr_close (
+QSE_EXPORT void qse_thr_close (
qse_thr_t* thr
);
-int qse_thr_init (
+QSE_EXPORT int qse_thr_init (
qse_thr_t* thr,
qse_mmgr_t* mmgr,
qse_thr_routine_t routine
);
-void qse_thr_fini (
+QSE_EXPORT void qse_thr_fini (
qse_thr_t* thr
);
-qse_mmgr_t* qse_thr_getmmgr (
+QSE_EXPORT qse_mmgr_t* qse_thr_getmmgr (
qse_thr_t* thr
);
-void* qse_thr_getxtn (
+QSE_EXPORT void* qse_thr_getxtn (
qse_thr_t* thr
);
-qse_size_t qse_thr_getstacksize (
+QSE_EXPORT qse_size_t qse_thr_getstacksize (
qse_thr_t* thr
);
@@ -138,7 +142,7 @@ qse_size_t qse_thr_getstacksize (
* The qse_thr_setstacksize() function sets the stack size of a thread.
* It must be called before a thread routine gets started.
*/
-void qse_thr_setstacksize (
+QSE_EXPORT void qse_thr_setstacksize (
qse_thr_t* thr,
qse_size_t num
);
@@ -154,7 +158,7 @@ void qse_thr_setstacksize (
*
* \return 0 on success, -1 on failure
*/
-int qse_thr_start (
+QSE_EXPORT int qse_thr_start (
qse_thr_t* thr,
int flags, /**< 0 or bitwise-or of QSE_THR_NEW_ROUTINE and QSE_THR_DETACHED */
...
@@ -164,50 +168,50 @@ int qse_thr_start (
* The qse_thr_stop() function aborts a thread.
* \return 0 on success, -1 on failure
*/
-int qse_thr_stop (qse_thr_t* thr);
+QSE_EXPORT int qse_thr_stop (qse_thr_t* thr);
/**
* The qse_thr_join() function waits for thread termination.
* \return 0 on success, -1 on failure
*/
-int qse_thr_join (qse_thr_t* thr);
+QSE_EXPORT int qse_thr_join (qse_thr_t* thr);
/**
* The qse_thr_detach() function detaches a thread.
* \return 0 on success, -1 on failure
*/
-int qse_thr_detach (qse_thr_t* thr);
+QSE_EXPORT int qse_thr_detach (qse_thr_t* thr);
/**
* The qse_thr_kill() function sends a signal to a thread.
*/
-int qse_thr_kill (qse_thr_t* thr, int sig);
+QSE_EXPORT int qse_thr_kill (qse_thr_t* thr, int sig);
/**
* The qse_thr_blocksig() function causes a therad to block the signal \a sig.
*/
-int qse_thr_blocksig (qse_thr_t* thr, int sig);
+QSE_EXPORT int qse_thr_blocksig (qse_thr_t* thr, int sig);
/**
* The qse_thr_unblocksig() function causes a therad to unblock the signal \a sig.
*/
-int qse_thr_unblocksig (qse_thr_t* thr, int sig);
+QSE_EXPORT int qse_thr_unblocksig (qse_thr_t* thr, int sig);
/**
* The qse_thr_blockallsigs() function causes a therad to block all signals.
*/
-int qse_thr_blockallsigs (qse_thr_t* thr);
+QSE_EXPORT int qse_thr_blockallsigs (qse_thr_t* thr);
/**
* The qse_thr_unblockallsigs() function causes a therad to unblock all signals.
*/
-int qse_thr_unblockallsigs (qse_thr_t* thr);
+QSE_EXPORT int qse_thr_unblockallsigs (qse_thr_t* thr);
/**
* The qse_thr_gethnd() function returns the native thread handle.
*/
-qse_thr_hnd_t qse_thr_gethnd (
+QSE_EXPORT qse_thr_hnd_t qse_thr_gethnd (
qse_thr_t* thr
);
@@ -216,14 +220,14 @@ qse_thr_hnd_t qse_thr_gethnd (
* that has been terminated. If no thread routine has been started and
* terminated, 0 is returned.
*/
-int qse_thr_getretcode (
+QSE_EXPORT int qse_thr_getretcode (
qse_thr_t* thr
);
/**
* The qse_thr_state() function returns the current state.
*/
-qse_thr_state_t qse_thr_getstate (
+QSE_EXPORT qse_thr_state_t qse_thr_getstate (
qse_thr_t* thr
);
@@ -231,7 +235,7 @@ qse_thr_state_t qse_thr_getstate (
* The qse_getcurthrhnd() function returns the native handle to the
* calling thread.
*/
-qse_thr_hnd_t qse_getcurthrhnd (void);
+QSE_EXPORT qse_thr_hnd_t qse_getcurthrhnd (void);
#ifdef __cplusplus
}
diff --git a/qse/lib/sys/Makefile.am b/qse/lib/sys/Makefile.am
index 5b09d7a3..1c486057 100644
--- a/qse/lib/sys/Makefile.am
+++ b/qse/lib/sys/Makefile.am
@@ -7,6 +7,7 @@ AM_CPPFLAGS = \
lib_LTLIBRARIES = libqsesys.la
libqsesys_la_SOURCES = \
cnd.c \
+ intr.c \
mtx.c \
rwl.c \
thr.c \
diff --git a/qse/lib/sys/Makefile.in b/qse/lib/sys/Makefile.in
index 873ff013..fad1ac6a 100644
--- a/qse/lib/sys/Makefile.in
+++ b/qse/lib/sys/Makefile.in
@@ -127,7 +127,7 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libqsesys_la_DEPENDENCIES =
-am_libqsesys_la_OBJECTS = cnd.lo mtx.lo rwl.lo thr.lo
+am_libqsesys_la_OBJECTS = cnd.lo intr.lo mtx.lo rwl.lo thr.lo
libqsesys_la_OBJECTS = $(am_libqsesys_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -408,6 +408,7 @@ AM_CPPFLAGS = \
lib_LTLIBRARIES = libqsesys.la $(am__append_1)
libqsesys_la_SOURCES = \
cnd.c \
+ intr.c \
mtx.c \
rwl.c \
thr.c \
@@ -504,6 +505,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SocketAddress.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cnd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intr.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtx.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rwl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thr.Plo@am__quote@
diff --git a/qse/lib/sys/cnd.c b/qse/lib/sys/cnd.c
index 4808762f..f687d794 100644
--- a/qse/lib/sys/cnd.c
+++ b/qse/lib/sys/cnd.c
@@ -258,7 +258,7 @@ void qse_cnd_broadcast (qse_cnd_t* cnd)
#endif
}
-void qse_cnd_wait (qse_cnd_t* cnd, qse_mtx_t* mutex, qse_ntime_t* waiting_time)
+void qse_cnd_wait (qse_cnd_t* cnd, qse_mtx_t* mutex, const qse_ntime_t* waiting_time)
{
#if defined(_WIN32)
unsigned int was_waiting, was_gone;
diff --git a/qse/lib/sys/intr.c b/qse/lib/sys/intr.c
new file mode 100644
index 00000000..9888b85a
--- /dev/null
+++ b/qse/lib/sys/intr.c
@@ -0,0 +1,162 @@
+/*
+ * $Id$
+ *
+ Copyright (c) 2006-2014 Chung, Hyung-Hwan. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include
+
+#if defined(_WIN32)
+# include
+
+#elif defined(__OS2__)
+# define INCL_DOSPROCESS
+# define INCL_DOSEXCEPTIONS
+# define INCL_ERRORS
+# include
+
+#elif defined(__DOS__)
+# include
+# include
+#else
+# include
+# include
+# include
+#endif
+
+static qse_intr_handler_t intr_handler = QSE_NULL;
+static void* intr_handler_arg = QSE_NULL;
+
+#if defined(_WIN32)
+static BOOL WINAPI __intr_handler (DWORD ctrl_type)
+{
+ if (ctrl_type == CTRL_C_EVENT ||
+ ctrl_type == CTRL_CLOSE_EVENT)
+ {
+ if (intr_handler) intr_handler (intr_handler_arg);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+#elif defined(__OS2__)
+
+static EXCEPTIONREGISTRATIONRECORD os2_excrr = { 0 };
+
+static ULONG _System __intr_handler (
+ PEXCEPTIONREPORTRECORD p1,
+ PEXCEPTIONREGISTRATIONRECORD p2,
+ PCONTEXTRECORD p3,
+ PVOID pv)
+{
+ if (p1->ExceptionNum == XCPT_SIGNAL)
+ {
+ if (p1->ExceptionInfo[0] == XCPT_SIGNAL_INTR ||
+ p1->ExceptionInfo[0] == XCPT_SIGNAL_KILLPROC ||
+ p1->ExceptionInfo[0] == XCPT_SIGNAL_BREAK)
+ {
+ APIRET rc;
+
+ if (intr_handler) intr_handler (intr_handler_arg);
+
+ rc = DosAcknowledgeSignalException (p1->ExceptionInfo[0]);
+ return (rc != NO_ERROR)? 1: XCPT_CONTINUE_EXECUTION;
+ }
+ }
+
+ return XCPT_CONTINUE_SEARCH; /* exception not resolved */
+}
+
+#elif defined(__DOS__)
+
+static void __intr_handler (void)
+{
+ if (intr_handler) intr_handler (intr_handler_arg);
+}
+
+#else
+
+static void __intr_handler (int sig)
+{
+ if (intr_handler) intr_handler (intr_handler_arg);
+}
+
+static int setsignal (int sig, void(*handler)(int), int restart)
+{
+ struct sigaction sa_int;
+
+ sa_int.sa_handler = handler;
+ sigemptyset (&sa_int.sa_mask);
+
+ sa_int.sa_flags = 0;
+
+ if (restart)
+ {
+ #if defined(SA_RESTART)
+ sa_int.sa_flags |= SA_RESTART;
+ #endif
+ }
+ else
+ {
+ #if defined(SA_INTERRUPT)
+ sa_int.sa_flags |= SA_INTERRUPT;
+ #endif
+ }
+ return sigaction (sig, &sa_int, NULL);
+}
+#endif
+
+void qse_setintrhandler (qse_intr_handler_t handler, void* arg)
+{
+ intr_handler = handler;
+ intr_handler_arg = arg;
+
+#if defined(_WIN32)
+ SetConsoleCtrlHandler (__intr_handler, TRUE);
+#elif defined(__OS2__)
+ os2_excrr.ExceptionHandler = (ERR)__intr_handler;
+ DosSetExceptionHandler (&os2_excrr); /* TODO: check if NO_ERROR is returned */
+#elif defined(__DOS__)
+ signal (SIGINT, __intr_handler);
+#else
+ /*setsignal (SIGINT, __intr_handler, 1); TO BE MORE COMPATIBLE WITH WIN32*/
+ setsignal (SIGINT, __intr_handler, 0);
+#endif
+}
+
+void qse_clearintrhandler (void)
+{
+ intr_handler = QSE_NULL;
+ intr_handler_arg = QSE_NULL;
+
+#if defined(_WIN32)
+ SetConsoleCtrlHandler (__intr_handler, FALSE);
+#elif defined(__OS2__)
+ DosUnsetExceptionHandler (&os2_excrr);
+#elif defined(__DOS__)
+ signal (SIGINT, SIG_DFL);
+#else
+ setsignal (SIGINT, SIG_DFL, 1);
+#endif
+}
diff --git a/qse/lib/sys/mtx.c b/qse/lib/sys/mtx.c
index 77dc4d3a..dc2d892a 100644
--- a/qse/lib/sys/mtx.c
+++ b/qse/lib/sys/mtx.c
@@ -154,7 +154,7 @@ void* qse_mtx_getxtn (qse_mtx_t* mtx)
return QSE_XTN (mtx);
}
-int qse_mtx_lock (qse_mtx_t* mtx, qse_ntime_t* waiting_time)
+int qse_mtx_lock (qse_mtx_t* mtx, const qse_ntime_t* waiting_time)
{
#if defined(_WIN32)
/*
diff --git a/qse/lib/sys/rwl.c b/qse/lib/sys/rwl.c
index 48dc75ad..c7aa70b2 100644
--- a/qse/lib/sys/rwl.c
+++ b/qse/lib/sys/rwl.c
@@ -100,7 +100,7 @@ void* qse_rwl_getxtn (qse_rwl_t* rwl)
return QSE_XTN (rwl);
}
-int qse_rwl_lockr (qse_rwl_t* rwl, qse_ntime_t* waiting_time)
+int qse_rwl_lockr (qse_rwl_t* rwl, const qse_ntime_t* waiting_time)
{
qse_ntime_t dead_line, now, rem, zero;
@@ -164,7 +164,7 @@ int qse_rwl_unlockr (qse_rwl_t* rwl)
return 0;
}
-int qse_rwl_lockw (qse_rwl_t* rwl, qse_ntime_t* waiting_time)
+int qse_rwl_lockw (qse_rwl_t* rwl, const qse_ntime_t* waiting_time)
{
qse_ntime_t dead_line, now, rem, zero;
diff --git a/qse/lib/sys/thr.c b/qse/lib/sys/thr.c
index c892c64f..acbcee20 100644
--- a/qse/lib/sys/thr.c
+++ b/qse/lib/sys/thr.c
@@ -27,6 +27,7 @@
#include "thr.h"
#include "../cmn/mem.h"
+#include
#include
#if (!defined(__unix__) && !defined(__unix)) || defined(HAVE_PTHREAD)
@@ -98,7 +99,9 @@ void qse_thr_setstacksize (qse_thr_t* thr, qse_size_t num)
thr->__stacksize = num;
}
-#if defined(__BEOS__)
+#if defined(__OS2__)
+static void __thread_main (void* arg)
+#elif defined(__BEOS__)
static int32 __thread_main (void* arg)
#else
static void* __thread_main (void* arg)
@@ -110,9 +113,11 @@ static void* __thread_main (void* arg)
{
#if defined(_WIN32)
Sleep (0);
+#elif defined(__OS2__)
+ DosSleep (0);
#elif defined(HAVE_NANOSLEEP)
struct timespec ts;
- ts.tv_sec =0;
+ ts.tv_sec = 0;
ts.tv_nsec = 0;
nanosleep (&ts, &ts);
#else
@@ -120,7 +125,7 @@ static void* __thread_main (void* arg)
#endif
}
-#if !defined(_WIN32) && !defined(__BEOS__)
+#if defined(HAVE_PTHREAD)
/*
* the asynchronous cancel-type is used to better emulate
* the bad effect of WIN32's TerminateThread using pthread_cancel
@@ -135,13 +140,24 @@ static void* __thread_main (void* arg)
#if defined(_WIN32)
_endthreadex (thr->__return_code);
return QSE_NULL;
+
+#elif defined(__OS2__)
+ _endthread ();
+ /* no return statement */
+
+#elif defined(__DOS__)
+ /* not implemented */
+ return QSE_NULL;
+
#elif defined(__BEOS__)
exit_thread (thr->__return_code);
return 0;
+
#else
pthread_exit (&thr->__return_code);
return QSE_NULL;
#endif
+
}
static int __create_thread (qse_thr_t* thr)
@@ -153,6 +169,19 @@ static int __create_thread (qse_thr_t* thr)
thr->__handle = (HANDLE)_beginthreadex (QSE_NULL, 0, (unsigned int (__stdcall*)(void*))__thread_main, thr, 0, &tid);
if (thr->__handle == 0) return -1;
+
+#elif defined(__OS2__)
+ TID tid;
+
+ /* default stack size to 81920(4096 * 20) */
+ tid = _beginthread (__thread_main, NULL, (thr->__stacksize > 0? thr->__stacksize: 81920), thr);
+ if (tid == -1) return -1;
+
+ thr->__handle = tid;
+
+#elif defined(__DOS__)
+ /* not implemented */
+
#elif defined(__BEOS__)
thread_id tid;
@@ -161,6 +190,7 @@ static int __create_thread (qse_thr_t* thr)
thr->__handle = tid;
resume_thread(thr->__handle);
+
#elif defined(HAVE_PTHREAD)
pthread_attr_t attr;
pthread_attr_init (&attr);
@@ -197,6 +227,10 @@ static int __cancel_thread (qse_thr_t* thr)
if (thr->__state != QSE_THR_RUNNING) return -1;
#if defined(_WIN32)
if (TerminateThread (thr->__handle, 0) == 0) return -1;
+#elif defined(__OS2__)
+ if (DosKillThread (thr->__handle) != NO_ERROR) return -1;
+#elif defined(__DOS__)
+ /* not implemented */
#elif defined(__BEOS__)
if (kill_thread (thr->__handle) < B_OK) return -1;
#elif defined(HAVE_PTHREAD)
@@ -251,11 +285,18 @@ int qse_thr_join (qse_thr_t* thr)
#if defined(_WIN32)
if (thr->__state == QSE_THR_RUNNING)
{
- if (WaitForSingleObject (
- thr->__handle, INFINITE) == WAIT_FAILED) return -1;
+ if (WaitForSingleObject (thr->__handle, INFINITE) == WAIT_FAILED) return -1;
}
+
+#elif defined(__OS2__)
+ if (DosWaitThread (&thr->__handle, DCWW_WAIT) != NO_ERROR) return -1;
+
+#elif defined(__DOS__)
+ /* not implemented */
+
#elif defined(__BEOS__)
if (wait_for_thread(thr->__handle, QSE_NULL) < B_OK) return -1;
+
#elif defined(HAVE_PTHREAD)
if (pthread_join(thr->__handle, QSE_NULL) != 0) return -1;
#endif
@@ -279,6 +320,8 @@ int qse_thr_detach (qse_thr_t* thr)
int qse_thr_kill (qse_thr_t* thr, int sig)
{
+ /* this function is to send a signal to a thread.
+ * don't get confused by the name */
if (thr->__state != QSE_THR_RUNNING) return -1;
#if defined(HAVE_PTHREAD)
@@ -341,7 +384,7 @@ int qse_thr_unblockallsigs (qse_thr_t* thr)
#endif
if (thr->__state != QSE_THR_RUNNING) return -1;
-
+
#if defined(HAVE_PTHREAD)
sigfillset (&mask);
if (pthread_sigmask (SIG_UNBLOCK, &mask, QSE_NULL) != 0) return -1;
@@ -369,7 +412,12 @@ qse_thr_hnd_t qse_getcurthrhnd (void)
#if defined(_WIN32)
return GetCurrentThread ();
#elif defined(__OS2__)
- return QSE_THR_HND_INVALID; /* TODO: implement this */
+ PTIB ptib;
+ PPIB ppib;
+
+ if (DosGetInfoBlocks (&ptib, &ppib) != NO_ERROR) return QSE_THR_HND_INVALID;
+ return ptib->tib_ptib2->tib2_ultid;
+
#elif defined(__DOS__)
return QSE_THR_HND_INVALID; /* TODO: implement this */
#elif defined(__BEOS__)
diff --git a/qse/lib/sys/thr.h b/qse/lib/sys/thr.h
index c875dd23..a4e023bf 100644
--- a/qse/lib/sys/thr.h
+++ b/qse/lib/sys/thr.h
@@ -36,16 +36,22 @@
# include
# include
# define QSE_THR_HND_INVALID INVALID_HANDLE_VALUE
+
#elif defined(__OS2__)
- /* not implemented */
+# define INCL_DOSPROCESS
+# define INCL_DOSDATETIME
+# define INCL_DOSERRORS
+# include
+# include
+# define QSE_THR_HND_INVALID (-1)
#elif defined(__DOS__)
-
/* not implemented */
#elif defined(__BEOS__)
# include
# define QSE_THR_HND_INVALID (-1)
+
#else
# if defined(AIX) && defined(__GNUC__)
typedef int crid_t;
diff --git a/qse/samples/sys/rwl01.c b/qse/samples/sys/rwl01.c
index 37a43d73..fb5fb993 100644
--- a/qse/samples/sys/rwl01.c
+++ b/qse/samples/sys/rwl01.c
@@ -2,9 +2,9 @@
#include
#include
#include
+#include
#include
-#include
#if defined(_WIN32)
# include
@@ -16,8 +16,9 @@ struct thr_xtn_t
};
typedef struct thr_xtn_t thr_xtn_t;
-qse_rwl_t* rwl;
-qse_mtx_t* mtx;
+static qse_rwl_t* rwl;
+static qse_mtx_t* mtx;
+static int stop_req = 0;
#define OUTMSG(msg,id) do { \
qse_ntime_t now; \
@@ -27,23 +28,29 @@ qse_mtx_t* mtx;
qse_mtx_unlock (mtx); \
} while(0)
-int thr_exec (qse_thr_t* thr)
+static int thr_exec (qse_thr_t* thr)
{
thr_xtn_t* xtn = qse_thr_getxtn(thr);
OUTMSG (QSE_T("starting"), xtn->id);
- while (1)
+ while (!stop_req)
{
if (xtn->id % 2)
/*if (xtn->id > 0)*/
{
OUTMSG (QSE_T("read waiting"), xtn->id);
- qse_rwl_lockr (rwl, QSE_NULL);
- OUTMSG (QSE_T("read start"), xtn->id);
- /*sleep (1);*/
- OUTMSG (QSE_T("read done"), xtn->id);
- qse_rwl_unlockr (rwl);
+ if (qse_rwl_lockr (rwl, QSE_NULL) >= 0)
+ {
+ OUTMSG (QSE_T("read start"), xtn->id);
+ /*sleep (1);*/
+ OUTMSG (QSE_T("read done"), xtn->id);
+ qse_rwl_unlockr (rwl);
+ }
+ else
+ {
+ OUTMSG (QSE_T("read fail"), xtn->id);
+ }
}
else
{
@@ -73,7 +80,7 @@ int thr_exec (qse_thr_t* thr)
}
-void test_001 (void)
+static void test_001 (void)
{
qse_mmgr_t* mmgr;
qse_thr_t* t[6];
@@ -100,6 +107,11 @@ void test_001 (void)
qse_mtx_close (mtx);
}
+static void stop_run (void* arg)
+{
+ stop_req = 1;
+}
+
int main ()
{
#if defined(_WIN32)
@@ -113,8 +125,9 @@ int main ()
qse_openstdsios ();
-setbuf (stdout, NULL);
+ qse_setintrhandler (stop_run, QSE_NULL);
test_001 ();
+ qse_clearintrhandler ();
qse_closestdsios ();