refactored the formatter code
This commit is contained in:
		@ -88,7 +88,7 @@ PRE_UNINSTALL = :
 | 
			
		||||
POST_UNINSTALL = :
 | 
			
		||||
build_triplet = @build@
 | 
			
		||||
host_triplet = @host@
 | 
			
		||||
bin_PROGRAMS = mio-execd$(EXEEXT) mio-t01$(EXEEXT)
 | 
			
		||||
bin_PROGRAMS = execd$(EXEEXT) t01$(EXEEXT)
 | 
			
		||||
subdir = bin
 | 
			
		||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 | 
			
		||||
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \
 | 
			
		||||
@ -106,26 +106,22 @@ CONFIG_CLEAN_FILES =
 | 
			
		||||
CONFIG_CLEAN_VPATH_FILES =
 | 
			
		||||
am__installdirs = "$(DESTDIR)$(bindir)"
 | 
			
		||||
PROGRAMS = $(bin_PROGRAMS)
 | 
			
		||||
am_mio_execd_OBJECTS = mio_execd-execd.$(OBJEXT)
 | 
			
		||||
mio_execd_OBJECTS = $(am_mio_execd_OBJECTS)
 | 
			
		||||
am_execd_OBJECTS = execd-execd.$(OBJEXT)
 | 
			
		||||
execd_OBJECTS = $(am_execd_OBJECTS)
 | 
			
		||||
am__DEPENDENCIES_1 =
 | 
			
		||||
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 | 
			
		||||
mio_execd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
 | 
			
		||||
	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 | 
			
		||||
AM_V_lt = $(am__v_lt_@AM_V@)
 | 
			
		||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 | 
			
		||||
am__v_lt_0 = --silent
 | 
			
		||||
am__v_lt_1 = 
 | 
			
		||||
mio_execd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 | 
			
		||||
execd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 | 
			
		||||
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 | 
			
		||||
	$(mio_execd_LDFLAGS) $(LDFLAGS) -o $@
 | 
			
		||||
am_mio_t01_OBJECTS = mio_t01-t01.$(OBJEXT)
 | 
			
		||||
mio_t01_OBJECTS = $(am_mio_t01_OBJECTS)
 | 
			
		||||
mio_t01_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
 | 
			
		||||
	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 | 
			
		||||
mio_t01_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 | 
			
		||||
	$(execd_LDFLAGS) $(LDFLAGS) -o $@
 | 
			
		||||
am_t01_OBJECTS = t01-t01.$(OBJEXT)
 | 
			
		||||
t01_OBJECTS = $(am_t01_OBJECTS)
 | 
			
		||||
t01_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 | 
			
		||||
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 | 
			
		||||
	$(mio_t01_LDFLAGS) $(LDFLAGS) -o $@
 | 
			
		||||
	$(t01_LDFLAGS) $(LDFLAGS) -o $@
 | 
			
		||||
AM_V_P = $(am__v_P_@AM_V@)
 | 
			
		||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 | 
			
		||||
am__v_P_0 = false
 | 
			
		||||
@ -160,8 +156,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 | 
			
		||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 | 
			
		||||
am__v_CCLD_0 = @echo "  CCLD    " $@;
 | 
			
		||||
am__v_CCLD_1 = 
 | 
			
		||||
SOURCES = $(mio_execd_SOURCES) $(mio_t01_SOURCES)
 | 
			
		||||
DIST_SOURCES = $(mio_execd_SOURCES) $(mio_t01_SOURCES)
 | 
			
		||||
SOURCES = $(execd_SOURCES) $(t01_SOURCES)
 | 
			
		||||
DIST_SOURCES = $(execd_SOURCES) $(t01_SOURCES)
 | 
			
		||||
am__can_run_installinfo = \
 | 
			
		||||
  case $$AM_UPDATE_INFO_DIR in \
 | 
			
		||||
    n|no|NO) false;; \
 | 
			
		||||
@ -327,6 +323,7 @@ pdfdir = @pdfdir@
 | 
			
		||||
prefix = @prefix@
 | 
			
		||||
program_transform_name = @program_transform_name@
 | 
			
		||||
psdir = @psdir@
 | 
			
		||||
runstatedir = @runstatedir@
 | 
			
		||||
sbindir = @sbindir@
 | 
			
		||||
sharedstatedir = @sharedstatedir@
 | 
			
		||||
srcdir = @srcdir@
 | 
			
		||||
@ -341,24 +338,22 @@ CPPFLAGS_ALL_COMMON = \
 | 
			
		||||
	-I$(abs_builddir)/../lib  \
 | 
			
		||||
	-I$(abs_srcdir) \
 | 
			
		||||
	-I$(abs_srcdir)/../lib \
 | 
			
		||||
	-I$(includedir)	
 | 
			
		||||
	-I$(includedir)
 | 
			
		||||
 | 
			
		||||
LDFLAGS_ALL_COMMON = -L$(abs_builddir) -L$(abs_builddir)/../lib -L$(libdir)
 | 
			
		||||
 | 
			
		||||
##################################################
 | 
			
		||||
# MAIN LIBRARY 
 | 
			
		||||
##################################################
 | 
			
		||||
CPPFLAGS_LIB_COMMON = $(CPPFLAGS_ALL_COMMON)
 | 
			
		||||
LDFLAGS_LIB_COMMON = $(LDFLAGS_ALL_COMMON) -version-info 1:0:0 -no-undefined
 | 
			
		||||
LIBADD_LIB_COMMON = $(LIBM)
 | 
			
		||||
mio_execd_SOURCES = execd.c
 | 
			
		||||
mio_execd_CPPFLAGS = $(CPPFLAGS_LIB_COMMON)
 | 
			
		||||
mio_execd_LDFLAGS = $(LDFLAGS_LIB_COMMON)
 | 
			
		||||
mio_execd_LDADD = $(LIBADD_LIB_COMMON) -lmio $(SSL_LIBS) $(SOCKET_LIBS) $(SENDFILE_LIBS)
 | 
			
		||||
mio_t01_SOURCES = t01.c
 | 
			
		||||
mio_t01_CPPFLAGS = $(CPPFLAGS_LIB_COMMON)
 | 
			
		||||
mio_t01_LDFLAGS = $(LDFLAGS_LIB_COMMON)
 | 
			
		||||
mio_t01_LDADD = $(LIBADD_LIB_COMMON) -lmio $(SSL_LIBS) $(SOCKET_LIBS) $(SENDFILE_LIBS)
 | 
			
		||||
CPPFLAGS_BIN_COMMON = $(CPPFLAGS_ALL_COMMON)
 | 
			
		||||
LDFLAGS_BIN_COMMON = $(LDFLAGS_ALL_COMMON) -version-info 1:0:0 -no-undefined
 | 
			
		||||
LIBADD_BIN_COMMON = $(LIBM) 
 | 
			
		||||
execd_SOURCES = execd.c
 | 
			
		||||
execd_CPPFLAGS = $(CPPFLAGS_ALL_COMMON)
 | 
			
		||||
execd_LDFLAGS = $(LDFLAGS_ALL_COMMON)
 | 
			
		||||
execd_LDADD = $(LIBADD_BIN_COMMON) -lmio
 | 
			
		||||
execd_DEPENDENCIES = ../lib/libmio.la
 | 
			
		||||
t01_SOURCES = t01.c
 | 
			
		||||
t01_CPPFLAGS = $(CPPFLAGS_ALL_COMMON)
 | 
			
		||||
t01_LDFLAGS = $(LDFLAGS_ALL_COMMON)
 | 
			
		||||
t01_LDADD = $(LIBADD_BIN_COMMON) -lmio
 | 
			
		||||
t01_DEPENDENCIES = ../lib/libmio.la
 | 
			
		||||
all: all-am
 | 
			
		||||
 | 
			
		||||
.SUFFIXES:
 | 
			
		||||
@ -442,13 +437,13 @@ clean-binPROGRAMS:
 | 
			
		||||
	echo " rm -f" $$list; \
 | 
			
		||||
	rm -f $$list
 | 
			
		||||
 | 
			
		||||
mio-execd$(EXEEXT): $(mio_execd_OBJECTS) $(mio_execd_DEPENDENCIES) $(EXTRA_mio_execd_DEPENDENCIES) 
 | 
			
		||||
	@rm -f mio-execd$(EXEEXT)
 | 
			
		||||
	$(AM_V_CCLD)$(mio_execd_LINK) $(mio_execd_OBJECTS) $(mio_execd_LDADD) $(LIBS)
 | 
			
		||||
