diff --git a/qse/cmd/scm/scm.c b/qse/cmd/scm/scm.c index a850ff6f..63c3b13d 100644 --- a/qse/cmd/scm/scm.c +++ b/qse/cmd/scm/scm.c @@ -143,6 +143,66 @@ static int handle_args (int argc, qse_char_t* argv[]) return 0; } +#include +static int pio1 (const qse_char_t* cmd, int oflags, qse_pio_hid_t rhid) +{ + qse_pio_t* pio; + int x; + + pio = qse_pio_open ( + QSE_NULL, + 0, + cmd, + oflags + ); + if (pio == QSE_NULL) + { + qse_printf (QSE_T("cannot open program through pipe\n")); + return -1; + } + + while (1) + { + qse_byte_t buf[128]; + qse_ssize_t i; + + /*qse_pio_canread (pio, QSE_PIO_ERR, 1000)*/ + qse_ssize_t n = qse_pio_read (pio, buf, sizeof(buf), rhid); + if (n == 0) break; + if (n <= -1) + { + qse_printf ( + QSE_T("qse_pio_read() returned error - %s\n"), + qse_pio_geterrmsg(pio) + ); + break; + } + + qse_printf (QSE_T("N===> %d buf => ["), (int)n); + for (i = 0; i < n; i++) + { + #ifdef QSE_CHAR_IS_MCHAR + qse_printf (QSE_T("%c"), buf[i]); + #else + qse_printf (QSE_T("%C"), buf[i]); + #endif + } + qse_printf (QSE_T("]\n")); + } + + x = qse_pio_wait (pio); + qse_printf (QSE_T("qse_pio_wait returns %d\n"), x); + if (x <= -1) + { + qse_printf (QSE_T("error code : %d, error string: %s\n"), + (int)qse_pio_geterrnum(pio), qse_pio_geterrmsg(pio)); + } + + qse_pio_close (pio); + + return 0; +} + int scm_main (int argc, qse_char_t* argv[]) { qse_scm_t* scm; @@ -164,6 +224,10 @@ int scm_main (int argc, qse_char_t* argv[]) qse_scm_attachio (scm, &io); } +{ +pio1 (QSE_T("dir /a"), QSE_PIO_READOUT|QSE_PIO_WRITEIN|QSE_PIO_SHELL, QSE_PIO_OUT); +} + { qse_scm_ent_t* x1, * x2; diff --git a/qse/include/qse/cmn/fio.h b/qse/include/qse/cmn/fio.h index 8c556edf..b47da9da 100644 --- a/qse/include/qse/cmn/fio.h +++ b/qse/include/qse/cmn/fio.h @@ -1,5 +1,5 @@ /* - * $Id: fio.h 396 2011-03-14 15:40:35Z hyunghwan.chung $ + * $Id: fio.h 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -115,6 +115,7 @@ struct qse_fio_t QSE_DEFINE_COMMON_FIELDS (fio) int errnum; qse_fio_hnd_t handle; + int flags; /* extra flags */ qse_tio_t* tio; }; diff --git a/qse/include/qse/cmn/pio.h b/qse/include/qse/cmn/pio.h index 4087cc3c..b0db2d3f 100644 --- a/qse/include/qse/cmn/pio.h +++ b/qse/include/qse/cmn/pio.h @@ -1,5 +1,5 @@ /* - * $Id: pio.h 287 2009-09-15 10:01:02Z hyunghwan.chung $ + * $Id: pio.h 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -120,12 +120,20 @@ enum qse_pio_errnum_t }; typedef enum qse_pio_errnum_t qse_pio_errnum_t; -#ifdef _WIN32 +#if defined(_WIN32) /* => typedef PVOID HANDLE; */ typedef void* qse_pio_hnd_t; /**< defines a pipe handle type */ typedef void* qse_pio_pid_t; /**< defines a process handle type */ # define QSE_PIO_HND_NIL ((qse_pio_hnd_t)QSE_NULL) # define QSE_PIO_PID_NIL ((qse_pio_pid_t)QSE_NULL) +#elif defined(__OS2__) + /* => typedef LHANDLE HFILE; + typedef LHANDLE PID; + typedef unsigned long LHANDLE; */ + typedef unsigned long qse_pio_hnd_t; + typedef unsigned long qse_pio_pid_t; +# define QSE_PIO_HND_NIL ((qse_pio_hnd_t)-1) +# define QSE_PIO_PID_NIL ((qse_pio_pid_t)-1) #else typedef int qse_pio_hnd_t; /**< defines a pipe handle type */ typedef int qse_pio_pid_t; /**< defines a process handle type */ diff --git a/qse/include/qse/cmn/time.h b/qse/include/qse/cmn/time.h index 310f4088..0202a4ed 100644 --- a/qse/include/qse/cmn/time.h +++ b/qse/include/qse/cmn/time.h @@ -1,5 +1,5 @@ /* - * $Id: time.h 356 2010-09-07 12:29:25Z hyunghwan.chung $ + * $Id: time.h 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -128,7 +128,7 @@ int qse_timegm ( * The qse_timelocal() converts broken-down time to numeric time. It is the * inverse of qse_localtime(); */ -int qse_timelcoal ( +int qse_timelocal ( const qse_btime_t* bt, qse_ntime_t* nt ); diff --git a/qse/include/qse/conf_os2.h b/qse/include/qse/conf_os2.h index 0753b139..c2c27d32 100644 --- a/qse/include/qse/conf_os2.h +++ b/qse/include/qse/conf_os2.h @@ -18,39 +18,41 @@ License along with QSE. If not, see . */ +/* OS/2 for other platforms than x86? + * If so, the endian should be defined selectively + */ #define QSE_ENDIAN_LITTLE -#define QSE_SIZEOF_CHAR 1 -#define QSE_SIZEOF_SHORT 2 -#define QSE_SIZEOF_INT 4 - -#define QSE_SIZEOF_LONG 4 - -#if defined(__GNUC__) -# define QSE_SIZEOF_LONG_LONG 8 -# define QSE_SIZEOF___INT8 0 -# define QSE_SIZEOF___INT16 0 -# define QSE_SIZEOF___INT32 0 -# define QSE_SIZEOF___INT64 0 -# define QSE_SIZEOF___INT128 0 +#if defined(__WATCOMC__) +# define QSE_SIZEOF_CHAR 1 +# define QSE_SIZEOF_SHORT 2 +# define QSE_SIZEOF_INT 4 +# define QSE_SIZEOF_LONG 4 +# define QSE_SIZEOF_LONG_LONG 8 +# +# define QSE_SIZEOF_VOID_P 4 +# define QSE_SIZEOF_FLOAT 4 +# define QSE_SIZEOF_DOUBLE 8 +# define QSE_SIZEOF_LONG_DOUBLE 8 +# define QSE_SIZEOF_WCHAR_T 2 +# +# define QSE_SIZEOF___INT8 1 +# define QSE_SIZEOF___INT16 2 +# define QSE_SIZEOF___INT32 4 +# define QSE_SIZEOF___INT64 8 +# define QSE_SIZEOF___INT128 0 #else -# if defined(__WATCOMC__) -# define QSE_SIZEOF_LONG_LONG 8 -# else -# define QSE_SIZEOF_LONG_LONG 0 -# endif -# define QSE_SIZEOF___INT8 1 -# define QSE_SIZEOF___INT16 2 -# define QSE_SIZEOF___INT32 4 -# define QSE_SIZEOF___INT64 8 -# define QSE_SIZEOF___INT128 0 +# error Define the size of various data types. #endif -#define QSE_SIZEOF_VOID_P 4 -#define QSE_SIZEOF_FLOAT 4 -#define QSE_SIZEOF_DOUBLE 8 -#define QSE_SIZEOF_LONG_DOUBLE 16 -#define QSE_SIZEOF_WCHAR_T 2 - #define QSE_SIZEOF_OFF64_T 0 -#define QSE_SIZEOF_OFF_T 8 +#define QSE_SIZEOF_OFF_T 8 + +/* + * OS/2 does not have wchar_t(Unicode) friendly APIs unlike Windows. + * You must define which character type to use as a default character here. + * + * #define QSE_CHAR_IS_WCHAR + * #define QSE_CHAR_IS_MCHAR + */ +#define QSE_CHAR_IS_WCHAR diff --git a/qse/include/qse/types.h b/qse/include/qse/types.h index 59cd9038..0f16ded9 100644 --- a/qse/include/qse/types.h +++ b/qse/include/qse/types.h @@ -1,5 +1,5 @@ /* - * $Id: types.h 396 2011-03-14 15:40:35Z hyunghwan.chung $ + * $Id: types.h 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -34,10 +34,10 @@ # include #elif defined(_WIN32) # include +#elif defined(__OS2__) +# include #elif defined(vms) || defined(__vms) # include -#elif defined(OS2) || defined(__OS2__) -# include #else # error unsupported operating system #endif @@ -383,10 +383,10 @@ typedef int qse_mcint_t; typedef int qse_wchar_t; typedef int qse_wcint_t; # else -# error no supported data type for wchar_t +# error No supported data type for wchar_t # endif #else -# error unsupported size of wchar_t +# error Unsupported size of wchar_t #endif /** @typedef qse_char_t @@ -396,33 +396,32 @@ typedef int qse_mcint_t; * The qse_cint_t typep defines a type that can hold a qse_char_t value and * #QSE_CHAR_EOF. */ -#if defined(_WIN32) && (defined(UNICODE)||defined(_UNICODE)) -# define QSE_CHAR_IS_WCHAR +#if defined(QSE_CHAR_IS_WCHAR) typedef qse_wchar_t qse_char_t; typedef qse_wcint_t qse_cint_t; -#elif defined(__OS2__) -# define QSE_CHAR_IS_MCHAR +#elif defined(QSE_CHAR_IS_MCHAR) typedef qse_mchar_t qse_char_t; typedef qse_mcint_t qse_cint_t; #else -# if defined(QSE_CHAR_IS_MCHAR) - typedef qse_mchar_t qse_char_t; - typedef qse_mcint_t qse_cint_t; -# elif defined(QSE_CHAR_IS_WCHAR) - typedef qse_wchar_t qse_char_t; - typedef qse_wcint_t qse_cint_t; -# elif defined(_MBCS) -# define QSE_CHAR_IS_MCHAR - typedef qse_mchar_t qse_char_t; - typedef qse_mcint_t qse_cint_t; + /* If the character type is not determined in the conf_xxx files */ + +# if defined(_WIN32) +# if defined(UNICODE) || defined(_UNICODE) +# define QSE_CHAR_IS_WCHAR + typedef qse_wchar_t qse_char_t; + typedef qse_wcint_t qse_cint_t; +# else +# define QSE_CHAR_IS_MCHAR + typedef qse_mchar_t qse_char_t; + typedef qse_mcint_t qse_cint_t; +# endif # else -# define QSE_CHAR_IS_WCHAR - typedef qse_wchar_t qse_char_t; - typedef qse_wcint_t qse_cint_t; +# error Cannot determine the character type to use # endif #endif #if defined(QSE_CHAR_IS_WCHAR) && defined(_WIN32) + /* Special definiton to use Unicode APIs on Windows */ # ifndef UNICODE # define UNICODE # endif diff --git a/qse/lib/cmn/fio.c b/qse/lib/cmn/fio.c index b26ca1ba..c07486d0 100644 --- a/qse/lib/cmn/fio.c +++ b/qse/lib/cmn/fio.c @@ -1,5 +1,5 @@ /* - * $Id: fio.c 400 2011-03-16 08:37:06Z hyunghwan.chung $ + * $Id: fio.c 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -90,6 +90,10 @@ qse_fio_t* qse_fio_init ( QSE_MEMSET (fio, 0, QSE_SIZEOF(*fio)); fio->mmgr = mmgr; + /* store the flags for later use though only OS/2 needs + * this at this moment */ + fio->flags = flags; + #if defined(_WIN32) if (flags & QSE_FIO_HANDLE) { @@ -172,9 +176,17 @@ qse_fio_t* qse_fio_init ( { APIRET ret; ULONG action_taken = 0; - ULONG open_action, open_mode; + ULONG open_action, open_mode, open_attr; LONGLONG zero; + #ifdef QSE_CHAR_IS_MCHAR + const qse_mchar_t* path_mb = path; + #else + qse_mchar_t path_mb[CCHMAXPATH]; + if (qse_wcstombs_strict (path, + path_mb, QSE_COUNTOF(path_mb)) == -1) return QSE_NULL; + #endif + zero.ulLo = 0; zero.ulHi = 0; @@ -202,18 +214,33 @@ qse_fio_t* qse_fio_init ( open_action = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; } - open_mode = OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE; + open_mode = OPEN_FLAGS_NOINHERIT; + + if (flags & QSE_FIO_SYNC) + open_mode |= OPEN_FLAGS_WRITE_THROUGH; + + if ((flags & QSE_FIO_NOSHRD) && (flags & QSE_FIO_NOSHWR)) + open_mode |= OPEN_SHARE_DENYREADWRITE; + else if (flags & QSE_FIO_NOSHRD) + open_mode |= OPEN_SHARE_DENYREAD; + else if (flags & QSE_FIO_NOSHWR) + open_mode |= OPEN_SHARE_DENYWRITE; + else + open_mode |= OPEN_SHARE_DENYNONE; + if ((flags & QSE_FIO_READ) && (flags & QSE_FIO_WRITE)) open_mode |= OPEN_ACCESS_READWRITE; else if (flags & QSE_FIO_READ) open_mode |= OPEN_ACCESS_READONLY; else if (flags & QSE_FIO_WRITE) open_mode |= OPEN_ACCESS_WRITEONLY; + + open_attr = (mode & QSE_FIO_WUSR)? FILE_NORMAL: FILE_READONLY; ret = DosOpenL ( - path, /* file name */ + path_mb, /* file name */ &handle, /* file handle */ &action_taken, /* store action taken */ zero, /* size */ - FILE_NORMAL, /* attribute */ + open_attr, /* attribute */ open_action, /* action if it exists */ open_mode, /* open mode */ 0L @@ -416,7 +443,7 @@ qse_fio_off_t qse_fio_seek ( int qse_fio_truncate (qse_fio_t* fio, qse_fio_off_t size) { -#ifdef _WIN32 +#if defined(_WIN32) LARGE_INTEGER x; x.QuadPart = size; @@ -485,6 +512,17 @@ static qse_ssize_t fio_write (qse_fio_t* fio, const void* data, qse_size_t size) qse_ssize_t qse_fio_write (qse_fio_t* fio, const void* data, qse_size_t size) { +#if defined(__OS2__) + if (fio->flags & QSE_FIO_APPEND) + { + /* i do this on a best-effort basis */ + LONGLONG pos, newpos; + pos.ulLo = (ULONG)0; + pos.ulHi = (ULONG)0; + DosSetFilePtrL (fio->handle, pos, FILE_END, &newpos); + } +#endif + if (fio->tio == QSE_NULL) return fio_write (fio, data, size); else @@ -498,7 +536,7 @@ qse_ssize_t qse_fio_flush (qse_fio_t* fio) } -#ifdef _WIN32 +#if defined(_WIN32) static int get_devname_from_handle ( HANDLE handle, qse_char_t* buf, qse_size_t len) @@ -657,10 +695,8 @@ static qse_ssize_t fio_input (int cmd, void* arg, void* buf, qse_size_t size) { qse_fio_t* fio = (qse_fio_t*)arg; QSE_ASSERT (fio != QSE_NULL); - if (cmd == QSE_TIO_IO_DATA) - { - return fio_read (fio, buf, size); - } + if (cmd == QSE_TIO_IO_DATA) return fio_read (fio, buf, size); + /* take no actions for OPEN and CLOSE as they are handled * by fio */ @@ -671,10 +707,7 @@ static qse_ssize_t fio_output (int cmd, void* arg, void* buf, qse_size_t size) { qse_fio_t* fio = (qse_fio_t*)arg; QSE_ASSERT (fio != QSE_NULL); - if (cmd == QSE_TIO_IO_DATA) - { - return fio_write (fio, buf, size); - } + if (cmd == QSE_TIO_IO_DATA) return fio_write (fio, buf, size); /* take no actions for OPEN and CLOSE as they are handled * by fio */ diff --git a/qse/lib/cmn/pio.c b/qse/lib/cmn/pio.c index 0843cd75..3dab366f 100644 --- a/qse/lib/cmn/pio.c +++ b/qse/lib/cmn/pio.c @@ -1,5 +1,5 @@ /* - * $Id: pio.c 400 2011-03-16 08:37:06Z hyunghwan.chung $ + * $Id: pio.c 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -26,6 +26,7 @@ # include # include #elif defined(__OS2__) +# define INCL_DOSQUEUES # define INCL_DOSPROCESS # define INCL_DOSERRORS # include @@ -95,7 +96,6 @@ qse_pio_t* qse_pio_init ( int i, minidx = -1, maxidx = -1; - #if defined(_WIN32) SECURITY_ATTRIBUTES secattr; PROCESS_INFORMATION procinfo; @@ -105,6 +105,12 @@ qse_pio_t* qse_pio_init ( BOOL x; #elif defined(__OS2__) /* TODO: implmenet this for os/2 */ + APIRET rc; + ULONG pipe_size = 4096; + UCHAR load_error[CCHMAXPATH] = { 0 }; + RESULTCODES child_rc; + HFILE old_in, old_out, old_err; + HFILE std_in, std_out, std_err; #else qse_pio_pid_t pid; #endif @@ -114,7 +120,7 @@ qse_pio_t* qse_pio_init ( QSE_MEMSET (pio, 0, QSE_SIZEOF(*pio)); pio->mmgr = mmgr; -#ifdef _WIN32 +#if defined(_WIN32) /* http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx */ secattr.nLength = QSE_SIZEOF(secattr); @@ -165,6 +171,8 @@ qse_pio_t* qse_pio_init ( maxidx = 5; } + if (maxidx == -1) goto oops; + if ((oflags & QSE_PIO_INTONUL) || (oflags & QSE_PIO_OUTTONUL) || (oflags & QSE_PIO_ERRTONUL)) @@ -210,7 +218,7 @@ qse_pio_t* qse_pio_init ( if (oflags & QSE_PIO_OUTTOERR) startup.hStdOutput = handle[5]; } - if (oflags & QSE_PIO_INTONUL) startup.hStdOutput = windevnul; + if (oflags & QSE_PIO_INTONUL) startup.hStdInput = windevnul; if (oflags & QSE_PIO_OUTTONUL) startup.hStdOutput = windevnul; if (oflags & QSE_PIO_ERRTONUL) startup.hStdError = windevnul; @@ -274,8 +282,113 @@ qse_pio_t* qse_pio_init ( CloseHandle (procinfo.hThread); pio->child = procinfo.hProcess; + #elif defined(__OS2__) - /* TODO: implement this for OS/2 */ + + if (oflags & QSE_PIO_WRITEIN) + { + ULONG state; + + /* child reads, parent writes */ + if (DosCreatePipe ( + &handle[0], &handle[1], pipe_size) != NO_ERROR) goto oops; + + /* don't inherit write handle */ + if (DosQueryFHState (handle[1], &state) != NO_ERROR) goto oops; + state &= 0x7F88; /* this & operation as shown in the ibm documents */ + if (DosSetFHState (handle[1], state | OPEN_FLAGS_NOINHERIT) != NO_ERROR) goto oops; + + minidx = 0; maxidx = 1; + } + + if (oflags & QSE_PIO_READOUT) + { + ULONG state; + + /* child writes, parent reads */ + if (DosCreatePipe ( + &handle[2], &handle[3], pipe_size) != NO_ERROR) goto oops; + + /* don't inherit read handle */ + if (DosQueryFHState (handle[2], &state) != NO_ERROR) goto oops; + state &= 0x7F88; /* this & operation as shown in the ibm documents */ + if (DosSetFHState (handle[2], state | OPEN_FLAGS_NOINHERIT) != NO_ERROR) goto oops; + + if (minidx == -1) minidx = 2; + maxidx = 3; + } + + if (oflags & QSE_PIO_READERR) + { + ULONG state; + + /* child writes, parent reads */ + if (DosCreatePipe ( + &handle[4], &handle[5], pipe_size) != NO_ERROR) goto oops; + + /* don't inherit read handle */ + if (DosQueryFHState (handle[4], &state) != NO_ERROR) goto oops; + state &= 0x7F88; /* this & operation as shown in the ibm documents */ + if (DosSetFHState (handle[4], state | OPEN_FLAGS_NOINHERIT) != NO_ERROR) goto oops; + + if (minidx == -1) minidx = 4; + maxidx = 5; + } + + if (maxidx == -1) goto oops; + + old_in = old_out = old_err = 0xFFFFFFFFFF; + std_in = 0; std_out = 1; std_err = 2; + +/* TODO: error handling ... */ + if (oflags & QSE_PIO_WRITEIN) + { + DosDupHandle (std_in, &old_in); /* store the original */ + DosDupHandle (handle[0], &std_in); /* substitute a pipe handle */ + } + + if (oflags & QSE_PIO_READOUT) + { + DosDupHandle (std_out, &old_out); + DosDupHandle (handle[3], &std_out); + if (oflags & QSE_PIO_ERRTOOUT) DosDupHandle (handle[3], &std_err); + } + + if (oflags & QSE_PIO_READERR) + { + DosDupHandle (std_err, &old_err); + DosDupHandle (handle[5], &std_err); + if (oflags & QSE_PIO_OUTTOERR) DosDupHandle (handle[5], &std_out); + } + + /* + if (oflags & QSE_PIO_INTONUL) startup.hStdOutput = os2devnul; + if (oflags & QSE_PIO_OUTTONUL) startup.hStdOutput = os2devnul; + if (oflags & QSE_PIO_ERRTONUL) startup.hStdError = os2devnul; + */ + + if (oflags & QSE_PIO_DROPIN) DosClose (std_in); + if (oflags & QSE_PIO_DROPOUT) DosClose (std_out); + if (oflags & QSE_PIO_DROPERR) DosClose (std_err); + + rc = DosExecPgm ( + &load_error, + QSE_SIZEOF(load_error), + EXEC_ASYNCRESULT, + NULL, + NULL, + &child_rc, + cmd /* TODO: mchar... */ + ); + if (rc != NO_ERROR) goto oops; + + /* restore file handles to the original for this parent */ + DosDupHandle (old_in, &std_in); + DosDupHandle (old_out, &std_out); + DosDupHandle (old_err, &std_err); + + pio->child = child_rc.codeTerminate; + #else if (oflags & QSE_PIO_WRITEIN) @@ -312,7 +425,7 @@ qse_pio_t* qse_pio_init ( extern char** environ; int fcnt = 0; #ifndef QSE_CHAR_IS_MCHAR - qse_size_t n, mn, wl; + qse_size_t n, mn, wl; qse_char_t* wcmd = QSE_NULL; qse_mchar_t buf[64]; #endif @@ -431,7 +544,7 @@ qse_pio_t* qse_pio_init ( #else if (oflags & QSE_PIO_SHELL) { - n = qse_wcstombslen (cmd, &mn); + n = qse_wcstombslen (cmd, &mn); if (cmd[n] != QSE_WT('\0')) { /* cmd has illegal sequence */ @@ -599,7 +712,7 @@ qse_pio_t* qse_pio_init ( return pio; oops: -#ifdef _WIN32 +#if defined(_WIN32) if (windevnul != INVALID_HANDLE_VALUE) CloseHandle (windevnul); if (dup != QSE_NULL) QSE_MMGR_FREE (mmgr, dup); #endif @@ -608,14 +721,15 @@ oops: { if (tio[i] != QSE_NULL) qse_tio_close (tio[i]); } + #if defined(_WIN32) for (i = minidx; i < maxidx; i++) CloseHandle (handle[i]); #elif defined(__OS2__) - /* TODO: */ for (i = minidx; i < maxidx; i++) DosClose (handle[i]); #else for (i = minidx; i < maxidx; i++) QSE_CLOSE (handle[i]); #endif + return QSE_NULL; } @@ -859,8 +973,7 @@ int qse_pio_wait (qse_pio_t* pio) DWORD ecode, w; if (pio->child == QSE_PIO_PID_NIL) - { - + { pio->errnum = QSE_PIO_ECHILD; return -1; } @@ -908,8 +1021,42 @@ int qse_pio_wait (qse_pio_t* pio) return ecode; #elif defined(__OS2__) - /* TODO: implement this */ - return -1; + APIRET rc; + RESULTCODES child_rc; + PID ppid; + + if (pio->child == QSE_PIO_PID_NIL) + { + pio->errnum = QSE_PIO_ECHILD; + return -1; + } + + rc = DosWaitChild ( + DCWA_PROCESS, + ((pio->option & QSE_PIO_WAIT_NOBLOCK)? DCWW_NOWAIT: DCWW_WAIT), + &child_rc, + &ppid, + pio->child + ); + if (rc == ERROR_CHILD_NOT_COMPLETE) + { + /* the child process is still alive */ + return 255 + 1; + } + if (rc != NO_ERROR) + { + /* WAIT_FAILED, WAIT_ABANDONED */ + pio->errnum = QSE_PIO_ESUBSYS; + return -1; + } + + /* close handle here to emulate waitpid() as much as possible. */ + + DosClose (pio->child); + pio->child = QSE_PIO_PID_NIL; + + return child_rc.codeResult; + #else int opt = 0; int ret = -1; diff --git a/qse/lib/cmn/sio.c b/qse/lib/cmn/sio.c index 57fe1edd..94625f8d 100644 --- a/qse/lib/cmn/sio.c +++ b/qse/lib/cmn/sio.c @@ -1,5 +1,5 @@ /* - * $Id: sio.c 401 2011-03-16 15:17:25Z hyunghwan.chung $ + * $Id: sio.c 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -77,7 +77,7 @@ static qse_sio_t __sio_out = { QSE_NULL, 0, - #ifdef _WIN32 + #if defined(_WIN32) (HANDLE)STD_OUTPUT_HANDLE, #elif defined(__OS2__) (HFILE)1, @@ -115,7 +115,7 @@ static qse_sio_t __sio_err = { QSE_NULL, 0, - #ifdef _WIN32 + #if defined(_WIN32) (HANDLE)STD_ERROR_HANDLE, #elif defined(__OS2__) (HFILE)2, @@ -331,7 +331,7 @@ static qse_ssize_t __sio_input (int cmd, void* arg, void* buf, qse_size_t size) if (cmd == QSE_TIO_IO_DATA) { - #ifdef _WIN32 + #if defined(_WIN32) /* TODO: I hate this way of adjusting the handle value * Is there any good ways to do it statically? */ HANDLE h = sio->fio.handle; @@ -360,7 +360,7 @@ static qse_ssize_t __sio_output (int cmd, void* arg, void* buf, qse_size_t size) if (cmd == QSE_TIO_IO_DATA) { - #ifdef _WIN32 + #if defined(_WIN32) /* TODO: I hate this way of adjusting the handle value * Is there any good ways to do it statically? */ HANDLE h = sio->fio.handle; diff --git a/qse/lib/cmn/str_cnv.c b/qse/lib/cmn/str_cnv.c index 72b1dd4c..ed1e4e88 100644 --- a/qse/lib/cmn/str_cnv.c +++ b/qse/lib/cmn/str_cnv.c @@ -1,5 +1,5 @@ /* - * $Id: str_cnv.c 323 2010-04-05 12:50:01Z hyunghwan.chung $ + * $Id: str_cnv.c 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -247,7 +247,8 @@ qse_size_t qse_wcstombslen (const qse_wchar_t* wcs, qse_size_t* mbslen) p++; mlen += n; } - /* this length excludes the terminating null character. */ + /* this length holds the number of resulting multi-byte characters + * excluding the terminating null character */ *mbslen = mlen; /* returns the number of characters handled. @@ -310,6 +311,8 @@ qse_size_t qse_wcstombs ( mbs += n; rem -= n; p++; } + /* update mbslen to the length of the mbs string converted excluding + * terminating null */ *mbslen -= rem; /* null-terminate the multibyte sequence if it has sufficient space */ @@ -358,15 +361,15 @@ int qse_mbstowcs_strict ( /* wcs not big enough to be null-terminated. * if it has been null-terminated properly, * wn should be less than wcslen. */ - return -1; - } + return -1; + } if (mbs[n] != QSE_MT('\0')) { /* incomplete sequence or invalid sequence */ return -1; } - return 0; + return 0; } int qse_wcstombs_strict ( diff --git a/qse/lib/cmn/time.c b/qse/lib/cmn/time.c index a7feab5b..3f124a56 100644 --- a/qse/lib/cmn/time.c +++ b/qse/lib/cmn/time.c @@ -1,5 +1,5 @@ /* - * $Id: time.c 400 2011-03-16 08:37:06Z hyunghwan.chung $ + * $Id: time.c 402 2011-03-18 15:07:21Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -24,14 +24,17 @@ #if defined(_WIN32) # include #elif defined(__OS2__) +# define INCL_DOSDATETIME +# define INCL_DOSERRORS # include #else # include "syscall.h" # include #endif + #include -#ifdef _WIN32 +#if defined(_WIN32) #define WIN_EPOCH_YEAR (1601) #define WIN_EPOCH_MON (1) #define WIN_EPOCH_DAY (1) @@ -89,9 +92,33 @@ int qse_gettime (qse_ntime_t* t) *t = ((qse_ntime_t)(*((qse_int64_t*)&ft)) / (10 * 1000)); *t -= EPOCH_DIFF_MSECS; return 0; + #elif defined(__OS2__) - /* TODO: implement this */ - return -1; + + APIRET rc; + DATETIME dt; + qse_btime_t bt; + + /* Can I use DosQuerySysInfo(QSV_TIME_LOW) and + * DosQuerySysInfo(QSV_TIME_HIGH) for this instead? + * Maybe, resolution too low as it returns values + * in seconds. */ + + rc = DosGetDateTime (&dt); + if (rc != NO_ERROR) return -1; + + bt.year = dt.year - 1900; + bt.mon = dt.month - 1; + bt.mday = dt.day; + bt.hour = dt.hours; + bt.min = dt.minutes; + bt.sec = dt.seconds; + bt.msec = dt.hundredths * 10; + bt.isdst = -1; + + if (qse_timelocal (&bt, t) <= -1) return -1; + return 0; + #else struct timeval tv; int n; @@ -99,8 +126,8 @@ int qse_gettime (qse_ntime_t* t) n = QSE_GETTIMEOFDAY (&tv, QSE_NULL); if (n == -1) return -1; - *t = (qse_ntime_t)tv.tv_sec*QSE_MSECS_PER_SEC + - (qse_ntime_t)tv.tv_usec/QSE_USECS_PER_MSEC; + *t = (qse_ntime_t)tv.tv_sec * QSE_MSECS_PER_SEC + + (qse_ntime_t)tv.tv_usec / QSE_USECS_PER_MSEC; return 0; #endif } @@ -116,8 +143,24 @@ int qse_settime (qse_ntime_t t) if (SetSystemTime(&st) == FALSE) return -1; return 0; #elif defined(__OS2__) - /* TODO: implement this */ - return -1; + + APIRET rc; + DATETIME dt; + qse_btime_t bt; + + if (qse_localtime (t, &bt) <= -1) return -1; + + QSE_MEMSET (&dt, 0, QSE_SIZEOF(dt)); + dt.year = bt.year + 1900; + dt.month = bt.mon + 1; + dt.day = bt.mday; + dt.hours = bt.hour; + dt.minutes = bt.min; + dt.seconds = bt.sec; + dt.hundredths = bt.msec / 10; + + rc = DosSetDateTime (&dt); + return (rc != NO_ERROR)? -1: 0; #else struct timeval tv; int n; @@ -226,6 +269,12 @@ int qse_localtime (qse_ntime_t nt, qse_btime_t* bt) #if defined(_WIN32) tm = localtime (&t); #elif defined(__OS2__) +# if defined(__WATCOMC__) + struct tm btm; + tm = _localtime (&t, &btm); +# else +# error Please support other compilers that I didn't try. +# endif #else struct tm btm; tm = localtime_r (&t, &btm); @@ -252,8 +301,7 @@ int qse_localtime (qse_ntime_t nt, qse_btime_t* bt) int qse_timegm (const qse_btime_t* bt, qse_ntime_t* nt) { #if 0 - -#ifdef _WIN32 +#if defined(_WIN32) /* TODO: verify qse_timegm for WIN32 */ SYSTEMTIME st; FILETIME ft; @@ -272,6 +320,8 @@ int qse_timegm (const qse_btime_t* bt, qse_ntime_t* nt) *nt -= EPOCH_DIFF_MSECS; return 0; +#elif defined(__OS2__) +# error NOT IMPLEMENTED YET #else /* TODO: qse_timegm - remove dependency on timegm */ diff --git a/qse/lib/scm/eval.c b/qse/lib/scm/eval.c index dfe8637c..45373ad5 100644 --- a/qse/lib/scm/eval.c +++ b/qse/lib/scm/eval.c @@ -21,14 +21,16 @@ #include "scm.h" static int eval_entity (qse_scm_t* scm); - + +#if 0 static int save (qse_scm_t* scm, qse_scm_ent_t* ) { } static int leave (qse_scm_t* scm) { -} +} +#endif int qse_scm_dolambda (qse_scm_t* scm) { @@ -52,10 +54,10 @@ int qse_scm_doquote (qse_scm_t* scm) static int define_finish (qse_scm_t* scm) { - qse_scm_ent_t* var = scm->e.cod; +// qse_scm_ent_t* var = scm->e.cod; //set var in the environemtn.... - leave (scm); + //leave (scm); return 0; } @@ -95,7 +97,7 @@ int qse_scm_dodefine (qse_scm_t* scm) return -1; } - save car... +// save car... // let it jump to EVAL and come back to DEFINE_FINISH... scm->e.cod = PAIR_CAR(cdr); @@ -114,23 +116,23 @@ int qse_scm_dobegin (qse_scm_t* scm) qse_scm_ent_t* car, * cdr; - if (IS_SMALLINT(scm.e.cod) || TYPE(scm.e.cod) != QSE_SCM_ENT_PAIR) + if (IS_SMALLINT(scm, scm->e.cod) || TYPE(scm->e.cod) != QSE_SCM_ENT_PAIR) { /* (begin (+ x y) . 30) */ qse_scm_seterror (scm, QSE_SCM_EARGBAD, QSE_NULL, QSE_NULL); return -1; } - car = PAIR_CAR(scm.e.cod); - cdr = PAIR_CDR(scm.e.cod); + car = PAIR_CAR(scm->e.cod); + cdr = PAIR_CDR(scm->e.cod); - if (!IS_NIL(cdr)) + if (!IS_NIL(scm,cdr)) { -save (BEGIN... cdr); +//save (BEGIN... cdr); } - scm.e.cod = car; - scm.e.op = eval_entity; + scm->e.cod = car; + scm->e.op = eval_entity; return 0; } diff --git a/qse/samples/awk/awk08.cpp b/qse/samples/awk/awk08.cpp index 8bd92510..9b21d19f 100644 --- a/qse/samples/awk/awk08.cpp +++ b/qse/samples/awk/awk08.cpp @@ -26,6 +26,9 @@ #if defined(_WIN32) # include +#if defined(__OS2__) +# define INCL_DOSPROCESS +# include #else # include # include @@ -86,9 +89,12 @@ public: if (run.setGlobal (idLastSleep, x) <= -1) return -1; - #ifdef _WIN32 + #if defined(_WIN32) ::Sleep ((DWORD)(x * 1000)); return ret.setInt (0); + #elif defined(__OS2__) + ::DosSleep ((ULONG)(x * 1000)); + return ret.setInt (0); #else return ret.setInt (::sleep (x)); #endif diff --git a/qse/samples/cmn/pio.c b/qse/samples/cmn/pio.c index a77e8317..61739912 100644 --- a/qse/samples/cmn/pio.c +++ b/qse/samples/cmn/pio.c @@ -4,8 +4,12 @@ #include #include -#ifdef _WIN32 +#if defined(_WIN32) # include +#elif defined(__OS2__) +# define INCL_DOSPROCESS +# define INCL_DOSERRORS +# include #else # include # include @@ -245,7 +249,7 @@ static int test9 (void) pio = qse_pio_open ( QSE_NULL, 0, -#ifdef _WIN32 +#if defined(_WIN32) || defined(__OS2__) QSE_T(".\\sll.exe"), #else QSE_T("/bin/ls -laF"), @@ -258,7 +262,7 @@ static int test9 (void) return -1; } -#ifdef _WIN32 +#if defined(_WIN32) { int n = 5; @@ -267,6 +271,17 @@ static int test9 (void) qse_printf (QSE_T("WaitForSingleObject....%d\n"), WaitForSingleObject (pio->child, 0)); } +#elif defined(__OS2__) + { + int n = 5; + + #error NO IMPLEMENTED YET. + qse_printf (QSE_T("sleeping for %d seconds\n"), n); + DosSleep (n * 1000); + qse_printf (QSE_T("WaitForSingleObject....%d\n"), + WaitForSingleObject (pio->child, 0)); + DosWaitChild (DCWA_PROCESS, DCWW_WAIT,..); + } #else { int status; diff --git a/qse/watcom/debug/os2/cmd/scm/qsescm.tgt b/qse/watcom/debug/os2/cmd/scm/qsescm.tgt new file mode 100755 index 00000000..4afc0a77 --- /dev/null +++ b/qse/watcom/debug/os2/cmd/scm/qsescm.tgt @@ -0,0 +1,129 @@ +40 +targetIdent +0 +MProject +1 +MComponent +0 +2 +WString +4 +OEXE +3 +WString +5 +oc2eo +1 +0 +1 +4 +MCommand +0 +5 +MCommand +0 +6 +MItem +10 +qsescm.exe +7 +WString +4 +OEXE +8 +WVList +2 +9 +MVState +10 +WString +7 +OS2LINK +11 +WString +28 +?????Library directories(;): +1 +12 +WString +27 +../../lib/cmn ../../lib/scm +0 +13 +MVState +14 +WString +7 +OS2LINK +15 +WString +18 +?????Libraries(,): +1 +16 +WString +13 +qsecmn qsescm +0 +17 +WVList +0 +-1 +1 +1 +0 +18 +WPickList +2 +19 +MItem +3 +*.c +20 +WString +4 +COBJ +21 +WVList +0 +22 +WVList +0 +-1 +1 +1 +0 +23 +MItem +28 +..\..\..\..\..\cmd\scm\scm.c +24 +WString +4 +COBJ +25 +WVList +1 +26 +MVState +27 +WString +3 +WCC +28 +WString +25 +o?2??Include directories: +1 +29 +WString +54 +"$(%watcom)\h;$(%watcom)\h\os2;..\..\..\..\..\include" +0 +30 +WVList +0 +19 +1 +1 +0 diff --git a/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt b/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt new file mode 100755 index 00000000..e88b23f5 --- /dev/null +++ b/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt @@ -0,0 +1,691 @@ +40 +targetIdent +0 +MProject +1 +MComponent +0 +2 +WString +3 +LIB +3 +WString +5 +o_2so +1 +0 +1 +4 +MCommand +0 +5 +MCommand +0 +6 +MItem +10 +qsecmn.lib +7 +WString +3 +LIB +8 +WVList +0 +9 +WVList +0 +-1 +1 +1 +0 +10 +WPickList +35 +11 +MItem +3 +*.c +12 +WString +4 +COBJ +13 +WVList +1 +14 +MVState +15 +WString +3 +WCC +16 +WString +25 +o?2??Include directories: +1 +17 +WString +54 +"$(%watcom)\h;$(%watcom)\h\os2;..\..\..\..\..\include" +0 +18 +WVList +0 +-1 +1 +1 +0 +19 +MItem +35 +..\..\..\..\..\lib\cmn\alg_search.c +20 +WString +4 +COBJ +21 +WVList +0 +22 +WVList +0 +11 +1 +1 +0 +23 +MItem +33 +..\..\..\..\..\lib\cmn\alg_sort.c +24 +WString +4 +COBJ +25 +WVList +0 +26 +WVList +0 +11 +1 +1 +0 +27 +MItem +31 +..\..\..\..\..\lib\cmn\assert.c +28 +WString +4 +COBJ +29 +WVList +0 +30 +WVList +0 +11 +1 +1 +0 +31 +MItem +28 +..\..\..\..\..\lib\cmn\chr.c +32 +WString +4 +COBJ +33 +WVList +0 +34 +WVList +0 +11 +1 +1 +0 +35 +MItem +32 +..\..\..\..\..\lib\cmn\chr_cnv.c +36 +WString +4 +COBJ +37 +WVList +0 +38 +WVList +0 +11 +1 +1 +0 +39 +MItem +28 +..\..\..\..\..\lib\cmn\dll.c +40 +WString +4 +COBJ +41 +WVList +0 +42 +WVList +0 +11 +1 +1 +0 +43 +MItem +28 +..\..\..\..\..\lib\cmn\fio.c +44 +WString +4 +COBJ +45 +WVList +0 +46 +WVList +0 +11 +1 +1 +0 +47 +MItem +28 +..\..\..\..\..\lib\cmn\fma.c +48 +WString +4 +COBJ +49 +WVList +0 +50 +WVList +0 +11 +1 +1 +0 +51 +MItem +28 +..\..\..\..\..\lib\cmn\gdl.c +52 +WString +4 +COBJ +53 +WVList +0 +54 +WVList +0 +11 +1 +1 +0 +55 +MItem +28 +..\..\..\..\..\lib\cmn\htb.c +56 +WString +4 +COBJ +57 +WVList +0 +58 +WVList +0 +11 +1 +1 +0 +59 +MItem +28 +..\..\..\..\..\lib\cmn\lda.c +60 +WString +4 +COBJ +61 +WVList +0 +62 +WVList +0 +11 +1 +1 +0 +63 +MItem +29 +..\..\..\..\..\lib\cmn\main.c +64 +WString +4 +COBJ +65 +WVList +0 +66 +WVList +0 +11 +1 +1 +0 +67 +MItem +28 +..\..\..\..\..\lib\cmn\mem.c +68 +WString +4 +COBJ +69 +WVList +0 +70 +WVList +0 +11 +1 +1 +0 +71 +MItem +29 +..\..\..\..\..\lib\cmn\misc.c +72 +WString +4 +COBJ +73 +WVList +0 +74 +WVList +0 +11 +1 +1 +0 +75 +MItem +28 +..\..\..\..\..\lib\cmn\oht.c +76 +WString +4 +COBJ +77 +WVList +0 +78 +WVList +0 +11 +1 +1 +0 +79 +MItem +28 +..\..\..\..\..\lib\cmn\opt.c +80 +WString +4 +COBJ +81 +WVList +0 +82 +WVList +0 +11 +1 +1 +0 +83 +MItem +28 +..\..\..\..\..\lib\cmn\pio.c +84 +WString +4 +COBJ +85 +WVList +0 +86 +WVList +0 +11 +1 +1 +0 +87 +MItem +28 +..\..\..\..\..\lib\cmn\rbt.c +88 +WString +4 +COBJ +89 +WVList +0 +90 +WVList +0 +11 +1 +1 +0 +91 +MItem +28 +..\..\..\..\..\lib\cmn\rex.c +92 +WString +4 +COBJ +93 +WVList +0 +94 +WVList +0 +11 +1 +1 +0 +95 +MItem +28 +..\..\..\..\..\lib\cmn\sio.c +96 +WString +4 +COBJ +97 +WVList +0 +98 +WVList +0 +11 +1 +1 +0 +99 +MItem +28 +..\..\..\..\..\lib\cmn\sll.c +100 +WString +4 +COBJ +101 +WVList +0 +102 +WVList +0 +11 +1 +1 +0 +103 +MItem +30 +..\..\..\..\..\lib\cmn\stdio.c +104 +WString +4 +COBJ +105 +WVList +0 +106 +WVList +0 +11 +1 +1 +0 +107 +MItem +32 +..\..\..\..\..\lib\cmn\str_bas.c +108 +WString +4 +COBJ +109 +WVList +0 +110 +WVList +0 +11 +1 +1 +0 +111 +MItem +32 +..\..\..\..\..\lib\cmn\str_cnv.c +112 +WString +4 +COBJ +113 +WVList +0 +114 +WVList +0 +11 +1 +1 +0 +115 +MItem +32 +..\..\..\..\..\lib\cmn\str_dyn.c +116 +WString +4 +COBJ +117 +WVList +0 +118 +WVList +0 +11 +1 +1 +0 +119 +MItem +32 +..\..\..\..\..\lib\cmn\str_utl.c +120 +WString +4 +COBJ +121 +WVList +0 +122 +WVList +0 +11 +1 +1 +0 +123 +MItem +29 +..\..\..\..\..\lib\cmn\time.c +124 +WString +4 +COBJ +125 +WVList +0 +126 +WVList +0 +11 +1 +1 +0 +127 +MItem +28 +..\..\..\..\..\lib\cmn\tio.c +128 +WString +4 +COBJ +129 +WVList +0 +130 +WVList +0 +11 +1 +1 +0 +131 +MItem +32 +..\..\..\..\..\lib\cmn\tio_get.c +132 +WString +4 +COBJ +133 +WVList +0 +134 +WVList +0 +11 +1 +1 +0 +135 +MItem +32 +..\..\..\..\..\lib\cmn\tio_put.c +136 +WString +4 +COBJ +137 +WVList +0 +138 +WVList +0 +11 +1 +1 +0 +139 +MItem +28 +..\..\..\..\..\lib\cmn\xma.c +140 +WString +4 +COBJ +141 +WVList +0 +142 +WVList +0 +11 +1 +1 +0 +143 +MItem +3 +*.h +144 +WString +3 +NIL +145 +WVList +0 +146 +WVList +0 +-1 +1 +1 +0 +147 +MItem +28 +..\..\..\..\..\lib\cmn\mem.h +148 +WString +3 +NIL +149 +WVList +0 +150 +WVList +0 +143 +1 +1 +0 +151 +MItem +32 +..\..\..\..\..\lib\cmn\syscall.h +152 +WString +3 +NIL +153 +WVList +0 +154 +WVList +0 +143 +1 +1 +0 diff --git a/qse/watcom/debug/os2/lib/scm/qsescm.tgt b/qse/watcom/debug/os2/lib/scm/qsescm.tgt new file mode 100755 index 00000000..6db93ef3 --- /dev/null +++ b/qse/watcom/debug/os2/lib/scm/qsescm.tgt @@ -0,0 +1,223 @@ +40 +targetIdent +0 +MProject +1 +MComponent +0 +2 +WString +3 +LIB +3 +WString +5 +o_2so +1 +0 +1 +4 +MCommand +0 +5 +MCommand +0 +6 +MItem +10 +qsescm.lib +7 +WString +3 +LIB +8 +WVList +0 +9 +WVList +0 +-1 +1 +1 +0 +10 +WPickList +9 +11 +MItem +3 +*.c +12 +WString +4 +COBJ +13 +WVList +1 +14 +MVState +15 +WString +3 +WCC +16 +WString +25 +o?2??Include directories: +1 +17 +WString +54 +"$(%watcom)\h;$(%watcom)\h\os2;..\..\..\..\..\include" +0 +18 +WVList +0 +-1 +1 +1 +0 +19 +MItem +28 +..\..\..\..\..\lib\scm\err.c +20 +WString +4 +COBJ +21 +WVList +0 +22 +WVList +0 +11 +1 +1 +0 +23 +MItem +29 +..\..\..\..\..\lib\scm\eval.c +24 +WString +4 +COBJ +25 +WVList +0 +26 +WVList +0 +11 +1 +1 +0 +27 +MItem +28 +..\..\..\..\..\lib\scm\mem.c +28 +WString +4 +COBJ +29 +WVList +0 +30 +WVList +0 +11 +1 +1 +0 +31 +MItem +30 +..\..\..\..\..\lib\scm\print.c +32 +WString +4 +COBJ +33 +WVList +0 +34 +WVList +0 +11 +1 +1 +0 +35 +MItem +29 +..\..\..\..\..\lib\scm\read.c +36 +WString +4 +COBJ +37 +WVList +0 +38 +WVList +0 +11 +1 +1 +0 +39 +MItem +28 +..\..\..\..\..\lib\scm\scm.c +40 +WString +4 +COBJ +41 +WVList +0 +42 +WVList +0 +11 +1 +1 +0 +43 +MItem +3 +*.h +44 +WString +3 +NIL +45 +WVList +0 +46 +WVList +0 +-1 +1 +1 +0 +47 +MItem +28 +..\..\..\..\..\lib\scm\scm.h +48 +WString +3 +NIL +49 +WVList +0 +50 +WVList +0 +43 +1 +1 +0 diff --git a/qse/watcom/debug/os2/lib/sed/qsesed.tgt b/qse/watcom/debug/os2/lib/sed/qsesed.tgt new file mode 100755 index 00000000..d9bb3fcb --- /dev/null +++ b/qse/watcom/debug/os2/lib/sed/qsesed.tgt @@ -0,0 +1,169 @@ +40 +targetIdent +0 +MProject +1 +MComponent +0 +2 +WString +3 +LIB +3 +WString +5 +o_2so +1 +0 +1 +4 +MCommand +0 +5 +MCommand +0 +6 +MItem +10 +qsesed.lib +7 +WString +3 +LIB +8 +WVList +0 +9 +WVList +0 +-1 +1 +1 +0 +10 +WPickList +6 +11 +MItem +3 +*.c +12 +WString +4 +COBJ +13 +WVList +1 +14 +MVState +15 +WString +3 +WCC +16 +WString +25 +o?2??Include directories: +1 +17 +WString +54 +"$(%watcom)\h;$(%watcom)\h\os2;..\..\..\..\..\include" +0 +18 +WVList +0 +-1 +1 +1 +0 +19 +MItem +28 +..\..\..\..\..\lib\sed\err.c +20 +WString +4 +COBJ +21 +WVList +0 +22 +WVList +0 +11 +1 +1 +0 +23 +MItem +28 +..\..\..\..\..\lib\sed\sed.c +24 +WString +4 +COBJ +25 +WVList +0 +26 +WVList +0 +11 +1 +1 +0 +27 +MItem +28 +..\..\..\..\..\lib\sed\std.c +28 +WString +4 +COBJ +29 +WVList +0 +30 +WVList +0 +11 +1 +1 +0 +31 +MItem +3 +*.h +32 +WString +3 +NIL +33 +WVList +0 +34 +WVList +0 +-1 +1 +1 +0 +35 +MItem +28 +..\..\..\..\..\lib\sed\sed.h +36 +WString +3 +NIL +37 +WVList +0 +38 +WVList +0 +31 +1 +1 +0 diff --git a/qse/watcom/qse.wpj b/qse/watcom/qse.wpj index ba33a82a..9caa9f13 100755 --- a/qse/watcom/qse.wpj +++ b/qse/watcom/qse.wpj @@ -4,8 +4,8 @@ projectIdent VpeMain 1 WRect -130 -560 +610 +213 9320 9120 2 @@ -16,7 +16,7 @@ MCommand 4 MCommand 0 -3 +8 5 WFileName 30 @@ -30,54 +30,154 @@ WFileName 30 release/os2/cmd/sed/qsesed.tgt 8 -WVList -3 +WFileName +30 +release/os2/lib/scm/qsescm.tgt 9 -VComponent +WFileName +28 +debug/os2/lib/cmn/qsecmn.tgt 10 +WFileName +28 +debug/os2/lib/sed/qsesed.tgt +11 +WFileName +28 +debug/os2/lib/scm/qsescm.tgt +12 +WFileName +28 +debug/os2/cmd/scm/qsescm.tgt +13 +WVList +8 +14 +VComponent +15 WRect 0 0 5700 4240 +1 0 -0 -11 +16 WFileName 30 release/os2/lib/cmn/qsecmn.tgt -10 +0 14 -12 +17 VComponent -13 +18 WRect -290 -280 +90 +693 5700 -4253 +4240 +1 0 -0 -14 +19 WFileName 30 release/os2/lib/sed/qsesed.tgt 0 0 -15 +20 VComponent -16 +21 WRect 2100 -866 +853 5700 -4253 +4240 +1 0 -0 -17 +22 WFileName 30 release/os2/cmd/sed/qsesed.tgt 0 1 -15 +23 +VComponent +24 +WRect +590 +520 +5700 +4253 +1 +0 +25 +WFileName +30 +release/os2/lib/scm/qsescm.tgt +0 +2 +26 +VComponent +27 +WRect +430 +333 +5700 +4253 +0 +0 +28 +WFileName +28 +debug/os2/lib/cmn/qsecmn.tgt +0 +0 +29 +VComponent +30 +WRect +1050 +1800 +5700 +4253 +0 +0 +31 +WFileName +28 +debug/os2/lib/sed/qsesed.tgt +0 +5 +32 +VComponent +33 +WRect +2680 +2093 +5700 +4253 +0 +0 +34 +WFileName +28 +debug/os2/lib/scm/qsescm.tgt +0 +3 +35 +VComponent +36 +WRect +0 +0 +5700 +4253 +0 +0 +37 +WFileName +28 +debug/os2/cmd/scm/qsescm.tgt +0 +1 +35 diff --git a/qse/watcom/release/os2/lib/scm/qsescm.tgt b/qse/watcom/release/os2/lib/scm/qsescm.tgt new file mode 100755 index 00000000..0a623e97 --- /dev/null +++ b/qse/watcom/release/os2/lib/scm/qsescm.tgt @@ -0,0 +1,287 @@ +40 +targetIdent +0 +MProject +1 +MComponent +0 +2 +WString +3 +LIB +3 +WString +5 +o_2so +1 +0 +1 +4 +MCommand +0 +5 +MCommand +0 +6 +MItem +10 +qsescm.lib +7 +WString +3 +LIB +8 +WVList +0 +9 +WVList +0 +-1 +1 +1 +0 +10 +WPickList +9 +11 +MItem +3 +*.c +12 +WString +4 +COBJ +13 +WVList +6 +14 +MVState +15 +WString +3 +WCC +16 +WString +25 +o?2??Include directories: +1 +17 +WString +54 +"$(%watcom)/h;$(%watcom)/h/os2;..\..\..\..\..\include" +0 +18 +MVState +19 +WString +3 +WCC +20 +WString +23 +?????Macro definitions: +1 +21 +WString +6 +NDEBUG +0 +22 +MRState +23 +WString +3 +WCC +24 +WString +21 +?????No optimizations +1 +0 +25 +MRState +26 +WString +3 +WCC +27 +WString +27 +?????Average space and time +1 +1 +28 +MRState +29 +WString +3 +WCC +30 +WString +29 +?????No debugging information +1 +1 +31 +MRState +32 +WString +3 +WCC +33 +WString +24 +?????Full debugging info +1 +0 +34 +WVList +0 +-1 +1 +1 +0 +35 +MItem +28 +../../../../../lib/scm/err.c +36 +WString +4 +COBJ +37 +WVList +0 +38 +WVList +0 +11 +1 +1 +0 +39 +MItem +29 +../../../../../lib/scm/eval.c +40 +WString +4 +COBJ +41 +WVList +0 +42 +WVList +0 +11 +1 +1 +0 +43 +MItem +28 +../../../../../lib/scm/mem.c +44 +WString +4 +COBJ +45 +WVList +0 +46 +WVList +0 +11 +1 +1 +0 +47 +MItem +30 +../../../../../lib/scm/print.c +48 +WString +4 +COBJ +49 +WVList +0 +50 +WVList +0 +11 +1 +1 +0 +51 +MItem +29 +../../../../../lib/scm/read.c +52 +WString +4 +COBJ +53 +WVList +0 +54 +WVList +0 +11 +1 +1 +0 +55 +MItem +28 +../../../../../lib/scm/scm.c +56 +WString +4 +COBJ +57 +WVList +0 +58 +WVList +0 +11 +1 +1 +0 +59 +MItem +3 +*.h +60 +WString +3 +NIL +61 +WVList +0 +62 +WVList +0 +-1 +1 +1 +0 +63 +MItem +28 +../../../../../lib/scm/scm.h +64 +WString +3 +NIL +65 +WVList +0 +66 +WVList +0 +59 +1 +1 +0