diff --git a/qse/cmd/sed/sed.c b/qse/cmd/sed/sed.c
index f16ab079..20208621 100644
--- a/qse/cmd/sed/sed.c
+++ b/qse/cmd/sed/sed.c
@@ -17,6 +17,7 @@
You should have received a copy of the GNU Lesser General Public
License along with QSE. If not, see .
*/
+#if 0
#include
#include
@@ -1037,3 +1038,6 @@ int qse_main (int argc, qse_achar_t* argv[])
return qse_runmain (argc, argv, sed_main);
}
+#endif
+
+#include "../../samples/cmn/task01.c"
diff --git a/qse/configure b/qse/configure
index 705bcadf..56caaf80 100755
--- a/qse/configure
+++ b/qse/configure
@@ -18587,13 +18587,13 @@ fi
if test "$enable_debug_is" = "yes"
then
- CFLAGS="$CFLAGS -g -D_DEBUG -UNDEBUG -DQSE_BUILD_DEBUG"
- CXXFLAGS="$CXXFLAGS -g -D_DEBUG -UNDEBUG -DQSE_BUILD_DEBUG"
+ CFLAGS="$CFLAGS -g -D_DEBUG -UNDEBUG -DQSE_BUILD_DEBUG -U_FORTIFY_SOURCE"
+ CXXFLAGS="$CXXFLAGS -g -D_DEBUG -UNDEBUG -DQSE_BUILD_DEBUG -U_FORTIFY_SOURCE"
BUILD_MODE="debug"
else
- CFLAGS="$CFLAGS -DNDEBUG -U_DEBUG -DQSE_BUILD_RELEASE"
- CXXFLAGS="$CXXFLAGS -DNDEBUG -U_DEBUG -DQSE_BUILD_RELEASE"
+ CFLAGS="$CFLAGS -DNDEBUG -U_DEBUG -DQSE_BUILD_RELEASE -U_FORTIFY_SOURCE"
+ CXXFLAGS="$CXXFLAGS -DNDEBUG -U_DEBUG -DQSE_BUILD_RELEASE -U_FORTIFY_SOURCE"
BUILD_MODE="release"
fi
diff --git a/qse/configure.ac b/qse/configure.ac
index 6232ada7..882620e8 100644
--- a/qse/configure.ac
+++ b/qse/configure.ac
@@ -332,12 +332,12 @@ AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],[build the library in th
enable_debug_is=$enableval,enable_debug_is=no)
if test "$enable_debug_is" = "yes"
then
- [CFLAGS="$CFLAGS -g -D_DEBUG -UNDEBUG -DQSE_BUILD_DEBUG"]
- [CXXFLAGS="$CXXFLAGS -g -D_DEBUG -UNDEBUG -DQSE_BUILD_DEBUG"]
+ [CFLAGS="$CFLAGS -g -D_DEBUG -UNDEBUG -DQSE_BUILD_DEBUG -U_FORTIFY_SOURCE"]
+ [CXXFLAGS="$CXXFLAGS -g -D_DEBUG -UNDEBUG -DQSE_BUILD_DEBUG -U_FORTIFY_SOURCE"]
AC_SUBST(BUILD_MODE, "debug")
else
- [CFLAGS="$CFLAGS -DNDEBUG -U_DEBUG -DQSE_BUILD_RELEASE"]
- [CXXFLAGS="$CXXFLAGS -DNDEBUG -U_DEBUG -DQSE_BUILD_RELEASE"]
+ [CFLAGS="$CFLAGS -DNDEBUG -U_DEBUG -DQSE_BUILD_RELEASE -U_FORTIFY_SOURCE"]
+ [CXXFLAGS="$CXXFLAGS -DNDEBUG -U_DEBUG -DQSE_BUILD_RELEASE -U_FORTIFY_SOURCE"]
AC_SUBST(BUILD_MODE, "release")
fi
diff --git a/qse/include/qse/cmn/task.h b/qse/include/qse/cmn/task.h
index f8bae567..eff5a117 100644
--- a/qse/include/qse/cmn/task.h
+++ b/qse/include/qse/cmn/task.h
@@ -24,28 +24,55 @@
#include
#include
-typedef void (*qse_task_fnc_t) (void* ctx);
-
typedef struct qse_task_t qse_task_t;
+typedef struct qse_task_slice_t qse_task_slice_t;
+
+typedef qse_task_slice_t* (*qse_task_fnc_t) (
+ qse_task_t* task,
+ qse_task_slice_t* slice,
+ void* ctx
+);
#ifdef __cplusplus
extern "C" {
#endif
-int qse_gettaskid (
+qse_task_t* qse_task_open (
+ qse_mmgr_t* mmgr,
+ qse_size_t xtnsize
+);
+
+void qse_task_close (
qse_task_t* task
);
-qse_task_t* qse_maketask (
+qse_mmgr_t* qse_task_getmmgr (
+ qse_task_t* task
+);
+
+void* qse_task_getxtn (
+ qse_task_t* task
+);
+
+qse_task_slice_t* qse_task_create (
+ qse_task_t* task,
qse_task_fnc_t fnc,
void* ctx,
- qse_size_t stsize
+ qse_size_t stksize
);
int qse_task_boot (
- void
+ qse_task_t* task,
+ qse_task_slice_t* to
);
+void qse_task_schedule (
+ qse_task_t* task,
+ qse_task_slice_t* from,
+ qse_task_slice_t* to
+);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/qse/include/qse/macros.h b/qse/include/qse/macros.h
index adc66126..207cd59e 100644
--- a/qse/include/qse/macros.h
+++ b/qse/include/qse/macros.h
@@ -105,15 +105,14 @@
* The QSE_OFFSETOF() macro returns the offset of a field from the beginning
* of a structure.
*/
-#define QSE_OFFSETOF(type,member) \
- ((qse_size_t)&((type*)0)->member)
+#define QSE_OFFSETOF(type,member) ((qse_size_t)&((type*)0)->member)
/**
* The QSE_ALIGNOF() macro returns the alignment size of a structure.
* Note that this macro may not work reliably depending on the type given.
*/
-#define QSE_ALIGNOF(type) QSE_OFFSETOF(struct { qse_uint8_t d1; type d2 }, d2)
- /*(sizeof(struct { qse_uint8_t d1; type d2 }) - sizeof(type))*/
+#define QSE_ALIGNOF(type) QSE_OFFSETOF(struct { qse_uint8_t d1; type d2; }, d2)
+ /*(sizeof(struct { qse_uint8_t d1; type d2; }) - sizeof(type))*/
/**
* The QSE_TYPE_IS_SIGNED() macro determines if a type is signed.
diff --git a/qse/lib/awk/val.c b/qse/lib/awk/val.c
index 5cba0a50..404f0c9f 100644
--- a/qse/lib/awk/val.c
+++ b/qse/lib/awk/val.c
@@ -1244,15 +1244,21 @@ qse_long_t qse_awk_rtx_hashval (qse_awk_rtx_t* rtx, qse_awk_val_t* v)
case QSE_AWK_VAL_INT:
/*hv = ((qse_awk_val_int_t*)v)->val;*/
- hv = (qse_long_t)hash (&((qse_awk_val_int_t*)v)->val, QSE_SIZEOF(((qse_awk_val_int_t*)v)->val));
+ hv = (qse_long_t)hash (
+ (qse_uint8_t*)&((qse_awk_val_int_t*)v)->val,
+ QSE_SIZEOF(((qse_awk_val_int_t*)v)->val));
break;
case QSE_AWK_VAL_FLT:
- hv = (qse_long_t)hash (&((qse_awk_val_flt_t*)v)->val, QSE_SIZEOF(((qse_awk_val_flt_t*)v)->val));
+ hv = (qse_long_t)hash (
+ (qse_uint8_t*)&((qse_awk_val_flt_t*)v)->val,
+ QSE_SIZEOF(((qse_awk_val_flt_t*)v)->val));
break;
case QSE_AWK_VAL_STR:
- hv = (qse_long_t)hash (((qse_awk_val_str_t*)v)->val.ptr, ((qse_awk_val_str_t*)v)->val.len * QSE_SIZEOF(qse_char_t));
+ hv = (qse_long_t)hash (
+ (qse_uint8_t*)((qse_awk_val_str_t*)v)->val.ptr,
+ ((qse_awk_val_str_t*)v)->val.len * QSE_SIZEOF(qse_char_t));
break;
default:
diff --git a/qse/lib/cmn/main.c b/qse/lib/cmn/main.c
index 6a2290ff..6de7916f 100644
--- a/qse/lib/cmn/main.c
+++ b/qse/lib/cmn/main.c
@@ -31,38 +31,36 @@ int qse_runmain (
return handler (argc, (qse_char_t**)argv);
#else
+ int i, ret;
+ qse_char_t** v;
+ qse_mmgr_t* mmgr = QSE_MMGR_GETDFL ();
+
+ v = (qse_char_t**) QSE_MMGR_ALLOC (
+ mmgr, (argc + 1) * QSE_SIZEOF(qse_char_t*));
+ if (v == QSE_NULL) return -1;
+
+ for (i = 0; i < argc + 1; i++) v[i] = QSE_NULL;
+
+ for (i = 0; i < argc; i++)
{
- int i, ret;
- qse_char_t** v;
- qse_mmgr_t* mmgr = QSE_MMGR_GETDFL ();
-
- v = (qse_char_t**) QSE_MMGR_ALLOC (
- mmgr, (argc + 1) * QSE_SIZEOF(qse_char_t*));
- if (v == QSE_NULL) return -1;
-
- for (i = 0; i < argc + 1; i++) v[i] = QSE_NULL;
-
- for (i = 0; i < argc; i++)
+ v[i]= qse_mbstowcsalldup (argv[i], mmgr);
+ if (v[i] == QSE_NULL)
{
- v[i]= qse_mbstowcsalldup (argv[i], mmgr);
- if (v[i] == QSE_NULL)
- {
- ret = -1;
- goto oops;
- }
+ ret = -1;
+ goto oops;
}
-
- ret = handler (argc, v);
-
- oops:
- for (i = 0; i < argc + 1; i++)
- {
- if (v[i] != QSE_NULL) QSE_MMGR_FREE (mmgr, v[i]);
- }
- QSE_MMGR_FREE (mmgr, v);
-
- return ret;
}
+
+ ret = handler (argc, v);
+
+oops:
+ for (i = 0; i < argc + 1; i++)
+ {
+ if (v[i] != QSE_NULL) QSE_MMGR_FREE (mmgr, v[i]);
+ }
+ QSE_MMGR_FREE (mmgr, v);
+
+ return ret;
#endif
}
@@ -72,50 +70,47 @@ int qse_runmainwithenv (
{
#if (defined(QSE_ACHAR_IS_MCHAR) && defined(QSE_CHAR_IS_MCHAR)) || \
(defined(QSE_ACHAR_IS_WCHAR) && defined(QSE_CHAR_IS_WCHAR))
- {
- return handler (argc, (qse_char_t**)argv, (qse_char_t**)envp);
- }
+ return handler (argc, (qse_char_t**)argv, (qse_char_t**)envp);
#else
+ int i, ret, envc;
+ qse_char_t** v;
+ qse_mmgr_t* mmgr = QSE_MMGR_GETDFL ();
+
+ if (envp) for (envc = 0; envp[envc]; envc++) ; /* count the number of env items */
+ else envc = 0;
+
+ v = (qse_char_t**) QSE_MMGR_ALLOC (
+ mmgr, (argc + 1 + envc + 1) * QSE_SIZEOF(qse_char_t*));
+ if (v == QSE_NULL) return -1;
+
+ for (i = 0; i < argc + 1 + envc + 1; i++) v[i] = QSE_NULL;
+
+ for (i = 0; i < argc + 1 + envc; i++)
{
- int i, ret, envc;
- qse_char_t** v;
- qse_mmgr_t* mmgr = QSE_MMGR_GETDFL ();
+ qse_achar_t* x;
- for (envc = 0; envp[envc]; envc++) ; /* count the number of env items */
+ if (i < argc) x = argv[i];
+ else if (i == argc) continue;
+ else x = envp[i - argc - 1];
- v = (qse_char_t**) QSE_MMGR_ALLOC (
- mmgr, (argc + 1 + envc + 1) * QSE_SIZEOF(qse_char_t*));
- if (v == QSE_NULL) return -1;
-
- for (i = 0; i < argc + 1 + envc + 1; i++) v[i] = QSE_NULL;
-
- for (i = 0; i < argc + 1 + envc; i++)
+ v[i]= qse_mbstowcsalldup (x, mmgr);
+ if (v[i] == QSE_NULL)
{
- qse_achar_t* x;
-
- if (i < argc) x = argv[i];
- else if (i == argc) continue;
- else x = envp[i - argc - 1];
-
- v[i]= qse_mbstowcsalldup (x, mmgr);
- if (v[i] == QSE_NULL)
- {
- ret = -1;
- goto oops;
- }
+ ret = -1;
+ goto oops;
}
-
- ret = handler (argc, v, &v[argc + 1]);
-
- oops:
- for (i = 0; i < argc + 1 + envc + 1; i++)
- {
- if (v[i] != QSE_NULL) QSE_MMGR_FREE (mmgr, v[i]);
- }
- QSE_MMGR_FREE (mmgr, v);
-
- return ret;
}
+
+ ret = handler (argc, v, &v[argc + 1]);
+
+oops:
+ for (i = 0; i < argc + 1 + envc + 1; i++)
+ {
+ if (v[i] != QSE_NULL) QSE_MMGR_FREE (mmgr, v[i]);
+ }
+ QSE_MMGR_FREE (mmgr, v);
+
+ return ret;
#endif
}
diff --git a/qse/lib/cmn/task.c b/qse/lib/cmn/task.c
index a676083d..26f73e7e 100644
--- a/qse/lib/cmn/task.c
+++ b/qse/lib/cmn/task.c
@@ -19,250 +19,254 @@
*/
#include
+#include "mem.h"
#if defined(_WIN64)
# include
#else
+# include
# if defined(HAVE_UCONTEXT_H)
# include
# endif
-# include
+# if defined(HAVE_MAKECONTEXT) && defined(HAVE_SWAPCONTEXT) && \
+ defined(HAVE_GETCONTEXT) && defined(HAVE_SETCONTEXT)
+# define USE_UCONTEXT
+# endif
#endif
-typedef struct tmgr_t tmgr_t;
-struct tmgr_t
+struct qse_task_t
{
- int count;
- int idinc;
+ qse_mmgr_t* mmgr;
- qse_task_t* dead;
- qse_task_t* current;
- qse_task_t* head;
- qse_task_t* tail;
+ qse_task_slice_t* dead;
+ qse_task_slice_t* current;
+
+ qse_size_t count;
+ qse_task_slice_t* head;
+ qse_task_slice_t* tail;
#if defined(_WIN64)
void* fiber;
-#elif defined(HAVE_SWAPCONTEXT)
+#elif defined(USE_UCONTEXT)
ucontext_t uctx;
#else
jmp_buf backjmp;
#endif
};
-struct qse_task_t
+struct qse_task_slice_t
{
- /* queue */
- tmgr_t* tmgr;
-
- int id;
-
- qse_task_fnc_t fnc;
- void* ctx;
- qse_size_t stsize;
-
#if defined(_WIN64)
void* fiber;
-#elif defined(HAVE_SWAPCONTEXT)
+#elif defined(USE_UCONTEXT)
ucontext_t uctx;
#else
jmp_buf jmpbuf;
#endif
- qse_task_t* prev;
- qse_task_t* next;
+ qse_task_t* task;
+
+ int id;
+ qse_task_fnc_t fnc;
+ void* ctx;
+ qse_size_t stksize;
+
+ qse_task_slice_t* prev;
+ qse_task_slice_t* next;
};
-static tmgr_t* tmgr;
+int qse_task_init (qse_task_t* task, qse_mmgr_t* mmgr);
+void qse_task_fini (qse_task_t* task);
-qse_task_t* qse_task_alloc (qse_task_fnc_t fnc, void* ctx, qse_size_t stsize)
+static void purge_slice (qse_task_t* task, qse_task_slice_t* slice);
+static void purge_dead_slices (qse_task_t* task);
+static void purge_current_slice (qse_task_slice_t* slice, qse_task_slice_t* to);
+
+qse_task_t* qse_task_open (qse_mmgr_t* mmgr, qse_size_t xtnsize)
{
qse_task_t* task;
- task = malloc (QSE_SIZEOF(*task) + stsize);
+ task = QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(*task) + xtnsize);
if (task == QSE_NULL) return QSE_NULL;
-
- //QSE_MEMSET (task, 0, QSE_SIZEOF(*task));
- QSE_MEMSET (task, 0, QSE_SIZEOF(*task) + stsize);
- task->tmgr = tmgr;
- task->fnc = fnc;
- task->ctx = ctx;
- task->stsize = stsize;
-
- if (tmgr->head)
+
+ if (qse_task_init (task, mmgr) <= -1)
{
- task->next= tmgr->head;
- tmgr->head->prev = task;
- tmgr->head = task;
- }
- else
- {
- tmgr->head = task;
- tmgr->tail = task;
+ QSE_MMGR_FREE (task->mmgr, task);
+ return QSE_NULL;
}
- task->id = tmgr->idinc;
- tmgr->count++;
- tmgr->idinc++;
-
+ QSE_MEMSET (task + 1, 0, xtnsize);
return task;
}
-static void purge_dead_tasks (void)
+void qse_task_close (qse_task_t* task)
{
- qse_task_t* x;
+ qse_task_fini (task);
+ QSE_MMGR_FREE (task->mmgr, task);
+}
- while (tmgr->dead)
+int qse_task_init (qse_task_t* task, qse_mmgr_t* mmgr)
+{
+ QSE_MEMSET (task, 0, QSE_SIZEOF(*task));
+ task->mmgr = mmgr;
+ return 0;
+}
+
+void qse_task_fini (qse_task_t* task)
+{
+ QSE_ASSERT (task->dead == QSE_NULL);
+ QSE_ASSERT (task->current == QSE_NULL);
+
+ if (task->count > 0)
{
- x = tmgr->dead;
- tmgr->dead = x->next;
-#if defined(_WIN64)
- DeleteFiber (x->fiber);
-#endif
- free (x);
+ /* am i closing after boot failure? */
+ qse_task_slice_t* slice, * next;
+
+ slice = task->head;
+ while (slice)
+ {
+ next = slice->next;
+ purge_slice (task, slice);
+ slice = next;
+ }
+
+ task->count = 0;
+ task->head = QSE_NULL;
+ task->tail = QSE_NULL;
}
}
-void qse_task_schedule (void)
+qse_mmgr_t* qse_task_getmmgr (qse_task_t* task)
{
- qse_task_t* current;
+ return task->mmgr;
+}
- current = tmgr->current; /* old current */
- tmgr->current = current->next? current->next: tmgr->head;
-
-#if defined(_WIN64)
- /* current->fiber is handled by SwitchToFiber() implicitly */
- SwitchToFiber (tmgr->current->fiber);
- purge_dead_tasks ();
-#elif defined(HAVE_SWAPCONTEXT)
- swapcontext (¤t->uctx, &tmgr->current->uctx);
- purge_dead_tasks ();
-#else
-//printf ("switch from %d to %d\n", current->id, tmgr->current->id);
- if (setjmp (current->jmpbuf) != 0)
+void* qse_task_getxtn (qse_task_t* task)
+{
+ return (void*)(task + 1);
+}
+
+static qse_task_slice_t* alloc_slice (
+ qse_task_t* task, qse_task_fnc_t fnc,
+ void* ctx, qse_size_t stksize)
+{
+ qse_task_slice_t* slice;
+
+ slice = QSE_MMGR_ALLOC (task->mmgr, QSE_SIZEOF(*slice) + stksize);
+ if (slice == QSE_NULL) return QSE_NULL;
+
+ QSE_MEMSET (slice, 0, QSE_SIZEOF(*slice));
+ slice->task = task;
+ slice->fnc = fnc;
+ slice->ctx = ctx;
+ slice->stksize = stksize;
+
+ return slice;
+}
+
+static void link_task (qse_task_t* task, qse_task_slice_t* slice)
+{
+ if (task->head)
{
- purge_dead_tasks ();
- return;
+ slice->next = task->head;
+ task->head->prev = slice;
+ task->head = slice;
}
- longjmp (tmgr->current->jmpbuf, 1);
-#endif
-}
-
-static void purge_current_task (void)
-{
- qse_task_t* current;
-
- if (tmgr->count == 1)
+ else
{
- /* to purge later */
- tmgr->current->next = tmgr->dead;
- tmgr->dead = tmgr->current;
-
- tmgr->current = QSE_NULL;
- tmgr->head = QSE_NULL;
- tmgr->tail = QSE_NULL;
- tmgr->count = 0;
- tmgr->idinc = 0;
-
-#if defined(_WIN64)
- SwitchToFiber (tmgr->fiber);
-#elif defined(HAVE_SWAPCONTEXT)
- setcontext (&tmgr->uctx);
-#else
- longjmp (tmgr->backjmp, 1);
-#endif
- assert (!"must not reach here....");
+ task->head = slice;
+ task->tail = slice;
}
-
- current = tmgr->current;
- tmgr->current = current->next? current->next: tmgr->head;
- if (current->prev) current->prev->next = current->next;
- if (current->next) current->next->prev = current->prev;
- if (current == tmgr->head) tmgr->head = current->next;
- if (current == tmgr->tail) tmgr->tail = current->prev;
- tmgr->count--;
-
- /* to purge later */
- current->next = tmgr->dead;
- tmgr->dead = current;
+ task->count++;
+}
#if defined(_WIN64)
- SwitchToFiber (tmgr->current->fiber);
-#elif defined(HAVE_SWAPCONTEXT)
- setcontext (&tmgr->current->uctx);
+# define __CALL_BACK__ __stdcall
#else
- longjmp (tmgr->current->jmpbuf, 1);
+# define __CALL_BACK__
#endif
-}
-#if defined(_WIN64)
-static void __stdcall execute_current_task (void* task)
+static void __CALL_BACK__ execute_current_slice (qse_task_slice_t* slice)
{
- assert (tmgr->current != QSE_NULL);
- tmgr->current->fnc (tmgr->current->ctx);
- purge_current_task ();
-}
-#else
+ qse_task_slice_t* to;
-static void execute_current_task (void)
-{
- assert (tmgr->current != QSE_NULL);
-
- tmgr->current->fnc (tmgr->current->ctx);
+ QSE_ASSERT (slice->task->current == slice);
+ to = slice->fnc (slice->task, slice, slice->ctx);
/* the task function is now terminated. we need to
- * purge it from the task list */
- purge_current_task ();
+ * purge it from the slice list and switch to the next
+ * slice. */
+ purge_current_slice (slice, to);
+ QSE_ASSERT (!"must never reach here...");
}
-#endif
-
-static qse_task_t* xxtask;
-static void* xxoldsp;
#if defined(__WATCOMC__)
/* for watcom, i support i386/32bit only */
-extern void* set_sp (void*);
-#pragma aux set_sp = \
- "xchg eax, esp" \
+
+extern void* prepare_sp (void*);
+#pragma aux prepare_sp = \
+ "mov dword ptr[eax+4], esp" \
+ "mov esp, eax" \
+ "mov eax, dword ptr[esp+0]" \
parm [eax] value [eax] modify [esp]
+
+extern void* restore_sp (void);
+#pragma aux restore_sp = \
+ "mov esp, dword ptr[esp+4]" \
+ modify [esp]
+
+extern void* get_slice (void);
+#pragma aux get_slice = \
+ "mov eax, dword ptr[esp+0]" \
+ value [eax]
+
#endif
-qse_task_t* qse_maketask (qse_task_fnc_t fnc, void* ctx, qse_size_t stsize)
+qse_task_slice_t* qse_task_create (
+ qse_task_t* task, qse_task_fnc_t fnc,
+ void* ctx, qse_size_t stksize)
{
- qse_task_t* task;
- void* newsp;
+ qse_task_slice_t* slice;
+ register void* tmp;
+ stksize = ((stksize + QSE_SIZEOF(void*) - 1) / QSE_SIZEOF(void*)) * QSE_SIZEOF(void*);
#if defined(_WIN64)
- task = qse_task_alloc (fnc, ctx, 0);
- if (task == QSE_NULL) return QSE_NULL;
+ slice = alloc_slice (task, fnc, ctx, 0);
+ if (slice == QSE_NULL) return QSE_NULL;
- task->fiber = CreateFiberEx (stsize, stsize, FIBER_FLAG_FLOAT_SWITCH, execute_current_task, QSE_NULL);
- if (task->fiber == QSE_NULL)
+ slice->fiber = CreateFiberEx (
+ stksize, stksize, FIBER_FLAG_FLOAT_SWITCH,
+ execute_current_slice, slice);
+ if (slice->fiber == QSE_NULL)
{
-/* TODO: delete task */
+ QSE_MMGR_FREE (task->mmgr, slice);
return QSE_NULL;
}
-#elif defined(HAVE_SWAPCONTEXT)
+#elif defined(USE_UCONTEXT)
- task = qse_task_alloc (fnc, ctx, stsize);
- if (task == QSE_NULL) return QSE_NULL;
+ slice = alloc_slice (task, fnc, ctx, stksize);
+ if (slice == QSE_NULL) return QSE_NULL;
- if (getcontext (&task->uctx) <= -1)
+ if (getcontext (&slice->uctx) <= -1)
{
-/* TODO: delete task */
+ QSE_MMGR_FREE (task->mmgr, slice);
return QSE_NULL;
}
- task->uctx.uc_stack.ss_sp = task + 1;
- task->uctx.uc_stack.ss_size = stsize;
- task->uctx.uc_link = QSE_NULL;
- makecontext (&task->uctx, execute_current_task, 0);
+ slice->uctx.uc_stack.ss_sp = slice + 1;
+ slice->uctx.uc_stack.ss_size = stksize;
+ slice->uctx.uc_link = QSE_NULL;
+ makecontext (&slice->uctx, execute_current_slice, 1, slice);
#else
- task = qse_task_alloc (fnc, ctx, stsize);
- if (task == QSE_NULL) return QSE_NULL;
+ if (stksize < QSE_SIZEOF(void*) * 3)
+ stksize = QSE_SIZEOF(void*) * 3; /* for t1 & t2 */
+
+ slice = alloc_slice (task, fnc, ctx, stksize);
+ if (slice == QSE_NULL) return QSE_NULL;
/* setjmp() doesn't allow different stacks for
* each execution content. let me use some assembly
@@ -271,71 +275,65 @@ qse_task_t* qse_maketask (qse_task_fnc_t fnc, void* ctx, qse_size_t stsize)
*
* this stack is used for the task function when
* longjmp() is made. */
- xxtask = task;
- newsp = ((qse_uint8_t*)(task + 1)) + stsize - QSE_SIZEOF(void*);
+ tmp = ((qse_uint8_t*)(slice + 1)) + stksize - QSE_SIZEOF(void*);
+
+ tmp = (qse_uint8_t*)tmp - QSE_SIZEOF(void*);
+ *(void**)tmp = NULL; /* t1 */
+
+ tmp = (qse_uint8_t*)tmp - QSE_SIZEOF(void*);
+ *(void**)tmp = slice; /* t2 */
#if defined(__WATCOMC__)
- xxoldsp = set_sp (newsp);
+ tmp = prepare_sp (tmp);
#elif defined(__GNUC__) && (defined(__x86_64) || defined(__amd64))
- /*
__asm__ volatile (
- "xchgq %0, %%rsp\n"
- : "=r"(xxoldsp)
- : "0"(newsp)
- : "%rsp"
- );
- */
-
- __asm__ volatile (
- "movq %%rsp, %0\n\t"
- "movq %1, %%rsp\n"
- : "=m"(xxoldsp)
- : "r"(newsp)
+ "movq %%rsp, 8(%1)\n\t" /* t1 = %rsp */
+ "movq %1, %%rsp\n\t" /* %rsp = tmp */
+ "movq 0(%%rsp), %0\n" /* tmp = t2 */
+ : "=r"(tmp)
+ : "0"(tmp)
: "%rsp", "memory"
);
#elif defined(__GNUC__) && (defined(__i386) || defined(i386))
+
__asm__ volatile (
- "xchgl %0, %%esp\n"
- : "=r"(xxoldsp)
- : "0"(newsp)
- : "%esp"
+ "movl %%esp, 4(%1)\n\t" /* t1 = %esp */
+ "movl %1, %%esp\n\t" /* %esp = tmp */
+ "movl 0(%%esp), %0\n" /* tmp = t2 */
+ : "=r"(tmp)
+ : "0"(tmp)
+ : "%esp", "memory"
);
+
#elif defined(__GNUC__) && (defined(__mips) || defined(mips))
+
__asm__ volatile (
- "sw $sp, %0\n\t" /* store $sp to xxoldsp */
- "move $sp, %1\n" /* move the register content for newsp to $sp */
- : "=m"(xxoldsp)
- : "r"(newsp)
+ "sw $sp, 4(%1)\n\t" /* t1 = $sp */
+ "move $sp, %1\n\t" /* %sp = tmp */
+ "lw %0, 0($sp)\n" /* tmp = t2 */
+ : "=r"(tmp)
+ : "0"(tmp)
: "$sp", "memory"
);
- /*
- __asm__ volatile (
- "move %0, $sp\n\t"
- "move $sp, %1\n"
- : "=&r"(xxoldsp)
- : "r"(newsp)
- : "$sp", "memory"
- );
- */
#elif defined(__GNUC__) && defined(__arm__)
__asm__ volatile (
- "str sp, %0\n\t"
- "mov sp, %1\n"
- : "=m"(xxoldsp)
- : "r"(newsp)
+ "str sp, [%1, #4]\n\t" /* t1 = sp */
+ "mov sp, %1\n" /* sp = tmp */
+ "ldr %0, [sp, #0]\n" /* tmp = t2 */
+ : "=r"(tmp)
+ : "0"(tmp)
: "sp", "memory"
);
-/* TODO: support more architecture */
#else
+ /* TODO: support more architecture */
- /* TODO: destroy task */
- //tmgr->errnum = QSE_TMGR_ENOIMPL;
+ QSE_MMGR_FREE (task->mmgr, task);
return QSE_NULL;
#endif /* __WATCOMC__ */
@@ -349,112 +347,254 @@ qse_task_t* qse_maketask (qse_task_fnc_t fnc, void* ctx, qse_size_t stsize)
* this approach makes this function thread-unsafe.
*/
- /* when qse_maketask() is called,
+ /* when qse_task_task_create() is called,
* setjmp() saves the context and return 0.
*
* subsequently, when longjmp() is made
* for this saved context, setjmp() returns
* a non-zero value.
*/
- if (setjmp (xxtask->jmpbuf) != 0)
+ if (setjmp (((qse_task_slice_t*)tmp)->jmpbuf) != 0)
{
/* longjmp() is made to here. */
- execute_current_task ();
- assert (!"must never reach here....\n");
+#if defined(__WATCOMC__)
+ tmp = get_slice ();
+
+#elif defined(__GNUC__) && (defined(__x86_64) || defined(__amd64))
+ __asm__ volatile (
+ "movq 0(%%rsp), %0\n" /* tmp = t2 */
+ : "=r"(tmp)
+ );
+#elif defined(__GNUC__) && (defined(__i386) || defined(i386))
+ __asm__ volatile (
+ "movl 0(%%esp), %0\n" /* tmp = t2 */
+ : "=r"(tmp)
+ );
+#elif defined(__GNUC__) && (defined(__mips) || defined(mips))
+ __asm__ volatile (
+ "lw %0, 0($sp)\n" /* tmp = t2 */
+ : "=r"(tmp)
+ );
+#elif defined(__GNUC__) && defined(__arm__)
+ __asm__ volatile (
+ "ldr %0, [sp, #0]\n" /* tmp = t2 */
+ : "=r"(tmp)
+ );
+#endif /* __WATCOMC__ */
+
+ execute_current_slice ((qse_task_slice_t*)tmp);
+ QSE_ASSERT (!"must never reach here....\n");
}
/* restore the stack pointer once i finish saving the longjmp() context.
- * this part is reached only when qse_maketask() is invoked. */
+ * this part is reached only when qse_task_task_create() is invoked. */
#if defined(__WATCOMC__)
- set_sp (xxoldsp);
+ restore_sp ();
#elif defined(__GNUC__) && (defined(__x86_64) || defined(__amd64))
+ /* i assume that %rsp didn't change after the call to setjmp() */
__asm__ volatile (
- "movq %0, %%rsp\n"
- :
- : "m"(xxoldsp) /*"r"(xxoldsp)*/
- : "%rsp"
+ "movq 8(%%rsp), %%rsp\n" /* %rsp = t1 */
+ :
+ :
+ : "%rsp"
);
#elif defined(__GNUC__) && (defined(__i386) || defined(i386))
+
__asm__ volatile (
- "movl %0, %%esp\n"
- :
- : "r"(xxoldsp)
- : "%esp"
+ "movl 4(%%esp), %%esp\n" /* %esp = t1 */
+ :
+ :
+ : "%esp"
);
#elif defined(__GNUC__) && (defined(__mips) || defined(mips))
+
__asm__ volatile (
- "lw $sp, %0\n" /*"move $sp, %0\n" */
- :
- : "m"(xxoldsp) /* "r"(xxoldsp) */
+ "lw $sp, 4($sp)\n" /* $sp = t1 */
+ :
+ :
: "$sp"
);
+
#elif defined(__GNUC__) && defined(__arm__)
__asm__ volatile (
- "ldr sp, %0\n"
- :
- : "m"(xxoldsp)
+ "ldr sp, [sp, #4]\n" /* sp = t1 */
+ :
+ :
: "sp"
);
+
#endif /* __WATCOMC__ */
#endif
- return task;
+ link_task (task, slice);
+ return slice;
}
-int qse_gettaskid (qse_task_t* task)
+int qse_task_boot (qse_task_t* task, qse_task_slice_t* to)
{
- return task->id;
-}
+ QSE_ASSERT (task->current == QSE_NULL);
-int qse_task_boot (void)
-{
- if (tmgr->count <= 0) return -1;
+ if (to == QSE_NULL) to = task->head;
#if defined(_WIN64)
- tmgr->fiber = ConvertThreadToFiberEx (QSE_NULL, FIBER_FLAG_FLOAT_SWITCH);
- if (tmgr->fiber == QSE_NULL)
- {
-/*TODO: destroy all the tasks created */
- return -1;
- }
+ task->fiber = ConvertThreadToFiberEx (QSE_NULL, FIBER_FLAG_FLOAT_SWITCH);
+ if (task->fiber == QSE_NULL) return -1;
- tmgr->current = tmgr->tail;
- SwitchToFiber (tmgr->current->fiber);
+ task->current = to;
+ SwitchToFiber (task->current->fiber);
ConvertFiberToThread ();
-#elif defined(HAVE_SWAPCONTEXT)
+#elif defined(USE_UCONTEXT)
- tmgr->current = tmgr->tail;
- if (swapcontext (&tmgr->uctx, &tmgr->current->uctx) <= -1)
+ task->current = to;
+ if (swapcontext (&task->uctx, &task->current->uctx) <= -1)
{
-/*TODO: destroy all the tasks created */
+ task->current = QSE_NULL;
return -1;
}
#else
- if (setjmp (tmgr->backjmp) != 0)
+ if (setjmp (task->backjmp) != 0)
{
/* longjmp() back */
goto done;
}
- tmgr->current = tmgr->tail;
- longjmp (tmgr->current->jmpbuf, 1);
- assert (!"must never reach here");
+ task->current = to;
+ longjmp (task->current->jmpbuf, 1);
+ QSE_ASSERT (!"must never reach here");
done:
#endif
- assert (tmgr->current == QSE_NULL);
- assert (tmgr->count == 0);
+ QSE_ASSERT (task->current == QSE_NULL);
+ QSE_ASSERT (task->count == 0);
- purge_dead_tasks ();
- printf ("END OF TASK_BOOT...\n");
+ if (task->dead) purge_dead_slices (task);
return 0;
}
+/* NOTE for __WATCOMC__.
+ when the number of parameters are more than 2 for qse_task_schedule(),
+ this setjmp()/longjmp() based tasking didn't work.
+
+ if i change this to
+void qse_task_schedule (qse_task_slice_t* from, qse_task_slice_t* to)
+{
+ qse_task_t* task = from->task
+ ....
+}
+
+ it worked. i stopped investigating this problem. so i don't know the
+ real cause of this problem. let me get back to this later when i have
+ time for this.
+*/
+
+void qse_task_schedule (
+ qse_task_t* task, qse_task_slice_t* from, qse_task_slice_t* to)
+{
+ QSE_ASSERT (from != QSE_NULL);
+
+ if (to == QSE_NULL)
+ {
+ /* round-robin if the target is not specified */
+ to = from->next? from->next: task->head;
+ }
+
+ QSE_ASSERT (task == to->task);
+ QSE_ASSERT (task == from->task);
+ QSE_ASSERT (task->current == from);
+
+ if (to == from) return;
+ task->current = to;
+
+#if defined(_WIN64)
+ /* current->fiber is handled by SwitchToFiber() implicitly */
+ SwitchToFiber (to->fiber);
+ if (task->dead) purge_dead_slices (task);
+#elif defined(USE_UCONTEXT)
+ swapcontext (&from->uctx, &to->uctx);
+ if (task->dead) purge_dead_slices (task);
+#else
+ if (setjmp (from->jmpbuf) != 0)
+ {
+ if (task->dead) purge_dead_slices (task);
+ return;
+ }
+ longjmp (to->jmpbuf, 1);
+#endif
+}
+
+static void purge_dead_slices (qse_task_t* task)
+{
+ qse_task_slice_t* slice;
+
+ while (task->dead)
+ {
+ slice = task->dead;
+ task->dead = slice->next;
+ purge_slice (task, slice);
+ }
+}
+
+static void purge_slice (qse_task_t* task, qse_task_slice_t* slice)
+{
+#if defined(_WIN64)
+ if (slice->fiber) DeleteFiber (slice->fiber);
+#endif
+ QSE_MMGR_FREE (task->mmgr, slice);
+}
+
+static void purge_current_slice (qse_task_slice_t* slice, qse_task_slice_t* to)
+{
+ qse_task_t* task = slice->task;
+
+ QSE_ASSERT (task->current == slice);
+
+ if (task->count == 1)
+ {
+ /* to purge later */
+ slice->next = task->dead;
+ task->dead = slice;
+
+ task->current = QSE_NULL;
+ task->head = QSE_NULL;
+ task->tail = QSE_NULL;
+ task->count = 0;
+
+#if defined(_WIN64)
+ SwitchToFiber (task->fiber);
+#elif defined(USE_UCONTEXT)
+ setcontext (&task->uctx);
+#else
+ longjmp (task->backjmp, 1);
+#endif
+ QSE_ASSERT (!"must not reach here....");
+ }
+
+ task->current = (to && to != slice)? to: (slice->next? slice->next: task->head);
+
+ if (slice->prev) slice->prev->next = slice->next;
+ if (slice->next) slice->next->prev = slice->prev;
+ if (slice == task->head) task->head = slice->next;
+ if (slice == task->tail) task->tail = slice->prev;
+ task->count--;
+
+ /* to purge later */
+ slice->next = task->dead;
+ task->dead = slice;
+
+#if defined(_WIN64)
+ SwitchToFiber (task->current->fiber);
+#elif defined(USE_UCONTEXT)
+ setcontext (&task->current->uctx);
+#else
+ longjmp (task->current->jmpbuf, 1);
+#endif
+}
+
diff --git a/qse/lib/cmn/tre.h b/qse/lib/cmn/tre.h
index cd5c1bce..e4155860 100644
--- a/qse/lib/cmn/tre.h
+++ b/qse/lib/cmn/tre.h
@@ -281,10 +281,9 @@ typedef enum { STR_WIDE, STR_BYTE, STR_MBS, STR_USER } tre_str_type_t;
/* Returns number of bytes to add to (char *)ptr to make it
properly aligned for the type. */
-#define ALIGN(ptr, type) \
- ((((qse_uintptr_t)ptr) % QSE_SIZEOF(type)) \
- ? (QSE_SIZEOF(type) - (((qse_uintptr_t)ptr) % QSE_SIZEOF(type))) \
- : 0)
+#define ALIGN(ptr,type) \
+ ((((qse_uintptr_t)ptr) % QSE_SIZEOF(type))? \
+ (QSE_SIZEOF(type) - (((qse_uintptr_t)ptr) % QSE_SIZEOF(type))): 0)
#undef MAX
#undef MIN
diff --git a/qse/samples/awk/awk05.cpp b/qse/samples/awk/awk05.cpp
index 987028b2..bbe53a87 100644
--- a/qse/samples/awk/awk05.cpp
+++ b/qse/samples/awk/awk05.cpp
@@ -88,7 +88,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/awk/awk06.cpp b/qse/samples/awk/awk06.cpp
index 0c7904ac..2aa364e9 100644
--- a/qse/samples/awk/awk06.cpp
+++ b/qse/samples/awk/awk06.cpp
@@ -115,7 +115,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/awk/awk07.cpp b/qse/samples/awk/awk07.cpp
index 3e213b5c..d55be8f0 100644
--- a/qse/samples/awk/awk07.cpp
+++ b/qse/samples/awk/awk07.cpp
@@ -160,7 +160,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/awk/awk08.cpp b/qse/samples/awk/awk08.cpp
index 92bb65fc..54ac25ad 100644
--- a/qse/samples/awk/awk08.cpp
+++ b/qse/samples/awk/awk08.cpp
@@ -449,7 +449,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/awk/awk12.cpp b/qse/samples/awk/awk12.cpp
index 3954447a..d0222ebc 100644
--- a/qse/samples/awk/awk12.cpp
+++ b/qse/samples/awk/awk12.cpp
@@ -199,7 +199,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/awk/awk13.cpp b/qse/samples/awk/awk13.cpp
index 4e2cc083..3688f419 100644
--- a/qse/samples/awk/awk13.cpp
+++ b/qse/samples/awk/awk13.cpp
@@ -219,7 +219,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/awk/awk14.cpp b/qse/samples/awk/awk14.cpp
index bfb916aa..e50489c2 100644
--- a/qse/samples/awk/awk14.cpp
+++ b/qse/samples/awk/awk14.cpp
@@ -223,7 +223,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/Makefile.am b/qse/samples/cmn/Makefile.am
index 48a41475..f1bb9183 100644
--- a/qse/samples/cmn/Makefile.am
+++ b/qse/samples/cmn/Makefile.am
@@ -37,6 +37,7 @@ bin_PROGRAMS = \
sll \
slmb01 \
str01 \
+ task01 \
time \
tre01 \
uri01 \
diff --git a/qse/samples/cmn/Makefile.in b/qse/samples/cmn/Makefile.in
index 5e8d3873..94ca102c 100644
--- a/qse/samples/cmn/Makefile.in
+++ b/qse/samples/cmn/Makefile.in
@@ -41,8 +41,8 @@ bin_PROGRAMS = chr01$(EXEEXT) env$(EXEEXT) dll$(EXEEXT) fio01$(EXEEXT) \
mbwc02$(EXEEXT) nwad01$(EXEEXT) oht$(EXEEXT) path01$(EXEEXT) \
pio$(EXEEXT) pma$(EXEEXT) rex01$(EXEEXT) rbt$(EXEEXT) \
sio01$(EXEEXT) sio02$(EXEEXT) sio03$(EXEEXT) sll$(EXEEXT) \
- slmb01$(EXEEXT) str01$(EXEEXT) time$(EXEEXT) tre01$(EXEEXT) \
- uri01$(EXEEXT) xma$(EXEEXT)
+ slmb01$(EXEEXT) str01$(EXEEXT) task01$(EXEEXT) time$(EXEEXT) \
+ tre01$(EXEEXT) uri01$(EXEEXT) xma$(EXEEXT)
@WCHAR_TRUE@@WIN32_TRUE@am__append_1 = $(UNICOWS_LIBS)
subdir = samples/cmn
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
@@ -182,6 +182,10 @@ am_str01_OBJECTS = str01.$(OBJEXT)
str01_OBJECTS = $(am_str01_OBJECTS)
str01_LDADD = $(LDADD)
str01_DEPENDENCIES = $(am__DEPENDENCIES_2)
+task01_SOURCES = task01.c
+task01_OBJECTS = task01.$(OBJEXT)
+task01_LDADD = $(LDADD)
+task01_DEPENDENCIES = $(am__DEPENDENCIES_2)
am_time_OBJECTS = time.$(OBJEXT)
time_OBJECTS = $(am_time_OBJECTS)
time_LDADD = $(LDADD)
@@ -220,7 +224,7 @@ SOURCES = $(chr01_SOURCES) $(dll_SOURCES) $(env_SOURCES) \
$(oht_SOURCES) $(path01_SOURCES) $(pio_SOURCES) $(pma_SOURCES) \
$(rbt_SOURCES) $(rex01_SOURCES) $(sio01_SOURCES) \
$(sio02_SOURCES) $(sio03_SOURCES) $(sll_SOURCES) \
- $(slmb01_SOURCES) $(str01_SOURCES) $(time_SOURCES) \
+ $(slmb01_SOURCES) $(str01_SOURCES) task01.c $(time_SOURCES) \
$(tre01_SOURCES) uri01.c $(xma_SOURCES)
DIST_SOURCES = $(chr01_SOURCES) $(dll_SOURCES) $(env_SOURCES) \
$(fio01_SOURCES) $(fio02_SOURCES) $(fma_SOURCES) \
@@ -231,7 +235,7 @@ DIST_SOURCES = $(chr01_SOURCES) $(dll_SOURCES) $(env_SOURCES) \
$(oht_SOURCES) $(path01_SOURCES) $(pio_SOURCES) $(pma_SOURCES) \
$(rbt_SOURCES) $(rex01_SOURCES) $(sio01_SOURCES) \
$(sio02_SOURCES) $(sio03_SOURCES) $(sll_SOURCES) \
- $(slmb01_SOURCES) $(str01_SOURCES) $(time_SOURCES) \
+ $(slmb01_SOURCES) $(str01_SOURCES) task01.c $(time_SOURCES) \
$(tre01_SOURCES) uri01.c $(xma_SOURCES)
ETAGS = etags
CTAGS = ctags
@@ -596,6 +600,9 @@ slmb01$(EXEEXT): $(slmb01_OBJECTS) $(slmb01_DEPENDENCIES) $(EXTRA_slmb01_DEPENDE
str01$(EXEEXT): $(str01_OBJECTS) $(str01_DEPENDENCIES) $(EXTRA_str01_DEPENDENCIES)
@rm -f str01$(EXEEXT)
$(LINK) $(str01_OBJECTS) $(str01_LDADD) $(LIBS)
+task01$(EXEEXT): $(task01_OBJECTS) $(task01_DEPENDENCIES) $(EXTRA_task01_DEPENDENCIES)
+ @rm -f task01$(EXEEXT)
+ $(LINK) $(task01_OBJECTS) $(task01_LDADD) $(LIBS)
time$(EXEEXT): $(time_OBJECTS) $(time_DEPENDENCIES) $(EXTRA_time_DEPENDENCIES)
@rm -f time$(EXEEXT)
$(LINK) $(time_OBJECTS) $(time_LDADD) $(LIBS)
@@ -645,6 +652,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sll.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slmb01.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str01.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task01.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tre01.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uri01.Po@am__quote@
diff --git a/qse/samples/cmn/chr01.c b/qse/samples/cmn/chr01.c
index ecc00155..a158c919 100644
--- a/qse/samples/cmn/chr01.c
+++ b/qse/samples/cmn/chr01.c
@@ -34,7 +34,7 @@ int main ()
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/fmt01.c b/qse/samples/cmn/fmt01.c
index 33fd376a..a971fc7e 100644
--- a/qse/samples/cmn/fmt01.c
+++ b/qse/samples/cmn/fmt01.c
@@ -62,7 +62,7 @@ int qse_main (int argc, qse_achar_t* argv[], qse_achar_t* envp[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/fmt02.c b/qse/samples/cmn/fmt02.c
index 3b041eb9..23c3e152 100644
--- a/qse/samples/cmn/fmt02.c
+++ b/qse/samples/cmn/fmt02.c
@@ -82,7 +82,7 @@ int qse_main (int argc, qse_achar_t* argv[], qse_achar_t* envp[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/fs01.c b/qse/samples/cmn/fs01.c
index 2a78bf34..b1064011 100644
--- a/qse/samples/cmn/fs01.c
+++ b/qse/samples/cmn/fs01.c
@@ -81,7 +81,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/glob01.c b/qse/samples/cmn/glob01.c
index 579d8309..fae72ec8 100644
--- a/qse/samples/cmn/glob01.c
+++ b/qse/samples/cmn/glob01.c
@@ -44,7 +44,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/ipad01.c b/qse/samples/cmn/ipad01.c
index 08c28e41..e71402a2 100644
--- a/qse/samples/cmn/ipad01.c
+++ b/qse/samples/cmn/ipad01.c
@@ -194,7 +194,7 @@ int qse_main (int argc, qse_achar_t* argv[], qse_achar_t* envp[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/main01.c b/qse/samples/cmn/main01.c
index 1a6b5c93..36d14356 100644
--- a/qse/samples/cmn/main01.c
+++ b/qse/samples/cmn/main01.c
@@ -28,7 +28,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/main02.c b/qse/samples/cmn/main02.c
index 438761e9..f26449e4 100644
--- a/qse/samples/cmn/main02.c
+++ b/qse/samples/cmn/main02.c
@@ -33,7 +33,7 @@ int qse_main (int argc, qse_achar_t* argv[], qse_achar_t* envp[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/mbwc01.c b/qse/samples/cmn/mbwc01.c
index 03e70730..372e36cb 100644
--- a/qse/samples/cmn/mbwc01.c
+++ b/qse/samples/cmn/mbwc01.c
@@ -219,7 +219,7 @@ int main ()
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/mbwc02.c b/qse/samples/cmn/mbwc02.c
index 1079a12c..c5865b95 100644
--- a/qse/samples/cmn/mbwc02.c
+++ b/qse/samples/cmn/mbwc02.c
@@ -299,7 +299,7 @@ int main ()
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/nwad01.c b/qse/samples/cmn/nwad01.c
index 7a3d1503..6f8cf359 100644
--- a/qse/samples/cmn/nwad01.c
+++ b/qse/samples/cmn/nwad01.c
@@ -155,12 +155,12 @@ static int test_main (int argc, qse_char_t* argv[], qse_char_t* envp[])
int qse_main (int argc, qse_achar_t* argv[], qse_achar_t* envp[])
{
#if defined(_WIN32)
- char locale[100];
+ char locale[100];
UINT codepage = GetConsoleOutputCP();
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/path01.c b/qse/samples/cmn/path01.c
index 1992bae4..64592ba4 100644
--- a/qse/samples/cmn/path01.c
+++ b/qse/samples/cmn/path01.c
@@ -71,7 +71,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/rex01.c b/qse/samples/cmn/rex01.c
index 95e15bcf..8401fde2 100644
--- a/qse/samples/cmn/rex01.c
+++ b/qse/samples/cmn/rex01.c
@@ -76,7 +76,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/sio01.c b/qse/samples/cmn/sio01.c
index 8ab483cf..4f91d98f 100644
--- a/qse/samples/cmn/sio01.c
+++ b/qse/samples/cmn/sio01.c
@@ -98,7 +98,7 @@ int main ()
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/sio02.c b/qse/samples/cmn/sio02.c
index 31806c6e..108fa558 100644
--- a/qse/samples/cmn/sio02.c
+++ b/qse/samples/cmn/sio02.c
@@ -151,7 +151,7 @@ int main ()
if (codepage == CP_UTF8)
{
/*SetConsoleOutputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/sio03.c b/qse/samples/cmn/sio03.c
index 45a4b190..7a43aa58 100644
--- a/qse/samples/cmn/sio03.c
+++ b/qse/samples/cmn/sio03.c
@@ -139,7 +139,7 @@ int main ()
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/slmb01.c b/qse/samples/cmn/slmb01.c
index 19db5879..8f5cea2b 100644
--- a/qse/samples/cmn/slmb01.c
+++ b/qse/samples/cmn/slmb01.c
@@ -200,7 +200,7 @@ int main ()
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/task01.c b/qse/samples/cmn/task01.c
new file mode 100644
index 00000000..aef02094
--- /dev/null
+++ b/qse/samples/cmn/task01.c
@@ -0,0 +1,104 @@
+#include
+#include
+#include
+#include
+#include
+
+#include
+#if defined(_WIN32)
+# include
+#endif
+
+static qse_task_slice_t* print (
+ qse_task_t* task, qse_task_slice_t* slice, void* ctx)
+{
+ int i;
+ int num = (int)ctx;
+
+ qse_printf (QSE_T("task[%03d] => starting\n"), num);
+ for (i = 0; i < 5; i++)
+ {
+ qse_printf (QSE_T("task[%03d] => %03d\n"), num, i);
+
+ qse_task_schedule (task, slice, QSE_NULL);
+
+ if (i == 2 && num == 1)
+ {
+ qse_task_create (task, print, (void*)99, 40000);
+ }
+ }
+
+ qse_printf (QSE_T("task[%03d] => exiting\n"), num);
+ return QSE_NULL;
+}
+
+static int start_task (qse_task_fnc_t fnc)
+{
+ qse_task_t* task;
+ qse_task_slice_t* slice;
+
+ task = qse_task_open (QSE_MMGR_GETDFL(), 0);
+ if (task == NULL)
+ {
+ qse_printf (QSE_T("cannot initialize tasking system\n"));
+ return -1;
+ }
+
+ qse_printf (QSE_T("== END ==\n"));
+
+ if (qse_task_create (task, fnc, (void*)1, 40000) == QSE_NULL ||
+ (slice = qse_task_create (task, fnc, (void*)2, 40000)) == QSE_NULL ||
+ qse_task_create (task, fnc, (void*)3, 40000) == QSE_NULL ||
+ qse_task_create (task, fnc, (void*)4, 40000) == QSE_NULL)
+ {
+ qse_printf (QSE_T("cannot create task slice\n"));
+ qse_task_close (task);
+ return -1;
+ }
+
+ if (qse_task_boot (task, slice) <= -1)
+ {
+ qse_printf (QSE_T("cannot start task\n"));
+ qse_task_close (task);
+ return -1;
+ }
+
+ qse_printf (QSE_T("== END ==\n"));
+
+ qse_task_close (task);
+ return 0;
+}
+
+static int test_main (int argc, qse_char_t* argv[])
+{
+ int ret;
+
+ ret = start_task (print);
+ qse_printf (QSE_T("== END ==\n"));
+
+ return ret;
+}
+
+int qse_main (int argc, qse_achar_t* argv[])
+{
+#if defined(_WIN32)
+ char locale[100];
+ UINT codepage = GetConsoleOutputCP();
+ if (codepage == CP_UTF8)
+ {
+ /*SetConsoleOUtputCP (CP_UTF8);*/
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
+ }
+ else
+ {
+ sprintf (locale, ".%u", (unsigned int)codepage);
+ setlocale (LC_ALL, locale);
+ qse_setdflcmgrbyid (QSE_CMGR_SLMB);
+ }
+#else
+ setlocale (LC_ALL, "");
+ qse_setdflcmgrbyid (QSE_CMGR_SLMB);
+#endif
+ return qse_runmain (argc, argv, test_main);
+}
+
diff --git a/qse/samples/cmn/tre01.c b/qse/samples/cmn/tre01.c
index 73995d12..37fa2fdf 100644
--- a/qse/samples/cmn/tre01.c
+++ b/qse/samples/cmn/tre01.c
@@ -83,7 +83,7 @@ int qse_main (int argc, qse_achar_t* argv[], qse_achar_t* envp[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/cmn/uri01.c b/qse/samples/cmn/uri01.c
index 42943739..bcad0c89 100644
--- a/qse/samples/cmn/uri01.c
+++ b/qse/samples/cmn/uri01.c
@@ -122,7 +122,7 @@ int qse_main (int argc, qse_achar_t* argv[], qse_achar_t* envp[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/net/httpd01.c b/qse/samples/net/httpd01.c
index accab2c1..4b383f4f 100644
--- a/qse/samples/net/httpd01.c
+++ b/qse/samples/net/httpd01.c
@@ -98,7 +98,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/net/httpd02.c b/qse/samples/net/httpd02.c
index 124a0811..8b37dadc 100644
--- a/qse/samples/net/httpd02.c
+++ b/qse/samples/net/httpd02.c
@@ -226,7 +226,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/net/upxd01.c b/qse/samples/net/upxd01.c
index 9d2431ac..8e6b834b 100644
--- a/qse/samples/net/upxd01.c
+++ b/qse/samples/net/upxd01.c
@@ -879,7 +879,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/sed/sed01.c b/qse/samples/sed/sed01.c
index 18bd2dd8..cfbdf54e 100644
--- a/qse/samples/sed/sed01.c
+++ b/qse/samples/sed/sed01.c
@@ -76,7 +76,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/sed/sed02.cpp b/qse/samples/sed/sed02.cpp
index b359d0db..add76ab2 100644
--- a/qse/samples/sed/sed02.cpp
+++ b/qse/samples/sed/sed02.cpp
@@ -85,7 +85,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/samples/sed/sed03.cpp b/qse/samples/sed/sed03.cpp
index 12eda8ea..60d645a4 100644
--- a/qse/samples/sed/sed03.cpp
+++ b/qse/samples/sed/sed03.cpp
@@ -100,7 +100,7 @@ int qse_main (int argc, qse_achar_t* argv[])
if (codepage == CP_UTF8)
{
/*SetConsoleOUtputCP (CP_UTF8);*/
- qse_setdflcmgr (qse_utf8cmgr);
+ qse_setdflcmgrbyid (QSE_CMGR_UTF8);
}
else
{
diff --git a/qse/watcom/debug/dos32/lib/cmn/qsecmn.tgt b/qse/watcom/debug/dos32/lib/cmn/qsecmn.tgt
index 9e345fbf..d2b9d9df 100755
--- a/qse/watcom/debug/dos32/lib/cmn/qsecmn.tgt
+++ b/qse/watcom/debug/dos32/lib/cmn/qsecmn.tgt
@@ -42,7 +42,7 @@ WVList
0
10
WPickList
-83
+85
11
MItem
3
@@ -564,7 +564,7 @@ WVList
127
MItem
29
-../../../../../lib/cmn/nwio.c
+../../../../../lib/cmn/nwif.c
128
WString
4
@@ -581,8 +581,8 @@ WVList
0
131
MItem
-28
-../../../../../lib/cmn/oht.c
+29
+../../../../../lib/cmn/nwio.c
132
WString
4
@@ -600,7 +600,7 @@ WVList
135
MItem
28
-../../../../../lib/cmn/opt.c
+../../../../../lib/cmn/oht.c
136
WString
4
@@ -617,8 +617,8 @@ WVList
0
139
MItem
-38
-../../../../../lib/cmn/path-basename.c
+28
+../../../../../lib/cmn/opt.c
140
WString
4
@@ -635,8 +635,8 @@ WVList
0
143
MItem
-35
-../../../../../lib/cmn/path-canon.c
+38
+../../../../../lib/cmn/path-basename.c
144
WString
4
@@ -653,8 +653,8 @@ WVList
0
147
MItem
-28
-../../../../../lib/cmn/pio.c
+35
+../../../../../lib/cmn/path-canon.c
148
WString
4
@@ -672,7 +672,7 @@ WVList
151
MItem
28
-../../../../../lib/cmn/pma.c
+../../../../../lib/cmn/pio.c
152
WString
4
@@ -690,7 +690,7 @@ WVList
155
MItem
28
-../../../../../lib/cmn/rbt.c
+../../../../../lib/cmn/pma.c
156
WString
4
@@ -708,7 +708,7 @@ WVList
159
MItem
28
-../../../../../lib/cmn/rex.c
+../../../../../lib/cmn/rbt.c
160
WString
4
@@ -726,7 +726,7 @@ WVList
163
MItem
28
-../../../../../lib/cmn/sio.c
+../../../../../lib/cmn/rex.c
164
WString
4
@@ -744,7 +744,7 @@ WVList
167
MItem
28
-../../../../../lib/cmn/sll.c
+../../../../../lib/cmn/sio.c
168
WString
4
@@ -761,8 +761,8 @@ WVList
0
171
MItem
-29
-../../../../../lib/cmn/slmb.c
+28
+../../../../../lib/cmn/sll.c
172
WString
4
@@ -779,8 +779,8 @@ WVList
0
175
MItem
-30
-../../../../../lib/cmn/stdio.c
+29
+../../../../../lib/cmn/slmb.c
176
WString
4
@@ -797,8 +797,8 @@ WVList
0
179
MItem
-32
-../../../../../lib/cmn/str-beg.c
+30
+../../../../../lib/cmn/stdio.c
180
WString
4
@@ -816,7 +816,7 @@ WVList
183
MItem
32
-../../../../../lib/cmn/str-cat.c
+../../../../../lib/cmn/str-beg.c
184
WString
4
@@ -834,7 +834,7 @@ WVList
187
MItem
32
-../../../../../lib/cmn/str-chr.c
+../../../../../lib/cmn/str-cat.c
188
WString
4
@@ -852,7 +852,7 @@ WVList
191
MItem
32
-../../../../../lib/cmn/str-cmp.c
+../../../../../lib/cmn/str-chr.c
192
WString
4
@@ -870,7 +870,7 @@ WVList
195
MItem
32
-../../../../../lib/cmn/str-cnv.c
+../../../../../lib/cmn/str-cmp.c
196
WString
4
@@ -888,7 +888,7 @@ WVList
199
MItem
32
-../../../../../lib/cmn/str-cpy.c
+../../../../../lib/cmn/str-cnv.c
200
WString
4
@@ -906,7 +906,7 @@ WVList
203
MItem
32
-../../../../../lib/cmn/str-del.c
+../../../../../lib/cmn/str-cpy.c
204
WString
4
@@ -924,7 +924,7 @@ WVList
207
MItem
32
-../../../../../lib/cmn/str-dup.c
+../../../../../lib/cmn/str-del.c
208
WString
4
@@ -941,8 +941,8 @@ WVList
0
211
MItem
-33
-../../../../../lib/cmn/str-dynm.c
+32
+../../../../../lib/cmn/str-dup.c
212
WString
4
@@ -960,7 +960,7 @@ WVList
215
MItem
33
-../../../../../lib/cmn/str-dynw.c
+../../../../../lib/cmn/str-dynm.c
216
WString
4
@@ -977,8 +977,8 @@ WVList
0
219
MItem
-32
-../../../../../lib/cmn/str-end.c
+33
+../../../../../lib/cmn/str-dynw.c
220
WString
4
@@ -995,8 +995,8 @@ WVList
0
223
MItem
-33
-../../../../../lib/cmn/str-excl.c
+32
+../../../../../lib/cmn/str-end.c
224
WString
4
@@ -1014,7 +1014,7 @@ WVList
227
MItem
33
-../../../../../lib/cmn/str-fcpy.c
+../../../../../lib/cmn/str-excl.c
228
WString
4
@@ -1031,8 +1031,8 @@ WVList
0
231
MItem
-34
-../../../../../lib/cmn/str-fnmat.c
+33
+../../../../../lib/cmn/str-fcpy.c
232
WString
4
@@ -1049,8 +1049,8 @@ WVList
0
235
MItem
-33
-../../../../../lib/cmn/str-incl.c
+34
+../../../../../lib/cmn/str-fnmat.c
236
WString
4
@@ -1067,8 +1067,8 @@ WVList
0
239
MItem
-32
-../../../../../lib/cmn/str-len.c
+33
+../../../../../lib/cmn/str-incl.c
240
WString
4
@@ -1086,7 +1086,7 @@ WVList
243
MItem
32
-../../../../../lib/cmn/str-pac.c
+../../../../../lib/cmn/str-len.c
244
WString
4
@@ -1103,8 +1103,8 @@ WVList
0
247
MItem
-33
-../../../../../lib/cmn/str-pbrk.c
+32
+../../../../../lib/cmn/str-pac.c
248
WString
4
@@ -1121,8 +1121,8 @@ WVList
0
251
MItem
-32
-../../../../../lib/cmn/str-put.c
+33
+../../../../../lib/cmn/str-pbrk.c
252
WString
4
@@ -1140,7 +1140,7 @@ WVList
255
MItem
32
-../../../../../lib/cmn/str-rev.c
+../../../../../lib/cmn/str-put.c
256
WString
4
@@ -1158,7 +1158,7 @@ WVList
259
MItem
32
-../../../../../lib/cmn/str-rot.c
+../../../../../lib/cmn/str-rev.c
260
WString
4
@@ -1176,7 +1176,7 @@ WVList
263
MItem
32
-../../../../../lib/cmn/str-set.c
+../../../../../lib/cmn/str-rot.c
264
WString
4
@@ -1194,7 +1194,7 @@ WVList
267
MItem
32
-../../../../../lib/cmn/str-spl.c
+../../../../../lib/cmn/str-set.c
268
WString
4
@@ -1212,7 +1212,7 @@ WVList
271
MItem
32
-../../../../../lib/cmn/str-spn.c
+../../../../../lib/cmn/str-spl.c
272
WString
4
@@ -1230,7 +1230,7 @@ WVList
275
MItem
32
-../../../../../lib/cmn/str-str.c
+../../../../../lib/cmn/str-spn.c
276
WString
4
@@ -1247,8 +1247,8 @@ WVList
0
279
MItem
-34
-../../../../../lib/cmn/str-subst.c
+32
+../../../../../lib/cmn/str-str.c
280
WString
4
@@ -1265,8 +1265,8 @@ WVList
0
283
MItem
-32
-../../../../../lib/cmn/str-tok.c
+34
+../../../../../lib/cmn/str-subst.c
284
WString
4
@@ -1284,7 +1284,7 @@ WVList
287
MItem
32
-../../../../../lib/cmn/str-trm.c
+../../../../../lib/cmn/str-tok.c
288
WString
4
@@ -1301,8 +1301,8 @@ WVList
0
291
MItem
-33
-../../../../../lib/cmn/str-word.c
+32
+../../../../../lib/cmn/str-trm.c
292
WString
4
@@ -1319,8 +1319,8 @@ WVList
0
295
MItem
-29
-../../../../../lib/cmn/time.c
+33
+../../../../../lib/cmn/str-word.c
296
WString
4
@@ -1337,8 +1337,8 @@ WVList
0
299
MItem
-28
-../../../../../lib/cmn/tio.c
+29
+../../../../../lib/cmn/task.c
300
WString
4
@@ -1355,8 +1355,8 @@ WVList
0
303
MItem
-32
-../../../../../lib/cmn/tre-ast.c
+29
+../../../../../lib/cmn/time.c
304
WString
4
@@ -1373,8 +1373,8 @@ WVList
0
307
MItem
-36
-../../../../../lib/cmn/tre-compile.c
+28
+../../../../../lib/cmn/tio.c
308
WString
4
@@ -1391,8 +1391,8 @@ WVList
0
311
MItem
-44
-../../../../../lib/cmn/tre-match-backtrack.c
+32
+../../../../../lib/cmn/tre-ast.c
312
WString
4
@@ -1409,8 +1409,8 @@ WVList
0
315
MItem
-43
-../../../../../lib/cmn/tre-match-parallel.c
+36
+../../../../../lib/cmn/tre-compile.c
316
WString
4
@@ -1427,8 +1427,8 @@ WVList
0
319
MItem
-34
-../../../../../lib/cmn/tre-parse.c
+44
+../../../../../lib/cmn/tre-match-backtrack.c
320
WString
4
@@ -1445,8 +1445,8 @@ WVList
0
323
MItem
-34
-../../../../../lib/cmn/tre-stack.c
+43
+../../../../../lib/cmn/tre-match-parallel.c
324
WString
4
@@ -1463,8 +1463,8 @@ WVList
0
327
MItem
-28
-../../../../../lib/cmn/tre.c
+34
+../../../../../lib/cmn/tre-parse.c
328
WString
4
@@ -1481,8 +1481,8 @@ WVList
0
331
MItem
-29
-../../../../../lib/cmn/utf8.c
+34
+../../../../../lib/cmn/tre-stack.c
332
WString
4
@@ -1500,7 +1500,7 @@ WVList
335
MItem
28
-../../../../../lib/cmn/xma.c
+../../../../../lib/cmn/tre.c
336
WString
4
@@ -1517,44 +1517,44 @@ WVList
0
339
MItem
-3
-*.h
+29
+../../../../../lib/cmn/utf8.c
340
WString
-3
-NIL
+4
+COBJ
341
WVList
0
342
WVList
0
--1
+11
1
1
0
343
MItem
28
-../../../../../lib/cmn/mem.h
+../../../../../lib/cmn/xma.c
344
WString
-3
-NIL
+4
+COBJ
345
WVList
0
346
WVList
0
-339
+11
1
1
0
347
MItem
-32
-../../../../../lib/cmn/syscall.h
+3
+*.h
348
WString
3
@@ -1565,7 +1565,43 @@ WVList
350
WVList
0
-339
+-1
+1
+1
+0
+351
+MItem
+28
+../../../../../lib/cmn/mem.h
+352
+WString
+3
+NIL
+353
+WVList
+0
+354
+WVList
+0
+347
+1
+1
+0
+355
+MItem
+32
+../../../../../lib/cmn/syscall.h
+356
+WString
+3
+NIL
+357
+WVList
+0
+358
+WVList
+0
+347
1
1
0
diff --git a/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt b/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt
index 12274d8f..dfe4984e 100755
--- a/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt
+++ b/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt
@@ -42,7 +42,7 @@ WVList
0
10
WPickList
-83
+85
11
MItem
3
@@ -576,7 +576,7 @@ WVList
130
MItem
29
-../../../../../lib/cmn/nwio.c
+../../../../../lib/cmn/nwif.c
131
WString
4
@@ -593,8 +593,8 @@ WVList
0
134
MItem
-28
-../../../../../lib/cmn/oht.c
+29
+../../../../../lib/cmn/nwio.c
135
WString
4
@@ -612,7 +612,7 @@ WVList
138
MItem
28
-../../../../../lib/cmn/opt.c
+../../../../../lib/cmn/oht.c
139
WString
4
@@ -629,8 +629,8 @@ WVList
0
142
MItem
-38
-../../../../../lib/cmn/path-basename.c
+28
+../../../../../lib/cmn/opt.c
143
WString
4
@@ -647,8 +647,8 @@ WVList
0
146
MItem
-35
-../../../../../lib/cmn/path-canon.c
+38
+../../../../../lib/cmn/path-basename.c
147
WString
4
@@ -665,8 +665,8 @@ WVList
0
150
MItem
-28
-../../../../../lib/cmn/pio.c
+35
+../../../../../lib/cmn/path-canon.c
151
WString
4
@@ -684,7 +684,7 @@ WVList
154
MItem
28
-../../../../../lib/cmn/pma.c
+../../../../../lib/cmn/pio.c
155
WString
4
@@ -702,7 +702,7 @@ WVList
158
MItem
28
-../../../../../lib/cmn/rbt.c
+../../../../../lib/cmn/pma.c
159
WString
4
@@ -720,7 +720,7 @@ WVList
162
MItem
28
-../../../../../lib/cmn/rex.c
+../../../../../lib/cmn/rbt.c
163
WString
4
@@ -738,7 +738,7 @@ WVList
166
MItem
28
-../../../../../lib/cmn/sio.c
+../../../../../lib/cmn/rex.c
167
WString
4
@@ -756,7 +756,7 @@ WVList
170
MItem
28
-../../../../../lib/cmn/sll.c
+../../../../../lib/cmn/sio.c
171
WString
4
@@ -773,8 +773,8 @@ WVList
0
174
MItem
-29
-../../../../../lib/cmn/slmb.c
+28
+../../../../../lib/cmn/sll.c
175
WString
4
@@ -791,8 +791,8 @@ WVList
0
178
MItem
-30
-../../../../../lib/cmn/stdio.c
+29
+../../../../../lib/cmn/slmb.c
179
WString
4
@@ -809,8 +809,8 @@ WVList
0
182
MItem
-32
-../../../../../lib/cmn/str-beg.c
+30
+../../../../../lib/cmn/stdio.c
183
WString
4
@@ -828,7 +828,7 @@ WVList
186
MItem
32
-../../../../../lib/cmn/str-cat.c
+../../../../../lib/cmn/str-beg.c
187
WString
4
@@ -846,7 +846,7 @@ WVList
190
MItem
32
-../../../../../lib/cmn/str-chr.c
+../../../../../lib/cmn/str-cat.c
191
WString
4
@@ -864,7 +864,7 @@ WVList
194
MItem
32
-../../../../../lib/cmn/str-cmp.c
+../../../../../lib/cmn/str-chr.c
195
WString
4
@@ -882,7 +882,7 @@ WVList
198
MItem
32
-../../../../../lib/cmn/str-cnv.c
+../../../../../lib/cmn/str-cmp.c
199
WString
4
@@ -900,7 +900,7 @@ WVList
202
MItem
32
-../../../../../lib/cmn/str-cpy.c
+../../../../../lib/cmn/str-cnv.c
203
WString
4
@@ -918,7 +918,7 @@ WVList
206
MItem
32
-../../../../../lib/cmn/str-del.c
+../../../../../lib/cmn/str-cpy.c
207
WString
4
@@ -936,7 +936,7 @@ WVList
210
MItem
32
-../../../../../lib/cmn/str-dup.c
+../../../../../lib/cmn/str-del.c
211
WString
4
@@ -953,8 +953,8 @@ WVList
0
214
MItem
-33
-../../../../../lib/cmn/str-dynm.c
+32
+../../../../../lib/cmn/str-dup.c
215
WString
4
@@ -972,7 +972,7 @@ WVList
218
MItem
33
-../../../../../lib/cmn/str-dynw.c
+../../../../../lib/cmn/str-dynm.c
219
WString
4
@@ -989,8 +989,8 @@ WVList
0
222
MItem
-32
-../../../../../lib/cmn/str-end.c
+33
+../../../../../lib/cmn/str-dynw.c
223
WString
4
@@ -1007,8 +1007,8 @@ WVList
0
226
MItem
-33
-../../../../../lib/cmn/str-excl.c
+32
+../../../../../lib/cmn/str-end.c
227
WString
4
@@ -1026,7 +1026,7 @@ WVList
230
MItem
33
-../../../../../lib/cmn/str-fcpy.c
+../../../../../lib/cmn/str-excl.c
231
WString
4
@@ -1043,8 +1043,8 @@ WVList
0
234
MItem
-34
-../../../../../lib/cmn/str-fnmat.c
+33
+../../../../../lib/cmn/str-fcpy.c
235
WString
4
@@ -1061,8 +1061,8 @@ WVList
0
238
MItem
-33
-../../../../../lib/cmn/str-incl.c
+34
+../../../../../lib/cmn/str-fnmat.c
239
WString
4
@@ -1079,8 +1079,8 @@ WVList
0
242
MItem
-32
-../../../../../lib/cmn/str-len.c
+33
+../../../../../lib/cmn/str-incl.c
243
WString
4
@@ -1098,7 +1098,7 @@ WVList
246
MItem
32
-../../../../../lib/cmn/str-pac.c
+../../../../../lib/cmn/str-len.c
247
WString
4
@@ -1115,8 +1115,8 @@ WVList
0
250
MItem
-33
-../../../../../lib/cmn/str-pbrk.c
+32
+../../../../../lib/cmn/str-pac.c
251
WString
4
@@ -1133,8 +1133,8 @@ WVList
0
254
MItem
-32
-../../../../../lib/cmn/str-put.c
+33
+../../../../../lib/cmn/str-pbrk.c
255
WString
4
@@ -1152,7 +1152,7 @@ WVList
258
MItem
32
-../../../../../lib/cmn/str-rev.c
+../../../../../lib/cmn/str-put.c
259
WString
4
@@ -1170,7 +1170,7 @@ WVList
262
MItem
32
-../../../../../lib/cmn/str-rot.c
+../../../../../lib/cmn/str-rev.c
263
WString
4
@@ -1188,7 +1188,7 @@ WVList
266
MItem
32
-../../../../../lib/cmn/str-set.c
+../../../../../lib/cmn/str-rot.c
267
WString
4
@@ -1206,7 +1206,7 @@ WVList
270
MItem
32
-../../../../../lib/cmn/str-spl.c
+../../../../../lib/cmn/str-set.c
271
WString
4
@@ -1224,7 +1224,7 @@ WVList
274
MItem
32
-../../../../../lib/cmn/str-spn.c
+../../../../../lib/cmn/str-spl.c
275
WString
4
@@ -1242,7 +1242,7 @@ WVList
278
MItem
32
-../../../../../lib/cmn/str-str.c
+../../../../../lib/cmn/str-spn.c
279
WString
4
@@ -1259,8 +1259,8 @@ WVList
0
282
MItem
-34
-../../../../../lib/cmn/str-subst.c
+32
+../../../../../lib/cmn/str-str.c
283
WString
4
@@ -1277,8 +1277,8 @@ WVList
0
286
MItem
-32
-../../../../../lib/cmn/str-tok.c
+34
+../../../../../lib/cmn/str-subst.c
287
WString
4
@@ -1296,7 +1296,7 @@ WVList
290
MItem
32
-../../../../../lib/cmn/str-trm.c
+../../../../../lib/cmn/str-tok.c
291
WString
4
@@ -1313,8 +1313,8 @@ WVList
0
294
MItem
-33
-../../../../../lib/cmn/str-word.c
+32
+../../../../../lib/cmn/str-trm.c
295
WString
4
@@ -1331,8 +1331,8 @@ WVList
0
298
MItem
-29
-../../../../../lib/cmn/time.c
+33
+../../../../../lib/cmn/str-word.c
299
WString
4
@@ -1349,8 +1349,8 @@ WVList
0
302
MItem
-28
-../../../../../lib/cmn/tio.c
+29
+../../../../../lib/cmn/task.c
303
WString
4
@@ -1367,8 +1367,8 @@ WVList
0
306
MItem
-32
-../../../../../lib/cmn/tre-ast.c
+29
+../../../../../lib/cmn/time.c
307
WString
4
@@ -1385,8 +1385,8 @@ WVList
0
310
MItem
-36
-../../../../../lib/cmn/tre-compile.c
+28
+../../../../../lib/cmn/tio.c
311
WString
4
@@ -1403,8 +1403,8 @@ WVList
0
314
MItem
-44
-../../../../../lib/cmn/tre-match-backtrack.c
+32
+../../../../../lib/cmn/tre-ast.c
315
WString
4
@@ -1421,8 +1421,8 @@ WVList
0
318
MItem
-43
-../../../../../lib/cmn/tre-match-parallel.c
+36
+../../../../../lib/cmn/tre-compile.c
319
WString
4
@@ -1439,8 +1439,8 @@ WVList
0
322
MItem
-34
-../../../../../lib/cmn/tre-parse.c
+44
+../../../../../lib/cmn/tre-match-backtrack.c
323
WString
4
@@ -1457,8 +1457,8 @@ WVList
0
326
MItem
-34
-../../../../../lib/cmn/tre-stack.c
+43
+../../../../../lib/cmn/tre-match-parallel.c
327
WString
4
@@ -1475,8 +1475,8 @@ WVList
0
330
MItem
-28
-../../../../../lib/cmn/tre.c
+34
+../../../../../lib/cmn/tre-parse.c
331
WString
4
@@ -1493,8 +1493,8 @@ WVList
0
334
MItem
-29
-../../../../../lib/cmn/utf8.c
+34
+../../../../../lib/cmn/tre-stack.c
335
WString
4
@@ -1512,7 +1512,7 @@ WVList
338
MItem
28
-../../../../../lib/cmn/xma.c
+../../../../../lib/cmn/tre.c
339
WString
4
@@ -1529,44 +1529,44 @@ WVList
0
342
MItem
-3
-*.h
+29
+../../../../../lib/cmn/utf8.c
343
WString
-3
-NIL
+4
+COBJ
344
WVList
0
345
WVList
0
--1
+11
1
1
0
346
MItem
28
-../../../../../lib/cmn/mem.h
+../../../../../lib/cmn/xma.c
347
WString
-3
-NIL
+4
+COBJ
348
WVList
0
349
WVList
0
-342
+11
1
1
0
350
MItem
-32
-../../../../../lib/cmn/syscall.h
+3
+*.h
351
WString
3
@@ -1577,7 +1577,43 @@ WVList
353
WVList
0
-342
+-1
+1
+1
+0
+354
+MItem
+28
+../../../../../lib/cmn/mem.h
+355
+WString
+3
+NIL
+356
+WVList
+0
+357
+WVList
+0
+350
+1
+1
+0
+358
+MItem
+32
+../../../../../lib/cmn/syscall.h
+359
+WString
+3
+NIL
+360
+WVList
+0
+361
+WVList
+0
+350
1
1
0
diff --git a/qse/watcom/qse.wpj b/qse/watcom/qse.wpj
index b9806763..258fb028 100755
--- a/qse/watcom/qse.wpj
+++ b/qse/watcom/qse.wpj
@@ -4,8 +4,8 @@ projectIdent
VpeMain
1
WRect
-440
-160
+790
+200
9320
9680
2
@@ -76,11 +76,11 @@ WVList
VComponent
20
WRect
-1080
+1070
2520
5700
4240
-0
+1
0
21
WFileName
@@ -128,14 +128,14 @@ WRect
480
5700
4240
-0
+1
0
30
WFileName
28
debug/os2/lib/cmn/qsecmn.tgt
45
-45
+48
31
VComponent
32
@@ -189,10 +189,10 @@ VComponent
41
WRect
2660
-66
+40
5700
4240
-0
+1
0
42
WFileName
@@ -256,14 +256,14 @@ WRect
560
5700
4240
-1
+0
0
54
WFileName
30
debug/dos32/cmd/sed/qsesed.tgt
0
-0
+1
55
VComponent
56
diff --git a/qse/watcom/release/os2/lib/cmn/qsecmn.tgt b/qse/watcom/release/os2/lib/cmn/qsecmn.tgt
index a864fe6c..d636062c 100755
--- a/qse/watcom/release/os2/lib/cmn/qsecmn.tgt
+++ b/qse/watcom/release/os2/lib/cmn/qsecmn.tgt
@@ -42,7 +42,7 @@ WVList
0
10
WPickList
-81
+83
11
MItem
3
@@ -576,7 +576,7 @@ WVList
131
MItem
29
-../../../../../lib/cmn/nwio.c
+../../../../../lib/cmn/nwif.c
132
WString
4
@@ -593,8 +593,8 @@ WVList
0
135
MItem
-28
-../../../../../lib/cmn/oht.c
+29
+../../../../../lib/cmn/nwio.c
136
WString
4
@@ -612,7 +612,7 @@ WVList
139
MItem
28
-../../../../../lib/cmn/opt.c
+../../../../../lib/cmn/oht.c
140
WString
4
@@ -629,8 +629,8 @@ WVList
0
143
MItem
-38
-../../../../../lib/cmn/path-basename.c
+28
+../../../../../lib/cmn/opt.c
144
WString
4
@@ -647,8 +647,8 @@ WVList
0
147
MItem
-35
-../../../../../lib/cmn/path-canon.c
+38
+../../../../../lib/cmn/path-basename.c
148
WString
4
@@ -665,8 +665,8 @@ WVList
0
151
MItem
-28
-../../../../../lib/cmn/pio.c
+35
+../../../../../lib/cmn/path-canon.c
152
WString
4
@@ -684,7 +684,7 @@ WVList
155
MItem
28
-../../../../../lib/cmn/pma.c
+../../../../../lib/cmn/pio.c
156
WString
4
@@ -702,7 +702,7 @@ WVList
159
MItem
28
-../../../../../lib/cmn/rbt.c
+../../../../../lib/cmn/pma.c
160
WString
4
@@ -720,7 +720,7 @@ WVList
163
MItem
28
-../../../../../lib/cmn/rex.c
+../../../../../lib/cmn/rbt.c
164
WString
4
@@ -738,7 +738,7 @@ WVList
167
MItem
28
-../../../../../lib/cmn/sio.c
+../../../../../lib/cmn/rex.c
168
WString
4
@@ -756,7 +756,7 @@ WVList
171
MItem
28
-../../../../../lib/cmn/sll.c
+../../../../../lib/cmn/sio.c
172
WString
4
@@ -773,8 +773,8 @@ WVList
0
175
MItem
-29
-../../../../../lib/cmn/slmb.c
+28
+../../../../../lib/cmn/sll.c
176
WString
4
@@ -791,8 +791,8 @@ WVList
0
179
MItem
-30
-../../../../../lib/cmn/stdio.c
+29
+../../../../../lib/cmn/slmb.c
180
WString
4
@@ -809,8 +809,8 @@ WVList
0
183
MItem
-32
-../../../../../lib/cmn/str-beg.c
+30
+../../../../../lib/cmn/stdio.c
184
WString
4
@@ -828,7 +828,7 @@ WVList
187
MItem
32
-../../../../../lib/cmn/str-cat.c
+../../../../../lib/cmn/str-beg.c
188
WString
4
@@ -846,7 +846,7 @@ WVList
191
MItem
32
-../../../../../lib/cmn/str-chr.c
+../../../../../lib/cmn/str-cat.c
192
WString
4
@@ -864,7 +864,7 @@ WVList
195
MItem
32
-../../../../../lib/cmn/str-cmp.c
+../../../../../lib/cmn/str-chr.c
196
WString
4
@@ -882,7 +882,7 @@ WVList
199
MItem
32
-../../../../../lib/cmn/str-cnv.c
+../../../../../lib/cmn/str-cmp.c
200
WString
4
@@ -900,7 +900,7 @@ WVList
203
MItem
32
-../../../../../lib/cmn/str-cpy.c
+../../../../../lib/cmn/str-cnv.c
204
WString
4
@@ -918,7 +918,7 @@ WVList
207
MItem
32
-../../../../../lib/cmn/str-del.c
+../../../../../lib/cmn/str-cpy.c
208
WString
4
@@ -936,7 +936,7 @@ WVList
211
MItem
32
-../../../../../lib/cmn/str-dup.c
+../../../../../lib/cmn/str-del.c
212
WString
4
@@ -953,8 +953,8 @@ WVList
0
215
MItem
-33
-../../../../../lib/cmn/str-dynm.c
+32
+../../../../../lib/cmn/str-dup.c
216
WString
4
@@ -972,7 +972,7 @@ WVList
219
MItem
33
-../../../../../lib/cmn/str-dynw.c
+../../../../../lib/cmn/str-dynm.c
220
WString
4
@@ -989,8 +989,8 @@ WVList
0
223
MItem
-32
-../../../../../lib/cmn/str-end.c
+33
+../../../../../lib/cmn/str-dynw.c
224
WString
4
@@ -1007,8 +1007,8 @@ WVList
0
227
MItem
-33
-../../../../../lib/cmn/str-excl.c
+32
+../../../../../lib/cmn/str-end.c
228
WString
4
@@ -1026,7 +1026,7 @@ WVList
231
MItem
33
-../../../../../lib/cmn/str-fcpy.c
+../../../../../lib/cmn/str-excl.c
232
WString
4
@@ -1043,8 +1043,8 @@ WVList
0
235
MItem
-34
-../../../../../lib/cmn/str-fnmat.c
+33
+../../../../../lib/cmn/str-fcpy.c
236
WString
4
@@ -1061,8 +1061,8 @@ WVList
0
239
MItem
-33
-../../../../../lib/cmn/str-incl.c
+34
+../../../../../lib/cmn/str-fnmat.c
240
WString
4
@@ -1079,8 +1079,8 @@ WVList
0
243
MItem
-32
-../../../../../lib/cmn/str-len.c
+33
+../../../../../lib/cmn/str-incl.c
244
WString
4
@@ -1098,7 +1098,7 @@ WVList
247
MItem
32
-../../../../../lib/cmn/str-pac.c
+../../../../../lib/cmn/str-len.c
248
WString
4
@@ -1115,8 +1115,8 @@ WVList
0
251
MItem
-33
-../../../../../lib/cmn/str-pbrk.c
+32
+../../../../../lib/cmn/str-pac.c
252
WString
4
@@ -1133,8 +1133,8 @@ WVList
0
255
MItem
-32
-../../../../../lib/cmn/str-put.c
+33
+../../../../../lib/cmn/str-pbrk.c
256
WString
4
@@ -1152,7 +1152,7 @@ WVList
259
MItem
32
-../../../../../lib/cmn/str-rev.c
+../../../../../lib/cmn/str-put.c
260
WString
4
@@ -1170,7 +1170,7 @@ WVList
263
MItem
32
-../../../../../lib/cmn/str-rot.c
+../../../../../lib/cmn/str-rev.c
264
WString
4
@@ -1188,7 +1188,7 @@ WVList
267
MItem
32
-../../../../../lib/cmn/str-set.c
+../../../../../lib/cmn/str-rot.c
268
WString
4
@@ -1206,7 +1206,7 @@ WVList
271
MItem
32
-../../../../../lib/cmn/str-spl.c
+../../../../../lib/cmn/str-set.c
272
WString
4
@@ -1224,7 +1224,7 @@ WVList
275
MItem
32
-../../../../../lib/cmn/str-spn.c
+../../../../../lib/cmn/str-spl.c
276
WString
4
@@ -1242,7 +1242,7 @@ WVList
279
MItem
32
-../../../../../lib/cmn/str-str.c
+../../../../../lib/cmn/str-spn.c
280
WString
4
@@ -1259,8 +1259,8 @@ WVList
0
283
MItem
-34
-../../../../../lib/cmn/str-subst.c
+32
+../../../../../lib/cmn/str-str.c
284
WString
4
@@ -1277,8 +1277,8 @@ WVList
0
287
MItem
-32
-../../../../../lib/cmn/str-tok.c
+34
+../../../../../lib/cmn/str-subst.c
288
WString
4
@@ -1296,7 +1296,7 @@ WVList
291
MItem
32
-../../../../../lib/cmn/str-trm.c
+../../../../../lib/cmn/str-tok.c
292
WString
4
@@ -1313,8 +1313,8 @@ WVList
0
295
MItem
-33
-../../../../../lib/cmn/str-word.c
+32
+../../../../../lib/cmn/str-trm.c
296
WString
4
@@ -1331,8 +1331,8 @@ WVList
0
299
MItem
-29
-../../../../../lib/cmn/time.c
+33
+../../../../../lib/cmn/str-word.c
300
WString
4
@@ -1349,8 +1349,8 @@ WVList
0
303
MItem
-28
-../../../../../lib/cmn/tio.c
+29
+../../../../../lib/cmn/task.c
304
WString
4
@@ -1367,8 +1367,8 @@ WVList
0
307
MItem
-32
-../../../../../lib/cmn/tre-ast.c
+29
+../../../../../lib/cmn/time.c
308
WString
4
@@ -1385,8 +1385,8 @@ WVList
0
311
MItem
-36
-../../../../../lib/cmn/tre-compile.c
+28
+../../../../../lib/cmn/tio.c
312
WString
4
@@ -1403,8 +1403,8 @@ WVList
0
315
MItem
-44
-../../../../../lib/cmn/tre-match-backtrack.c
+32
+../../../../../lib/cmn/tre-ast.c
316
WString
4
@@ -1421,8 +1421,8 @@ WVList
0
319
MItem
-43
-../../../../../lib/cmn/tre-match-parallel.c
+36
+../../../../../lib/cmn/tre-compile.c
320
WString
4
@@ -1439,8 +1439,8 @@ WVList
0
323
MItem
-34
-../../../../../lib/cmn/tre-parse.c
+44
+../../../../../lib/cmn/tre-match-backtrack.c
324
WString
4
@@ -1457,8 +1457,8 @@ WVList
0
327
MItem
-34
-../../../../../lib/cmn/tre-stack.c
+43
+../../../../../lib/cmn/tre-match-parallel.c
328
WString
4
@@ -1475,8 +1475,8 @@ WVList
0
331
MItem
-28
-../../../../../lib/cmn/tre.c
+34
+../../../../../lib/cmn/tre-parse.c
332
WString
4
@@ -1493,8 +1493,8 @@ WVList
0
335
MItem
-29
-../../../../../lib/cmn/utf8.c
+34
+../../../../../lib/cmn/tre-stack.c
336
WString
4
@@ -1512,7 +1512,7 @@ WVList
339
MItem
28
-../../../../../lib/cmn/xma.c
+../../../../../lib/cmn/tre.c
340
WString
4
@@ -1529,44 +1529,44 @@ WVList
0
343
MItem
-3
-*.h
+29
+../../../../../lib/cmn/utf8.c
344
WString
-3
-NIL
+4
+COBJ
345
WVList
0
346
WVList
0
--1
+11
1
1
0
347
MItem
28
-../../../../../lib/cmn/mem.h
+../../../../../lib/cmn/xma.c
348
WString
-3
-NIL
+4
+COBJ
349
WVList
0
350
WVList
0
-343
+11
1
1
0
351
MItem
-32
-../../../../../lib/cmn/syscall.h
+3
+*.h
352
WString
3
@@ -1577,7 +1577,43 @@ WVList
354
WVList
0
-343
+-1
+1
+1
+0
+355
+MItem
+28
+../../../../../lib/cmn/mem.h
+356
+WString
+3
+NIL
+357
+WVList
+0
+358
+WVList
+0
+351
+1
+1
+0
+359
+MItem
+32
+../../../../../lib/cmn/syscall.h
+360
+WString
+3
+NIL
+361
+WVList
+0
+362
+WVList
+0
+351
1
1
0