execd$(EXEEXT): $(execd_OBJECTS) $(execd_DEPENDENCIES) $(EXTRA_execd_DEPENDENCIES) 
 | 
			
		||||
	@rm -f execd$(EXEEXT)
 | 
			
		||||
	$(AM_V_CCLD)$(execd_LINK) $(execd_OBJECTS) $(execd_LDADD) $(LIBS)
 | 
			
		||||
 | 
			
		||||
mio-t01$(EXEEXT): $(mio_t01_OBJECTS) $(mio_t01_DEPENDENCIES) $(EXTRA_mio_t01_DEPENDENCIES) 
 | 
			
		||||
	@rm -f mio-t01$(EXEEXT)
 | 
			
		||||
	$(AM_V_CCLD)$(mio_t01_LINK) $(mio_t01_OBJECTS) $(mio_t01_LDADD) $(LIBS)
 | 
			
		||||
t01$(EXEEXT): $(t01_OBJECTS) $(t01_DEPENDENCIES) $(EXTRA_t01_DEPENDENCIES) 
 | 
			
		||||
	@rm -f t01$(EXEEXT)
 | 
			
		||||
	$(AM_V_CCLD)$(t01_LINK) $(t01_OBJECTS) $(t01_LDADD) $(LIBS)
 | 
			
		||||
 | 
			
		||||
mostlyclean-compile:
 | 
			
		||||
	-rm -f *.$(OBJEXT)
 | 
			
		||||
@ -456,8 +451,8 @@ mostlyclean-compile:
 | 
			
		||||
distclean-compile:
 | 
			
		||||
	-rm -f *.tab.c
 | 
			
		||||
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mio_execd-execd.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mio_t01-t01.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/execd-execd.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t01-t01.Po@am__quote@
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 | 
			
		||||
@ -483,33 +478,33 @@ distclean-compile:
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 | 
			
		||||
 | 
			
		||||
mio_execd-execd.o: execd.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mio_execd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mio_execd-execd.o -MD -MP -MF $(DEPDIR)/mio_execd-execd.Tpo -c -o mio_execd-execd.o `test -f 'execd.c' || echo '$(srcdir)/'`execd.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mio_execd-execd.Tpo $(DEPDIR)/mio_execd-execd.Po
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='execd.c' object='mio_execd-execd.o' libtool=no @AMDEPBACKSLASH@
 | 
			
		||||
