- fixed a bug in pio.c for WIN32

- deleted unnecessary files.
- updated documentation.
This commit is contained in:
2009-12-15 06:50:11 +00:00
parent 7715b1b9f9
commit 41b716c195
28 changed files with 206 additions and 1224 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: pio.c 287 2009-09-15 10:01:02Z hyunghwan.chung $
* $Id: pio.c 316 2009-12-14 12:50:11Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -174,9 +174,19 @@ qse_pio_t* qse_pio_init (
startup.cb = QSE_SIZEOF(startup);
/*
startup.hStdInput = INVALID_HANDLE_VALUE;
startup.hStdOutput = INVALID_HANDLE_VALUE;
startup.hStdOutput = INVALID_HANDLE_VALUE;
*/
startup.hStdInput = GetStdHandle (STD_INPUT_HANDLE);
startup.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
startup.hStdOutput = GetStdHandle (STD_ERROR_HANDLE);
if (startup.hStdInput == INVALID_HANDLE_VALUE ||
startup.hStdOutput == INVALID_HANDLE_VALUE ||
startup.hStdError == INVALID_HANDLE_VALUE) goto oops;
if (oflags & QSE_PIO_WRITEIN) startup.hStdInput = handle[0];

View File

@ -3,11 +3,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include
lib_LTLIBRARIES = libqseutl.la
libqseutl_la_SOURCES = \
http.c \
tgp.c \
tgp.h
http.c
libqseutl_la_LDFLAGS = -version-info 1:0:0 -no-undefined -L../cmn
libqseutl_la_LIBADD = -lqsecmn

View File

@ -72,7 +72,7 @@ am__base_list = \
am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libqseutl_la_DEPENDENCIES =
am_libqseutl_la_OBJECTS = http.lo tgp.lo
am_libqseutl_la_OBJECTS = http.lo
libqseutl_la_OBJECTS = $(am_libqseutl_la_OBJECTS)
libqseutl_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@ -237,9 +237,7 @@ top_srcdir = @top_srcdir@
AM_CPPFLAGS = -I$(top_srcdir)/include
lib_LTLIBRARIES = libqseutl.la
libqseutl_la_SOURCES = \
http.c \
tgp.c \
tgp.h
http.c
libqseutl_la_LDFLAGS = -version-info 1:0:0 -no-undefined -L../cmn
libqseutl_la_LIBADD = -lqsecmn
@ -318,7 +316,6 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tgp.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<

View File

@ -1,260 +0,0 @@
/*
* $Id$
*/
#include <qse/utl/tgp.h>
#include "../cmn/mem.h"
#include "tgp.h"
QSE_IMPLEMENT_COMMON_FUNCTIONS (tgp)
qse_tgp_t* qse_tgp_open (qse_mmgr_t* mmgr, qse_size_t xtn)
{
qse_tgp_t* tgp;
if (mmgr == QSE_NULL)
{
mmgr = QSE_MMGR_GETDFL();
QSE_ASSERTX (mmgr != QSE_NULL,
"Set the memory manager with QSE_MMGR_SETDFL()");
if (mmgr == QSE_NULL) return QSE_NULL;
}
tgp = (qse_tgp_t*) QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_tgp_t) + xtn);
if (tgp == QSE_NULL) return QSE_NULL;
if (qse_tgp_init (tgp, mmgr) == QSE_NULL)
{
QSE_MMGR_FREE (tgp->mmgr, tgp);
return QSE_NULL;
}
return tgp;
}
void qse_tgp_close (qse_tgp_t* tgp)
{
qse_tgp_fini (tgp);
QSE_MMGR_FREE (tgp->mmgr, tgp);
}
qse_tgp_t* qse_tgp_init (qse_tgp_t* tgp, qse_mmgr_t* mmgr)
{
QSE_MEMSET (tgp, 0, sizeof(*tgp));
tgp->mmgr = mmgr;
return tgp;
}
void qse_tgp_fini (qse_tgp_t* tgp)
{
}
int qse_tgp_geterrnum (qse_tgp_t* tgp)
{
return tgp->errnum;
}
static int getc (qse_tgp_t* tgp, qse_char_t* c)
{
if (tgp->ib.pos >= tgp->ib.len)
{
qse_ssize_t n;
n = tgp->ih.func (QSE_TGP_IO_READ, tgp->ih.arg, tgp->ib.ptr, QSE_COUNTOF(tgp->ib.ptr));
if (n < 0) return -1;
else if (n == 0)
{
*c = QSE_CHAR_EOF;
return 0;
}
else
{
tgp->ib.pos = 0;
tgp->ib.len = n;
}
}
*c = tgp->ib.ptr[tgp->ib.pos++];
return 1;
}
static int putc (qse_tgp_t* tgp, qse_char_t c)
{
if (tgp->ob.len >= QSE_COUNTOF(tgp->ob.ptr))
{
qse_ssize_t n;
/* TODO: submit on a newline as well */
n = tgp->oh.func (QSE_TGP_IO_WRITE, tgp->oh.arg, tgp->ob.ptr, QSE_COUNTOF(tgp->ob.ptr));
if (n < 0) return -1;
else if (n == 0) return 0;
}
tgp->ob.ptr[tgp->ob.len++] = c;
return 1;
}
static int runc (qse_tgp_t* tgp, qse_char_t c)
{
if (tgp->rb.len >= QSE_COUNTOF(tgp->rb.ptr))
{
qse_ssize_t n;
n = tgp->rh.func (QSE_TGP_IO_WRITE, tgp->rh.arg, tgp->rb.ptr, tgp->rb.len);
if (n < 0) return -1;
else if (n == 0) return 0;
tgp->rh.func (QSE_TGP_IO_READ, tgp->rh.arg, tgp->rb.ptr, tgp->rb.len);
}
tgp->rb.ptr[tgp->rb.len++] = c;
return 1;
}
int qse_tgp_run (qse_tgp_t* tgp)
{
qse_bool_t in_tag = QSE_FALSE;
qse_char_t c;
int n;
tgp->ib.pos = 0;
tgp->ib.len = 0;
tgp->ob.len = 0;
tgp->rb.len = 0;
n = tgp->ih.func (QSE_TGP_IO_OPEN, tgp->ih.arg, QSE_NULL, 0);
if (n == -1)
{
/* error */
return -1;
}
if (n == 0)
{
/* reached end of input upon opening the file... */
tgp->ih.func (QSE_TGP_IO_CLOSE, tgp->ih.arg, QSE_NULL, 0);
return 0;
}
n = tgp->oh.func (QSE_TGP_IO_OPEN, tgp->oh.arg, QSE_NULL, 0);
if (n == -1)
{
tgp->ih.func (QSE_TGP_IO_CLOSE, tgp->ih.arg, QSE_NULL, 0);
return -1;
}
if (n == 0)
{
/* reached end of input upon opening the file... */
tgp->oh.func (QSE_TGP_IO_CLOSE, tgp->oh.arg, QSE_NULL, 0);
tgp->ih.func (QSE_TGP_IO_CLOSE, tgp->ih.arg, QSE_NULL, 0);
return 0;
}
while (1)
{
n = getc (tgp, &c);
if (n == -1) return -1;
if (n == 0) break;
if (c == QSE_T('<'))
{
n = getc (tgp, &c);
if (n == -1) return -1;
if (n == 0)
{
putc (tgp, QSE_T('<'));
break;
}
if (c == QSE_T('?'))
{
if (in_tag)
{
/* ERROR - netsted tag */
return -1;
}
else in_tag = QSE_TRUE;
}
else
{
if (putc (tgp, QSE_T('<')) <= 0) return -1;
if (putc (tgp, c) <= 0) return -1;
}
}
else if (c == QSE_T('?'))
{
n = getc (tgp, &c);
if (n == -1) return -1;
if (n == 0)
{
if (putc (tgp, QSE_T('<')) <= 0) return -1;
break;
}
if (c == QSE_T('>'))
{
if (in_tag) in_tag = QSE_FALSE;
else
{
/* ERROR - unpaired tag close */
return -1;
}
}
else
{
if (putc (tgp, QSE_T('?')) <= 0) return -1;
if (putc (tgp, c) <= 0) return -1;
}
}
else if (in_tag)
{
runc (tgp, c);
}
else
{
if (putc (tgp, c) <= 0) return -1;
}
}
tgp->oh.func (QSE_TGP_IO_CLOSE, tgp->oh.arg, QSE_NULL, 0);
tgp->ih.func (QSE_TGP_IO_CLOSE, tgp->ih.arg, QSE_NULL, 0);
return 0;
}
void qse_tgp_attachin (qse_tgp_t* tgp, qse_tgp_io_t io, void* arg)
{
tgp->ih.func = io;
tgp->ih.arg = arg;
}
void qse_tgp_detachin (qse_tgp_t* tgp)
{
tgp->ih.func = QSE_NULL;
tgp->ih.arg = QSE_NULL;
}
void qse_tgp_attachout (qse_tgp_t* tgp, qse_tgp_io_t io, void* arg)
{
tgp->oh.func = io;
tgp->oh.arg = arg;
}
void qse_tgp_detachout (qse_tgp_t* tgp)
{
tgp->oh.func = QSE_NULL;
tgp->oh.arg = QSE_NULL;
}
void qse_tgp_attachexec (qse_tgp_t* tgp, qse_tgp_io_t io, void* arg)
{
tgp->rh.func = io;
tgp->rh.arg = arg;
}
void qse_tgp_detachexec (qse_tgp_t* tgp)
{
tgp->rh.func = QSE_NULL;
tgp->rh.arg = QSE_NULL;
}

View File

@ -1,59 +0,0 @@
/*
* $Id$
*/
#ifndef _QSE_LIB_UTL_TGP_H_
#define _QSE_LIB_UTL_TGP_H_
#include <qse/utl/tgp.h>
struct qse_tgp_t
{
QSE_DEFINE_COMMON_FIELDS (tgp)
void* assoc_data;
int errnum;
struct
{
qse_tgp_io_t func;
void* arg;
} ih;
struct
{
qse_tgp_io_t func;
void* arg;
} oh;
struct
{
qse_tgp_io_t func;
void* arg;
} rh;
struct
{
qse_size_t pos;
qse_size_t len;
qse_char_t ptr[512];
} ib;
struct
{
qse_size_t len;
qse_char_t ptr[512];
} ob;
struct
{
qse_size_t len;
qse_char_t ptr[512];
} rb;
int (*read) (qse_tgp_t* tgp, qse_char_t* buf, int len);
int (*write) (qse_tgp_t* tgp, const qse_char_t* buf, int len);
int (*run) (qse_tgp_t* tgp, const qse_char_t* buf, int len);
};
#endif