- fixed a bug in pio.c for WIN32
- deleted unnecessary files. - updated documentation.
This commit is contained in:
@ -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];
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
@ -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 $@ $<
|
||||
|
@ -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;
|
||||
}
|
@ -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
|
Reference in New Issue
Block a user