execd-execd.o: execd.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(execd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT execd-execd.o -MD -MP -MF $(DEPDIR)/execd-execd.Tpo -c -o execd-execd.o `test -f 'execd.c' || echo '$(srcdir)/'`execd.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/execd-execd.Tpo $(DEPDIR)/execd-execd.Po
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='execd.c' object='execd-execd.o' libtool=no @AMDEPBACKSLASH@
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mio_execd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mio_execd-execd.o `test -f 'execd.c' || echo '$(srcdir)/'`execd.c
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(execd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o execd-execd.o `test -f 'execd.c' || echo '$(srcdir)/'`execd.c
 | 
			
		||||
 | 
			
		||||
mio_execd-execd.obj: execd.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mio_execd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mio_execd-execd.obj -MD -MP -MF $(DEPDIR)/mio_execd-execd.Tpo -c -o mio_execd-execd.obj `if test -f 'execd.c'; then $(CYGPATH_W) 'execd.c'; else $(CYGPATH_W) '$(srcdir)/execd.c'; fi`
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mio_execd-execd.Tpo $(DEPDIR)/mio_execd-execd.Po
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='execd.c' object='mio_execd-execd.obj' libtool=no @AMDEPBACKSLASH@
 | 
			
		||||
execd-execd.obj: execd.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(execd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT execd-execd.obj -MD -MP -MF $(DEPDIR)/execd-execd.Tpo -c -o execd-execd.obj `if test -f 'execd.c'; then $(CYGPATH_W) 'execd.c'; else $(CYGPATH_W) '$(srcdir)/execd.c'; fi`
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/execd-execd.Tpo $(DEPDIR)/execd-execd.Po
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='execd.c' object='execd-execd.obj' libtool=no @AMDEPBACKSLASH@
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mio_execd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mio_execd-execd.obj `if test -f 'execd.c'; then $(CYGPATH_W) 'execd.c'; else $(CYGPATH_W) '$(srcdir)/execd.c'; fi`
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(execd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o execd-execd.obj `if test -f 'execd.c'; then $(CYGPATH_W) 'execd.c'; else $(CYGPATH_W) '$(srcdir)/execd.c'; fi`
 | 
			
		||||
 | 
			
		||||
mio_t01-t01.o: t01.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mio_t01_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mio_t01-t01.o -MD -MP -MF $(DEPDIR)/mio_t01-t01.Tpo -c -o mio_t01-t01.o `test -f 't01.c' || echo '$(srcdir)/'`t01.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mio_t01-t01.Tpo $(DEPDIR)/mio_t01-t01.Po
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='t01.c' object='mio_t01-t01.o' libtool=no @AMDEPBACKSLASH@
 | 
			
		||||
t01-t01.o: t01.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t01_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t01-t01.o -MD -MP -MF $(DEPDIR)/t01-t01.Tpo -c -o t01-t01.o `test -f 't01.c' || echo '$(srcdir)/'`t01.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/t01-t01.Tpo $(DEPDIR)/t01-t01.Po
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='t01.c' object='t01-t01.o' libtool=no @AMDEPBACKSLASH@
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mio_t01_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mio_t01-t01.o `test -f 't01.c' || echo '$(srcdir)/'`t01.c
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t01_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t01-t01.o `test -f 't01.c' || echo '$(srcdir)/'`t01.c
 | 
			
		||||
 | 
			
		||||
mio_t01-t01.obj: t01.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mio_t01_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mio_t01-t01.obj -MD -MP -MF $(DEPDIR)/mio_t01-t01.Tpo -c -o mio_t01-t01.obj `if test -f 't01.c'; then $(CYGPATH_W) 't01.c'; else $(CYGPATH_W) '$(srcdir)/t01.c'; fi`
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mio_t01-t01.Tpo $(DEPDIR)/mio_t01-t01.Po
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='t01.c' object='mio_t01-t01.obj' libtool=no @AMDEPBACKSLASH@
 | 
			
		||||
t01-t01.obj: t01.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t01_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t01-t01.obj -MD -MP -MF $(DEPDIR)/t01-t01.Tpo -c -o t01-t01.obj `if test -f 't01.c'; then $(CYGPATH_W) 't01.c'; else $(CYGPATH_W) '$(srcdir)/t01.c'; fi`
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/t01-t01.Tpo $(DEPDIR)/t01-t01.Po
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='t01.c' object='t01-t01.obj' libtool=no @AMDEPBACKSLASH@
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mio_t01_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mio_t01-t01.obj `if test -f 't01.c'; then $(CYGPATH_W) 't01.c'; else $(CYGPATH_W) '$(srcdir)/t01.c'; fi`
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t01_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t01-t01.obj `if test -f 't01.c'; then $(CYGPATH_W) 't01.c'; else $(CYGPATH_W) '$(srcdir)/t01.c'; fi`
 | 
			
		||||
 | 
			
		||||
mostlyclean-libtool:
 | 
			
		||||
	-rm -f *.lo
 | 
			
		||||
 | 
			
		||||
@ -34,8 +34,7 @@ lib_LTLIBRARIES = libmio.la
 | 
			
		||||
libmio_la_SOURCES = \
 | 
			
		||||
	dns.c \
 | 
			
		||||
	err.c \
 | 
			
		||||
	fmtout.c \
 | 
			
		||||
	fmtoutv.h \
 | 
			
		||||
	fmt.c \
 | 
			
		||||
	mio-prv.h \
 | 
			
		||||
	mio-sys.h \
 | 
			
		||||
	mio.c \
 | 
			
		||||
 | 
			
		||||
@ -139,7 +139,7 @@ am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 | 
			
		||||
libmio_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
 | 
			
		||||
	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 | 
			
		||||
am_libmio_la_OBJECTS = libmio_la-dns.lo libmio_la-err.lo \
 | 
			
		||||
	libmio_la-fmtout.lo libmio_la-mio.lo libmio_la-pro.lo \
 | 
			
		||||
	libmio_la-fmt.lo libmio_la-mio.lo libmio_la-pro.lo \
 | 
			
		||||
	libmio_la-sck.lo libmio_la-sck-addr.lo libmio_la-sys.lo \
 | 
			
		||||
	libmio_la-sys-ass.lo libmio_la-sys-err.lo libmio_la-sys-log.lo \
 | 
			
		||||
	libmio_la-sys-mux.lo libmio_la-sys-tim.lo libmio_la-tmr.lo \
 | 
			
		||||
@ -356,6 +356,7 @@ pdfdir = @pdfdir@
 | 
			
		||||
prefix = @prefix@
 | 
			
		||||
program_transform_name = @program_transform_name@
 | 
			
		||||
psdir = @psdir@
 | 
			
		||||
runstatedir = @runstatedir@
 | 
			
		||||
sbindir = @sbindir@
 | 
			
		||||
sharedstatedir = @sharedstatedir@
 | 
			
		||||
srcdir = @srcdir@
 | 
			
		||||
@ -397,8 +398,7 @@ lib_LTLIBRARIES = libmio.la
 | 
			
		||||
libmio_la_SOURCES = \
 | 
			
		||||
	dns.c \
 | 
			
		||||
	err.c \
 | 
			
		||||
	fmtout.c \
 | 
			
		||||
	fmtoutv.h \
 | 
			
		||||
	fmt.c \
 | 
			
		||||
	mio-prv.h \
 | 
			
		||||
	mio-sys.h \
 | 
			
		||||
	mio.c \
 | 
			
		||||
@ -515,7 +515,7 @@ distclean-compile:
 | 
			
		||||
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmio_la-dns.Plo@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmio_la-err.Plo@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmio_la-fmtout.Plo@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmio_la-fmt.Plo@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmio_la-mio.Plo@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmio_la-pro.Plo@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmio_la-sck-addr.Plo@am__quote@
 | 
			
		||||
@ -568,12 +568,12 @@ libmio_la-err.lo: err.c
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmio_la-err.lo `test -f 'err.c' || echo '$(srcdir)/'`err.c
 | 
			
		||||
 | 
			
		||||
libmio_la-fmtout.lo: fmtout.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmio_la-fmtout.lo -MD -MP -MF $(DEPDIR)/libmio_la-fmtout.Tpo -c -o libmio_la-fmtout.lo `test -f 'fmtout.c' || echo '$(srcdir)/'`fmtout.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmio_la-fmtout.Tpo $(DEPDIR)/libmio_la-fmtout.Plo
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fmtout.c' object='libmio_la-fmtout.lo' libtool=yes @AMDEPBACKSLASH@
 | 
			
		||||
libmio_la-fmt.lo: fmt.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmio_la-fmt.lo -MD -MP -MF $(DEPDIR)/libmio_la-fmt.Tpo -c -o libmio_la-fmt.lo `test -f 'fmt.c' || echo '$(srcdir)/'`fmt.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmio_la-fmt.Tpo $(DEPDIR)/libmio_la-fmt.Plo
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='fmt.c' object='libmio_la-fmt.lo' libtool=yes @AMDEPBACKSLASH@
 | 
			
		||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmio_la-fmtout.lo `test -f 'fmtout.c' || echo '$(srcdir)/'`fmtout.c
 | 
			
		||||
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmio_la-fmt.lo `test -f 'fmt.c' || echo '$(srcdir)/'`fmt.c
 | 
			
		||||
 | 
			
		||||
libmio_la-mio.lo: mio.c
 | 
			
		||||
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmio_la-mio.lo -MD -MP -MF $(DEPDIR)/libmio_la-mio.Tpo -c -o libmio_la-mio.lo `test -f 'mio.c' || echo '$(srcdir)/'`mio.c
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										122
									
								
								mio/lib/err.c
									
									
									
									
									
								
							
							
						
						
									
										122
									
								
								mio/lib/err.c
									
									
									
									
									
								
							@ -108,6 +108,127 @@ void mio_seterrnum (mio_t* mio, mio_errnum_t errnum)
 | 
			
		||||
	mio->errmsg.len = 0; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int err_bcs (mio_fmtout_t* fmtout, const mio_bch_t* ptr, mio_oow_t len)
 | 
			
		||||
{
 | 
			
		||||
	mio_t* mio = (mio_t*)fmtout->ctx;
 | 
			
		||||
	mio_oow_t max;
 | 
			
		||||
 | 
			
		||||
	max = MIO_COUNTOF(mio->errmsg.buf) - mio->errmsg.len - 1;
 | 
			
		||||
 | 
			
		||||
#if defined(MIO_OOCH_IS_UCH)
 | 
			
		||||
	if (max <= 0) return 1;
 | 
			
		||||
	mio_conv_bchars_to_uchars_with_cmgr (ptr, &len, &mio->errmsg.buf[mio->errmsg.len], &max, mio->cmgr, 1);
 | 
			
		||||
	mio->errmsg.len += max;
 | 
			
		||||
#else
 | 
			
		||||
	if (len > max) len = max;
 | 
			
		||||
	if (len <= 0) return 1;
 | 
			
		||||
	MIO_MEMCPY (&mio->errmsg.buf[mio->errmsg.len], ptr, len * MIO_SIZEOF(*ptr));
 | 
			
		||||
	mio->errmsg.len += len;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	mio->errmsg.buf[mio->errmsg.len] = '\0';
 | 
			
		||||
 | 
			
		||||
	return 1; /* success */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int err_ucs (mio_fmtout_t* fmtout, const mio_uch_t* ptr, mio_oow_t len)
 | 
			
		||||
{
 | 
			
		||||
	mio_t* mio = (mio_t*)fmtout->ctx;
 | 
			
		||||
	mio_oow_t max;
 | 
			
		||||
 | 
			
		||||
	max = MIO_COUNTOF(mio->errmsg.buf) - mio->errmsg.len - 1;
 | 
			
		||||
 | 
			
		||||
#if defined(MIO_OOCH_IS_UCH)
 | 
			
		||||
	if (len > max) len = max;
 | 
			
		||||
	if (len <= 0) return 1;
 | 
			
		||||
	MIO_MEMCPY (&mio->errmsg.buf[mio->errmsg.len], ptr, len * MIO_SIZEOF(*ptr));
 | 
			
		||||
	mio->errmsg.len += len;
 | 
			
		||||
#else
 | 
			
		||||
	if (max <= 0) return 1;
 | 
			
		||||
	mio_conv_uchars_to_bchars_with_cmgr (ptr, &len, &mio->errmsg.buf[mio->errmsg.len], &max, mio->cmgr);
 | 
			
		||||
	mio->errmsg.len += max;
 | 
			
		||||
#endif
 | 
			
		||||
	mio->errmsg.buf[mio->errmsg.len] = '\0';
 | 
			
		||||
	return 1; /* success */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mio_seterrbfmt (mio_t* mio, mio_errnum_t errnum, const mio_bch_t* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	mio_fmtout_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->shuterr) return;
 | 
			
		||||
	mio->errmsg.len = 0;
 | 
			
		||||
 | 
			
		||||
	MIO_MEMSET (&fo, 0, MIO_SIZEOF(fo));
 | 
			
		||||
	fo.putbcs = err_bcs;
 | 
			
		||||
	fo.putucs = err_ucs;
 | 
			
		||||
	fo.ctx = mio;
 | 
			
		||||
 | 
			
		||||
	va_start (ap, fmt);
 | 
			
		||||
	mio_bfmt_outv (&fo, fmt, ap);
 | 
			
		||||
	va_end (ap);
 | 
			
		||||
 | 
			
		||||
	mio->errnum = errnum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mio_seterrufmt (mio_t* mio, mio_errnum_t errnum, const mio_uch_t* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	mio_fmtout_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->shuterr) return;
 | 
			
		||||
	mio->errmsg.len = 0;
 | 
			
		||||
 | 
			
		||||
	MIO_MEMSET (&fo, 0, MIO_SIZEOF(fo));
 | 
			
		||||
	fo.putbcs = err_bcs;
 | 
			
		||||
	fo.putucs = err_ucs;
 | 
			
		||||
	fo.ctx = mio;
 | 
			
		||||
 | 
			
		||||
	va_start (ap, fmt);
 | 
			
		||||
	mio_ufmt_outv (&fo, fmt, ap);
 | 
			
		||||
	va_end (ap);
 | 
			
		||||
 | 
			
		||||
	mio->errnum = errnum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void mio_seterrbfmtv (mio_t* mio, mio_errnum_t errnum, const mio_bch_t* fmt, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	mio_fmtout_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->shuterr) return;
 | 
			
		||||
 | 
			
		||||
	mio->errmsg.len = 0;
 | 
			
		||||
 | 
			
		||||
	MIO_MEMSET (&fo, 0, MIO_SIZEOF(fo));
 | 
			
		||||
	fo.putbcs = err_bcs;
 | 
			
		||||
	fo.putucs = err_ucs;
 | 
			
		||||
	fo.ctx = mio;
 | 
			
		||||
 | 
			
		||||
	mio_bfmt_outv (&fo, fmt, ap);
 | 
			
		||||
	mio->errnum = errnum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mio_seterrufmtv (mio_t* mio, mio_errnum_t errnum, const mio_uch_t* fmt, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	mio_fmtout_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->shuterr) return;
 | 
			
		||||
 | 
			
		||||
	mio->errmsg.len = 0;
 | 
			
		||||
 | 
			
		||||
	MIO_MEMSET (&fo, 0, MIO_SIZEOF(fo));
 | 
			
		||||
	fo.putbcs = err_bcs;
 | 
			
		||||
	fo.putucs = err_ucs;
 | 
			
		||||
	fo.ctx = mio;
 | 
			
		||||
 | 
			
		||||
	mio_ufmt_outv (&fo, fmt, ap);
 | 
			
		||||
	mio->errnum = errnum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void mio_seterrwithsyserr (mio_t* mio, int syserr_type, int syserr_code)
 | 
			
		||||
{
 | 
			
		||||
	mio_errnum_t errnum;
 | 
			
		||||
@ -242,3 +363,4 @@ void mio_seterrufmtwithsyserr (mio_t* mio, int syserr_type, int syserr_code, con
 | 
			
		||||
		}
 | 
			
		||||
	}*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										707
									
								
								mio/lib/fmtout.c
									
									
									
									
									
								
							
							
						
						
									
										707
									
								
								mio/lib/fmtout.c
									
									
									
									
									
								
							@ -1,707 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * $Id$
 | 
			
		||||
 *
 | 
			
		||||
    Copyright (c) 2015-2016 Chung, Hyung-Hwan. All rights reserved.
 | 
			
		||||
 | 
			
		||||
    Redistribution and use in source and binary forms, with or without
 | 
			
		||||
    modification, are permitted provided that the following conditions
 | 
			
		||||
    are met:
 | 
			
		||||
    1. Redistributions of source code must retain the above copyright
 | 
			
		||||
       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
    2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
    THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
 | 
			
		||||
    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
			
		||||
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | 
			
		||||
    IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
			
		||||
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | 
			
		||||
    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "mio-prv.h"
 | 
			
		||||
 | 
			
		||||
/*#include <stdio.h>*/ /* for snprintf(). used for floating-point number formatting */
 | 
			
		||||
 | 
			
		||||
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
 | 
			
		||||
#	define snprintf _snprintf 
 | 
			
		||||
#	if !defined(HAVE_SNPRINTF)
 | 
			
		||||
#		define HAVE_SNPRINTF
 | 
			
		||||
#	endif
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(HAVE_QUADMATH_H)
 | 
			
		||||
#	include <quadmath.h> /* for quadmath_snprintf() */
 | 
			
		||||
#endif
 | 
			
		||||
/* TODO: remove stdio.h and quadmath.h once snprintf gets replaced by own 
 | 
			
		||||
floting-point conversion implementation*/
 | 
			
		||||
 | 
			
		||||
/* Max number conversion buffer length: 
 | 
			
		||||
 * mio_intmax_t in base 2, plus NUL byte. */
 | 
			
		||||
#define MAXNBUF (MIO_SIZEOF(mio_intmax_t) * MIO_BITS_PER_BYTE + 1)
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	/* integer */
 | 
			
		||||
	LF_C = (1 << 0),
 | 
			
		||||
	LF_H = (1 << 1),
 | 
			
		||||
	LF_J = (1 << 2),
 | 
			
		||||
	LF_L = (1 << 3),
 | 
			
		||||
	LF_Q = (1 << 4),
 | 
			
		||||
	LF_T = (1 << 5),
 | 
			
		||||
	LF_Z = (1 << 6),
 | 
			
		||||
 | 
			
		||||
	/* long double */
 | 
			
		||||
	LF_LD = (1 << 7),
 | 
			
		||||
	/* __float128 */
 | 
			
		||||
	LF_QD = (1 << 8)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct
 | 
			
		||||
{
 | 
			
		||||
	mio_uint8_t flag; /* for single occurrence */
 | 
			
		||||
	mio_uint8_t dflag; /* for double occurrence */
 | 
			
		||||
} lm_tab[26] = 
 | 
			
		||||
{
 | 
			
		||||
	{ 0,    0 }, /* a */
 | 
			
		||||
	{ 0,    0 }, /* b */
 | 
			
		||||
	{ 0,    0 }, /* c */
 | 
			
		||||
	{ 0,    0 }, /* d */
 | 
			
		||||
	{ 0,    0 }, /* e */
 | 
			
		||||
	{ 0,    0 }, /* f */
 | 
			
		||||
	{ 0,    0 }, /* g */
 | 
			
		||||
	{ LF_H, LF_C }, /* h */
 | 
			
		||||
	{ 0,    0 }, /* i */
 | 
			
		||||
	{ LF_J, 0 }, /* j */
 | 
			
		||||
	{ 0,    0 }, /* k */
 | 
			
		||||
	{ LF_L, LF_Q }, /* l */
 | 
			
		||||
	{ 0,    0 }, /* m */
 | 
			
		||||
	{ 0,    0 }, /* n */
 | 
			
		||||
	{ 0,    0 }, /* o */
 | 
			
		||||
	{ 0,    0 }, /* p */
 | 
			
		||||
	{ LF_Q, 0 }, /* q */
 | 
			
		||||
	{ 0,    0 }, /* r */
 | 
			
		||||
	{ 0,    0 }, /* s */
 | 
			
		||||
	{ LF_T, 0 }, /* t */
 | 
			
		||||
	{ 0,    0 }, /* u */
 | 
			
		||||
	{ 0,    0 }, /* v */
 | 
			
		||||
	{ 0,    0 }, /* w */
 | 
			
		||||
	{ 0,    0 }, /* z */
 | 
			
		||||
	{ 0,    0 }, /* y */
 | 
			
		||||
	{ LF_Z, 0 }, /* z */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
enum 
 | 
			
		||||
{
 | 
			
		||||
	FLAGC_DOT       = (1 << 0),
 | 
			
		||||
	FLAGC_SPACE     = (1 << 1),
 | 
			
		||||
	FLAGC_SHARP     = (1 << 2),
 | 
			
		||||
	FLAGC_SIGN      = (1 << 3),
 | 
			
		||||
	FLAGC_LEFTADJ   = (1 << 4),
 | 
			
		||||
	FLAGC_ZEROPAD   = (1 << 5),
 | 
			
		||||
	FLAGC_WIDTH     = (1 << 6),
 | 
			
		||||
	FLAGC_PRECISION = (1 << 7),
 | 
			
		||||
	FLAGC_STAR1     = (1 << 8),
 | 
			
		||||
	FLAGC_STAR2     = (1 << 9),
 | 
			
		||||
	FLAGC_LENMOD    = (1 << 10) /* length modifier */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const mio_bch_t hex2ascii_lower[] = 
 | 
			
		||||
{
 | 
			
		||||
	'0','1','2','3','4','5','6','7','8','9',
 | 
			
		||||
	'a','b','c','d','e','f','g','h','i','j','k','l','m',
 | 
			
		||||
	'n','o','p','q','r','s','t','u','v','w','x','y','z'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const mio_bch_t hex2ascii_upper[] = 
 | 
			
		||||
{
 | 
			
		||||
	'0','1','2','3','4','5','6','7','8','9',
 | 
			
		||||
	'A','B','C','D','E','F','G','H','I','J','K','L','M',
 | 
			
		||||
	'N','O','P','Q','R','S','T','U','V','W','X','H','Z'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static mio_uch_t uch_nullstr[] = { '(','n','u','l','l', ')','\0' };
 | 
			
		||||
static mio_bch_t bch_nullstr[] = { '(','n','u','l','l', ')','\0' };
 | 
			
		||||
 | 
			
		||||
typedef int (*mio_fmtout_putch_t) (
 | 
			
		||||
	mio_t*          mio,
 | 
			
		||||
	mio_bitmask_t   mask,
 | 
			
		||||
	mio_ooch_t      c,
 | 
			
		||||
	mio_oow_t       len
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
typedef int (*mio_fmtout_putcs_t) (
 | 
			
		||||
	mio_t*            mio,
 | 
			
		||||
	mio_bitmask_t     mask,
 | 
			
		||||
	const mio_ooch_t* ptr,
 | 
			
		||||
	mio_oow_t         len
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
typedef struct mio_fmtout_data_t mio_fmtout_data_t;
 | 
			
		||||
struct mio_fmtout_data_t
 | 
			
		||||
{
 | 
			
		||||
	mio_oow_t            count; /* out */
 | 
			
		||||
	mio_bitmask_t        mask;  /* in */
 | 
			
		||||
	mio_fmtout_putch_t   putch; /* in */
 | 
			
		||||
	mio_fmtout_putcs_t   putcs; /* in */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* ------------------------------------------------------------------------- */
 | 
			
		||||
/*
 | 
			
		||||
 * Put a NUL-terminated ASCII number (base <= 36) in a buffer in reverse
 | 
			
		||||
 * order; return an optional length and a pointer to the last character
 | 
			
		||||
 * written in the buffer (i.e., the first character of the string).
 | 
			
		||||
 * The buffer pointed to by `nbuf' must have length >= MAXNBUF.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static mio_bch_t* sprintn_lower (mio_bch_t* nbuf, mio_uintmax_t num, int base, mio_ooi_t* lenp)
 | 
			
		||||
{
 | 
			
		||||
	mio_bch_t* p;
 | 
			
		||||
 | 
			
		||||
	p = nbuf;
 | 
			
		||||
	*p = '\0';
 | 
			
		||||
	do { *++p = hex2ascii_lower[num % base]; } while (num /= base);
 | 
			
		||||
 | 
			
		||||
	if (lenp) *lenp = p - nbuf;
 | 
			
		||||
	return p; /* returns the end */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static mio_bch_t* sprintn_upper (mio_bch_t* nbuf, mio_uintmax_t num, int base, mio_ooi_t* lenp)
 | 
			
		||||
{
 | 
			
		||||
	mio_bch_t* p;
 | 
			
		||||
 | 
			
		||||
	p = nbuf;
 | 
			
		||||
	*p = '\0';
 | 
			
		||||
	do { *++p = hex2ascii_upper[num % base]; } while (num /= base);
 | 
			
		||||
 | 
			
		||||
	if (lenp) *lenp = p - nbuf;
 | 
			
		||||
	return p; /* returns the end */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ------------------------------------------------------------------------- */
 | 
			
		||||
static int put_ooch (mio_t* mio, mio_bitmask_t mask, mio_ooch_t ch, mio_oow_t len)
 | 
			
		||||
{
 | 
			
		||||
	/* this is not equivalent to put_oocs(mio,mask,&ch, 1);
 | 
			
		||||
	 * this function is to emit a single character multiple times */
 | 
			
		||||
	mio_oow_t rem;
 | 
			
		||||
 | 
			
		||||
	if (len <= 0) return 1;
 | 
			
		||||
 | 
			
		||||
	if (mio->log.len > 0 && mio->log.last_mask != mask)
 | 
			
		||||
	{
 | 
			
		||||
		/* the mask has changed. commit the buffered text */
 | 
			
		||||
 | 
			
		||||
/* TODO: HANDLE LINE ENDING CONVENTION BETTER... */
 | 
			
		||||
		if (mio->log.ptr[mio->log.len - 1] != '\n')
 | 
			
		||||
		{
 | 
			
		||||
			/* no line ending - append a line terminator */
 | 
			
		||||
			mio->log.ptr[mio->log.len++] = '\n';
 | 
			
		||||
		}
 | 
			
		||||
		prim_write_log (mio, mio->log.last_mask, mio->log.ptr, mio->log.len);
 | 
			
		||||
		mio->log.len = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
redo:
 | 
			
		||||
	rem = 0;
 | 
			
		||||
	if (len > mio->log.capa - mio->log.len)
 | 
			
		||||
	{
 | 
			
		||||
		mio_oow_t newcapa, max;
 | 
			
		||||
		mio_ooch_t* tmp;
 | 
			
		||||
 | 
			
		||||
		max = MIO_TYPE_MAX(mio_oow_t) - mio->log.len;
 | 
			
		||||
		if (len > max)
 | 
			
		||||
		{
 | 
			
		||||
			/* data too big. */
 | 
			
		||||
			rem += len - max;
 | 
			
		||||
			len = max;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		newcapa = MIO_ALIGN_POW2(mio->log.len + len, MIO_LOG_CAPA_ALIGN); /* TODO: adjust this capacity */
 | 
			
		||||
		if (newcapa > mio->option.log_maxcapa) 
 | 
			
		||||
		{
 | 
			
		||||
			/* [NOTE]
 | 
			
		||||
			 * it doesn't adjust newcapa to mio->option.log_maxcapa.
 | 
			
		||||
			 * nor does it cut the input to fit it into the adjusted capacity.
 | 
			
		||||
			 * if maxcapa set is not aligned to MIO_LOG_CAPA_ALIGN,
 | 
			
		||||
			 * the largest buffer capacity may be suboptimal */
 | 
			
		||||
			goto make_do;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* +1 to handle line ending injection more easily */
 | 
			
		||||
		tmp = mio_reallocmem(mio, mio->log.ptr, (newcapa + 1) * MIO_SIZEOF(*tmp)); 
 | 
			
		||||
		if (!tmp) 
 | 
			
		||||
		{
 | 
			
		||||
		make_do:
 | 
			
		||||
			if (mio->log.len > 0)
 | 
			
		||||
			{
 | 
			
		||||
				/* can't expand the buffer. just flush the existing contents */
 | 
			
		||||
				/* TODO: HANDLE LINE ENDING CONVENTION BETTER... */
 | 
			
		||||
				if (mio->log.ptr[mio->log.len - 1] != '\n')
 | 
			
		||||
				{
 | 
			
		||||
					/* no line ending - append a line terminator */
 | 
			
		||||
					mio->log.ptr[mio->log.len++] = '\n';
 | 
			
		||||
				}
 | 
			
		||||
				prim_write_log (mio, mio->log.last_mask, mio->log.ptr, mio->log.len);
 | 
			
		||||
				mio->log.len = 0;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (len > mio->log.capa)
 | 
			
		||||
			{
 | 
			
		||||
				rem += len - mio->log.capa;
 | 
			
		||||
				len = mio->log.capa;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			mio->log.ptr = tmp;
 | 
			
		||||
			mio->log.capa = newcapa; 
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while (len > 0)
 | 
			
		||||
	{
 | 
			
		||||
		mio->log.ptr[mio->log.len++] = ch;
 | 
			
		||||
		len--;
 | 
			
		||||
	}
 | 
			
		||||
	mio->log.last_mask = mask;
 | 
			
		||||
 | 
			
		||||
	if (rem > 0)
 | 
			
		||||
	{
 | 
			
		||||
		len = rem;
 | 
			
		||||
		goto redo;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	return 1; /* success */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int put_oocs (mio_t* mio, mio_bitmask_t mask, const mio_ooch_t* ptr, mio_oow_t len)
 | 
			
		||||
{
 | 
			
		||||
	mio_oow_t rem;
 | 
			
		||||
 | 
			
		||||
	if (len <= 0) return 1;
 | 
			
		||||
 | 
			
		||||
	if (mio->log.len > 0 && mio->log.last_mask != mask)
 | 
			
		||||
	{
 | 
			
		||||
		/* the mask has changed. commit the buffered text */
 | 
			
		||||
/* TODO: HANDLE LINE ENDING CONVENTION BETTER... */
 | 
			
		||||
		if (mio->log.ptr[mio->log.len - 1] != '\n')
 | 
			
		||||
		{
 | 
			
		||||
			/* no line ending - append a line terminator */
 | 
			
		||||
			mio->log.ptr[mio->log.len++] = '\n';
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		prim_write_log (mio, mio->log.last_mask, mio->log.ptr, mio->log.len);
 | 
			
		||||
		mio->log.len = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
redo:
 | 
			
		||||
	rem = 0;
 | 
			
		||||
	if (len > mio->log.capa - mio->log.len)
 | 
			
		||||
	{
 | 
			
		||||
		mio_oow_t newcapa, max;
 | 
			
		||||
		mio_ooch_t* tmp;
 | 
			
		||||
 | 
			
		||||
		max = MIO_TYPE_MAX(mio_oow_t) - mio->log.len;
 | 
			
		||||
		if (len > max) 
 | 
			
		||||
		{
 | 
			
		||||
			/* data too big. */
 | 
			
		||||
			rem += len - max;
 | 
			
		||||
			len = max;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		newcapa = MIO_ALIGN_POW2(mio->log.len + len, 512); /* TODO: adjust this capacity */
 | 
			
		||||
		if (newcapa > mio->option.log_maxcapa)
 | 
			
		||||
		{
 | 
			
		||||
			/* [NOTE]
 | 
			
		||||
			 * it doesn't adjust newcapa to mio->option.log_maxcapa.
 | 
			
		||||
			 * nor does it cut the input to fit it into the adjusted capacity.
 | 
			
		||||
			 * if maxcapa set is not aligned to MIO_LOG_CAPA_ALIGN,
 | 
			
		||||
			 * the largest buffer capacity may be suboptimal */
 | 
			
		||||
			goto make_do;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* +1 to handle line ending injection more easily */
 | 
			
		||||
		tmp = mio_reallocmem(mio, mio->log.ptr, (newcapa + 1) * MIO_SIZEOF(*tmp));
 | 
			
		||||
		if (!tmp) 
 | 
			
		||||
		{
 | 
			
		||||
		make_do:
 | 
			
		||||
			if (mio->log.len > 0)
 | 
			
		||||
			{
 | 
			
		||||
				/* can't expand the buffer. just flush the existing contents */
 | 
			
		||||
				/* TODO: HANDLE LINE ENDING CONVENTION BETTER... */
 | 
			
		||||
				if (mio->log.ptr[mio->log.len - 1] != '\n')
 | 
			
		||||
				{
 | 
			
		||||
					/* no line ending - append a line terminator */
 | 
			
		||||
					mio->log.ptr[mio->log.len++] = '\n';
 | 
			
		||||
				}
 | 
			
		||||
				prim_write_log (mio, mio->log.last_mask, mio->log.ptr, mio->log.len);
 | 
			
		||||
				mio->log.len = 0;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (len > mio->log.capa)
 | 
			
		||||
			{
 | 
			
		||||
				rem += len - mio->log.capa;
 | 
			
		||||
				len = mio->log.capa;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			mio->log.ptr = tmp;
 | 
			
		||||
			mio->log.capa = newcapa;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	MIO_MEMCPY (&mio->log.ptr[mio->log.len], ptr, len * MIO_SIZEOF(*ptr));
 | 
			
		||||
	mio->log.len += len;
 | 
			
		||||
	mio->log.last_mask = mask;
 | 
			
		||||
 | 
			
		||||
	if (rem > 0)
 | 
			
		||||
	{
 | 
			
		||||
		ptr += len;
 | 
			
		||||
		len = rem;
 | 
			
		||||
		goto redo;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1; /* success */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ------------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ------------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
#undef FMTCHAR_IS_BCH
 | 
			
		||||
#undef FMTCHAR_IS_UCH
 | 
			
		||||
#undef FMTCHAR_IS_OOCH
 | 
			
		||||
#undef fmtchar_t
 | 
			
		||||
#undef fmtoutv
 | 
			
		||||
#define fmtchar_t mio_bch_t
 | 
			
		||||
#define fmtoutv __logbfmtv
 | 
			
		||||
#define FMTCHAR_IS_BCH
 | 
			
		||||
#if defined(MIO_OOCH_IS_BCH)
 | 
			
		||||
#	define FMTCHAR_IS_OOCH
 | 
			
		||||
#endif
 | 
			
		||||
#include "fmtoutv.h"
 | 
			
		||||
 | 
			
		||||
#undef FMTCHAR_IS_BCH
 | 
			
		||||
#undef FMTCHAR_IS_UCH
 | 
			
		||||
#undef FMTCHAR_IS_OOCH
 | 
			
		||||
#undef fmtchar_t
 | 
			
		||||
#undef fmtoutv
 | 
			
		||||
#define fmtchar_t mio_uch_t
 | 
			
		||||
#define fmtoutv __logufmtv
 | 
			
		||||
#define FMTCHAR_IS_UCH
 | 
			
		||||
#if defined(MIO_OOCH_IS_UCH)
 | 
			
		||||
#	define FMTCHAR_IS_OOCH
 | 
			
		||||
#endif
 | 
			
		||||
#include "fmtoutv.h" 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int _logbfmtv (mio_t* mio, const mio_bch_t* fmt, mio_fmtout_data_t* data, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	return __logbfmtv(mio, fmt, data, ap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _logufmtv (mio_t* mio, const mio_uch_t* fmt, mio_fmtout_data_t* data, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	return __logufmtv(mio, fmt, data, ap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mio_ooi_t mio_logbfmt (mio_t* mio, mio_bitmask_t mask, const mio_bch_t* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	int x;
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	mio_fmtout_data_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->log.default_type_mask & MIO_LOG_ALL_TYPES) 
 | 
			
		||||
	{
 | 
			
		||||
		/* if a type is given, it's not untyped any more.
 | 
			
		||||
		 * mask off the UNTYPED bit */
 | 
			
		||||
		mask &= ~MIO_LOG_UNTYPED; 
 | 
			
		||||
 | 
			
		||||
		/* if the default_type_mask has the UNTYPED bit on,
 | 
			
		||||
		 * it'll get turned back on */
 | 
			
		||||
		mask |= (mio->log.default_type_mask & MIO_LOG_ALL_TYPES);
 | 
			
		||||
	}
 | 
			
		||||
	else if (!(mask & MIO_LOG_ALL_TYPES)) 
 | 
			
		||||
	{
 | 
			
		||||
		/* no type is set in the given mask and no default type is set.
 | 
			
		||||
		 * make it UNTYPED. */
 | 
			
		||||
		mask |= MIO_LOG_UNTYPED;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fo.mask = mask;
 | 
			
		||||
	fo.putch = put_ooch;
 | 
			
		||||
	fo.putcs = put_oocs;
 | 
			
		||||
 | 
			
		||||
	va_start (ap, fmt);
 | 
			
		||||
	x = _logbfmtv(mio, fmt, &fo, ap);
 | 
			
		||||
	va_end (ap);
 | 
			
		||||
 | 
			
		||||
	if (mio->log.len > 0 && mio->log.ptr[mio->log.len - 1] == '\n')
 | 
			
		||||
	{
 | 
			
		||||
		prim_write_log (mio, mio->log.last_mask, mio->log.ptr, mio->log.len);
 | 
			
		||||
		mio->log.len = 0;
 | 
			
		||||
	}
 | 
			
		||||
	return (x <= -1)? -1: fo.count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mio_ooi_t mio_logufmt (mio_t* mio, mio_bitmask_t mask, const mio_uch_t* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	int x;
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	mio_fmtout_data_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->log.default_type_mask & MIO_LOG_ALL_TYPES) 
 | 
			
		||||
	{
 | 
			
		||||
		mask &= ~MIO_LOG_UNTYPED;
 | 
			
		||||
		mask |= (mio->log.default_type_mask & MIO_LOG_ALL_TYPES);
 | 
			
		||||
	}
 | 
			
		||||
	else if (!(mask & MIO_LOG_ALL_TYPES)) 
 | 
			
		||||
	{
 | 
			
		||||
		mask |= MIO_LOG_UNTYPED;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fo.mask = mask;
 | 
			
		||||
	fo.putch = put_ooch;
 | 
			
		||||
	fo.putcs = put_oocs;
 | 
			
		||||
 | 
			
		||||
	va_start (ap, fmt);
 | 
			
		||||
	x = _logufmtv(mio, fmt, &fo, ap);
 | 
			
		||||
	va_end (ap);
 | 
			
		||||
 | 
			
		||||
	if (mio->log.len > 0 && mio->log.ptr[mio->log.len - 1] == '\n')
 | 
			
		||||
	{
 | 
			
		||||
		prim_write_log (mio, mio->log.last_mask, mio->log.ptr, mio->log.len);
 | 
			
		||||
		mio->log.len = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (x <= -1)? -1: fo.count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* -------------------------------------------------------------------------- 
 | 
			
		||||
 * ERROR MESSAGE FORMATTING
 | 
			
		||||
 * -------------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
static int put_errch (mio_t* mio, mio_bitmask_t mask, mio_ooch_t ch, mio_oow_t len)
 | 
			
		||||
{
 | 
			
		||||
	mio_oow_t max;
 | 
			
		||||
 | 
			
		||||
	max = MIO_COUNTOF(mio->errmsg.buf) - mio->errmsg.len - 1;
 | 
			
		||||
	if (len > max) len = max;
 | 
			
		||||
 | 
			
		||||
	if (len <= 0) return 1;
 | 
			
		||||
 | 
			
		||||
	while (len > 0)
 | 
			
		||||
	{
 | 
			
		||||
		mio->errmsg.buf[mio->errmsg.len++] = ch;
 | 
			
		||||
		len--;
 | 
			
		||||
	}
 | 
			
		||||
	mio->errmsg.buf[mio->errmsg.len] = '\0';
 | 
			
		||||
 | 
			
		||||
	return 1; /* success */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int put_errcs (mio_t* mio, mio_bitmask_t mask, const mio_ooch_t* ptr, mio_oow_t len)
 | 
			
		||||
{
 | 
			
		||||
	mio_oow_t max;
 | 
			
		||||
 | 
			
		||||
	max = MIO_COUNTOF(mio->errmsg.buf) - mio->errmsg.len - 1;
 | 
			
		||||
	if (len > max) len = max;
 | 
			
		||||
 | 
			
		||||
	if (len <= 0) return 1;
 | 
			
		||||
 | 
			
		||||
	MIO_MEMCPY (&mio->errmsg.buf[mio->errmsg.len], ptr, len * MIO_SIZEOF(*ptr));
 | 
			
		||||
	mio->errmsg.len += len;
 | 
			
		||||
	mio->errmsg.buf[mio->errmsg.len] = '\0';
 | 
			
		||||
 | 
			
		||||
	return 1; /* success */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int _errbfmtv (mio_t* mio, const mio_bch_t* fmt, mio_fmtout_data_t* data, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	return __logbfmtv(mio, fmt, data, ap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _errufmtv (mio_t* mio, const mio_uch_t* fmt, mio_fmtout_data_t* data, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	return __logufmtv(mio, fmt, data, ap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mio_seterrbfmt (mio_t* mio, mio_errnum_t errnum, const mio_bch_t* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	mio_fmtout_data_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->shuterr) return;
 | 
			
		||||
	mio->errmsg.len = 0;
 | 
			
		||||
 | 
			
		||||
	fo.mask = 0; /* not used */
 | 
			
		||||
	fo.putch = put_errch;
 | 
			
		||||
	fo.putcs = put_errcs;
 | 
			
		||||
 | 
			
		||||
	va_start (ap, fmt);
 | 
			
		||||
	_errbfmtv (mio, fmt, &fo, ap);
 | 
			
		||||
	va_end (ap);
 | 
			
		||||
 | 
			
		||||
	mio->errnum = errnum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mio_seterrufmt (mio_t* mio, mio_errnum_t errnum, const mio_uch_t* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	mio_fmtout_data_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->shuterr) return;
 | 
			
		||||
	mio->errmsg.len = 0;
 | 
			
		||||
 | 
			
		||||
	fo.mask = 0; /* not used */
 | 
			
		||||
	fo.putch = put_errch;
 | 
			
		||||
	fo.putcs = put_errcs;
 | 
			
		||||
 | 
			
		||||
	va_start (ap, fmt);
 | 
			
		||||
	_errufmtv (mio, fmt, &fo, ap);
 | 
			
		||||
	va_end (ap);
 | 
			
		||||
 | 
			
		||||
	mio->errnum = errnum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void mio_seterrbfmtv (mio_t* mio, mio_errnum_t errnum, const mio_bch_t* fmt, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	mio_fmtout_data_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->shuterr) return;
 | 
			
		||||
 | 
			
		||||
	mio->errmsg.len = 0;
 | 
			
		||||
 | 
			
		||||
	fo.mask = 0; /* not used */
 | 
			
		||||
	fo.putch = put_errch;
 | 
			
		||||
	fo.putcs = put_errcs;
 | 
			
		||||
 | 
			
		||||
	_errbfmtv (mio, fmt, &fo, ap);
 | 
			
		||||
	mio->errnum = errnum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mio_seterrufmtv (mio_t* mio, mio_errnum_t errnum, const mio_uch_t* fmt, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	mio_fmtout_data_t fo;
 | 
			
		||||
 | 
			
		||||
	if (mio->shuterr) return;
 | 
			
		||||
 | 
			
		||||
	mio->errmsg.len = 0;
 | 
			
		||||
 | 
			
		||||
	fo.mask = 0; /* not used */
 | 
			
		||||
	fo.putch = put_errch;
 | 
			
		||||
	fo.putcs = put_errcs;
 | 
			
		||||
 | 
			
		||||
	_errufmtv (mio, fmt, &fo, ap);
 | 
			
		||||
	mio->errnum = errnum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* -------------------------------------------------------------------------- 
 | 
			
		||||
 * SUPPORT FOR THE BUILTIN SPRINTF PRIMITIVE FUNCTION
 | 
			
		||||
 * -------------------------------------------------------------------------- */
 | 
			
		||||
static int put_sprcs (mio_t* mio, mio_bitmask_t mask, const mio_ooch_t* ptr, mio_oow_t len)
 | 
			
		||||
{
 | 
			
		||||
	if (len > mio->sprintf.xbuf.capa - mio->sprintf.xbuf.len)
 | 
			
		||||
	{
 | 
			
		||||
		mio_ooch_t* tmp;
 | 
			
		||||
		mio_oow_t newcapa;
 | 
			
		||||
 | 
			
		||||
		newcapa = mio->sprintf.xbuf.len + len + 1;
 | 
			
		||||
		newcapa = MIO_ALIGN_POW2(newcapa, 256);
 | 
			
		||||
 | 
			
		||||
		tmp = (mio_ooch_t*)mio_reallocmem(mio, mio->sprintf.xbuf.ptr, newcapa * MIO_SIZEOF(*tmp));
 | 
			
		||||
		if (!tmp) return -1;
 | 
			
		||||
 | 
			
		||||
		mio->sprintf.xbuf.ptr = tmp;
 | 
			
		||||
		mio->sprintf.xbuf.capa = newcapa;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	MIO_MEMCPY (&mio->sprintf.xbuf.ptr[mio->sprintf.xbuf.len], ptr, len * MIO_SIZEOF(*ptr));
 | 
			
		||||
	mio->sprintf.xbuf.len += len;
 | 
			
		||||
	return 1; /* success */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int put_sprch (mio_t* mio, mio_bitmask_t mask, mio_ooch_t ch, mio_oow_t len)
 | 
			
		||||
{
 | 
			
		||||
	if (len > mio->sprintf.xbuf.capa - mio->sprintf.xbuf.len)
 | 
			
		||||
	{
 | 
			
		||||
		mio_ooch_t* tmp;
 | 
			
		||||
		mio_oow_t newcapa;
 | 
			
		||||
 | 
			
		||||
		newcapa = mio->sprintf.xbuf.len + len + 1;
 | 
			
		||||
		newcapa = MIO_ALIGN_POW2(newcapa, 256);
 | 
			
		||||
 | 
			
		||||
		tmp = (mio_ooch_t*)mio_reallocmem(mio, mio->sprintf.xbuf.ptr, newcapa * MIO_SIZEOF(*tmp));
 | 
			
		||||
		if (!tmp) return -1;
 | 
			
		||||
 | 
			
		||||
		mio->sprintf.xbuf.ptr = tmp;
 | 
			
		||||
		mio->sprintf.xbuf.capa = newcapa;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while (len > 0)
 | 
			
		||||
	{
 | 
			
		||||
		--len;
 | 
			
		||||
		mio->sprintf.xbuf.ptr[mio->sprintf.xbuf.len++] = ch;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1; /* success */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int _sprbfmtv (mio_t* mio, const mio_bch_t* fmt, mio_fmtout_data_t* data, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	return __logbfmtv (mio, fmt, data, ap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
static int _sprufmtv (mio_t* mio, const mio_uch_t* fmt, mio_fmtout_data_t* data, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	return __logufmtv (mio, fmt, data, ap, __sprbfmtv);
 | 
			
		||||
}*/
 | 
			
		||||
 | 
			
		||||
mio_ooi_t mio_sproutbfmt (mio_t* mio, mio_bitmask_t mask, const mio_bch_t* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	int x;
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	mio_fmtout_data_t fo;
 | 
			
		||||
 | 
			
		||||
	fo.mask = mask;
 | 
			
		||||
	fo.putch = put_sprch;
 | 
			
		||||
	fo.putcs = put_sprcs;
 | 
			
		||||
 | 
			
		||||
	va_start (ap, fmt);
 | 
			
		||||
	x = _sprbfmtv(mio, fmt, &fo, ap);
 | 
			
		||||
	va_end (ap);
 | 
			
		||||
 | 
			
		||||
	return (x <= -1)? -1: fo.count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
mio_ooi_t mio_sproutufmt (mio_t* mio, mio_bitmask_t mask, const mio_uch_t* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	int x;
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	mio_fmtout_data_t fo;
 | 
			
		||||
 | 
			
		||||
	fo.mask = mask;
 | 
			
		||||
	fo.putch = put_sprch;
 | 
			
		||||
	fo.putcs = put_sprcs;
 | 
			
		||||
 | 
			
		||||
	va_start (ap, fmt);
 | 
			
		||||
	x = _sprufmtv (mio, fmt, &fo, ap);
 | 
			
		||||
	va_end (ap);
 | 
			
		||||
 | 
			
		||||
	return (x <= -1)? -1: fo.count;
 | 
			
		||||
}*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1172
									
								
								mio/lib/fmtoutv.h
									
									
									
									
									
								
							
							
						
						
									
										1172
									
								
								mio/lib/fmtoutv.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -29,7 +29,6 @@
 | 
			
		||||
 | 
			
		||||
#include "mio.h"
 | 
			
		||||
#include "mio-utl.h"
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
 | 
			
		||||
#if defined(__has_builtin)
 | 
			
		||||
 | 
			
		||||
@ -160,24 +159,6 @@ int mio_gettmrtmout (
 | 
			
		||||
	mio_ntime_t*       tmout
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
/* err.c                                                                     */
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
 | 
			
		||||
void mio_seterrbfmtv (
 | 
			
		||||
	mio_t*           mio,
 | 
			
		||||
	mio_errnum_t     errnum,
 | 
			
		||||
	const mio_bch_t* fmt,
 | 
			
		||||
	va_list          ap
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
void mio_seterrufmtv (
 | 
			
		||||
	mio_t*           mio,
 | 
			
		||||
	mio_errnum_t     errnum,
 | 
			
		||||
	const mio_uch_t* fmt,
 | 
			
		||||
	va_list          ap
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
/* ========================================================================== */
 | 
			
		||||
/* system intefaces                                                           */
 | 
			
		||||
/* ========================================================================== */
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@
 | 
			
		||||
#define _MIO_UTL_H_
 | 
			
		||||
 | 
			
		||||
#include "mio-cmn.h"
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
 | 
			
		||||
/* =========================================================================
 | 
			
		||||
 * ENDIAN CHANGE OF A CONSTANT
 | 
			
		||||
@ -154,6 +155,44 @@
 | 
			
		||||
#	error UNKNOWN ENDIAN
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* =========================================================================
 | 
			
		||||
 * FORMATTED OUTPUT
 | 
			
		||||
 * ========================================================================= */
 | 
			
		||||
typedef struct mio_fmtout_t mio_fmtout_t;
 | 
			
		||||
 | 
			
		||||
typedef int (*mio_fmtout_putbcs_t) (
 | 
			
		||||
	mio_fmtout_t*     fmtout,
 | 
			
		||||
	const mio_bch_t*  ptr,
 | 
			
		||||
	mio_oow_t         len
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
typedef int (*mio_fmtout_putucs_t) (
 | 
			
		||||
	mio_fmtout_t*     fmtout,
 | 
			
		||||
	const mio_uch_t*  ptr,
 | 
			
		||||
	mio_oow_t         len
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
enum mio_fmtout_fmt_type_t 
 | 
			
		||||
{
 | 
			
		||||
	MIO_FMTOUT_FMT_TYPE_BCH = 0,
 | 
			
		||||
	MIO_FMTOUT_FMT_TYPE_UCH
 | 
			
		||||
};
 | 
			
		||||
typedef enum mio_fmtout_fmt_type_t mio_fmtout_fmt_type_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct mio_fmtout_t
 | 
			
		||||
{
 | 
			
		||||
	mio_oow_t             count; /* out */
 | 
			
		||||
 | 
			
		||||
	mio_fmtout_putbcs_t   putbcs; /* in */
 | 
			
		||||
	mio_fmtout_putucs_t   putucs; /* in */
 | 
			
		||||
	mio_bitmask_t         mask;   /* in */
 | 
			
		||||
	void*                 ctx;    /* in */
 | 
			
		||||
 | 
			
		||||
	mio_fmtout_fmt_type_t fmt_type;
 | 
			
		||||
	const void*           fmt_str;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
@ -510,8 +549,38 @@ MIO_EXPORT mio_oow_t mio_utf8_to_uc (
 | 
			
		||||
	mio_uch_t*       uc
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
/* ------------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/* =========================================================================
 | 
			
		||||
 * FORMATTED OUTPUT
 | 
			
		||||
 * ========================================================================= */
 | 
			
		||||
MIO_EXPORT int mio_bfmt_outv (
 | 
			
		||||
	mio_fmtout_t*    fmtout,
 | 
			
		||||
	const mio_bch_t* fmt,
 | 
			
		||||
	va_list          ap
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
MIO_EXPORT int mio_ufmt_outv (
 | 
			
		||||
	mio_fmtout_t*    fmtout,
 | 
			
		||||
	const mio_uch_t* fmt,
 | 
			
		||||
	va_list          ap
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MIO_EXPORT int mio_bfmt_out (
 | 
			
		||||
	mio_fmtout_t*    fmtout,
 | 
			
		||||
	const mio_bch_t* fmt,
 | 
			
		||||
	...
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
MIO_EXPORT int mio_ufmt_out (
 | 
			
		||||
	mio_fmtout_t*    fmtout,
 | 
			
		||||
	const mio_uch_t* fmt,
 | 
			
		||||
	...
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
/* =========================================================================
 | 
			
		||||
 * BIT SWAP
 | 
			
		||||
 * ========================================================================= */
 | 
			
		||||
#if defined(MIO_HAVE_INLINE)
 | 
			
		||||
 | 
			
		||||
#if defined(MIO_HAVE_UINT16_T)
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,8 @@
 | 
			
		||||
#ifndef _MIO_H_
 | 
			
		||||
#define _MIO_H_
 | 
			
		||||
 | 
			
		||||
#include <mio-cmn.h>
 | 
			
		||||
#include "mio-cmn.h"
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
	typedef mio_uintptr_t qse_syshnd_t;
 | 
			
		||||
@ -679,6 +680,20 @@ MIO_EXPORT void mio_seterrufmt (
 | 
			
		||||
	...
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
MIO_EXPORT void mio_seterrbfmtv (
 | 
			
		||||
	mio_t*           mio,
 | 
			
		||||
	mio_errnum_t     errnum,
 | 
			
		||||
	const mio_bch_t* fmt,
 | 
			
		||||
	va_list          ap
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
MIO_EXPORT void mio_seterrufmtv (
 | 
			
		||||
	mio_t*           mio,
 | 
			
		||||
	mio_errnum_t     errnum,
 | 
			
		||||
	const mio_uch_t* fmt,
 | 
			
		||||
	va_list          ap
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
MIO_EXPORT void mio_seterrbfmtwithsyserr (
 | 
			
		||||
	mio_t*           mio,
 | 
			
		||||
	int              syserr_type,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user