NCURSES Programming HOWTO一书的中的NCURSES库(版本5.3)的源代码
源代码在线查看: configure
# Local configure fragment for ncurses/sysdeps/unix/sysv/linux. nc_given_srcdir=${srcdir}/ncurses NCURSES_MAJOR="`egrep '^NCURSES_MAJOR[ ]*=' $nc_given_srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" NCURSES_MINOR="`egrep '^NCURSES_MINOR[ ]*=' $nc_given_srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" NCURSES_PATCH="`egrep '^NCURSES_PATCH[ ]*=' $nc_given_srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" cf_cv_abi_version=${NCURSES_MAJOR} cf_cv_rel_version=${NCURSES_MAJOR}.${NCURSES_MINOR} # Default to char if [ x${cf_cv_type_of_bool} = x ] then cf_cv_type_of_bool=char fi rm -f ncurses/MKterm.h.awk \ ncurses/codes.c \ ncurses/comp_captab.c \ ncurses/confdefs.h \ ncurses/config.log \ ncurses/curses.h \ ncurses/expanded.c \ ncurses/fallback.c \ ncurses/hashsize.h \ ncurses/init_keytry.h \ ncurses/lib_gen.c \ ncurses/lib_keyname.c \ ncurses/names.c \ ncurses/ncurses_cfg.h \ ncurses/nomacros.h \ ncurses/parametrized.h \ ncurses/term.h \ ncurses/termcap.h \ ncurses/terminfo.5 \ ncurses/termsort.c \ ncurses/unctrl.c \ ncurses/unctrl.h # Protect against being on the right side of a sed subst in config.status. sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g; s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs s%@DEFS@%-DHAVE_CONFIG_H%g s%@NCURSES_MAJOR@%$NCURSES_MAJOR%g s%@NCURSES_MINOR@%$NCURSES_MINOR%g s%@NCURSES_PATCH@%$NCURSES_PATCH%g s%@NCURSES_CONST@%%g s%@NCURSES_XNAMES@%1%g s%@OSPEED_TYPE@%speed_t%g s%@OSPEED_INCLUDES@%#include %g s%@cf_cv_rel_version@%$cf_cv_rel_version%g s%@cf_cv_abi_version@%$cf_cv_abi_version%g s%@cf_cv_builtin_bool@%1%g s%@cf_cv_type_of_bool@%$cf_cv_type_of_bool%g s%@cf_cv_shift_limit@%32%g s%@cf_cv_widec_shift@%8%g s%@cf_cv_typeof_chtype@%long%g s%@cf_cv_1UL@%1UL%g s%@cf_cv_cc_bool_type@%0%g EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. nc_max_sed_cmds=90 # Maximum number of lines to put in a sed script. nc_file=1 # Number of current file. nc_beg=1 # First line for current file. nc_end=$nc_max_sed_cmds # Line after last line for current file. nc_more_lines=: nc_sed_cmds="" while $nc_more_lines; do if test $nc_beg -gt 1; then sed "1,${nc_beg}d; ${nc_end}q" conftest.subs > conftest.s$nc_file else sed "${nc_end}q" conftest.subs > conftest.s$nc_file fi if test ! -s conftest.s$nc_file; then nc_more_lines=false rm -f conftest.s$nc_file else if test -z "$nc_sed_cmds"; then nc_sed_cmds="sed -f conftest.s$nc_file" else nc_sed_cmds="$nc_sed_cmds | sed -f conftest.s$nc_file" fi nc_file=`expr $nc_file + 1` nc_beg=$nc_end nc_end=`expr $nc_end + $nc_max_sed_cmds` fi done if test -z "$nc_sed_cmds"; then nc_sed_cmds=cat fi NC_CONFIG_FILES=${NC_CONFIG_FILES-"ncurses/MKterm.h.awk ncurses/curses.h ncurses/termcap.h ncurses/unctrl.h"} for nc_file in .. $NC_CONFIG_FILES; do if test "x$nc_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$nc_file" in *:*) nc_file_in=`echo "$nc_file"|sed 's%[^:]*:%%'` nc_file=`echo "$nc_file"|sed 's%:.*%%'` ;; *) nc_file_in=`echo "${nc_file}" | sed 's%ncurses%include%'`.in ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. nc_dir=`echo $nc_file|sed 's%/[^/][^/]*$%%'` if test "$nc_dir" != "$nc_file" && test "$nc_dir" != .; then # The file is in a subdirectory. test ! -d "$nc_dir" && mkdir "$nc_dir" nc_dir_suffix="/`echo $nc_dir|sed 's%^\./%%'`" # A "../" for each directory in $nc_dir_suffix. nc_dots=`echo $nc_dir_suffix|sed 's%/[^/]*%../%g'` else nc_dir_suffix= nc_dots= fi case "$nc_given_srcdir" in .) nc_srcdir=. if test -z "$nc_dots"; then nc_top_srcdir=. else nc_top_srcdir=`echo $nc_dots|sed 's%/$%%'`; fi ;; /*) nc_srcdir="$nc_given_srcdir$nc_dir_suffix"; nc_top_srcdir="$nc_given_srcdir" ;; *) # Relative path. nc_srcdir="$nc_dots$nc_given_srcdir$nc_dir_suffix" nc_top_srcdir="$nc_dots$nc_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) NC_INSTALL="$ac_given_INSTALL" ;; *) NC_INSTALL="$nc_dots$ac_given_INSTALL" ;; esac echo creating "$nc_file" rm -f "$nc_file" configure_input="Generated automatically from `echo $nc_file_in|sed 's%.*/%%'` by configure." case "$nc_file" in *Makefile*) nc_comsub="1i\\ # $configure_input" ;; *) nc_comsub= ;; esac nc_file_inputs=`echo $nc_file_in|sed -e "s%^%$nc_given_srcdir/%" -e "s%:% $nc_given_srcdir/%g"` sed -e "$nc_comsub s%@configure_input@%$configure_input%g s%@nc_srcdir@%$nc_srcdir%g s%@nc_top_srcdir@%$nc_top_srcdir%g s%@INSTALL@%$NC_INSTALL%g " $nc_file_inputs | (eval "$nc_sed_cmds") > $nc_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # nc_d sets the value in "#define NAME VALUE" lines. nc_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' nc_dB='\([ ][ ]*\)[^ ]*%\1#\2' nc_dC='\3' nc_dD='%g' # nc_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". nc_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' nc_uB='\([ ]\)%\1#\2define\3' nc_uC=' ' nc_uD='\4%g' # nc_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". nc_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' nc_eB='$%\1#\2define\3' nc_eC=' ' nc_eD='%g' NC_CONFIG_HEADERS="ncurses/ncurses_cfg.h:include/ncurses_cfg.hin" for nc_file in .. $NC_CONFIG_HEADERS; do if test "x$nc_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$nc_file" in *:*) nc_file_in=`echo "$nc_file"|sed 's%[^:]*:%%'` nc_file=`echo "$nc_file"|sed 's%:.*%%'` ;; *) nc_file_in="${nc_file}.in" ;; esac echo creating $nc_file rm -f conftest.frag conftest.in conftest.out nc_file_inputs=`echo $nc_file_in|sed -e "s%^%$nc_given_srcdir/%" -e "s%:% $nc_given_srcdir/%g"` cat $nc_file_inputs > conftest.in rm -f conftest.frag cat >> conftest.frag #define CC_HAS_INLINE_FUNCS 1 #define GCC_NORETURN __attribute__((noreturn)) #define GCC_PRINTF 1 #define GCC_SCANF 1 #define GCC_UNUSED __attribute__((unused)) #define GOOD_SELECT 1 #define HAVE_BUILTIN_H 1 #define HAVE_DIRENT_H 1 #define HAVE_ERRNO 1 #define HAVE_FCNTL_H 1 #define HAVE_FORM_H 1 #define HAVE_GETOPT_H 1 CEOF cat >> conftest.frag #define HAVE_GETTIMEOFDAY 1 #define HAVE_GETTTYNAM 1 #define HAVE_ISASCII 1 #define HAVE_LIBFORM 1 #define HAVE_LIBMENU 1 #define HAVE_LIBPANEL 1 #define HAVE_LIMITS_H 1 #define HAVE_LINK 1 #define HAVE_LOCALE_H 1 #define HAVE_LONG_FILE_NAMES 1 #define HAVE_MEMCCPY 1 #define HAVE_MENU_H 1 #define HAVE_NANOSLEEP 1 #define HAVE_NC_ALLOC_H 1 CEOF cat >> conftest.frag #define HAVE_PANEL_H 1 #define HAVE_POLL 1 #define HAVE_POLL_H 1 #define HAVE_REGEX_H_FUNCS 1 #define HAVE_REMOVE 1 #define HAVE_SELECT 1 #define HAVE_SETBUF 1 #define HAVE_SETBUFFER 1 #define HAVE_SETVBUF 1 #define HAVE_SIGACTION 1 #define HAVE_SIGVEC 1 #define HAVE_SIZECHANGE 1 CEOF cat >> conftest.frag #define HAVE_STRDUP 1 #define HAVE_SYMLINK 1 #define HAVE_SYS_IOCTL_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_SYS_TIMES_H 1 #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_TIME_SELECT 1 #define HAVE_TCGETATTR 1 #define HAVE_TERMIOS_H 1 #define HAVE_TERMIO_H 1 #define HAVE_TIMES 1 #define HAVE_TTYENT_H 1 CEOF cat >> conftest.frag #define HAVE_TYPEINFO 1 #define HAVE_UNISTD_H 1 #define HAVE_VALUES_H 1 #define HAVE_VFSCANF 1 #define HAVE_VSNPRINTF 1 #define HAVE_VSSCANF 1 #define NCURSES_EXT_FUNCS 1 #define NDEBUG 1 #define PURE_TERMINFO 1 #define RETSIGTYPE void #define STDC_HEADERS 1 CEOF cat >> conftest.frag #define SYSTEM_NAME "linux-gnu" #define TYPEOF_CHTYPE long #define USE_DATABASE 1 #define USE_HASHMAP 1 #define USE_LINKS 1 #define NCURSES_NO_PADDING 1 #define USE_SIGWINCH 1 CEOF cat >> conftest.edit /@DEFS@/r conftest.frag /@DEFS@/d CEOF sed -f conftest.edit conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in rm -f conftest.edit conftest.frag rm -f conftest.frag conftest.h echo "/* $nc_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $nc_file conftest.h 2>/dev/null; then echo "$nc_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. nc_dir=`echo $nc_file|sed 's%/[^/][^/]*$%%'` if test "$nc_dir" != "$nc_file" && test "$nc_dir" != .; then # The file is in a subdirectory. test ! -d "$nc_dir" && mkdir "$nc_dir" fi rm -f $nc_file mv conftest.h $nc_file fi fi; done SYS_NAME=`uname -a` if test -z "$SYS_NAME"; then SYS_NAME=unknown;fi NC_AWK=awk BUILD_CC=${BUILD_CC-gcc} NC_CC="${BUILD_CC} -I${nc_given_srcdir}/ncurses -Incurses -I${nc_given_srcdir}/include" NC_CPP="${NC_CC} -E" CF_LIST_MODELS="normal" #WITH_ECHO="yes" #WITH_OVERWRITE="yes" nc_cxx_library="yes" cf_cv_systype="Linux" cf_cv_rel_version="4.2" cf_cv_abi_version="4" cf_cv_do_symlinks="yes" cf_cv_rm_so_locs="no" rm -f headers.sed headers.sh echo creating headers.sh cat >headers.sh #!/bin/sh # This shell script is generated by the 'configure' script. It is invoked in a # subdirectory of the build tree. It generates a sed-script in the parent # directory that is used to adjust includes for header files that reside in a # subdirectory of /usr/include, etc. PRG="" while test \$# != 3 do PRG="\$PRG \$1"; shift done DST=\$1 REF=\$2 SRC=\$3 echo installing \$SRC in \$DST case \$DST in /*/include/*) TMP=\${TMPDIR-/tmp}/\`basename \$SRC\` if test ! -f ../headers.sed ; then END=\`basename \$DST\` for i in \`cat \$REF/../*/headers |fgrep -v "#"\` do NAME=\`basename \$i\` echo "s///" >> ../headers.sed done fi rm -f \$TMP sed -f ../headers.sed \$SRC > \$TMP eval \$PRG \$TMP \$DST rm -f \$TMP ;; *) eval \$PRG \$SRC \$DST ;; esac NC_EOF chmod 0755 headers.sh echo creating ncurses/term.h ${NC_AWK} -f ncurses/MKterm.h.awk ${nc_given_srcdir}/include/Caps > ncurses/term.h sh ${nc_given_srcdir}/include/edit_cfg.sh ncurses/ncurses_cfg.h ncurses/term.h echo creating ncurses/hashsize.h sh ${nc_given_srcdir}/include/MKhashsize.sh ${nc_given_srcdir}/include/Caps > ncurses/hashsize.h echo creating ncurses/parametrized.h sh ${nc_given_srcdir}/include/MKparametrized.sh ${nc_given_srcdir}/include/Caps > ncurses/parametrized.h echo creating ncurses/termsort.c sh ${nc_given_srcdir}/progs/MKtermsort.sh "${NC_AWK}" ${nc_given_srcdir}/include/Caps > ncurses/termsort.c echo creating ncurses/fallback.c sh ${nc_given_srcdir}/ncurses/tinfo/MKfallback.sh > ncurses/fallback.c echo creating ncurses/lib_gen.c sh ${nc_given_srcdir}/ncurses/base/MKlib_gen.sh "${NC_CPP}" "${NC_AWK}" < ncurses/curses.h > ncurses/lib_gen.c echo creating ncurses/nomacros.h sh ${nc_given_srcdir}/ncurses/base/MKlib_gen.sh "${NC_CPP}" "${NC_AWK}" < ncurses/curses.h | fgrep undef > ncurses/nomacros.h echo creating ncurses/expanded.c sh ${nc_given_srcdir}/ncurses/tty/MKexpanded.sh "${NC_CPP}" >ncurses/expanded.c echo creating ncurses/comp_captab.c ${NC_CC} -o make_hash -DMAIN_PROGRAM ${nc_given_srcdir}/ncurses/tinfo/comp_hash.c sh ${nc_given_srcdir}/ncurses/tinfo/MKcaptab.awk "${NC_AWK}" ${nc_given_srcdir}/include/Caps > ncurses/comp_captab.c rm -f make_hash echo creating ncurses/lib_keyname.c ${NC_AWK} -f ${nc_given_srcdir}/ncurses/base/MKkeyname.awk ${nc_given_srcdir}/ncurses/tinfo/keys.list > ncurses/lib_keyname.c echo creating ncurses/names.c and ncurses/codes.c ${NC_AWK} -f ${nc_given_srcdir}/ncurses/tinfo/MKnames.awk ${nc_given_srcdir}/include/Caps cat namehdr boolnames boolfnames numnames numfnames strnames strfnames nameftr >ncurses/names.c cat namehdr boolcodes numcodes strcodes codeftr > ncurses/codes.c rm -f namehdr nameftr codeftr boolnames boolfnames boolcodes numnames numfnames numcodes strnames strfnames strcodes echo creating ncurses/init_keytry.h ${NC_CC} -o make_key ${nc_given_srcdir}/ncurses/tinfo/make_keys.c ./make_key ${nc_given_srcdir}/ncurses/keys.list > ncurses/init_keytry.h rm -f make_key echo creating ncurses/unctrl.c echo | ${NC_AWK} -f ${nc_given_srcdir}/ncurses/base/MKunctrl.awk > ncurses/unctrl.c echo creating ncurses/terminfo.5 sh ${nc_given_srcdir}/man/MKterminfo.sh ${nc_given_srcdir}/man/terminfo.head ${nc_given_srcdir}/include/Caps ${nc_given_srcdir}/man/terminfo.tail > ncurses/terminfo.5