- 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