enhanced the build files with X11 check
This commit is contained in:
parent
10123109b0
commit
e6116fde2b
@ -17,6 +17,15 @@ hio_execd_CFLAGS = $(CFLAGS_COMMON)
|
|||||||
hio_execd_LDFLAGS = $(LDFLAGS_COMMON)
|
hio_execd_LDFLAGS = $(LDFLAGS_COMMON)
|
||||||
hio_execd_LDADD = $(LIBADD_COMMON)
|
hio_execd_LDADD = $(LIBADD_COMMON)
|
||||||
|
|
||||||
|
if HAVE_X11_LIB
|
||||||
|
bin_PROGRAMS += hio-te
|
||||||
|
hio_te_SOURCES = te.c
|
||||||
|
hio_te_CPPFLAGS = $(CPPFLAGS_COMMON)
|
||||||
|
hio_te_CFLAGS = $(CFLAGS_COMMON)
|
||||||
|
hio_te_LDFLAGS = $(LDFLAGS_COMMON)
|
||||||
|
hio_te_LDADD = $(LIBADD_COMMON) -lX11
|
||||||
|
endif
|
||||||
|
|
||||||
bin_PROGRAMS += hio-t01
|
bin_PROGRAMS += hio-t01
|
||||||
hio_t01_SOURCES = t01.c
|
hio_t01_SOURCES = t01.c
|
||||||
hio_t01_CPPFLAGS = $(CPPFLAGS_COMMON)
|
hio_t01_CPPFLAGS = $(CPPFLAGS_COMMON)
|
||||||
|
@ -88,12 +88,13 @@ PRE_UNINSTALL = :
|
|||||||
POST_UNINSTALL = :
|
POST_UNINSTALL = :
|
||||||
build_triplet = @build@
|
build_triplet = @build@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
bin_PROGRAMS = hio-execd$(EXEEXT) hio-t01$(EXEEXT) hio-t02$(EXEEXT) \
|
bin_PROGRAMS = hio-execd$(EXEEXT) $(am__EXEEXT_1) hio-t01$(EXEEXT) \
|
||||||
hio-t03$(EXEEXT) hio-t04$(EXEEXT) hio-t05$(EXEEXT) \
|
hio-t02$(EXEEXT) hio-t03$(EXEEXT) hio-t04$(EXEEXT) \
|
||||||
hio-t06$(EXEEXT)
|
hio-t05$(EXEEXT) hio-t06$(EXEEXT)
|
||||||
@ENABLE_MARIADB_TRUE@am__append_1 = $(MARIADB_CFLAGS)
|
@HAVE_X11_LIB_TRUE@am__append_1 = hio-te
|
||||||
@ENABLE_MARIADB_TRUE@am__append_2 = $(MARIADB_LDFLAGS)
|
@ENABLE_MARIADB_TRUE@am__append_2 = $(MARIADB_CFLAGS)
|
||||||
@ENABLE_MARIADB_TRUE@am__append_3 = $(MARIADB_LIBS)
|
@ENABLE_MARIADB_TRUE@am__append_3 = $(MARIADB_LDFLAGS)
|
||||||
|
@ENABLE_MARIADB_TRUE@am__append_4 = $(MARIADB_LIBS)
|
||||||
subdir = bin
|
subdir = bin
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \
|
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \
|
||||||
@ -109,6 +110,7 @@ mkinstalldirs = $(install_sh) -d
|
|||||||
CONFIG_HEADER = $(top_builddir)/lib/hio-cfg.h
|
CONFIG_HEADER = $(top_builddir)/lib/hio-cfg.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
CONFIG_CLEAN_VPATH_FILES =
|
CONFIG_CLEAN_VPATH_FILES =
|
||||||
|
@HAVE_X11_LIB_TRUE@am__EXEEXT_1 = hio-te$(EXEEXT)
|
||||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||||
PROGRAMS = $(bin_PROGRAMS)
|
PROGRAMS = $(bin_PROGRAMS)
|
||||||
am_hio_execd_OBJECTS = hio_execd-execd.$(OBJEXT)
|
am_hio_execd_OBJECTS = hio_execd-execd.$(OBJEXT)
|
||||||
@ -159,6 +161,13 @@ hio_t06_DEPENDENCIES = $(LIBADD_COMMON)
|
|||||||
hio_t06_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
hio_t06_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(hio_t06_CFLAGS) \
|
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(hio_t06_CFLAGS) \
|
||||||
$(CFLAGS) $(hio_t06_LDFLAGS) $(LDFLAGS) -o $@
|
$(CFLAGS) $(hio_t06_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
|
am__hio_te_SOURCES_DIST = te.c
|
||||||
|
@HAVE_X11_LIB_TRUE@am_hio_te_OBJECTS = hio_te-te.$(OBJEXT)
|
||||||
|
hio_te_OBJECTS = $(am_hio_te_OBJECTS)
|
||||||
|
@HAVE_X11_LIB_TRUE@hio_te_DEPENDENCIES = $(LIBADD_COMMON)
|
||||||
|
hio_te_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||||
|
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(hio_te_CFLAGS) $(CFLAGS) \
|
||||||
|
$(hio_te_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
AM_V_P = $(am__v_P_@AM_V@)
|
AM_V_P = $(am__v_P_@AM_V@)
|
||||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||||
am__v_P_0 = false
|
am__v_P_0 = false
|
||||||
@ -177,7 +186,8 @@ am__maybe_remake_depfiles = depfiles
|
|||||||
am__depfiles_remade = ./$(DEPDIR)/hio_execd-execd.Po \
|
am__depfiles_remade = ./$(DEPDIR)/hio_execd-execd.Po \
|
||||||
./$(DEPDIR)/hio_t01-t01.Po ./$(DEPDIR)/hio_t02-t02.Po \
|
./$(DEPDIR)/hio_t01-t01.Po ./$(DEPDIR)/hio_t02-t02.Po \
|
||||||
./$(DEPDIR)/hio_t03-t03.Po ./$(DEPDIR)/hio_t04-t04.Po \
|
./$(DEPDIR)/hio_t03-t03.Po ./$(DEPDIR)/hio_t04-t04.Po \
|
||||||
./$(DEPDIR)/hio_t05-t05.Po ./$(DEPDIR)/hio_t06-t06.Po
|
./$(DEPDIR)/hio_t05-t05.Po ./$(DEPDIR)/hio_t06-t06.Po \
|
||||||
|
./$(DEPDIR)/hio_te-te.Po
|
||||||
am__mv = mv -f
|
am__mv = mv -f
|
||||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
@ -199,10 +209,11 @@ am__v_CCLD_0 = @echo " CCLD " $@;
|
|||||||
am__v_CCLD_1 =
|
am__v_CCLD_1 =
|
||||||
SOURCES = $(hio_execd_SOURCES) $(hio_t01_SOURCES) $(hio_t02_SOURCES) \
|
SOURCES = $(hio_execd_SOURCES) $(hio_t01_SOURCES) $(hio_t02_SOURCES) \
|
||||||
$(hio_t03_SOURCES) $(hio_t04_SOURCES) $(hio_t05_SOURCES) \
|
$(hio_t03_SOURCES) $(hio_t04_SOURCES) $(hio_t05_SOURCES) \
|
||||||
$(hio_t06_SOURCES)
|
$(hio_t06_SOURCES) $(hio_te_SOURCES)
|
||||||
DIST_SOURCES = $(hio_execd_SOURCES) $(hio_t01_SOURCES) \
|
DIST_SOURCES = $(hio_execd_SOURCES) $(hio_t01_SOURCES) \
|
||||||
$(hio_t02_SOURCES) $(hio_t03_SOURCES) $(hio_t04_SOURCES) \
|
$(hio_t02_SOURCES) $(hio_t03_SOURCES) $(hio_t04_SOURCES) \
|
||||||
$(hio_t05_SOURCES) $(hio_t06_SOURCES)
|
$(hio_t05_SOURCES) $(hio_t06_SOURCES) \
|
||||||
|
$(am__hio_te_SOURCES_DIST)
|
||||||
am__can_run_installinfo = \
|
am__can_run_installinfo = \
|
||||||
case $$AM_UPDATE_INFO_DIR in \
|
case $$AM_UPDATE_INFO_DIR in \
|
||||||
n|no|NO) false;; \
|
n|no|NO) false;; \
|
||||||
@ -384,6 +395,11 @@ hio_execd_CPPFLAGS = $(CPPFLAGS_COMMON)
|
|||||||
hio_execd_CFLAGS = $(CFLAGS_COMMON)
|
hio_execd_CFLAGS = $(CFLAGS_COMMON)
|
||||||
hio_execd_LDFLAGS = $(LDFLAGS_COMMON)
|
hio_execd_LDFLAGS = $(LDFLAGS_COMMON)
|
||||||
hio_execd_LDADD = $(LIBADD_COMMON)
|
hio_execd_LDADD = $(LIBADD_COMMON)
|
||||||
|
@HAVE_X11_LIB_TRUE@hio_te_SOURCES = te.c
|
||||||
|
@HAVE_X11_LIB_TRUE@hio_te_CPPFLAGS = $(CPPFLAGS_COMMON)
|
||||||
|
@HAVE_X11_LIB_TRUE@hio_te_CFLAGS = $(CFLAGS_COMMON)
|
||||||
|
@HAVE_X11_LIB_TRUE@hio_te_LDFLAGS = $(LDFLAGS_COMMON)
|
||||||
|
@HAVE_X11_LIB_TRUE@hio_te_LDADD = $(LIBADD_COMMON) -lX11
|
||||||
hio_t01_SOURCES = t01.c
|
hio_t01_SOURCES = t01.c
|
||||||
hio_t01_CPPFLAGS = $(CPPFLAGS_COMMON)
|
hio_t01_CPPFLAGS = $(CPPFLAGS_COMMON)
|
||||||
hio_t01_CFLAGS = $(CFLAGS_COMMON)
|
hio_t01_CFLAGS = $(CFLAGS_COMMON)
|
||||||
@ -401,9 +417,9 @@ hio_t03_LDFLAGS = $(LDFLAGS_COMMON)
|
|||||||
hio_t03_LDADD = $(LIBADD_COMMON)
|
hio_t03_LDADD = $(LIBADD_COMMON)
|
||||||
hio_t04_SOURCES = t04.c
|
hio_t04_SOURCES = t04.c
|
||||||
hio_t04_CPPFLAGS = $(CPPFLAGS_COMMON)
|
hio_t04_CPPFLAGS = $(CPPFLAGS_COMMON)
|
||||||
hio_t04_CFLAGS = $(CFLAGS_COMMON) $(am__append_1)
|
hio_t04_CFLAGS = $(CFLAGS_COMMON) $(am__append_2)
|
||||||
hio_t04_LDFLAGS = $(LDFLAGS_COMMON) $(am__append_2)
|
hio_t04_LDFLAGS = $(LDFLAGS_COMMON) $(am__append_3)
|
||||||
hio_t04_LDADD = $(LIBADD_COMMON) $(am__append_3)
|
hio_t04_LDADD = $(LIBADD_COMMON) $(am__append_4)
|
||||||
hio_t05_SOURCES = t05.c
|
hio_t05_SOURCES = t05.c
|
||||||
hio_t05_CPPFLAGS = $(CPPFLAGS_COMMON)
|
hio_t05_CPPFLAGS = $(CPPFLAGS_COMMON)
|
||||||
hio_t05_CFLAGS = $(CFLAGS_COMMON)
|
hio_t05_CFLAGS = $(CFLAGS_COMMON)
|
||||||
@ -525,6 +541,10 @@ hio-t06$(EXEEXT): $(hio_t06_OBJECTS) $(hio_t06_DEPENDENCIES) $(EXTRA_hio_t06_DEP
|
|||||||
@rm -f hio-t06$(EXEEXT)
|
@rm -f hio-t06$(EXEEXT)
|
||||||
$(AM_V_CCLD)$(hio_t06_LINK) $(hio_t06_OBJECTS) $(hio_t06_LDADD) $(LIBS)
|
$(AM_V_CCLD)$(hio_t06_LINK) $(hio_t06_OBJECTS) $(hio_t06_LDADD) $(LIBS)
|
||||||
|
|
||||||
|
hio-te$(EXEEXT): $(hio_te_OBJECTS) $(hio_te_DEPENDENCIES) $(EXTRA_hio_te_DEPENDENCIES)
|
||||||
|
@rm -f hio-te$(EXEEXT)
|
||||||
|
$(AM_V_CCLD)$(hio_te_LINK) $(hio_te_OBJECTS) $(hio_te_LDADD) $(LIBS)
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
-rm -f *.$(OBJEXT)
|
-rm -f *.$(OBJEXT)
|
||||||
|
|
||||||
@ -538,6 +558,7 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hio_t04-t04.Po@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hio_t04-t04.Po@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hio_t05-t05.Po@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hio_t05-t05.Po@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hio_t06-t06.Po@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hio_t06-t06.Po@am__quote@ # am--include-marker
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hio_te-te.Po@am__quote@ # am--include-marker
|
||||||
|
|
||||||
$(am__depfiles_remade):
|
$(am__depfiles_remade):
|
||||||
@$(MKDIR_P) $(@D)
|
@$(MKDIR_P) $(@D)
|
||||||
@ -667,6 +688,20 @@ hio_t06-t06.obj: t06.c
|
|||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hio_t06_CPPFLAGS) $(CPPFLAGS) $(hio_t06_CFLAGS) $(CFLAGS) -c -o hio_t06-t06.obj `if test -f 't06.c'; then $(CYGPATH_W) 't06.c'; else $(CYGPATH_W) '$(srcdir)/t06.c'; fi`
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hio_t06_CPPFLAGS) $(CPPFLAGS) $(hio_t06_CFLAGS) $(CFLAGS) -c -o hio_t06-t06.obj `if test -f 't06.c'; then $(CYGPATH_W) 't06.c'; else $(CYGPATH_W) '$(srcdir)/t06.c'; fi`
|
||||||
|
|
||||||
|
hio_te-te.o: te.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hio_te_CPPFLAGS) $(CPPFLAGS) $(hio_te_CFLAGS) $(CFLAGS) -MT hio_te-te.o -MD -MP -MF $(DEPDIR)/hio_te-te.Tpo -c -o hio_te-te.o `test -f 'te.c' || echo '$(srcdir)/'`te.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hio_te-te.Tpo $(DEPDIR)/hio_te-te.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='te.c' object='hio_te-te.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) $(hio_te_CPPFLAGS) $(CPPFLAGS) $(hio_te_CFLAGS) $(CFLAGS) -c -o hio_te-te.o `test -f 'te.c' || echo '$(srcdir)/'`te.c
|
||||||
|
|
||||||
|
hio_te-te.obj: te.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hio_te_CPPFLAGS) $(CPPFLAGS) $(hio_te_CFLAGS) $(CFLAGS) -MT hio_te-te.obj -MD -MP -MF $(DEPDIR)/hio_te-te.Tpo -c -o hio_te-te.obj `if test -f 'te.c'; then $(CYGPATH_W) 'te.c'; else $(CYGPATH_W) '$(srcdir)/te.c'; fi`
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hio_te-te.Tpo $(DEPDIR)/hio_te-te.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='te.c' object='hio_te-te.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) $(hio_te_CPPFLAGS) $(CPPFLAGS) $(hio_te_CFLAGS) $(CFLAGS) -c -o hio_te-te.obj `if test -f 'te.c'; then $(CYGPATH_W) 'te.c'; else $(CYGPATH_W) '$(srcdir)/te.c'; fi`
|
||||||
|
|
||||||
mostlyclean-libtool:
|
mostlyclean-libtool:
|
||||||
-rm -f *.lo
|
-rm -f *.lo
|
||||||
|
|
||||||
@ -807,6 +842,7 @@ distclean: distclean-am
|
|||||||
-rm -f ./$(DEPDIR)/hio_t04-t04.Po
|
-rm -f ./$(DEPDIR)/hio_t04-t04.Po
|
||||||
-rm -f ./$(DEPDIR)/hio_t05-t05.Po
|
-rm -f ./$(DEPDIR)/hio_t05-t05.Po
|
||||||
-rm -f ./$(DEPDIR)/hio_t06-t06.Po
|
-rm -f ./$(DEPDIR)/hio_t06-t06.Po
|
||||||
|
-rm -f ./$(DEPDIR)/hio_te-te.Po
|
||||||
-rm -f Makefile
|
-rm -f Makefile
|
||||||
distclean-am: clean-am distclean-compile distclean-generic \
|
distclean-am: clean-am distclean-compile distclean-generic \
|
||||||
distclean-tags
|
distclean-tags
|
||||||
@ -859,6 +895,7 @@ maintainer-clean: maintainer-clean-am
|
|||||||
-rm -f ./$(DEPDIR)/hio_t04-t04.Po
|
-rm -f ./$(DEPDIR)/hio_t04-t04.Po
|
||||||
-rm -f ./$(DEPDIR)/hio_t05-t05.Po
|
-rm -f ./$(DEPDIR)/hio_t05-t05.Po
|
||||||
-rm -f ./$(DEPDIR)/hio_t06-t06.Po
|
-rm -f ./$(DEPDIR)/hio_t06-t06.Po
|
||||||
|
-rm -f ./$(DEPDIR)/hio_te-te.Po
|
||||||
-rm -f Makefile
|
-rm -f Makefile
|
||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||||
|
|
||||||
|
420
hio/bin/te.c
Normal file
420
hio/bin/te.c
Normal file
@ -0,0 +1,420 @@
|
|||||||
|
/* minimal terminal emulator - based on eduterm (https://www.uninformativ.de/git/eduterm/file/README.html) */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <termios.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
|
#include <hio-shw.h>
|
||||||
|
#include <hio-pty.h>
|
||||||
|
|
||||||
|
|
||||||
|
struct X11
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
Display *dpy;
|
||||||
|
int screen;
|
||||||
|
Window root;
|
||||||
|
|
||||||
|
Window termwin;
|
||||||
|
GC termgc;
|
||||||
|
unsigned long col_fg, col_bg;
|
||||||
|
int w, h;
|
||||||
|
|
||||||
|
XFontStruct *xfont;
|
||||||
|
int font_width, font_height;
|
||||||
|
|
||||||
|
char *buf;
|
||||||
|
int buf_w, buf_h;
|
||||||
|
int buf_x, buf_y;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pair_t
|
||||||
|
{
|
||||||
|
struct X11* x11;
|
||||||
|
hio_syshnd_t pty;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
int term_set_size(struct PTY *pty, struct X11 *x11)
|
||||||
|
{
|
||||||
|
struct winsize ws = {
|
||||||
|
.ws_col = x11->buf_w,
|
||||||
|
.ws_row = x11->buf_h,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is the very same ioctl that normal programs use to query the
|
||||||
|
* window size. Normal programs are actually able to do this, too,
|
||||||
|
* but it makes little sense: Setting the size has no effect on the
|
||||||
|
* PTY driver in the kernel (it just keeps a record of it) or the
|
||||||
|
* terminal emulator. IIUC, all that's happening is that subsequent
|
||||||
|
* ioctls will report the new size -- until another ioctl sets a new
|
||||||
|
* size.
|
||||||
|
*
|
||||||
|
* I didn't see any response to ioctls of normal programs in any of
|
||||||
|
* the popular terminals (XTerm, VTE, st). They are not informed by
|
||||||
|
* the kernel when a normal program issues an ioctl like that.
|
||||||
|
*
|
||||||
|
* On the other hand, if we were to issue this ioctl during runtime
|
||||||
|
* and the size actually changed, child programs would get a
|
||||||
|
* SIGWINCH. */
|
||||||
|
if (ioctl(pty->master, TIOCSWINSZ, &ws) == -1)
|
||||||
|
{
|
||||||
|
perror("ioctl(TIOCSWINSZ)");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void x11_key (XKeyEvent *ev, struct X11* x11, int pty_fd)
|
||||||
|
{
|
||||||
|
char buf[32];
|
||||||
|
KeySym ksym;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = XLookupString(ev, buf, HIO_SIZEOF(buf), &ksym, 0);
|
||||||
|
if (len > 0) write (pty_fd, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void x11_redraw(struct X11 *x11)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
char buf[1];
|
||||||
|
|
||||||
|
XSetForeground(x11->dpy, x11->termgc, x11->col_bg);
|
||||||
|
XFillRectangle(x11->dpy, x11->termwin, x11->termgc, 0, 0, x11->w, x11->h);
|
||||||
|
|
||||||
|
XSetForeground(x11->dpy, x11->termgc, x11->col_fg);
|
||||||
|
for (y = 0; y < x11->buf_h; y++)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
for (x = 0; x < x11->buf_w; x++)
|
||||||
|
{
|
||||||
|
buf[0] = x11->buf[y * x11->buf_w + x];
|
||||||
|
if (!iscntrl(buf[0]))
|
||||||
|
{
|
||||||
|
XDrawString(x11->dpy, x11->termwin, x11->termgc,
|
||||||
|
x * x11->font_width,
|
||||||
|
y * x11->font_height + x11->xfont->ascent,
|
||||||
|
buf, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
XDrawString(x11->dpy, x11->termwin, x11->termgc,
|
||||||
|
0 * x11->font_width,
|
||||||
|
y * x11->font_height + x11->xfont->ascent,
|
||||||
|
&x11->buf[y * x11->buf_w], x11->buf_w);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* draw a cursor */
|
||||||
|
XSetForeground(x11->dpy, x11->termgc, x11->col_fg);
|
||||||
|
XFillRectangle(x11->dpy, x11->termwin, x11->termgc,
|
||||||
|
x11->buf_x * x11->font_width,
|
||||||
|
x11->buf_y * x11->font_height,
|
||||||
|
x11->font_width, x11->font_height);
|
||||||
|
|
||||||
|
XSync(x11->dpy, False);
|
||||||
|
//XFlush (x11->dpy);
|
||||||
|
}
|
||||||
|
|
||||||
|
int x11_setup(struct X11 *x11)
|
||||||
|
{
|
||||||
|
Colormap cmap;
|
||||||
|
XColor color;
|
||||||
|
XSetWindowAttributes wa = {
|
||||||
|
.background_pixmap = ParentRelative,
|
||||||
|
.event_mask = KeyPressMask | KeyReleaseMask | ExposureMask,
|
||||||
|
};
|
||||||
|
|
||||||
|
x11->dpy = XOpenDisplay(NULL);
|
||||||
|
if (x11->dpy == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Cannot open display\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
x11->screen = DefaultScreen(x11->dpy);
|
||||||
|
x11->root = RootWindow(x11->dpy, x11->screen);
|
||||||
|
x11->fd = ConnectionNumber(x11->dpy);
|
||||||
|
|
||||||
|
x11->xfont = XLoadQueryFont(x11->dpy, "fixed");
|
||||||
|
if (x11->xfont == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Could not load font\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
x11->font_width = XTextWidth(x11->xfont, "m", 1);
|
||||||
|
x11->font_height = x11->xfont->ascent + x11->xfont->descent;
|
||||||
|
|
||||||
|
cmap = DefaultColormap(x11->dpy, x11->screen);
|
||||||
|
|
||||||
|
if (!XAllocNamedColor(x11->dpy, cmap, "#000000", &color, &color))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Could not load bg color\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
x11->col_bg = color.pixel;
|
||||||
|
|
||||||
|
if (!XAllocNamedColor(x11->dpy, cmap, "#aaaaaa", &color, &color))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Could not load fg color\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
x11->col_fg = color.pixel;
|
||||||
|
|
||||||
|
/* The terminal will have a fixed size of 80x25 cells. This is an
|
||||||
|
* arbitrary number. No resizing has been implemented and child
|
||||||
|
* processes can't even ask us for the current size (for now).
|
||||||
|
*
|
||||||
|
* buf_x, buf_y will be the current cursor position. */
|
||||||
|
x11->buf_w = 80;
|
||||||
|
x11->buf_h = 25;
|
||||||
|
x11->buf_x = 0;
|
||||||
|
x11->buf_y = 0;
|
||||||
|
x11->buf = malloc(x11->buf_w * x11->buf_h);
|
||||||
|
if (x11->buf == NULL)
|
||||||
|
{
|
||||||
|
perror("calloc");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
memset (x11->buf, ' ', x11->buf_w * x11->buf_h);
|
||||||
|
|
||||||
|
x11->w = x11->buf_w * x11->font_width;
|
||||||
|
x11->h = x11->buf_h * x11->font_height;
|
||||||
|
|
||||||
|
x11->termwin = XCreateWindow(x11->dpy, x11->root,
|
||||||
|
0, 0,
|
||||||
|
x11->w, x11->h,
|
||||||
|
0,
|
||||||
|
DefaultDepth(x11->dpy, x11->screen),
|
||||||
|
CopyFromParent,
|
||||||
|
DefaultVisual(x11->dpy, x11->screen),
|
||||||
|
CWBackPixmap | CWEventMask,
|
||||||
|
&wa);
|
||||||
|
XStoreName(x11->dpy, x11->termwin, "et");
|
||||||
|
XMapWindow(x11->dpy, x11->termwin);
|
||||||
|
x11->termgc = XCreateGC(x11->dpy, x11->termwin, 0, NULL);
|
||||||
|
|
||||||
|
XSync(x11->dpy, False);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void x11_cleanup (struct X11* x11)
|
||||||
|
{
|
||||||
|
XFreeGC (x11->dpy, x11->termgc);
|
||||||
|
XDestroyWindow (x11->dpy, x11->termwin);
|
||||||
|
XFreeFont (x11->dpy, x11->xfont);
|
||||||
|
XCloseDisplay (x11->dpy);
|
||||||
|
free (x11->buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pty_on_read (hio_dev_pty_t* dev, const void* data, hio_iolen_t len)
|
||||||
|
{
|
||||||
|
hio_iolen_t x;
|
||||||
|
const hio_uint8_t* buf = (const hio_uint8_t*)data;
|
||||||
|
int just_wrapped = 0;
|
||||||
|
struct pair_t* p = hio_dev_pty_getxtn(dev);
|
||||||
|
struct X11* x11 = p->x11;
|
||||||
|
|
||||||
|
for (x = 0; x < len; x++)
|
||||||
|
{
|
||||||
|
if (buf[x] == '\r')
|
||||||
|
{
|
||||||
|
x11->buf_x = 0;
|
||||||
|
}
|
||||||
|
else if (buf[x] == '\b')
|
||||||
|
{
|
||||||
|
if(x11->buf_x > 0)
|
||||||
|
{
|
||||||
|
x11->buf[x11->buf_y * x11->buf_w + x11->buf_x] = ' ';
|
||||||
|
x11->buf_x--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (buf[x] == '\7')
|
||||||
|
{
|
||||||
|
/* beep */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (buf[x] != '\n')
|
||||||
|
{
|
||||||
|
/* If this is a regular byte, store it and advance
|
||||||
|
* the cursor one cell "to the right". This might
|
||||||
|
* actually wrap to the next line, see below. */
|
||||||
|
x11->buf[x11->buf_y * x11->buf_w + x11->buf_x] = buf[x];
|
||||||
|
x11->buf_x++;
|
||||||
|
|
||||||
|
if (x11->buf_x >= x11->buf_w)
|
||||||
|
{
|
||||||
|
x11->buf_x = 0;
|
||||||
|
x11->buf_y++;
|
||||||
|
just_wrapped = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
just_wrapped = 0;
|
||||||
|
}
|
||||||
|
else if (!just_wrapped)
|
||||||
|
{
|
||||||
|
/* We read a newline and we did *not* implicitly
|
||||||
|
* wrap to the next line with the last byte we read.
|
||||||
|
* This means we must *now* advance to the next
|
||||||
|
* line.
|
||||||
|
*
|
||||||
|
* This is the same behaviour that most other
|
||||||
|
* terminals have: If you print a full line and then
|
||||||
|
* a newline, they "ignore" that newline. (Just
|
||||||
|
* think about it: A full line of text could always
|
||||||
|
* wrap to the next line implicitly, so that
|
||||||
|
* additional newline could cause the cursor to jump
|
||||||
|
* to the next line *again*.) */
|
||||||
|
x11->buf_y++;
|
||||||
|
just_wrapped = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We now check if "the next line" is actually outside
|
||||||
|
* of the buffer. If it is, we shift the entire content
|
||||||
|
* one line up and then stay in the very last line.
|
||||||
|
*
|
||||||
|
* After the memmove(), the last line still has the old
|
||||||
|
* content. We must clear it. */
|
||||||
|
if (x11->buf_y >= x11->buf_h)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
memmove(x11->buf, &x11->buf[x11->buf_w], x11->buf_w * (x11->buf_h - 1));
|
||||||
|
x11->buf_y = x11->buf_h - 1;
|
||||||
|
for (i = 0; i < x11->buf_w; i++) x11->buf[x11->buf_y * x11->buf_w + i] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
x11_redraw (x11);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pty_on_write (hio_dev_pty_t* dev, hio_iolen_t wrlen, void* wrctx)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pty_on_close (hio_dev_pty_t* dev)
|
||||||
|
{
|
||||||
|
printf (">> pty closed....\n");
|
||||||
|
hio_stop (hio_dev_pty_gethio(dev), HIO_STOPREQ_TERMINATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int shw_on_ready (hio_dev_shw_t* dev, int events)
|
||||||
|
{
|
||||||
|
struct pair_t* p = hio_dev_shw_getxtn(dev);
|
||||||
|
struct X11* x11 = p->x11;
|
||||||
|
|
||||||
|
/* consume data here beforehand. don't let the hio loop
|
||||||
|
* read the data */
|
||||||
|
XEvent ev;
|
||||||
|
while (XPending(x11->dpy))
|
||||||
|
{
|
||||||
|
XNextEvent(x11->dpy, &ev);
|
||||||
|
switch (ev.type)
|
||||||
|
{
|
||||||
|
case Expose:
|
||||||
|
x11_redraw (x11);
|
||||||
|
break;
|
||||||
|
case KeyPress:
|
||||||
|
x11_key (&ev.xkey, x11, p->pty);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* no output via hio on the x11 connection. so let's not care about it. */
|
||||||
|
return 0; /* don't invoke the read method */
|
||||||
|
}
|
||||||
|
|
||||||
|
int shw_on_read (hio_dev_shw_t* dev, const void* data, hio_iolen_t len)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int shw_on_write (hio_dev_shw_t* dev, hio_iolen_t wrlen, void* wrctx)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void shw_on_close (hio_dev_shw_t* dev)
|
||||||
|
{
|
||||||
|
printf (">> shw closed....\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
hio_t* hio = HIO_NULL;
|
||||||
|
struct X11 x11;
|
||||||
|
hio_dev_pty_t* pty;
|
||||||
|
hio_dev_shw_t* shw;
|
||||||
|
|
||||||
|
hio = hio_open(HIO_NULL, 0, HIO_NULL, HIO_FEATURE_ALL, 512, HIO_NULL);
|
||||||
|
if (!hio)
|
||||||
|
{
|
||||||
|
printf ("Cannot open hio\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
hio_setoption (hio, HIO_LOG_TARGET_BCSTR, "/dev/stderr");
|
||||||
|
|
||||||
|
if (x11_setup(&x11) <= -1) return -1;
|
||||||
|
|
||||||
|
{
|
||||||
|
hio_dev_pty_make_t pi;
|
||||||
|
struct pair_t* pair;
|
||||||
|
|
||||||
|
memset (&pi, 0, HIO_SIZEOF(pi));
|
||||||
|
pi.cmd = "/bin/ksh";
|
||||||
|
pi.flags = 0;
|
||||||
|
pi.on_write = pty_on_write;
|
||||||
|
pi.on_read = pty_on_read;
|
||||||
|
pi.on_close = pty_on_close;
|
||||||
|
pty = hio_dev_pty_make(hio, HIO_SIZEOF(*pair), &pi);
|
||||||
|
|
||||||
|
pair = hio_dev_pty_getxtn(pty);
|
||||||
|
pair->x11 = &x11;
|
||||||
|
pair->pty = hio_dev_pty_getsyshnd(pty);
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (!term_set_size(&pty, &x11))
|
||||||
|
return 1;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
hio_dev_shw_make_t si;
|
||||||
|
struct pair_t* pair;
|
||||||
|
|
||||||
|
memset (&si, 0, HIO_SIZEOF(si));
|
||||||
|
si.hnd = ConnectionNumber(x11.dpy);
|
||||||
|
si.flags = HIO_DEV_SHW_KEEP_OPEN_ON_CLOSE | HIO_DEV_SHW_DISABLE_OUT | HIO_DEV_SHW_DISABLE_STREAM;
|
||||||
|
si.on_ready = shw_on_ready;
|
||||||
|
si.on_write = shw_on_write;
|
||||||
|
si.on_read = shw_on_read;
|
||||||
|
si.on_close = shw_on_close;
|
||||||
|
shw = hio_dev_shw_make(hio, HIO_SIZEOF(*pair), &si);
|
||||||
|
|
||||||
|
pair = hio_dev_shw_getxtn(shw);
|
||||||
|
pair->x11 = &x11;
|
||||||
|
pair->pty = hio_dev_pty_getsyshnd(pty);
|
||||||
|
}
|
||||||
|
|
||||||
|
hio_loop (hio);
|
||||||
|
|
||||||
|
if (hio) hio_close (hio);
|
||||||
|
|
||||||
|
x11_cleanup (&x11);
|
||||||
|
return 0;
|
||||||
|
}
|
56
hio/configure
vendored
56
hio/configure
vendored
@ -644,6 +644,8 @@ PACKAGE_VERSION_PATCH
|
|||||||
PACKAGE_VERSION_MINOR
|
PACKAGE_VERSION_MINOR
|
||||||
PACKAGE_VERSION_MAJOR
|
PACKAGE_VERSION_MAJOR
|
||||||
QUADMATH_LIBS
|
QUADMATH_LIBS
|
||||||
|
HAVE_X11_LIB_FALSE
|
||||||
|
HAVE_X11_LIB_TRUE
|
||||||
MARIADB_LIBS
|
MARIADB_LIBS
|
||||||
MARIADB_LDFLAGS
|
MARIADB_LDFLAGS
|
||||||
MARIADB_CFLAGS
|
MARIADB_CFLAGS
|
||||||
@ -15963,6 +15965,56 @@ $as_echo "no" >&6; }
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5
|
||||||
|
$as_echo_n "checking for XOpenDisplay in -lX11... " >&6; }
|
||||||
|
if ${ac_cv_lib_X11_XOpenDisplay+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
LIBS="-lX11 $LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any GCC internal prototype to avoid an error.
|
||||||
|
Use char because int might match the return type of a GCC
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
char XOpenDisplay ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return XOpenDisplay ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
|
ac_cv_lib_X11_XOpenDisplay=yes
|
||||||
|
else
|
||||||
|
ac_cv_lib_X11_XOpenDisplay=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
LIBS=$ac_check_lib_save_LIBS
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XOpenDisplay" >&5
|
||||||
|
$as_echo "$ac_cv_lib_X11_XOpenDisplay" >&6; }
|
||||||
|
if test "x$ac_cv_lib_X11_XOpenDisplay" = xyes; then :
|
||||||
|
|
||||||
|
$as_echo "#define HAVE_X11_LIB 1" >>confdefs.h
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${ac_cv_lib_X11_XOpenDisplay}" = "xyes"; then
|
||||||
|
HAVE_X11_LIB_TRUE=
|
||||||
|
HAVE_X11_LIB_FALSE='#'
|
||||||
|
else
|
||||||
|
HAVE_X11_LIB_TRUE='#'
|
||||||
|
HAVE_X11_LIB_FALSE=
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
ac_header_dirent=no
|
ac_header_dirent=no
|
||||||
for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
|
for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
|
||||||
@ -19356,6 +19408,10 @@ if test -z "${ENABLE_MARIADB_TRUE}" && test -z "${ENABLE_MARIADB_FALSE}"; then
|
|||||||
as_fn_error $? "conditional \"ENABLE_MARIADB\" was never defined.
|
as_fn_error $? "conditional \"ENABLE_MARIADB\" was never defined.
|
||||||
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
||||||
fi
|
fi
|
||||||
|
if test -z "${HAVE_X11_LIB_TRUE}" && test -z "${HAVE_X11_LIB_FALSE}"; then
|
||||||
|
as_fn_error $? "conditional \"HAVE_X11_LIB\" was never defined.
|
||||||
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
||||||
|
fi
|
||||||
|
|
||||||
if test -z "${ENABLE_LIBUNWIND_TRUE}" && test -z "${ENABLE_LIBUNWIND_FALSE}"; then
|
if test -z "${ENABLE_LIBUNWIND_TRUE}" && test -z "${ENABLE_LIBUNWIND_FALSE}"; then
|
||||||
as_fn_error $? "conditional \"ENABLE_LIBUNWIND\" was never defined.
|
as_fn_error $? "conditional \"ENABLE_LIBUNWIND\" was never defined.
|
||||||
|
@ -315,6 +315,9 @@ fi
|
|||||||
|
|
||||||
dnl libmariadb
|
dnl libmariadb
|
||||||
AX_LIB_MARIADB
|
AX_LIB_MARIADB
|
||||||
|
dnl X11 library
|
||||||
|
AC_CHECK_LIB([X11], [XOpenDisplay], [AC_DEFINE([HAVE_X11_LIB], [1], [libX11 is available])] )
|
||||||
|
AM_CONDITIONAL(HAVE_X11_LIB, test "x${ac_cv_lib_X11_XOpenDisplay}" = "xyes")
|
||||||
|
|
||||||
AC_STRUCT_DIRENT_D_TYPE
|
AC_STRUCT_DIRENT_D_TYPE
|
||||||
AC_CHECK_MEMBERS([DIR.d_fd, DIR.dd_fd],,,[[#include <dirent.h>]])
|
AC_CHECK_MEMBERS([DIR.d_fd, DIR.dd_fd],,,[[#include <dirent.h>]])
|
||||||
|
@ -528,6 +528,9 @@
|
|||||||
/* Define to 1 if you have the `writev' function. */
|
/* Define to 1 if you have the `writev' function. */
|
||||||
#undef HAVE_WRITEV
|
#undef HAVE_WRITEV
|
||||||
|
|
||||||
|
/* libX11 is available */
|
||||||
|
#undef HAVE_X11_LIB
|
||||||
|
|
||||||
/* Define to 1 if you have the `_vsnprintf' function. */
|
/* Define to 1 if you have the `_vsnprintf' function. */
|
||||||
#undef HAVE__VSNPRINTF
|
#undef HAVE__VSNPRINTF
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user