bundled isocline

This commit is contained in:
hyung-hwan 2024-12-22 22:06:32 +09:00
parent 431840f77b
commit 87fd48b713
131 changed files with 23305 additions and 104 deletions
Makefile.in
bin
Makefile.amMakefile.in
isocline
CMakeLists.txtLICENSE
bld
doc
haskell
System/Console
readme.md
ide/vs2019
include
isocline.cabalpackage.yamlreadme.md
src

@ -260,7 +260,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
ISOCLINE_LIBS = @ISOCLINE_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBM = @LIBM@

@ -14,7 +14,47 @@ LDFLAGS_COMMON = -L$(abs_builddir)/../lib -L$(libdir)
LIBADD_COMMON =
##################################################
# MAIN LIBRARY
# BUNDLED LIBRARIES
##################################################
noinst_LIBRARIES = libisocline.a
noinst_HEADERS = \
isocline/include/isocline.h \
isocline/src/attr.h \
isocline/src/bbcode.h \
isocline/src/common.h \
isocline/src/completions.h \
isocline/src/env.h \
isocline/src/highlight.h \
isocline/src/history.h \
isocline/src/stringbuf.h \
isocline/src/term.h \
isocline/src/tty.h \
isocline/src/undo.h \
isocline/src/editline_completion.c \
isocline/src/editline_help.c \
isocline/src/editline_history.c \
isocline/src/term_color.c
libisocline_a_SOURCES = \
isocline/src/attr.c \
isocline/src/bbcode.c \
isocline/src/bbcode_colors.c \
isocline/src/common.c \
isocline/src/completers.c \
isocline/src/completions.c \
isocline/src/editline.c \
isocline/src/highlight.c \
isocline/src/history.c \
isocline/src/isocline.c \
isocline/src/stringbuf.c \
isocline/src/term.c \
isocline/src/tty.c \
isocline/src/tty_esc.c \
isocline/src/undo.c \
isocline/src/wcwidth.c
##################################################
# MAIN BINARIES
##################################################
if ENABLE_LIBLTDL
@ -25,9 +65,9 @@ endif
bin_PROGRAMS = hcl
hcl_SOURCES = hcl.c
hcl_CPPFLAGS = $(CPPFLAGS_COMMON)
hcl_CPPFLAGS = $(CPPFLAGS_COMMON) -I$(srcdir)/isocline/include -DHAVE_ISOCLINE_H -DHAVE_ISOCLINE_LIB
hcl_LDFLAGS = $(LDFLAGS_COMMON)
hcl_LDADD = ../lib/libhcl.la $(LIBADD_COMMON) $(ISOCLINE_LIBS)
hcl_LDADD = ../lib/libhcl.la $(LIBADD_COMMON) ./libisocline.a
if ENABLE_HCLX

@ -14,6 +14,8 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@ -90,7 +92,7 @@ build_triplet = @build@
host_triplet = @host@
##################################################
# MAIN LIBRARY
# MAIN BINARIES
##################################################
@ENABLE_LIBLTDL_TRUE@am__append_1 = $(LTDL_LIBS)
@ENABLE_LIBLTDL_FALSE@am__append_2 = $(DL_LIBS)
@ -105,7 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/lib/hcl-cfg.h
CONFIG_CLEAN_FILES =
@ -113,6 +116,28 @@ CONFIG_CLEAN_VPATH_FILES =
@ENABLE_HCLX_TRUE@am__EXEEXT_1 = hclx$(EXEEXT)
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libisocline_a_AR = $(AR) $(ARFLAGS)
libisocline_a_LIBADD =
am__dirstamp = $(am__leading_dot)dirstamp
am_libisocline_a_OBJECTS = isocline/src/attr.$(OBJEXT) \
isocline/src/bbcode.$(OBJEXT) \
isocline/src/bbcode_colors.$(OBJEXT) \
isocline/src/common.$(OBJEXT) \
isocline/src/completers.$(OBJEXT) \
isocline/src/completions.$(OBJEXT) \
isocline/src/editline.$(OBJEXT) \
isocline/src/highlight.$(OBJEXT) \
isocline/src/history.$(OBJEXT) isocline/src/isocline.$(OBJEXT) \
isocline/src/stringbuf.$(OBJEXT) isocline/src/term.$(OBJEXT) \
isocline/src/tty.$(OBJEXT) isocline/src/tty_esc.$(OBJEXT) \
isocline/src/undo.$(OBJEXT) isocline/src/wcwidth.$(OBJEXT)
libisocline_a_OBJECTS = $(am_libisocline_a_OBJECTS)
am_hcl_OBJECTS = hcl-hcl.$(OBJEXT)
hcl_OBJECTS = $(am_hcl_OBJECTS)
am__DEPENDENCIES_1 =
@ -120,7 +145,7 @@ am__DEPENDENCIES_1 =
@ENABLE_LIBLTDL_FALSE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
hcl_DEPENDENCIES = ../lib/libhcl.la $(am__DEPENDENCIES_4) \
$(am__DEPENDENCIES_1)
./libisocline.a
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@ -151,7 +176,22 @@ am__v_at_1 =
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/ac/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/hcl-hcl.Po ./$(DEPDIR)/hclx-hclx.Po
am__depfiles_remade = ./$(DEPDIR)/hcl-hcl.Po ./$(DEPDIR)/hclx-hclx.Po \
isocline/src/$(DEPDIR)/attr.Po \
isocline/src/$(DEPDIR)/bbcode.Po \
isocline/src/$(DEPDIR)/bbcode_colors.Po \
isocline/src/$(DEPDIR)/common.Po \
isocline/src/$(DEPDIR)/completers.Po \
isocline/src/$(DEPDIR)/completions.Po \
isocline/src/$(DEPDIR)/editline.Po \
isocline/src/$(DEPDIR)/highlight.Po \
isocline/src/$(DEPDIR)/history.Po \
isocline/src/$(DEPDIR)/isocline.Po \
isocline/src/$(DEPDIR)/stringbuf.Po \
isocline/src/$(DEPDIR)/term.Po isocline/src/$(DEPDIR)/tty.Po \
isocline/src/$(DEPDIR)/tty_esc.Po \
isocline/src/$(DEPDIR)/undo.Po \
isocline/src/$(DEPDIR)/wcwidth.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@ -171,13 +211,15 @@ 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 = $(hcl_SOURCES) $(hclx_SOURCES)
DIST_SOURCES = $(hcl_SOURCES) $(am__hclx_SOURCES_DIST)
SOURCES = $(libisocline_a_SOURCES) $(hcl_SOURCES) $(hclx_SOURCES)
DIST_SOURCES = $(libisocline_a_SOURCES) $(hcl_SOURCES) \
$(am__hclx_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@ -237,7 +279,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
ISOCLINE_LIBS = @ISOCLINE_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBM = @LIBM@
@ -350,10 +391,51 @@ CPPFLAGS_COMMON = \
CFLAGS_COMMON =
LDFLAGS_COMMON = -L$(abs_builddir)/../lib -L$(libdir)
LIBADD_COMMON = $(am__append_1) $(am__append_2)
##################################################
# BUNDLED LIBRARIES
##################################################
noinst_LIBRARIES = libisocline.a
noinst_HEADERS = \
isocline/include/isocline.h \
isocline/src/attr.h \
isocline/src/bbcode.h \
isocline/src/common.h \
isocline/src/completions.h \
isocline/src/env.h \
isocline/src/highlight.h \
isocline/src/history.h \
isocline/src/stringbuf.h \
isocline/src/term.h \
isocline/src/tty.h \
isocline/src/undo.h \
isocline/src/editline_completion.c \
isocline/src/editline_help.c \
isocline/src/editline_history.c \
isocline/src/term_color.c
libisocline_a_SOURCES = \
isocline/src/attr.c \
isocline/src/bbcode.c \
isocline/src/bbcode_colors.c \
isocline/src/common.c \
isocline/src/completers.c \
isocline/src/completions.c \
isocline/src/editline.c \
isocline/src/highlight.c \
isocline/src/history.c \
isocline/src/isocline.c \
isocline/src/stringbuf.c \
isocline/src/term.c \
isocline/src/tty.c \
isocline/src/tty_esc.c \
isocline/src/undo.c \
isocline/src/wcwidth.c
hcl_SOURCES = hcl.c
hcl_CPPFLAGS = $(CPPFLAGS_COMMON)
hcl_CPPFLAGS = $(CPPFLAGS_COMMON) -I$(srcdir)/isocline/include -DHAVE_ISOCLINE_H -DHAVE_ISOCLINE_LIB
hcl_LDFLAGS = $(LDFLAGS_COMMON)
hcl_LDADD = ../lib/libhcl.la $(LIBADD_COMMON) $(ISOCLINE_LIBS)
hcl_LDADD = ../lib/libhcl.la $(LIBADD_COMMON) ./libisocline.a
@ENABLE_HCLX_TRUE@hclx_SOURCES = hclx.c
@ENABLE_HCLX_TRUE@hclx_CPPFLAGS = $(CPPFLAGS_COMMON)
@ENABLE_HCLX_TRUE@hclx_LDFLAGS = $(LDFLAGS_COMMON)
@ -441,6 +523,52 @@ clean-binPROGRAMS:
echo " rm -f" $$list; \
rm -f $$list
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
isocline/src/$(am__dirstamp):
@$(MKDIR_P) isocline/src
@: > isocline/src/$(am__dirstamp)
isocline/src/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) isocline/src/$(DEPDIR)
@: > isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/attr.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/bbcode.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/bbcode_colors.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/common.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/completers.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/completions.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/editline.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/highlight.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/history.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/isocline.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/stringbuf.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/term.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/tty.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/tty_esc.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/undo.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
isocline/src/wcwidth.$(OBJEXT): isocline/src/$(am__dirstamp) \
isocline/src/$(DEPDIR)/$(am__dirstamp)
libisocline.a: $(libisocline_a_OBJECTS) $(libisocline_a_DEPENDENCIES) $(EXTRA_libisocline_a_DEPENDENCIES)
$(AM_V_at)-rm -f libisocline.a
$(AM_V_AR)$(libisocline_a_AR) libisocline.a $(libisocline_a_OBJECTS) $(libisocline_a_LIBADD)
$(AM_V_at)$(RANLIB) libisocline.a
hcl$(EXEEXT): $(hcl_OBJECTS) $(hcl_DEPENDENCIES) $(EXTRA_hcl_DEPENDENCIES)
@rm -f hcl$(EXEEXT)
$(AM_V_CCLD)$(hcl_LINK) $(hcl_OBJECTS) $(hcl_LDADD) $(LIBS)
@ -451,12 +579,29 @@ hclx$(EXEEXT): $(hclx_OBJECTS) $(hclx_DEPENDENCIES) $(EXTRA_hclx_DEPENDENCIES)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
-rm -f isocline/src/*.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hcl-hcl.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hclx-hclx.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/attr.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/bbcode.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/bbcode_colors.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/common.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/completers.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/completions.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/editline.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/highlight.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/history.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/isocline.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/stringbuf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/term.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/tty.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/tty_esc.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/undo.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@isocline/src/$(DEPDIR)/wcwidth.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@ -608,7 +753,7 @@ distdir-am: $(DISTFILES)
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
all-am: Makefile $(PROGRAMS) $(LIBRARIES) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@ -639,17 +784,36 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-rm -f isocline/src/$(DEPDIR)/$(am__dirstamp)
-rm -f isocline/src/$(am__dirstamp)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool \
clean-noinstLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/hcl-hcl.Po
-rm -f ./$(DEPDIR)/hclx-hclx.Po
-rm -f isocline/src/$(DEPDIR)/attr.Po
-rm -f isocline/src/$(DEPDIR)/bbcode.Po
-rm -f isocline/src/$(DEPDIR)/bbcode_colors.Po
-rm -f isocline/src/$(DEPDIR)/common.Po
-rm -f isocline/src/$(DEPDIR)/completers.Po
-rm -f isocline/src/$(DEPDIR)/completions.Po
-rm -f isocline/src/$(DEPDIR)/editline.Po
-rm -f isocline/src/$(DEPDIR)/highlight.Po
-rm -f isocline/src/$(DEPDIR)/history.Po
-rm -f isocline/src/$(DEPDIR)/isocline.Po
-rm -f isocline/src/$(DEPDIR)/stringbuf.Po
-rm -f isocline/src/$(DEPDIR)/term.Po
-rm -f isocline/src/$(DEPDIR)/tty.Po
-rm -f isocline/src/$(DEPDIR)/tty_esc.Po
-rm -f isocline/src/$(DEPDIR)/undo.Po
-rm -f isocline/src/$(DEPDIR)/wcwidth.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@ -697,6 +861,22 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/hcl-hcl.Po
-rm -f ./$(DEPDIR)/hclx-hclx.Po
-rm -f isocline/src/$(DEPDIR)/attr.Po
-rm -f isocline/src/$(DEPDIR)/bbcode.Po
-rm -f isocline/src/$(DEPDIR)/bbcode_colors.Po
-rm -f isocline/src/$(DEPDIR)/common.Po
-rm -f isocline/src/$(DEPDIR)/completers.Po
-rm -f isocline/src/$(DEPDIR)/completions.Po
-rm -f isocline/src/$(DEPDIR)/editline.Po
-rm -f isocline/src/$(DEPDIR)/highlight.Po
-rm -f isocline/src/$(DEPDIR)/history.Po
-rm -f isocline/src/$(DEPDIR)/isocline.Po
-rm -f isocline/src/$(DEPDIR)/stringbuf.Po
-rm -f isocline/src/$(DEPDIR)/term.Po
-rm -f isocline/src/$(DEPDIR)/tty.Po
-rm -f isocline/src/$(DEPDIR)/tty_esc.Po
-rm -f isocline/src/$(DEPDIR)/undo.Po
-rm -f isocline/src/$(DEPDIR)/wcwidth.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@ -718,15 +898,16 @@ uninstall-am: uninstall-binPROGRAMS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
clean-binPROGRAMS clean-generic clean-libtool \
clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS

162
bin/isocline/CMakeLists.txt Normal file

@ -0,0 +1,162 @@
# -----------------------------------------------------------------------------
# Copyright (c) 2021, Daan Leijen
# -----------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.10)
project(libisocline C CXX ASM)
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)
option(IC_USE_CXX "Build with C++ compiler" OFF)
option(IC_DEBUG_UBSAN "Build with undefined behaviour sanitizer" OFF)
option(IC_DEBUG_ASAN "Build with address sanitizer" OFF)
option(IC_DEBUG_MSG "Enable printing debug messages stderr (only if also ISOCLINE_DEBUG=1 is set in the environment)" ON)
option(IC_SEPARATE_OBJS "Compile with separate object files instead of one (warning: exports internal symbols)" OFF)
set(ic_version "0.1")
set(ic_sources src/isocline.c)
set(ic_example_sources test/example.c test/test_colors.c)
# -----------------------------------------------------------------------------
# Initial definitions
# -----------------------------------------------------------------------------
set(ic_cflags)
set(ic_cdefs)
set(ic_install_dir)
if(IC_SEPARATE_OBJS)
list(APPEND ic_cdefs IC_SEPARATE_OBJS)
list(APPEND ic_sources
src/attr.c
src/bbcode.c
src/common.c
src/completions.c
src/completers.c
src/editline.c
src/highlight.c
src/history.c
src/stringbuf.c
src/term.c
src/tty_esc.c
src/tty.c
src/undo.c)
endif()
if(IC_USE_CXX)
set(IC_COMPILER_ID "${CMAKE_CXX_COMPILER_ID}")
set_source_files_properties(${ic_sources} PROPERTIES LANGUAGE CXX )
set_source_files_properties(${ic_example_sources} PROPERTIES LANGUAGE CXX )
else()
set(IC_COMPILER_ID "${CMAKE_C_COMPILER_ID}")
endif()
if(NOT IC_DEBUG_MSG)
message(STATUS "Disable debug messages")
list(APPEND ic_cdefs IC_NO_DEBUG_MSG)
endif()
# -----------------------------------------------------------------------------
# Convenience: set default build type depending on the build directory
# -----------------------------------------------------------------------------
if (NOT CMAKE_BUILD_TYPE)
if ("${CMAKE_BINARY_DIR}" MATCHES ".*(Debug|debug|dbg|ubsan|tsan|asan)$")
message(STATUS "No build type selected, default to: Debug")
set(CMAKE_BUILD_TYPE "Debug")
else()
message(STATUS "No build type selected, default to: Release")
set(CMAKE_BUILD_TYPE "Release")
endif()
endif()
# -----------------------------------------------------------------------------
# Sanitizers
# -----------------------------------------------------------------------------
if(IC_DEBUG_UBSAN OR IC_DEBUG_ASAN)
if((CMAKE_BUILD_TYPE MATCHES "Debug") AND (IC_COMPILER_ID MATCHES "Clang"))
set(ic_san)
if (IC_DEBUG_UBSAN)
list(APPEND ic_san "undefined")
message(STATUS "Using the undefined behavior sanitizer.")
endif()
if (IC_DEBUG_ASAN)
list(APPEND ic_san "address")
message(STATUS "Using the address sanitizer. To detect memory leaks run as:")
message(STATUS "> ASAN_OPTIONS=\"detect_leaks=1:verbosity=1\" ./example")
endif()
list(JOIN ic_san "," ic_san)
list(APPEND ic_cflags -fsanitize=${ic_san})
list(APPEND CMAKE_EXE_LINKER_FLAGS -fsanitize=${ic_san})
else()
message(WARNING "Can only use sanitizer with a clang debug build (currently: ${IC_COMPILER_ID}, CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}, IC_USE_C=${IC_USE_C})")
endif()
endif()
# -----------------------------------------------------------------------------
# Flags
# -----------------------------------------------------------------------------
if (IC_COMPILER_ID MATCHES "AppleClang|Clang|GNU|Intel")
list(APPEND ic_cflags -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -Wno-unused-function -Wno-padded -Wno-missing-field-initializers)
if (IC_COMPILER_ID MATCHES "AppleClang|Clang")
list(APPEND ic_cflags -Wimplicit-int-conversion -Wsign-conversion)
endif()
if (IC_COMPILER_ID MATCHES "GNU")
list(APPEND ic_cflags -Wsign-conversion -Wno-missing-braces)
if (NOT IC_USE_CXX)
list(APPEND ic_cflags -Wint-conversion)
endif()
endif()
endif()
# treat C extension as C++
if (IC_USE_CXX)
if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang|Clang")
list(APPEND ic_cflags -Wno-deprecated)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
list(APPEND ic_cflags -Kc++)
endif()
endif()
# -----------------------------------------------------------------------------
# Overview
# -----------------------------------------------------------------------------
message(STATUS "")
message(STATUS "Library : libisocline")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS "Compiler : ${IC_COMPILER_ID}")
message(STATUS "Defines : ${ic_cdefs}")
# message(STATUS "Flags : ${ic_cflags}")
message(STATUS "")
# -----------------------------------------------------------------------------
# Static library (libisocline.a) and samples (example)
# -----------------------------------------------------------------------------
add_library(isocline STATIC ${ic_sources})
set_property(TARGET isocline PROPERTY POSITION_INDEPENDENT_CODE ON)
target_compile_options(isocline PRIVATE ${ic_cflags})
target_compile_definitions(isocline PRIVATE ${ic_cdefs})
target_include_directories(isocline PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${ic_install_dir}/include>
)
add_executable(example test/example.c)
target_compile_options(example PRIVATE ${ic_cflags})
target_include_directories(example PRIVATE include)
target_link_libraries(example PRIVATE isocline)
add_executable(test_colors test/test_colors.c)
target_compile_options(test_colors PRIVATE ${ic_cflags})
target_include_directories(test_colors PRIVATE include)
target_link_libraries(test_colors PRIVATE isocline)

21
bin/isocline/LICENSE Normal file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Daan Leijen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,444 @@
# This is the CMakeCache file.
# For build in directory: /home/hyung-hwan/projects/isocline/bld
# It was generated by CMake: /usr/bin/cmake
# You can edit this file to change values found and used by cmake.
# If you do not want to change any of the values, simply exit the editor.
# If you do want to change a value, simply edit, save, and exit the editor.
# The syntax for the file is as follows:
# KEY:TYPE=VALUE
# KEY is the name of a variable in the cache.
# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
# VALUE is the current value for the KEY.
########################
# EXTERNAL cache entries
########################
//Path to a program.
CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line
//Path to a program.
CMAKE_AR:FILEPATH=/usr/bin/ar
//ASM compiler
CMAKE_ASM_COMPILER:FILEPATH=/usr/bin/cc
//A wrapper around 'ar' adding the appropriate '--plugin' option
// for the GCC compiler
CMAKE_ASM_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar
//A wrapper around 'ranlib' adding the appropriate '--plugin' option
// for the GCC compiler
CMAKE_ASM_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib
//Flags used by the ASM compiler during all build types.
CMAKE_ASM_FLAGS:STRING=
//Flags used by the ASM compiler during DEBUG builds.
CMAKE_ASM_FLAGS_DEBUG:STRING=-g
//Flags used by the ASM compiler during MINSIZEREL builds.
CMAKE_ASM_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
//Flags used by the ASM compiler during RELEASE builds.
CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
//Flags used by the ASM compiler during RELWITHDEBINFO builds.
CMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
//Choose the type of build, options are: None Debug Release RelWithDebInfo
// MinSizeRel ...
CMAKE_BUILD_TYPE:STRING=
//Enable/Disable color output during build.
CMAKE_COLOR_MAKEFILE:BOOL=ON
//CXX compiler
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
//A wrapper around 'ar' adding the appropriate '--plugin' option
// for the GCC compiler
CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar
//A wrapper around 'ranlib' adding the appropriate '--plugin' option
// for the GCC compiler
CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib
//Flags used by the CXX compiler during all build types.
CMAKE_CXX_FLAGS:STRING=
//Flags used by the CXX compiler during DEBUG builds.
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
//Flags used by the CXX compiler during MINSIZEREL builds.
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
//Flags used by the CXX compiler during RELEASE builds.
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
//Flags used by the CXX compiler during RELWITHDEBINFO builds.
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
//C compiler
CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc
//A wrapper around 'ar' adding the appropriate '--plugin' option
// for the GCC compiler
CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar
//A wrapper around 'ranlib' adding the appropriate '--plugin' option
// for the GCC compiler
CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib
//Flags used by the C compiler during all build types.
CMAKE_C_FLAGS:STRING=
//Flags used by the C compiler during DEBUG builds.
CMAKE_C_FLAGS_DEBUG:STRING=-g
//Flags used by the C compiler during MINSIZEREL builds.
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
//Flags used by the C compiler during RELEASE builds.
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
//Flags used by the C compiler during RELWITHDEBINFO builds.
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
//Path to a program.
CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND
//Flags used by the linker during all build types.
CMAKE_EXE_LINKER_FLAGS:STRING=
//Flags used by the linker during DEBUG builds.
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
//Flags used by the linker during MINSIZEREL builds.
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
//Flags used by the linker during RELEASE builds.
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
//Flags used by the linker during RELWITHDEBINFO builds.
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
//Enable/Disable output of compile commands during generation.
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=
//Value Computed by CMake.
CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/hyung-hwan/projects/isocline/bld/CMakeFiles/pkgRedirects
//Install path prefix, prepended onto install directories.
CMAKE_INSTALL_PREFIX:PATH=/home/hyung-hwan/xxx
//Path to a program.
CMAKE_LINKER:FILEPATH=/usr/bin/ld
//Path to a program.
CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake
//Flags used by the linker during the creation of modules during
// all build types.
CMAKE_MODULE_LINKER_FLAGS:STRING=
//Flags used by the linker during the creation of modules during
// DEBUG builds.
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
//Flags used by the linker during the creation of modules during
// MINSIZEREL builds.
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
//Flags used by the linker during the creation of modules during
// RELEASE builds.
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
//Flags used by the linker during the creation of modules during
// RELWITHDEBINFO builds.
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
//Path to a program.
CMAKE_NM:FILEPATH=/usr/bin/nm
//Path to a program.
CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
//Path to a program.
CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
//Value Computed by CMake
CMAKE_PROJECT_DESCRIPTION:STATIC=
//Value Computed by CMake
CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
//Value Computed by CMake
CMAKE_PROJECT_NAME:STATIC=libisocline
//Path to a program.
CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
//Path to a program.
CMAKE_READELF:FILEPATH=/usr/bin/readelf
//Flags used by the linker during the creation of shared libraries
// during all build types.
CMAKE_SHARED_LINKER_FLAGS:STRING=
//Flags used by the linker during the creation of shared libraries
// during DEBUG builds.
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
//Flags used by the linker during the creation of shared libraries
// during MINSIZEREL builds.
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
//Flags used by the linker during the creation of shared libraries
// during RELEASE builds.
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
//Flags used by the linker during the creation of shared libraries
// during RELWITHDEBINFO builds.
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
//If set, runtime paths are not added when installing shared libraries,
// but are added when building.
CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
//If set, runtime paths are not added when using shared libraries.
CMAKE_SKIP_RPATH:BOOL=NO
//Flags used by the linker during the creation of static libraries
// during all build types.
CMAKE_STATIC_LINKER_FLAGS:STRING=
//Flags used by the linker during the creation of static libraries
// during DEBUG builds.
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
//Flags used by the linker during the creation of static libraries
// during MINSIZEREL builds.
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
//Flags used by the linker during the creation of static libraries
// during RELEASE builds.
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
//Flags used by the linker during the creation of static libraries
// during RELWITHDEBINFO builds.
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
//Path to a program.
CMAKE_STRIP:FILEPATH=/usr/bin/strip
//Path to a program.
CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND
//If this value is on, makefiles will be generated without the
// .SILENT directive, and all commands will be echoed to the console
// during the make. This is useful for debugging only. With Visual
// Studio IDE projects all commands are done without /nologo.
CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
//Build with address sanitizer
IC_DEBUG_ASAN:BOOL=OFF
//Enable printing debug messages stderr (only if also ISOCLINE_DEBUG=1
// is set in the environment)
IC_DEBUG_MSG:BOOL=ON
//Build with undefined behaviour sanitizer
IC_DEBUG_UBSAN:BOOL=OFF
//Compile with separate object files instead of one (warning: exports
// internal symbols)
IC_SEPARATE_OBJS:BOOL=OFF
//Build with C++ compiler
IC_USE_CXX:BOOL=OFF
//No help, variable specified on the command line.
INSTALL_PREFIX:UNINITIALIZED=/home/hyung-hwan/xxx
//Value Computed by CMake
libisocline_BINARY_DIR:STATIC=/home/hyung-hwan/projects/isocline/bld
//Value Computed by CMake
libisocline_IS_TOP_LEVEL:STATIC=ON
//Value Computed by CMake
libisocline_SOURCE_DIR:STATIC=/home/hyung-hwan/projects/isocline
########################
# INTERNAL cache entries
########################
//ADVANCED property for variable: CMAKE_ADDR2LINE
CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_AR
CMAKE_AR-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_ASM_COMPILER
CMAKE_ASM_COMPILER-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_ASM_COMPILER_AR
CMAKE_ASM_COMPILER_AR-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_ASM_COMPILER_RANLIB
CMAKE_ASM_COMPILER_RANLIB-ADVANCED:INTERNAL=1
CMAKE_ASM_COMPILER_WORKS:INTERNAL=1
//ADVANCED property for variable: CMAKE_ASM_FLAGS
CMAKE_ASM_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_ASM_FLAGS_DEBUG
CMAKE_ASM_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_ASM_FLAGS_MINSIZEREL
CMAKE_ASM_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_ASM_FLAGS_RELEASE
CMAKE_ASM_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_ASM_FLAGS_RELWITHDEBINFO
CMAKE_ASM_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//This is the directory where this CMakeCache.txt was created
CMAKE_CACHEFILE_DIR:INTERNAL=/home/hyung-hwan/projects/isocline/bld
//Major version of cmake used to create the current loaded cache
CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
//Minor version of cmake used to create the current loaded cache
CMAKE_CACHE_MINOR_VERSION:INTERNAL=28
//Patch version of cmake used to create the current loaded cache
CMAKE_CACHE_PATCH_VERSION:INTERNAL=2
//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
//Path to CMake executable.
CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
//Path to cpack program executable.
CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack
//Path to ctest program executable.
CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest
//ADVANCED property for variable: CMAKE_CXX_COMPILER
CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_C_COMPILER
CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_C_COMPILER_AR
CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB
CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_C_FLAGS
CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_DLLTOOL
CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
//Path to cache edit program executable.
CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake
//Executable file format
CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
//Name of external makefile project generator.
CMAKE_EXTRA_GENERATOR:INTERNAL=
//Name of generator.
CMAKE_GENERATOR:INTERNAL=Unix Makefiles
//Generator instance identifier.
CMAKE_GENERATOR_INSTANCE:INTERNAL=
//Name of generator platform.
CMAKE_GENERATOR_PLATFORM:INTERNAL=
//Name of generator toolset.
CMAKE_GENERATOR_TOOLSET:INTERNAL=
//Source directory with the top level CMakeLists.txt file for this
// project
CMAKE_HOME_DIRECTORY:INTERNAL=/home/hyung-hwan/projects/isocline
//Install .so files without execute permission.
CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0
//ADVANCED property for variable: CMAKE_LINKER
CMAKE_LINKER-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_NM
CMAKE_NM-ADVANCED:INTERNAL=1
//number of local generators
CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
//ADVANCED property for variable: CMAKE_OBJCOPY
CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_OBJDUMP
CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
//Platform information initialized
CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
//ADVANCED property for variable: CMAKE_RANLIB
CMAKE_RANLIB-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_READELF
CMAKE_READELF-ADVANCED:INTERNAL=1
//Path to CMake installation.
CMAKE_ROOT:INTERNAL=/usr/share/cmake
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SKIP_RPATH
CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STRIP
CMAKE_STRIP-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_TAPI
CMAKE_TAPI-ADVANCED:INTERNAL=1
//uname command
CMAKE_UNAME:INTERNAL=/usr/bin/uname
//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
//linker supports push/pop state
_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE

@ -0,0 +1,22 @@
set(CMAKE_ASM_COMPILER "/usr/bin/cc")
set(CMAKE_ASM_COMPILER_ARG1 "")
set(CMAKE_AR "/usr/bin/ar")
set(CMAKE_ASM_COMPILER_AR "/usr/bin/gcc-ar")
set(CMAKE_RANLIB "/usr/bin/ranlib")
set(CMAKE_ASM_COMPILER_RANLIB "/usr/bin/gcc-ranlib")
set(CMAKE_LINKER "/usr/bin/ld")
set(CMAKE_MT "")
set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
set(CMAKE_ASM_COMPILER_LOADED 1)
set(CMAKE_ASM_COMPILER_ID "GNU")
set(CMAKE_ASM_COMPILER_VERSION "")
set(CMAKE_ASM_COMPILER_ENV_VAR "ASM")
set(CMAKE_ASM_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
set(CMAKE_ASM_LINKER_PREFERENCE 0)
set(CMAKE_ASM_LINKER_DEPFILE_SUPPORTED )

@ -0,0 +1,74 @@
set(CMAKE_C_COMPILER "/usr/bin/cc")
set(CMAKE_C_COMPILER_ARG1 "")
set(CMAKE_C_COMPILER_ID "GNU")
set(CMAKE_C_COMPILER_VERSION "14.2.1")
set(CMAKE_C_COMPILER_VERSION_INTERNAL "")
set(CMAKE_C_COMPILER_WRAPPER "")
set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17")
set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON")
set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23")
set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes")
set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros")
set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert")
set(CMAKE_C17_COMPILE_FEATURES "c_std_17")
set(CMAKE_C23_COMPILE_FEATURES "c_std_23")
set(CMAKE_C_PLATFORM_ID "Linux")
set(CMAKE_C_SIMULATE_ID "")
set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU")
set(CMAKE_C_SIMULATE_VERSION "")
set(CMAKE_AR "/usr/bin/ar")
set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar")
set(CMAKE_RANLIB "/usr/bin/ranlib")
set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib")
set(CMAKE_LINKER "/usr/bin/ld")
set(CMAKE_MT "")
set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
set(CMAKE_COMPILER_IS_GNUCC 1)
set(CMAKE_C_COMPILER_LOADED 1)
set(CMAKE_C_COMPILER_WORKS TRUE)
set(CMAKE_C_ABI_COMPILED TRUE)
set(CMAKE_C_COMPILER_ENV_VAR "CC")
set(CMAKE_C_COMPILER_ID_RUN 1)
set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
set(CMAKE_C_LINKER_PREFERENCE 10)
set(CMAKE_C_LINKER_DEPFILE_SUPPORTED TRUE)
# Save compiler ABI information.
set(CMAKE_C_SIZEOF_DATA_PTR "8")
set(CMAKE_C_COMPILER_ABI "ELF")
set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN")
set(CMAKE_C_LIBRARY_ARCHITECTURE "")
if(CMAKE_C_SIZEOF_DATA_PTR)
set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
endif()
if(CMAKE_C_COMPILER_ABI)
set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
endif()
if(CMAKE_C_LIBRARY_ARCHITECTURE)
set(CMAKE_LIBRARY_ARCHITECTURE "")
endif()
set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "")
if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
endif()
set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include")
set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s")
set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib")
set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")

@ -0,0 +1,85 @@
set(CMAKE_CXX_COMPILER "/usr/bin/c++")
set(CMAKE_CXX_COMPILER_ARG1 "")
set(CMAKE_CXX_COMPILER_ID "GNU")
set(CMAKE_CXX_COMPILER_VERSION "14.2.1")
set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
set(CMAKE_CXX_COMPILER_WRAPPER "")
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17")
set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON")
set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23")
set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23")
set(CMAKE_CXX_PLATFORM_ID "Linux")
set(CMAKE_CXX_SIMULATE_ID "")
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
set(CMAKE_CXX_SIMULATE_VERSION "")
set(CMAKE_AR "/usr/bin/ar")
set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar")
set(CMAKE_RANLIB "/usr/bin/ranlib")
set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib")
set(CMAKE_LINKER "/usr/bin/ld")
set(CMAKE_MT "")
set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
set(CMAKE_COMPILER_IS_GNUCXX 1)
set(CMAKE_CXX_COMPILER_LOADED 1)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
set(CMAKE_CXX_ABI_COMPILED TRUE)
set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
set(CMAKE_CXX_COMPILER_ID_RUN 1)
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m)
set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
foreach (lang C OBJC OBJCXX)
if (CMAKE_${lang}_COMPILER_ID_RUN)
foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
endforeach()
endif()
endforeach()
set(CMAKE_CXX_LINKER_PREFERENCE 30)
set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE)
# Save compiler ABI information.
set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
set(CMAKE_CXX_COMPILER_ABI "ELF")
set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN")
set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")
if(CMAKE_CXX_SIZEOF_DATA_PTR)
set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
endif()
if(CMAKE_CXX_COMPILER_ABI)
set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
endif()
if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
set(CMAKE_LIBRARY_ARCHITECTURE "")
endif()
set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
endif()
set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/14;/usr/include/c++/14/x86_64-redhat-linux;/usr/include/c++/14/backward;/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include")
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc")
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib")
set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")

Binary file not shown.

@ -0,0 +1,15 @@
set(CMAKE_HOST_SYSTEM "Linux-6.10.12-200.fc40.x86_64")
set(CMAKE_HOST_SYSTEM_NAME "Linux")
set(CMAKE_HOST_SYSTEM_VERSION "6.10.12-200.fc40.x86_64")
set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
set(CMAKE_SYSTEM "Linux-6.10.12-200.fc40.x86_64")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_VERSION "6.10.12-200.fc40.x86_64")
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
set(CMAKE_CROSSCOMPILING "FALSE")
set(CMAKE_SYSTEM_LOADED 1)

@ -0,0 +1,880 @@
#ifdef __cplusplus
# error "A C++ compiler has been selected for C."
#endif
#if defined(__18CXX)
# define ID_VOID_MAIN
#endif
#if defined(__CLASSIC_C__)
/* cv-qualifiers did not exist in K&R C */
# define const
# define volatile
#endif
#if !defined(__has_include)
/* If the compiler does not have __has_include, pretend the answer is
always no. */
# define __has_include(x) 0
#endif
/* Version number components: V=Version, R=Revision, P=Patch
Version date components: YYYY=Year, MM=Month, DD=Day */
#if defined(__INTEL_COMPILER) || defined(__ICC)
# define COMPILER_ID "Intel"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# if defined(__GNUC__)
# define SIMULATE_ID "GNU"
# endif
/* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
except that a few beta releases use the old format with V=2021. */
# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
# if defined(__INTEL_COMPILER_UPDATE)
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
# else
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
# endif
# else
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
/* The third version component from --version is an update index,
but no macro is provided for it. */
# define COMPILER_VERSION_PATCH DEC(0)
# endif
# if defined(__INTEL_COMPILER_BUILD_DATE)
/* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
# endif
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
# if defined(__GNUC__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
# elif defined(__GNUG__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
# endif
# if defined(__GNUC_MINOR__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
# endif
# if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
# define COMPILER_ID "IntelLLVM"
#if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
#endif
#if defined(__GNUC__)
# define SIMULATE_ID "GNU"
#endif
/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
* later. Look for 6 digit vs. 8 digit version number to decide encoding.
* VVVV is no smaller than the current year when a version is released.
*/
#if __INTEL_LLVM_COMPILER < 1000000L
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
#else
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
#endif
#if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
#endif
#if defined(__GNUC__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
#elif defined(__GNUG__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
#endif
#if defined(__GNUC_MINOR__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
#endif
#if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
#endif
#elif defined(__PATHCC__)
# define COMPILER_ID "PathScale"
# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
# if defined(__PATHCC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
# endif
#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
# define COMPILER_ID "Embarcadero"
# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
#elif defined(__BORLANDC__)
# define COMPILER_ID "Borland"
/* __BORLANDC__ = 0xVRR */
# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
# define COMPILER_ID "Watcom"
/* __WATCOMC__ = VVRR */
# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
# if (__WATCOMC__ % 10) > 0
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
# endif
#elif defined(__WATCOMC__)
# define COMPILER_ID "OpenWatcom"
/* __WATCOMC__ = VVRP + 1100 */
# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
# if (__WATCOMC__ % 10) > 0
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
# endif
#elif defined(__SUNPRO_C)
# define COMPILER_ID "SunPro"
# if __SUNPRO_C >= 0x5100
/* __SUNPRO_C = 0xVRRP */
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
# else
/* __SUNPRO_CC = 0xVRP */
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
# endif
#elif defined(__HP_cc)
# define COMPILER_ID "HP"
/* __HP_cc = VVRRPP */
# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100)
#elif defined(__DECC)
# define COMPILER_ID "Compaq"
/* __DECC_VER = VVRRTPPPP */
# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100)
# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000)
#elif defined(__IBMC__) && defined(__COMPILER_VER__)
# define COMPILER_ID "zOS"
/* __IBMC__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
#elif defined(__open_xl__) && defined(__clang__)
# define COMPILER_ID "IBMClang"
# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
# define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
#elif defined(__ibmxl__) && defined(__clang__)
# define COMPILER_ID "XLClang"
# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
# define COMPILER_ID "XL"
/* __IBMC__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
# define COMPILER_ID "VisualAge"
/* __IBMC__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
#elif defined(__NVCOMPILER)
# define COMPILER_ID "NVHPC"
# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
# if defined(__NVCOMPILER_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
# endif
#elif defined(__PGI)
# define COMPILER_ID "PGI"
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
# if defined(__PGIC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
# endif
#elif defined(__clang__) && defined(__cray__)
# define COMPILER_ID "CrayClang"
# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
#elif defined(_CRAYC)
# define COMPILER_ID "Cray"
# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
#elif defined(__TI_COMPILER_VERSION__)
# define COMPILER_ID "TI"
/* __TI_COMPILER_VERSION__ = VVVRRRPPP */
# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
#elif defined(__CLANG_FUJITSU)
# define COMPILER_ID "FujitsuClang"
# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
#elif defined(__FUJITSU)
# define COMPILER_ID "Fujitsu"
# if defined(__FCC_version__)
# define COMPILER_VERSION __FCC_version__
# elif defined(__FCC_major__)
# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
# endif
# if defined(__fcc_version)
# define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
# elif defined(__FCC_VERSION)
# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
# endif
#elif defined(__ghs__)
# define COMPILER_ID "GHS"
/* __GHS_VERSION_NUMBER = VVVVRP */
# ifdef __GHS_VERSION_NUMBER
# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
# endif
#elif defined(__TASKING__)
# define COMPILER_ID "Tasking"
# define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
# define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
#elif defined(__ORANGEC__)
# define COMPILER_ID "OrangeC"
# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
#elif defined(__TINYC__)
# define COMPILER_ID "TinyCC"
#elif defined(__BCC__)
# define COMPILER_ID "Bruce"
#elif defined(__SCO_VERSION__)
# define COMPILER_ID "SCO"
#elif defined(__ARMCC_VERSION) && !defined(__clang__)
# define COMPILER_ID "ARMCC"
#if __ARMCC_VERSION >= 1000000
/* __ARMCC_VERSION = VRRPPPP */
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
#else
/* __ARMCC_VERSION = VRPPPP */
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
#endif
#elif defined(__clang__) && defined(__apple_build_version__)
# define COMPILER_ID "AppleClang"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
# define COMPILER_ID "ARMClang"
# define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
# define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
# define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100)
# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
#elif defined(__clang__)
# define COMPILER_ID "Clang"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
# define COMPILER_ID "LCC"
# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
# if defined(__LCC_MINOR__)
# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
# endif
# if defined(__GNUC__) && defined(__GNUC_MINOR__)
# define SIMULATE_ID "GNU"
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
# if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
# endif
#elif defined(__GNUC__)
# define COMPILER_ID "GNU"
# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
# if defined(__GNUC_MINOR__)
# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
# endif
# if defined(__GNUC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
#elif defined(_MSC_VER)
# define COMPILER_ID "MSVC"
/* _MSC_VER = VVRR */
# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
# if defined(_MSC_FULL_VER)
# if _MSC_VER >= 1400
/* _MSC_FULL_VER = VVRRPPPPP */
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
# else
/* _MSC_FULL_VER = VVRRPPPP */
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
# endif
# endif
# if defined(_MSC_BUILD)
# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
# endif
#elif defined(_ADI_COMPILER)
# define COMPILER_ID "ADSP"
#if defined(__VERSIONNUM__)
/* __VERSIONNUM__ = 0xVVRRPPTT */
# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
#endif
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
# define COMPILER_ID "IAR"
# if defined(__VER__) && defined(__ICCARM__)
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
# endif
#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
# define COMPILER_ID "SDCC"
# if defined(__SDCC_VERSION_MAJOR)
# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
# else
/* SDCC = VRP */
# define COMPILER_VERSION_MAJOR DEC(SDCC/100)
# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
# define COMPILER_VERSION_PATCH DEC(SDCC % 10)
# endif
/* These compilers are either not known or too old to define an
identification macro. Try to identify the platform and guess that
it is the native compiler. */
#elif defined(__hpux) || defined(__hpua)
# define COMPILER_ID "HP"
#else /* unknown compiler */
# define COMPILER_ID ""
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
#ifdef SIMULATE_ID
char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
#endif
#ifdef __QNXNTO__
char const* qnxnto = "INFO" ":" "qnxnto[]";
#endif
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
#endif
#define STRINGIFY_HELPER(X) #X
#define STRINGIFY(X) STRINGIFY_HELPER(X)
/* Identify known platforms by name. */
#if defined(__linux) || defined(__linux__) || defined(linux)
# define PLATFORM_ID "Linux"
#elif defined(__MSYS__)
# define PLATFORM_ID "MSYS"
#elif defined(__CYGWIN__)
# define PLATFORM_ID "Cygwin"
#elif defined(__MINGW32__)
# define PLATFORM_ID "MinGW"
#elif defined(__APPLE__)
# define PLATFORM_ID "Darwin"
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
# define PLATFORM_ID "Windows"
#elif defined(__FreeBSD__) || defined(__FreeBSD)
# define PLATFORM_ID "FreeBSD"
#elif defined(__NetBSD__) || defined(__NetBSD)
# define PLATFORM_ID "NetBSD"
#elif defined(__OpenBSD__) || defined(__OPENBSD)
# define PLATFORM_ID "OpenBSD"
#elif defined(__sun) || defined(sun)
# define PLATFORM_ID "SunOS"
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
# define PLATFORM_ID "AIX"
#elif defined(__hpux) || defined(__hpux__)
# define PLATFORM_ID "HP-UX"
#elif defined(__HAIKU__)
# define PLATFORM_ID "Haiku"
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
# define PLATFORM_ID "BeOS"
#elif defined(__QNX__) || defined(__QNXNTO__)
# define PLATFORM_ID "QNX"
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
# define PLATFORM_ID "Tru64"
#elif defined(__riscos) || defined(__riscos__)
# define PLATFORM_ID "RISCos"
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
# define PLATFORM_ID "SINIX"
#elif defined(__UNIX_SV__)
# define PLATFORM_ID "UNIX_SV"
#elif defined(__bsdos__)
# define PLATFORM_ID "BSDOS"
#elif defined(_MPRAS) || defined(MPRAS)
# define PLATFORM_ID "MP-RAS"
#elif defined(__osf) || defined(__osf__)
# define PLATFORM_ID "OSF1"
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
# define PLATFORM_ID "SCO_SV"
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
# define PLATFORM_ID "ULTRIX"
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
# define PLATFORM_ID "Xenix"
#elif defined(__WATCOMC__)
# if defined(__LINUX__)
# define PLATFORM_ID "Linux"
# elif defined(__DOS__)
# define PLATFORM_ID "DOS"
# elif defined(__OS2__)
# define PLATFORM_ID "OS2"
# elif defined(__WINDOWS__)
# define PLATFORM_ID "Windows3x"
# elif defined(__VXWORKS__)
# define PLATFORM_ID "VxWorks"
# else /* unknown platform */
# define PLATFORM_ID
# endif
#elif defined(__INTEGRITY)
# if defined(INT_178B)
# define PLATFORM_ID "Integrity178"
# else /* regular Integrity */
# define PLATFORM_ID "Integrity"
# endif
# elif defined(_ADI_COMPILER)
# define PLATFORM_ID "ADSP"
#else /* unknown platform */
# define PLATFORM_ID
#endif
/* For windows compilers MSVC and Intel we can determine
the architecture of the compiler being used. This is because
the compilers do not have flags that can change the architecture,
but rather depend on which compiler is being used
*/
#if defined(_WIN32) && defined(_MSC_VER)
# if defined(_M_IA64)
# define ARCHITECTURE_ID "IA64"
# elif defined(_M_ARM64EC)
# define ARCHITECTURE_ID "ARM64EC"
# elif defined(_M_X64) || defined(_M_AMD64)
# define ARCHITECTURE_ID "x64"
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
# elif defined(_M_ARM64)
# define ARCHITECTURE_ID "ARM64"
# elif defined(_M_ARM)
# if _M_ARM == 4
# define ARCHITECTURE_ID "ARMV4I"
# elif _M_ARM == 5
# define ARCHITECTURE_ID "ARMV5I"
# else
# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
# endif
# elif defined(_M_MIPS)
# define ARCHITECTURE_ID "MIPS"
# elif defined(_M_SH)
# define ARCHITECTURE_ID "SHx"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__WATCOMC__)
# if defined(_M_I86)
# define ARCHITECTURE_ID "I86"
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
# if defined(__ICCARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__ICCRX__)
# define ARCHITECTURE_ID "RX"
# elif defined(__ICCRH850__)
# define ARCHITECTURE_ID "RH850"
# elif defined(__ICCRL78__)
# define ARCHITECTURE_ID "RL78"
# elif defined(__ICCRISCV__)
# define ARCHITECTURE_ID "RISCV"
# elif defined(__ICCAVR__)
# define ARCHITECTURE_ID "AVR"
# elif defined(__ICC430__)
# define ARCHITECTURE_ID "MSP430"
# elif defined(__ICCV850__)
# define ARCHITECTURE_ID "V850"
# elif defined(__ICC8051__)
# define ARCHITECTURE_ID "8051"
# elif defined(__ICCSTM8__)
# define ARCHITECTURE_ID "STM8"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__ghs__)
# if defined(__PPC64__)
# define ARCHITECTURE_ID "PPC64"
# elif defined(__ppc__)
# define ARCHITECTURE_ID "PPC"
# elif defined(__ARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__x86_64__)
# define ARCHITECTURE_ID "x64"
# elif defined(__i386__)
# define ARCHITECTURE_ID "X86"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__TI_COMPILER_VERSION__)
# if defined(__TI_ARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__MSP430__)
# define ARCHITECTURE_ID "MSP430"
# elif defined(__TMS320C28XX__)
# define ARCHITECTURE_ID "TMS320C28x"
# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
# define ARCHITECTURE_ID "TMS320C6x"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
# elif defined(__ADSPSHARC__)
# define ARCHITECTURE_ID "SHARC"
# elif defined(__ADSPBLACKFIN__)
# define ARCHITECTURE_ID "Blackfin"
#elif defined(__TASKING__)
# if defined(__CTC__) || defined(__CPTC__)
# define ARCHITECTURE_ID "TriCore"
# elif defined(__CMCS__)
# define ARCHITECTURE_ID "MCS"
# elif defined(__CARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__CARC__)
# define ARCHITECTURE_ID "ARC"
# elif defined(__C51__)
# define ARCHITECTURE_ID "8051"
# elif defined(__CPCP__)
# define ARCHITECTURE_ID "PCP"
# else
# define ARCHITECTURE_ID ""
# endif
#else
# define ARCHITECTURE_ID
#endif
/* Convert integer to decimal digit literals. */
#define DEC(n) \
('0' + (((n) / 10000000)%10)), \
('0' + (((n) / 1000000)%10)), \
('0' + (((n) / 100000)%10)), \
('0' + (((n) / 10000)%10)), \
('0' + (((n) / 1000)%10)), \
('0' + (((n) / 100)%10)), \
('0' + (((n) / 10)%10)), \
('0' + ((n) % 10))
/* Convert integer to hex digit literals. */
#define HEX(n) \
('0' + ((n)>>28 & 0xF)), \
('0' + ((n)>>24 & 0xF)), \
('0' + ((n)>>20 & 0xF)), \
('0' + ((n)>>16 & 0xF)), \
('0' + ((n)>>12 & 0xF)), \
('0' + ((n)>>8 & 0xF)), \
('0' + ((n)>>4 & 0xF)), \
('0' + ((n) & 0xF))
/* Construct a string literal encoding the version number. */
#ifdef COMPILER_VERSION
char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
/* Construct a string literal encoding the version number components. */
#elif defined(COMPILER_VERSION_MAJOR)
char const info_version[] = {
'I', 'N', 'F', 'O', ':',
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
COMPILER_VERSION_MAJOR,
# ifdef COMPILER_VERSION_MINOR
'.', COMPILER_VERSION_MINOR,
# ifdef COMPILER_VERSION_PATCH
'.', COMPILER_VERSION_PATCH,
# ifdef COMPILER_VERSION_TWEAK
'.', COMPILER_VERSION_TWEAK,
# endif
# endif
# endif
']','\0'};
#endif
/* Construct a string literal encoding the internal version number. */
#ifdef COMPILER_VERSION_INTERNAL
char const info_version_internal[] = {
'I', 'N', 'F', 'O', ':',
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
'i','n','t','e','r','n','a','l','[',
COMPILER_VERSION_INTERNAL,']','\0'};
#elif defined(COMPILER_VERSION_INTERNAL_STR)
char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
#endif
/* Construct a string literal encoding the version number components. */
#ifdef SIMULATE_VERSION_MAJOR
char const info_simulate_version[] = {
'I', 'N', 'F', 'O', ':',
's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
SIMULATE_VERSION_MAJOR,
# ifdef SIMULATE_VERSION_MINOR
'.', SIMULATE_VERSION_MINOR,
# ifdef SIMULATE_VERSION_PATCH
'.', SIMULATE_VERSION_PATCH,
# ifdef SIMULATE_VERSION_TWEAK
'.', SIMULATE_VERSION_TWEAK,
# endif
# endif
# endif
']','\0'};
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
#if !defined(__STDC__) && !defined(__clang__)
# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__)
# define C_VERSION "90"
# else
# define C_VERSION
# endif
#elif __STDC_VERSION__ > 201710L
# define C_VERSION "23"
#elif __STDC_VERSION__ >= 201710L
# define C_VERSION "17"
#elif __STDC_VERSION__ >= 201000L
# define C_VERSION "11"
#elif __STDC_VERSION__ >= 199901L
# define C_VERSION "99"
#else
# define C_VERSION "90"
#endif
const char* info_language_standard_default =
"INFO" ":" "standard_default[" C_VERSION "]";
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
defined(__TI_COMPILER_VERSION__)) && \
!defined(__STRICT_ANSI__)
"ON"
#else
"OFF"
#endif
"]";
/*--------------------------------------------------------------------------*/
#ifdef ID_VOID_MAIN
void main() {}
#else
# if defined(__CLASSIC_C__)
int main(argc, argv) int argc; char *argv[];
# else
int main(int argc, char* argv[])
# endif
{
int require = 0;
require += info_compiler[argc];
require += info_platform[argc];
require += info_arch[argc];
#ifdef COMPILER_VERSION_MAJOR
require += info_version[argc];
#endif
#ifdef COMPILER_VERSION_INTERNAL
require += info_version_internal[argc];
#endif
#ifdef SIMULATE_ID
require += info_simulate[argc];
#endif
#ifdef SIMULATE_VERSION_MAJOR
require += info_simulate_version[argc];
#endif
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
require += info_cray[argc];
#endif
require += info_language_standard_default[argc];
require += info_language_extensions_default[argc];
(void)argv;
return require;
}
#endif

Binary file not shown.

@ -0,0 +1,869 @@
/* This source file must have a .cpp extension so that all C++ compilers
recognize the extension without flags. Borland does not know .cxx for
example. */
#ifndef __cplusplus
# error "A C compiler has been selected for C++."
#endif
#if !defined(__has_include)
/* If the compiler does not have __has_include, pretend the answer is
always no. */
# define __has_include(x) 0
#endif
/* Version number components: V=Version, R=Revision, P=Patch
Version date components: YYYY=Year, MM=Month, DD=Day */
#if defined(__COMO__)
# define COMPILER_ID "Comeau"
/* __COMO_VERSION__ = VRR */
# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
#elif defined(__INTEL_COMPILER) || defined(__ICC)
# define COMPILER_ID "Intel"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# if defined(__GNUC__)
# define SIMULATE_ID "GNU"
# endif
/* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
except that a few beta releases use the old format with V=2021. */
# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
# if defined(__INTEL_COMPILER_UPDATE)
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
# else
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
# endif
# else
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
/* The third version component from --version is an update index,
but no macro is provided for it. */
# define COMPILER_VERSION_PATCH DEC(0)
# endif
# if defined(__INTEL_COMPILER_BUILD_DATE)
/* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
# endif
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
# if defined(__GNUC__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
# elif defined(__GNUG__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
# endif
# if defined(__GNUC_MINOR__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
# endif
# if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
# define COMPILER_ID "IntelLLVM"
#if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
#endif
#if defined(__GNUC__)
# define SIMULATE_ID "GNU"
#endif
/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
* later. Look for 6 digit vs. 8 digit version number to decide encoding.
* VVVV is no smaller than the current year when a version is released.
*/
#if __INTEL_LLVM_COMPILER < 1000000L
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
#else
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
#endif
#if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
#endif
#if defined(__GNUC__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
#elif defined(__GNUG__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
#endif
#if defined(__GNUC_MINOR__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
#endif
#if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
#endif
#elif defined(__PATHCC__)
# define COMPILER_ID "PathScale"
# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
# if defined(__PATHCC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
# endif
#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
# define COMPILER_ID "Embarcadero"
# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
#elif defined(__BORLANDC__)
# define COMPILER_ID "Borland"
/* __BORLANDC__ = 0xVRR */
# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
# define COMPILER_ID "Watcom"
/* __WATCOMC__ = VVRR */
# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
# if (__WATCOMC__ % 10) > 0
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
# endif
#elif defined(__WATCOMC__)
# define COMPILER_ID "OpenWatcom"
/* __WATCOMC__ = VVRP + 1100 */
# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
# if (__WATCOMC__ % 10) > 0
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
# endif
#elif defined(__SUNPRO_CC)
# define COMPILER_ID "SunPro"
# if __SUNPRO_CC >= 0x5100
/* __SUNPRO_CC = 0xVRRP */
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
# else
/* __SUNPRO_CC = 0xVRP */
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
# endif
#elif defined(__HP_aCC)
# define COMPILER_ID "HP"
/* __HP_aCC = VVRRPP */
# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
#elif defined(__DECCXX)
# define COMPILER_ID "Compaq"
/* __DECCXX_VER = VVRRTPPPP */
# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
# define COMPILER_ID "zOS"
/* __IBMCPP__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
#elif defined(__open_xl__) && defined(__clang__)
# define COMPILER_ID "IBMClang"
# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
# define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
#elif defined(__ibmxl__) && defined(__clang__)
# define COMPILER_ID "XLClang"
# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
# define COMPILER_ID "XL"
/* __IBMCPP__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
# define COMPILER_ID "VisualAge"
/* __IBMCPP__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
#elif defined(__NVCOMPILER)
# define COMPILER_ID "NVHPC"
# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
# if defined(__NVCOMPILER_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
# endif
#elif defined(__PGI)
# define COMPILER_ID "PGI"
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
# if defined(__PGIC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
# endif
#elif defined(__clang__) && defined(__cray__)
# define COMPILER_ID "CrayClang"
# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
#elif defined(_CRAYC)
# define COMPILER_ID "Cray"
# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
#elif defined(__TI_COMPILER_VERSION__)
# define COMPILER_ID "TI"
/* __TI_COMPILER_VERSION__ = VVVRRRPPP */
# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
#elif defined(__CLANG_FUJITSU)
# define COMPILER_ID "FujitsuClang"
# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
#elif defined(__FUJITSU)
# define COMPILER_ID "Fujitsu"
# if defined(__FCC_version__)
# define COMPILER_VERSION __FCC_version__
# elif defined(__FCC_major__)
# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
# endif
# if defined(__fcc_version)
# define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
# elif defined(__FCC_VERSION)
# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
# endif
#elif defined(__ghs__)
# define COMPILER_ID "GHS"
/* __GHS_VERSION_NUMBER = VVVVRP */
# ifdef __GHS_VERSION_NUMBER
# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
# endif
#elif defined(__TASKING__)
# define COMPILER_ID "Tasking"
# define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
# define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
#elif defined(__ORANGEC__)
# define COMPILER_ID "OrangeC"
# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
#elif defined(__SCO_VERSION__)
# define COMPILER_ID "SCO"
#elif defined(__ARMCC_VERSION) && !defined(__clang__)
# define COMPILER_ID "ARMCC"
#if __ARMCC_VERSION >= 1000000
/* __ARMCC_VERSION = VRRPPPP */
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
#else
/* __ARMCC_VERSION = VRPPPP */
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
#endif
#elif defined(__clang__) && defined(__apple_build_version__)
# define COMPILER_ID "AppleClang"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
# define COMPILER_ID "ARMClang"
# define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
# define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
# define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100)
# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
#elif defined(__clang__)
# define COMPILER_ID "Clang"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
# define COMPILER_ID "LCC"
# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
# if defined(__LCC_MINOR__)
# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
# endif
# if defined(__GNUC__) && defined(__GNUC_MINOR__)
# define SIMULATE_ID "GNU"
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
# if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
# endif
#elif defined(__GNUC__) || defined(__GNUG__)
# define COMPILER_ID "GNU"
# if defined(__GNUC__)
# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
# else
# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
# endif
# if defined(__GNUC_MINOR__)
# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
# endif
# if defined(__GNUC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
#elif defined(_MSC_VER)
# define COMPILER_ID "MSVC"
/* _MSC_VER = VVRR */
# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
# if defined(_MSC_FULL_VER)
# if _MSC_VER >= 1400
/* _MSC_FULL_VER = VVRRPPPPP */
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
# else
/* _MSC_FULL_VER = VVRRPPPP */
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
# endif
# endif
# if defined(_MSC_BUILD)
# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
# endif
#elif defined(_ADI_COMPILER)
# define COMPILER_ID "ADSP"
#if defined(__VERSIONNUM__)
/* __VERSIONNUM__ = 0xVVRRPPTT */
# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
#endif
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
# define COMPILER_ID "IAR"
# if defined(__VER__) && defined(__ICCARM__)
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
# endif
/* These compilers are either not known or too old to define an
identification macro. Try to identify the platform and guess that
it is the native compiler. */
#elif defined(__hpux) || defined(__hpua)
# define COMPILER_ID "HP"
#else /* unknown compiler */
# define COMPILER_ID ""
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
#ifdef SIMULATE_ID
char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
#endif
#ifdef __QNXNTO__
char const* qnxnto = "INFO" ":" "qnxnto[]";
#endif
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
#endif
#define STRINGIFY_HELPER(X) #X
#define STRINGIFY(X) STRINGIFY_HELPER(X)
/* Identify known platforms by name. */
#if defined(__linux) || defined(__linux__) || defined(linux)
# define PLATFORM_ID "Linux"
#elif defined(__MSYS__)
# define PLATFORM_ID "MSYS"
#elif defined(__CYGWIN__)
# define PLATFORM_ID "Cygwin"
#elif defined(__MINGW32__)
# define PLATFORM_ID "MinGW"
#elif defined(__APPLE__)
# define PLATFORM_ID "Darwin"
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
# define PLATFORM_ID "Windows"
#elif defined(__FreeBSD__) || defined(__FreeBSD)
# define PLATFORM_ID "FreeBSD"
#elif defined(__NetBSD__) || defined(__NetBSD)
# define PLATFORM_ID "NetBSD"
#elif defined(__OpenBSD__) || defined(__OPENBSD)
# define PLATFORM_ID "OpenBSD"
#elif defined(__sun) || defined(sun)
# define PLATFORM_ID "SunOS"
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
# define PLATFORM_ID "AIX"
#elif defined(__hpux) || defined(__hpux__)
# define PLATFORM_ID "HP-UX"
#elif defined(__HAIKU__)
# define PLATFORM_ID "Haiku"
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
# define PLATFORM_ID "BeOS"
#elif defined(__QNX__) || defined(__QNXNTO__)
# define PLATFORM_ID "QNX"
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
# define PLATFORM_ID "Tru64"
#elif defined(__riscos) || defined(__riscos__)
# define PLATFORM_ID "RISCos"
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
# define PLATFORM_ID "SINIX"
#elif defined(__UNIX_SV__)
# define PLATFORM_ID "UNIX_SV"
#elif defined(__bsdos__)
# define PLATFORM_ID "BSDOS"
#elif defined(_MPRAS) || defined(MPRAS)
# define PLATFORM_ID "MP-RAS"
#elif defined(__osf) || defined(__osf__)
# define PLATFORM_ID "OSF1"
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
# define PLATFORM_ID "SCO_SV"
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
# define PLATFORM_ID "ULTRIX"
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
# define PLATFORM_ID "Xenix"
#elif defined(__WATCOMC__)
# if defined(__LINUX__)
# define PLATFORM_ID "Linux"
# elif defined(__DOS__)
# define PLATFORM_ID "DOS"
# elif defined(__OS2__)
# define PLATFORM_ID "OS2"
# elif defined(__WINDOWS__)
# define PLATFORM_ID "Windows3x"
# elif defined(__VXWORKS__)
# define PLATFORM_ID "VxWorks"
# else /* unknown platform */
# define PLATFORM_ID
# endif
#elif defined(__INTEGRITY)
# if defined(INT_178B)
# define PLATFORM_ID "Integrity178"
# else /* regular Integrity */
# define PLATFORM_ID "Integrity"
# endif
# elif defined(_ADI_COMPILER)
# define PLATFORM_ID "ADSP"
#else /* unknown platform */
# define PLATFORM_ID
#endif
/* For windows compilers MSVC and Intel we can determine
the architecture of the compiler being used. This is because
the compilers do not have flags that can change the architecture,
but rather depend on which compiler is being used
*/
#if defined(_WIN32) && defined(_MSC_VER)
# if defined(_M_IA64)
# define ARCHITECTURE_ID "IA64"
# elif defined(_M_ARM64EC)
# define ARCHITECTURE_ID "ARM64EC"
# elif defined(_M_X64) || defined(_M_AMD64)
# define ARCHITECTURE_ID "x64"
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
# elif defined(_M_ARM64)
# define ARCHITECTURE_ID "ARM64"
# elif defined(_M_ARM)
# if _M_ARM == 4
# define ARCHITECTURE_ID "ARMV4I"
# elif _M_ARM == 5
# define ARCHITECTURE_ID "ARMV5I"
# else
# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
# endif
# elif defined(_M_MIPS)
# define ARCHITECTURE_ID "MIPS"
# elif defined(_M_SH)
# define ARCHITECTURE_ID "SHx"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__WATCOMC__)
# if defined(_M_I86)
# define ARCHITECTURE_ID "I86"
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
# if defined(__ICCARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__ICCRX__)
# define ARCHITECTURE_ID "RX"
# elif defined(__ICCRH850__)
# define ARCHITECTURE_ID "RH850"
# elif defined(__ICCRL78__)
# define ARCHITECTURE_ID "RL78"
# elif defined(__ICCRISCV__)
# define ARCHITECTURE_ID "RISCV"
# elif defined(__ICCAVR__)
# define ARCHITECTURE_ID "AVR"
# elif defined(__ICC430__)
# define ARCHITECTURE_ID "MSP430"
# elif defined(__ICCV850__)
# define ARCHITECTURE_ID "V850"
# elif defined(__ICC8051__)
# define ARCHITECTURE_ID "8051"
# elif defined(__ICCSTM8__)
# define ARCHITECTURE_ID "STM8"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__ghs__)
# if defined(__PPC64__)
# define ARCHITECTURE_ID "PPC64"
# elif defined(__ppc__)
# define ARCHITECTURE_ID "PPC"
# elif defined(__ARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__x86_64__)
# define ARCHITECTURE_ID "x64"
# elif defined(__i386__)
# define ARCHITECTURE_ID "X86"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__TI_COMPILER_VERSION__)
# if defined(__TI_ARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__MSP430__)
# define ARCHITECTURE_ID "MSP430"
# elif defined(__TMS320C28XX__)
# define ARCHITECTURE_ID "TMS320C28x"
# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
# define ARCHITECTURE_ID "TMS320C6x"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
# elif defined(__ADSPSHARC__)
# define ARCHITECTURE_ID "SHARC"
# elif defined(__ADSPBLACKFIN__)
# define ARCHITECTURE_ID "Blackfin"
#elif defined(__TASKING__)
# if defined(__CTC__) || defined(__CPTC__)
# define ARCHITECTURE_ID "TriCore"
# elif defined(__CMCS__)
# define ARCHITECTURE_ID "MCS"
# elif defined(__CARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__CARC__)
# define ARCHITECTURE_ID "ARC"
# elif defined(__C51__)
# define ARCHITECTURE_ID "8051"
# elif defined(__CPCP__)
# define ARCHITECTURE_ID "PCP"
# else
# define ARCHITECTURE_ID ""
# endif
#else
# define ARCHITECTURE_ID
#endif
/* Convert integer to decimal digit literals. */
#define DEC(n) \
('0' + (((n) / 10000000)%10)), \
('0' + (((n) / 1000000)%10)), \
('0' + (((n) / 100000)%10)), \
('0' + (((n) / 10000)%10)), \
('0' + (((n) / 1000)%10)), \
('0' + (((n) / 100)%10)), \
('0' + (((n) / 10)%10)), \
('0' + ((n) % 10))
/* Convert integer to hex digit literals. */
#define HEX(n) \
('0' + ((n)>>28 & 0xF)), \
('0' + ((n)>>24 & 0xF)), \
('0' + ((n)>>20 & 0xF)), \
('0' + ((n)>>16 & 0xF)), \
('0' + ((n)>>12 & 0xF)), \
('0' + ((n)>>8 & 0xF)), \
('0' + ((n)>>4 & 0xF)), \
('0' + ((n) & 0xF))
/* Construct a string literal encoding the version number. */
#ifdef COMPILER_VERSION
char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
/* Construct a string literal encoding the version number components. */
#elif defined(COMPILER_VERSION_MAJOR)
char const info_version[] = {
'I', 'N', 'F', 'O', ':',
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
COMPILER_VERSION_MAJOR,
# ifdef COMPILER_VERSION_MINOR
'.', COMPILER_VERSION_MINOR,
# ifdef COMPILER_VERSION_PATCH
'.', COMPILER_VERSION_PATCH,
# ifdef COMPILER_VERSION_TWEAK
'.', COMPILER_VERSION_TWEAK,
# endif
# endif
# endif
']','\0'};
#endif
/* Construct a string literal encoding the internal version number. */
#ifdef COMPILER_VERSION_INTERNAL
char const info_version_internal[] = {
'I', 'N', 'F', 'O', ':',
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
'i','n','t','e','r','n','a','l','[',
COMPILER_VERSION_INTERNAL,']','\0'};
#elif defined(COMPILER_VERSION_INTERNAL_STR)
char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
#endif
/* Construct a string literal encoding the version number components. */
#ifdef SIMULATE_VERSION_MAJOR
char const info_simulate_version[] = {
'I', 'N', 'F', 'O', ':',
's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
SIMULATE_VERSION_MAJOR,
# ifdef SIMULATE_VERSION_MINOR
'.', SIMULATE_VERSION_MINOR,
# ifdef SIMULATE_VERSION_PATCH
'.', SIMULATE_VERSION_PATCH,
# ifdef SIMULATE_VERSION_TWEAK
'.', SIMULATE_VERSION_TWEAK,
# endif
# endif
# endif
']','\0'};
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
# if defined(__INTEL_CXX11_MODE__)
# if defined(__cpp_aggregate_nsdmi)
# define CXX_STD 201402L
# else
# define CXX_STD 201103L
# endif
# else
# define CXX_STD 199711L
# endif
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
# define CXX_STD _MSVC_LANG
#else
# define CXX_STD __cplusplus
#endif
const char* info_language_standard_default = "INFO" ":" "standard_default["
#if CXX_STD > 202002L
"23"
#elif CXX_STD > 201703L
"20"
#elif CXX_STD >= 201703L
"17"
#elif CXX_STD >= 201402L
"14"
#elif CXX_STD >= 201103L
"11"
#else
"98"
#endif
"]";
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
defined(__TI_COMPILER_VERSION__)) && \
!defined(__STRICT_ANSI__)
"ON"
#else
"OFF"
#endif
"]";
/*--------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
int require = 0;
require += info_compiler[argc];
require += info_platform[argc];
require += info_arch[argc];
#ifdef COMPILER_VERSION_MAJOR
require += info_version[argc];
#endif
#ifdef COMPILER_VERSION_INTERNAL
require += info_version_internal[argc];
#endif
#ifdef SIMULATE_ID
require += info_simulate[argc];
#endif
#ifdef SIMULATE_VERSION_MAJOR
require += info_simulate_version[argc];
#endif
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
require += info_cray[argc];
#endif
require += info_language_standard_default[argc];
require += info_language_extensions_default[argc];
(void)argv;
return require;
}

Binary file not shown.

@ -0,0 +1,508 @@
---
events:
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:233 (message)"
- "CMakeLists.txt:5 (project)"
message: |
The system is: Linux - 6.10.12-200.fc40.x86_64 - x86_64
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)"
- "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)"
- "/usr/share/cmake/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)"
- "CMakeLists.txt:5 (project)"
message: |
Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
Compiler: /usr/bin/cc
Build flags:
Id flags:
The output was:
0
Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"
The C compiler identification is GNU, found in:
/home/hyung-hwan/projects/isocline/bld/CMakeFiles/3.28.2/CompilerIdC/a.out
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)"
- "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)"
- "/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)"
- "CMakeLists.txt:5 (project)"
message: |
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
Compiler: /usr/bin/c++
Build flags:
Id flags:
The output was:
0
Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
The CXX compiler identification is GNU, found in:
/home/hyung-hwan/projects/isocline/bld/CMakeFiles/3.28.2/CompilerIdCXX/a.out
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:1131 (message)"
- "/usr/share/cmake/Modules/CMakeDetermineASMCompiler.cmake:131 (CMAKE_DETERMINE_COMPILER_ID_VENDOR)"
- "CMakeLists.txt:5 (project)"
message: |
Checking whether the ASM compiler is GNU using "--version" matched "(GNU assembler)|(GCC)|(Free Software Foundation)":
cc (GCC) 14.2.1 20240912 (Red Hat 14.2.1-3)
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
kind: "try_compile-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)"
- "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:5 (project)"
checks:
- "Detecting C compiler ABI info"
directories:
source: "/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-TKmhJF"
binary: "/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-TKmhJF"
cmakeVariables:
CMAKE_C_FLAGS: ""
CMAKE_C_FLAGS_DEBUG: "-g"
CMAKE_EXE_LINKER_FLAGS: ""
buildResult:
variable: "CMAKE_C_ABI_COMPILED"
cached: true
stdout: |
Change Dir: '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-TKmhJF'
Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_437a0/fast
/usr/bin/gmake -f CMakeFiles/cmTC_437a0.dir/build.make CMakeFiles/cmTC_437a0.dir/build
gmake[1]: Entering directory '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-TKmhJF'
Building C object CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o
/usr/bin/cc -v -o CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c
Using built-in specs.
COLLECT_GCC=/usr/bin/cc
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.2.1-20240912/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC)
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_437a0.dir/'
/usr/libexec/gcc/x86_64-redhat-linux/14/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_437a0.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o /tmp/ccixmdEM.s
GNU C17 (GCC) version 14.2.1 20240912 (Red Hat 14.2.1-3) (x86_64-redhat-linux)
compiled by GNU C version 14.2.1 20240912 (Red Hat 14.2.1-3), GMP version 6.2.1, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.24-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-redhat-linux/14/include
/usr/local/include
/usr/include
End of search list.
Compiler executable checksum: a827ac3ce32367df3fd4c736df15654d
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_437a0.dir/'
as -v --64 -o CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o /tmp/ccixmdEM.s
GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40
COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/
LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.'
Linking C executable cmTC_437a0
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_437a0.dir/link.txt --verbose=1
/usr/bin/cc -v CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o -o cmTC_437a0
Using built-in specs.
COLLECT_GCC=/usr/bin/cc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.2.1-20240912/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC)
COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/
LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_437a0' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_437a0.'
/usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/cc6OaWFK.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_437a0 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_437a0' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_437a0.'
gmake[1]: Leaving directory '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-TKmhJF'
exitCode: 0
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)"
- "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:5 (project)"
message: |
Parsed C implicit include dir info: rv=done
found start of include info
found start of implicit include info
add: [/usr/lib/gcc/x86_64-redhat-linux/14/include]
add: [/usr/local/include]
add: [/usr/include]
end of search list found
collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/14/include]
collapse include dir [/usr/local/include] ==> [/usr/local/include]
collapse include dir [/usr/include] ==> [/usr/include]
implicit include dirs: [/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include]
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:159 (message)"
- "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:5 (project)"
message: |
Parsed C implicit link information:
link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]
ignore line: [Change Dir: '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-TKmhJF']
ignore line: []
ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_437a0/fast]
ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_437a0.dir/build.make CMakeFiles/cmTC_437a0.dir/build]
ignore line: [gmake[1]: Entering directory '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-TKmhJF']
ignore line: [Building C object CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o]
ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c]
ignore line: [Using built-in specs.]
ignore line: [COLLECT_GCC=/usr/bin/cc]
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa]
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
ignore line: [Target: x86_64-redhat-linux]
ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.2.1-20240912/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1]
ignore line: [Thread model: posix]
ignore line: [Supported LTO compression algorithms: zlib zstd]
ignore line: [gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC) ]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_437a0.dir/']
ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_437a0.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o /tmp/ccixmdEM.s]
ignore line: [GNU C17 (GCC) version 14.2.1 20240912 (Red Hat 14.2.1-3) (x86_64-redhat-linux)]
ignore line: [ compiled by GNU C version 14.2.1 20240912 (Red Hat 14.2.1-3) GMP version 6.2.1 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.24-GMP]
ignore line: []
ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed"]
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include"]
ignore line: [#include "..." search starts here:]
ignore line: [#include <...> search starts here:]
ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/include]
ignore line: [ /usr/local/include]
ignore line: [ /usr/include]
ignore line: [End of search list.]
ignore line: [Compiler executable checksum: a827ac3ce32367df3fd4c736df15654d]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_437a0.dir/']
ignore line: [ as -v --64 -o CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o /tmp/ccixmdEM.s]
ignore line: [GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40]
ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/]
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.']
ignore line: [Linking C executable cmTC_437a0]
ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_437a0.dir/link.txt --verbose=1]
ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o -o cmTC_437a0 ]
ignore line: [Using built-in specs.]
ignore line: [COLLECT_GCC=/usr/bin/cc]
ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper]
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa]
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
ignore line: [Target: x86_64-redhat-linux]
ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.2.1-20240912/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1]
ignore line: [Thread model: posix]
ignore line: [Supported LTO compression algorithms: zlib zstd]
ignore line: [gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC) ]
ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/]
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_437a0' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_437a0.']
link line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/cc6OaWFK.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_437a0 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o]
arg [/usr/libexec/gcc/x86_64-redhat-linux/14/collect2] ==> ignore
arg [-plugin] ==> ignore
arg [/usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so] ==> ignore
arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] ==> ignore
arg [-plugin-opt=-fresolution=/tmp/cc6OaWFK.res] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
arg [-plugin-opt=-pass-through=-lc] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
arg [--build-id] ==> ignore
arg [--no-add-needed] ==> ignore
arg [--eh-frame-hdr] ==> ignore
arg [--hash-style=gnu] ==> ignore
arg [-m] ==> ignore
arg [elf_x86_64] ==> ignore
arg [-dynamic-linker] ==> ignore
arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
arg [-o] ==> ignore
arg [cmTC_437a0] ==> ignore
arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o]
arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o]
arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o]
arg [-L/usr/lib/gcc/x86_64-redhat-linux/14] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14]
arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64]
arg [-L/lib/../lib64] ==> dir [/lib/../lib64]
arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64]
arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..]
arg [CMakeFiles/cmTC_437a0.dir/CMakeCCompilerABI.c.o] ==> ignore
arg [-lgcc] ==> lib [gcc]
arg [--push-state] ==> ignore
arg [--as-needed] ==> ignore
arg [-lgcc_s] ==> lib [gcc_s]
arg [--pop-state] ==> ignore
arg [-lc] ==> lib [c]
arg [-lgcc] ==> lib [gcc]
arg [--push-state] ==> ignore
arg [--as-needed] ==> ignore
arg [-lgcc_s] ==> lib [gcc_s]
arg [--pop-state] ==> ignore
arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o]
arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o]
collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o]
collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o]
collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o]
collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14] ==> [/usr/lib/gcc/x86_64-redhat-linux/14]
collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> [/usr/lib64]
collapse library dir [/lib/../lib64] ==> [/lib64]
collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64]
collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> [/usr/lib]
implicit libs: [gcc;gcc_s;c;gcc;gcc_s]
implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o;/usr/lib64/crtn.o]
implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib]
implicit fwks: []
-
kind: "try_compile-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)"
- "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:5 (project)"
checks:
- "Detecting CXX compiler ABI info"
directories:
source: "/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-CkqpkL"
binary: "/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-CkqpkL"
cmakeVariables:
CMAKE_CXX_FLAGS: ""
CMAKE_CXX_FLAGS_DEBUG: "-g"
CMAKE_EXE_LINKER_FLAGS: ""
buildResult:
variable: "CMAKE_CXX_ABI_COMPILED"
cached: true
stdout: |
Change Dir: '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-CkqpkL'
Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_3e027/fast
/usr/bin/gmake -f CMakeFiles/cmTC_3e027.dir/build.make CMakeFiles/cmTC_3e027.dir/build
gmake[1]: Entering directory '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-CkqpkL'
Building CXX object CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o
/usr/bin/c++ -v -o CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.2.1-20240912/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC)
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_3e027.dir/'
/usr/libexec/gcc/x86_64-redhat-linux/14/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_3e027.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccwotpF6.s
GNU C++17 (GCC) version 14.2.1 20240912 (Red Hat 14.2.1-3) (x86_64-redhat-linux)
compiled by GNU C version 14.2.1 20240912 (Red Hat 14.2.1-3), GMP version 6.2.1, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.24-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14
/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux
/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward
/usr/lib/gcc/x86_64-redhat-linux/14/include
/usr/local/include
/usr/include
End of search list.
Compiler executable checksum: eec2371a83b7453e8c6bc9f634c2b1c3
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_3e027.dir/'
as -v --64 -o CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccwotpF6.s
GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40
COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/
LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.'
Linking CXX executable cmTC_3e027
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3e027.dir/link.txt --verbose=1
/usr/bin/c++ -v CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_3e027
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.2.1-20240912/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC)
COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/
LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_3e027' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_3e027.'
/usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/cctRYQKz.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_3e027 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_3e027' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_3e027.'
gmake[1]: Leaving directory '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-CkqpkL'
exitCode: 0
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)"
- "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:5 (project)"
message: |
Parsed CXX implicit include dir info: rv=done
found start of include info
found start of implicit include info
add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14]
add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux]
add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward]
add: [/usr/lib/gcc/x86_64-redhat-linux/14/include]
add: [/usr/local/include]
add: [/usr/include]
end of search list found
collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14] ==> [/usr/include/c++/14]
collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux] ==> [/usr/include/c++/14/x86_64-redhat-linux]
collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward] ==> [/usr/include/c++/14/backward]
collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/14/include]
collapse include dir [/usr/local/include] ==> [/usr/local/include]
collapse include dir [/usr/include] ==> [/usr/include]
implicit include dirs: [/usr/include/c++/14;/usr/include/c++/14/x86_64-redhat-linux;/usr/include/c++/14/backward;/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include]
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:159 (message)"
- "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:5 (project)"
message: |
Parsed CXX implicit link information:
link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]
ignore line: [Change Dir: '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-CkqpkL']
ignore line: []
ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_3e027/fast]
ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_3e027.dir/build.make CMakeFiles/cmTC_3e027.dir/build]
ignore line: [gmake[1]: Entering directory '/home/hyung-hwan/projects/isocline/bld/CMakeFiles/CMakeScratch/TryCompile-CkqpkL']
ignore line: [Building CXX object CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o]
ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp]
ignore line: [Using built-in specs.]
ignore line: [COLLECT_GCC=/usr/bin/c++]
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa]
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
ignore line: [Target: x86_64-redhat-linux]
ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.2.1-20240912/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1]
ignore line: [Thread model: posix]
ignore line: [Supported LTO compression algorithms: zlib zstd]
ignore line: [gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC) ]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_3e027.dir/']
ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_3e027.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccwotpF6.s]
ignore line: [GNU C++17 (GCC) version 14.2.1 20240912 (Red Hat 14.2.1-3) (x86_64-redhat-linux)]
ignore line: [ compiled by GNU C version 14.2.1 20240912 (Red Hat 14.2.1-3) GMP version 6.2.1 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.24-GMP]
ignore line: []
ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed"]
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include"]
ignore line: [#include "..." search starts here:]
ignore line: [#include <...> search starts here:]
ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14]
ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux]
ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward]
ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/include]
ignore line: [ /usr/local/include]
ignore line: [ /usr/include]
ignore line: [End of search list.]
ignore line: [Compiler executable checksum: eec2371a83b7453e8c6bc9f634c2b1c3]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_3e027.dir/']
ignore line: [ as -v --64 -o CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccwotpF6.s]
ignore line: [GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40]
ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/]
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.']
ignore line: [Linking CXX executable cmTC_3e027]
ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3e027.dir/link.txt --verbose=1]
ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_3e027 ]
ignore line: [Using built-in specs.]
ignore line: [COLLECT_GCC=/usr/bin/c++]
ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper]
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa]
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
ignore line: [Target: x86_64-redhat-linux]
ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.2.1-20240912/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1]
ignore line: [Thread model: posix]
ignore line: [Supported LTO compression algorithms: zlib zstd]
ignore line: [gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC) ]
ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/]
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_3e027' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_3e027.']
link line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/cctRYQKz.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_3e027 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o]
arg [/usr/libexec/gcc/x86_64-redhat-linux/14/collect2] ==> ignore
arg [-plugin] ==> ignore
arg [/usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so] ==> ignore
arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] ==> ignore
arg [-plugin-opt=-fresolution=/tmp/cctRYQKz.res] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
arg [-plugin-opt=-pass-through=-lc] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
arg [--build-id] ==> ignore
arg [--no-add-needed] ==> ignore
arg [--eh-frame-hdr] ==> ignore
arg [--hash-style=gnu] ==> ignore
arg [-m] ==> ignore
arg [elf_x86_64] ==> ignore
arg [-dynamic-linker] ==> ignore
arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
arg [-o] ==> ignore
arg [cmTC_3e027] ==> ignore
arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o]
arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o]
arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o]
arg [-L/usr/lib/gcc/x86_64-redhat-linux/14] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14]
arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64]
arg [-L/lib/../lib64] ==> dir [/lib/../lib64]
arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64]
arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..]
arg [CMakeFiles/cmTC_3e027.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore
arg [-lstdc++] ==> lib [stdc++]
arg [-lm] ==> lib [m]
arg [-lgcc_s] ==> lib [gcc_s]
arg [-lgcc] ==> lib [gcc]
arg [-lc] ==> lib [c]
arg [-lgcc_s] ==> lib [gcc_s]
arg [-lgcc] ==> lib [gcc]
arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o]
arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o]
collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o]
collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o]
collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o]
collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14] ==> [/usr/lib/gcc/x86_64-redhat-linux/14]
collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> [/usr/lib64]
collapse library dir [/lib/../lib64] ==> [/lib64]
collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64]
collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> [/usr/lib]
implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc]
implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o;/usr/lib64/crtn.o]
implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib]
implicit fwks: []
...

@ -0,0 +1,16 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Relative path conversion top directories.
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/hyung-hwan/projects/isocline")
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/hyung-hwan/projects/isocline/bld")
# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)
# The C and CXX include file regular expressions for this directory.
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})

@ -0,0 +1,53 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# The generator used is:
set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
# The top level Makefile was generated from the following files:
set(CMAKE_MAKEFILE_DEPENDS
"CMakeCache.txt"
"/home/hyung-hwan/projects/isocline/CMakeLists.txt"
"CMakeFiles/3.28.2/CMakeASMCompiler.cmake"
"CMakeFiles/3.28.2/CMakeCCompiler.cmake"
"CMakeFiles/3.28.2/CMakeCXXCompiler.cmake"
"CMakeFiles/3.28.2/CMakeSystem.cmake"
"/usr/share/cmake/Modules/CMakeASMInformation.cmake"
"/usr/share/cmake/Modules/CMakeCInformation.cmake"
"/usr/share/cmake/Modules/CMakeCXXInformation.cmake"
"/usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake"
"/usr/share/cmake/Modules/CMakeGenericSystem.cmake"
"/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake"
"/usr/share/cmake/Modules/CMakeLanguageInformation.cmake"
"/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake"
"/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake"
"/usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
"/usr/share/cmake/Modules/Compiler/GNU-ASM.cmake"
"/usr/share/cmake/Modules/Compiler/GNU-C.cmake"
"/usr/share/cmake/Modules/Compiler/GNU-CXX.cmake"
"/usr/share/cmake/Modules/Compiler/GNU.cmake"
"/usr/share/cmake/Modules/Platform/Linux-GNU-C.cmake"
"/usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake"
"/usr/share/cmake/Modules/Platform/Linux-GNU.cmake"
"/usr/share/cmake/Modules/Platform/Linux-Initialize.cmake"
"/usr/share/cmake/Modules/Platform/Linux.cmake"
"/usr/share/cmake/Modules/Platform/UnixPaths.cmake"
)
# The corresponding makefile is:
set(CMAKE_MAKEFILE_OUTPUTS
"Makefile"
"CMakeFiles/cmake.check_cache"
)
# Byproducts of CMake generate step:
set(CMAKE_MAKEFILE_PRODUCTS
"CMakeFiles/CMakeDirectoryInformation.cmake"
)
# Dependency information for all targets:
set(CMAKE_DEPEND_INFO_FILES
"CMakeFiles/isocline.dir/DependInfo.cmake"
"CMakeFiles/example.dir/DependInfo.cmake"
"CMakeFiles/test_colors.dir/DependInfo.cmake"
)

@ -0,0 +1,168 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/hyung-hwan/projects/isocline
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/hyung-hwan/projects/isocline/bld
#=============================================================================
# Directory level rules for the build root directory
# The main recursive "all" target.
all: CMakeFiles/isocline.dir/all
all: CMakeFiles/example.dir/all
all: CMakeFiles/test_colors.dir/all
.PHONY : all
# The main recursive "preinstall" target.
preinstall:
.PHONY : preinstall
# The main recursive "clean" target.
clean: CMakeFiles/isocline.dir/clean
clean: CMakeFiles/example.dir/clean
clean: CMakeFiles/test_colors.dir/clean
.PHONY : clean
#=============================================================================
# Target rules for target CMakeFiles/isocline.dir
# All Build rule for target.
CMakeFiles/isocline.dir/all:
$(MAKE) $(MAKESILENT) -f CMakeFiles/isocline.dir/build.make CMakeFiles/isocline.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/isocline.dir/build.make CMakeFiles/isocline.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=3,4 "Built target isocline"
.PHONY : CMakeFiles/isocline.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/isocline.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/hyung-hwan/projects/isocline/bld/CMakeFiles 2
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/isocline.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/hyung-hwan/projects/isocline/bld/CMakeFiles 0
.PHONY : CMakeFiles/isocline.dir/rule
# Convenience name for target.
isocline: CMakeFiles/isocline.dir/rule
.PHONY : isocline
# clean rule for target.
CMakeFiles/isocline.dir/clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/isocline.dir/build.make CMakeFiles/isocline.dir/clean
.PHONY : CMakeFiles/isocline.dir/clean
#=============================================================================
# Target rules for target CMakeFiles/example.dir
# All Build rule for target.
CMakeFiles/example.dir/all: CMakeFiles/isocline.dir/all
$(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=1,2 "Built target example"
.PHONY : CMakeFiles/example.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/example.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/hyung-hwan/projects/isocline/bld/CMakeFiles 4
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/example.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/hyung-hwan/projects/isocline/bld/CMakeFiles 0
.PHONY : CMakeFiles/example.dir/rule
# Convenience name for target.
example: CMakeFiles/example.dir/rule
.PHONY : example
# clean rule for target.
CMakeFiles/example.dir/clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/clean
.PHONY : CMakeFiles/example.dir/clean
#=============================================================================
# Target rules for target CMakeFiles/test_colors.dir
# All Build rule for target.
CMakeFiles/test_colors.dir/all: CMakeFiles/isocline.dir/all
$(MAKE) $(MAKESILENT) -f CMakeFiles/test_colors.dir/build.make CMakeFiles/test_colors.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/test_colors.dir/build.make CMakeFiles/test_colors.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=5,6 "Built target test_colors"
.PHONY : CMakeFiles/test_colors.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/test_colors.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/hyung-hwan/projects/isocline/bld/CMakeFiles 4
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/test_colors.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/hyung-hwan/projects/isocline/bld/CMakeFiles 0
.PHONY : CMakeFiles/test_colors.dir/rule
# Convenience name for target.
test_colors: CMakeFiles/test_colors.dir/rule
.PHONY : test_colors
# clean rule for target.
CMakeFiles/test_colors.dir/clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/test_colors.dir/build.make CMakeFiles/test_colors.dir/clean
.PHONY : CMakeFiles/test_colors.dir/clean
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system

@ -0,0 +1,5 @@
/home/hyung-hwan/projects/isocline/bld/CMakeFiles/isocline.dir
/home/hyung-hwan/projects/isocline/bld/CMakeFiles/example.dir
/home/hyung-hwan/projects/isocline/bld/CMakeFiles/test_colors.dir
/home/hyung-hwan/projects/isocline/bld/CMakeFiles/edit_cache.dir
/home/hyung-hwan/projects/isocline/bld/CMakeFiles/rebuild_cache.dir

@ -0,0 +1 @@
# This file is generated by cmake for dependency checking of the CMakeCache.txt file

@ -0,0 +1,23 @@
# Consider dependencies only in project.
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
)
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
"/home/hyung-hwan/projects/isocline/test/example.c" "CMakeFiles/example.dir/test/example.c.o" "gcc" "CMakeFiles/example.dir/test/example.c.o.d"
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
)
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")

@ -0,0 +1,111 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/hyung-hwan/projects/isocline
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/hyung-hwan/projects/isocline/bld
# Include any dependencies generated for this target.
include CMakeFiles/example.dir/depend.make
# Include any dependencies generated by the compiler for this target.
include CMakeFiles/example.dir/compiler_depend.make
# Include the progress variables for this target.
include CMakeFiles/example.dir/progress.make
# Include the compile flags for this target's objects.
include CMakeFiles/example.dir/flags.make
CMakeFiles/example.dir/test/example.c.o: CMakeFiles/example.dir/flags.make
CMakeFiles/example.dir/test/example.c.o: /home/hyung-hwan/projects/isocline/test/example.c
CMakeFiles/example.dir/test/example.c.o: CMakeFiles/example.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/example.dir/test/example.c.o"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/example.dir/test/example.c.o -MF CMakeFiles/example.dir/test/example.c.o.d -o CMakeFiles/example.dir/test/example.c.o -c /home/hyung-hwan/projects/isocline/test/example.c
CMakeFiles/example.dir/test/example.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/example.dir/test/example.c.i"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/hyung-hwan/projects/isocline/test/example.c > CMakeFiles/example.dir/test/example.c.i
CMakeFiles/example.dir/test/example.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/example.dir/test/example.c.s"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/hyung-hwan/projects/isocline/test/example.c -o CMakeFiles/example.dir/test/example.c.s
# Object files for target example
example_OBJECTS = \
"CMakeFiles/example.dir/test/example.c.o"
# External object files for target example
example_EXTERNAL_OBJECTS =
example: CMakeFiles/example.dir/test/example.c.o
example: CMakeFiles/example.dir/build.make
example: libisocline.a
example: CMakeFiles/example.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable example"
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/example.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
CMakeFiles/example.dir/build: example
.PHONY : CMakeFiles/example.dir/build
CMakeFiles/example.dir/clean:
$(CMAKE_COMMAND) -P CMakeFiles/example.dir/cmake_clean.cmake
.PHONY : CMakeFiles/example.dir/clean
CMakeFiles/example.dir/depend:
cd /home/hyung-hwan/projects/isocline/bld && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/hyung-hwan/projects/isocline /home/hyung-hwan/projects/isocline /home/hyung-hwan/projects/isocline/bld /home/hyung-hwan/projects/isocline/bld /home/hyung-hwan/projects/isocline/bld/CMakeFiles/example.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : CMakeFiles/example.dir/depend

@ -0,0 +1,11 @@
file(REMOVE_RECURSE
"CMakeFiles/example.dir/test/example.c.o"
"CMakeFiles/example.dir/test/example.c.o.d"
"example"
"example.pdb"
)
# Per-language clean rules from dependency scanning.
foreach(lang C)
include(CMakeFiles/example.dir/cmake_clean_${lang}.cmake OPTIONAL)
endforeach()

@ -0,0 +1,76 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
CMakeFiles/example.dir/test/example.c.o
/home/hyung-hwan/projects/isocline/test/example.c
/home/hyung-hwan/projects/isocline/include/isocline.h
/usr/include/alloca.h
/usr/include/assert.h
/usr/include/bits/atomic_wide_counter.h
/usr/include/bits/byteswap.h
/usr/include/bits/endian.h
/usr/include/bits/endianness.h
/usr/include/bits/floatn-common.h
/usr/include/bits/floatn.h
/usr/include/bits/libc-header-start.h
/usr/include/bits/locale.h
/usr/include/bits/long-double.h
/usr/include/bits/pthreadtypes-arch.h
/usr/include/bits/pthreadtypes.h
/usr/include/bits/select.h
/usr/include/bits/stdint-intn.h
/usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
/usr/include/bits/stdlib-bsearch.h
/usr/include/bits/stdlib-float.h
/usr/include/bits/struct_mutex.h
/usr/include/bits/struct_rwlock.h
/usr/include/bits/thread-shared-types.h
/usr/include/bits/time64.h
/usr/include/bits/timesize.h
/usr/include/bits/types.h
/usr/include/bits/types/FILE.h
/usr/include/bits/types/__FILE.h
/usr/include/bits/types/__fpos64_t.h
/usr/include/bits/types/__fpos_t.h
/usr/include/bits/types/__locale_t.h
/usr/include/bits/types/__mbstate_t.h
/usr/include/bits/types/__sigset_t.h
/usr/include/bits/types/clock_t.h
/usr/include/bits/types/clockid_t.h
/usr/include/bits/types/cookie_io_functions_t.h
/usr/include/bits/types/locale_t.h
/usr/include/bits/types/sigset_t.h
/usr/include/bits/types/struct_FILE.h
/usr/include/bits/types/struct_timespec.h
/usr/include/bits/types/struct_timeval.h
/usr/include/bits/types/time_t.h
/usr/include/bits/types/timer_t.h
/usr/include/bits/typesizes.h
/usr/include/bits/uintn-identity.h
/usr/include/bits/waitflags.h
/usr/include/bits/waitstatus.h
/usr/include/bits/wchar.h
/usr/include/bits/wordsize.h
/usr/include/endian.h
/usr/include/features-time64.h
/usr/include/features.h
/usr/include/gnu/stubs-64.h
/usr/include/gnu/stubs.h
/usr/include/locale.h
/usr/include/stdc-predef.h
/usr/include/stdint.h
/usr/include/stdio.h
/usr/include/stdlib.h
/usr/include/string.h
/usr/include/strings.h
/usr/include/sys/cdefs.h
/usr/include/sys/select.h
/usr/include/sys/types.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h

@ -0,0 +1,217 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
CMakeFiles/example.dir/test/example.c.o: /home/hyung-hwan/projects/isocline/test/example.c \
/home/hyung-hwan/projects/isocline/include/isocline.h \
/usr/include/alloca.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/byteswap.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/select.h \
/usr/include/bits/stdint-intn.h \
/usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/stdlib-bsearch.h \
/usr/include/bits/stdlib-float.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/sigset_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/uintn-identity.h \
/usr/include/bits/waitflags.h \
/usr/include/bits/waitstatus.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/endian.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/locale.h \
/usr/include/stdc-predef.h \
/usr/include/stdint.h \
/usr/include/stdio.h \
/usr/include/stdlib.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/select.h \
/usr/include/sys/types.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h:
/usr/include/sys/types.h:
/usr/include/sys/select.h:
/usr/include/sys/cdefs.h:
/usr/include/stdlib.h:
/usr/include/stdint.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h:
/usr/include/string.h:
/usr/include/bits/time64.h:
/usr/include/bits/byteswap.h:
/usr/include/bits/types.h:
/usr/include/bits/stdlib-bsearch.h:
/usr/include/bits/types/sigset_t.h:
/usr/include/bits/thread-shared-types.h:
/usr/include/bits/wchar.h:
/usr/include/bits/stdio.h:
/usr/include/features.h:
/usr/include/bits/stdint-least.h:
/usr/include/alloca.h:
/usr/include/bits/stdint-intn.h:
/usr/include/bits/struct_mutex.h:
/usr/include/gnu/stubs-64.h:
/usr/include/bits/select.h:
/usr/include/bits/types/__fpos64_t.h:
/usr/include/features-time64.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h:
/usr/include/stdc-predef.h:
/usr/include/bits/pthreadtypes-arch.h:
/usr/include/strings.h:
/home/hyung-hwan/projects/isocline/test/example.c:
/usr/include/bits/struct_rwlock.h:
/usr/include/bits/types/time_t.h:
/usr/include/bits/libc-header-start.h:
/usr/include/assert.h:
/usr/include/bits/locale.h:
/usr/include/bits/timesize.h:
/usr/include/bits/endian.h:
/usr/include/bits/types/__sigset_t.h:
/usr/include/bits/waitflags.h:
/home/hyung-hwan/projects/isocline/include/isocline.h:
/usr/include/bits/endianness.h:
/usr/include/bits/floatn-common.h:
/usr/include/bits/long-double.h:
/usr/include/bits/pthreadtypes.h:
/usr/include/bits/floatn.h:
/usr/include/bits/types/FILE.h:
/usr/include/bits/stdlib-float.h:
/usr/include/bits/types/__FILE.h:
/usr/include/bits/types/__fpos_t.h:
/usr/include/bits/wordsize.h:
/usr/include/bits/types/__locale_t.h:
/usr/include/bits/types/__mbstate_t.h:
/usr/include/bits/types/clock_t.h:
/usr/include/bits/atomic_wide_counter.h:
/usr/include/bits/types/clockid_t.h:
/usr/include/bits/uintn-identity.h:
/usr/include/bits/typesizes.h:
/usr/include/bits/types/locale_t.h:
/usr/include/bits/types/struct_FILE.h:
/usr/include/bits/types/struct_timespec.h:
/usr/include/bits/stdio_lim.h:
/usr/include/bits/types/struct_timeval.h:
/usr/include/stdio.h:
/usr/include/bits/types/timer_t.h:
/usr/include/bits/stdint-uintn.h:
/usr/include/bits/types/cookie_io_functions_t.h:
/usr/include/endian.h:
/usr/include/bits/waitstatus.h:
/usr/include/locale.h:
/usr/include/gnu/stubs.h:

@ -0,0 +1,2 @@
# CMAKE generated file: DO NOT EDIT!
# Timestamp file for compiler generated dependencies management for example.

@ -0,0 +1,2 @@
# Empty dependencies file for example.
# This may be replaced when dependencies are built.

@ -0,0 +1,10 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# compile C with /usr/bin/cc
C_DEFINES =
C_INCLUDES = -I/home/hyung-hwan/projects/isocline/include
C_FLAGS = -O3 -DNDEBUG -std=gnu99 -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -Wno-unused-function -Wno-padded -Wno-missing-field-initializers -Wsign-conversion -Wno-missing-braces -Wint-conversion

@ -0,0 +1 @@
/usr/bin/cc -O3 -DNDEBUG CMakeFiles/example.dir/test/example.c.o -o example libisocline.a

@ -0,0 +1,3 @@
CMAKE_PROGRESS_1 = 1
CMAKE_PROGRESS_2 = 2

Binary file not shown.

@ -0,0 +1,42 @@
CMakeFiles/example.dir/test/example.c.o: \
/home/hyung-hwan/projects/isocline/test/example.c \
/usr/include/stdc-predef.h /usr/include/assert.h /usr/include/features.h \
/usr/include/features-time64.h /usr/include/bits/wordsize.h \
/usr/include/bits/timesize.h /usr/include/sys/cdefs.h \
/usr/include/bits/long-double.h /usr/include/gnu/stubs.h \
/usr/include/gnu/stubs-64.h /usr/include/stdio.h \
/usr/include/bits/libc-header-start.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
/usr/include/bits/types.h /usr/include/bits/typesizes.h \
/usr/include/bits/time64.h /usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \
/usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \
/usr/include/bits/floatn-common.h /usr/include/bits/stdio.h \
/usr/include/stdlib.h /usr/include/bits/waitflags.h \
/usr/include/bits/waitstatus.h /usr/include/sys/types.h \
/usr/include/bits/types/clock_t.h /usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/time_t.h /usr/include/bits/types/timer_t.h \
/usr/include/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/bits/endian.h /usr/include/bits/endianness.h \
/usr/include/bits/byteswap.h /usr/include/bits/uintn-identity.h \
/usr/include/sys/select.h /usr/include/bits/select.h \
/usr/include/bits/types/sigset_t.h /usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/atomic_wide_counter.h /usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
/usr/include/string.h /usr/include/bits/types/locale_t.h \
/usr/include/bits/types/__locale_t.h /usr/include/strings.h \
/usr/include/locale.h /usr/include/bits/locale.h \
/home/hyung-hwan/projects/isocline/include/isocline.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
/usr/include/stdint.h /usr/include/bits/wchar.h \
/usr/include/bits/stdint-uintn.h /usr/include/bits/stdint-least.h

@ -0,0 +1,23 @@
# Consider dependencies only in project.
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
)
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
"/home/hyung-hwan/projects/isocline/src/isocline.c" "CMakeFiles/isocline.dir/src/isocline.c.o" "gcc" "CMakeFiles/isocline.dir/src/isocline.c.o.d"
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
)
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")

@ -0,0 +1,111 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/hyung-hwan/projects/isocline
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/hyung-hwan/projects/isocline/bld
# Include any dependencies generated for this target.
include CMakeFiles/isocline.dir/depend.make
# Include any dependencies generated by the compiler for this target.
include CMakeFiles/isocline.dir/compiler_depend.make
# Include the progress variables for this target.
include CMakeFiles/isocline.dir/progress.make
# Include the compile flags for this target's objects.
include CMakeFiles/isocline.dir/flags.make
CMakeFiles/isocline.dir/src/isocline.c.o: CMakeFiles/isocline.dir/flags.make
CMakeFiles/isocline.dir/src/isocline.c.o: /home/hyung-hwan/projects/isocline/src/isocline.c
CMakeFiles/isocline.dir/src/isocline.c.o: CMakeFiles/isocline.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/isocline.dir/src/isocline.c.o"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/isocline.dir/src/isocline.c.o -MF CMakeFiles/isocline.dir/src/isocline.c.o.d -o CMakeFiles/isocline.dir/src/isocline.c.o -c /home/hyung-hwan/projects/isocline/src/isocline.c
CMakeFiles/isocline.dir/src/isocline.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/isocline.dir/src/isocline.c.i"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/hyung-hwan/projects/isocline/src/isocline.c > CMakeFiles/isocline.dir/src/isocline.c.i
CMakeFiles/isocline.dir/src/isocline.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/isocline.dir/src/isocline.c.s"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/hyung-hwan/projects/isocline/src/isocline.c -o CMakeFiles/isocline.dir/src/isocline.c.s
# Object files for target isocline
isocline_OBJECTS = \
"CMakeFiles/isocline.dir/src/isocline.c.o"
# External object files for target isocline
isocline_EXTERNAL_OBJECTS =
libisocline.a: CMakeFiles/isocline.dir/src/isocline.c.o
libisocline.a: CMakeFiles/isocline.dir/build.make
libisocline.a: CMakeFiles/isocline.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C static library libisocline.a"
$(CMAKE_COMMAND) -P CMakeFiles/isocline.dir/cmake_clean_target.cmake
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/isocline.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
CMakeFiles/isocline.dir/build: libisocline.a
.PHONY : CMakeFiles/isocline.dir/build
CMakeFiles/isocline.dir/clean:
$(CMAKE_COMMAND) -P CMakeFiles/isocline.dir/cmake_clean.cmake
.PHONY : CMakeFiles/isocline.dir/clean
CMakeFiles/isocline.dir/depend:
cd /home/hyung-hwan/projects/isocline/bld && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/hyung-hwan/projects/isocline /home/hyung-hwan/projects/isocline /home/hyung-hwan/projects/isocline/bld /home/hyung-hwan/projects/isocline/bld /home/hyung-hwan/projects/isocline/bld/CMakeFiles/isocline.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : CMakeFiles/isocline.dir/depend

@ -0,0 +1,11 @@
file(REMOVE_RECURSE
"CMakeFiles/isocline.dir/src/isocline.c.o"
"CMakeFiles/isocline.dir/src/isocline.c.o.d"
"libisocline.a"
"libisocline.pdb"
)
# Per-language clean rules from dependency scanning.
foreach(lang C)
include(CMakeFiles/isocline.dir/cmake_clean_${lang}.cmake OPTIONAL)
endforeach()

@ -0,0 +1,3 @@
file(REMOVE_RECURSE
"libisocline.a"
)

@ -0,0 +1,190 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
CMakeFiles/isocline.dir/src/isocline.c.o
/home/hyung-hwan/projects/isocline/src/isocline.c
/home/hyung-hwan/projects/isocline/include/isocline.h
/home/hyung-hwan/projects/isocline/src/attr.c
/home/hyung-hwan/projects/isocline/src/attr.h
/home/hyung-hwan/projects/isocline/src/bbcode.c
/home/hyung-hwan/projects/isocline/src/bbcode.h
/home/hyung-hwan/projects/isocline/src/bbcode_colors.c
/home/hyung-hwan/projects/isocline/src/common.c
/home/hyung-hwan/projects/isocline/src/common.h
/home/hyung-hwan/projects/isocline/src/completers.c
/home/hyung-hwan/projects/isocline/src/completions.c
/home/hyung-hwan/projects/isocline/src/completions.h
/home/hyung-hwan/projects/isocline/src/editline.c
/home/hyung-hwan/projects/isocline/src/editline_completion.c
/home/hyung-hwan/projects/isocline/src/editline_help.c
/home/hyung-hwan/projects/isocline/src/editline_history.c
/home/hyung-hwan/projects/isocline/src/env.h
/home/hyung-hwan/projects/isocline/src/highlight.c
/home/hyung-hwan/projects/isocline/src/highlight.h
/home/hyung-hwan/projects/isocline/src/history.c
/home/hyung-hwan/projects/isocline/src/history.h
/home/hyung-hwan/projects/isocline/src/stringbuf.c
/home/hyung-hwan/projects/isocline/src/stringbuf.h
/home/hyung-hwan/projects/isocline/src/term.c
/home/hyung-hwan/projects/isocline/src/term.h
/home/hyung-hwan/projects/isocline/src/term_color.c
/home/hyung-hwan/projects/isocline/src/tty.c
/home/hyung-hwan/projects/isocline/src/tty.h
/home/hyung-hwan/projects/isocline/src/tty_esc.c
/home/hyung-hwan/projects/isocline/src/undo.c
/home/hyung-hwan/projects/isocline/src/undo.h
/home/hyung-hwan/projects/isocline/src/wcwidth.c
/usr/include/alloca.h
/usr/include/asm-generic/bitsperlong.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
/usr/include/asm-generic/int-ll64.h
/usr/include/asm-generic/ioctl.h
/usr/include/asm-generic/ioctls.h
/usr/include/asm-generic/posix_types.h
/usr/include/asm-generic/types.h
/usr/include/asm/bitsperlong.h
/usr/include/asm/errno.h
/usr/include/asm/ioctl.h
/usr/include/asm/ioctls.h
/usr/include/asm/posix_types.h
/usr/include/asm/posix_types_64.h
/usr/include/asm/types.h
/usr/include/assert.h
/usr/include/bits/atomic_wide_counter.h
/usr/include/bits/byteswap.h
/usr/include/bits/confname.h
/usr/include/bits/dirent.h
/usr/include/bits/dirent_ext.h
/usr/include/bits/endian.h
/usr/include/bits/endianness.h
/usr/include/bits/environments.h
/usr/include/bits/errno.h
/usr/include/bits/floatn-common.h
/usr/include/bits/floatn.h
/usr/include/bits/getopt_core.h
/usr/include/bits/getopt_posix.h
/usr/include/bits/ioctl-types.h
/usr/include/bits/ioctls.h
/usr/include/bits/libc-header-start.h
/usr/include/bits/local_lim.h
/usr/include/bits/locale.h
/usr/include/bits/long-double.h
/usr/include/bits/posix1_lim.h
/usr/include/bits/posix2_lim.h
/usr/include/bits/posix_opt.h
/usr/include/bits/pthread_stack_min-dynamic.h
/usr/include/bits/pthread_stack_min.h
/usr/include/bits/pthreadtypes-arch.h
/usr/include/bits/pthreadtypes.h
/usr/include/bits/select.h
/usr/include/bits/sigaction.h
/usr/include/bits/sigcontext.h
/usr/include/bits/sigevent-consts.h
/usr/include/bits/siginfo-arch.h
/usr/include/bits/siginfo-consts.h
/usr/include/bits/signal_ext.h
/usr/include/bits/signum-arch.h
/usr/include/bits/signum-generic.h
/usr/include/bits/sigstack.h
/usr/include/bits/sigstksz.h
/usr/include/bits/sigthread.h
/usr/include/bits/ss_flags.h
/usr/include/bits/stat.h
/usr/include/bits/stdint-intn.h
/usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
/usr/include/bits/stdlib-bsearch.h
/usr/include/bits/stdlib-float.h
/usr/include/bits/struct_mutex.h
/usr/include/bits/struct_rwlock.h
/usr/include/bits/struct_stat.h
/usr/include/bits/termios-baud.h
/usr/include/bits/termios-c_cc.h
/usr/include/bits/termios-c_cflag.h
/usr/include/bits/termios-c_iflag.h
/usr/include/bits/termios-c_lflag.h
/usr/include/bits/termios-c_oflag.h
/usr/include/bits/termios-misc.h
/usr/include/bits/termios-struct.h
/usr/include/bits/termios-tcflow.h
/usr/include/bits/termios.h
/usr/include/bits/thread-shared-types.h
/usr/include/bits/time64.h
/usr/include/bits/timesize.h
/usr/include/bits/types.h
/usr/include/bits/types/FILE.h
/usr/include/bits/types/__FILE.h
/usr/include/bits/types/__fpos64_t.h
/usr/include/bits/types/__fpos_t.h
/usr/include/bits/types/__locale_t.h
/usr/include/bits/types/__mbstate_t.h
/usr/include/bits/types/__sigset_t.h
/usr/include/bits/types/__sigval_t.h
/usr/include/bits/types/clock_t.h
/usr/include/bits/types/clockid_t.h
/usr/include/bits/types/cookie_io_functions_t.h
/usr/include/bits/types/locale_t.h
/usr/include/bits/types/sig_atomic_t.h
/usr/include/bits/types/sigevent_t.h
/usr/include/bits/types/siginfo_t.h
/usr/include/bits/types/sigset_t.h
/usr/include/bits/types/sigval_t.h
/usr/include/bits/types/stack_t.h
/usr/include/bits/types/struct_FILE.h
/usr/include/bits/types/struct_sigstack.h
/usr/include/bits/types/struct_timespec.h
/usr/include/bits/types/struct_timeval.h
/usr/include/bits/types/time_t.h
/usr/include/bits/types/timer_t.h
/usr/include/bits/typesizes.h
/usr/include/bits/uintn-identity.h
/usr/include/bits/uio_lim.h
/usr/include/bits/unistd_ext.h
/usr/include/bits/waitflags.h
/usr/include/bits/waitstatus.h
/usr/include/bits/wchar.h
/usr/include/bits/wordsize.h
/usr/include/bits/xopen_lim.h
/usr/include/dirent.h
/usr/include/endian.h
/usr/include/errno.h
/usr/include/features-time64.h
/usr/include/features.h
/usr/include/gnu/stubs-64.h
/usr/include/gnu/stubs.h
/usr/include/inttypes.h
/usr/include/limits.h
/usr/include/linux/errno.h
/usr/include/linux/ioctl.h
/usr/include/linux/kd.h
/usr/include/linux/limits.h
/usr/include/linux/posix_types.h
/usr/include/linux/stddef.h
/usr/include/linux/types.h
/usr/include/locale.h
/usr/include/signal.h
/usr/include/stdc-predef.h
/usr/include/stdint.h
/usr/include/stdio.h
/usr/include/stdlib.h
/usr/include/string.h
/usr/include/strings.h
/usr/include/sys/cdefs.h
/usr/include/sys/ioctl.h
/usr/include/sys/select.h
/usr/include/sys/stat.h
/usr/include/sys/ttydefaults.h
/usr/include/sys/types.h
/usr/include/sys/ucontext.h
/usr/include/termios.h
/usr/include/unistd.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/limits.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/syslimits.h

@ -0,0 +1,559 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
CMakeFiles/isocline.dir/src/isocline.c.o: /home/hyung-hwan/projects/isocline/src/isocline.c \
/home/hyung-hwan/projects/isocline/include/isocline.h \
/home/hyung-hwan/projects/isocline/src/attr.c \
/home/hyung-hwan/projects/isocline/src/attr.h \
/home/hyung-hwan/projects/isocline/src/bbcode.c \
/home/hyung-hwan/projects/isocline/src/bbcode.h \
/home/hyung-hwan/projects/isocline/src/bbcode_colors.c \
/home/hyung-hwan/projects/isocline/src/common.c \
/home/hyung-hwan/projects/isocline/src/common.h \
/home/hyung-hwan/projects/isocline/src/completers.c \
/home/hyung-hwan/projects/isocline/src/completions.c \
/home/hyung-hwan/projects/isocline/src/completions.h \
/home/hyung-hwan/projects/isocline/src/editline.c \
/home/hyung-hwan/projects/isocline/src/editline_completion.c \
/home/hyung-hwan/projects/isocline/src/editline_help.c \
/home/hyung-hwan/projects/isocline/src/editline_history.c \
/home/hyung-hwan/projects/isocline/src/env.h \
/home/hyung-hwan/projects/isocline/src/highlight.c \
/home/hyung-hwan/projects/isocline/src/highlight.h \
/home/hyung-hwan/projects/isocline/src/history.c \
/home/hyung-hwan/projects/isocline/src/history.h \
/home/hyung-hwan/projects/isocline/src/stringbuf.c \
/home/hyung-hwan/projects/isocline/src/stringbuf.h \
/home/hyung-hwan/projects/isocline/src/term.c \
/home/hyung-hwan/projects/isocline/src/term.h \
/home/hyung-hwan/projects/isocline/src/term_color.c \
/home/hyung-hwan/projects/isocline/src/tty.c \
/home/hyung-hwan/projects/isocline/src/tty.h \
/home/hyung-hwan/projects/isocline/src/tty_esc.c \
/home/hyung-hwan/projects/isocline/src/undo.c \
/home/hyung-hwan/projects/isocline/src/undo.h \
/home/hyung-hwan/projects/isocline/src/wcwidth.c \
/usr/include/alloca.h \
/usr/include/asm-generic/bitsperlong.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm-generic/int-ll64.h \
/usr/include/asm-generic/ioctl.h \
/usr/include/asm-generic/ioctls.h \
/usr/include/asm-generic/posix_types.h \
/usr/include/asm-generic/types.h \
/usr/include/asm/bitsperlong.h \
/usr/include/asm/errno.h \
/usr/include/asm/ioctl.h \
/usr/include/asm/ioctls.h \
/usr/include/asm/posix_types.h \
/usr/include/asm/posix_types_64.h \
/usr/include/asm/types.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/byteswap.h \
/usr/include/bits/confname.h \
/usr/include/bits/dirent.h \
/usr/include/bits/dirent_ext.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/ioctl-types.h \
/usr/include/bits/ioctls.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/local_lim.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix1_lim.h \
/usr/include/bits/posix2_lim.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthread_stack_min.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/select.h \
/usr/include/bits/sigaction.h \
/usr/include/bits/sigcontext.h \
/usr/include/bits/sigevent-consts.h \
/usr/include/bits/siginfo-arch.h \
/usr/include/bits/siginfo-consts.h \
/usr/include/bits/signal_ext.h \
/usr/include/bits/signum-arch.h \
/usr/include/bits/signum-generic.h \
/usr/include/bits/sigstack.h \
/usr/include/bits/sigstksz.h \
/usr/include/bits/sigthread.h \
/usr/include/bits/ss_flags.h \
/usr/include/bits/stat.h \
/usr/include/bits/stdint-intn.h \
/usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/stdlib-bsearch.h \
/usr/include/bits/stdlib-float.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/struct_stat.h \
/usr/include/bits/termios-baud.h \
/usr/include/bits/termios-c_cc.h \
/usr/include/bits/termios-c_cflag.h \
/usr/include/bits/termios-c_iflag.h \
/usr/include/bits/termios-c_lflag.h \
/usr/include/bits/termios-c_oflag.h \
/usr/include/bits/termios-misc.h \
/usr/include/bits/termios-struct.h \
/usr/include/bits/termios-tcflow.h \
/usr/include/bits/termios.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/__sigval_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/sig_atomic_t.h \
/usr/include/bits/types/sigevent_t.h \
/usr/include/bits/types/siginfo_t.h \
/usr/include/bits/types/sigset_t.h \
/usr/include/bits/types/sigval_t.h \
/usr/include/bits/types/stack_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct_sigstack.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/uintn-identity.h \
/usr/include/bits/uio_lim.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/waitflags.h \
/usr/include/bits/waitstatus.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/bits/xopen_lim.h \
/usr/include/dirent.h \
/usr/include/endian.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/inttypes.h \
/usr/include/limits.h \
/usr/include/linux/errno.h \
/usr/include/linux/ioctl.h \
/usr/include/linux/kd.h \
/usr/include/linux/limits.h \
/usr/include/linux/posix_types.h \
/usr/include/linux/stddef.h \
/usr/include/linux/types.h \
/usr/include/locale.h \
/usr/include/signal.h \
/usr/include/stdc-predef.h \
/usr/include/stdint.h \
/usr/include/stdio.h \
/usr/include/stdlib.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/ioctl.h \
/usr/include/sys/select.h \
/usr/include/sys/stat.h \
/usr/include/sys/ttydefaults.h \
/usr/include/sys/types.h \
/usr/include/sys/ucontext.h \
/usr/include/termios.h \
/usr/include/unistd.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/limits.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/syslimits.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/limits.h:
/usr/include/unistd.h:
/usr/include/termios.h:
/usr/include/sys/types.h:
/usr/include/sys/select.h:
/usr/include/sys/cdefs.h:
/usr/include/strings.h:
/usr/include/string.h:
/usr/include/stdlib.h:
/usr/include/stdio.h:
/usr/include/signal.h:
/usr/include/linux/posix_types.h:
/usr/include/stdint.h:
/usr/include/linux/limits.h:
/usr/include/linux/types.h:
/usr/include/linux/ioctl.h:
/usr/include/linux/errno.h:
/usr/include/limits.h:
/usr/include/inttypes.h:
/usr/include/gnu/stubs-64.h:
/usr/include/features-time64.h:
/usr/include/endian.h:
/usr/include/dirent.h:
/usr/include/bits/xopen_lim.h:
/usr/include/bits/wordsize.h:
/usr/include/bits/waitflags.h:
/usr/include/bits/unistd_ext.h:
/usr/include/bits/uio_lim.h:
/usr/include/bits/uintn-identity.h:
/usr/include/bits/types/timer_t.h:
/usr/include/bits/types/struct_timeval.h:
/usr/include/bits/types/struct_sigstack.h:
/usr/include/bits/types/sigval_t.h:
/usr/include/bits/types/sigset_t.h:
/usr/include/bits/environments.h:
/usr/include/bits/dirent_ext.h:
/usr/include/bits/dirent.h:
/usr/include/bits/byteswap.h:
/usr/include/bits/confname.h:
/usr/include/bits/errno.h:
/usr/include/bits/types/clockid_t.h:
/usr/include/asm/types.h:
/usr/include/asm/posix_types.h:
/usr/include/asm/posix_types_64.h:
/usr/include/sys/stat.h:
/usr/include/bits/types/struct_FILE.h:
/usr/include/bits/ss_flags.h:
/usr/include/assert.h:
/usr/include/bits/stat.h:
/usr/include/asm/bitsperlong.h:
/usr/include/bits/sigcontext.h:
/usr/include/asm/ioctl.h:
/usr/include/asm-generic/errno.h:
/usr/include/bits/types/siginfo_t.h:
/usr/include/asm-generic/ioctl.h:
/home/hyung-hwan/projects/isocline/src/undo.h:
/home/hyung-hwan/projects/isocline/src/attr.c:
/home/hyung-hwan/projects/isocline/src/editline_help.c:
/usr/include/bits/wchar.h:
/usr/include/asm-generic/bitsperlong.h:
/home/hyung-hwan/projects/isocline/src/stringbuf.c:
/usr/include/sys/ioctl.h:
/home/hyung-hwan/projects/isocline/src/bbcode_colors.c:
/usr/include/bits/types/FILE.h:
/home/hyung-hwan/projects/isocline/src/completions.h:
/home/hyung-hwan/projects/isocline/src/common.h:
/home/hyung-hwan/projects/isocline/include/isocline.h:
/home/hyung-hwan/projects/isocline/src/env.h:
/usr/include/asm/errno.h:
/usr/include/bits/endian.h:
/usr/include/bits/waitstatus.h:
/usr/include/bits/timesize.h:
/home/hyung-hwan/projects/isocline/src/history.c:
/usr/include/bits/types/__sigval_t.h:
/home/hyung-hwan/projects/isocline/src/completers.c:
/home/hyung-hwan/projects/isocline/src/bbcode.h:
/usr/include/bits/stdlib-bsearch.h:
/home/hyung-hwan/projects/isocline/src/common.c:
/home/hyung-hwan/projects/isocline/src/attr.h:
/usr/include/alloca.h:
/home/hyung-hwan/projects/isocline/src/editline_history.c:
/usr/include/asm-generic/ioctls.h:
/usr/include/bits/termios-c_cflag.h:
/home/hyung-hwan/projects/isocline/src/bbcode.c:
/home/hyung-hwan/projects/isocline/src/editline.c:
/usr/include/bits/types/sigevent_t.h:
/usr/include/linux/kd.h:
/usr/include/bits/floatn-common.h:
/home/hyung-hwan/projects/isocline/src/tty_esc.c:
/usr/include/sys/ucontext.h:
/usr/include/bits/signal_ext.h:
/home/hyung-hwan/projects/isocline/src/highlight.c:
/usr/include/asm-generic/int-ll64.h:
/home/hyung-hwan/projects/isocline/src/highlight.h:
/usr/include/asm-generic/errno-base.h:
/usr/include/asm-generic/types.h:
/home/hyung-hwan/projects/isocline/src/completions.c:
/usr/include/bits/stdint-uintn.h:
/home/hyung-hwan/projects/isocline/src/wcwidth.c:
/usr/include/bits/types/cookie_io_functions_t.h:
/usr/include/errno.h:
/home/hyung-hwan/projects/isocline/src/history.h:
/home/hyung-hwan/projects/isocline/src/stringbuf.h:
/usr/include/stdc-predef.h:
/usr/include/asm-generic/posix_types.h:
/usr/include/bits/types/__sigset_t.h:
/usr/include/bits/sigstksz.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/syslimits.h:
/usr/include/bits/stdint-intn.h:
/usr/include/features.h:
/usr/include/bits/endianness.h:
/usr/include/asm/ioctls.h:
/usr/include/bits/types/struct_timespec.h:
/home/hyung-hwan/projects/isocline/src/term.h:
/usr/include/bits/types/__locale_t.h:
/usr/include/linux/stddef.h:
/home/hyung-hwan/projects/isocline/src/isocline.c:
/usr/include/bits/sigthread.h:
/usr/include/bits/pthread_stack_min.h:
/home/hyung-hwan/projects/isocline/src/term_color.c:
/usr/include/bits/pthread_stack_min-dynamic.h:
/usr/include/bits/termios-baud.h:
/usr/include/bits/floatn.h:
/usr/include/bits/siginfo-arch.h:
/usr/include/bits/types.h:
/usr/include/bits/getopt_posix.h:
/usr/include/locale.h:
/usr/include/bits/ioctl-types.h:
/usr/include/bits/thread-shared-types.h:
/usr/include/bits/libc-header-start.h:
/usr/include/bits/siginfo-consts.h:
/usr/include/bits/local_lim.h:
/home/hyung-hwan/projects/isocline/src/editline_completion.c:
/usr/include/bits/stdio_lim.h:
/usr/include/bits/types/__mbstate_t.h:
/usr/include/bits/locale.h:
/usr/include/bits/long-double.h:
/usr/include/bits/atomic_wide_counter.h:
/usr/include/bits/posix_opt.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h:
/usr/include/gnu/stubs.h:
/usr/include/bits/pthreadtypes-arch.h:
/usr/include/bits/pthreadtypes.h:
/usr/include/bits/select.h:
/usr/include/bits/sigaction.h:
/usr/include/bits/getopt_core.h:
/usr/include/bits/sigstack.h:
/usr/include/bits/termios-c_lflag.h:
/home/hyung-hwan/projects/isocline/src/undo.c:
/usr/include/bits/termios-struct.h:
/usr/include/sys/ttydefaults.h:
/usr/include/bits/types/stack_t.h:
/usr/include/bits/posix2_lim.h:
/usr/include/bits/sigevent-consts.h:
/usr/include/bits/signum-arch.h:
/usr/include/bits/signum-generic.h:
/usr/include/bits/stdint-least.h:
/usr/include/bits/termios.h:
/home/hyung-hwan/projects/isocline/src/tty.h:
/usr/include/bits/stdio.h:
/usr/include/bits/types/__FILE.h:
/usr/include/bits/struct_mutex.h:
/usr/include/bits/struct_rwlock.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h:
/usr/include/bits/termios-c_cc.h:
/usr/include/bits/types/time_t.h:
/usr/include/bits/struct_stat.h:
/usr/include/bits/posix1_lim.h:
/usr/include/bits/termios-c_iflag.h:
/usr/include/bits/termios-c_oflag.h:
/usr/include/bits/termios-misc.h:
/home/hyung-hwan/projects/isocline/src/term.c:
/usr/include/bits/termios-tcflow.h:
/usr/include/bits/stdlib-float.h:
/usr/include/bits/time64.h:
/usr/include/bits/types/__fpos64_t.h:
/usr/include/bits/ioctls.h:
/usr/include/bits/types/__fpos_t.h:
/usr/include/bits/types/clock_t.h:
/home/hyung-hwan/projects/isocline/src/tty.c:
/usr/include/bits/types/locale_t.h:
/usr/include/bits/typesizes.h:
/usr/include/bits/types/sig_atomic_t.h:

@ -0,0 +1,2 @@
# CMAKE generated file: DO NOT EDIT!
# Timestamp file for compiler generated dependencies management for isocline.

@ -0,0 +1,2 @@
# Empty dependencies file for isocline.
# This may be replaced when dependencies are built.

@ -0,0 +1,10 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# compile C with /usr/bin/cc
C_DEFINES =
C_INCLUDES = -I/home/hyung-hwan/projects/isocline/include
C_FLAGS = -O3 -DNDEBUG -std=gnu99 -fPIC -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -Wno-unused-function -Wno-padded -Wno-missing-field-initializers -Wsign-conversion -Wno-missing-braces -Wint-conversion

@ -0,0 +1,2 @@
/usr/bin/ar qc libisocline.a CMakeFiles/isocline.dir/src/isocline.c.o
/usr/bin/ranlib libisocline.a

@ -0,0 +1,3 @@
CMAKE_PROGRESS_1 = 3
CMAKE_PROGRESS_2 = 4

Binary file not shown.

@ -0,0 +1,114 @@
CMakeFiles/isocline.dir/src/isocline.c.o: \
/home/hyung-hwan/projects/isocline/src/isocline.c \
/usr/include/stdc-predef.h /home/hyung-hwan/projects/isocline/src/attr.c \
/usr/include/string.h /usr/include/bits/libc-header-start.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/bits/wordsize.h /usr/include/bits/timesize.h \
/usr/include/sys/cdefs.h /usr/include/bits/long-double.h \
/usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
/usr/include/bits/types/locale_t.h /usr/include/bits/types/__locale_t.h \
/usr/include/strings.h /home/hyung-hwan/projects/isocline/src/common.h \
/usr/include/sys/types.h /usr/include/bits/types.h \
/usr/include/bits/typesizes.h /usr/include/bits/time64.h \
/usr/include/bits/types/clock_t.h /usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/time_t.h /usr/include/bits/types/timer_t.h \
/usr/include/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/bits/endian.h /usr/include/bits/endianness.h \
/usr/include/bits/byteswap.h /usr/include/bits/uintn-identity.h \
/usr/include/sys/select.h /usr/include/bits/select.h \
/usr/include/bits/types/sigset_t.h /usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/atomic_wide_counter.h /usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/limits.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/syslimits.h \
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthread_stack_min.h /usr/include/bits/posix2_lim.h \
/usr/include/bits/xopen_lim.h /usr/include/bits/uio_lim.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
/usr/include/stdint.h /usr/include/bits/wchar.h \
/usr/include/bits/stdint-uintn.h /usr/include/bits/stdint-least.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h \
/usr/include/assert.h \
/home/hyung-hwan/projects/isocline/src/../include/isocline.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
/home/hyung-hwan/projects/isocline/src/stringbuf.h \
/home/hyung-hwan/projects/isocline/src/attr.h \
/home/hyung-hwan/projects/isocline/src/term.h \
/home/hyung-hwan/projects/isocline/src/tty.h \
/home/hyung-hwan/projects/isocline/src/bbcode.c /usr/include/stdio.h \
/usr/include/bits/types/__fpos_t.h /usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \
/usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \
/usr/include/bits/floatn-common.h /usr/include/bits/stdio.h \
/usr/include/stdlib.h /usr/include/bits/waitflags.h \
/usr/include/bits/waitstatus.h /usr/include/alloca.h \
/usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
/home/hyung-hwan/projects/isocline/src/bbcode.h \
/home/hyung-hwan/projects/isocline/src/bbcode_colors.c \
/home/hyung-hwan/projects/isocline/src/editline.c \
/home/hyung-hwan/projects/isocline/src/env.h \
/home/hyung-hwan/projects/isocline/src/history.h \
/home/hyung-hwan/projects/isocline/src/completions.h \
/home/hyung-hwan/projects/isocline/src/undo.h \
/home/hyung-hwan/projects/isocline/src/highlight.h \
/home/hyung-hwan/projects/isocline/src/editline_help.c \
/home/hyung-hwan/projects/isocline/src/editline_history.c \
/home/hyung-hwan/projects/isocline/src/editline_completion.c \
/home/hyung-hwan/projects/isocline/src/highlight.c \
/home/hyung-hwan/projects/isocline/src/undo.c \
/home/hyung-hwan/projects/isocline/src/history.c /usr/include/sys/stat.h \
/usr/include/bits/stat.h /usr/include/bits/struct_stat.h \
/home/hyung-hwan/projects/isocline/src/completers.c \
/usr/include/dirent.h /usr/include/bits/dirent.h \
/usr/include/bits/dirent_ext.h /usr/include/errno.h \
/usr/include/bits/errno.h /usr/include/linux/errno.h \
/usr/include/asm/errno.h /usr/include/asm-generic/errno.h \
/usr/include/asm-generic/errno-base.h \
/home/hyung-hwan/projects/isocline/src/completions.c \
/home/hyung-hwan/projects/isocline/src/term.c /usr/include/inttypes.h \
/usr/include/unistd.h /usr/include/bits/posix_opt.h \
/usr/include/bits/environments.h /usr/include/bits/confname.h \
/usr/include/bits/getopt_posix.h /usr/include/bits/getopt_core.h \
/usr/include/bits/unistd_ext.h /usr/include/sys/ioctl.h \
/usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \
/usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \
/usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \
/usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \
/usr/include/linux/kd.h /usr/include/linux/types.h \
/usr/include/asm/types.h /usr/include/asm-generic/types.h \
/usr/include/asm-generic/int-ll64.h /usr/include/asm/bitsperlong.h \
/usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \
/usr/include/linux/stddef.h /usr/include/asm/posix_types.h \
/usr/include/asm/posix_types_64.h /usr/include/asm-generic/posix_types.h \
/home/hyung-hwan/projects/isocline/src/term_color.c \
/home/hyung-hwan/projects/isocline/src/tty_esc.c \
/home/hyung-hwan/projects/isocline/src/tty.c /usr/include/locale.h \
/usr/include/bits/locale.h /usr/include/signal.h \
/usr/include/bits/signum-generic.h /usr/include/bits/signum-arch.h \
/usr/include/bits/types/sig_atomic_t.h \
/usr/include/bits/types/siginfo_t.h /usr/include/bits/types/__sigval_t.h \
/usr/include/bits/siginfo-arch.h /usr/include/bits/siginfo-consts.h \
/usr/include/bits/types/sigval_t.h /usr/include/bits/types/sigevent_t.h \
/usr/include/bits/sigevent-consts.h /usr/include/bits/sigaction.h \
/usr/include/bits/sigcontext.h /usr/include/bits/types/stack_t.h \
/usr/include/sys/ucontext.h /usr/include/bits/sigstack.h \
/usr/include/bits/sigstksz.h /usr/include/bits/ss_flags.h \
/usr/include/bits/types/struct_sigstack.h /usr/include/bits/sigthread.h \
/usr/include/bits/signal_ext.h /usr/include/termios.h \
/usr/include/bits/termios.h /usr/include/bits/termios-struct.h \
/usr/include/bits/termios-c_cc.h /usr/include/bits/termios-c_iflag.h \
/usr/include/bits/termios-c_oflag.h /usr/include/bits/termios-baud.h \
/usr/include/bits/termios-c_cflag.h /usr/include/bits/termios-c_lflag.h \
/usr/include/bits/termios-tcflow.h /usr/include/bits/termios-misc.h \
/home/hyung-hwan/projects/isocline/src/stringbuf.c \
/home/hyung-hwan/projects/isocline/src/wcwidth.c \
/home/hyung-hwan/projects/isocline/src/common.c

@ -0,0 +1 @@
6

@ -0,0 +1,23 @@
# Consider dependencies only in project.
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
)
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
"/home/hyung-hwan/projects/isocline/test/test_colors.c" "CMakeFiles/test_colors.dir/test/test_colors.c.o" "gcc" "CMakeFiles/test_colors.dir/test/test_colors.c.o.d"
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
)
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")

@ -0,0 +1,111 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/hyung-hwan/projects/isocline
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/hyung-hwan/projects/isocline/bld
# Include any dependencies generated for this target.
include CMakeFiles/test_colors.dir/depend.make
# Include any dependencies generated by the compiler for this target.
include CMakeFiles/test_colors.dir/compiler_depend.make
# Include the progress variables for this target.
include CMakeFiles/test_colors.dir/progress.make
# Include the compile flags for this target's objects.
include CMakeFiles/test_colors.dir/flags.make
CMakeFiles/test_colors.dir/test/test_colors.c.o: CMakeFiles/test_colors.dir/flags.make
CMakeFiles/test_colors.dir/test/test_colors.c.o: /home/hyung-hwan/projects/isocline/test/test_colors.c
CMakeFiles/test_colors.dir/test/test_colors.c.o: CMakeFiles/test_colors.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/test_colors.dir/test/test_colors.c.o"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/test_colors.dir/test/test_colors.c.o -MF CMakeFiles/test_colors.dir/test/test_colors.c.o.d -o CMakeFiles/test_colors.dir/test/test_colors.c.o -c /home/hyung-hwan/projects/isocline/test/test_colors.c
CMakeFiles/test_colors.dir/test/test_colors.c.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/test_colors.dir/test/test_colors.c.i"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/hyung-hwan/projects/isocline/test/test_colors.c > CMakeFiles/test_colors.dir/test/test_colors.c.i
CMakeFiles/test_colors.dir/test/test_colors.c.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/test_colors.dir/test/test_colors.c.s"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/hyung-hwan/projects/isocline/test/test_colors.c -o CMakeFiles/test_colors.dir/test/test_colors.c.s
# Object files for target test_colors
test_colors_OBJECTS = \
"CMakeFiles/test_colors.dir/test/test_colors.c.o"
# External object files for target test_colors
test_colors_EXTERNAL_OBJECTS =
test_colors: CMakeFiles/test_colors.dir/test/test_colors.c.o
test_colors: CMakeFiles/test_colors.dir/build.make
test_colors: libisocline.a
test_colors: CMakeFiles/test_colors.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/hyung-hwan/projects/isocline/bld/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable test_colors"
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_colors.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
CMakeFiles/test_colors.dir/build: test_colors
.PHONY : CMakeFiles/test_colors.dir/build
CMakeFiles/test_colors.dir/clean:
$(CMAKE_COMMAND) -P CMakeFiles/test_colors.dir/cmake_clean.cmake
.PHONY : CMakeFiles/test_colors.dir/clean
CMakeFiles/test_colors.dir/depend:
cd /home/hyung-hwan/projects/isocline/bld && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/hyung-hwan/projects/isocline /home/hyung-hwan/projects/isocline /home/hyung-hwan/projects/isocline/bld /home/hyung-hwan/projects/isocline/bld /home/hyung-hwan/projects/isocline/bld/CMakeFiles/test_colors.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : CMakeFiles/test_colors.dir/depend

@ -0,0 +1,11 @@
file(REMOVE_RECURSE
"CMakeFiles/test_colors.dir/test/test_colors.c.o"
"CMakeFiles/test_colors.dir/test/test_colors.c.o.d"
"test_colors"
"test_colors.pdb"
)
# Per-language clean rules from dependency scanning.
foreach(lang C)
include(CMakeFiles/test_colors.dir/cmake_clean_${lang}.cmake OPTIONAL)
endforeach()

@ -0,0 +1,85 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
CMakeFiles/test_colors.dir/test/test_colors.c.o
/home/hyung-hwan/projects/isocline/test/test_colors.c
/home/hyung-hwan/projects/isocline/include/isocline.h
/home/hyung-hwan/projects/isocline/src/bbcode_colors.c
/home/hyung-hwan/projects/isocline/src/common.h
/usr/include/alloca.h
/usr/include/assert.h
/usr/include/bits/atomic_wide_counter.h
/usr/include/bits/byteswap.h
/usr/include/bits/endian.h
/usr/include/bits/endianness.h
/usr/include/bits/floatn-common.h
/usr/include/bits/floatn.h
/usr/include/bits/libc-header-start.h
/usr/include/bits/local_lim.h
/usr/include/bits/long-double.h
/usr/include/bits/posix1_lim.h
/usr/include/bits/posix2_lim.h
/usr/include/bits/pthread_stack_min-dynamic.h
/usr/include/bits/pthread_stack_min.h
/usr/include/bits/pthreadtypes-arch.h
/usr/include/bits/pthreadtypes.h
/usr/include/bits/select.h
/usr/include/bits/stdint-intn.h
/usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
/usr/include/bits/stdlib-bsearch.h
/usr/include/bits/stdlib-float.h
/usr/include/bits/struct_mutex.h
/usr/include/bits/struct_rwlock.h
/usr/include/bits/thread-shared-types.h
/usr/include/bits/time64.h
/usr/include/bits/timesize.h
/usr/include/bits/types.h
/usr/include/bits/types/FILE.h
/usr/include/bits/types/__FILE.h
/usr/include/bits/types/__fpos64_t.h
/usr/include/bits/types/__fpos_t.h
/usr/include/bits/types/__locale_t.h
/usr/include/bits/types/__mbstate_t.h
/usr/include/bits/types/__sigset_t.h
/usr/include/bits/types/clock_t.h
/usr/include/bits/types/clockid_t.h
/usr/include/bits/types/cookie_io_functions_t.h
/usr/include/bits/types/locale_t.h
/usr/include/bits/types/sigset_t.h
/usr/include/bits/types/struct_FILE.h
/usr/include/bits/types/struct_timespec.h
/usr/include/bits/types/struct_timeval.h
/usr/include/bits/types/time_t.h
/usr/include/bits/types/timer_t.h
/usr/include/bits/typesizes.h
/usr/include/bits/uintn-identity.h
/usr/include/bits/waitflags.h
/usr/include/bits/waitstatus.h
/usr/include/bits/wchar.h
/usr/include/bits/wordsize.h
/usr/include/endian.h
/usr/include/features-time64.h
/usr/include/features.h
/usr/include/gnu/stubs-64.h
/usr/include/gnu/stubs.h
/usr/include/limits.h
/usr/include/linux/limits.h
/usr/include/stdc-predef.h
/usr/include/stdint.h
/usr/include/stdio.h
/usr/include/stdlib.h
/usr/include/string.h
/usr/include/strings.h
/usr/include/sys/cdefs.h
/usr/include/sys/select.h
/usr/include/sys/types.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/limits.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/syslimits.h

@ -0,0 +1,244 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
CMakeFiles/test_colors.dir/test/test_colors.c.o: /home/hyung-hwan/projects/isocline/test/test_colors.c \
/home/hyung-hwan/projects/isocline/include/isocline.h \
/home/hyung-hwan/projects/isocline/src/bbcode_colors.c \
/home/hyung-hwan/projects/isocline/src/common.h \
/usr/include/alloca.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/byteswap.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/local_lim.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix1_lim.h \
/usr/include/bits/posix2_lim.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthread_stack_min.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/select.h \
/usr/include/bits/stdint-intn.h \
/usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/stdlib-bsearch.h \
/usr/include/bits/stdlib-float.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/sigset_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/uintn-identity.h \
/usr/include/bits/waitflags.h \
/usr/include/bits/waitstatus.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/endian.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/limits.h \
/usr/include/linux/limits.h \
/usr/include/stdc-predef.h \
/usr/include/stdint.h \
/usr/include/stdio.h \
/usr/include/stdlib.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/select.h \
/usr/include/sys/types.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/limits.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/syslimits.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/limits.h:
/usr/include/sys/types.h:
/usr/include/sys/select.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/syslimits.h:
/usr/include/sys/cdefs.h:
/usr/include/strings.h:
/usr/include/stdlib.h:
/usr/include/stdint.h:
/usr/include/gnu/stubs.h:
/usr/include/gnu/stubs-64.h:
/usr/include/features.h:
/usr/include/features-time64.h:
/usr/include/bits/stdlib-bsearch.h:
/home/hyung-hwan/projects/isocline/src/common.h:
/usr/include/bits/types/sigset_t.h:
/usr/include/bits/wchar.h:
/usr/include/bits/posix1_lim.h:
/usr/include/bits/stdint-intn.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h:
/usr/include/stdc-predef.h:
/usr/include/bits/pthreadtypes-arch.h:
/usr/include/bits/pthread_stack_min-dynamic.h:
/usr/include/bits/stdint-least.h:
/usr/include/alloca.h:
/usr/include/bits/posix2_lim.h:
/usr/include/linux/limits.h:
/usr/include/bits/types/clock_t.h:
/usr/include/bits/long-double.h:
/home/hyung-hwan/projects/isocline/test/test_colors.c:
/usr/include/bits/select.h:
/usr/include/bits/types/__fpos64_t.h:
/usr/include/bits/stdio.h:
/usr/include/bits/pthread_stack_min.h:
/usr/include/bits/libc-header-start.h:
/usr/include/assert.h:
/usr/include/bits/timesize.h:
/usr/include/bits/endian.h:
/usr/include/bits/types/__sigset_t.h:
/usr/include/bits/waitflags.h:
/home/hyung-hwan/projects/isocline/include/isocline.h:
/usr/include/bits/byteswap.h:
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h:
/usr/include/string.h:
/usr/include/bits/time64.h:
/usr/include/bits/endianness.h:
/usr/include/bits/floatn-common.h:
/usr/include/bits/pthreadtypes.h:
/usr/include/bits/floatn.h:
/usr/include/bits/struct_mutex.h:
/usr/include/bits/thread-shared-types.h:
/usr/include/bits/types.h:
/usr/include/limits.h:
/home/hyung-hwan/projects/isocline/src/bbcode_colors.c:
/usr/include/bits/types/FILE.h:
/usr/include/bits/stdlib-float.h:
/usr/include/bits/types/__FILE.h:
/usr/include/bits/types/__fpos_t.h:
/usr/include/bits/wordsize.h:
/usr/include/bits/types/__locale_t.h:
/usr/include/bits/local_lim.h:
/usr/include/bits/types/__mbstate_t.h:
/usr/include/bits/atomic_wide_counter.h:
/usr/include/bits/types/clockid_t.h:
/usr/include/bits/uintn-identity.h:
/usr/include/bits/typesizes.h:
/usr/include/bits/types/locale_t.h:
/usr/include/bits/types/struct_FILE.h:
/usr/include/bits/types/struct_timespec.h:
/usr/include/bits/stdio_lim.h:
/usr/include/bits/types/struct_timeval.h:
/usr/include/bits/struct_rwlock.h:
/usr/include/bits/types/time_t.h:
/usr/include/stdio.h:
/usr/include/bits/types/timer_t.h:
/usr/include/bits/stdint-uintn.h:
/usr/include/bits/types/cookie_io_functions_t.h:
/usr/include/endian.h:
/usr/include/bits/waitstatus.h:

@ -0,0 +1,2 @@
# CMAKE generated file: DO NOT EDIT!
# Timestamp file for compiler generated dependencies management for test_colors.

@ -0,0 +1,2 @@
# Empty dependencies file for test_colors.
# This may be replaced when dependencies are built.

@ -0,0 +1,10 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# compile C with /usr/bin/cc
C_DEFINES =
C_INCLUDES = -I/home/hyung-hwan/projects/isocline/include
C_FLAGS = -O3 -DNDEBUG -std=gnu99 -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -Wno-unused-function -Wno-padded -Wno-missing-field-initializers -Wsign-conversion -Wno-missing-braces -Wint-conversion

@ -0,0 +1 @@
/usr/bin/cc -O3 -DNDEBUG CMakeFiles/test_colors.dir/test/test_colors.c.o -o test_colors libisocline.a

@ -0,0 +1,3 @@
CMAKE_PROGRESS_1 = 5
CMAKE_PROGRESS_2 = 6

@ -0,0 +1,49 @@
CMakeFiles/test_colors.dir/test/test_colors.c.o: \
/home/hyung-hwan/projects/isocline/test/test_colors.c \
/usr/include/stdc-predef.h /usr/include/assert.h /usr/include/features.h \
/usr/include/features-time64.h /usr/include/bits/wordsize.h \
/usr/include/bits/timesize.h /usr/include/sys/cdefs.h \
/usr/include/bits/long-double.h /usr/include/gnu/stubs.h \
/usr/include/gnu/stubs-64.h /usr/include/stdio.h \
/usr/include/bits/libc-header-start.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
/usr/include/bits/types.h /usr/include/bits/typesizes.h \
/usr/include/bits/time64.h /usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \
/usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \
/usr/include/bits/floatn-common.h /usr/include/bits/stdio.h \
/usr/include/stdlib.h /usr/include/bits/waitflags.h \
/usr/include/bits/waitstatus.h /usr/include/sys/types.h \
/usr/include/bits/types/clock_t.h /usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/time_t.h /usr/include/bits/types/timer_t.h \
/usr/include/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/bits/endian.h /usr/include/bits/endianness.h \
/usr/include/bits/byteswap.h /usr/include/bits/uintn-identity.h \
/usr/include/sys/select.h /usr/include/bits/select.h \
/usr/include/bits/types/sigset_t.h /usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/atomic_wide_counter.h /usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
/usr/include/string.h /usr/include/bits/types/locale_t.h \
/usr/include/bits/types/__locale_t.h /usr/include/strings.h \
/home/hyung-hwan/projects/isocline/include/isocline.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdbool.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
/usr/include/stdint.h /usr/include/bits/wchar.h \
/usr/include/bits/stdint-uintn.h /usr/include/bits/stdint-least.h \
/home/hyung-hwan/projects/isocline/test/../src/bbcode_colors.c \
/home/hyung-hwan/projects/isocline/test/../src/common.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/limits.h \
/usr/lib/gcc/x86_64-redhat-linux/14/include/syslimits.h \
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthread_stack_min.h /usr/include/bits/posix2_lim.h

263
bin/isocline/bld/Makefile Normal file

@ -0,0 +1,263 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
.NOTPARALLEL:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/hyung-hwan/projects/isocline
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/hyung-hwan/projects/isocline/bld
#=============================================================================
# Targets provided globally by CMake.
# Special rule for the target edit_cache
edit_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..."
/usr/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : edit_cache
# Special rule for the target edit_cache
edit_cache/fast: edit_cache
.PHONY : edit_cache/fast
# Special rule for the target rebuild_cache
rebuild_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..."
/usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : rebuild_cache
# Special rule for the target rebuild_cache
rebuild_cache/fast: rebuild_cache
.PHONY : rebuild_cache/fast
# The main all target
all: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/hyung-hwan/projects/isocline/bld/CMakeFiles /home/hyung-hwan/projects/isocline/bld//CMakeFiles/progress.marks
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all
$(CMAKE_COMMAND) -E cmake_progress_start /home/hyung-hwan/projects/isocline/bld/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean
.PHONY : clean
# The main clean target
clean/fast: clean
.PHONY : clean/fast
# Prepare targets for installation.
preinstall: all
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
.PHONY : preinstall/fast
# clear depends
depend:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
#=============================================================================
# Target rules for targets named isocline
# Build rule for target.
isocline: cmake_check_build_system
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 isocline
.PHONY : isocline
# fast build rule for target.
isocline/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/isocline.dir/build.make CMakeFiles/isocline.dir/build
.PHONY : isocline/fast
#=============================================================================
# Target rules for targets named example
# Build rule for target.
example: cmake_check_build_system
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 example
.PHONY : example
# fast build rule for target.
example/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/build
.PHONY : example/fast
#=============================================================================
# Target rules for targets named test_colors
# Build rule for target.
test_colors: cmake_check_build_system
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 test_colors
.PHONY : test_colors
# fast build rule for target.
test_colors/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/test_colors.dir/build.make CMakeFiles/test_colors.dir/build
.PHONY : test_colors/fast
src/isocline.o: src/isocline.c.o
.PHONY : src/isocline.o
# target to build an object file
src/isocline.c.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/isocline.dir/build.make CMakeFiles/isocline.dir/src/isocline.c.o
.PHONY : src/isocline.c.o
src/isocline.i: src/isocline.c.i
.PHONY : src/isocline.i
# target to preprocess a source file
src/isocline.c.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/isocline.dir/build.make CMakeFiles/isocline.dir/src/isocline.c.i
.PHONY : src/isocline.c.i
src/isocline.s: src/isocline.c.s
.PHONY : src/isocline.s
# target to generate assembly for a file
src/isocline.c.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/isocline.dir/build.make CMakeFiles/isocline.dir/src/isocline.c.s
.PHONY : src/isocline.c.s
test/example.o: test/example.c.o
.PHONY : test/example.o
# target to build an object file
test/example.c.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/test/example.c.o
.PHONY : test/example.c.o
test/example.i: test/example.c.i
.PHONY : test/example.i
# target to preprocess a source file
test/example.c.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/test/example.c.i
.PHONY : test/example.c.i
test/example.s: test/example.c.s
.PHONY : test/example.s
# target to generate assembly for a file
test/example.c.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/test/example.c.s
.PHONY : test/example.c.s
test/test_colors.o: test/test_colors.c.o
.PHONY : test/test_colors.o
# target to build an object file
test/test_colors.c.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/test_colors.dir/build.make CMakeFiles/test_colors.dir/test/test_colors.c.o
.PHONY : test/test_colors.c.o
test/test_colors.i: test/test_colors.c.i
.PHONY : test/test_colors.i
# target to preprocess a source file
test/test_colors.c.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/test_colors.dir/build.make CMakeFiles/test_colors.dir/test/test_colors.c.i
.PHONY : test/test_colors.c.i
test/test_colors.s: test/test_colors.c.s
.PHONY : test/test_colors.s
# target to generate assembly for a file
test/test_colors.c.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/test_colors.dir/build.make CMakeFiles/test_colors.dir/test/test_colors.c.s
.PHONY : test/test_colors.c.s
# Help Target
help:
@echo "The following are some of the valid targets for this Makefile:"
@echo "... all (the default if no target is provided)"
@echo "... clean"
@echo "... depend"
@echo "... edit_cache"
@echo "... rebuild_cache"
@echo "... example"
@echo "... isocline"
@echo "... test_colors"
@echo "... src/isocline.o"
@echo "... src/isocline.i"
@echo "... src/isocline.s"
@echo "... test/example.o"
@echo "... test/example.i"
@echo "... test/example.s"
@echo "... test/test_colors.o"
@echo "... test/test_colors.i"
@echo "... test/test_colors.s"
.PHONY : help
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system

@ -0,0 +1,54 @@
# Install script for directory: /home/hyung-hwan/projects/isocline
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "/home/hyung-hwan/xxx")
endif()
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
# Set the install configuration name.
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
if(BUILD_TYPE)
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
else()
set(CMAKE_INSTALL_CONFIG_NAME "Release")
endif()
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
endif()
# Set the component getting installed.
if(NOT CMAKE_INSTALL_COMPONENT)
if(COMPONENT)
message(STATUS "Install component: \"${COMPONENT}\"")
set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
else()
set(CMAKE_INSTALL_COMPONENT)
endif()
endif()
# Install shared libraries without execute permission?
if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
set(CMAKE_INSTALL_SO_NO_EXE "0")
endif()
# Is this installation the result of a crosscompile?
if(NOT DEFINED CMAKE_CROSSCOMPILING)
set(CMAKE_CROSSCOMPILING "FALSE")
endif()
# Set default install directory permissions.
if(NOT DEFINED CMAKE_OBJDUMP)
set(CMAKE_OBJDUMP "/usr/bin/objdump")
endif()
if(CMAKE_INSTALL_COMPONENT)
set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
else()
set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
endif()
string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
"${CMAKE_INSTALL_MANIFEST_FILES}")
file(WRITE "/home/hyung-hwan/projects/isocline/bld/${CMAKE_INSTALL_MANIFEST}"
"${CMAKE_INSTALL_MANIFEST_CONTENT}")

BIN
bin/isocline/bld/example Executable file

Binary file not shown.

@ -0,0 +1,10 @@
\xEC\x9D\xB5 \xEB\xAD\x90\xEB\x83\x90\xEA\xB3\xA0
\xEC\x9D\xB5 \xEC\x9E\x98 \xEB\x90\x98\xEB\x84\xA4?\xEB\x83\x90\xEA\xB3\xA0
bin/prnt
?\nsadkfasjdkfs\nskdfjsd
fun
int
quit
exit
{}
abc \ndef

Binary file not shown.

BIN
bin/isocline/bld/test_colors Executable file

Binary file not shown.

Binary file not shown.

After

(image error) Size: 36 KiB

Binary file not shown.

After

(image error) Size: 84 KiB

Binary file not shown.

After

(image error) Size: 140 KiB

Binary file not shown.

After

(image error) Size: 126 KiB

Binary file not shown.

After

(image error) Size: 44 KiB

2659
bin/isocline/doc/doxyfile Normal file

File diff suppressed because it is too large Load Diff

@ -0,0 +1,49 @@
#projectlogo img {
padding: 1ex;
}
tt, code, kbd, samp, div.memproto, div.fragment, div.line, table.memname {
font-family: Consolas, Monaco, Inconsolata, "Courier New", monospace;
}
.image img, .textblock img {
max-width: 99%;
max-height: 350px;
}
table.memname, .memname{
font-weight: bold;
}
code {
background-color: #EEE;
padding: 0ex 0.25ex;
}
body {
margin: 1ex 1ex 0ex 1ex;
border: 1px solid black;
}
.contents table, .contents div, .contents p, .contents dl {
font-size: 16px;
line-height: 1.44;
}
body #nav-tree .label {
font-size: 14px;
}
a{
text-decoration: underline;
}
#side-nav {
margin-left: 1ex;
border-left: 1px solid black;
}
#nav-tree {
padding-left: 1ex;
}
#nav-path {
display: none;
}
div.fragment {
background-color: #EEE;
padding: 0.25ex 0.5ex;
border-color: black;
}
#nav-sync img {
display: none;
}

@ -0,0 +1,376 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="512"
height="512"
viewBox="0 0 135.46667 135.46667"
version="1.1"
id="svg5"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
sodipodi:docname="isocline-inkscape.svg"
inkscape:export-filename="C:\Users\daan\dev\isocline\doc\isocline-1.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:document-units="px"
showgrid="false"
inkscape:zoom="1.1490485"
inkscape:cx="295.46185"
inkscape:cy="267.17758"
inkscape:window-width="1920"
inkscape:window-height="1018"
inkscape:window-x="-6"
inkscape:window-y="-6"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<inkscape:path-effect
effect="bspline"
id="path-effect8779"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect7056"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect6549"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect6220"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect6085"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect6015"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect4245"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<linearGradient
id="linearGradient2470"
inkscape:swatch="solid">
<stop
style="stop-color:#fffff9;stop-opacity:1;"
offset="0"
id="stop2468" />
</linearGradient>
<marker
style="overflow:visible"
id="Arrow1Lstart"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Lstart"
inkscape:isstock="true">
<path
transform="scale(0.8) translate(12.5,0)"
style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path2151" />
</marker>
<inkscape:path-effect
effect="bspline"
id="path-effect1182"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1178"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1174"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1170"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1166"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1162"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1158"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1102"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1098"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1094"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect886"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#217867;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -10.008281,-10.927859 c -3.990942,5.5723469 -1.057507,13.1758494 -1.954742,19.6307117 0.248096,45.5932863 -0.582113,91.2306733 0.749601,136.7962673 1.3846838,5.1449 7.9983673,4.43841 10.83267219,0.91448 C 33.646577,120.17412 66.473474,91.423433 106.49606,74.951619 c 14.69316,-6.179614 30.81745,-9.228533 46.49737,-7.844466 26.00203,0.219238 49.48644,12.595965 70.71748,26.525003 35.70041,24.736124 65.15948,57.117944 100.10122,82.822634 18.56199,13.00052 41.18092,23.20094 64.3385,19.25571 24.57692,-2.70737 43.75617,-20.59336 58.39505,-39.16472 35.14182,-45.28024 55.45892,-100.466276 65.18515,-156.56723932 1.6626,-4.44659228 2.0478,-12.30141168 -4.62989,-11.94156368 -171.3544,0 -342.70881,0 -514.0632222,0 -1.0153328,0.345055 -2.0306656,0.690109 -3.0459988,1.035164 z"
id="path12058"
transform="scale(0.26458334)" />
<path
style="fill:#2ca089;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 514.23321,6.3537623 c -5.0901,5.0262187 -4.76663,13.2381867 -6.91608,19.7407367 -11.98647,50.781489 -33.2255,100.969391 -67.96508,140.714461 -15.21456,16.82141 -36.34844,31.44604 -59.96886,30.41944 -16.90358,0.59735 -34.43598,-5.53854 -48.69569,-15.10649 C 288.05073,154.03209 255.21434,113.22747 211.15127,87.069322 186.97328,72.80609 158.21402,63.119439 129.98334,68.997127 95.901616,75.943447 66.850916,96.690678 39.308038,116.86112 c -16.857097,12.89156 -33.7147816,25.9879 -49.852644,39.66537 -3.088375,5.84957 -0.616893,13.2359 -1.411002,19.70628 0.421282,14.84175 -0.896539,29.8565 0.947859,44.59871 1.7163568,5.50668 8.4182339,3.85234 11.55690249,0.60275 C 35.839889,198.35869 71.58996,174.38696 111.94214,161.23394 c 22.48632,-7.4553 48.27346,-7.87062 70.28573,2.14343 36.22555,15.94658 61.53411,49.40592 77.7972,84.47385 24.0666,54.04825 35.49858,114.06854 69.7351,163.29936 19.12654,28.6843 47.63013,49.90964 78.88126,63.8331 34.19271,15.74061 70.67254,25.73405 106.90231,35.53042 6.57899,0.79276 7.55146,-7.08935 7.18562,-11.88462 -0.16082,-13.27265 0.76916,-26.77799 -0.46895,-39.89658 -2.25589,-5.24505 -9.21623,-2.50465 -13.66876,-4.49498 -44.291,-9.40229 -90.54721,-22.78295 -124.86724,-54.13616 -25.70151,-23.04847 -41.13915,-58.12981 -37.32148,-92.93461 1.40471,-17.04981 10.54653,-33.3331 25.16913,-42.4743 25.30263,-16.41702 55.36489,-24.72153 78.90572,-44.05138 27.81139,-22.23108 49.54131,-50.79139 71.28713,-78.69658 2.39343,-8.51214 0.4057,-17.76305 1.05556,-26.5692 -0.30877,-34.880824 0.68822,-69.808186 -0.78019,-104.660303 -0.2094,-3.8090718 -4.44933,-6.1742186 -7.80707,-4.3616247 z"
id="path12134"
transform="scale(0.26458334)" />
<path
style="fill:#37c8ab;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 143.75855,156.61225 c -34.96459,1.12731 -66.32322,19.12415 -95.824469,36.18602 -18.733518,10.66666 -36.153235,23.62415 -55.0153475,33.97223 -6.2262035,2.80589 -3.8624805,11.13094 -4.6247105,16.55186 -0.341439,60.12032 -0.52706,120.25277 0.108406,180.37058 -0.234507,4.589 0.641276,12.23028 7.008176,11.17603 8.1467765,-4.57537 14.3148912,-12.24498 21.734578,-17.95821 30.020065,-26.37804 66.287586,-48.94305 106.770187,-51.58302 29.46861,-2.77853 61.45498,5.31856 84.27399,25.44083 33.80355,29.39552 58.53844,69.25826 98.07343,92.08548 23.22663,14.89356 49.3575,24.06418 74.06717,35.96516 6.83851,3.37825 15.10704,1.39043 22.51332,2.13293 35.53809,0.0166 71.11772,0.61656 106.63056,-0.62523 6.07315,-1.3088 4.56592,-9.97964 -1.16265,-10.42643 -47.36374,-14.14534 -96.26076,-26.52269 -137.33,-54.96396 -36.54752,-25.62259 -58.86934,-66.34327 -74.7929,-107.05223 -15.6752,-39.55782 -26.07956,-81.57897 -47.05214,-118.94147 -18.48458,-31.17656 -45.7002,-60.28011 -81.91219,-69.59053 -7.658,-1.93222 -15.567,-2.87375 -23.46541,-2.74004 z m -11.81514,53.63983 c 24.16618,-0.66025 45.83643,14.58176 59.95619,33.17623 7.4731,9.71043 12.976,21.5815 11.51938,34.1213 0.0453,11.78758 -8.8614,21.44282 -17.61308,28.33357 -21.46089,15.57492 -48.5238,18.55019 -74.18331,15.24358 C 92.545396,318.63401 72.313404,312.98581 58.581077,298.72542 47.897951,287.58054 48.419331,269.84645 55.965122,257.1302 64.394763,241.80538 78.043749,229.67662 93.023635,220.89098 104.80671,214.2575 118.20179,210.2409 131.94341,210.25208 Z"
id="path12432"
transform="scale(0.26458334)" />
<path
style="fill:#87decd;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 131.77853,210.94219 c -29.75115,0.77109 -57.136624,19.31528 -73.182472,43.70043 -7.98455,11.93569 -11.186235,29.50808 -1.050144,41.22548 13.776542,15.50231 34.994342,21.63677 54.809276,24.83542 21.39043,2.05159 43.90212,0.70125 63.18916,-9.65982 14.54369,-7.35339 28.97137,-21.59565 27.48029,-39.15944 -2.04175,-15.46648 -11.03914,-29.24627 -22.62742,-39.38551 -12.74449,-12.88325 -30.19207,-21.90721 -48.61869,-21.55656 z"
id="path12656"
transform="scale(0.26458334)" />
<path
style="fill:#217867;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 515.83099,154.40085 c -7.04653,3.50052 -10.44488,11.56077 -15.89135,16.97345 -21.85623,26.19505 -45.48438,52.9723 -77.07109,67.69238 -17.85018,9.7109 -37.02265,17.20279 -53.837,28.70242 -15.1094,10.55304 -22.12128,29.14914 -22.19985,47.08317 -1.39683,39.26601 21.80774,76.3727 54.06222,97.49877 30.05996,20.52594 65.20916,31.71812 100.47722,39.38744 5.74818,0.6546 11.65054,4.0685 17.40387,2.51134 5.31971,-3.89339 2.84346,-11.71045 3.70933,-17.34548 0.55705,-88.77912 0.49881,-177.56773 -0.1242,-266.34677 -0.87165,-5.26514 1.93699,-12.51071 -3.46275,-15.92386 -1.01946,-0.0525 -2.05093,-0.23628 -3.0664,-0.23286 z"
id="path12732"
transform="scale(0.26458334)" />
<path
style="fill:#2ca089;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 134.47437,365.79008 c -39.196731,-0.11713 -76.077843,18.16033 -105.634272,42.84795 -12.701135,9.98673 -25.1326427,22.01442 -37.252289,31.68552 -0.012306,-0.51675 -3.921001,3.60662 -3.0358,6.26368 -0.751777,23.41088 -0.708403,46.96982 -0.235,70.31594 2.0112872,6.83032 10.76686859,3.319 16.0344173,4.17673 118.1724037,-0.11079 236.3493537,0.26709 354.5188637,-0.33825 5.99478,-0.7914 5.45768,-9.20245 -0.005,-10.34806 -34.81649,-15.10032 -69.8785,-32.68531 -95.84907,-61.11013 -21.5055,-21.76456 -39.97541,-46.99559 -65.07287,-64.91133 -18.63085,-12.80593 -40.96612,-18.87219 -63.46898,-18.58205 z"
id="path12919"
transform="scale(0.26458334)" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 3.9076924,188.54616 C 14.762379,176.17182 25.61708,163.79746 36.526315,162.11518 c 10.909236,-1.68228 21.872044,7.32676 33.59535,17.63895 11.723305,10.31218 24.205708,21.92624 35.820325,21.60047 11.61462,-0.32577 22.36056,-12.59133 33.10673,-24.85716"
id="path884"
inkscape:path-effect="#path-effect886"
inkscape:original-d="M 3.9076924,188.54616 C 14.762657,176.17206 25.617358,163.7977 36.471794,151.42308 c 10.963733,9.00985 21.926542,18.01889 32.889746,27.02821 12.483421,11.61503 24.965827,23.22909 37.44871,34.84359 10.74664,-12.2658 21.49258,-24.53136 32.23847,-36.79744"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -43.546153,65.936499 c 3.926813,1.037156 9.245615,3.533737 10.682247,6.482978 1.436632,2.94924 -1.111343,6.49425 -4.732793,7.529812 -3.62145,1.035562 -8.426919,-0.384236 -11.132373,-3.099169 -2.705454,-2.714932 -3.373446,-6.945546 -2.378811,-9.228138 0.994636,-2.282592 3.634917,-2.722639 7.56173,-1.685483 z"
id="path1100"
inkscape:path-effect="#path-effect1102"
inkscape:original-d="m -44.938462,64.476925 c 5.319067,2.496847 10.63787,4.993426 15.95641,7.489743 -2.496367,3.365289 -4.992899,6.947273 -7.489743,10.420515 -4.775901,-1.302327 -9.551874,-2.821959 -14.328206,-4.233334 -0.651031,-4.016055 -1.3023,-8.249309 -1.953846,-12.374359 2.713994,2.65e-4 5.427616,2.65e-4 7.815385,-1.302565 z" />
<path
style="fill:none;stroke:#000000;stroke-width:2.58488;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -116.60991,139.53933 c 4.74482,-2.08583 9.4895,-4.17161 17.307668,-2.71141 7.818164,1.46019 18.709173,6.46596 26.904559,8.55164 8.195385,2.08568 13.694804,1.25138 19.194415,3.44164 5.49961,2.19026 10.99903,7.40461 15.312438,10.89826 4.313407,3.49366 7.44053,5.26654 10.567407,7.03928"
id="path1160"
inkscape:path-effect="#path-effect1162"
inkscape:original-d="m -116.60991,139.53933 c 4.74495,-2.08553 9.48964,-4.1713 14.23407,-6.25733 10.891712,5.00622 21.78272,10.01199 32.673685,15.0176 5.499901,-0.83407 10.999321,-1.66836 16.49859,-2.50294 5.499902,5.21481 10.999323,10.42915 16.498591,15.64334 3.127507,1.7732 6.254629,3.54608 9.381551,5.31874" />
<path
style="fill:none;stroke:#000000;stroke-width:2.37847;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 178.78031,71.290576 c -2.29061,1.596115 -5.82204,3.391795 -7.11054,6.285039 -1.2885,2.893244 -0.33408,6.883563 2.09989,10.425039 2.43397,3.541477 6.34711,6.63397 9.54447,7.880838 3.19736,1.246867 5.67886,0.648319 7.82636,0.04975 2.1475,-0.598567 3.96091,-1.197111 5.05844,-3.042574 1.09754,-1.845462 1.47931,-4.937962 1.38389,-8.379691 -0.0954,-3.441729 -0.66807,-7.232532 -1.86107,-10.474758 -1.193,-3.242225 -3.00641,-5.935687 -5.20166,-7.033201 -2.19524,-1.097515 -4.77218,-0.598726 -6.58575,0.349048 -1.81356,0.947773 -2.86343,2.344393 -5.15403,3.940507 z"
id="path1172"
inkscape:path-effect="#path-effect1174"
inkscape:original-d="m 180.02106,71.091053 c -3.53121,1.795925 -7.06265,3.591603 -10.59432,5.387042 0.95469,3.990726 1.90911,7.981046 2.86333,11.971206 3.91353,3.09287 7.82667,6.18536 11.73965,9.27767 2.48184,-0.598318 4.96334,-1.196868 7.44465,-1.795678 1.81372,-0.59832 3.62712,-1.196882 5.44034,-1.795672 0.38202,-3.09238 0.76379,-6.18488 1.14533,-9.27769 -0.57244,-3.79071 -1.1451,-7.581512 -1.718,-11.372639 -1.81324,-2.69333 -3.62664,-5.386795 -5.44033,-8.08056 -2.57681,0.499054 -5.15375,0.997844 -7.73099,1.4964 -1.04967,1.396913 -2.09955,2.793525 -3.14966,4.189921 z" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 159.88972,127.75998 c -0.75982,2.27959 -0.86836,4.99326 0.54294,6.83849 1.4113,1.84524 4.34201,2.82214 6.34996,1.84521 2.00794,-0.97693 3.09339,-3.90764 2.38797,-6.67555 -0.70542,-2.76792 -3.20196,-5.37298 -5.15596,-5.753 -1.95401,-0.38001 -3.36509,1.46525 -4.12491,3.74485 z"
id="path1176"
inkscape:path-effect="#path-effect1178"
inkscape:original-d="m 159.23846,127.32564 c -0.10828,2.71394 -0.21683,5.42761 -0.32564,8.14102 2.93109,0.97721 5.8618,1.95411 8.7923,2.93077 1.08576,-2.93056 2.17121,-5.86127 3.25642,-8.79231 -2.49637,-2.60491 -4.9929,-5.20998 -7.48975,-7.81537 -1.41087,1.8456 -2.82195,3.69086 -4.23333,5.53589 z" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -2.6161553,41.039218 C 9.8785539,30.833665 22.373235,20.628134 33.626202,18.239762 c 11.252966,-2.388372 21.263525,3.040005 30.332359,10.230275 9.068834,7.19027 17.303542,16.260896 25.322996,20.657826 8.019453,4.39693 15.877193,4.179795 22.904233,-1.316528 7.02705,-5.496322 13.31711,-16.434667 17.14025,-25.663016 3.82314,-9.22835 5.22608,-16.8278992 6.62909,-24.4278062"
id="path1180"
inkscape:path-effect="#path-effect1182"
inkscape:original-d="M -2.6161553,41.039218 C 9.8787895,30.833953 22.373471,20.628422 34.867891,10.422624 c 10.011225,5.428861 20.021785,10.857238 30.032287,16.285461 8.181263,8.903157 16.361937,18.022837 24.542513,27.033859 7.858327,-0.216879 15.716069,-0.434013 23.573719,-0.651419 6.24366,-10.748351 12.4868,-21.713679 18.72981,-32.570916 1.40326,-7.599584 2.80621,-15.1991323 4.20891,-22.7990962"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 231.53077,15.956412 c -10.31182,3.79909 -20.62358,7.598159 -22.95735,13.51427 -2.33378,5.916111 3.27705,13.900741 8.51815,16.138997 5.24111,2.238256 9.98882,-1.322527 14.76485,-4.904549"
id="path4243"
inkscape:path-effect="#path-effect4245"
inkscape:original-d="m 231.53077,15.956412 c -10.3117,3.799409 -20.62346,7.598477 -30.9359,11.397435 5.64483,8.032907 11.25565,16.01754 16.93334,24.097436 4.80469,-3.603049 9.5524,-7.163835 14.32821,-10.746153"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 18.561564,63.228686 c 4.993242,-5.047542 12.917172,-9.06378 20.515537,-7.055495 7.598364,2.008284 14.87087,10.040604 14.816502,16.499121 -0.05437,6.458517 -7.435272,11.34294 -16.064807,12.374223 C 29.199261,86.077818 19.32188,83.255707 15.413925,78.805222 11.505971,74.354738 13.568322,68.276228 18.561564,63.228686 Z"
id="path6083"
inkscape:path-effect="#path-effect6085"
inkscape:original-d="m 15.630769,62.197437 c 7.924198,-4.015976 15.848128,-8.032214 23.771795,-12.048718 7.272915,8.032744 14.545421,16.065064 21.81795,24.097437 C 53.839436,79.131134 46.458533,84.015557 39.076923,88.900009 29.199211,86.077992 19.32183,83.255881 9.44359,80.433336 c 2.062699,-6.07849 4.12505,-12.157 6.187179,-18.235899 z"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -1.6282052,59.91795 C 12.005906,50.936749 25.725704,41.899104 37.231798,41.302236 c 11.506095,-0.596868 20.840951,7.21836 26.811055,16.010882 5.970105,8.792521 8.57518,18.561554 12.537226,29.633477 3.962045,11.071923 9.280745,23.446035 19.511542,31.722675 10.230799,8.27663 25.372799,12.45561 40.514799,16.63458"
id="path6547"
inkscape:path-effect="#path-effect6549"
inkscape:original-d="M -1.6282052,59.91795 C 12.006108,50.937055 25.725905,41.89941 39.402564,32.889743 c 9.335308,7.81565 18.670164,15.630878 28.00513,23.446156 2.605445,9.769692 5.21052,19.538725 7.815384,29.307694 5.319176,12.374869 10.637872,24.748987 15.95641,37.123077 15.142882,4.17941 30.284882,8.35839 45.426932,12.53718"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 139.04872,36.471797 c -7.05559,9.226536 -14.11115,18.453033 -22.41487,23.988888 -8.30372,5.535856 -17.855872,7.381159 -22.197839,13.351402 -4.341968,5.970244 -3.473607,16.064927 0.651399,23.717603 4.125007,7.65268 11.50606,12.86283 18.94153,16.28198 7.43547,3.41916 14.92521,5.04737 22.41466,6.67551"
id="path7054"
inkscape:path-effect="#path-effect7056"
inkscape:original-d="m 139.04872,36.471797 c -7.05529,9.226764 -14.11085,18.453259 -21.16667,27.679486 -9.55186,1.845563 -19.104013,3.690865 -28.656408,5.535899 0.868641,10.095128 1.737002,20.189811 2.605131,30.284615 7.381606,5.210623 14.762657,10.420773 22.143597,15.630763 7.49,1.62847 14.97974,3.25668 22.46923,4.88462"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -1.9538462,116.25385 c 7.381211,-6.72993 14.7622602,-13.45971 23.8805122,-16.987553 9.118252,-3.527845 19.972527,-3.853473 28.547873,1.031393 8.575347,4.88487 14.870823,14.97934 22.794982,21.98068 7.924159,7.00133 17.4761,10.90895 27.027919,14.81651"
id="path8777"
inkscape:path-effect="#path-effect8779"
inkscape:original-d="M -1.9538462,116.25385 C 5.4276177,109.5242 12.808666,102.79442 20.189745,96.064106 c 10.855181,-0.325383 21.709456,-0.65101 32.564102,-0.976921 6.296113,10.095325 12.59159,20.189795 18.887181,30.284615 9.552596,3.90804 19.104538,7.81565 28.656412,11.72308"
sodipodi:nodetypes="ccccc" />
<rect
style="fill:none;stroke:#000000;stroke-width:2.48668;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect11183"
width="132.98"
height="132.98"
x="1.2433392"
y="1.2433392" />
</g>
</svg>

After

(image error) Size: 24 KiB

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 135.47 135.47" xmlns="http://www.w3.org/2000/svg">
<path transform="scale(.26458)" d="m-10.008-10.928c-3.9909 5.5723-1.0575 13.176-1.9547 19.631 0.2481 45.593-0.58211 91.231 0.7496 136.8 1.3847 5.1449 7.9984 4.4384 10.833 0.91448 34.027-26.239 66.854-54.99 106.88-71.462 14.693-6.1796 30.817-9.2285 46.497-7.8445 26.002 0.21924 49.486 12.596 70.717 26.525 35.7 24.736 65.159 57.118 100.1 82.823 18.562 13.001 41.181 23.201 64.338 19.256 24.577-2.7074 43.756-20.593 58.395-39.165 35.142-45.28 55.459-100.47 65.185-156.57 1.6626-4.4466 2.0478-12.301-4.6299-11.942h-514.06c-1.0153 0.34506-2.0307 0.69011-3.046 1.0352z" style="fill:#217867"/>
<path transform="scale(.26458)" d="m514.23 6.3538c-5.0901 5.0262-4.7666 13.238-6.9161 19.741-11.986 50.781-33.226 100.97-67.965 140.71-15.215 16.821-36.348 31.446-59.969 30.419-16.904 0.59735-34.436-5.5385-48.696-15.106-42.637-28.09-75.473-68.894-119.54-95.053-24.178-14.263-52.937-23.95-81.168-18.072-34.082 6.9463-63.132 27.694-90.675 47.864-16.857 12.892-33.715 25.988-49.853 39.665-3.0884 5.8496-0.61689 13.236-1.411 19.706 0.42128 14.842-0.89654 29.856 0.94786 44.599 1.7164 5.5067 8.4182 3.8523 11.557 0.60275 35.291-23.076 71.041-47.047 111.39-60.2 22.486-7.4553 48.273-7.8706 70.286 2.1434 36.226 15.947 61.534 49.406 77.797 84.474 24.067 54.048 35.499 114.07 69.735 163.3 19.127 28.684 47.63 49.91 78.881 63.833 34.193 15.741 70.673 25.734 106.9 35.53 6.579 0.79276 7.5515-7.0894 7.1856-11.885-0.16082-13.273 0.76916-26.778-0.46895-39.897-2.2559-5.245-9.2162-2.5046-13.669-4.495-44.291-9.4023-90.547-22.783-124.87-54.136-25.702-23.048-41.139-58.13-37.321-92.935 1.4047-17.05 10.547-33.333 25.169-42.474 25.303-16.417 55.365-24.722 78.906-44.051 27.811-22.231 49.541-50.791 71.287-78.697 2.3934-8.5121 0.4057-17.763 1.0556-26.569-0.30877-34.881 0.68822-69.808-0.78019-104.66-0.2094-3.8091-4.4493-6.1742-7.8071-4.3616z" style="fill:#2ca089"/>
<path transform="scale(.26458)" d="m143.76 156.61c-34.965 1.1273-66.323 19.124-95.824 36.186-18.734 10.667-36.153 23.624-55.015 33.972-6.2262 2.8059-3.8625 11.131-4.6247 16.552-0.34144 60.12-0.52706 120.25 0.10841 180.37-0.23451 4.589 0.64128 12.23 7.0082 11.176 8.1468-4.5754 14.315-12.245 21.735-17.958 30.02-26.378 66.288-48.943 106.77-51.583 29.469-2.7785 61.455 5.3186 84.274 25.441 33.804 29.396 58.538 69.258 98.073 92.085 23.227 14.894 49.358 24.064 74.067 35.965 6.8385 3.3782 15.107 1.3904 22.513 2.1329 35.538 0.0166 71.118 0.61656 106.63-0.62523 6.0732-1.3088 4.5659-9.9796-1.1626-10.426-47.364-14.145-96.261-26.523-137.33-54.964-36.548-25.623-58.869-66.343-74.793-107.05-15.675-39.558-26.08-81.579-47.052-118.94-18.485-31.177-45.7-60.28-81.912-69.591-7.658-1.9322-15.567-2.8738-23.465-2.74zm-11.815 53.64c24.166-0.66025 45.836 14.582 59.956 33.176 7.4731 9.7104 12.976 21.582 11.519 34.121 0.0453 11.788-8.8614 21.443-17.613 28.334-21.461 15.575-48.524 18.55-74.183 15.244-19.077-2.4928-39.309-8.141-53.042-22.401-10.683-11.145-10.162-28.879-2.616-41.595 8.4296-15.325 22.079-27.454 37.059-36.239 11.783-6.6335 25.178-10.65 38.92-10.639z" style="fill:#37c8ab"/>
<path transform="scale(.26458)" d="m131.78 210.94c-29.751 0.77109-57.137 19.315-73.182 43.7-7.9846 11.936-11.186 29.508-1.0501 41.225 13.777 15.502 34.994 21.637 54.809 24.835 21.39 2.0516 43.902 0.70125 63.189-9.6598 14.544-7.3534 28.971-21.596 27.48-39.159-2.0418-15.466-11.039-29.246-22.627-39.386-12.744-12.883-30.192-21.907-48.619-21.557z" style="fill:#87decd"/>
<path transform="scale(.26458)" d="m515.83 154.4c-7.0465 3.5005-10.445 11.561-15.891 16.973-21.856 26.195-45.484 52.972-77.071 67.692-17.85 9.7109-37.023 17.203-53.837 28.702-15.109 10.553-22.121 29.149-22.2 47.083-1.3968 39.266 21.808 76.373 54.062 97.499 30.06 20.526 65.209 31.718 100.48 39.387 5.7482 0.6546 11.651 4.0685 17.404 2.5113 5.3197-3.8934 2.8435-11.71 3.7093-17.345 0.55705-88.779 0.49881-177.57-0.1242-266.35-0.87165-5.2651 1.937-12.511-3.4628-15.924-1.0195-0.0525-2.0509-0.23628-3.0664-0.23286z" style="fill:#217867"/>
<path transform="scale(.26458)" d="m134.47 365.79c-39.197-0.11713-76.078 18.16-105.63 42.848-12.701 9.9867-25.133 22.014-37.252 31.686-0.012306-0.51675-3.921 3.6066-3.0358 6.2637-0.75178 23.411-0.7084 46.97-0.235 70.316 2.0113 6.8303 10.767 3.319 16.034 4.1767 118.17-0.11079 236.35 0.26709 354.52-0.33825 5.9948-0.7914 5.4577-9.2024-5e-3 -10.348-34.816-15.1-69.878-32.685-95.849-61.11-21.506-21.765-39.975-46.996-65.073-64.911-18.631-12.806-40.966-18.872-63.469-18.582z" style="fill:#2ca089"/>
<path d="m3.9077 188.55c10.855-12.374 21.709-24.749 32.619-26.431 10.909-1.6823 21.872 7.3268 33.595 17.639 11.723 10.312 24.206 21.926 35.82 21.6 11.615-0.32577 22.361-12.591 33.107-24.857" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-43.546 65.936c3.9268 1.0372 9.2456 3.5337 10.682 6.483 1.4366 2.9492-1.1113 6.4942-4.7328 7.5298s-8.4269-0.38424-11.132-3.0992c-2.7055-2.7149-3.3734-6.9455-2.3788-9.2281 0.99464-2.2826 3.6349-2.7226 7.5617-1.6855z" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-116.61 139.54c4.7448-2.0858 9.4895-4.1716 17.308-2.7114 7.8182 1.4602 18.709 6.466 26.905 8.5516 8.1954 2.0857 13.695 1.2514 19.194 3.4416 5.4996 2.1903 10.999 7.4046 15.312 10.898 4.3134 3.4937 7.4405 5.2665 10.567 7.0393" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.5849;stroke:#000000"/>
<path d="m178.78 71.291c-2.2906 1.5961-5.822 3.3918-7.1105 6.285s-0.33408 6.8836 2.0999 10.425c2.434 3.5415 6.3471 6.634 9.5445 7.8808 3.1974 1.2469 5.6789 0.64832 7.8264 0.04975 2.1475-0.59857 3.9609-1.1971 5.0584-3.0426 1.0975-1.8455 1.4793-4.938 1.3839-8.3797-0.0954-3.4417-0.66807-7.2325-1.8611-10.475-1.193-3.2422-3.0064-5.9357-5.2017-7.0332-2.1952-1.0975-4.7722-0.59873-6.5858 0.34905-1.8136 0.94777-2.8634 2.3444-5.154 3.9405z" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.3785;stroke:#000000"/>
<path d="m159.89 127.76c-0.75982 2.2796-0.86836 4.9933 0.54294 6.8385 1.4113 1.8452 4.342 2.8221 6.35 1.8452 2.0079-0.97693 3.0934-3.9076 2.388-6.6756-0.70542-2.7679-3.202-5.373-5.156-5.753-1.954-0.38001-3.3651 1.4652-4.1249 3.7448z" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-2.6162 41.039c12.495-10.206 24.989-20.411 36.242-22.799 11.253-2.3884 21.264 3.04 30.332 10.23s17.304 16.261 25.323 20.658c8.0195 4.3969 15.877 4.1798 22.904-1.3165 7.027-5.4963 13.317-16.435 17.14-25.663 3.8231-9.2284 5.2261-16.828 6.6291-24.428" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m231.53 15.956c-10.312 3.7991-20.624 7.5982-22.957 13.514-2.3338 5.9161 3.277 13.901 8.5182 16.139 5.2411 2.2383 9.9888-1.3225 14.765-4.9045" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m18.562 63.229c4.9932-5.0475 12.917-9.0638 20.516-7.0555 7.5984 2.0083 14.871 10.041 14.817 16.499-0.05437 6.4585-7.4353 11.343-16.065 12.374s-18.507-1.7908-22.415-6.2413c-3.908-4.4505-1.8456-10.529 3.1476-15.577z" style="fill:none;stroke-linecap:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-1.6282 59.918c13.634-8.9812 27.354-18.019 38.86-18.616 11.506-0.59687 20.841 7.2184 26.811 16.011 5.9701 8.7925 8.5752 18.562 12.537 29.633 3.962 11.072 9.2807 23.446 19.512 31.723 10.231 8.2766 25.373 12.456 40.515 16.635" style="fill:none;stroke-linecap:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m139.05 36.472c-7.0556 9.2265-14.111 18.453-22.415 23.989-8.3037 5.5359-17.856 7.3812-22.198 13.351-4.342 5.9702-3.4736 16.065 0.6514 23.718 4.125 7.6527 11.506 12.863 18.942 16.282 7.4355 3.4192 14.925 5.0474 22.415 6.6755" style="fill:none;stroke-linecap:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-1.9538 116.25c7.3812-6.7299 14.762-13.46 23.881-16.988 9.1183-3.5278 19.973-3.8535 28.548 1.0314 8.5753 4.8849 14.871 14.979 22.795 21.981 7.9242 7.0013 17.476 10.909 27.028 14.817" style="fill:none;stroke-linecap:round;stroke-width:2.6458;stroke:#000000"/>
<rect x="1.2433" y="1.2433" width="132.98" height="132.98" style="fill:none;stroke-linecap:round;stroke-width:2.4867;stroke:#000000"/>
</svg>

After

(image error) Size: 8.1 KiB

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="512" height="512" version="1.1" viewBox="0 0 135.47 135.47" xmlns="http://www.w3.org/2000/svg">
<path transform="scale(.26458)" d="m-10.008-10.928c-3.9909 5.5723-1.0575 13.176-1.9547 19.631 0.2481 45.593-0.58211 91.231 0.7496 136.8 1.3847 5.1449 7.9984 4.4384 10.833 0.91448 34.027-26.239 66.854-54.99 106.88-71.462 14.693-6.1796 30.817-9.2285 46.497-7.8445 26.002 0.21924 49.486 12.596 70.717 26.525 35.7 24.736 65.159 57.118 100.1 82.823 18.562 13.001 41.181 23.201 64.338 19.256 24.577-2.7074 43.756-20.593 58.395-39.165 35.142-45.28 55.459-100.47 65.185-156.57 1.6626-4.4466 2.0478-12.301-4.6299-11.942h-514.06c-1.0153 0.34506-2.0307 0.69011-3.046 1.0352z" style="fill:#217867"/>
<path transform="scale(.26458)" d="m514.23 6.3538c-5.0901 5.0262-4.7666 13.238-6.9161 19.741-11.986 50.781-33.226 100.97-67.965 140.71-15.215 16.821-36.348 31.446-59.969 30.419-16.904 0.59735-34.436-5.5385-48.696-15.106-42.637-28.09-75.473-68.894-119.54-95.053-24.178-14.263-52.937-23.95-81.168-18.072-34.082 6.9463-63.132 27.694-90.675 47.864-16.857 12.892-33.715 25.988-49.853 39.665-3.0884 5.8496-0.61689 13.236-1.411 19.706 0.42128 14.842-0.89654 29.856 0.94786 44.599 1.7164 5.5067 8.4182 3.8523 11.557 0.60275 35.291-23.076 71.041-47.047 111.39-60.2 22.486-7.4553 48.273-7.8706 70.286 2.1434 36.226 15.947 61.534 49.406 77.797 84.474 24.067 54.048 35.499 114.07 69.735 163.3 19.127 28.684 47.63 49.91 78.881 63.833 34.193 15.741 70.673 25.734 106.9 35.53 6.579 0.79276 7.5515-7.0894 7.1856-11.885-0.16082-13.273 0.76916-26.778-0.46895-39.897-2.2559-5.245-9.2162-2.5046-13.669-4.495-44.291-9.4023-90.547-22.783-124.87-54.136-25.702-23.048-41.139-58.13-37.321-92.935 1.4047-17.05 10.547-33.333 25.169-42.474 25.303-16.417 55.365-24.722 78.906-44.051 27.811-22.231 49.541-50.791 71.287-78.697 2.3934-8.5121 0.4057-17.763 1.0556-26.569-0.30877-34.881 0.68822-69.808-0.78019-104.66-0.2094-3.8091-4.4493-6.1742-7.8071-4.3616z" style="fill:#2ca089"/>
<path transform="scale(.26458)" d="m143.76 156.61c-34.965 1.1273-66.323 19.124-95.824 36.186-18.734 10.667-36.153 23.624-55.015 33.972-6.2262 2.8059-3.8625 11.131-4.6247 16.552-0.34144 60.12-0.52706 120.25 0.10841 180.37-0.23451 4.589 0.64128 12.23 7.0082 11.176 8.1468-4.5754 14.315-12.245 21.735-17.958 30.02-26.378 66.288-48.943 106.77-51.583 29.469-2.7785 61.455 5.3186 84.274 25.441 33.804 29.396 58.538 69.258 98.073 92.085 23.227 14.894 49.358 24.064 74.067 35.965 6.8385 3.3782 15.107 1.3904 22.513 2.1329 35.538 0.0166 71.118 0.61656 106.63-0.62523 6.0732-1.3088 4.5659-9.9796-1.1626-10.426-47.364-14.145-96.261-26.523-137.33-54.964-36.548-25.623-58.869-66.343-74.793-107.05-15.675-39.558-26.08-81.579-47.052-118.94-18.485-31.177-45.7-60.28-81.912-69.591-7.658-1.9322-15.567-2.8738-23.465-2.74zm-11.815 53.64c24.166-0.66025 45.836 14.582 59.956 33.176 7.4731 9.7104 12.976 21.582 11.519 34.121 0.0453 11.788-8.8614 21.443-17.613 28.334-21.461 15.575-48.524 18.55-74.183 15.244-19.077-2.4928-39.309-8.141-53.042-22.401-10.683-11.145-10.162-28.879-2.616-41.595 8.4296-15.325 22.079-27.454 37.059-36.239 11.783-6.6335 25.178-10.65 38.92-10.639z" style="fill:#37c8ab"/>
<path transform="scale(.26458)" d="m131.78 210.94c-29.751 0.77109-57.137 19.315-73.182 43.7-7.9846 11.936-11.186 29.508-1.0501 41.225 13.777 15.502 34.994 21.637 54.809 24.835 21.39 2.0516 43.902 0.70125 63.189-9.6598 14.544-7.3534 28.971-21.596 27.48-39.159-2.0418-15.466-11.039-29.246-22.627-39.386-12.744-12.883-30.192-21.907-48.619-21.557z" style="fill:#87decd"/>
<path transform="scale(.26458)" d="m515.83 154.4c-7.0465 3.5005-10.445 11.561-15.891 16.973-21.856 26.195-45.484 52.972-77.071 67.692-17.85 9.7109-37.023 17.203-53.837 28.702-15.109 10.553-22.121 29.149-22.2 47.083-1.3968 39.266 21.808 76.373 54.062 97.499 30.06 20.526 65.209 31.718 100.48 39.387 5.7482 0.6546 11.651 4.0685 17.404 2.5113 5.3197-3.8934 2.8435-11.71 3.7093-17.345 0.55705-88.779 0.49881-177.57-0.1242-266.35-0.87165-5.2651 1.937-12.511-3.4628-15.924-1.0195-0.0525-2.0509-0.23628-3.0664-0.23286z" style="fill:#217867"/>
<path transform="scale(.26458)" d="m134.47 365.79c-39.197-0.11713-76.078 18.16-105.63 42.848-12.701 9.9867-25.133 22.014-37.252 31.686-0.012306-0.51675-3.921 3.6066-3.0358 6.2637-0.75178 23.411-0.7084 46.97-0.235 70.316 2.0113 6.8303 10.767 3.319 16.034 4.1767 118.17-0.11079 236.35 0.26709 354.52-0.33825 5.9948-0.7914 5.4577-9.2024-5e-3 -10.348-34.816-15.1-69.878-32.685-95.849-61.11-21.506-21.765-39.975-46.996-65.073-64.911-18.631-12.806-40.966-18.872-63.469-18.582z" style="fill:#2ca089"/>
<path d="m3.9077 188.55c10.855-12.374 21.709-24.749 32.619-26.431 10.909-1.6823 21.872 7.3268 33.595 17.639 11.723 10.312 24.206 21.926 35.82 21.6 11.615-0.32577 22.361-12.591 33.107-24.857" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-43.546 65.936c3.9268 1.0372 9.2456 3.5337 10.682 6.483 1.4366 2.9492-1.1113 6.4942-4.7328 7.5298s-8.4269-0.38424-11.132-3.0992c-2.7055-2.7149-3.3734-6.9455-2.3788-9.2281 0.99464-2.2826 3.6349-2.7226 7.5617-1.6855z" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-116.61 139.54c4.7448-2.0858 9.4895-4.1716 17.308-2.7114 7.8182 1.4602 18.709 6.466 26.905 8.5516 8.1954 2.0857 13.695 1.2514 19.194 3.4416 5.4996 2.1903 10.999 7.4046 15.312 10.898 4.3134 3.4937 7.4405 5.2665 10.567 7.0393" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.5849;stroke:#000000"/>
<path d="m178.78 71.291c-2.2906 1.5961-5.822 3.3918-7.1105 6.285s-0.33408 6.8836 2.0999 10.425c2.434 3.5415 6.3471 6.634 9.5445 7.8808 3.1974 1.2469 5.6789 0.64832 7.8264 0.04975 2.1475-0.59857 3.9609-1.1971 5.0584-3.0426 1.0975-1.8455 1.4793-4.938 1.3839-8.3797-0.0954-3.4417-0.66807-7.2325-1.8611-10.475-1.193-3.2422-3.0064-5.9357-5.2017-7.0332-2.1952-1.0975-4.7722-0.59873-6.5858 0.34905-1.8136 0.94777-2.8634 2.3444-5.154 3.9405z" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.3785;stroke:#000000"/>
<path d="m159.89 127.76c-0.75982 2.2796-0.86836 4.9933 0.54294 6.8385 1.4113 1.8452 4.342 2.8221 6.35 1.8452 2.0079-0.97693 3.0934-3.9076 2.388-6.6756-0.70542-2.7679-3.202-5.373-5.156-5.753-1.954-0.38001-3.3651 1.4652-4.1249 3.7448z" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-2.6162 41.039c12.495-10.206 24.989-20.411 36.242-22.799 11.253-2.3884 21.264 3.04 30.332 10.23s17.304 16.261 25.323 20.658c8.0195 4.3969 15.877 4.1798 22.904-1.3165 7.027-5.4963 13.317-16.435 17.14-25.663 3.8231-9.2284 5.2261-16.828 6.6291-24.428" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m231.53 15.956c-10.312 3.7991-20.624 7.5982-22.957 13.514-2.3338 5.9161 3.277 13.901 8.5182 16.139 5.2411 2.2383 9.9888-1.3225 14.765-4.9045" style="fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m18.562 63.229c4.9932-5.0475 12.917-9.0638 20.516-7.0555 7.5984 2.0083 14.871 10.041 14.817 16.499-0.05437 6.4585-7.4353 11.343-16.065 12.374s-18.507-1.7908-22.415-6.2413c-3.908-4.4505-1.8456-10.529 3.1476-15.577z" style="fill:none;stroke-linecap:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-1.6282 59.918c13.634-8.9812 27.354-18.019 38.86-18.616 11.506-0.59687 20.841 7.2184 26.811 16.011 5.9701 8.7925 8.5752 18.562 12.537 29.633 3.962 11.072 9.2807 23.446 19.512 31.723 10.231 8.2766 25.373 12.456 40.515 16.635" style="fill:none;stroke-linecap:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m139.05 36.472c-7.0556 9.2265-14.111 18.453-22.415 23.989-8.3037 5.5359-17.856 7.3812-22.198 13.351-4.342 5.9702-3.4736 16.065 0.6514 23.718 4.125 7.6527 11.506 12.863 18.942 16.282 7.4355 3.4192 14.925 5.0474 22.415 6.6755" style="fill:none;stroke-linecap:round;stroke-width:2.6458;stroke:#000000"/>
<path d="m-1.9538 116.25c7.3812-6.7299 14.762-13.46 23.881-16.988 9.1183-3.5278 19.973-3.8535 28.548 1.0314 8.5753 4.8849 14.871 14.979 22.795 21.981 7.9242 7.0013 17.476 10.909 27.028 14.817" style="fill:none;stroke-linecap:round;stroke-width:2.6458;stroke:#000000"/>
<rect x="1.2433" y="1.2433" width="132.98" height="132.98" style="fill:none;stroke-linecap:round;stroke-width:2.4867;stroke:#000000"/>
</svg>

After

(image error) Size: 8.1 KiB

File diff suppressed because one or more lines are too long

After

(image error) Size: 126 KiB

File diff suppressed because it is too large Load Diff

@ -0,0 +1,60 @@
# Haskell Binding for Isocline
You can build and run the [example] program as:
```
$ ghc -ihaskell test/Example.hs src/isocline.c
$ ./test/Example
```
See the [API documentation](https://hackage.haskell.org/package/isocline/docs/System-Console-Isocline.html) on hackage.
## Using with Stack
You can build with isocline by adding
```
extra-deps:
- isocline-<version>
```
to your `stack.yaml` file, and
```
dependencies:
- isocline
```
to your `package.yaml` file (and also run `stack update`).
## Using with Cabal
To use it with Cabal, add
```
build-depends:
isocline
```
to your `project.cabal` file (and perhaps run `cabal update`).
# Building Isocline from Source
## Building with Stack
From the isocline directory, run:
```
$ stack build
$ stack exec example
```
## Building with Cabal
From the isocline directory, run:
```
$ cabal build
$ cabal run example
```
You can install the locally build `isocline` package as:
```
$ cabal install
```
[example]: https://github.com/daanx/isocline/blob/main/test/Example.hs

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{4f1ba749-eadd-4537-b910-56755ce72d80}</ProjectGuid>
<RootNamespace>example</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)..\..\build\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(OutDir)</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)..\..\build\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(OutDir)</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)..\..\build\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(OutDir)</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)..\..\build\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(OutDir)</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>IC_SEPARATE_OBJS;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>IC_SEPARATE_OBJS;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>IC_SEPARATE_OBJS;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>IC_SEPARATE_OBJS;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\test\example.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\include\isocline.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="isocline.vcxproj">
<Project>{4f1ba748-eadd-4537-b910-56755ce72d80}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\test\example.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\include\isocline.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

@ -0,0 +1,41 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30709.132
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example", "example.vcxproj", "{4F1BA749-EADD-4537-B910-56755CE72D80}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "isocline", "isocline.vcxproj", "{4F1BA748-EADD-4537-B910-56755CE72D80}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4F1BA749-EADD-4537-B910-56755CE72D80}.Debug|x64.ActiveCfg = Debug|x64
{4F1BA749-EADD-4537-B910-56755CE72D80}.Debug|x64.Build.0 = Debug|x64
{4F1BA749-EADD-4537-B910-56755CE72D80}.Debug|x86.ActiveCfg = Debug|Win32
{4F1BA749-EADD-4537-B910-56755CE72D80}.Debug|x86.Build.0 = Debug|Win32
{4F1BA749-EADD-4537-B910-56755CE72D80}.Release|x64.ActiveCfg = Release|x64
{4F1BA749-EADD-4537-B910-56755CE72D80}.Release|x64.Build.0 = Release|x64
{4F1BA749-EADD-4537-B910-56755CE72D80}.Release|x86.ActiveCfg = Release|Win32
{4F1BA749-EADD-4537-B910-56755CE72D80}.Release|x86.Build.0 = Release|Win32
{4F1BA748-EADD-4537-B910-56755CE72D80}.Debug|x64.ActiveCfg = Debug|x64
{4F1BA748-EADD-4537-B910-56755CE72D80}.Debug|x64.Build.0 = Debug|x64
{4F1BA748-EADD-4537-B910-56755CE72D80}.Debug|x86.ActiveCfg = Debug|Win32
{4F1BA748-EADD-4537-B910-56755CE72D80}.Debug|x86.Build.0 = Debug|Win32
{4F1BA748-EADD-4537-B910-56755CE72D80}.Release|x64.ActiveCfg = Release|x64
{4F1BA748-EADD-4537-B910-56755CE72D80}.Release|x64.Build.0 = Release|x64
{4F1BA748-EADD-4537-B910-56755CE72D80}.Release|x86.ActiveCfg = Release|Win32
{4F1BA748-EADD-4537-B910-56755CE72D80}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0D69DA9B-B745-4DA2-808A-4D8C6F12FCCD}
EndGlobalSection
EndGlobal

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{4f1ba748-eadd-4537-b910-56755ce72d80}</ProjectGuid>
<RootNamespace>isocline</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)..\..\build\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(OutDir)</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)..\..\build\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(OutDir)</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)..\..\build\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(OutDir)</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)..\..\build\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(OutDir)</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>IC_DEBUG_MSG;IC_SEPARATE_OBJS;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>IC_SEPARATE_OBJS;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>IC_DEBUG_MSG;IC_SEPARATE_OBJS;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>IC_SEPARATE_OBJS;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\src\attr.c" />
<ClCompile Include="..\..\src\bbcode.c" />
<ClCompile Include="..\..\src\bbcode_colors.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\common.c" />
<ClCompile Include="..\..\src\completers.c" />
<ClCompile Include="..\..\src\completions.c" />
<ClCompile Include="..\..\src\editline.c" />
<ClCompile Include="..\..\src\editline_completion.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\editline_help.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\editline_history.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\highlight.c" />
<ClCompile Include="..\..\src\history.c" />
<ClCompile Include="..\..\src\isocline.c" />
<ClCompile Include="..\..\src\stringbuf.c" />
<ClCompile Include="..\..\src\term.c" />
<ClCompile Include="..\..\src\term_color.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\tty.c" />
<ClCompile Include="..\..\src\tty_esc.c" />
<ClCompile Include="..\..\src\undo.c" />
<ClCompile Include="..\..\src\wcwidth.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\include\isocline.h" />
<ClInclude Include="..\..\src\attr.h" />
<ClInclude Include="..\..\src\bbcode.h" />
<ClInclude Include="..\..\src\common.h" />
<ClInclude Include="..\..\src\completions.h" />
<ClInclude Include="..\..\src\env.h" />
<ClInclude Include="..\..\src\highlight.h" />
<ClInclude Include="..\..\src\history.h" />
<ClInclude Include="..\..\src\stringbuf.h" />
<ClInclude Include="..\..\src\term.h" />
<ClInclude Include="..\..\src\tty.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\completions.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\editline.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\history.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\isocline.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\stringbuf.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\term.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\tty.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\tty_esc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\wcwidth.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\completers.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\undo.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\editline_completion.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\editline_help.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\editline_history.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\highlight.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\term_color.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\attr.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\bbcode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\bbcode_colors.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\env.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\stringbuf.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\term.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\tty.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\include\isocline.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\history.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\completions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\highlight.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\attr.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\bbcode.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

@ -0,0 +1,627 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#pragma once
#ifndef IC_ISOCLINE_H
#define IC_ISOCLINE_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stddef.h> // size_t
#include <stdbool.h> // bool
#include <stdint.h> // uint32_t
#include <stdarg.h> // term_vprintf
/*! \mainpage
Isocline C API reference.
Isocline is a pure C library that can be used as an alternative to the GNU readline library.
See the [Github repository](https://github.com/daanx/isocline#readme)
for general information and building the library.
Contents:
- \ref readline
- \ref bbcode
- \ref history
- \ref completion
- \ref highlight
- \ref options
- \ref helper
- \ref completex
- \ref term
- \ref async
- \ref alloc
*/
/// \defgroup readline Readline
/// The basic readline interface.
/// \{
/// Isocline version: 102 = 1.0.2.
#define IC_VERSION (104)
/// Read input from the user using rich editing abilities.
/// @param prompt_text The prompt text, can be NULL for the default ("").
/// The displayed prompt becomes `prompt_text` followed by the `prompt_marker` ("> ").
/// @returns the heap allocated input on succes, which should be `free`d by the caller.
/// Returns NULL on error, or if the user typed ctrl+d or ctrl+c.
///
/// If the standard input (`stdin`) has no editing capability
/// (like a dumb terminal (e.g. `TERM`=`dumb`), running in a debuggen, a pipe or redirected file, etc.)
/// the input is read directly from the input stream up to the
/// next line without editing capability.
/// See also \a ic_set_prompt_marker(), \a ic_style_def()
///
/// @see ic_set_prompt_marker(), ic_style_def()
char* ic_readline(const char* prompt_text);
/// \}
//--------------------------------------------------------------
/// \defgroup bbcode Formatted Text
/// Formatted text using [bbcode markup](https://github.com/daanx/isocline#bbcode-format).
/// \{
/// Print to the terminal while respection bbcode markup.
/// Any unclosed tags are closed automatically at the end of the print.
/// For example:
/// ```
/// ic_print("[b]bold, [i]bold and italic[/i], [red]red and bold[/][/b] default.");
/// ic_print("[b]bold[/], [i b]bold and italic[/], [yellow on blue]yellow on blue background");
/// ic_style_add("em","i color=#888800");
/// ic_print("[em]emphasis");
/// ```
/// Properties that can be assigned are:
/// * `color=` _clr_, `bgcolor=` _clr_: where _clr_ is either a hex value `#`RRGGBB or `#`RGB, a
/// standard HTML color name, or an ANSI palette name, like `ansi-maroon`, `ansi-default`, etc.
/// * `bold`,`italic`,`reverse`,`underline`: can be `on` or `off`.
/// * everything else is a style; all HTML and ANSI color names are also a style (so we can just use `red`
/// instead of `color=red`, or `on red` instead of `bgcolor=red`), and there are
/// the `b`, `i`, `u`, and `r` styles for bold, italic, underline, and reverse.
///
/// See [here](https://github.com/daanx/isocline#bbcode-format) for a description of the full bbcode format.
void ic_print( const char* s );
/// Print with bbcode markup ending with a newline.
/// @see ic_print()
void ic_println( const char* s );
/// Print formatted with bbcode markup.
/// @see ic_print()
void ic_printf(const char* fmt, ...);
/// Print formatted with bbcode markup.
/// @see ic_print
void ic_vprintf(const char* fmt, va_list args);
/// Define or redefine a style.
/// @param style_name The name of the style.
/// @param fmt The `fmt` string is the content of a tag and can contain
/// other styles. This is very useful to theme the output of a program
/// by assigning standard styles like `em` or `warning` etc.
void ic_style_def( const char* style_name, const char* fmt );
/// Start a global style that is only reset when calling a matching ic_style_close().
void ic_style_open( const char* fmt );
/// End a global style.
void ic_style_close(void);
/// \}
//--------------------------------------------------------------
// History
//--------------------------------------------------------------
/// \defgroup history History
/// Readline input history.
/// \{
/// Enable history.
/// Use a \a NULL filename to not persist the history. Use -1 for max_entries to get the default (200).
void ic_set_history(const char* fname, long max_entries );
/// Remove the last entry in the history.
/// The last returned input from ic_readline() is automatically added to the history; this function removes it.
void ic_history_remove_last(void);
/// Clear the history.
void ic_history_clear(void);
/// Add an entry to the history
void ic_history_add( const char* entry );
/// \}
//--------------------------------------------------------------
// Basic Completion
//--------------------------------------------------------------
/// \defgroup completion Completion
/// Basic word completion.
/// \{
/// A completion environment
struct ic_completion_env_s;
/// A completion environment
typedef struct ic_completion_env_s ic_completion_env_t;
/// A completion callback that is called by isocline when tab is pressed.
/// It is passed a completion environment (containing the current input and the current cursor position),
/// the current input up-to the cursor (`prefix`)
/// and the user given argument when the callback was set.
/// When using completion transformers, like `ic_complete_quoted_word` the `prefix` contains the
/// the word to be completed without escape characters or quotes.
typedef void (ic_completer_fun_t)(ic_completion_env_t* cenv, const char* prefix );
/// Set the default completion handler.
/// @param completer The completion function
/// @param arg Argument passed to the \a completer.
/// There can only be one default completion function, setting it again disables the previous one.
/// The initial completer use `ic_complete_filename`.
void ic_set_default_completer( ic_completer_fun_t* completer, void* arg);
/// In a completion callback (usually from ic_complete_word()), use this function to add a completion.
/// (the completion string is copied by isocline and do not need to be preserved or allocated).
///
/// Returns `true` if the callback should continue trying to find more possible completions.
/// If `false` is returned, the callback should try to return and not add more completions (for improved latency).
bool ic_add_completion(ic_completion_env_t* cenv, const char* completion);
/// In a completion callback (usually from ic_complete_word()), use this function to add a completion.
/// The `display` is used to display the completion in the completion menu, and `help` is
/// displayed for hints for example. Both can be `NULL` for the default.
/// (all are copied by isocline and do not need to be preserved or allocated).
///
/// Returns `true` if the callback should continue trying to find more possible completions.
/// If `false` is returned, the callback should try to return and not add more completions (for improved latency).
bool ic_add_completion_ex( ic_completion_env_t* cenv, const char* completion, const char* display, const char* help );
/// In a completion callback (usually from ic_complete_word()), use this function to add completions.
/// The `completions` array should be terminated with a NULL element, and all elements
/// are added as completions if they start with `prefix`.
///
/// Returns `true` if the callback should continue trying to find more possible completions.
/// If `false` is returned, the callback should try to return and not add more completions (for improved latency).
bool ic_add_completions(ic_completion_env_t* cenv, const char* prefix, const char** completions);
/// Complete a filename.
/// Complete a filename given a semi-colon separated list of root directories `roots` and
/// semi-colon separated list of possible extensions (excluding directories).
/// If `roots` is NULL, the current directory is the root (".").
/// If `extensions` is NULL, any extension will match.
/// Each root directory should _not_ end with a directory separator.
/// If a directory is completed, the `dir_separator` is added at the end if it is not `0`.
/// Usually the `dir_separator` is `/` but it can be set to `\\` on Windows systems.
/// For example:
/// ```
/// /ho --> /home/
/// /home/.ba --> /home/.bashrc
/// ```
/// (This already uses ic_complete_quoted_word() so do not call it from inside a word handler).
void ic_complete_filename( ic_completion_env_t* cenv, const char* prefix, char dir_separator, const char* roots, const char* extensions );
/// Function that returns whether a (utf8) character (of length `len`) is in a certain character class
/// @see ic_char_is_separator() etc.
typedef bool (ic_is_char_class_fun_t)(const char* s, long len);
/// Complete a _word_ (i.e. _token_).
/// Calls the user provided function `fun` to complete on the
/// current _word_. Almost all user provided completers should use this function.
/// If `is_word_char` is NULL, the default `&ic_char_is_nonseparator` is used.
/// The `prefix` passed to `fun` is modified to only contain the current word, and
/// any results from `ic_add_completion` are automatically adjusted to replace that part.
/// For example, on the input "hello w", a the user `fun` only gets `w` and can just complete
/// with "world" resulting in "hello world" without needing to consider `delete_before` etc.
/// @see ic_complete_qword() for completing quoted and escaped tokens.
void ic_complete_word(ic_completion_env_t* cenv, const char* prefix, ic_completer_fun_t* fun, ic_is_char_class_fun_t* is_word_char);
/// Complete a quoted _word_.
/// Calls the user provided function `fun` to complete while taking
/// care of quotes and escape characters. Almost all user provided completers should use
/// this function. The `prefix` passed to `fun` is modified to be unquoted and unescaped, and
/// any results from `ic_add_completion` are automatically quoted and escaped again.
/// For example, completing `hello world`, the `fun` always just completes `hel` or `hello w` to `hello world`,
/// but depending on user input, it will complete as:
/// ```
/// hel --> hello\ world
/// hello\ w --> hello\ world
/// hello w --> # no completion, the word is just 'w'>
/// "hel --> "hello world"
/// "hello w --> "hello world"
/// ```
/// with proper quotes and escapes.
/// If `is_word_char` is NULL, the default `&ic_char_is_nonseparator` is used.
/// @see ic_complete_quoted_word() to customize the word boundary, quotes etc.
void ic_complete_qword( ic_completion_env_t* cenv, const char* prefix, ic_completer_fun_t* fun, ic_is_char_class_fun_t* is_word_char );
/// Complete a _word_.
/// Calls the user provided function `fun` to complete while taking
/// care of quotes and escape characters. Almost all user provided completers should use this function.
/// The `is_word_char` is a set of characters that are part of a "word". Use NULL for the default (`&ic_char_is_nonseparator`).
/// The `escape_char` is the escaping character, usually `\` but use 0 to not have escape characters.
/// The `quote_chars` define the quotes, use NULL for the default `"\'\""` quotes.
/// @see ic_complete_word() which uses the default values for `non_word_chars`, `quote_chars` and `\` for escape characters.
void ic_complete_qword_ex( ic_completion_env_t* cenv, const char* prefix, ic_completer_fun_t fun,
ic_is_char_class_fun_t* is_word_char, char escape_char, const char* quote_chars );
/// \}
//--------------------------------------------------------------
/// \defgroup highlight Syntax Highlighting
/// Basic syntax highlighting.
/// \{
/// A syntax highlight environment
struct ic_highlight_env_s;
typedef struct ic_highlight_env_s ic_highlight_env_t;
/// A syntax highlighter callback that is called by readline to syntax highlight user input.
typedef void (ic_highlight_fun_t)(ic_highlight_env_t* henv, const char* input, void* arg);
/// Set a syntax highlighter.
/// There can only be one highlight function, setting it again disables the previous one.
void ic_set_default_highlighter(ic_highlight_fun_t* highlighter, void* arg);
/// Set the style of characters starting at position `pos`.
void ic_highlight(ic_highlight_env_t* henv, long pos, long count, const char* style );
/// Experimental: Convenience callback for a function that highlights `s` using bbcode's.
/// The returned string should be allocated and is free'd by the caller.
typedef char* (ic_highlight_format_fun_t)(const char* s, void* arg);
/// Experimental: Convenience function for highlighting with bbcodes.
/// Can be called in a `ic_highlight_fun_t` callback to colorize the `input` using the
/// the provided `formatted` input that is the styled `input` with bbcodes. The
/// content of `formatted` without bbcode tags should match `input` exactly.
void ic_highlight_formatted(ic_highlight_env_t* henv, const char* input, const char* formatted);
/// \}
//--------------------------------------------------------------
// Readline with a specific completer and highlighter
//--------------------------------------------------------------
/// \defgroup readline
/// \{
/// Read input from the user using rich editing abilities,
/// using a particular completion function and highlighter for this call only.
/// both can be NULL in which case the defaults are used.
/// @see ic_readline(), ic_set_prompt_marker(), ic_set_default_completer(), ic_set_default_highlighter().
char* ic_readline_ex(const char* prompt_text, ic_completer_fun_t* completer, void* completer_arg,
ic_highlight_fun_t* highlighter, void* highlighter_arg);
/// \}
//--------------------------------------------------------------
// Options
//--------------------------------------------------------------
/// \defgroup options Options
/// \{
/// Set a prompt marker and a potential marker for extra lines with multiline input.
/// Pass \a NULL for the `prompt_marker` for the default marker (`"> "`).
/// Pass \a NULL for continuation prompt marker to make it equal to the `prompt_marker`.
void ic_set_prompt_marker( const char* prompt_marker, const char* continuation_prompt_marker );
/// Get the current prompt marker.
const char* ic_get_prompt_marker(void);
/// Get the current continuation prompt marker.
const char* ic_get_continuation_prompt_marker(void);
/// Disable or enable multi-line input (enabled by default).
/// Returns the previous setting.
bool ic_enable_multiline( bool enable );
/// Disable or enable sound (enabled by default).
/// A beep is used when tab cannot find any completion for example.
/// Returns the previous setting.
bool ic_enable_beep( bool enable );
/// Disable or enable color output (enabled by default).
/// Returns the previous setting.
bool ic_enable_color( bool enable );
/// Disable or enable duplicate entries in the history (disabled by default).
/// Returns the previous setting.
bool ic_enable_history_duplicates( bool enable );
/// Disable or enable automatic tab completion after a completion
/// to expand as far as possible if the completions are unique. (disabled by default).
/// Returns the previous setting.
bool ic_enable_auto_tab( bool enable );
/// Disable or enable preview of a completion selection (enabled by default)
/// Returns the previous setting.
bool ic_enable_completion_preview( bool enable );
/// Disable or enable automatic identation of continuation lines in multiline
/// input so it aligns with the initial prompt.
/// Returns the previous setting.
bool ic_enable_multiline_indent(bool enable);
/// Disable or enable display of short help messages for history search etc.
/// (full help is always dispayed when pressing F1 regardless of this setting)
/// @returns the previous setting.
bool ic_enable_inline_help(bool enable);
/// Disable or enable hinting (enabled by default)
/// Shows a hint inline when there is a single possible completion.
/// @returns the previous setting.
bool ic_enable_hint(bool enable);
/// Set millisecond delay before a hint is displayed. Can be zero. (500ms by default).
long ic_set_hint_delay(long delay_ms);
/// Disable or enable syntax highlighting (enabled by default).
/// This applies regardless whether a syntax highlighter callback was set (`ic_set_highlighter`)
/// Returns the previous setting.
bool ic_enable_highlight(bool enable);
/// Set millisecond delay for reading escape sequences in order to distinguish
/// a lone ESC from the start of a escape sequence. The defaults are 100ms and 10ms,
/// but it may be increased if working with very slow terminals.
void ic_set_tty_esc_delay(long initial_delay_ms, long followup_delay_ms);
/// Enable highlighting of matching braces (and error highlight unmatched braces).`
bool ic_enable_brace_matching(bool enable);
/// Set matching brace pairs.
/// Pass \a NULL for the default `"()[]{}"`.
void ic_set_matching_braces(const char* brace_pairs);
/// Enable automatic brace insertion (enabled by default).
bool ic_enable_brace_insertion(bool enable);
/// Set matching brace pairs for automatic insertion.
/// Pass \a NULL for the default `()[]{}\"\"''`
void ic_set_insertion_braces(const char* brace_pairs);
/// \}
//--------------------------------------------------------------
// Advanced Completion
//--------------------------------------------------------------
/// \defgroup completex Advanced Completion
/// \{
/// Get the raw current input (and cursor position if `cursor` != NULL) for the completion.
/// Usually completer functions should look at their `prefix` though as transformers
/// like `ic_complete_word` may modify the prefix (for example, unescape it).
const char* ic_completion_input( ic_completion_env_t* cenv, long* cursor );
/// Get the completion argument passed to `ic_set_completer`.
void* ic_completion_arg( const ic_completion_env_t* cenv );
/// Do we have already some completions?
bool ic_has_completions( const ic_completion_env_t* cenv );
/// Do we already have enough completions and should we return if possible? (for improved latency)
bool ic_stop_completing( const ic_completion_env_t* cenv);
/// Primitive completion, cannot be used with most transformers (like `ic_complete_word` and `ic_complete_qword`).
/// When completed, `delete_before` _bytes_ are deleted before the cursor position,
/// `delete_after` _bytes_ are deleted after the cursor, and finally `completion` is inserted.
/// The `display` is used to display the completion in the completion menu, and `help` is displayed
/// with hinting. Both `display` and `help` can be NULL.
/// (all are copied by isocline and do not need to be preserved or allocated).
///
/// Returns `true` if the callback should continue trying to find more possible completions.
/// If `false` is returned, the callback should try to return and not add more completions (for improved latency).
bool ic_add_completion_prim( ic_completion_env_t* cenv, const char* completion,
const char* display, const char* help,
long delete_before, long delete_after);
/// \}
//--------------------------------------------------------------
/// \defgroup helper Character Classes.
/// Convenience functions for character classes, highlighting and completion.
/// \{
/// Convenience: return the position of a previous code point in a UTF-8 string `s` from postion `pos`.
/// Returns `-1` if `pos <= 0` or `pos > strlen(s)` (or other errors).
long ic_prev_char( const char* s, long pos );
/// Convenience: return the position of the next code point in a UTF-8 string `s` from postion `pos`.
/// Returns `-1` if `pos < 0` or `pos >= strlen(s)` (or other errors).
long ic_next_char( const char* s, long pos );
/// Convenience: does a string `s` starts with a given `prefix` ?
bool ic_starts_with( const char* s, const char* prefix );
/// Convenience: does a string `s` starts with a given `prefix` ignoring (ascii) case?
bool ic_istarts_with( const char* s, const char* prefix );
/// Convenience: character class for whitespace `[ \t\r\n]`.
bool ic_char_is_white(const char* s, long len);
/// Convenience: character class for non-whitespace `[^ \t\r\n]`.
bool ic_char_is_nonwhite(const char* s, long len);
/// Convenience: character class for separators.
/// (``[ \t\r\n,.;:/\\(){}\[\]]``.)
/// This is used for word boundaries in isocline.
bool ic_char_is_separator(const char* s, long len);
/// Convenience: character class for non-separators.
bool ic_char_is_nonseparator(const char* s, long len);
/// Convenience: character class for letters (`[A-Za-z]` and any unicode > 0x80).
bool ic_char_is_letter(const char* s, long len);
/// Convenience: character class for digits (`[0-9]`).
bool ic_char_is_digit(const char* s, long len);
/// Convenience: character class for hexadecimal digits (`[A-Fa-f0-9]`).
bool ic_char_is_hexdigit(const char* s, long len);
/// Convenience: character class for identifier letters (`[A-Za-z0-9_-]` and any unicode > 0x80).
bool ic_char_is_idletter(const char* s, long len);
/// Convenience: character class for filename letters (_not in_ " \t\r\n`@$><=;|&\{\}\(\)\[\]]").
bool ic_char_is_filename_letter(const char* s, long len);
/// Convenience: If this is a token start, return the length. Otherwise return 0.
long ic_is_token(const char* s, long pos, ic_is_char_class_fun_t* is_token_char);
/// Convenience: Does this match the specified token?
/// Ensures not to match prefixes or suffixes, and returns the length of the match (in bytes).
/// E.g. `ic_match_token("function",0,&ic_char_is_letter,"fun")` returns 0.
/// while `ic_match_token("fun x",0,&ic_char_is_letter,"fun"})` returns 3.
long ic_match_token(const char* s, long pos, ic_is_char_class_fun_t* is_token_char, const char* token);
/// Convenience: Do any of the specified tokens match?
/// Ensures not to match prefixes or suffixes, and returns the length of the match (in bytes).
/// E.g. `ic_match_any_token("function",0,&ic_char_is_letter,{"fun","func",NULL})` returns 0.
/// while `ic_match_any_token("func x",0,&ic_char_is_letter,{"fun","func",NULL})` returns 4.
long ic_match_any_token(const char* s, long pos, ic_is_char_class_fun_t* is_token_char, const char** tokens);
/// \}
//--------------------------------------------------------------
/// \defgroup term Terminal
///
/// Experimental: Low level terminal output.
/// Ensures basic ANSI SGR escape sequences are processed
/// in a portable way (e.g. on Windows)
/// \{
/// Initialize for terminal output.
/// Call this before using the terminal write functions (`ic_term_write`)
/// Does nothing on most platforms but on Windows it sets the console to UTF8 output and possible
/// enables virtual terminal processing.
void ic_term_init(void);
/// Call this when done with the terminal functions.
void ic_term_done(void);
/// Flush the terminal output.
/// (happens automatically on newline characters ('\n') as well).
void ic_term_flush(void);
/// Write a string to the console (and process CSI escape sequences).
void ic_term_write(const char* s);
/// Write a string to the console and end with a newline
/// (and process CSI escape sequences).
void ic_term_writeln(const char* s);
/// Write a formatted string to the console.
/// (and process CSI escape sequences)
void ic_term_writef(const char* fmt, ...);
/// Write a formatted string to the console.
void ic_term_vwritef(const char* fmt, va_list args);
/// Set text attributes from a style.
void ic_term_style( const char* style );
/// Set text attribute to bold.
void ic_term_bold(bool enable);
/// Set text attribute to underline.
void ic_term_underline(bool enable);
/// Set text attribute to italic.
void ic_term_italic(bool enable);
/// Set text attribute to reverse video.
void ic_term_reverse(bool enable);
/// Set text attribute to ansi color palette index between 0 and 255 (or 256 for the ANSI "default" color).
/// (auto matched to smaller palette if not supported)
void ic_term_color_ansi(bool foreground, int color);
/// Set text attribute to 24-bit RGB color (between `0x000000` and `0xFFFFFF`).
/// (auto matched to smaller palette if not supported)
void ic_term_color_rgb(bool foreground, uint32_t color );
/// Reset the text attributes.
void ic_term_reset( void );
/// Get the palette used by the terminal:
/// This is usually initialized from the COLORTERM environment variable. The
/// possible values of COLORTERM for each palette are given in parenthesis.
///
/// - 1: monochrome (`monochrome`)
/// - 3: old ANSI terminal with 8 colors, using bold for bright (`8color`/`3bit`)
/// - 4: regular ANSI terminal with 16 colors. (`16color`/`4bit`)
/// - 8: terminal with ANSI 256 color palette. (`256color`/`8bit`)
/// - 24: true-color terminal with full RGB colors. (`truecolor`/`24bit`/`direct`)
int ic_term_get_color_bits( void );
/// \}
//--------------------------------------------------------------
/// \defgroup async ASync
/// Async support
/// \{
/// Thread-safe way to asynchronously unblock a readline.
/// Behaves as if the user pressed the `ctrl-C` character
/// (resulting in returning NULL from `ic_readline`).
/// Returns `true` if the event was successfully delivered.
/// (This may not be supported on all platforms, but it is
/// functional on Linux, macOS and Windows).
bool ic_async_stop(void);
/// \}
//--------------------------------------------------------------
/// \defgroup alloc Custom Allocation
/// Register allocation functions for custom allocators
/// \{
typedef void* (ic_malloc_fun_t)( size_t size );
typedef void* (ic_realloc_fun_t)( void* p, size_t newsize );
typedef void (ic_free_fun_t)( void* p );
/// Initialize with custom allocation functions.
/// This must be called as the first function in a program!
void ic_init_custom_alloc( ic_malloc_fun_t* _malloc, ic_realloc_fun_t* _realloc, ic_free_fun_t* _free );
/// Free a potentially custom alloc'd pointer (in particular, the result returned from `ic_readline`)
void ic_free( void* p );
/// Allocate using the current memory allocator.
void* ic_malloc(size_t sz);
/// Duplicate a string using the current memory allocator.
const char* ic_strdup( const char* s );
/// \}
#ifdef __cplusplus
}
#endif
#endif /// IC_ISOCLINE_H

@ -0,0 +1,99 @@
cabal-version: 1.12
-- This file has been generated from package.yaml by hpack version 0.34.6.
--
-- see: https://github.com/sol/hpack
name: isocline
version: 1.0.9
synopsis: A portable alternative to GNU Readline
description: ![logo](https://raw.githubusercontent.com/daanx/isocline/main/doc/isocline-inline.svg) A Haskell wrapper around the [Isocline C library](https://github.com/daanx/isocline#readme) which can provide an alternative to GNU Readline. (The Isocline library is included whole and there are no runtime dependencies).
Please see the [readme](https://github.com/daanx/isocline/haskell#readme) on GitHub for more information.
category: console
homepage: https://github.com/daanx/isocline#readme
bug-reports: https://github.com/daanx/isocline/issues
author: Daan Leijen
maintainer: daan@effp.org
license: MIT
license-file: LICENSE
build-type: Simple
extra-source-files:
haskell/readme.md
src/attr.c
src/bbcode.c
src/bbcode_colors.c
src/common.c
src/completers.c
src/completions.c
src/editline.c
src/editline_completion.c
src/editline_help.c
src/editline_history.c
src/highlight.c
src/history.c
src/isocline.c
src/stringbuf.c
src/term.c
src/term_color.c
src/tty.c
src/tty_esc.c
src/undo.c
src/wcwidth.c
src/attr.h
src/bbcode.h
src/common.h
src/completions.h
src/env.h
src/highlight.h
src/history.h
src/stringbuf.h
src/term.h
src/tty.h
src/undo.h
include/isocline.h
source-repository head
type: git
location: https://github.com/daanx/isocline
library
exposed-modules:
System.Console.Isocline
other-modules:
Paths_isocline
hs-source-dirs:
haskell
c-sources:
src/isocline.c
build-depends:
base >=3.0 && <5
, bytestring
, text
default-language: Haskell2010
executable example
main-is: Example.hs
other-modules:
Paths_isocline
hs-source-dirs:
test
build-depends:
base >=3.0 && <5
, bytestring
, isocline
, text
default-language: Haskell2010
test-suite test-example
type: exitcode-stdio-1.0
main-is: Example.hs
other-modules:
Paths_isocline
hs-source-dirs:
test
build-depends:
base >=3.0 && <5
, bytestring
, isocline
, text
default-language: Haskell2010

47
bin/isocline/package.yaml Normal file

@ -0,0 +1,47 @@
name: isocline
version: 1.0.9
github: "daanx/isocline"
license: MIT
author: Daan Leijen
maintainer: daan@effp.org
synopsis: A portable alternative to GNU Readline
category: console
extra-source-files:
- haskell/readme.md
- src/*.c
- src/*.h
- include/*.h
description:
"![logo](https://raw.githubusercontent.com/daanx/isocline/main/doc/isocline-inline.svg)
A Haskell wrapper around the [Isocline C library](https://github.com/daanx/isocline#readme)
which can provide an alternative to GNU Readline.
(The Isocline library is included whole and there are no runtime dependencies).
Please see the [readme](https://github.com/daanx/isocline/haskell#readme) on GitHub for more information."
dependencies:
- base >= 3.0 && < 5
- bytestring
- text
library:
source-dirs:
- haskell
c-sources:
- src/isocline.c
executables:
example:
main: Example.hs
source-dirs: test
dependencies:
- isocline
tests:
test-example:
main: Example.hs
source-dirs: test
dependencies:
- isocline

473
bin/isocline/readme.md Normal file

@ -0,0 +1,473 @@
<!-- <img align="right" width="350px" src="doc/completion-macos.png"/> -->
<img align="left" src="doc/isocline-inline.svg"/>
# Isocline: a portable readline alternative.
Isocline is a pure C library that can be used as an alternative to the GNU readline library (latest release v1.0.9, 2022-01-15).
- Small: less than 8k lines and can be compiled as a single C file without
any dependencies or configuration (e.g. `gcc -c src/isocline.c`).
- Portable: works on Unix, Windows, and macOS, and uses a minimal
subset of ANSI escape sequences.
- Features: extensive multi-line editing mode (`shift-tab`), (24-bit) color, history, completion, unicode,
undo/redo, incremental history search, inline hints, syntax highlighting, brace matching,
closing brace insertion, auto indentation, graceful fallback, support for custom allocators, etc.
- License: MIT.
- Comes with a Haskell binding ([`System.Console.Isocline`][hdoc].
Enjoy,
Daan
<!-- <img align="right" width="350px" src="doc/history-win.png"/> -->
# Demo
![recording](doc/record-macos.svg)
Shows in order: unicode, syntax highlighting, brace matching, jump to matching brace, auto indent, multiline editing, 24-bit colors, inline hinting, filename completion, and incremental history search.
<sub>(screen capture was made with [termtosvg] by Nicolas Bedos)</sub>
# Usage
Include the isocline header in your C or C++ source:
```C
#include <include/isocline.h>
```
and call `ic_readline` to get user input with rich editing abilities:
```C
char* input;
while( (input = ic_readline("prompt")) != NULL ) { // ctrl+d/c or errors return NULL
printf("you typed:\n%s\n", input); // use the input
free(input);
}
```
See the [example] for a full example with completion, syntax highligting, history, etc.
# Run the Example
You can compile and run the [example] as:
```
$ gcc -o example -Iinclude test/example.c src/isocline.c
$ ./example
```
or, the Haskell [example][HaskellExample]:
```
$ ghc -ihaskell test/Example.hs src/isocline.c
$ ./test/Example
```
# Editing with Isocline
Isocline tries to be as compatible as possible with standard [GNU Readline] key bindings.
### Overview:
```apl
home/ctrl-a cursor end/ctrl-e
┌─────────────────┼───────────────┐ (navigate)
│ ctrl-left │ ctrl-right │
│ ┌───────┼──────┐ │ ctrl-r : search history
▼ ▼ ▼ ▼ ▼ tab : complete word
prompt> it is the quintessential language shift-tab: insert new line
▲ ▲ ▲ ▲ esc : delete input, done
│ └──────────────┘ │ ctrl-z : undo
│ alt-backsp alt-d │
└─────────────────────────────────┘ (delete)
ctrl-u ctrl-k
```
<sub>Note: on macOS, the meta (alt) key is not directly available in most terminals.
Terminal/iTerm2 users can activate the meta key through
`Terminal` &rarr; `Preferences` &rarr; `Settings` &rarr; `Use option as meta key`.</sub>
### Key Bindings
These are also shown when pressing `F1` on a Isocline prompt. We use `^` as a shorthand for `ctrl-`:
| Navigation | |
|-------------------|-------------------------------------------------|
| `left`,`^b` | go one character to the left |
| `right`,`^f ` | go one character to the right |
| `up ` | go one row up, or back in the history |
| `down ` | go one row down, or forward in the history |
| `^left ` | go to the start of the previous word |
| `^right ` | go to the end the current word |
| `home`,`^a ` | go to the start of the current line |
| `end`,`^e ` | go to the end of the current line |
| `pgup`,`^home ` | go to the start of the current input |
| `pgdn`,`^end ` | go to the end of the current input |
| `alt-m ` | jump to matching brace |
| `^p ` | go back in the history |
| `^n ` | go forward in the history |
| `^r`,`^s ` | search the history starting with the current word |
| Deletion | |
|-------------------|-------------------------------------------------|
| `del`,`^d ` | delete the current character |
| `backsp`,`^h ` | delete the previous character |
| `^w ` | delete to preceding white space |
| `alt-backsp ` | delete to the start of the current word |
| `alt-d ` | delete to the end of the current word |
| `^u ` | delete to the start of the current line |
| `^k ` | delete to the end of the current line |
| `esc ` | delete the current input, or done with empty input |
| Editing | |
|-------------------|-------------------------------------------------|
| `enter ` | accept current input |
| `^enter`,`^j`,`shift-tab` | create a new line for multi-line input |
| `^l ` | clear screen |
| `^t ` | swap with previous character (move character backward) |
| `^z`,`^_ ` | undo |
| `^y ` | redo |
| `tab ` | try to complete the current input |
| Completion menu | |
|-------------------|-------------------------------------------------|
| `enter`,`left` | use the currently selected completion |
| `1` - `9` | use completion N from the menu |
| `tab, down ` | select the next completion |
| `shift-tab, up` | select the previous completion |
| `esc ` | exit menu without completing |
| `pgdn`,`^enter`,`^j` | show all further possible completions |
| Incremental history search | |
|-------------------|-------------------------------------------------|
| `enter ` | use the currently found history entry |
| `backsp`,`^z ` | go back to the previous match (undo) |
| `tab`,`^r`,`up` | find the next match |
| `shift-tab`,`^s`,`down` | find an earlier match |
| `esc ` | exit search |
# Build the Library
### Build as a Single Source
Copy the sources (in `include` and `src`) into your project, or add the library as a [submodule]:
```
$ git submodule add https://github.com/daanx/isocline
```
and add `isocline/src/isocline.c` to your build rules -- no configuration is needed.
### Build with CMake
Clone the repository and run cmake to build a static library (`.a`/`.lib`):
```
$ git clone https://github.com/daanx/isocline
$ cd isocline
$ mkdir -p build/release
$ cd build/release
$ cmake ../..
$ cmake --build .
```
This builds a static library `libisocline.a` (or `isocline.lib` on Windows)
and the example program:
```
$ ./example
```
### Build the Haskell Library
See the Haskell [readme][Haskell] for instructions to build and use the Haskell library.
# API Reference
* See the [C API reference][docapi] and the [example] for example usage of history, completion, etc.
* See the [Haskell API reference][hdoc] on Hackage and the Haskell [example][HaskellExample].
# Motivation
Isocline was created for use in the [Koka] interactive compiler.
This required: pure C (no dependency on a C++ runtime or other libraries),
portable (across Linux, macOS, and Windows), unicode support,
a BSD-style license, and good functionality for completion and multi-line editing.
Some other excellent libraries that we considered:
[GNU readline],
[editline](https://github.com/troglobit/editline),
[linenoise](https://github.com/antirez/linenoise),
[replxx](https://github.com/AmokHuginnsson/replxx), and
[Haskeline](https://github.com/judah/haskeline).
# Formatted Output
Isocline also exposes functions for rich terminal output
as `ic_print` (and `ic_println` and `ic_printf`).
Inspired by the (Python) [Rich][RichBBcode] library,
this supports a form of [bbcode]'s to format the output:
```c
ic_println( "[b]bold [red]and red[/red][/b]" );
```
Each print automatically closes any open tags that were
not yet closed. Also, you can use a general close
tag as `[/]` to close the innermost tag, so the
following print is equivalent to the earlier one:
```c
ic_println( "[b]bold [red]and red[/]" );
```
There can be multiple styles in one tag
(where the first name is used for the closing tag):
```c
ic_println( "[u #FFD700]underlined gold[/]" );
```
Sometimes, you need to display arbitrary messages
that may contain sequences that you would not like
to be interpreted as bbcode tags. One way to do
this is the `[!`_tag_`]` which ignores formatting
up to a close tag of the form `[/`_tag_`]`.
```c
ic_printf( "[red]red? [!pre]%s[/pre].\n", "[blue]not blue!" );
```
Predefined styles include `b` (bold),
`u` (underline), `i` (italic), and `r` (reverse video), but
you can (re)define any style yourself as:
```c
ic_style_def("warning", "crimson u");
```
and use them like any builtin style or property:
```c
ic_println( "[warning]this is a warning![/]" );
```
which is great for adding themes to your application.
Each `ic_print` function always closes any unclosed tags automatically.
To open a style persistently, use `ic_style_open` with a matching
`ic_style_close` which scopes over any `ic_print` statements in between.
```c
ic_style_open("warning");
ic_println("[b]crimson underlined and bold[/]");
ic_style_close();
```
# Advanced
## BBCode Format
An open tag can have multiple white space separated
entries that are
either a _style name_, or a primitive _property_[`=`_value_].
### Styles
Isocline provides the following builtin styles as property shorthands:
`b` (bold), `u` (underline), `i` (italic), `r` (reverse video),
and some builtin styles for syntax highlighting:
`keyword`, `control` (control-flow keywords), `string`,
`comment`, `number`, `type`, `constant`.
Predefined styles used by Isocline itself are:
- `ic-prompt`: prompt style, e.g. `ic_style_def("ic-prompt", "yellow on blue")`.
- `ic-info`: information (like the numbers in a completion menu).
- `ic-diminish`: dim text (used for example in history search).
- `ic-emphasis`: emphasized text (also used in history search).
- `ic-hint`: color of an inline hint.
- `ic-error`: error color (like an unmatched brace).
- `ic-bracematch`: color of matching parenthesis.
### Properties
Boolean properties are by default `on`:
- `bold` [`=`(`on`|`off`)]
- `italic` [`=`(`on`|`off`)]
- `underline` [`=`(`on`|`off`)]
- `reverse` [`=`(`on`|`off`)]
Color properties can be assigned a _color_:
- `color=`_color_
- `bgcolor=`_color_
- _color_: equivalent to `color=`_color_.
- `on` _color_: equivalent to `bgcolor=`_color_.
A color value can be specified in many ways:
- any standard HTML [color name][htmlcolors].
- any of the 16 standard ANSI [color names][ansicolors] by prefixing `ansi-`
(like `ansi-black` or `ansi-maroon`).
The actual color value of these depend on the a terminal theme.
- `#`_rrggbb_ or `#`_rgb_ for a specific 24-bit color.
- `ansi-color=`_idx_ or `ansi-bgcolor=`_idx_, where _idx_ specifies an entry in the
standard ANSI 256 [color palette][ansicolor256] (between 0 and 255).
Use _idx_ 256 for the ANSI default color.
The `width` property makes the text at least _width_ long:
- `width=`_width_ [`;`_align_ [`;`_fill_] ]
where _width_ is the column with, _align_ is `left`, `center`, or `right`,
and _fill_ the fill character (`' '`).
The _maxwidth_ property makes text at most _width_ long; when the content
it is wider, the left- or right side (depending on the alignment)
will have three dots (`...`) to visualize that content is cut off.
- `maxwidth=`_width_ [`;`_align_]
## Environment Variables
- `NO_COLOR`: if present no colors are displayed.
- `CLICOLOR=1`: if set, the `LSCOLORS` or `LS_COLORS` environment variables are used to colorize
filename completions.
- `COLORTERM=`(`truecolor`|`256color`|`16color`|`8color`|`monochrome`): enable a certain color palette, see the next section.
- `TERM`: used on some systems to determine the color
## Colors
Isocline supports 24-bit colors and any RGB colors are automatically
mapped to a reduced palette on older terminals if these do not
support true color. Detection of full color support
is not always possible to do automatically and you can
set the `COLORTERM` environment variable expicitly to force Isocline to use
a specific palette:
- `COLORTERM=truecolor`: use 24-bit colors.
<img width="500px" src="doc/color/ansi-truecolor.png"/>
- `COLORTERM=256color`: use the ANSI 256 color palette.
<img width="500px" src="doc/color/ansi-256color.png"/>
- `COLORTERM=16color` : use the regular ANSI 16 color
palette (8 normal and 8 bright colors).
<img width="500px" src="doc/color/ansi-16color.png"/>
- `COLORTERM=8color`: use bold for bright colors.
- `COLORTERM=monochrome`: use no color.
The above screenshots are made with the
[`test_colors.c`](https://github.com/daanx/isocline/blob/main/test/test_colors.c) program. You can test your own
terminal as:
```
$ gcc -o test_colors -Iinclude test/test_colors.c src/isocline.c
$ ./test_colors
$ COLORTERM=truecolor ./test_colors
$ COLORTERM=16color ./test_colors
```
## ANSI Escape Sequences
Isocline uses just few ANSI escape sequences that are widely
supported:
- `ESC[`_n_`A`, `ESC[`_n_`B`, `ESC[`_n_`C`, and `ESC[`_n_`D`,
for moving the cursor _n_ places up, down, right, and left.
- `ESC[K` to clear the line from the cursor.
- `ESC[`_n_`m` for colors, with _n_ one of: 0 (reset), 1,22 (bold), 3,23 (italic),
4,24 (underline), 7,27 (reverse), 30-37,40-47,90-97,100-107 (color),
and 39,49 (select default color).
- `ESC[38;5;`_n_`m`, `ESC[48;5;`_n_`m`, `ESC[38;2;`_r_`;`_g_`;`_b_`m`, `ESC[48;2;`_r_`;`_g_`;`_b_`m`:
on terminals that support it, select
entry _n_ from the
256 color ANSI palette (used with `XTERM=xterm-256color` for example), or directly specify
any 24-bit _rgb_ color (used with `COLORTERM=truecolor`) for the foreground or background.
On Windows the above functionality is implemented using the Windows console API
(except if running in the new Windows Terminal which supports these escape
sequences natively).
## Async and Threads
Isocline is _not_ thread-safe and `ic_readline`_xxx_ and `ic_print`_xxx_ should
be used from one thread only.
The best way to use `ic_readline` asynchronously is
to run it in a (blocking) dedicated thread and deliver
results from there to the async event loop. Isocline has the
```C
bool ic_async_stop(void)
```
function that is thread-safe and can deliver an
asynchronous event to Isocline that unblocks a current
`ic_readline` and makes it behave as if the user pressed
`ctrl-c` (which returns NULL from the read line call).
## Color Mapping
To map full RGB colors to an ANSI 256 or 16-color palette
Isocline finds a palette color with the minimal "color distance" to
the original color. There are various
ways of calculating this: one way is to take the euclidean distance
in the sRGB space (_simple-rgb_), a slightly better way is to
take a weighted distance where the weight distribution is adjusted
according to how big the red component is ([redmean](https://en.wikipedia.org/wiki/Color_difference),
denoted as _delta-rgb_ in the figure),
this is used by Isocline),
and finally, we can first translate into a perceptually uniform color space
(CIElab) and calculate the distance there using the [CIEDE2000](https://en.wikipedia.org/wiki/Color_difference)
algorithm (_ciede2000_). Here are these three methods compared on
some colors:
![color space comparison](doc/color/colorspace-map.png)
Each top row is the true 24-bit RGB color. Surprisingly,
the sophisticated CIEDE2000 distance seems less good here compared to the
simpler methods (as in the upper left block for example)
(perhaps because this algorithm was created to find close
perceptual colors in images where lightness differences may be given
less weight?). CIEDE2000 also leads to more "outliers", for example as seen
in column 5. Given these results, Isocline uses _redmean_ for
color mapping. We also add a gray correction that makes it less
likely to substitute a color for a gray value (and the other way
around).
## Possible Future Extensions
- Vi key bindings.
- kill buffer.
- make the `ic_print`_xxx_ functions thread-safe.
- extended low-level terminal functions.
- status and progress bars.
- prompt variants: confirm, etc.
- ...
Contact me if you are interested in doing any of these :-)
# Releases
* `2022-01-15`: v1.0.9: fix missing `ic_completion_arg` (issue #6),
fix null ptr check in ic_print (issue #7), fix crash when using /dev/null as both input and output.
* `2021-09-05`: v1.0.5: use our own wcwidth for consistency;
thanks to Hans-Georg Breunig for helping with testing on NetBSD.
* `2021-08-28`: v1.0.4: fix color query on Ubuntu/Gnome
* `2021-08-27`: v1.0.3: fix duplicates in completions
* `2021-08-23`: v1.0.2: fix windows eol wrapping
* `2021-08-21`: v1.0.1: fix line-buffering
* `2021-08-20`: v1.0.0: initial release
[GNU readline]: https://tiswww.case.edu/php/chet/readline/rltop.html
[koka]: http://www.koka-lang.org
[submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
[Haskell]: https://github.com/daanx/isocline/tree/main/haskell
[HaskellExample]: https://github.com/daanx/isocline/blob/main/test/Example.hs
[example]: https://github.com/daanx/isocline/blob/main/test/example.c
[termtosvg]: https://github.com/nbedos/termtosvg
[Rich]: https://github.com/willmcgugan/rich
[RichBBcode]: https://rich.readthedocs.io/en/latest/markup.html
[bbcode]: https://en.wikipedia.org/wiki/BBCode
[htmlcolors]: https://en.wikipedia.org/wiki/Web_colors#HTML_color_names
[ansicolors]: https://en.wikipedia.org/wiki/Web_colors#Basic_colors
[ansicolor256]: https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
[docapi]: https://daanx.github.io/isocline
[hdoc]: https://hackage.haskell.org/package/isocline/docs/System-Console-Isocline.html

294
bin/isocline/src/attr.c Normal file

@ -0,0 +1,294 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#include <string.h>
#include "common.h"
#include "stringbuf.h" // str_next_ofs
#include "attr.h"
#include "term.h" // color_from_ansi256
//-------------------------------------------------------------
// Attributes
//-------------------------------------------------------------
ic_private attr_t attr_none(void) {
attr_t attr;
attr.value = 0;
return attr;
}
ic_private attr_t attr_default(void) {
attr_t attr = attr_none();
attr.x.color = IC_ANSI_DEFAULT;
attr.x.bgcolor = IC_ANSI_DEFAULT;
attr.x.bold = IC_OFF;
attr.x.underline = IC_OFF;
attr.x.reverse = IC_OFF;
attr.x.italic = IC_OFF;
return attr;
}
ic_private bool attr_is_none(attr_t attr) {
return (attr.value == 0);
}
ic_private bool attr_is_eq(attr_t attr1, attr_t attr2) {
return (attr1.value == attr2.value);
}
ic_private attr_t attr_from_color( ic_color_t color ) {
attr_t attr = attr_none();
attr.x.color = color;
return attr;
}
ic_private attr_t attr_update_with( attr_t oldattr, attr_t newattr ) {
attr_t attr = oldattr;
if (newattr.x.color != IC_COLOR_NONE) { attr.x.color = newattr.x.color; }
if (newattr.x.bgcolor != IC_COLOR_NONE) { attr.x.bgcolor = newattr.x.bgcolor; }
if (newattr.x.bold != IC_NONE) { attr.x.bold = newattr.x.bold; }
if (newattr.x.italic != IC_NONE) { attr.x.italic = newattr.x.italic; }
if (newattr.x.reverse != IC_NONE) { attr.x.reverse = newattr.x.reverse; }
if (newattr.x.underline != IC_NONE) { attr.x.underline = newattr.x.underline; }
return attr;
}
static bool sgr_is_digit(char c) {
return (c >= '0' && c <= '9');
}
static bool sgr_is_sep( char c ) {
return (c==';' || c==':');
}
static bool sgr_next_par(const char* s, ssize_t* pi, ssize_t* par) {
const ssize_t i = *pi;
ssize_t n = 0;
while( sgr_is_digit(s[i+n])) {
n++;
}
if (n==0) {
*par = 0;
return true;
}
else {
*pi = i+n;
return ic_atoz(s+i, par);
}
}
static bool sgr_next_par3(const char* s, ssize_t* pi, ssize_t* p1, ssize_t* p2, ssize_t* p3) {
bool ok = false;
ssize_t i = *pi;
if (sgr_next_par(s,&i,p1) && sgr_is_sep(s[i])) {
i++;
if (sgr_next_par(s,&i,p2) && sgr_is_sep(s[i])) {
i++;
if (sgr_next_par(s,&i,p3)) {
ok = true;
};
}
}
*pi = i;
return ok;
}
ic_private attr_t attr_from_sgr( const char* s, ssize_t len) {
attr_t attr = attr_none();
for( ssize_t i = 0; i < len && s[i] != 0; i++) {
ssize_t cmd = 0;
if (!sgr_next_par(s,&i,&cmd)) continue;
switch(cmd) {
case 0: attr = attr_default(); break;
case 1: attr.x.bold = IC_ON; break;
case 3: attr.x.italic = IC_ON; break;
case 4: attr.x.underline = IC_ON; break;
case 7: attr.x.reverse = IC_ON; break;
case 22: attr.x.bold = IC_OFF; break;
case 23: attr.x.italic = IC_OFF; break;
case 24: attr.x.underline = IC_OFF; break;
case 27: attr.x.reverse = IC_OFF; break;
case 39: attr.x.color = IC_ANSI_DEFAULT; break;
case 49: attr.x.bgcolor = IC_ANSI_DEFAULT; break;
default: {
if (cmd >= 30 && cmd <= 37) {
attr.x.color = IC_ANSI_BLACK + (unsigned)(cmd - 30);
}
else if (cmd >= 40 && cmd <= 47) {
attr.x.bgcolor = IC_ANSI_BLACK + (unsigned)(cmd - 40);
}
else if (cmd >= 90 && cmd <= 97) {
attr.x.color = IC_ANSI_DARKGRAY + (unsigned)(cmd - 90);
}
else if (cmd >= 100 && cmd <= 107) {
attr.x.bgcolor = IC_ANSI_DARKGRAY + (unsigned)(cmd - 100);
}
else if ((cmd == 38 || cmd == 48) && sgr_is_sep(s[i])) {
// non-associative SGR :-(
ssize_t par = 0;
i++;
if (sgr_next_par(s, &i, &par)) {
if (par==5 && sgr_is_sep(s[i])) {
// ansi 256 index
i++;
if (sgr_next_par(s, &i, &par) && par >= 0 && par <= 0xFF) {
ic_color_t color = color_from_ansi256(par);
if (cmd==38) { attr.x.color = color; }
else { attr.x.bgcolor = color; }
}
}
else if (par == 2 && sgr_is_sep(s[i])) {
// rgb value
i++;
ssize_t r,g,b;
if (sgr_next_par3(s, &i, &r,&g,&b)) {
ic_color_t color = ic_rgbx(r,g,b);
if (cmd==38) { attr.x.color = color; }
else { attr.x.bgcolor = color; }
}
}
}
}
else {
debug_msg("attr: unknow ANSI SGR code: %zd\n", cmd );
}
}
}
}
return attr;
}
ic_private attr_t attr_from_esc_sgr( const char* s, ssize_t len) {
if (len <= 2 || s[0] != '\x1B' || s[1] != '[' || s[len-1] != 'm') return attr_none();
return attr_from_sgr(s+2, len-2);
}
//-------------------------------------------------------------
// Attribute buffer
//-------------------------------------------------------------
struct attrbuf_s {
attr_t* attrs;
ssize_t capacity;
ssize_t count;
alloc_t* mem;
};
static bool attrbuf_ensure_capacity( attrbuf_t* ab, ssize_t needed ) {
if (needed <= ab->capacity) return true;
ssize_t newcap = (ab->capacity <= 0 ? 240 : (ab->capacity > 1000 ? ab->capacity + 1000 : 2*ab->capacity));
if (needed > newcap) { newcap = needed; }
attr_t* newattrs = mem_realloc_tp( ab->mem, attr_t, ab->attrs, newcap );
if (newattrs == NULL) return false;
ab->attrs = newattrs;
ab->capacity = newcap;
assert(needed <= ab->capacity);
return true;
}
static bool attrbuf_ensure_extra( attrbuf_t* ab, ssize_t extra ) {
const ssize_t needed = ab->count + extra;
return attrbuf_ensure_capacity( ab, needed );
}
ic_private attrbuf_t* attrbuf_new( alloc_t* mem ) {
attrbuf_t* ab = mem_zalloc_tp(mem,attrbuf_t);
if (ab == NULL) return NULL;
ab->mem = mem;
attrbuf_ensure_extra(ab,1);
return ab;
}
ic_private void attrbuf_free( attrbuf_t* ab ) {
if (ab==NULL) return;
mem_free(ab->mem, ab->attrs);
mem_free(ab->mem, ab);
}
ic_private void attrbuf_clear(attrbuf_t* ab) {
if (ab == NULL) return;
ab->count = 0;
}
ic_private ssize_t attrbuf_len( attrbuf_t* ab ) {
return (ab==NULL ? 0 : ab->count);
}
ic_private const attr_t* attrbuf_attrs( attrbuf_t* ab, ssize_t expected_len ) {
assert(expected_len <= ab->count );
// expand if needed
if (ab->count < expected_len) {
if (!attrbuf_ensure_capacity(ab,expected_len)) return NULL;
for(ssize_t i = ab->count; i < expected_len; i++) {
ab->attrs[i] = attr_none();
}
ab->count = expected_len;
}
return ab->attrs;
}
static void attrbuf_update_set_at( attrbuf_t* ab, ssize_t pos, ssize_t count, attr_t attr, bool update ) {
const ssize_t end = pos + count;
if (!attrbuf_ensure_capacity(ab, end)) return;
ssize_t i;
// initialize if end is beyond the count (todo: avoid duplicate init and set if update==false?)
if (ab->count < end) {
for(i = ab->count; i < end; i++) {
ab->attrs[i] = attr_none();
}
ab->count = end;
}
// fill pos to end with attr
for(i = pos; i < end; i++) {
ab->attrs[i] = (update ? attr_update_with(ab->attrs[i],attr) : attr);
}
}
ic_private void attrbuf_set_at( attrbuf_t* ab, ssize_t pos, ssize_t count, attr_t attr ) {
attrbuf_update_set_at(ab, pos, count, attr, false);
}
ic_private void attrbuf_update_at( attrbuf_t* ab, ssize_t pos, ssize_t count, attr_t attr ) {
attrbuf_update_set_at(ab, pos, count, attr, true);
}
ic_private void attrbuf_insert_at( attrbuf_t* ab, ssize_t pos, ssize_t count, attr_t attr ) {
if (pos < 0 || pos > ab->count || count <= 0) return;
if (!attrbuf_ensure_extra(ab,count)) return;
ic_memmove( ab->attrs + pos + count, ab->attrs + pos, (ab->count - pos)*ssizeof(attr_t) );
ab->count += count;
attrbuf_set_at( ab, pos, count, attr );
}
// note: must allow ab == NULL!
ic_private ssize_t attrbuf_append_n( stringbuf_t* sb, attrbuf_t* ab, const char* s, ssize_t len, attr_t attr ) {
if (s == NULL || len == 0) return sbuf_len(sb);
if (ab != NULL) {
if (!attrbuf_ensure_extra(ab,len)) return sbuf_len(sb);
attrbuf_set_at(ab, ab->count, len, attr);
}
return sbuf_append_n(sb,s,len);
}
ic_private attr_t attrbuf_attr_at( attrbuf_t* ab, ssize_t pos ) {
if (ab==NULL || pos < 0 || pos > ab->count) return attr_none();
return ab->attrs[pos];
}
ic_private void attrbuf_delete_at( attrbuf_t* ab, ssize_t pos, ssize_t count ) {
if (ab==NULL || pos < 0 || pos > ab->count) return;
if (pos + count > ab->count) { count = ab->count - pos; }
if (count == 0) return;
assert(pos + count <= ab->count);
ic_memmove( ab->attrs + pos, ab->attrs + pos + count, ab->count - (pos + count) );
ab->count -= count;
}

70
bin/isocline/src/attr.h Normal file

@ -0,0 +1,70 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#pragma once
#ifndef IC_ATTR_H
#define IC_ATTR_H
#include "common.h"
#include "stringbuf.h"
//-------------------------------------------------------------
// text attributes
//-------------------------------------------------------------
#define IC_ON (1)
#define IC_OFF (-1)
#define IC_NONE (0)
// try to fit in 64 bits
// note: order is important for some compilers
// note: each color can actually be 25 bits
typedef union attr_s {
struct {
unsigned int color:28;
signed int bold:2;
signed int reverse:2;
unsigned int bgcolor:28;
signed int underline:2;
signed int italic:2;
} x;
uint64_t value;
} attr_t;
ic_private attr_t attr_none(void);
ic_private attr_t attr_default(void);
ic_private attr_t attr_from_color( ic_color_t color );
ic_private bool attr_is_none(attr_t attr);
ic_private bool attr_is_eq(attr_t attr1, attr_t attr2);
ic_private attr_t attr_update_with( attr_t attr, attr_t newattr );
ic_private attr_t attr_from_sgr( const char* s, ssize_t len);
ic_private attr_t attr_from_esc_sgr( const char* s, ssize_t len);
//-------------------------------------------------------------
// attribute buffer used for rich rendering
//-------------------------------------------------------------
struct attrbuf_s;
typedef struct attrbuf_s attrbuf_t;
ic_private attrbuf_t* attrbuf_new( alloc_t* mem );
ic_private void attrbuf_free( attrbuf_t* ab ); // ab can be NULL
ic_private void attrbuf_clear( attrbuf_t* ab ); // ab can be NULL
ic_private ssize_t attrbuf_len( attrbuf_t* ab); // ab can be NULL
ic_private const attr_t* attrbuf_attrs( attrbuf_t* ab, ssize_t expected_len );
ic_private ssize_t attrbuf_append_n( stringbuf_t* sb, attrbuf_t* ab, const char* s, ssize_t len, attr_t attr );
ic_private void attrbuf_set_at( attrbuf_t* ab, ssize_t pos, ssize_t count, attr_t attr );
ic_private void attrbuf_update_at( attrbuf_t* ab, ssize_t pos, ssize_t count, attr_t attr );
ic_private void attrbuf_insert_at( attrbuf_t* ab, ssize_t pos, ssize_t count, attr_t attr );
ic_private attr_t attrbuf_attr_at( attrbuf_t* ab, ssize_t pos );
ic_private void attrbuf_delete_at( attrbuf_t* ab, ssize_t pos, ssize_t count );
#endif // IC_ATTR_H

842
bin/isocline/src/bbcode.c Normal file

@ -0,0 +1,842 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include "common.h"
#include "attr.h"
#include "term.h"
#include "bbcode.h"
//-------------------------------------------------------------
// HTML color table
//-------------------------------------------------------------
#include "bbcode_colors.c"
//-------------------------------------------------------------
// Types
//-------------------------------------------------------------
typedef struct style_s {
const char* name; // name of the style
attr_t attr; // attribute to apply
} style_t;
typedef enum align_e {
IC_ALIGN_LEFT,
IC_ALIGN_CENTER,
IC_ALIGN_RIGHT
} align_t;
typedef struct width_s {
ssize_t w; // > 0
align_t align;
bool dots; // "..." (e.g. "sentence...")
char fill; // " " (e.g. "hello ")
} width_t;
typedef struct tag_s {
const char* name; // tag open name
attr_t attr; // the saved attribute before applying the style
width_t width; // start sequence of at most "width" columns
ssize_t pos; // start position in the output (used for width restriction)
} tag_t;
static void tag_init(tag_t* tag) {
memset(tag,0,sizeof(*tag));
}
struct bbcode_s {
tag_t* tags; // stack of tags; one entry for each open tag
ssize_t tags_capacity;
ssize_t tags_nesting;
style_t* styles; // list of used defined styles
ssize_t styles_capacity;
ssize_t styles_count;
term_t* term; // terminal
alloc_t* mem; // allocator
// caches
stringbuf_t* out; // print buffer
attrbuf_t* out_attrs;
stringbuf_t* vout; // vprintf buffer
};
//-------------------------------------------------------------
// Create, helpers
//-------------------------------------------------------------
ic_private bbcode_t* bbcode_new( alloc_t* mem, term_t* term ) {
bbcode_t* bb = mem_zalloc_tp(mem,bbcode_t);
if (bb==NULL) return NULL;
bb->mem = mem;
bb->term = term;
bb->out = sbuf_new(mem);
bb->out_attrs = attrbuf_new(mem);
bb->vout = sbuf_new(mem);
return bb;
}
ic_private void bbcode_free( bbcode_t* bb ) {
for(ssize_t i = 0; i < bb->styles_count; i++) {
mem_free(bb->mem, bb->styles[i].name);
}
mem_free(bb->mem, bb->tags);
mem_free(bb->mem, bb->styles);
sbuf_free(bb->vout);
sbuf_free(bb->out);
attrbuf_free(bb->out_attrs);
mem_free(bb->mem, bb);
}
ic_private void bbcode_style_add( bbcode_t* bb, const char* style_name, attr_t attr ) {
if (bb->styles_count >= bb->styles_capacity) {
ssize_t newlen = bb->styles_capacity + 32;
style_t* p = mem_realloc_tp( bb->mem, style_t, bb->styles, newlen );
if (p == NULL) return;
bb->styles = p;
bb->styles_capacity = newlen;
}
assert(bb->styles_count < bb->styles_capacity);
bb->styles[bb->styles_count].name = mem_strdup( bb->mem, style_name );
bb->styles[bb->styles_count].attr = attr;
bb->styles_count++;
}
static ssize_t bbcode_tag_push( bbcode_t* bb, const tag_t* tag ) {
if (bb->tags_nesting >= bb->tags_capacity) {
ssize_t newcap = bb->tags_capacity + 32;
tag_t* p = mem_realloc_tp( bb->mem, tag_t, bb->tags, newcap );
if (p == NULL) return -1;
bb->tags = p;
bb->tags_capacity = newcap;
}
assert(bb->tags_nesting < bb->tags_capacity);
bb->tags[bb->tags_nesting] = *tag;
bb->tags_nesting++;
return (bb->tags_nesting-1);
}
static void bbcode_tag_pop( bbcode_t* bb, tag_t* tag ) {
if (bb->tags_nesting <= 0) {
if (tag != NULL) { tag_init(tag); }
}
else {
bb->tags_nesting--;
if (tag != NULL) {
*tag = bb->tags[bb->tags_nesting];
}
}
}
//-------------------------------------------------------------
// Invalid parse/values/balance
//-------------------------------------------------------------
static void bbcode_invalid(const char* fmt, ... ) {
if (getenv("ISOCLINE_BBCODE_DEBUG") != NULL) {
va_list args;
va_start(args,fmt);
vfprintf(stderr,fmt,args);
va_end(args);
}
}
//-------------------------------------------------------------
// Set attributes
//-------------------------------------------------------------
static attr_t bbcode_open( bbcode_t* bb, ssize_t out_pos, const tag_t* tag, attr_t current ) {
// save current and set
tag_t cur;
tag_init(&cur);
cur.name = tag->name;
cur.attr = current;
cur.width = tag->width;
cur.pos = out_pos;
bbcode_tag_push(bb,&cur);
return attr_update_with( current, tag->attr );
}
static bool bbcode_close( bbcode_t* bb, ssize_t base, const char* name, tag_t* pprev ) {
// pop until match
while (bb->tags_nesting > base) {
tag_t prev;
bbcode_tag_pop(bb,&prev);
if (name==NULL || prev.name==NULL || ic_stricmp(prev.name,name) == 0) {
// matched
if (pprev != NULL) { *pprev = prev; }
return true;
}
else {
// unbalanced: we either continue popping or restore the tags depending if there is a matching open tag in our tags.
bool has_open_tag = false;
if (name != NULL) {
for( ssize_t i = bb->tags_nesting - 1; i > base; i--) {
if (bb->tags[i].name != NULL && ic_stricmp(bb->tags[i].name, name) == 0) {
has_open_tag = true;
break;
}
}
}
bbcode_invalid("bbcode: unbalanced tags: open [%s], close [/%s]\n", prev.name, name);
if (!has_open_tag) {
bbcode_tag_push( bb, &prev ); // restore the tags and ignore this close tag
break;
}
else {
// continue until we hit our open tag
}
}
}
if (pprev != NULL) { memset(pprev,0,sizeof(*pprev)); }
return false;
}
//-------------------------------------------------------------
// Update attributes
//-------------------------------------------------------------
static const char* attr_update_bool( const char* fname, signed int* field, const char* value ) {
if (value == NULL || value[0] == 0 || strcmp(value,"on") || strcmp(value,"true") || strcmp(value,"1")) {
*field = IC_ON;
}
else if (strcmp(value,"off") || strcmp(value,"false") || strcmp(value,"0")) {
*field = IC_OFF;
}
else {
bbcode_invalid("bbcode: invalid %s value: %s\n", fname, value );
}
return fname;
}
static const char* attr_update_color( const char* fname, ic_color_t* field, const char* value ) {
if (value == NULL || value[0] == 0 || strcmp(value,"none") == 0) {
*field = IC_COLOR_NONE;
return fname;
}
// hex value
if (value[0] == '#') {
uint32_t rgb = 0;
if (sscanf(value,"#%x",&rgb) == 1) {
*field = ic_rgb(rgb);
}
else {
bbcode_invalid("bbcode: invalid color code: %s\n", value);
}
return fname;
}
// search color names
ssize_t lo = 0;
ssize_t hi = IC_HTML_COLOR_COUNT-1;
while( lo <= hi ) {
ssize_t mid = (lo + hi) / 2;
style_color_t* info = &html_colors[mid];
int cmp = strcmp(info->name,value);
if (cmp < 0) {
lo = mid+1;
}
else if (cmp > 0) {
hi = mid-1;
}
else {
*field = info->color;
return fname;
}
}
bbcode_invalid("bbcode: unknown %s: %s\n", fname, value);
*field = IC_COLOR_NONE;
return fname;
}
static const char* attr_update_sgr( const char* fname, attr_t* attr, const char* value ) {
*attr = attr_update_with(*attr, attr_from_sgr(value, ic_strlen(value)));
return fname;
}
static void attr_update_width( width_t* pwidth, char default_fill, const char* value ) {
// parse width value: <width>;<left|center|right>;<fill>;<cut>
width_t width;
memset(&width, 0, sizeof(width));
width.fill = default_fill; // use 0 for no-fill (as for max-width)
if (ic_atoz(value, &width.w)) {
ssize_t i = 0;
while( value[i] != ';' && value[i] != 0 ) { i++; }
if (value[i] == ';') {
i++;
ssize_t len = 0;
while( value[i+len] != ';' && value[i+len] != 0 ) { len++; }
if (len == 4 && ic_istarts_with(value+i,"left")) {
width.align = IC_ALIGN_LEFT;
}
else if (len == 5 && ic_istarts_with(value+i,"right")) {
width.align = IC_ALIGN_RIGHT;
}
else if (len == 6 && ic_istarts_with(value+i,"center")) {
width.align = IC_ALIGN_CENTER;
}
i += len;
if (value[i] == ';') {
i++; len = 0;
while( value[i+len] != ';' && value[i+len] != 0 ) { len++; }
if (len == 1) { width.fill = value[i]; }
i+= len;
if (value[i] == ';') {
i++; len = 0;
while( value[i+len] != ';' && value[i+len] != 0 ) { len++; }
if ((len == 2 && ic_istarts_with(value+i,"on")) || (len == 1 && value[i] == '1')) { width.dots = true; }
i += len;
}
}
}
}
else {
bbcode_invalid("bbcode: illegal width: %s\n", value);
}
*pwidth = width;
}
static const char* attr_update_ansi_color( const char* fname, ic_color_t* color, const char* value ) {
ssize_t num = 0;
if (ic_atoz(value, &num) && num >= 0 && num <= 256) {
*color = color_from_ansi256(num);
}
return fname;
}
static const char* attr_update_property( tag_t* tag, const char* attr_name, const char* value ) {
const char* fname = NULL;
fname = "bold";
if (strcmp(attr_name,fname) == 0) {
signed int b = IC_NONE;
attr_update_bool(fname,&b, value);
if (b != IC_NONE) { tag->attr.x.bold = b; }
return fname;
}
fname = "italic";
if (strcmp(attr_name,fname) == 0) {
signed int b = IC_NONE;
attr_update_bool(fname,&b, value);
if (b != IC_NONE) { tag->attr.x.italic = b; }
return fname;
}
fname = "underline";
if (strcmp(attr_name,fname) == 0) {
signed int b = IC_NONE;
attr_update_bool(fname,&b, value);
if (b != IC_NONE) { tag->attr.x.underline = b; }
return fname;
}
fname = "reverse";
if (strcmp(attr_name,fname) == 0) {
signed int b = IC_NONE;
attr_update_bool(fname,&b, value);
if (b != IC_NONE) { tag->attr.x.reverse = b; }
return fname;
}
fname = "color";
if (strcmp(attr_name,fname) == 0) {
unsigned int color = IC_COLOR_NONE;
attr_update_color(fname, &color, value);
if (color != IC_COLOR_NONE) { tag->attr.x.color = color; }
return fname;
}
fname = "bgcolor";
if (strcmp(attr_name,fname) == 0) {
unsigned int color = IC_COLOR_NONE;
attr_update_color(fname, &color, value);
if (color != IC_COLOR_NONE) { tag->attr.x.bgcolor = color; }
return fname;
}
fname = "ansi-sgr";
if (strcmp(attr_name,fname) == 0) {
attr_update_sgr(fname, &tag->attr, value);
return fname;
}
fname = "ansi-color";
if (strcmp(attr_name,fname) == 0) {
ic_color_t color = IC_COLOR_NONE;;
attr_update_ansi_color(fname, &color, value);
if (color != IC_COLOR_NONE) { tag->attr.x.color = color; }
return fname;
}
fname = "ansi-bgcolor";
if (strcmp(attr_name,fname) == 0) {
ic_color_t color = IC_COLOR_NONE;;
attr_update_ansi_color(fname, &color, value);
if (color != IC_COLOR_NONE) { tag->attr.x.bgcolor = color; }
return fname;
}
fname = "width";
if (strcmp(attr_name,fname) == 0) {
attr_update_width(&tag->width, ' ', value);
return fname;
}
fname = "max-width";
if (strcmp(attr_name,fname) == 0) {
attr_update_width(&tag->width, 0, value);
return "width";
}
else {
return NULL;
}
}
static const style_t builtin_styles[] = {
{ "b", { { IC_COLOR_NONE, IC_ON , IC_NONE, IC_COLOR_NONE, IC_NONE, IC_NONE } } },
{ "r", { { IC_COLOR_NONE, IC_NONE, IC_ON , IC_COLOR_NONE, IC_NONE, IC_NONE } } },
{ "u", { { IC_COLOR_NONE, IC_NONE, IC_NONE, IC_COLOR_NONE, IC_ON , IC_NONE } } },
{ "i", { { IC_COLOR_NONE, IC_NONE, IC_NONE, IC_COLOR_NONE, IC_NONE, IC_ON } } },
{ "em", { { IC_COLOR_NONE, IC_ON , IC_NONE, IC_COLOR_NONE, IC_NONE, IC_NONE } } }, // bold
{ "url",{ { IC_COLOR_NONE, IC_NONE, IC_NONE, IC_COLOR_NONE, IC_ON, IC_NONE } } }, // underline
{ NULL, { { IC_COLOR_NONE, IC_NONE, IC_NONE, IC_COLOR_NONE, IC_NONE, IC_NONE } } }
};
static void attr_update_with_styles( tag_t* tag, const char* attr_name, const char* value,
bool usebgcolor, const style_t* styles, ssize_t count )
{
// direct hex color?
if (attr_name[0] == '#' && (value == NULL || value[0]==0)) {
value = attr_name;
attr_name = (usebgcolor ? "bgcolor" : "color");
}
// first try if it is a builtin property
const char* name;
if ((name = attr_update_property(tag,attr_name,value)) != NULL) {
if (tag->name != NULL) tag->name = name;
return;
}
// then check all styles
while( count-- > 0 ) {
const style_t* style = styles + count;
if (strcmp(style->name,attr_name) == 0) {
tag->attr = attr_update_with(tag->attr,style->attr);
if (tag->name != NULL) tag->name = style->name;
return;
}
}
// check builtin styles; todo: binary search?
for( const style_t* style = builtin_styles; style->name != NULL; style++) {
if (strcmp(style->name,attr_name) == 0) {
tag->attr = attr_update_with(tag->attr,style->attr);
if (tag->name != NULL) tag->name = style->name;
return;
}
}
// check colors as a style
ssize_t lo = 0;
ssize_t hi = IC_HTML_COLOR_COUNT-1;
while( lo <= hi ) {
ssize_t mid = (lo + hi) / 2;
style_color_t* info = &html_colors[mid];
int cmp = strcmp(info->name,attr_name);
if (cmp < 0) {
lo = mid+1;
}
else if (cmp > 0) {
hi = mid-1;
}
else {
attr_t cattr = attr_none();
if (usebgcolor) { cattr.x.bgcolor = info->color; }
else { cattr.x.color = info->color; }
tag->attr = attr_update_with(tag->attr,cattr);
if (tag->name != NULL) tag->name = info->name;
return;
}
}
// not found
bbcode_invalid("bbcode: unknown style: %s\n", attr_name);
}
ic_private attr_t bbcode_style( bbcode_t* bb, const char* style_name ) {
tag_t tag;
tag_init(&tag);
attr_update_with_styles( &tag, style_name, NULL, false, bb->styles, bb->styles_count );
return tag.attr;
}
//-------------------------------------------------------------
// Parse tags
//-------------------------------------------------------------
ic_private const char* parse_skip_white(const char* s) {
while( *s != 0 && *s != ']') {
if (!(*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r')) break;
s++;
}
return s;
}
ic_private const char* parse_skip_to_white(const char* s) {
while( *s != 0 && *s != ']') {
if (*s == ' ' || *s == '\t' || *s == '\n' || *s == '\r') break;
s++;
}
return parse_skip_white(s);
}
ic_private const char* parse_skip_to_end(const char* s) {
while( *s != 0 && *s != ']' ) { s++; }
return s;
}
ic_private const char* parse_attr_name(const char* s) {
if (*s == '#') {
s++; // hex rgb color as id
while( *s != 0 && *s != ']') {
if (!((*s >= 'a' && *s <= 'f') || (*s >= 'A' && *s <= 'Z') || (*s >= '0' && *s <= '9'))) break;
s++;
}
}
else {
while( *s != 0 && *s != ']') {
if (!((*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'Z') ||
(*s >= '0' && *s <= '9') || *s == '_' || *s == '-')) break;
s++;
}
}
return s;
}
ic_private const char* parse_value(const char* s, const char** start, const char** end) {
if (*s == '"') {
s++;
*start = s;
while( *s != 0 ) {
if (*s == '"') break;
s++;
}
*end = s;
if (*s == '"') { s++; }
}
else if (*s == '#') {
*start = s;
s++;
while( *s != 0 ) {
if (!((*s >= 'a' && *s <= 'f') || (*s >= 'A' && *s <= 'Z') || (*s >= '0' && *s <= '9'))) break;
s++;
}
*end = s;
}
else {
*start = s;
while( *s != 0 ) {
if (!((*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'F') || (*s >= '0' && *s <= '9') || *s == '-' || *s == '_')) break;
s++;
}
*end = s;
}
return s;
}
ic_private const char* parse_tag_value( tag_t* tag, char* idbuf, const char* s, const style_t* styles, ssize_t scount ) {
// parse: \s*[\w-]+\s*(=\s*<value>)
bool usebgcolor = false;
const char* id = s;
const char* idend = parse_attr_name(id);
const char* val = NULL;
const char* valend = NULL;
if (id == idend) {
bbcode_invalid("bbcode: empty identifier? %.10s...\n", id );
return parse_skip_to_white(id);
}
// "on" bgcolor?
s = parse_skip_white(idend);
if (idend - id == 2 && ic_strnicmp(id,"on",2) == 0 && *s != '=') {
usebgcolor = true;
id = s;
idend = parse_attr_name(id);
if (id == idend) {
bbcode_invalid("bbcode: empty identifier follows 'on'? %.10s...\n", id );
return parse_skip_to_white(id);
}
s = parse_skip_white(idend);
}
// value
if (*s == '=') {
s++;
s = parse_skip_white(s);
s = parse_value(s, &val, &valend);
s = parse_skip_white(s);
}
// limit name and attr to 128 bytes
char valbuf[128];
ic_strncpy( idbuf, 128, id, idend - id);
ic_strncpy( valbuf, 128, val, valend - val);
ic_str_tolower(idbuf);
ic_str_tolower(valbuf);
attr_update_with_styles( tag, idbuf, valbuf, usebgcolor, styles, scount );
return s;
}
static const char* parse_tag_values( tag_t* tag, char* idbuf, const char* s, const style_t* styles, ssize_t scount ) {
s = parse_skip_white(s);
idbuf[0] = 0;
ssize_t count = 0;
while( *s != 0 && *s != ']') {
char idbuf_next[128];
s = parse_tag_value(tag, (count==0 ? idbuf : idbuf_next), s, styles, scount);
count++;
}
if (*s == ']') { s++; }
return s;
}
static const char* parse_tag( tag_t* tag, char* idbuf, bool* open, bool* pre, const char* s, const style_t* styles, ssize_t scount ) {
*open = true;
*pre = false;
if (*s != '[') return s;
s = parse_skip_white(s+1);
if (*s == '!') { // pre
*pre = true;
s = parse_skip_white(s+1);
}
else if (*s == '/') {
*open = false;
s = parse_skip_white(s+1);
};
s = parse_tag_values( tag, idbuf, s, styles, scount);
return s;
}
//---------------------------------------------------------
// Styles
//---------------------------------------------------------
static void bbcode_parse_tag_content( bbcode_t* bb, const char* s, tag_t* tag ) {
tag_init(tag);
if (s != NULL) {
char idbuf[128];
parse_tag_values(tag, idbuf, s, bb->styles, bb->styles_count);
}
}
ic_private void bbcode_style_def( bbcode_t* bb, const char* style_name, const char* s ) {
tag_t tag;
bbcode_parse_tag_content( bb, s, &tag);
bbcode_style_add(bb, style_name, tag.attr);
}
ic_private void bbcode_style_open( bbcode_t* bb, const char* fmt ) {
tag_t tag;
bbcode_parse_tag_content(bb, fmt, &tag);
term_set_attr( bb->term, bbcode_open(bb, 0, &tag, term_get_attr(bb->term)) );
}
ic_private void bbcode_style_close( bbcode_t* bb, const char* fmt ) {
const ssize_t base = bb->tags_nesting - 1; // as we end a style
tag_t tag;
bbcode_parse_tag_content(bb, fmt, &tag);
tag_t prev;
if (bbcode_close(bb, base, tag.name, &prev)) {
term_set_attr( bb->term, prev.attr );
}
}
//---------------------------------------------------------
// Restrict to width
//---------------------------------------------------------
static void bbcode_restrict_width( ssize_t start, width_t width, stringbuf_t* out, attrbuf_t* attr_out ) {
if (width.w <= 0) return;
assert(start <= sbuf_len(out));
assert(attr_out == NULL || sbuf_len(out) == attrbuf_len(attr_out));
const char* s = sbuf_string(out) + start;
const ssize_t len = sbuf_len(out) - start;
const ssize_t w = str_column_width(s);
if (w == width.w) return; // fits exactly
if (w > width.w) {
// too large
ssize_t innerw = (width.dots && width.w > 3 ? width.w-3 : width.w);
if (width.align == IC_ALIGN_RIGHT) {
// right align
const ssize_t ndel = str_skip_until_fit( s, innerw );
sbuf_delete_at( out, start, ndel );
attrbuf_delete_at( attr_out, start, ndel );
if (innerw < width.w) {
// add dots
sbuf_insert_at( out, "...", start );
attr_t attr = attrbuf_attr_at(attr_out, start);
attrbuf_insert_at( attr_out, start, 3, attr);
}
}
else {
// left or center align
ssize_t count = str_take_while_fit( s, innerw );
sbuf_delete_at( out, start + count, len - count );
attrbuf_delete_at( attr_out, start + count, len - count );
if (innerw < width.w) {
// add dots
attr_t attr = attrbuf_attr_at(attr_out,start);
attrbuf_append_n( out, attr_out, "...", 3, attr );
}
}
}
else {
// too short, pad to width
const ssize_t diff = (width.w - w);
const ssize_t pad_left = (width.align == IC_ALIGN_RIGHT ? diff : (width.align == IC_ALIGN_LEFT ? 0 : diff / 2));
const ssize_t pad_right = (width.align == IC_ALIGN_LEFT ? diff : (width.align == IC_ALIGN_RIGHT ? 0 : diff - pad_left));
if (width.fill != 0 && pad_left > 0) {
const attr_t attr = attrbuf_attr_at(attr_out,start);
for( ssize_t i = 0; i < pad_left; i++) { // todo: optimize
sbuf_insert_char_at(out, width.fill, start);
}
attrbuf_insert_at( attr_out, start, pad_left, attr );
}
if (width.fill != 0 && pad_right > 0) {
const attr_t attr = attrbuf_attr_at(attr_out,sbuf_len(out) - 1);
char buf[2];
buf[0] = width.fill;
buf[1] = 0;
for( ssize_t i = 0; i < pad_right; i++) { // todo: optimize
attrbuf_append_n( out, attr_out, buf, 1, attr );
}
}
}
}
//---------------------------------------------------------
// Print
//---------------------------------------------------------
ic_private ssize_t bbcode_process_tag( bbcode_t* bb, const char* s, const ssize_t nesting_base,
stringbuf_t* out, attrbuf_t* attr_out, attr_t* cur_attr ) {
assert(*s == '[');
tag_t tag;
tag_init(&tag);
bool open = true;
bool ispre = false;
char idbuf[128];
const char* end = parse_tag( &tag, idbuf, &open, &ispre, s, bb->styles, bb->styles_count ); // todo: styles
assert(end > s);
if (open) {
if (!ispre) {
// open tag
*cur_attr = bbcode_open( bb, sbuf_len(out), &tag, *cur_attr );
}
else {
// scan pre to end tag
attr_t attr = attr_update_with(*cur_attr, tag.attr);
char pre[132];
if (snprintf(pre, 132, "[/%s]", idbuf) < ssizeof(pre)) {
const char* etag = strstr(end,pre);
if (etag == NULL) {
const ssize_t len = ic_strlen(end);
attrbuf_append_n(out, attr_out, end, len, attr);
end += len;
}
else {
attrbuf_append_n(out, attr_out, end, (etag - end), attr);
end = etag + ic_strlen(pre);
}
}
}
}
else {
// pop the tag
tag_t prev;
if (bbcode_close( bb, nesting_base, tag.name, &prev)) {
*cur_attr = prev.attr;
if (prev.width.w > 0) {
// closed a width tag; restrict the output to width
bbcode_restrict_width( prev.pos, prev.width, out, attr_out);
}
}
}
return (end - s);
}
ic_private void bbcode_append( bbcode_t* bb, const char* s, stringbuf_t* out, attrbuf_t* attr_out ) {
if (bb == NULL || s == NULL) return;
attr_t attr = attr_none();
const ssize_t base = bb->tags_nesting; // base; will not be popped
ssize_t i = 0;
while( s[i] != 0 ) {
// handle no tags in bulk
ssize_t nobb = 0;
char c;
while( (c = s[i+nobb]) != 0) {
if (c == '[' || c == '\\') { break; }
if (c == '\x1B' && s[i+nobb+1] == '[') {
nobb++; // don't count 'ESC[' as a tag opener
}
nobb++;
}
if (nobb > 0) { attrbuf_append_n(out, attr_out, s+i, nobb, attr); }
i += nobb;
// tag
if (s[i] == '[') {
i += bbcode_process_tag(bb, s+i, base, out, attr_out, &attr);
}
else if (s[i] == '\\') {
if (s[i+1] == '\\' || s[i+1] == '[') {
attrbuf_append_n(out, attr_out, s+i+1, 1, attr); // escape '\[' and '\\'
i += 2;
}
else {
attrbuf_append_n(out, attr_out, s+i, 1, attr); // pass '\\' as is
i++;
}
}
}
// pop unclosed openings
assert(bb->tags_nesting >= base);
while( bb->tags_nesting > base ) {
bbcode_tag_pop(bb,NULL);
};
}
ic_private void bbcode_print( bbcode_t* bb, const char* s ) {
if (bb->out == NULL || bb->out_attrs == NULL || s == NULL) return;
assert(sbuf_len(bb->out) == 0 && attrbuf_len(bb->out_attrs) == 0);
bbcode_append( bb, s, bb->out, bb->out_attrs );
term_write_formatted( bb->term, sbuf_string(bb->out), attrbuf_attrs(bb->out_attrs,sbuf_len(bb->out)) );
attrbuf_clear(bb->out_attrs);
sbuf_clear(bb->out);
}
ic_private void bbcode_println( bbcode_t* bb, const char* s ) {
bbcode_print(bb,s);
term_writeln(bb->term, "");
}
ic_private void bbcode_vprintf( bbcode_t* bb, const char* fmt, va_list args ) {
if (bb->vout == NULL || fmt == NULL) return;
assert(sbuf_len(bb->vout) == 0);
sbuf_append_vprintf(bb->vout,fmt,args);
bbcode_print(bb, sbuf_string(bb->vout));
sbuf_clear(bb->vout);
}
ic_private void bbcode_printf( bbcode_t* bb, const char* fmt, ... ) {
va_list args;
va_start(args,fmt);
bbcode_vprintf(bb,fmt,args);
va_end(args);
}
ic_private ssize_t bbcode_column_width( bbcode_t* bb, const char* s ) {
if (s==NULL || s[0] == 0) return 0;
if (bb->vout == NULL) { return str_column_width(s); }
assert(sbuf_len(bb->vout) == 0);
bbcode_append( bb, s, bb->vout, NULL);
const ssize_t w = str_column_width(sbuf_string(bb->vout));
sbuf_clear(bb->vout);
return w;
}

37
bin/isocline/src/bbcode.h Normal file

@ -0,0 +1,37 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#pragma once
#ifndef IC_BBCODE_H
#define IC_BBCODE_H
#include <stdarg.h>
#include "common.h"
#include "term.h"
struct bbcode_s;
typedef struct bbcode_s bbcode_t;
ic_private bbcode_t* bbcode_new( alloc_t* mem, term_t* term );
ic_private void bbcode_free( bbcode_t* bb );
ic_private void bbcode_style_add( bbcode_t* bb, const char* style_name, attr_t attr );
ic_private void bbcode_style_def( bbcode_t* bb, const char* style_name, const char* s );
ic_private void bbcode_style_open( bbcode_t* bb, const char* fmt );
ic_private void bbcode_style_close( bbcode_t* bb, const char* fmt );
ic_private attr_t bbcode_style( bbcode_t* bb, const char* style_name );
ic_private void bbcode_print( bbcode_t* bb, const char* s );
ic_private void bbcode_println( bbcode_t* bb, const char* s );
ic_private void bbcode_printf( bbcode_t* bb, const char* fmt, ... );
ic_private void bbcode_vprintf( bbcode_t* bb, const char* fmt, va_list args );
ic_private ssize_t bbcode_column_width( bbcode_t* bb, const char* s );
// allows `attr_out == NULL`.
ic_private void bbcode_append( bbcode_t* bb, const char* s, stringbuf_t* out, attrbuf_t* attr_out );
#endif // IC_BBCODE_H

@ -0,0 +1,194 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
// This file is included from "bbcode.c" and contains html color names
#include "common.h"
typedef struct style_color_s {
const char* name;
ic_color_t color;
} style_color_t;
#define IC_HTML_COLOR_COUNT (172)
// ordered list of HTML color names (so we can use binary search)
static style_color_t html_colors[IC_HTML_COLOR_COUNT+1] = {
{ "aliceblue", IC_RGB(0xf0f8ff) },
{ "ansi-aqua", IC_ANSI_AQUA },
{ "ansi-black", IC_ANSI_BLACK },
{ "ansi-blue", IC_ANSI_BLUE },
{ "ansi-cyan", IC_ANSI_CYAN },
{ "ansi-darkgray", IC_ANSI_DARKGRAY },
{ "ansi-darkgrey", IC_ANSI_DARKGRAY },
{ "ansi-default", IC_ANSI_DEFAULT },
{ "ansi-fuchsia", IC_ANSI_FUCHSIA },
{ "ansi-gray", IC_ANSI_GRAY },
{ "ansi-green", IC_ANSI_GREEN },
{ "ansi-grey", IC_ANSI_GRAY },
{ "ansi-lightgray", IC_ANSI_LIGHTGRAY },
{ "ansi-lightgrey", IC_ANSI_LIGHTGRAY },
{ "ansi-lime" , IC_ANSI_LIME },
{ "ansi-magenta", IC_ANSI_MAGENTA },
{ "ansi-maroon", IC_ANSI_MAROON },
{ "ansi-navy", IC_ANSI_NAVY },
{ "ansi-olive", IC_ANSI_OLIVE },
{ "ansi-purple", IC_ANSI_PURPLE },
{ "ansi-red", IC_ANSI_RED },
{ "ansi-silver", IC_ANSI_SILVER },
{ "ansi-teal", IC_ANSI_TEAL },
{ "ansi-white", IC_ANSI_WHITE },
{ "ansi-yellow", IC_ANSI_YELLOW },
{ "antiquewhite", IC_RGB(0xfaebd7) },
{ "aqua", IC_RGB(0x00ffff) },
{ "aquamarine", IC_RGB(0x7fffd4) },
{ "azure", IC_RGB(0xf0ffff) },
{ "beige", IC_RGB(0xf5f5dc) },
{ "bisque", IC_RGB(0xffe4c4) },
{ "black", IC_RGB(0x000000) },
{ "blanchedalmond", IC_RGB(0xffebcd) },
{ "blue", IC_RGB(0x0000ff) },
{ "blueviolet", IC_RGB(0x8a2be2) },
{ "brown", IC_RGB(0xa52a2a) },
{ "burlywood", IC_RGB(0xdeb887) },
{ "cadetblue", IC_RGB(0x5f9ea0) },
{ "chartreuse", IC_RGB(0x7fff00) },
{ "chocolate", IC_RGB(0xd2691e) },
{ "coral", IC_RGB(0xff7f50) },
{ "cornflowerblue", IC_RGB(0x6495ed) },
{ "cornsilk", IC_RGB(0xfff8dc) },
{ "crimson", IC_RGB(0xdc143c) },
{ "cyan", IC_RGB(0x00ffff) },
{ "darkblue", IC_RGB(0x00008b) },
{ "darkcyan", IC_RGB(0x008b8b) },
{ "darkgoldenrod", IC_RGB(0xb8860b) },
{ "darkgray", IC_RGB(0xa9a9a9) },
{ "darkgreen", IC_RGB(0x006400) },
{ "darkgrey", IC_RGB(0xa9a9a9) },
{ "darkkhaki", IC_RGB(0xbdb76b) },
{ "darkmagenta", IC_RGB(0x8b008b) },
{ "darkolivegreen", IC_RGB(0x556b2f) },
{ "darkorange", IC_RGB(0xff8c00) },
{ "darkorchid", IC_RGB(0x9932cc) },
{ "darkred", IC_RGB(0x8b0000) },
{ "darksalmon", IC_RGB(0xe9967a) },
{ "darkseagreen", IC_RGB(0x8fbc8f) },
{ "darkslateblue", IC_RGB(0x483d8b) },
{ "darkslategray", IC_RGB(0x2f4f4f) },
{ "darkslategrey", IC_RGB(0x2f4f4f) },
{ "darkturquoise", IC_RGB(0x00ced1) },
{ "darkviolet", IC_RGB(0x9400d3) },
{ "deeppink", IC_RGB(0xff1493) },
{ "deepskyblue", IC_RGB(0x00bfff) },
{ "dimgray", IC_RGB(0x696969) },
{ "dimgrey", IC_RGB(0x696969) },
{ "dodgerblue", IC_RGB(0x1e90ff) },
{ "firebrick", IC_RGB(0xb22222) },
{ "floralwhite", IC_RGB(0xfffaf0) },
{ "forestgreen", IC_RGB(0x228b22) },
{ "fuchsia", IC_RGB(0xff00ff) },
{ "gainsboro", IC_RGB(0xdcdcdc) },
{ "ghostwhite", IC_RGB(0xf8f8ff) },
{ "gold", IC_RGB(0xffd700) },
{ "goldenrod", IC_RGB(0xdaa520) },
{ "gray", IC_RGB(0x808080) },
{ "green", IC_RGB(0x008000) },
{ "greenyellow", IC_RGB(0xadff2f) },
{ "grey", IC_RGB(0x808080) },
{ "honeydew", IC_RGB(0xf0fff0) },
{ "hotpink", IC_RGB(0xff69b4) },
{ "indianred", IC_RGB(0xcd5c5c) },
{ "indigo", IC_RGB(0x4b0082) },
{ "ivory", IC_RGB(0xfffff0) },
{ "khaki", IC_RGB(0xf0e68c) },
{ "lavender", IC_RGB(0xe6e6fa) },
{ "lavenderblush", IC_RGB(0xfff0f5) },
{ "lawngreen", IC_RGB(0x7cfc00) },
{ "lemonchiffon", IC_RGB(0xfffacd) },
{ "lightblue", IC_RGB(0xadd8e6) },
{ "lightcoral", IC_RGB(0xf08080) },
{ "lightcyan", IC_RGB(0xe0ffff) },
{ "lightgoldenrodyellow", IC_RGB(0xfafad2) },
{ "lightgray", IC_RGB(0xd3d3d3) },
{ "lightgreen", IC_RGB(0x90ee90) },
{ "lightgrey", IC_RGB(0xd3d3d3) },
{ "lightpink", IC_RGB(0xffb6c1) },
{ "lightsalmon", IC_RGB(0xffa07a) },
{ "lightseagreen", IC_RGB(0x20b2aa) },
{ "lightskyblue", IC_RGB(0x87cefa) },
{ "lightslategray", IC_RGB(0x778899) },
{ "lightslategrey", IC_RGB(0x778899) },
{ "lightsteelblue", IC_RGB(0xb0c4de) },
{ "lightyellow", IC_RGB(0xffffe0) },
{ "lime", IC_RGB(0x00ff00) },
{ "limegreen", IC_RGB(0x32cd32) },
{ "linen", IC_RGB(0xfaf0e6) },
{ "magenta", IC_RGB(0xff00ff) },
{ "maroon", IC_RGB(0x800000) },
{ "mediumaquamarine", IC_RGB(0x66cdaa) },
{ "mediumblue", IC_RGB(0x0000cd) },
{ "mediumorchid", IC_RGB(0xba55d3) },
{ "mediumpurple", IC_RGB(0x9370db) },
{ "mediumseagreen", IC_RGB(0x3cb371) },
{ "mediumslateblue", IC_RGB(0x7b68ee) },
{ "mediumspringgreen", IC_RGB(0x00fa9a) },
{ "mediumturquoise", IC_RGB(0x48d1cc) },
{ "mediumvioletred", IC_RGB(0xc71585) },
{ "midnightblue", IC_RGB(0x191970) },
{ "mintcream", IC_RGB(0xf5fffa) },
{ "mistyrose", IC_RGB(0xffe4e1) },
{ "moccasin", IC_RGB(0xffe4b5) },
{ "navajowhite", IC_RGB(0xffdead) },
{ "navy", IC_RGB(0x000080) },
{ "oldlace", IC_RGB(0xfdf5e6) },
{ "olive", IC_RGB(0x808000) },
{ "olivedrab", IC_RGB(0x6b8e23) },
{ "orange", IC_RGB(0xffa500) },
{ "orangered", IC_RGB(0xff4500) },
{ "orchid", IC_RGB(0xda70d6) },
{ "palegoldenrod", IC_RGB(0xeee8aa) },
{ "palegreen", IC_RGB(0x98fb98) },
{ "paleturquoise", IC_RGB(0xafeeee) },
{ "palevioletred", IC_RGB(0xdb7093) },
{ "papayawhip", IC_RGB(0xffefd5) },
{ "peachpuff", IC_RGB(0xffdab9) },
{ "peru", IC_RGB(0xcd853f) },
{ "pink", IC_RGB(0xffc0cb) },
{ "plum", IC_RGB(0xdda0dd) },
{ "powderblue", IC_RGB(0xb0e0e6) },
{ "purple", IC_RGB(0x800080) },
{ "rebeccapurple", IC_RGB(0x663399) },
{ "red", IC_RGB(0xff0000) },
{ "rosybrown", IC_RGB(0xbc8f8f) },
{ "royalblue", IC_RGB(0x4169e1) },
{ "saddlebrown", IC_RGB(0x8b4513) },
{ "salmon", IC_RGB(0xfa8072) },
{ "sandybrown", IC_RGB(0xf4a460) },
{ "seagreen", IC_RGB(0x2e8b57) },
{ "seashell", IC_RGB(0xfff5ee) },
{ "sienna", IC_RGB(0xa0522d) },
{ "silver", IC_RGB(0xc0c0c0) },
{ "skyblue", IC_RGB(0x87ceeb) },
{ "slateblue", IC_RGB(0x6a5acd) },
{ "slategray", IC_RGB(0x708090) },
{ "slategrey", IC_RGB(0x708090) },
{ "snow", IC_RGB(0xfffafa) },
{ "springgreen", IC_RGB(0x00ff7f) },
{ "steelblue", IC_RGB(0x4682b4) },
{ "tan", IC_RGB(0xd2b48c) },
{ "teal", IC_RGB(0x008080) },
{ "thistle", IC_RGB(0xd8bfd8) },
{ "tomato", IC_RGB(0xff6347) },
{ "turquoise", IC_RGB(0x40e0d0) },
{ "violet", IC_RGB(0xee82ee) },
{ "wheat", IC_RGB(0xf5deb3) },
{ "white", IC_RGB(0xffffff) },
{ "whitesmoke", IC_RGB(0xf5f5f5) },
{ "yellow", IC_RGB(0xffff00) },
{ "yellowgreen", IC_RGB(0x9acd32) },
{NULL, 0}
};

347
bin/isocline/src/common.c Normal file

@ -0,0 +1,347 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include "common.h"
//-------------------------------------------------------------
// String wrappers for ssize_t
//-------------------------------------------------------------
ic_private ssize_t ic_strlen( const char* s ) {
if (s==NULL) return 0;
return to_ssize_t(strlen(s));
}
ic_private void ic_memmove( void* dest, const void* src, ssize_t n ) {
assert(dest!=NULL && src != NULL);
if (n <= 0) return;
memmove(dest,src,to_size_t(n));
}
ic_private void ic_memcpy( void* dest, const void* src, ssize_t n ) {
assert(dest!=NULL && src != NULL);
if (dest == NULL || src == NULL || n <= 0) return;
memcpy(dest,src,to_size_t(n));
}
ic_private void ic_memset(void* dest, uint8_t value, ssize_t n) {
assert(dest!=NULL);
if (dest == NULL || n <= 0) return;
memset(dest,(int8_t)value,to_size_t(n));
}
ic_private bool ic_memnmove( void* dest, ssize_t dest_size, const void* src, ssize_t n ) {
assert(dest!=NULL && src != NULL);
if (n <= 0) return true;
if (dest_size < n) { assert(false); return false; }
memmove(dest,src,to_size_t(n));
return true;
}
ic_private bool ic_strcpy( char* dest, ssize_t dest_size /* including 0 */, const char* src) {
assert(dest!=NULL && src != NULL);
if (dest == NULL || dest_size <= 0) return false;
ssize_t slen = ic_strlen(src);
if (slen >= dest_size) return false;
strcpy(dest,src);
assert(dest[slen] == 0);
return true;
}
ic_private bool ic_strncpy( char* dest, ssize_t dest_size /* including 0 */, const char* src, ssize_t n) {
assert(dest!=NULL && n < dest_size);
if (dest == NULL || dest_size <= 0) return false;
if (n >= dest_size) return false;
if (src==NULL || n <= 0) {
dest[0] = 0;
}
else {
strncpy(dest,src,to_size_t(n));
dest[n] = 0;
}
return true;
}
//-------------------------------------------------------------
// String matching
//-------------------------------------------------------------
ic_public bool ic_starts_with( const char* s, const char* prefix ) {
if (s==prefix) return true;
if (prefix==NULL) return true;
if (s==NULL) return false;
ssize_t i;
for( i = 0; s[i] != 0 && prefix[i] != 0; i++) {
if (s[i] != prefix[i]) return false;
}
return (prefix[i] == 0);
}
ic_private char ic_tolower( char c ) {
return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
}
ic_private void ic_str_tolower(char* s) {
while(*s != 0) {
*s = ic_tolower(*s);
s++;
}
}
ic_public bool ic_istarts_with( const char* s, const char* prefix ) {
if (s==prefix) return true;
if (prefix==NULL) return true;
if (s==NULL) return false;
ssize_t i;
for( i = 0; s[i] != 0 && prefix[i] != 0; i++) {
if (ic_tolower(s[i]) != ic_tolower(prefix[i])) return false;
}
return (prefix[i] == 0);
}
ic_private int ic_strnicmp(const char* s1, const char* s2, ssize_t n) {
if (s1 == NULL && s2 == NULL) return 0;
if (s1 == NULL) return -1;
if (s2 == NULL) return 1;
ssize_t i;
for (i = 0; s1[i] != 0 && i < n; i++) { // note: if s2[i] == 0 the loop will stop as c1 != c2
char c1 = ic_tolower(s1[i]);
char c2 = ic_tolower(s2[i]);
if (c1 < c2) return -1;
if (c1 > c2) return 1;
}
return ((i >= n || s2[i] == 0) ? 0 : -1);
}
ic_private int ic_stricmp(const char* s1, const char* s2) {
ssize_t len1 = ic_strlen(s1);
ssize_t len2 = ic_strlen(s2);
if (len1 < len2) return -1;
if (len1 > len2) return 1;
return (ic_strnicmp(s1, s2, (len1 >= len2 ? len1 : len2)));
}
static const char* ic_stristr(const char* s, const char* pat) {
if (s==NULL) return NULL;
if (pat==NULL || pat[0] == 0) return s;
ssize_t patlen = ic_strlen(pat);
for (ssize_t i = 0; s[i] != 0; i++) {
if (ic_strnicmp(s + i, pat, patlen) == 0) return (s+i);
}
return NULL;
}
ic_private bool ic_contains(const char* big, const char* s) {
if (big == NULL) return false;
if (s == NULL) return true;
return (strstr(big,s) != NULL);
}
ic_private bool ic_icontains(const char* big, const char* s) {
if (big == NULL) return false;
if (s == NULL) return true;
return (ic_stristr(big,s) != NULL);
}
//-------------------------------------------------------------
// Unicode
// QUTF-8: See <https://github.com/koka-lang/koka/blob/master/kklib/include/kklib/string.h>
// Raw bytes are code points 0xEE000 - 0xEE0FF
//-------------------------------------------------------------
#define IC_UNICODE_RAW ((unicode_t)(0xEE000U))
ic_private unicode_t unicode_from_raw(uint8_t c) {
return (IC_UNICODE_RAW + c);
}
ic_private bool unicode_is_raw(unicode_t u, uint8_t* c) {
if (u >= IC_UNICODE_RAW && u <= IC_UNICODE_RAW + 0xFF) {
*c = (uint8_t)(u - IC_UNICODE_RAW);
return true;
}
else {
return false;
}
}
ic_private void unicode_to_qutf8(unicode_t u, uint8_t buf[5]) {
memset(buf, 0, 5);
if (u <= 0x7F) {
buf[0] = (uint8_t)u;
}
else if (u <= 0x07FF) {
buf[0] = (0xC0 | ((uint8_t)(u >> 6)));
buf[1] = (0x80 | (((uint8_t)u) & 0x3F));
}
else if (u <= 0xFFFF) {
buf[0] = (0xE0 | ((uint8_t)(u >> 12)));
buf[1] = (0x80 | (((uint8_t)(u >> 6)) & 0x3F));
buf[2] = (0x80 | (((uint8_t)u) & 0x3F));
}
else if (u <= 0x10FFFF) {
if (unicode_is_raw(u, &buf[0])) {
buf[1] = 0;
}
else {
buf[0] = (0xF0 | ((uint8_t)(u >> 18)));
buf[1] = (0x80 | (((uint8_t)(u >> 12)) & 0x3F));
buf[2] = (0x80 | (((uint8_t)(u >> 6)) & 0x3F));
buf[3] = (0x80 | (((uint8_t)u) & 0x3F));
}
}
}
// is this a utf8 continuation byte?
ic_private bool utf8_is_cont(uint8_t c) {
return ((c & 0xC0) == 0x80);
}
ic_private unicode_t unicode_from_qutf8(const uint8_t* s, ssize_t len, ssize_t* count) {
unicode_t c0 = 0;
if (len <= 0 || s == NULL) {
goto fail;
}
// 1 byte
c0 = s[0];
if (c0 <= 0x7F && len >= 1) {
if (count != NULL) *count = 1;
return c0;
}
else if (c0 <= 0xC1) { // invalid continuation byte or invalid 0xC0, 0xC1
goto fail;
}
// 2 bytes
else if (c0 <= 0xDF && len >= 2 && utf8_is_cont(s[1])) {
if (count != NULL) *count = 2;
return (((c0 & 0x1F) << 6) | (s[1] & 0x3F));
}
// 3 bytes: reject overlong and surrogate halves
else if (len >= 3 &&
((c0 == 0xE0 && s[1] >= 0xA0 && s[1] <= 0xBF && utf8_is_cont(s[2])) ||
(c0 >= 0xE1 && c0 <= 0xEC && utf8_is_cont(s[1]) && utf8_is_cont(s[2]))
))
{
if (count != NULL) *count = 3;
return (((c0 & 0x0F) << 12) | ((unicode_t)(s[1] & 0x3F) << 6) | (s[2] & 0x3F));
}
// 4 bytes: reject overlong
else if (len >= 4 &&
(((c0 == 0xF0 && s[1] >= 0x90 && s[1] <= 0xBF && utf8_is_cont(s[2]) && utf8_is_cont(s[3])) ||
(c0 >= 0xF1 && c0 <= 0xF3 && utf8_is_cont(s[1]) && utf8_is_cont(s[2]) && utf8_is_cont(s[3])) ||
(c0 == 0xF4 && s[1] >= 0x80 && s[1] <= 0x8F && utf8_is_cont(s[2]) && utf8_is_cont(s[3])))
))
{
if (count != NULL) *count = 4;
return (((c0 & 0x07) << 18) | ((unicode_t)(s[1] & 0x3F) << 12) | ((unicode_t)(s[2] & 0x3F) << 6) | (s[3] & 0x3F));
}
fail:
if (count != NULL) *count = 1;
return unicode_from_raw(s[0]);
}
//-------------------------------------------------------------
// Debug
//-------------------------------------------------------------
#if defined(IC_NO_DEBUG_MSG)
// nothing
#elif !defined(IC_DEBUG_TO_FILE)
ic_private void debug_msg(const char* fmt, ...) {
if (getenv("ISOCLINE_DEBUG")) {
va_list args;
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
}
}
#else
ic_private void debug_msg(const char* fmt, ...) {
static int debug_init;
static const char* debug_fname = "isocline.debug.txt";
// initialize?
if (debug_init==0) {
debug_init = -1;
const char* rdebug = getenv("ISOCLINE_DEBUG");
if (rdebug!=NULL && strcmp(rdebug,"1") == 0) {
FILE* fdbg = fopen(debug_fname, "w");
if (fdbg!=NULL) {
debug_init = 1;
fclose(fdbg);
}
}
}
if (debug_init <= 0) return;
// write debug messages
FILE* fdbg = fopen(debug_fname, "a");
if (fdbg==NULL) return;
va_list args;
va_start(args, fmt);
vfprintf(fdbg, fmt, args);
fclose(fdbg);
va_end(args);
}
#endif
//-------------------------------------------------------------
// Allocation
//-------------------------------------------------------------
ic_private void* mem_malloc(alloc_t* mem, ssize_t sz) {
return mem->malloc(to_size_t(sz));
}
ic_private void* mem_zalloc(alloc_t* mem, ssize_t sz) {
void* p = mem_malloc(mem, sz);
if (p != NULL) memset(p, 0, to_size_t(sz));
return p;
}
ic_private void* mem_realloc(alloc_t* mem, void* p, ssize_t newsz) {
return mem->realloc(p, to_size_t(newsz));
}
ic_private void mem_free(alloc_t* mem, const void* p) {
mem->free((void*)p);
}
ic_private char* mem_strdup(alloc_t* mem, const char* s) {
if (s==NULL) return NULL;
ssize_t n = ic_strlen(s);
char* p = mem_malloc_tp_n(mem, char, n+1);
if (p == NULL) return NULL;
ic_memcpy(p, s, n+1);
return p;
}
ic_private char* mem_strndup(alloc_t* mem, const char* s, ssize_t n) {
if (s==NULL || n < 0) return NULL;
char* p = mem_malloc_tp_n(mem, char, n+1);
if (p == NULL) return NULL;
ssize_t i;
for (i = 0; i < n && s[i] != 0; i++) {
p[i] = s[i];
}
assert(i <= n);
p[i] = 0;
return p;
}

187
bin/isocline/src/common.h Normal file

@ -0,0 +1,187 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#pragma once
#ifndef IC_COMMON_H
#define IC_COMMON_H
//-------------------------------------------------------------
// Headers and defines
//-------------------------------------------------------------
#include <sys/types.h> // ssize_t
#include <limits.h>
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <assert.h>
#include "../include/isocline.h" // ic_malloc_fun_t, ic_color_t etc.
# ifdef __cplusplus
# define ic_extern_c extern "C"
# else
# define ic_extern_c
# endif
#if defined(IC_SEPARATE_OBJS)
# define ic_public ic_extern_c
# if defined(__GNUC__) // includes clang and icc
# define ic_private __attribute__((visibility("hidden")))
# else
# define ic_private
# endif
#else
# define ic_private static
# define ic_public ic_extern_c
#endif
#define ic_unused(x) (void)(x)
//-------------------------------------------------------------
// ssize_t
//-------------------------------------------------------------
#if defined(_MSC_VER)
typedef intptr_t ssize_t;
#endif
#define ssizeof(tp) (ssize_t)(sizeof(tp))
static inline size_t to_size_t(ssize_t sz) { return (sz >= 0 ? (size_t)sz : 0); }
static inline ssize_t to_ssize_t(size_t sz) { return (sz <= SIZE_MAX/2 ? (ssize_t)sz : 0); }
ic_private void ic_memmove(void* dest, const void* src, ssize_t n);
ic_private void ic_memcpy(void* dest, const void* src, ssize_t n);
ic_private void ic_memset(void* dest, uint8_t value, ssize_t n);
ic_private bool ic_memnmove(void* dest, ssize_t dest_size, const void* src, ssize_t n);
ic_private ssize_t ic_strlen(const char* s);
ic_private bool ic_strcpy(char* dest, ssize_t dest_size /* including 0 */, const char* src);
ic_private bool ic_strncpy(char* dest, ssize_t dest_size /* including 0 */, const char* src, ssize_t n);
ic_private bool ic_contains(const char* big, const char* s);
ic_private bool ic_icontains(const char* big, const char* s);
ic_private char ic_tolower(char c);
ic_private void ic_str_tolower(char* s);
ic_private int ic_stricmp(const char* s1, const char* s2);
ic_private int ic_strnicmp(const char* s1, const char* s2, ssize_t n);
//---------------------------------------------------------------------
// Unicode
//
// We use "qutf-8" (quite like utf-8) encoding and decoding.
// Internally we always use valid utf-8. If we encounter invalid
// utf-8 bytes (or bytes >= 0x80 from any other encoding) we encode
// these as special code points in the "raw plane" (0xEE000 - 0xEE0FF).
// When decoding we are then able to restore such raw bytes as-is.
// See <https://github.com/koka-lang/koka/blob/master/kklib/include/kklib/string.h>
//---------------------------------------------------------------------
typedef uint32_t unicode_t;
ic_private void unicode_to_qutf8(unicode_t u, uint8_t buf[5]);
ic_private unicode_t unicode_from_qutf8(const uint8_t* s, ssize_t len, ssize_t* nread); // validating
ic_private unicode_t unicode_from_raw(uint8_t c);
ic_private bool unicode_is_raw(unicode_t u, uint8_t* c);
ic_private bool utf8_is_cont(uint8_t c);
//-------------------------------------------------------------
// Colors
//-------------------------------------------------------------
// A color is either RGB or an ANSI code.
// (RGB colors have bit 24 set to distinguish them from the ANSI color palette colors.)
// (Isocline will automatically convert from RGB on terminals that do not support full colors)
typedef uint32_t ic_color_t;
// Create a color from a 24-bit color value.
ic_private ic_color_t ic_rgb(uint32_t hex);
// Create a color from a 8-bit red/green/blue components.
// The value of each component is capped between 0 and 255.
ic_private ic_color_t ic_rgbx(ssize_t r, ssize_t g, ssize_t b);
#define IC_COLOR_NONE (0)
#define IC_RGB(rgb) (0x1000000 | (uint32_t)(rgb)) // ic_rgb(rgb) // define to it can be used as a constant
// ANSI colors.
// The actual colors used is usually determined by the terminal theme
// See <https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit>
#define IC_ANSI_BLACK (30)
#define IC_ANSI_MAROON (31)
#define IC_ANSI_GREEN (32)
#define IC_ANSI_OLIVE (33)
#define IC_ANSI_NAVY (34)
#define IC_ANSI_PURPLE (35)
#define IC_ANSI_TEAL (36)
#define IC_ANSI_SILVER (37)
#define IC_ANSI_DEFAULT (39)
#define IC_ANSI_GRAY (90)
#define IC_ANSI_RED (91)
#define IC_ANSI_LIME (92)
#define IC_ANSI_YELLOW (93)
#define IC_ANSI_BLUE (94)
#define IC_ANSI_FUCHSIA (95)
#define IC_ANSI_AQUA (96)
#define IC_ANSI_WHITE (97)
#define IC_ANSI_DARKGRAY IC_ANSI_GRAY
#define IC_ANSI_LIGHTGRAY IC_ANSI_SILVER
#define IC_ANSI_MAGENTA IC_ANSI_FUCHSIA
#define IC_ANSI_CYAN IC_ANSI_AQUA
//-------------------------------------------------------------
// Debug
//-------------------------------------------------------------
#if defined(IC_NO_DEBUG_MSG)
#define debug_msg(fmt,...) (void)(0)
#else
ic_private void debug_msg( const char* fmt, ... );
#endif
//-------------------------------------------------------------
// Abstract environment
//-------------------------------------------------------------
struct ic_env_s;
typedef struct ic_env_s ic_env_t;
//-------------------------------------------------------------
// Allocation
//-------------------------------------------------------------
typedef struct alloc_s {
ic_malloc_fun_t* malloc;
ic_realloc_fun_t* realloc;
ic_free_fun_t* free;
} alloc_t;
ic_private void* mem_malloc( alloc_t* mem, ssize_t sz );
ic_private void* mem_zalloc( alloc_t* mem, ssize_t sz );
ic_private void* mem_realloc( alloc_t* mem, void* p, ssize_t newsz );
ic_private void mem_free( alloc_t* mem, const void* p );
ic_private char* mem_strdup( alloc_t* mem, const char* s);
ic_private char* mem_strndup( alloc_t* mem, const char* s, ssize_t n);
#define mem_zalloc_tp(mem,tp) (tp*)mem_zalloc(mem,ssizeof(tp))
#define mem_malloc_tp_n(mem,tp,n) (tp*)mem_malloc(mem,(n)*ssizeof(tp))
#define mem_zalloc_tp_n(mem,tp,n) (tp*)mem_zalloc(mem,(n)*ssizeof(tp))
#define mem_realloc_tp(mem,tp,p,n) (tp*)mem_realloc(mem,p,(n)*ssizeof(tp))
#endif // IC_COMMON_H

@ -0,0 +1,675 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#include "../include/isocline.h"
#include "common.h"
#include "env.h"
#include "stringbuf.h"
#include "completions.h"
//-------------------------------------------------------------
// Word completion
//-------------------------------------------------------------
// free variables for word completion
typedef struct word_closure_s {
long delete_before_adjust;
void* prev_env;
ic_completion_fun_t* prev_complete;
} word_closure_t;
// word completion callback
static bool token_add_completion_ex(ic_env_t* env, void* closure, const char* replacement, const char* display, const char* help, long delete_before, long delete_after) {
word_closure_t* wenv = (word_closure_t*)(closure);
// call the previous completer with an adjusted delete-before
return (*wenv->prev_complete)(env, wenv->prev_env, replacement, display, help, wenv->delete_before_adjust + delete_before, delete_after);
}
ic_public void ic_complete_word(ic_completion_env_t* cenv, const char* prefix, ic_completer_fun_t* fun,
ic_is_char_class_fun_t* is_word_char)
{
if (is_word_char == NULL) is_word_char = &ic_char_is_nonseparator;
ssize_t len = ic_strlen(prefix);
ssize_t pos = len; // will be start of the 'word' (excluding a potential start quote)
while (pos > 0) {
// go back one code point
ssize_t ofs = str_prev_ofs(prefix, pos, NULL);
if (ofs <= 0) break;
if (!(*is_word_char)(prefix + (pos - ofs), (long)ofs)) {
break;
}
pos -= ofs;
}
if (pos < 0) { pos = 0; }
// stop if empty word
// if (len == pos) return;
// set up the closure
word_closure_t wenv;
wenv.delete_before_adjust = (long)(len - pos);
wenv.prev_complete = cenv->complete;
wenv.prev_env = cenv->env;
cenv->complete = &token_add_completion_ex;
cenv->closure = &wenv;
// and call the user completion routine
(*fun)(cenv, prefix + pos);
// restore the original environment
cenv->complete = wenv.prev_complete;
cenv->closure = wenv.prev_env;
}
//-------------------------------------------------------------
// Quoted word completion (with escape characters)
//-------------------------------------------------------------
// free variables for word completion
typedef struct qword_closure_s {
char escape_char;
char quote;
long delete_before_adjust;
stringbuf_t* sbuf;
void* prev_env;
ic_is_char_class_fun_t* is_word_char;
ic_completion_fun_t* prev_complete;
} qword_closure_t;
// word completion callback
static bool qword_add_completion_ex(ic_env_t* env, void* closure, const char* replacement, const char* display, const char* help,
long delete_before, long delete_after) {
qword_closure_t* wenv = (qword_closure_t*)(closure);
sbuf_replace( wenv->sbuf, replacement );
if (wenv->quote != 0) {
// add end quote
sbuf_append_char( wenv->sbuf, wenv->quote);
}
else {
// escape non-word characters if it was not quoted
ssize_t pos = 0;
ssize_t next;
while ( (next = sbuf_next_ofs(wenv->sbuf, pos, NULL)) > 0 )
{
if (!(*wenv->is_word_char)(sbuf_string(wenv->sbuf) + pos, (long)next)) { // strchr(wenv->non_word_char, sbuf_char_at( wenv->sbuf, pos )) != NULL) {
sbuf_insert_char_at( wenv->sbuf, wenv->escape_char, pos);
pos++;
}
pos += next;
}
}
// and call the previous completion function
return (*wenv->prev_complete)( env, wenv->prev_env, sbuf_string(wenv->sbuf), display, help, wenv->delete_before_adjust + delete_before, delete_after );
}
ic_public void ic_complete_qword( ic_completion_env_t* cenv, const char* prefix, ic_completer_fun_t* fun, ic_is_char_class_fun_t* is_word_char ) {
ic_complete_qword_ex( cenv, prefix, fun, is_word_char, '\\', NULL);
}
ic_public void ic_complete_qword_ex( ic_completion_env_t* cenv, const char* prefix, ic_completer_fun_t* fun,
ic_is_char_class_fun_t* is_word_char, char escape_char, const char* quote_chars ) {
if (is_word_char == NULL) is_word_char = &ic_char_is_nonseparator ;
if (quote_chars == NULL) quote_chars = "'\"";
ssize_t len = ic_strlen(prefix);
ssize_t pos; // will be start of the 'word' (excluding a potential start quote)
char quote = 0;
ssize_t quote_len = 0;
// 1. look for a starting quote
if (quote_chars[0] != 0) {
// we go forward and count all quotes; if it is uneven, we need to complete quoted.
ssize_t qpos_open = -1;
ssize_t qpos_close = -1;
ssize_t qcount = 0;
pos = 0;
while(pos < len) {
if (prefix[pos] == escape_char && prefix[pos+1] != 0 &&
!(*is_word_char)(prefix + pos + 1, 1)) // strchr(non_word_char, prefix[pos+1]) != NULL
{
pos++; // skip escape and next char
}
else if (qcount % 2 == 0 && strchr(quote_chars, prefix[pos]) != NULL) {
// open quote
qpos_open = pos;
quote = prefix[pos];
qcount++;
}
else if (qcount % 2 == 1 && prefix[pos] == quote) {
// close quote
qpos_close = pos;
qcount++;
}
else if (!(*is_word_char)(prefix + pos, 1)) { // strchr(non_word_char, prefix[pos]) != NULL) {
qpos_close = -1;
}
ssize_t ofs = str_next_ofs( prefix, len, pos, NULL );
if (ofs <= 0) break;
pos += ofs;
}
if ((qcount % 2 == 0 && qpos_close >= 0) || // if the last quote is only followed by word chars, we still complete it
(qcount % 2 == 1)) // opening quote found
{
quote_len = (len - qpos_open - 1);
pos = qpos_open + 1; // pos points to the word start just after the quote.
}
else {
quote = 0;
}
}
// 2. if we did not find a quoted word, look for non-word-chars
if (quote == 0) {
pos = len;
while(pos > 0) {
// go back one code point
ssize_t ofs = str_prev_ofs(prefix, pos, NULL );
if (ofs <= 0) break;
if (!(*is_word_char)(prefix + (pos - ofs), (long)ofs)) { // strchr(non_word_char, prefix[pos - ofs]) != NULL) {
// non word char, break if it is not escaped
if (pos <= ofs || prefix[pos - ofs - 1] != escape_char) break;
// otherwise go on
pos--; // skip escaped char
}
pos -= ofs;
}
}
// stop if empty word
// if (len == pos) return;
// allocate new unescaped word prefix
char* word = mem_strndup( cenv->env->mem, prefix + pos, (quote==0 ? len - pos : quote_len));
if (word == NULL) return;
if (quote == 0) {
// unescape prefix
ssize_t wlen = len - pos;
ssize_t wpos = 0;
while (wpos < wlen) {
ssize_t ofs = str_next_ofs(word, wlen, wpos, NULL);
if (ofs <= 0) break;
if (word[wpos] == escape_char && word[wpos+1] != 0 &&
!(*is_word_char)(word + wpos + 1, (long)ofs)) // strchr(non_word_char, word[wpos+1]) != NULL) {
{
ic_memmove(word + wpos, word + wpos + 1, wlen - wpos /* including 0 */);
}
wpos += ofs;
}
}
#ifdef _WIN32
else {
// remove inner quote: "c:\Program Files\"Win
ssize_t wlen = len - pos;
ssize_t wpos = 0;
while (wpos < wlen) {
ssize_t ofs = str_next_ofs(word, wlen, wpos, NULL);
if (ofs <= 0) break;
if (word[wpos] == escape_char && word[wpos+1] == quote) {
word[wpos+1] = escape_char;
ic_memmove(word + wpos, word + wpos + 1, wlen - wpos /* including 0 */);
}
wpos += ofs;
}
}
#endif
// set up the closure
qword_closure_t wenv;
wenv.quote = quote;
wenv.is_word_char = is_word_char;
wenv.escape_char = escape_char;
wenv.delete_before_adjust = (long)(len - pos);
wenv.prev_complete = cenv->complete;
wenv.prev_env = cenv->env;
wenv.sbuf = sbuf_new(cenv->env->mem);
if (wenv.sbuf == NULL) { mem_free(cenv->env->mem, word); return; }
cenv->complete = &qword_add_completion_ex;
cenv->closure = &wenv;
// and call the user completion routine
(*fun)( cenv, word );
// restore the original environment
cenv->complete = wenv.prev_complete;
cenv->closure = wenv.prev_env;
sbuf_free(wenv.sbuf);
mem_free(cenv->env->mem, word);
}
//-------------------------------------------------------------
// Complete file names
// Listing files
//-------------------------------------------------------------
#include <stdlib.h>
typedef enum file_type_e {
// must follow BSD style LSCOLORS order
FT_DEFAULT = 0,
FT_DIR,
FT_SYM,
FT_SOCK,
FT_PIPE,
FT_BLOCK,
FT_CHAR,
FT_SETUID,
FT_SETGID,
FT_DIR_OW_STICKY,
FT_DIR_OW,
FT_DIR_STICKY,
FT_EXE,
FT_LAST
} file_type_t;
static int cli_color; // 1 enabled, 0 not initialized, -1 disabled
static const char* lscolors = "exfxcxdxbxegedabagacad"; // default BSD setting
static const char* ls_colors;
static const char* ls_colors_names[] = { "no=","di=","ln=","so=","pi=","bd=","cd=","su=","sg=","tw=","ow=","st=","ex=", NULL };
static bool ls_colors_init(void) {
if (cli_color != 0) return (cli_color >= 1);
// colors enabled?
const char* s = getenv("CLICOLOR");
if (s==NULL || (strcmp(s, "1")!=0 && strcmp(s, "") != 0)) {
cli_color = -1;
return false;
}
cli_color = 1;
s = getenv("LS_COLORS");
if (s != NULL) { ls_colors = s; }
s = getenv("LSCOLORS");
if (s != NULL) { lscolors = s; }
return true;
}
static bool ls_valid_esc(ssize_t c) {
return ((c==0 || c==1 || c==4 || c==7 || c==22 || c==24 || c==27) ||
(c >= 30 && c <= 37) || (c >= 40 && c <= 47) ||
(c >= 90 && c <= 97) || (c >= 100 && c <= 107));
}
static bool ls_colors_from_key(stringbuf_t* sb, const char* key) {
// find key
ssize_t keylen = ic_strlen(key);
if (keylen <= 0) return false;
const char* p = strstr(ls_colors, key);
if (p == NULL) return false;
p += keylen;
if (key[keylen-1] != '=') {
if (*p != '=') return false;
p++;
}
ssize_t len = 0;
while (p[len] != 0 && p[len] != ':') {
len++;
}
if (len <= 0) return false;
sbuf_append(sb, "[ansi-sgr=\"" );
sbuf_append_n(sb, p, len );
sbuf_append(sb, "\"]");
return true;
}
static int ls_colors_from_char(char c) {
if (c >= 'a' && c <= 'h') { return (c - 'a'); }
else if (c >= 'A' && c <= 'H') { return (c - 'A') + 8; }
else if (c == 'x') { return 256; }
else return 256; // default
}
static bool ls_colors_append(stringbuf_t* sb, file_type_t ft, const char* ext) {
if (!ls_colors_init()) return false;
if (ls_colors != NULL) {
// GNU style
if (ft == FT_DEFAULT && ext != NULL) {
// first try extension match
if (ls_colors_from_key(sb, ext)) return true;
}
if (ft >= FT_DEFAULT && ft < FT_LAST) {
// then a filetype match
const char* key = ls_colors_names[ft];
if (ls_colors_from_key(sb, key)) return true;
}
}
else if (lscolors != NULL) {
// BSD style
char fg = 'x';
char bg = 'x';
if (ic_strlen(lscolors) > (2*(ssize_t)ft)+1) {
fg = lscolors[2*ft];
bg = lscolors[2*ft + 1];
}
sbuf_appendf(sb, "[ansi-color=%d ansi-bgcolor=%d]", ls_colors_from_char(fg), ls_colors_from_char(bg) );
return true;
}
return false;
}
static void ls_colorize(bool no_lscolor, stringbuf_t* sb, file_type_t ft, const char* name, const char* ext, char dirsep) {
bool close = (no_lscolor ? false : ls_colors_append( sb, ft, ext));
sbuf_append(sb, "[!pre]" );
sbuf_append(sb, name);
if (dirsep != 0) sbuf_append_char(sb, dirsep);
sbuf_append(sb,"[/pre]" );
if (close) { sbuf_append(sb, "[/]"); }
}
#if defined(_WIN32)
#include <io.h>
#include <sys/stat.h>
static bool os_is_dir(const char* cpath) {
struct _stat64 st = { 0 };
_stat64(cpath, &st);
return ((st.st_mode & _S_IFDIR) != 0);
}
static file_type_t os_get_filetype(const char* cpath) {
struct _stat64 st = { 0 };
_stat64(cpath, &st);
if (((st.st_mode) & _S_IFDIR) != 0) return FT_DIR;
if (((st.st_mode) & _S_IFCHR) != 0) return FT_CHAR;
if (((st.st_mode) & _S_IFIFO) != 0) return FT_PIPE;
if (((st.st_mode) & _S_IEXEC) != 0) return FT_EXE;
return FT_DEFAULT;
}
#define dir_cursor intptr_t
#define dir_entry struct __finddata64_t
static bool os_findfirst(alloc_t* mem, const char* path, dir_cursor* d, dir_entry* entry) {
stringbuf_t* spath = sbuf_new(mem);
if (spath == NULL) return false;
sbuf_append(spath, path);
sbuf_append(spath, "\\*");
*d = _findfirsti64(sbuf_string(spath), entry);
mem_free(mem,spath);
return (*d != -1);
}
static bool os_findnext(dir_cursor d, dir_entry* entry) {
return (_findnexti64(d, entry) == 0);
}
static void os_findclose(dir_cursor d) {
_findclose(d);
}
static const char* os_direntry_name(dir_entry* entry) {
return entry->name;
}
static bool os_path_is_absolute( const char* path ) {
if (path != NULL && path[0] != 0 && path[1] == ':' && (path[2] == '\\' || path[2] == '/' || path[2] == 0)) {
char drive = path[0];
return ((drive >= 'A' && drive <= 'Z') || (drive >= 'a' && drive <= 'z'));
}
else return false;
}
ic_private char ic_dirsep(void) {
return '\\';
}
#else
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
static bool os_is_dir(const char* cpath) {
struct stat st;
memset(&st, 0, sizeof(st));
stat(cpath, &st);
return (S_ISDIR(st.st_mode));
}
static file_type_t os_get_filetype(const char* cpath) {
struct stat st;
memset(&st, 0, sizeof(st));
lstat(cpath, &st);
switch ((st.st_mode)&S_IFMT) {
case S_IFSOCK: return FT_SOCK;
case S_IFLNK: {
return FT_SYM;
}
case S_IFIFO: return FT_PIPE;
case S_IFCHR: return FT_CHAR;
case S_IFBLK: return FT_BLOCK;
case S_IFDIR: {
if ((st.st_mode & S_ISUID) != 0) return FT_SETUID;
if ((st.st_mode & S_ISGID) != 0) return FT_SETGID;
if ((st.st_mode & S_IWGRP) != 0 && (st.st_mode & S_ISVTX) != 0) return FT_DIR_OW_STICKY;
if ((st.st_mode & S_IWGRP)) return FT_DIR_OW;
if ((st.st_mode & S_ISVTX)) return FT_DIR_STICKY;
return FT_DIR;
}
case S_IFREG:
default: {
if ((st.st_mode & S_IXUSR) != 0) return FT_EXE;
return FT_DEFAULT;
}
}
}
#define dir_cursor DIR*
#define dir_entry struct dirent*
static bool os_findnext(dir_cursor d, dir_entry* entry) {
*entry = readdir(d);
return (*entry != NULL);
}
static bool os_findfirst(alloc_t* mem, const char* cpath, dir_cursor* d, dir_entry* entry) {
ic_unused(mem);
*d = opendir(cpath);
if (*d == NULL) {
return false;
}
else {
return os_findnext(*d, entry);
}
}
static void os_findclose(dir_cursor d) {
closedir(d);
}
static const char* os_direntry_name(dir_entry* entry) {
return (*entry)->d_name;
}
static bool os_path_is_absolute( const char* path ) {
return (path != NULL && path[0] == '/');
}
ic_private char ic_dirsep(void) {
return '/';
}
#endif
//-------------------------------------------------------------
// File completion
//-------------------------------------------------------------
static bool ends_with_n(const char* name, ssize_t name_len, const char* ending, ssize_t len) {
if (name_len < len) return false;
if (ending == NULL || len <= 0) return true;
for (ssize_t i = 1; i <= len; i++) {
char c1 = name[name_len - i];
char c2 = ending[len - i];
#ifdef _WIN32
if (ic_tolower(c1) != ic_tolower(c2)) return false;
#else
if (c1 != c2) return false;
#endif
}
return true;
}
static bool match_extension(const char* name, const char* extensions) {
if (extensions == NULL || extensions[0] == 0) return true;
if (name == NULL) return false;
ssize_t name_len = ic_strlen(name);
ssize_t len = ic_strlen(extensions);
ssize_t cur = 0;
//debug_msg("match extensions: %s ~ %s", name, extensions);
for (ssize_t end = 0; end <= len; end++) {
if (extensions[end] == ';' || extensions[end] == 0) {
if (ends_with_n(name, name_len, extensions+cur, (end - cur))) {
return true;
}
cur = end+1;
}
}
return false;
}
static bool filename_complete_indir( ic_completion_env_t* cenv, stringbuf_t* dir,
stringbuf_t* dir_prefix, stringbuf_t* display,
const char* base_prefix,
char dir_sep, const char* extensions )
{
dir_cursor d = 0;
dir_entry entry;
bool cont = true;
if (os_findfirst(cenv->env->mem, sbuf_string(dir), &d, &entry)) {
do {
const char* name = os_direntry_name(&entry);
if (name != NULL && strcmp(name, ".") != 0 && strcmp(name, "..") != 0 &&
ic_istarts_with(name, base_prefix))
{
// possible match, first check if it is a directory
file_type_t ft;
bool isdir;
const ssize_t plen = sbuf_len(dir_prefix);
sbuf_append(dir_prefix, name);
{ // check directory and potentially add a dirsep to the dir_prefix
const ssize_t dlen = sbuf_len(dir);
sbuf_append_char(dir,ic_dirsep());
sbuf_append(dir,name);
ft = os_get_filetype(sbuf_string(dir));
isdir = os_is_dir(sbuf_string(dir));
if (isdir && dir_sep != 0) {
sbuf_append_char(dir_prefix,dir_sep);
}
sbuf_delete_from(dir,dlen); // restore dir
}
if (isdir || match_extension(name, extensions)) {
// add completion
sbuf_clear(display);
ls_colorize(cenv->env->no_lscolors, display, ft, name, NULL, (isdir ? dir_sep : 0));
cont = ic_add_completion_ex(cenv, sbuf_string(dir_prefix), sbuf_string(display), NULL);
}
sbuf_delete_from( dir_prefix, plen ); // restore dir_prefix
}
} while (cont && os_findnext(d, &entry));
os_findclose(d);
}
return cont;
}
typedef struct filename_closure_s {
const char* roots;
const char* extensions;
char dir_sep;
} filename_closure_t;
static void filename_completer( ic_completion_env_t* cenv, const char* prefix ) {
if (prefix == NULL) return;
filename_closure_t* fclosure = (filename_closure_t*)cenv->arg;
stringbuf_t* root_dir = sbuf_new(cenv->env->mem);
stringbuf_t* dir_prefix = sbuf_new(cenv->env->mem);
stringbuf_t* display = sbuf_new(cenv->env->mem);
if (root_dir!=NULL && dir_prefix != NULL && display != NULL)
{
// split prefix in dir_prefix / base.
const char* base = strrchr(prefix,'/');
#ifdef _WIN32
const char* base2 = strrchr(prefix,'\\');
if (base == NULL || base2 > base) base = base2;
#endif
if (base != NULL) {
base++;
sbuf_append_n(dir_prefix, prefix, base - prefix ); // includes dir separator
}
// absolute path
if (os_path_is_absolute(prefix)) {
// do not use roots but try to complete directly
if (base != NULL) {
sbuf_append_n( root_dir, prefix, (base - prefix)); // include dir separator
}
filename_complete_indir( cenv, root_dir, dir_prefix, display,
(base != NULL ? base : prefix),
fclosure->dir_sep, fclosure->extensions );
}
else {
// relative path, complete with respect to every root.
const char* next;
const char* root = fclosure->roots;
while ( root != NULL ) {
// create full root in `root_dir`
sbuf_clear(root_dir);
next = strchr(root,';');
if (next == NULL) {
sbuf_append( root_dir, root );
root = NULL;
}
else {
sbuf_append_n( root_dir, root, next - root );
root = next + 1;
}
sbuf_append_char( root_dir, ic_dirsep());
// add the dir_prefix to the root
if (base != NULL) {
sbuf_append_n( root_dir, prefix, (base - prefix) - 1);
}
// and complete in this directory
filename_complete_indir( cenv, root_dir, dir_prefix, display,
(base != NULL ? base : prefix),
fclosure->dir_sep, fclosure->extensions);
}
}
}
sbuf_free(display);
sbuf_free(root_dir);
sbuf_free(dir_prefix);
}
ic_public void ic_complete_filename( ic_completion_env_t* cenv, const char* prefix, char dir_sep, const char* roots, const char* extensions ) {
if (roots == NULL) roots = ".";
if (extensions == NULL) extensions = "";
if (dir_sep == 0) dir_sep = ic_dirsep();
filename_closure_t fclosure;
fclosure.dir_sep = dir_sep;
fclosure.roots = roots;
fclosure.extensions = extensions;
cenv->arg = &fclosure;
ic_complete_qword_ex( cenv, prefix, &filename_completer, &ic_char_is_filename_letter, '\\', "'\"");
}

@ -0,0 +1,326 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "../include/isocline.h"
#include "common.h"
#include "env.h"
#include "stringbuf.h"
#include "completions.h"
//-------------------------------------------------------------
// Completions
//-------------------------------------------------------------
typedef struct completion_s {
const char* replacement;
const char* display;
const char* help;
ssize_t delete_before;
ssize_t delete_after;
} completion_t;
struct completions_s {
ic_completer_fun_t* completer;
void* completer_arg;
ssize_t completer_max;
ssize_t count;
ssize_t len;
completion_t* elems;
alloc_t* mem;
};
static void default_filename_completer( ic_completion_env_t* cenv, const char* prefix );
ic_private completions_t* completions_new(alloc_t* mem) {
completions_t* cms = mem_zalloc_tp(mem, completions_t);
if (cms == NULL) return NULL;
cms->mem = mem;
cms->completer = &default_filename_completer;
return cms;
}
ic_private void completions_free(completions_t* cms) {
if (cms == NULL) return;
completions_clear(cms);
if (cms->elems != NULL) {
mem_free(cms->mem, cms->elems);
cms->elems = NULL;
cms->count = 0;
cms->len = 0;
}
mem_free(cms->mem, cms); // free ourselves
}
ic_private void completions_clear(completions_t* cms) {
while (cms->count > 0) {
completion_t* cm = cms->elems + cms->count - 1;
mem_free( cms->mem, cm->display);
mem_free( cms->mem, cm->replacement);
mem_free( cms->mem, cm->help);
memset(cm,0,sizeof(*cm));
cms->count--;
}
}
static void completions_push(completions_t* cms, const char* replacement, const char* display, const char* help, ssize_t delete_before, ssize_t delete_after)
{
if (cms->count >= cms->len) {
ssize_t newlen = (cms->len <= 0 ? 32 : cms->len*2);
completion_t* newelems = mem_realloc_tp(cms->mem, completion_t, cms->elems, newlen );
if (newelems == NULL) return;
cms->elems = newelems;
cms->len = newlen;
}
assert(cms->count < cms->len);
completion_t* cm = cms->elems + cms->count;
cm->replacement = mem_strdup(cms->mem,replacement);
cm->display = mem_strdup(cms->mem,display);
cm->help = mem_strdup(cms->mem,help);
cm->delete_before = delete_before;
cm->delete_after = delete_after;
cms->count++;
}
ic_private ssize_t completions_count(completions_t* cms) {
return cms->count;
}
static bool completions_contains(completions_t* cms, const char* replacement) {
for( ssize_t i = 0; i < cms->count; i++ ) {
const completion_t* c = cms->elems + i;
if (strcmp(replacement,c->replacement) == 0) { return true; }
}
return false;
}
ic_private bool completions_add(completions_t* cms, const char* replacement, const char* display, const char* help, ssize_t delete_before, ssize_t delete_after) {
if (cms->completer_max <= 0) return false;
cms->completer_max--;
//debug_msg("completion: add: %d,%d, %s\n", delete_before, delete_after, replacement);
if (!completions_contains(cms,replacement)) {
completions_push(cms, replacement, display, help, delete_before, delete_after);
}
return true;
}
static completion_t* completions_get(completions_t* cms, ssize_t index) {
if (index < 0 || cms->count <= 0 || index >= cms->count) return NULL;
return &cms->elems[index];
}
ic_private const char* completions_get_display( completions_t* cms, ssize_t index, const char** help ) {
if (help != NULL) { *help = NULL; }
completion_t* cm = completions_get(cms, index);
if (cm == NULL) return NULL;
if (help != NULL) { *help = cm->help; }
return (cm->display != NULL ? cm->display : cm->replacement);
}
ic_private const char* completions_get_help( completions_t* cms, ssize_t index ) {
completion_t* cm = completions_get(cms, index);
if (cm == NULL) return NULL;
return cm->help;
}
ic_private const char* completions_get_hint(completions_t* cms, ssize_t index, const char** help) {
if (help != NULL) { *help = NULL; }
completion_t* cm = completions_get(cms, index);
if (cm == NULL) return NULL;
ssize_t len = ic_strlen(cm->replacement);
if (len < cm->delete_before) return NULL;
const char* hint = (cm->replacement + cm->delete_before);
if (*hint == 0 || utf8_is_cont((uint8_t)(*hint))) return NULL; // utf8 boundary?
if (help != NULL) { *help = cm->help; }
return hint;
}
ic_private void completions_set_completer(completions_t* cms, ic_completer_fun_t* completer, void* arg) {
cms->completer = completer;
cms->completer_arg = arg;
}
ic_private void completions_get_completer(completions_t* cms, ic_completer_fun_t** completer, void** arg) {
*completer = cms->completer;
*arg = cms->completer_arg;
}
ic_public void* ic_completion_arg( const ic_completion_env_t* cenv ) {
return (cenv == NULL ? NULL : cenv->env->completions->completer_arg);
}
ic_public bool ic_has_completions( const ic_completion_env_t* cenv ) {
return (cenv == NULL ? false : cenv->env->completions->count > 0);
}
ic_public bool ic_stop_completing( const ic_completion_env_t* cenv) {
return (cenv == NULL ? true : cenv->env->completions->completer_max <= 0);
}
static ssize_t completion_apply( completion_t* cm, stringbuf_t* sbuf, ssize_t pos ) {
if (cm == NULL) return -1;
debug_msg( "completion: apply: %s at %zd\n", cm->replacement, pos);
ssize_t start = pos - cm->delete_before;
if (start < 0) start = 0;
ssize_t n = cm->delete_before + cm->delete_after;
if (ic_strlen(cm->replacement) == n && strncmp(sbuf_string_at(sbuf,start), cm->replacement, to_size_t(n)) == 0) {
// no changes
return -1;
}
else {
sbuf_delete_from_to( sbuf, start, pos + cm->delete_after );
return sbuf_insert_at(sbuf, cm->replacement, start);
}
}
ic_private ssize_t completions_apply( completions_t* cms, ssize_t index, stringbuf_t* sbuf, ssize_t pos ) {
completion_t* cm = completions_get(cms, index);
return completion_apply( cm, sbuf, pos );
}
static int completion_compare(const void* p1, const void* p2) {
if (p1 == NULL || p2 == NULL) return 0;
const completion_t* cm1 = (const completion_t*)p1;
const completion_t* cm2 = (const completion_t*)p2;
return ic_stricmp(cm1->replacement, cm2->replacement);
}
ic_private void completions_sort(completions_t* cms) {
if (cms->count <= 0) return;
qsort(cms->elems, to_size_t(cms->count), sizeof(cms->elems[0]), &completion_compare);
}
#define IC_MAX_PREFIX (256)
// find longest common prefix and complete with that.
ic_private ssize_t completions_apply_longest_prefix(completions_t* cms, stringbuf_t* sbuf, ssize_t pos) {
if (cms->count <= 1) {
return completions_apply(cms,0,sbuf,pos);
}
// set initial prefix to the first entry
completion_t* cm = completions_get(cms, 0);
if (cm == NULL) return -1;
char prefix[IC_MAX_PREFIX+1];
ssize_t delete_before = cm->delete_before;
ic_strncpy( prefix, IC_MAX_PREFIX+1, cm->replacement, IC_MAX_PREFIX );
prefix[IC_MAX_PREFIX] = 0;
// and visit all others to find the longest common prefix
for(ssize_t i = 1; i < cms->count; i++) {
cm = completions_get(cms,i);
if (cm->delete_before != delete_before) { // deletions must match delete_before
prefix[0] = 0;
break;
}
// check if it is still a prefix
const char* r = cm->replacement;
ssize_t j;
for(j = 0; prefix[j] != 0 && r[j] != 0; j++) {
if (prefix[j] != r[j]) break;
}
prefix[j] = 0;
if (j <= 0) break;
}
// check the length
ssize_t len = ic_strlen(prefix);
if (len <= 0 || len < delete_before) return -1;
// we found a prefix :-)
completion_t cprefix;
memset(&cprefix,0,sizeof(cprefix));
cprefix.delete_before = delete_before;
cprefix.replacement = prefix;
ssize_t newpos = completion_apply( &cprefix, sbuf, pos);
if (newpos < 0) return newpos;
// adjust all delete_before for the new replacement
for( ssize_t i = 0; i < cms->count; i++) {
cm = completions_get(cms,i);
cm->delete_before = len;
}
return newpos;
}
//-------------------------------------------------------------
// Completer functions
//-------------------------------------------------------------
ic_public bool ic_add_completions(ic_completion_env_t* cenv, const char* prefix, const char** completions) {
for (const char** pc = completions; *pc != NULL; pc++) {
if (ic_istarts_with(*pc, prefix)) {
if (!ic_add_completion_ex(cenv, *pc, NULL, NULL)) return false;
}
}
return true;
}
ic_public bool ic_add_completion(ic_completion_env_t* cenv, const char* replacement) {
return ic_add_completion_ex(cenv, replacement, NULL, NULL);
}
ic_public bool ic_add_completion_ex( ic_completion_env_t* cenv, const char* replacement, const char* display, const char* help ) {
return ic_add_completion_prim(cenv,replacement,display,help,0,0);
}
ic_public bool ic_add_completion_prim(ic_completion_env_t* cenv, const char* replacement, const char* display, const char* help, long delete_before, long delete_after) {
return (*cenv->complete)(cenv->env, cenv->closure, replacement, display, help, delete_before, delete_after );
}
static bool prim_add_completion(ic_env_t* env, void* funenv, const char* replacement, const char* display, const char* help, long delete_before, long delete_after) {
ic_unused(funenv);
return completions_add(env->completions, replacement, display, help, delete_before, delete_after);
}
ic_public void ic_set_default_completer(ic_completer_fun_t* completer, void* arg) {
ic_env_t* env = ic_get_env(); if (env == NULL) return;
completions_set_completer(env->completions, completer, arg);
}
ic_private ssize_t completions_generate(struct ic_env_s* env, completions_t* cms, const char* input, ssize_t pos, ssize_t max) {
completions_clear(cms);
if (cms->completer == NULL || input == NULL || ic_strlen(input) < pos) return 0;
// set up env
ic_completion_env_t cenv;
cenv.env = env;
cenv.input = input,
cenv.cursor = (long)pos;
cenv.arg = cms->completer_arg;
cenv.complete = &prim_add_completion;
cenv.closure = NULL;
const char* prefix = mem_strndup(cms->mem, input, pos);
cms->completer_max = max;
// and complete
cms->completer(&cenv,prefix);
// restore
mem_free(cms->mem,prefix);
return completions_count(cms);
}
// The default completer is no completion is set
static void default_filename_completer( ic_completion_env_t* cenv, const char* prefix ) {
#ifdef _WIN32
const char sep = '\\';
#else
const char sep = '/';
#endif
ic_complete_filename( cenv, prefix, sep, ".", NULL);
}

@ -0,0 +1,52 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
#pragma once
#ifndef IC_COMPLETIONS_H
#define IC_COMPLETIONS_H
#include "common.h"
#include "stringbuf.h"
//-------------------------------------------------------------
// Completions
//-------------------------------------------------------------
#define IC_MAX_COMPLETIONS_TO_SHOW (1000)
#define IC_MAX_COMPLETIONS_TO_TRY (IC_MAX_COMPLETIONS_TO_SHOW/4)
typedef struct completions_s completions_t;
ic_private completions_t* completions_new(alloc_t* mem);
ic_private void completions_free(completions_t* cms);
ic_private void completions_clear(completions_t* cms);
ic_private bool completions_add(completions_t* cms , const char* replacement, const char* display, const char* help, ssize_t delete_before, ssize_t delete_after);
ic_private ssize_t completions_count(completions_t* cms);
ic_private ssize_t completions_generate(struct ic_env_s* env, completions_t* cms , const char* input, ssize_t pos, ssize_t max);
ic_private void completions_sort(completions_t* cms);
ic_private void completions_set_completer(completions_t* cms, ic_completer_fun_t* completer, void* arg);
ic_private const char* completions_get_display(completions_t* cms , ssize_t index, const char** help);
ic_private const char* completions_get_hint(completions_t* cms, ssize_t index, const char** help);
ic_private void completions_get_completer(completions_t* cms, ic_completer_fun_t** completer, void** arg);
ic_private ssize_t completions_apply(completions_t* cms, ssize_t index, stringbuf_t* sbuf, ssize_t pos);
ic_private ssize_t completions_apply_longest_prefix(completions_t* cms, stringbuf_t* sbuf, ssize_t pos);
//-------------------------------------------------------------
// Completion environment
//-------------------------------------------------------------
typedef bool (ic_completion_fun_t)( ic_env_t* env, void* funenv, const char* replacement, const char* display, const char* help, long delete_before, long delete_after );
struct ic_completion_env_s {
ic_env_t* env; // the isocline environment
const char* input; // current full input
long cursor; // current cursor position
void* arg; // argument given to `ic_set_completer`
void* closure; // free variables for function composition
ic_completion_fun_t* complete; // function that adds a completion
};
#endif // IC_COMPLETIONS_H

1142
bin/isocline/src/editline.c Normal file

File diff suppressed because it is too large Load Diff

@ -0,0 +1,277 @@
/* ----------------------------------------------------------------------------
Copyright (c) 2021, Daan Leijen
This is free software; you can redistribute it and/or modify it
under the terms of the MIT License. A copy of the license can be
found in the "LICENSE" file at the root of this distribution.
-----------------------------------------------------------------------------*/
//-------------------------------------------------------------
// Completion menu: this file is included in editline.c
//-------------------------------------------------------------
// return true if anything changed
static bool edit_complete(ic_env_t* env, editor_t* eb, ssize_t idx) {
editor_start_modify(eb);
ssize_t newpos = completions_apply(env->completions, idx, eb->input, eb->pos);
if (newpos < 0) {
editor_undo_restore(eb,false);
return false;
}
eb->pos = newpos;
edit_refresh(env,eb);
return true;
}
static bool edit_complete_longest_prefix(ic_env_t* env, editor_t* eb ) {
editor_start_modify(eb);
ssize_t newpos = completions_apply_longest_prefix( env->completions, eb->input, eb->pos );
if (newpos < 0) {
editor_undo_restore(eb,false);
return false;
}
eb->pos = newpos;
edit_refresh(env,eb);
return true;
}
ic_private void sbuf_append_tagged( stringbuf_t* sb, const char* tag, const char* content ) {
sbuf_appendf(sb, "[%s]", tag);
sbuf_append(sb,content);
sbuf_append(sb,"[/]");
}
static void editor_append_completion(ic_env_t* env, editor_t* eb, ssize_t idx, ssize_t width, bool numbered, bool selected ) {
const char* help = NULL;
const char* display = completions_get_display(env->completions, idx, &help);
if (display == NULL) return;
if (numbered) {
sbuf_appendf(eb->extra, "[ic-info]%s%zd [/]", (selected ? (tty_is_utf8(env->tty) ? "\xE2\x86\x92" : "*") : " "), 1 + idx);
width -= 3;
}
if (width > 0) {
sbuf_appendf(eb->extra, "[width=\"%zd;left; ;on\"]", width );
}
if (selected) {
sbuf_append(eb->extra, "[ic-emphasis]");
}
sbuf_append(eb->extra, display);
if (selected) { sbuf_append(eb->extra,"[/ic-emphasis]"); }
if (help != NULL) {
sbuf_append(eb->extra, " ");
sbuf_append_tagged(eb->extra, "ic-info", help );
}
if (width > 0) { sbuf_append(eb->extra,"[/width]"); }
}
// 2 and 3 column output up to 80 wide
#define IC_DISPLAY2_MAX 34
#define IC_DISPLAY2_COL (3+IC_DISPLAY2_MAX)
#define IC_DISPLAY2_WIDTH (2*IC_DISPLAY2_COL + 2) // 75
#define IC_DISPLAY3_MAX 21
#define IC_DISPLAY3_COL (3+IC_DISPLAY3_MAX)
#define IC_DISPLAY3_WIDTH (3*IC_DISPLAY3_COL + 2*2) // 76
static void editor_append_completion2(ic_env_t* env, editor_t* eb, ssize_t col_width, ssize_t idx1, ssize_t idx2, ssize_t selected ) {
editor_append_completion(env, eb, idx1, col_width, true, (idx1 == selected) );
sbuf_append( eb->extra, " ");
editor_append_completion(env, eb, idx2, col_width, true, (idx2 == selected) );
}
static void editor_append_completion3(ic_env_t* env, editor_t* eb, ssize_t col_width, ssize_t idx1, ssize_t idx2, ssize_t idx3, ssize_t selected ) {
editor_append_completion(env, eb, idx1, col_width, true, (idx1 == selected) );
sbuf_append( eb->extra, " ");
editor_append_completion(env, eb, idx2, col_width, true, (idx2 == selected));
sbuf_append( eb->extra, " ");
editor_append_completion(env, eb, idx3, col_width, true, (idx3 == selected) );
}
static ssize_t edit_completions_max_width( ic_env_t* env, ssize_t count ) {
ssize_t max_width = 0;
for( ssize_t i = 0; i < count; i++) {
const char* help = NULL;
ssize_t w = bbcode_column_width(env->bbcode, completions_get_display(env->completions, i, &help));
if (help != NULL) {
w += 2 + bbcode_column_width(env->bbcode, help);
}
if (w > max_width) {
max_width = w;
}
}
return max_width;
}
static void edit_completion_menu(ic_env_t* env, editor_t* eb, bool more_available) {
ssize_t count = completions_count(env->completions);
ssize_t count_displayed = count;
assert(count > 1);
ssize_t selected = (env->complete_nopreview ? 0 : -1); // select first or none
ssize_t percolumn = count;
again:
// show first 9 (or 8) completions
sbuf_clear(eb->extra);
ssize_t twidth = term_get_width(env->term) - 1;
ssize_t colwidth;
if (count > 3 && ((colwidth = 3 + edit_completions_max_width(env, 9))*3 + 2*2) < twidth) {
// display as a 3 column block
count_displayed = (count > 9 ? 9 : count);
percolumn = 3;
for (ssize_t rw = 0; rw < percolumn; rw++) {
if (rw > 0) sbuf_append(eb->extra, "\n");
editor_append_completion3(env, eb, colwidth, rw, percolumn+rw, (2*percolumn)+rw, selected);
}
}
else if (count > 4 && ((colwidth = 3 + edit_completions_max_width(env, 8))*2 + 2) < twidth) {
// display as a 2 column block if some entries are too wide for three columns
count_displayed = (count > 8 ? 8 : count);
percolumn = (count_displayed <= 6 ? 3 : 4);
for (ssize_t rw = 0; rw < percolumn; rw++) {
if (rw > 0) sbuf_append(eb->extra, "\n");
editor_append_completion2(env, eb, colwidth, rw, percolumn+rw, selected);
}
}
else {
// display as a list
count_displayed = (count > 9 ? 9 : count);
percolumn = count_displayed;
for (ssize_t i = 0; i < count_displayed; i++) {
if (i > 0) sbuf_append(eb->extra, "\n");
editor_append_completion(env, eb, i, -1, true /* numbered */, selected == i);
}
}
if (count > count_displayed) {
if (more_available) {
sbuf_append(eb->extra, "\n[ic-info](press page-down (or ctrl-j) to see all further completions)[/]");
}
else {
sbuf_appendf(eb->extra, "\n[ic-info](press page-down (or ctrl-j) to see all %zd completions)[/]", count );
}
}
if (!env->complete_nopreview && selected >= 0 && selected <= count_displayed) {
edit_complete(env,eb,selected);
editor_undo_restore(eb,false);
}
else {
edit_refresh(env, eb);
}
// read here; if not a valid key, push it back and return to main event loop
code_t c = tty_read(env->tty);
if (tty_term_resize_event(env->tty)) {
edit_resize(env, eb);
}
sbuf_clear(eb->extra);
// direct selection?
if (c >= '1' && c <= '9') {
ssize_t i = (c - '1');
if (i < count) {
selected = i;
c = KEY_ENTER;
}
}
// process commands
if (c == KEY_DOWN || c == KEY_TAB) {
selected++;
if (selected >= count_displayed) {
//term_beep(env->term);
selected = 0;
}
goto again;
}
else if (c == KEY_UP || c == KEY_SHIFT_TAB) {
selected--;
if (selected < 0) {
selected = count_displayed - 1;
//term_beep(env->term);
}
goto again;
}
else if (c == KEY_F1) {
edit_show_help(env, eb);
goto again;
}
else if (c == KEY_ESC) {
completions_clear(env->completions);
edit_refresh(env,eb);
c = 0; // ignore and return
}
else if (selected >= 0 && (c == KEY_ENTER || c == KEY_RIGHT || c == KEY_END)) /* || c == KEY_TAB*/ {
// select the current entry
assert(selected < count);
c = 0;
edit_complete(env, eb, selected);
if (env->complete_autotab) {
tty_code_pushback(env->tty,KEY_EVENT_AUTOTAB); // immediately try to complete again
}
}
else if (!env->complete_nopreview && !code_is_virt_key(c)) {
// if in preview mode, select the current entry and exit the menu
assert(selected < count);
edit_complete(env, eb, selected);
}
else if ((c == KEY_PAGEDOWN || c == KEY_LINEFEED) && count > 9) {
// show all completions
c = 0;
if (more_available) {
// generate all entries (up to the max (= 1000))
count = completions_generate(env, env->completions, sbuf_string(eb->input), eb->pos, IC_MAX_COMPLETIONS_TO_SHOW);
}
rowcol_t rc;
edit_get_rowcol(env,eb,&rc);
edit_clear(env,eb);
edit_write_prompt(env,eb,0,false);
term_writeln(env->term, "");
for(ssize_t i = 0; i < count; i++) {
const char* display = completions_get_display(env->completions, i, NULL);
if (display != NULL) {
bbcode_println(env->bbcode, display);
}
}
if (count >= IC_MAX_COMPLETIONS_TO_SHOW) {
bbcode_println(env->bbcode, "[ic-info]... and more.[/]");
}
else {
bbcode_printf(env->bbcode, "[ic-info](%zd possible completions)[/]\n", count );
}
for(ssize_t i = 0; i < rc.row+1; i++) {
term_write(env->term, " \n");
}
eb->cur_rows = 0;
edit_refresh(env,eb);
}
else {
edit_refresh(env,eb);
}
// done
completions_clear(env->completions);
if (c != 0) tty_code_pushback(env->tty,c);
}
static void edit_generate_completions(ic_env_t* env, editor_t* eb, bool autotab) {
debug_msg( "edit: complete: %zd: %s\n", eb->pos, sbuf_string(eb->input) );
if (eb->pos < 0) return;
ssize_t count = completions_generate(env, env->completions, sbuf_string(eb->input), eb->pos, IC_MAX_COMPLETIONS_TO_TRY);
bool more_available = (count >= IC_MAX_COMPLETIONS_TO_TRY);
if (count <= 0) {
// no completions
if (!autotab) { term_beep(env->term); }
}
else if (count == 1) {
// complete if only one match
if (edit_complete(env,eb,0 /*idx*/) && env->complete_autotab) {
tty_code_pushback(env->tty,KEY_EVENT_AUTOTAB);
}
}
else {
//term_beep(env->term);
if (!more_available) {
edit_complete_longest_prefix(env,eb);
}
completions_sort(env->completions);
edit_completion_menu( env, eb, more_available);
}
}

Some files were not shown because too many files have changed in this diff Show More