screen-4.9.1/0000775000175000017500000000000014467014300011451 5ustar alexalexscreen-4.9.1/os.h0000664000175000017500000003025014467014146012253 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #include #include #include /* In strict ANSI mode, HP-UX machines define __hpux but not hpux */ #if defined(__hpux) && !defined(hpux) # define hpux #endif #if defined(__bsdi__) || defined(__386BSD__) || defined(_CX_UX) || defined(hpux) || defined(_IBMR2) || defined(linux) # include #endif /* __bsdi__ || __386BSD__ || _CX_UX || hpux || _IBMR2 || linux */ #if !defined(HAVE_LONG_FILE_NAMES) && !defined(NAME_MAX) #define NAME_MAX 14 #endif #ifdef ISC # ifdef ENAMETOOLONG # undef ENAMETOOLONG # endif # ifdef ENOTEMPTY # undef ENOTEMPTY # endif # include # include #endif #ifdef sun # define getpgrp __getpgrp # define exit __exit #endif #ifdef POSIX # include # if defined(__STDC__) # include # endif /* __STDC__ */ #endif /* POSIX */ #ifdef sun # undef getpgrp # undef exit #endif /* sun */ #ifndef linux /* all done in */ extern int errno; #endif /* linux */ #ifndef HAVE_STRERROR /* No macros, please */ #undef strerror #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef USEVARARGS # if defined(__STDC__) # include # define VA_LIST(var) va_list var; # define VA_DOTS ... # define VA_DECL # define VA_START(ap, fmt) va_start(ap, fmt) # define VA_ARGS(ap) ap # define VA_END(ap) va_end(ap) # else # include # define VA_LIST(var) va_list var; # define VA_DOTS va_alist # define VA_DECL va_dcl # define VA_START(ap, fmt) va_start(ap) # define VA_ARGS(ap) ap # define VA_END(ap) va_end(ap) # endif #else # define VA_LIST(var) # define VA_DOTS p1, p2, p3, p4, p5, p6 # define VA_DECL unsigned long VA_DOTS; # define VA_START(ap, fmt) # define VA_ARGS(ap) VA_DOTS # define VA_END(ap) # undef vsnprintf # define vsnprintf xsnprintf #endif #if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX) # include #endif #include #ifdef M_UNIX /* SCO */ # include # include # define ftruncate(fd, s) chsize(fd, s) #endif #ifdef SYSV # define index strchr # define rindex strrchr # define bzero(poi,len) memset(poi,0,len) # define bcmp memcmp # define killpg(pgrp,sig) kill( -(pgrp), sig) #endif #ifndef HAVE_GETCWD # define getcwd(b,l) getwd(b) #endif #ifndef USEBCOPY # ifdef USEMEMMOVE # define bcopy(s,d,len) memmove(d,s,len) # else # ifdef USEMEMCPY # define bcopy(s,d,len) memcpy(d,s,len) # else # define NEED_OWN_BCOPY # define bcopy xbcopy # endif # endif #endif #if defined(HAVE_SETRESUID) && !defined(HAVE_SETREUID) # define setreuid(ruid, euid) setresuid(ruid, euid, -1) # define setregid(rgid, egid) setresgid(rgid, egid, -1) #endif #if defined(HAVE_SETEUID) || defined(HAVE_SETREUID) || defined(HAVE_SETRESUID) # define USE_SETEUID #endif #if !defined(HAVE__EXIT) && !defined(_exit) #define _exit(x) exit(x) #endif #ifndef HAVE_UTIMES # define utimes utime #endif #ifndef HAVE_VSNPRINTF # define vsnprintf xvsnprintf #endif #ifdef BUILTIN_TELNET # include # include #endif #if defined(USE_LOCALE) && (!defined(HAVE_SETLOCALE) || !defined(HAVE_STRFTIME)) # undef USE_LOCALE #endif /***************************************************************** * terminal handling */ #ifdef POSIX # include # ifdef hpux # include # endif /* hpux */ # ifdef NCCS # define MAXCC NCCS # else # define MAXCC 256 # endif #else /* POSIX */ # ifdef TERMIO # include # ifdef NCC # define MAXCC NCC # else # define MAXCC 256 # endif # ifdef CYTERMIO # include # endif # else /* TERMIO */ # include # endif /* TERMIO */ #endif /* POSIX */ #ifndef VDISABLE # ifdef _POSIX_VDISABLE # define VDISABLE _POSIX_VDISABLE # else # define VDISABLE 0377 # endif /* _POSIX_VDISABLE */ #endif /* !VDISABLE */ /* on sgi, regardless of the stream head's read mode (RNORM/RMSGN/RMSGD) * TIOCPKT mode causes data loss if our buffer is too small (IOSIZE) * to hold the whole packet at first read(). * (Marc Boucher) * * matthew green: * TIOCPKT is broken on dgux 5.4.1 generic AViiON mc88100 * * Joe Traister: On AIX4, programs like irc won't work if screen * uses TIOCPKT (select fails to return on pty read). */ #if defined(sgi) || defined(DGUX) || defined(_IBMR2) # undef TIOCPKT #endif /* Alexandre Oliva: SVR4 style ptys don't work with osf */ #ifdef __osf__ # undef HAVE_SVR4_PTYS #endif /***************************************************************** * utmp handling */ #ifdef GETUTENT typedef char *slot_t; #else typedef int slot_t; #endif #if defined(UTMPOK) || defined(BUGGYGETLOGIN) # if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux) # include # define UTMPFILE UTMPX_FILE # define utmp utmpx # define getutent getutxent # define getutid getutxid # define getutline getutxline # define pututline pututxline # define setutent setutxent # define endutent endutxent # define ut_time ut_xtime # else /* SVR4 */ # include # endif /* SVR4 */ # ifdef apollo /* * We don't have GETUTENT, so we dig into utmp ourselves. * But we save the permanent filedescriptor and * open utmp just when we need to. * This code supports an unsorted utmp. jw. */ # define UTNOKEEP # endif /* apollo */ # ifndef UTMPFILE # ifdef UTMP_FILE # define UTMPFILE UTMP_FILE # else # ifdef _PATH_UTMP # define UTMPFILE _PATH_UTMP # else # define UTMPFILE "/etc/utmp" # endif /* _PATH_UTMP */ # endif # endif #endif /* UTMPOK || BUGGYGETLOGIN */ #if !defined(UTMPOK) && defined(USRLIMIT) # undef USRLIMIT #endif #ifdef LOGOUTOK # ifndef LOGINDEFAULT # define LOGINDEFAULT 0 # endif #else # ifdef LOGINDEFAULT # undef LOGINDEFAULT # endif # define LOGINDEFAULT 1 #endif /***************************************************************** * file stuff */ #ifndef F_OK #define F_OK 0 #endif #ifndef X_OK #define X_OK 1 #endif #ifndef W_OK #define W_OK 2 #endif #ifndef R_OK #define R_OK 4 #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif #ifndef S_IREAD #define S_IREAD 0000400 #endif #ifndef S_IWRITE #define S_IWRITE 0000200 #endif #ifndef S_IEXEC #define S_IEXEC 0000100 #endif #if defined(S_IFIFO) && defined(S_IFMT) && !defined(S_ISFIFO) #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) #endif #if defined(S_IFSOCK) && defined(S_IFMT) && !defined(S_ISSOCK) #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) #endif #if defined(S_IFCHR) && defined(S_IFMT) && !defined(S_ISCHR) #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) #endif #if defined(S_IFDIR) && defined(S_IFMT) && !defined(S_ISDIR) #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) #endif #if defined(S_IFLNK) && defined(S_IFMT) && !defined(S_ISLNK) #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) #endif /* * SunOS 4.1.3: `man 2V open' has only one line that mentions O_NOBLOCK: * * O_NONBLOCK Same as O_NDELAY above. * * on the very same SunOS 4.1.3, I traced the open system call and found * that an open("/dev/ttyy08", O_RDWR|O_NONBLOCK|O_NOCTTY) was blocked, * whereas open("/dev/ttyy08", O_RDWR|O_NDELAY |O_NOCTTY) went through. * * For this simple reason I now favour O_NDELAY. jw. 4.5.95 */ #if defined(sun) && !defined(SVR4) # undef O_NONBLOCK #endif #if !defined(O_NONBLOCK) && defined(O_NDELAY) # define O_NONBLOCK O_NDELAY #endif #if !defined(FNBLOCK) && defined(FNONBLOCK) # define FNBLOCK FNONBLOCK #endif #if !defined(FNBLOCK) && defined(FNDELAY) # define FNBLOCK FNDELAY #endif #if !defined(FNBLOCK) && defined(O_NONBLOCK) # define FNBLOCK O_NONBLOCK #endif #ifndef POSIX #undef mkfifo #define mkfifo(n,m) mknod(n,S_IFIFO|(m),0) #endif #if !defined(HAVE_LSTAT) && !defined(lstat) # define lstat stat #endif /***************************************************************** * signal handling */ #ifdef SIGVOID # define SIGRETURN # define sigret_t void #else # define SIGRETURN return 0; # define sigret_t int #endif /* Geeeee, reverse it? */ #if defined(SVR4) || (defined(SYSV) && defined(ISC)) || defined(_AIX) || defined(linux) || defined(ultrix) || defined(__386BSD__) || defined(__bsdi__) || defined(POSIX) || defined(NeXT) # define SIGHASARG #endif #ifdef SIGHASARG # define SIGPROTOARG (int) # define SIGDEFARG (sigsig) int sigsig; # define SIGARG 0 #else # define SIGPROTOARG (void) # define SIGDEFARG () # define SIGARG #endif #ifndef SIGCHLD #define SIGCHLD SIGCLD #endif #if defined(POSIX) || defined(hpux) # define signal xsignal #else # ifdef USESIGSET # define signal sigset # endif /* USESIGSET */ #endif /* used in screen.c and attacher.c */ #ifndef NSIG /* kbeal needs these w/o SYSV */ # define NSIG 32 #endif /* !NSIG */ /***************************************************************** * Wait stuff */ #if (!defined(sysV68) && !defined(M_XENIX)) || defined(NeXT) || defined(M_UNIX) # include #endif #ifndef WTERMSIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WTERMSIG(status) (status & 0177) # else # define WTERMSIG(status) status.w_T.w_Termsig # endif #endif #ifndef WSTOPSIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WSTOPSIG(status) ((status >> 8) & 0377) # else # define WSTOPSIG(status) status.w_S.w_Stopsig # endif #endif /* NET-2 uses WCOREDUMP */ #if defined(WCOREDUMP) && !defined(WIFCORESIG) # define WIFCORESIG(status) WCOREDUMP(status) #endif #ifndef WIFCORESIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WIFCORESIG(status) (status & 0200) # else # define WIFCORESIG(status) status.w_T.w_Coredump # endif #endif #ifndef WEXITSTATUS # ifndef BSDWAIT /* if wait is NOT a union: */ # define WEXITSTATUS(status) ((status >> 8) & 0377) # else # define WEXITSTATUS(status) status.w_T.w_Retcode # endif #endif /***************************************************************** * select stuff */ #if defined(M_XENIX) || defined(M_UNIX) || defined(_SEQUENT_) #include /* for timeval + FD... */ #endif /* * SunOS 3.5 - Tom Schmidt - Micron Semiconductor, Inc - 27-Jul-93 * tschmidt@vax.micron.com */ #ifndef FD_SET # ifndef SUNOS3 typedef struct fd_set { int fds_bits[1]; } fd_set; # endif # define FD_ZERO(fd) ((fd)->fds_bits[0] = 0) # define FD_SET(b, fd) ((fd)->fds_bits[0] |= 1 << (b)) # define FD_ISSET(b, fd) ((fd)->fds_bits[0] & 1 << (b)) # define FD_SETSIZE 32 #endif /***************************************************************** * user defineable stuff */ #ifndef TERMCAP_BUFSIZE # define TERMCAP_BUFSIZE 1023 #endif #ifndef MAXPATHLEN # define MAXPATHLEN 1024 #endif /* * you may try to vary this value. Use low values if your (VMS) system * tends to choke when pasting. Use high values if you want to test * how many characters your pty's can buffer. */ #define IOSIZE 4096 /* Changing those you won't be able to attach to your old sessions * when changing those values in official tree don't forget to bump * MSG_VERSION */ #define MAXTERMLEN 32 #define MAXLOGINLEN 256 screen-4.9.1/etc/0000775000175000017500000000000014467014146012234 5ustar alexalexscreen-4.9.1/etc/newsyntax0000775000175000017500000000360314467014146014224 0ustar alexalex#!/bin/sh # # newsyntax -- update a screenrc file from 3.2 to 3.3 syntax # # please check all comments after running this script and watch out # for funny passages. # if [ $# != 1 ]; then echo "usage $0 screenrcfile" exit 1; fi #Ultrix 4.2 /bin/sh does not handle "read a < $1" #Dean Gaudet exec < $1 read a if [ ."$a" = '.#3.3' ]; then echo "$1 already updated" exit 0 fi cp $1 $1.old echo "#3.3" > $1 echo "# Do not remove the above line. This screen rc file was updated" >> $1 echo "# by the newsyntax script." >> $1 sed < $1.old >> $1 \ -e 's/\([ #]\)flow/\1defflow/g' \ -e 's/^flow/defflow/g' \ -e 's/\([ #]\)set[ ]*defflow/\1flow/g' \ -e 's/^set[ ]*defflow/flow/g' \ -e 's/\([ #]\)mode/\1defmode/g' \ -e 's/^mode/defmode/g' \ -e 's/\([ #]\)set[ ]*defmode/\1defmode/g' \ -e 's/^set[ ]*defmode/defmode/g' \ -e 's/\([ #]\)monitor/\1defmonitor/g' \ -e 's/^monitor/defmonitor/g' \ -e 's/\([ #]\)set[ ]*defmonitor/\1monitor/g' \ -e 's/^set[ ]*defmonitor/monitor/g' \ -e 's/\([ #]\)login/\1deflogin/g' \ -e 's/^login/deflogin/g' \ -e 's/\([ #]\)set[ ]*deflogin/\1login/g' \ -e 's/^set[ ]*deflogin/login/g' \ -e 's/\([ #]\)wrap/\1defwrap/g' \ -e 's/^wrap/defwrap/g' \ -e 's/\([ #]\)set[ ]*defwrap/\1wrap/g' \ -e 's/^set[ ]*defwrap/wrap/g' \ -e 's/\([ #]\)scrollback/\1defscrollback/g' \ -e 's/^scrollback/defscrollback/g' \ -e 's/\([ #]\)set[ ]*defscrollback/\1scrollback/g' \ -e 's/^set[ ]*defscrollback/scrollback/g' \ -e 's/\([ #]\)refresh/\1allPARtial/g' \ -e 's/^refresh/allPARtial/g' \ -e 's/\([ #]\)redraw/\1allPARtial/g' \ -e 's/^redraw/allPARtial/g' \ -e 's/\([ #]\)set[ ]*allPARtial/\1PARtial/g' \ -e 's/^set[ ]*allPARtial/PARtial/g' \ -e 's/\([ #]\)visualbell/\1vbell/g' \ -e 's/^visualbell/vbell/g' \ -e 's/PARtial\([ ]*\)on/partial\1off/g' \ -e 's/PARtial\([ ]*\)off/partial\1on/g' \ -e 's/allPARtial/refresh/g' \ -e 's/^set[ ]//g' screen-4.9.1/etc/gr-braille.tbl0000664000175000017500000002277614467014146014775 0ustar alexalex# GERMAN BRAILLE TABLE # # Dec Hex Braille Description # ------------------------------------------------------------------------ 0 00 (--345--8) NUL 1 01 (1------8) SOH 2 02 (12-----8) STX 3 03 (1--4---8) ETX 4 04 (1--45--8) EOT 5 05 (1---5--8) ENQ 6 06 (12-4---8) ACK 7 07 (12-45--8) BEL 8 08 (12--5--8) BS 9 09 (-2-4---8) HT 10 OA (-2-45--8) LF 11 0B (1-3----8) VT 12 OC (123----8) FF 13 0D (1-34---8) CR 14 0E (1-345--8) SO 15 OF (1-3-5--8) SI 16 10 (1234---8) DLE 17 11 (12345--8) DC1 18 12 (123-5--8) DC2 19 13 (-234---8) DC3 20 14 (-2345--8) DC4 21 15 (1-3--6-8) NAK 22 16 (123--6-8) SYN 23 17 (-2-456-8) ETB 24 18 (1-34-6-8) CAN 25 19 (1-3456-8) EM 26 1A (1-3-56-8) SUB 27 lB (123-56-8) ESC 28 lC (--34---8) FS 29 1D (-23456-8) GS 30 lE (-234-6-8) RS 31 1F (---456-8) US 32 20 (--------) Space 33 21 (----5---) ! 34 22 (---4----) " 35 23 (--3456--) # 36 24 (---4-6--) $ 37 25 (123456--) % 38 26 (1234-6--) & 39 27 (-----6--) ' 40 28 (-23--6--) ( 41 29 (--3-56--) ) 42 2A (--3-5---) * 43 2B (-23-5---) + 44 2C (-2------) , 45 2D (--3--6--) - 46 2E (--3-----) . 47 2F (-2--56--) / 48 30 (--34-6--) 0 49 31 (1----6--) 1 50 32 (12---6--) 2 51 33 (1--4-6--) 3 52 34 (1--456--) 4 53 35 (1---56--) 5 54 36 (12-4-6--) 6 55 37 (12-456--) 7 56 38 (12--56--) 8 57 39 (-2-4-6--) 9 58 3A (-2--5---) : 59 3B (-23-----) ; 60 3C (----56--) < 61 3D (-23-56--) 62 3E (---45---) > 63 3F (-2---6--) ? 64 40 (--345---) Special sign 65 41 (1-----7-) A 66 42 (12----7-) B 67 43 (1--4--7-) C 68 44 (1--45-7-) D 69 45 (1---5-7-) E 70 46 (12-4--7-) F 71 47 (12-45-7-) G 72 48 (12--5-7-) H 73 49 (-2-4--7-) I 74 4A (-2-45-7-) j 75 4B (1-3---7-) K 76 4C (123---7-) L 77 4D (1-34--7-) M 78 4E (1-345-7-) N 79 4F (1-3-5-7-) O 80 50 (1234--7-) P 81 51 (12345-7-) Q 82 52 (123-5-7-) R 83 53 (-234--7-) S 84 54 (-2345-7-) T 85 55 (1-3--67-) U 86 56 (123--67-) V 87 57 (-2-4567-) W 88 58 (1-34-67-) X 89 59 (1-34567-) Y 90 5A (1-3-567-) Z 91 5B (123-567-) [ or A umlaut 92 5C (--34--7-) \ or umlaut O 93 5D (-234567-) ] or umlaut U 94 5E (-234-67-) ^ or tilde 95 5F (---456--) _ 96 60 (--345--8) ' 97 61 (1-------) a 98 62 (12------) b 99 63 (1--4----) c 100 64 (1--45---) d 101 65 (1---5---) e 102 66 (12-4----) f 103 67 (12-45---) g 104 68 (12--5---) h 105 69 (-2-4----) i 106 6A (-2-45---) j 107 6B (1-3-----) k 108 6C (123-----) l 109 6D (1-34----) m 110 6E (1-345---) n 111 6F (1-3-5---) o 112 70 (1234----) p 113 71 (12345---) q 114 72 (123-5---) r 115 73 (-234----) s 116 74 (-2345---) t 117 75 (1-3--6--) u 118 76 (123--6--) v 119 77 (-2-456--) w 120 78 (1-34-6--) x 121 79 (1-3456--) y 122 7A (1-3-56--) z 123 7B (123-56--) { or umlaut a 124 7C (--34----) | or umlaut o 125 7D (-23456--) } or umlaut u 126 7E (-234-6--) ' 127 7F (---456-8) DEL 128 80 (1234-67-) C Cedilla (upper case) 129 81 (12-456--) u Umlaut (lower case) 130 82 (123456-8) e Acute (lower case) 131 83 (1----6-8) a Circumflex 132 84 (123-56--) a Umlaut (lower case) 133 85 (123-56-8) a Grave 134 86 (-2-----8) a Ring (lower case) 135 87 (1234-6-8) c Cedilla (lower case) 136 88 (12---6-8) e Circumflex 137 89 (12-4-6-8) e Umlaut (lower case) 138 8A (-234-6-8) e Grave 139 8B (12-456-8) i Umlaut (lower case) 140 8C (1--4-6-8) i Circumflex 141 8D (-2-4---8) I Grave 142 8E (123-567-) A Umlaut (upper case) 143 8F (1----67-) A Ring (upper case) 144 90 (1234567-) E Acute (upper case) 145 91 (123-56--) ae Digraph (lower case) 146 92 (123-567-) AE Digraph (upper case) 147 93 (1--456-8) o Circumflex 148 94 (--34----) o Umlaut (lower case) 149 95 (--34-6-8) o Grave 150 96 (1---56-8) u Circumflex 151 97 (-23456-8) u Grave 152 98 (1-3456-8) y Umlaut 153 99 (--34--7-) O Umlaut (upper case) 154 9A (-234567-) U Umlaut (upper case) 155 9B (-23-5678) Cent 156 9C (----56-8) Pound/Sterling 157 9D (-2--5678) Yen 158 9E (-23-5--8) Peseta 159 9F (12-4---8) Franc 160 A0 (-23--678) a Acute (lower case) 161 Al (----5-7-) i Acute (lower case) 162 A2 (----5-78) o Acute (lower case) 163 A3 (--3-5678) u Acute (lower case) 164 A4 (1-345--8) n Tilde (lower case) 165 A5 (--345-7-) N Tilde (upper case) 166 A6 (1------8) Feminine Spanish Ordinal 167 A7 (1-3-5--8) Masculine Spanish Ordinal 168 A8 (--3----8) Inverted Question Mark 169 A9 (--3--67-) Left square corner 170 AA (--3--6-8) Right square corner 171 AB (-23----8) 1/2 172 AC (-2--56-8) 1/4 173 AD (----5--8) Inverted Exclamation Mark 174 AE (--3----8) Left Double Guillemet 175 AF (--3---7-) Right Double Guillemet 176 B0 (--34-67-) Box [Shade 1] 177 B1 (---4-678) Box [Shade 2] 178 B2 (12---67-) Box [Shade 3] 179 B3 (1--4-67-) Box [top bottom] 180 B4 (1--4567-) Box [left top bottom] 181 B5 (1---567-) Box [LEFT top bottom] 182 B6 (12-4-67-) Box [left TOP BOTTOM] 183 B7 (12-4567-) Box [left BOTTOM] 184 B8 (12--567-) Box [LEFT bottom] 185 B9 (-2-4-67-) Box [LEFT TOP BOTTOM] 186 BA (-2--5-7-) Box [TOP BOTTOM] 187 BB (-23---7-) Box [LEFT BOTTOM] 188 BC (----567-) Box [LEFT TOP] 189 BD (-23-567-) Box [left TOP] 190 BE (---45-7-) Box [LEFT top] 191 BF (-2---67-) Box [left bottom] 192 CO (--345--8) Box [top right] 193 C1 (--3---78) Box [left top right] 194 C2 (1--45678) Box [left right bottom] 195 C3 (-2-4-678) Box [top right bottom] 196 C4 (1--45--8) Box [left right] 197 C5 (1---5--8) Box [left top right bottom] 198 C6 (-2--5-78) Box [top RIGHT bottom] 199 C7 (12-45--8) Box [TOP right BOTTOM] 200 C8 (------78) Box [TOP RIGHT] 201 C9 (-2--5--8) Box [RIGHT BOTTOM] 202 CA (-2-45--8) Box [LEFT TOP RIGHT] 203 CB (1-3----8) Box [LEFT RIGHT BOTTOM] 204 CC (123----8) Box [TOP RIGHT BOTTOM] 205 CD (1-34---8) Box [LEFT RIGHT] 206 CE (---4--78) Box [LEFT TOP RIGHT BOTTOM] 207 CF (--345678) Box [LEFT top RIGHT] 208 DO (123----8) Box [left TOP right] 209 D1 (12345--8) Box [LEFT RIGHT bottom] 210 D2 (123-5--8) Box [left right BOTTOM] 211 D3 (-234---8) Box [TOP right] 212 D4 (-2345--8) Box [top RIGHT] 213 D5 (1-3--6-8) Box [RIGHT bottom] 214 D6 (123--6-8) Box [right BOTTOM] 215 D7 (-2-456-8) Box [left TOP right BOTTOM] 216 D8 (1-34-6-8) Box [LEFT top RIGHT bottom] 217 D9 (12345678) Box [left top] 218 DA (1-3-56-8) Box [right bottom] 219 DB (-----678) Box [Shade 4] 220 DC (--34-678) Box [box bottom] 221 DD (1234-678) Box [box right] 222 DE (--3-5-78) Box [box left] 223 DF (---4567-) Box [box top] 224 E0 (------7-) Alpha (lower case) 225 E1 (-234-6--) Beta (lower case) 226 E2 (-23-5-78) Gamma (upper case) 227 E3 (-23-5-7-) Pi (lower case) 228 E4 (---4-6-8) Sigma (upper case) 229 E5 (-2----78) Sigma (lower case) 230 E6 (--3--678) Mu (lower case) 231 E7 (-----6-8) Tau (lower case) 232 E8 (-23--6-8) Phi (upper case) 233 E9 (--3-56-8) Theta (lower case) 234 EA (--3-5--8) Omega (upper case) 235 EB (1----678) Delta (lower case) 236 EC (12---678) infinity 237 ED (1--4-678) Phi (lower case) 238 EE (1---5678) Epsilon (lower case) 239 EF (12-4-678) Intersection 240 F0 (12-45678) Equivalent (Member) 241 F1 (12--5678) Plus or minus 242 F2 (------7-) Greater than or equal 243 F3 (--34567-) Less than or equal 244 F4 (---4-67-) Integral [top] 245 F5 (-23---78) Integral [bottom] 246 F6 (-----67-) Division 247 F7 (-23--67-) Approximately equal 248 F8 (12--56-8) Small circle 249 F9 (-2-4-6-8) Bullet 250 FA (-2--5--8) Small bullet 251 FB (--3-567-) Bent Radical 252 FC (----56-8) Power of n 253 FD (-23-56-8) Power of 2 254 FE (---45--8) Large square bullet 255 FF (-2---6-8) blank (hard space) screen-4.9.1/etc/etcscreenrc0000664000175000017500000000635614467014146014471 0ustar alexalex# # This is an example for the global screenrc file. # You may want to install this file as /usr/local/etc/screenrc. # Check config.h for the exact location. # # Flaws of termcap and standard settings are done here. # #startup_message off #defflow on # will force screen to process ^S/^Q deflogin on #autodetach off vbell on vbell_msg " Wuff ---- Wuff!! " # all termcap entries are now duplicated as terminfo entries. # only difference should be the slightly modified syntax, and check for # terminfo entries, that are already corected in the database. # # G0 we have a SEMI-GRAPHICS-CHARACTER-MODE # WS this sequence resizes our window. # cs this sequence changes the scrollregion # hs@ we have no hardware statusline. screen will only believe that # there is a hardware status line if hs,ts,fs,ds are all set. # ts to statusline # fs from statusline # ds delete statusline # al add one line # AL add multiple lines # dl delete one line # DL delete multiple lines # ic insert one char (space) # IC insert multiple chars # nx terminal uses xon/xoff termcap facit|vt100|xterm LP:G0 terminfo facit|vt100|xterm LP:G0 #the vt100 description does not mention "dl". *sigh* termcap vt100 dl=5\E[M terminfo vt100 dl=5\E[M #facit's "al" / "dl" are buggy if the current / last line #contain attributes... termcap facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%d;%dr:ic@ terminfo facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%p1%d;%p2%dr:ic@ #make sun termcap/info better termcap sun 'up=^K:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:IC=\E[%d@:WS=1000\E[8;%d;%dt' terminfo sun 'up=^K:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC:IC=\E[%p1%d@:WS=\E[8;%p1%d;%p2%dt$<1000>' #xterm understands both im/ic and doesn't have a status line. #Note: Do not specify im and ic in the real termcap/info file as #some programs (e.g. vi) will (no,no, may (jw)) not work anymore. termcap xterm|fptwist hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l terminfo xterm|fptwist hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l # Long time I had this in my private screenrc file. But many people # seem to want it (jw): # we do not want the width to change to 80 characters on startup: # on suns, /etc/termcap has :is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l: termcap xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' terminfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' # # Do not use xterms alternate window buffer. # This one would not add lines to the scrollback buffer. termcap xterm|xterms|xs ti=\E7\E[?47l terminfo xterm|xterms|xs ti=\E7\E[?47l #make hp700 termcap/info better termcap hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@' terminfo hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@' #wyse-75-42 must have defflow control (xo = "terminal uses xon/xoff") #(nowadays: nx = padding doesn't work, have to use xon/off) #essential to have it here, as this is a slow terminal. termcap wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h terminfo wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h #remove some stupid / dangerous key bindings bind ^k #bind L bind ^\ #make them better bind \\ quit bind K kill bind I login on bind O login off bind } history screen-4.9.1/etc/toolcheck0000775000175000017500000000223214467014146014134 0ustar alexalex#!/bin/sh # toolcheck -- check for tools that have severe bugs. Good that all the buggy # tools identify by version numbers. This is the spirit of GNU :-) # # 24.7.95 jw. retval=0 reply="`sh -version 2>&1 < /dev/null | sed q`" case "$reply" in GNU*1.14.3*) echo "- sh is '$reply'"; echo " CAUTION: This shell has a buggy 'trap' command."; echo " The configure script may fail silently."; retval=1; ;; GNU*1.14.2*|GNU*1.14.4*|GNU*1.13.*) echo "- sh is '$reply' - good."; ;; GNU*) echo "- sh is '$reply'."; ;; *) ;; esac reply="`sed --version 2>&1 < /dev/null | sed q`" case "$reply" in GNU\ sed\ version\ 2.0[34]) echo "- sed is '$reply'"; echo " CAUTION: This sed cannot configure screen properly." retval=1; ;; GNU\ sed\ version\ 2.05|GNU\ sed\ version\ 2.03\ kevin) echo "- sed is '$reply' - good."; ;; GNU*) echo "- sed is '$reply'."; ;; *) ;; esac if [ "$retval" != 0 ]; then echo " ***********************************************************" echo " Please fix the above problem before reporting a screen bug!" echo " ***********************************************************" fi exit $retval screen-4.9.1/etc/us-braille.tbl0000664000175000017500000002264314467014146015005 0ustar alexalex# U.S. BRAILLE TABLE # # Dec Hex Braille Description # ------------------------------------------------------------------------ 0 00 (---4--78) NUL 1 01 (1-----78) SOH 2 02 (12----78) STX 3 03 (1--4--78) ETX 4 04 (1--45-78) EOT 5 05 (1---5-78) ENQ 6 06 (12-4--78) ACK 7 07 (12-45-78) BEL 8 08 (12--5-78) BS 9 09 (-2-4--78) HT 10 OA (-2-45-78) LF 11 0B (1-3---78) VT 12 OC (123---78) FF 13 0D (1-34--78) CR 14 0E (1-345-78) SO 15 OF (1-3-5-78) SI 16 10 (1234--78) DLE 17 11 (12345-78) DC1 18 12 (123-5-78) DC2 19 13 (-234--78) DC3 20 14 (-2345-78) DC4 21 15 (1-3--678) NAK 22 16 (123--678) SYN 23 17 (-2-45678) ETB 24 18 (1-34-678) CAN 25 19 (1-345678) EM 26 1A (1-3-5678) SUB 27 lB (-2-4-678) ESC 28 lC (12--5678) FS 29 1D (12-45678) GS 30 lE (---45-78) RS 31 1F (---45678) US 32 20 (--------) Space 33 21 (-234-6--) ! 34 22 (----5---) " 35 23 (--3456--) # 36 24 (12-4-6--) $ 37 25 (1--4-6--) % 38 26 (1234-6--) & 39 27 (--3-----) ' 40 28 (123-56--) ( 41 29 (-23456--) ) 42 2A (1----6--) * 43 2B (--34-6--) + 44 2C (-----6--) , 45 2D (--3--6--) - 46 2E (---4-6--) . 47 2F (--34----) / 48 30 (--3-56--) 0 49 31 (-2------) 1 50 32 (-23-----) 2 51 33 (-2--5---) 3 52 34 (-2--56--) 4 53 35 (-2---6--) 5 54 36 (-23-5---) 6 55 37 (-23-56--) 7 56 38 (-23--6--) 8 57 39 (--3-5---) 9 58 3A (1---56--) : 59 3B (----56--) ; 60 3C (12---6--) < 61 3D (123456--) - 62 3E (--345---) > 63 3F (1--456--) ? 64 40 (---4--7-) @ 65 41 (1-----7-) A 66 42 (12----7-) B 67 43 (1--4--7-) C 68 44 (1--45-7-) D 69 45 (1---5-7-) E 70 46 (12-4--7-) F 71 47 (12-45-7-) G 72 48 (12--5-7-) H 73 49 (-2-4--7-) I 74 4A (-2-45-7-) J 75 4B (1-3---7-) K 76 4C (123---7-) L 77 4D (1-34--7-) M 78 4E (1-345-7-) N 79 4F (1-3-5-7-) O 80 50 (1234--7-) P 81 51 (12345-7-) Q 82 52 (123-5-7-) R 83 53 (-234--7-) S 84 54 (-2345-7-) T 85 55 (1-3--67-) U 86 56 (123--67-) V 87 57 (-2-4567-) W 88 58 (1-34-67-) X 89 59 (1-34567-) Y 90 5A (1-3-567-) Z 91 5B (-2-4-67-) [ 92 5C (12--567-) \ 93 5D (12-4567-) ] 94 5E (---45-7-) ^ 95 5F (---4567-) _ 96 60 (---4----) ' 97 61 (1-------) a 98 62 (12------) b 99 63 (1--4----) c 100 64 (1--45---) d 101 65 (1---5---) e 102 66 (12-4----) f 103 67 (12-45---) g 104 68 (12--5---) h 105 69 (-2-4----) i 106 6A (-2-45---) j 107 6B (1-3-----) k 108 6C (123-----) l 109 6D (1-34----) m 110 6E (1-345---) n 111 6F (1-3-5---) o 112 70 (1234----) p 113 71 (12345---) q 114 72 (123-5---) r 115 73 (-234----) s 116 74 (-2345---) t 117 75 (1-3--6--) u 118 76 (123--6--) v 119 77 (-2-456--) w 120 78 (1-34-6--) x 121 79 (1-3456--) y 122 7A (1-3-56--) z 123 7B (-2-4-6--) { 124 7C (12--56--) | 125 7D (12-456--) } 126 7E (---45---) ~ 127 7F (---456--) DEL 128 80 (---4---8) C Cedilla (upper case) 129 81 (1------8) u Umlaut (lower case) 130 82 (12-----8) e Acute (lower case) 131 83 (1--4---8) a Circumflex 132 84 (1--45--8) a Umlaut (lower case) 133 85 (1---5--8) a Grave 134 86 (12-4---8) a Ring (lower case) 135 87 (12-45--8) c Cedilla (lower case) 136 88 (12--5--8) e Circumflex 137 89 (-2-4---8) e Umlaut (lower case) 138 8A (--2-45-8) e Grave 139 8B (1-3----8) i Umlaut (lower case) 140 8C (123----8) i Circumflex 141 8D (1-34---8) I Grave 142 8E (1-345--8) A Umlaut (upper case) 143 8F (1-3-5--8) A Ring (upper case) 144 90 (1234---8) E Acute (upper case) 145 91 (12345--8) ae Digraph (lower case) 146 92 (123-5--8) AE Digraph (upper case) 147 93 (-234---8) o Circumflex 148 94 (-2345--8) o Umlaut (lower case) 149 95 (1-3--6-8) o Grave 150 96 (123--6-8) u Circumflex 151 97 (-2-456-8) u Grave 152 98 (1-34-6-8) y Umlaut 153 99 (1-3456-8) O Umlaut (upper case) 154 9A (1-3-56-8) U Umlaut (upper case) 155 9B (-2-4-6-8) Cent 156 9C (12--56-8) Pound/Sterling 157 9D (12-456-8) Yen 158 9E (---45--8) Peseta 159 9F (---456-8) Franc 160 A0 (------7-) a Acute (lower case) 161 Al (-234-67-) i Acute (lower case) 162 A2 (----5-7-) o Acute (lower case) 163 A3 (--34567-) u Acute (lower case) 164 A4 (12-4-67-) n Tilde (lower case) 165 A5 (1--4-67-) N Tilde (upper case) 166 A6 (1234-67-) Feminine Spanish Ordinal 167 A7 (--3---7-) Masculine Spanish Ordinal 168 A8 (123-567-) Inverted Question Mark 169 A9 (-234567-) Left square corner 170 AA (1----67-) Right square corner 171 AB (--34-67-) 1/2 172 AC (-----67-) 1/4 173 AD (--3--67-) Inverted Exclamation Mark 174 AE (---4-67-) Left Double Guillemet 175 AF (--34--7-) Right Double Guillemet 176 B0 (--3-567-) Box [Shade 1] 177 B1 (-2----7-) Box [Shade 2] 178 B2 (-23---7-) Box [Shade 3] 179 B3 (-2--5-7-) Box [top bottom] 180 B4 (-2--567-) Box [left top bottom] 181 B5 (-2---67-) Box [LEFT top bottom] 182 B6 (-23-5-7-) Box [left TOP BOTTOM] 183 B7 (-23-567-) Box [left BOTTOM] 184 B8 (-23--67-) Box [LEFT bottom] 185 B9 (--3-5-7-) Box [LEFT TOP BOTTOM] 186 BA (1---567-) Box [TOP BOTTOM] 187 BB (----567-) Box [LEFT BOTTOM] 188 BC (12---67-) Box [LEFT TOP] 189 BD (1234567-) Box [left TOP] 190 BE (--345-7-) Box [LEFT top] 191 BF (1--4567-) Box [left bottom] 192 CO (------78) Box [top right] 193 C1 (-234-678) Box [left top right] 194 C2 (----5-78) Box [left right bottom] 195 C3 (--345678) Box [top right bottom] 196 C4 (12-4-678) Box [left right] 197 C5 (1--4-678) Box [left top right bottom] 198 C6 (1234-678) Box [top RIGHT bottom] 199 C7 (--3---78) Box [TOP right BOTTOM] 200 C8 (123-5678) Box [TOP RIGHT] 201 C9 (-2345678) Box [RIGHT BOTTOM] 202 CA (1----678) Box [LEFT TOP RIGHT] 203 CB (--34-678) Box [LEFT RIGHT BOTTOM] 204 CC (-----678) Box [TOP RIGHT BOTTOM] 205 CD (--3--678) Box [LEFT RIGHT] 206 CE (---4-678) Box [LEFT TOP RIGHT BOTTOM] 207 CF (--34--78) Box [LEFT top RIGHT] 208 DO (--3-5678) Box [left TOP right] 209 D1 (-2----78) Box [LEFT RIGHT bottom] 210 D2 (-23---78) Box [left right BOTTOM] 211 D3 (-2--5-78) Box [TOP right] 212 D4 (-2--5678) Box [top RIGHT] 213 D5 (-2---678) Box [RIGHT bottom] 214 D6 (-23-5-78) Box [right BOTTOM] 215 D7 (-23-5678) Box [left TOP right BOTTOM] 216 D8 (-23--678) Box [LEFT top RIGHT bottom] 217 D9 (--3-5-78) Box [left top] 218 DA (1---5678) Box [right bottom] 219 DB (----5678) Box [Shade 4] 220 DC (12---678) Box [box bottom] 221 DD (12345678) Box [box right] 222 DE (--345-78) Box [box left] 223 DF (1--45678) Box [box top] 224 E0 (-------8) Alpha (lower case) 225 E1 (-234-6-8) Beta (lower case) 226 E2 (----5--8) Gamma (upper case) 227 E3 (--3456-8) Pi (lower case) 228 E4 (12-4-6-8) Sigma (upper case) 229 E5 (1--4-6-8) Sigma (lower case) 230 E6 (1234-6-8) Mu (lower case) 231 E7 (--3----8) Tau (lower case) 232 E8 (123-56-8) Phi (upper case) 233 E9 (-23456-8) Theta (lower case) 234 EA (1----6-8) Omega (upper case) 235 EB (--34-6-8) Delta (lower case) 236 EC (-----6-8) infinity 237 ED (--3--6-8) Phi (lower case) 238 EE (---4-6-8) Epsilon (lower case) 239 EF (--34---8) Intersection 240 F0 (--3-56-8) Equivalent (Member) 241 F1 (-2-----8) Plus or minus 242 F2 (-23----8) Greater than or equal 243 F3 (-2--5--8) Less than or equal 244 F4 (-2--56-8) Integral [top] 245 F5 (-2---6-8) Integral [bottom] 246 F6 (-23-5--8) Division 247 F7 (-23-56-8) Approximately equal 248 F8 (-23--6-8) Small circle 249 F9 (--3-5--8) Bullet 250 FA (1---56-8) Small bullet 251 FB (----56-8) Bent Radical 252 FC (12---6-8) Power of n 253 FD (123456-8) Power of 2 254 FE (--345--8) Large square bullet 255 FF (1--456-8) blank (hard space) screen-4.9.1/etc/mkinstalldirs0000775000175000017500000000115314467014146015042 0ustar alexalex#!/bin/sh # Make directory hierarchy. # Written by Noah Friedman # Public domain. defaultIFS=' ' IFS="${IFS-${defaultIFS}}" errstatus=0 for file in ${1+"$@"} ; do oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${file} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' for d in ${1+"$@"} ; do pathcomp="${pathcomp}${d}" if test ! -d "${pathcomp}"; then echo "mkdir $pathcomp" 1>&2 mkdir "${pathcomp}" || errstatus=$? fi pathcomp="${pathcomp}/" done done exit $errstatus # eof screen-4.9.1/etc/countmail0000775000175000017500000000255214467014146014161 0ustar alexalex#!/usr/bin/perl sub countmsgs { return -1 unless open(M, "<$mbox"); my $inhdr = 0; my $cl = undef; my $msgread = 0; my $count = 0; while() { if (!$inhdr && /^From\s+\S+\s+(?i:sun|mon|tue|wed|thu|fri|sat)\s+(?i:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s+\d+\s/) { $inhdr = 1; $msgread = 0; undef $cl; next; } if ($inhdr) { if (/^content-length:\s+(\d+)/i) { $cl = 0+$1; next; } if (/^status:\s+(\S)/i) { $msgread = 1 unless $1 eq 'N' || $1 eq 'U'; next; } if ($_ eq "\n") { $count++ if !$msgread; seek(M, $cl, 1) if defined $cl; $inhdr = 0; } } } close M; return $count; } $| = 1; $mbox = $ARGV[0] || $ENV{'MAIL'}; $oldfmt = $ARGV[1] || "%4d "; $newfmt = $ARGV[2] || "\005{Rk}%4d \005{-}"; @oldstat = stat($mbox); if (!@oldstat) { print "\005{Rk} ??? \005{-}\n"; exit 1; } $oldcount = 0; while(1) { $count = countmsgs($mbox); if ($count == -1) { print "\005{Rk} ??? \005{-}\n"; } elsif ($count < $oldcount || $count == 0) { printf "$oldfmt\n", $count; } else { printf "$newfmt\n", $count; } $oldcount = $count; while (1) { @newstat = stat($mbox); if (!@newstat) { print "\005{Rk} ??? \005{-}\n"; exit 1; } last if $newstat[7] != $oldstat[7] || $newstat[9] != $oldstat[9]; sleep 1; } @oldstat = @newstat; } screen-4.9.1/etc/ccdefs0000775000175000017500000000143714467014146013416 0ustar alexalex#!/bin/sh cd /tmp umask 022 CC=cc CPP=cpp PATH="$PATH:/lib" TEMP=def$$ trap 'rm -f ${TEMP}*; trap 0; exit' 0 1 2 3 15 set `type $CC` q=$# set x `type $CC` shift $q cc=$1 set `type $CPP` q=$# set x `type $CPP` shift $q cpp=$1 strings - "$cc" 2>/dev/null | tr ' ' '\012' > ${TEMP}.x if test -x "$cpp"; then strings - "$cpp" 2>/dev/null | tr ' ' '\012' >> ${TEMP}.x else echo "Warning: cpp not found." fi sort < ${TEMP}.x | uniq | awk ' /^-D[A-Za-z_][A-Za-z_0-9]*$/ { printf("#ifdef %s\n", substr($0,3)) printf("\"%s\": %s\n", substr($0,3), substr($0,3)) print "#endif" } /^[A-Za-z_][A-Za-z_0-9]*$/ { printf("#ifdef %s\n", $0) printf("\"%s\": %s\n", $0, $0) print "#endif" } ' > ${TEMP}.c echo "Defines in cc are:" cc -E ${TEMP}.c | sed -n -e 's/"\([^:]*\)":/\1:/p' | sort | uniq screen-4.9.1/etc/screenrc0000664000175000017500000000722114467014146013765 0ustar alexalex# # Example of a user's .screenrc file # # This is how one can set a reattach password: # password ODSJQf.4IJN7E # "1234" # no annoying audible bell, please vbell on # detach on hangup autodetach on # don't display the copyright page startup_message off # emulate .logout message pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended." # advertise hardstatus support to $TERMCAP # termcapinfo * '' 'hs:ts=\E_:fs=\E\\:ds=\E_\E\\' # make the shell in every window a login shell #shell -$SHELL # autoaka testing # shellaka '> |tcsh' # shellaka '$ |sh' # set every new windows hardstatus line to somenthing descriptive # defhstatus "screen: ^En (^Et)" defscrollback 1000 # don't kill window after the process died # zombie "^[" # enable support for the "alternate screen" capability in all windows # altscreen on ################ # # xterm tweaks # #xterm understands both im/ic and doesn't have a status line. #Note: Do not specify im and ic in the real termcap/info file as #some programs (e.g. vi) will not work anymore. termcap xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l #80/132 column switching must be enabled for ^AW to work #change init sequence to not switch width termcapinfo xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l # Make the output buffer large for (fast) xterms. #termcapinfo xterm* OL=10000 termcapinfo xterm* OL=100 # tell screen that xterm can switch to dark background and has function # keys. termcapinfo xterm 'VR=\E[?5h:VN=\E[?5l' termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~' termcapinfo xterm 'kh=\EOH:kI=\E[2~:kD=\E[3~:kH=\EOF:kP=\E[5~:kN=\E[6~' # special xterm hardstatus: use the window title. termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007' #terminfo xterm 'vb=\E[?5h$<200/>\E[?5l' termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l' # emulate part of the 'K' charset termcapinfo xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334,{\344,|\366,}\374,~\337' # xterm-52 tweaks: # - uses background color for delete operations termcapinfo xterm* be ################ # # wyse terminals # #wyse-75-42 must have flow control (xo = "terminal uses xon/xoff") #essential to have it here, as this is a slow terminal. termcapinfo wy75-42 xo:hs@ # New termcap sequences for cursor application mode. termcapinfo wy* CS=\E[?1h:CE=\E[?1l:vi=\E[?25l:ve=\E[?25h:VR=\E[?5h:VN=\E[?5l:cb=\E[1K:CD=\E[1J ################ # # other terminals # # make hp700 termcap/info better termcapinfo hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@' # Extend the vt100 desciption by some sequences. termcap vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC termcapinfo linux C8 # old rxvt versions also need this # termcapinfo rxvt C8 ################ # # keybindings # #remove some stupid / dangerous key bindings bind k bind ^k bind . bind ^\ bind \\ bind ^h bind h #make them better bind 'K' kill bind 'I' login on bind 'O' login off bind '}' history # Yet another hack: # Prepend/append register [/] to the paste if ^a^] is pressed. # This lets me have autoindent mode in vi. register [ "\033:se noai\015a" register ] "\033:se ai\015a" bind ^] paste [.] ################ # # default windows # # screen -t local 0 # screen -t mail 1 mutt # screen -t 40 2 rlogin server # caption always "%3n %t%? @%u%?%? [%h]%?%=%c" # hardstatus alwaysignore # hardstatus alwayslastline "%Lw" # bind = resize = # bind + resize +1 # bind - resize -1 # bind _ resize max # # defnonblock 1 # blankerprg rain -d 100 # idle 30 blanker screen-4.9.1/etc/gs-braille.tbl0000664000175000017500000002376714467014146014777 0ustar alexalex# GS BRAILLE TABLE # # Dec Hex Braille Description # ------------------------------------------------------------------------ 0 0 (--------) NUL 1 1 (--------) SOH 2 2 (--------) STX 3 3 (--------) ETX 4 4 (--------) EOT 5 5 (--------) ENQ 6 6 (--------) ACK 7 7 (--------) BEL 8 8 (--------) BS 9 9 (--------) HT 10 A (--------) LF 11 B (--------) VT 12 C (--------) FF 13 D (--------) CR 14 E (--------) SO 15 F (--------) SI 16 10 (--------) DLE 17 11 (--------) DC1 18 12 (--------) DC2 19 13 (--------) DC3 20 14 (--------) DC4 21 15 (--------) NAK 22 16 (--------) SYN 23 17 (--------) ETB 24 18 (--------) CAN 25 19 (--------) EM 26 1A (--------) SUB 27 1B (--------) ESC 28 1C (--------) FS 29 1D (--------) GS 30 1E (--------) RS 31 1F (--------) US 32 20 (--------) space 33 21 (-23-5---) bang 34 22 (--3--678) unidirectional double quote 35 23 (----5678) # (number or hash) symbol 36 24 (--34567-) $ 37 25 (--34---8) % symbol 38 26 (-23-5-78) & symbol 39 27 (--3-----) apostrophe 40 28 (-23----8) left parenthesis symbol 41 29 (----567-) right parenthesis symbol 42 2A (--34--7-) asterisk 43 2B (-2--5-7-) plus symbol 44 2C (-2------) comma 45 2D (--3--6--) dash, also used as over/under bar. 46 2E (-2--56--) period, decimal point 47 2F (--34--78) / symbol 48 30 (-2-45-78) zero 49 31 (1-----78) one 50 32 (12----78) two 51 33 (1--4--78) three 52 34 (1--45-78) four 53 35 (1---5-78) five 54 36 (12-4--78) six 55 37 (12-45-78) seven 56 38 (12--5-78) eight 57 39 (-2-4--78) nine 58 3A (-2--5---) colon 59 3B (-23-----) semicolon 60 3C (1234567-) open angle bracket 61 3D (-2--5-78) equals symbol 62 3E (123456-8) close angle bracket 63 3F (-23--6--) question mark 64 40 (--345-78) @ sign 65 41 (1-----7-) A 66 42 (12----7-) B 67 43 (1--4--7-) C 68 44 (1--45-7-) D 69 45 (1---5-7-) E 70 46 (12-4--7-) F 71 47 (12-45-7-) G 72 48 (12--5-7-) H 73 49 (-2-4--7-) I 74 4A (-2-45-7-) J 75 4B (1-3---7-) K 76 4C (123---7-) L 77 4D (1-34--7-) M 78 4E (1-345-7-) N 79 4F (1-3-5-7-) O 80 50 (1234--7-) P 81 51 (12345-7-) Q 82 52 (123-5-7-) R 83 53 (-234--7-) S 84 54 (-2345-7-) T 85 55 (1-3--67-) U 86 56 (123--67-) V 87 57 (-2-4567-) W 88 58 (1-34-67-) X 89 59 (1-34567-) Y 90 5A (1-3-567-) Z 91 5B (-23--678) [ symbol 92 5C (1----678) \ symbol 93 5D (--3-5678) ] symbol 94 5E (--345-7-) ^ 95 5F (-2---6-8) _ 96 60 (--3----8) opening single quote 97 61 (1-------) a 98 62 (12------) b 99 63 (1--4----) c 100 64 (1--45---) d 101 65 (1---5---) e 102 66 (12-4----) f 103 67 (12-45---) g 104 68 (12--5---) h 105 69 (-2-4----) i 106 6A (-2-45---) j 107 6B (1-3-----) k 108 6C (123-----) l 109 6D (1-34----) m 110 6E (1-345---) n 111 6F (1-3-5---) o 112 70 (1234----) p 113 71 (12345---) q 114 72 (123-5---) r 115 73 (-234----) s 116 74 (-2345---) t 117 75 (1-3--6--) u 118 76 (123--6--) v 119 77 (-2-456--) w 120 78 (1-34-6--) x 121 79 (1-3456--) y 122 7A (1-3-56--) z 123 7B (123-5678) { symbol 124 7C (--34-678) | 125 7D (-2345678) } symbol 126 7E (--34-67-) ~ 127 7F (1--4-678) del, nabla sign 128 80 (--3-5-7-) negative power indicator 129 81 (--34-67-) ~ 130 82 (--3---78) opening double quote 131 83 (--34----) complex fraction line indicator 132 84 (--3-5-78) left superscript 133 85 (--345678) start extended math mode 134 86 (-23---7-) end of line in 2-D array 135 87 (-23--67-) right arrow sign 136 88 (-23-567-) proportional to sign 137 89 (-23---78) ` (grave accent) 138 8A (-234-678) integral sign 139 8B (-23-5678) identically equals sign 140 8C (--3-5--8) < (less) symbol 141 8D (-2---67-) > (greater) symbol 142 8E (123--678) end extended math mode. 143 8F (12345678) infinity sign 144 90 (1--4-6--) overscript indicator 145 91 (1---56--) slashed symbol or NOT indicator 146 92 (1--456--) function indicator 147 93 (---45-7-) bold symbol indicator 148 94 (---4-67-) italic symbol indicator 149 95 (---4567-) special (text default=underlined) symbol indicator 150 96 (------78) minus sign 151 97 (---4--78) gothic font symbol indicator 152 98 (----5-78) divide by sign 153 99 (---45-78) special font 1 symbol indicator 154 9A (-----678) closing double quote 155 9B (---4-678) special font 2 symbol indicator 156 9C (---45678) special font 3 symbol indicator 157 9D (-2----78) times cross sign 158 9E (-2---678) left subscript 159 9F (--3---7-) end of element in 2-D array 160 A0 (-2-4-6--) radical indicator 161 A1 (-----67-) closing single quote 162 A2 (----5---) In 8 dot code in shapes and as a soft hyphen. 163 A3 (---45---) To be used for foreign indicators and/or phonetic indicators. 164 A4 (-----6--) 04 never appears in 8 dot code except shapes. 165 A5 (---4-6--) 05 never appears in 8 dot code except shapes. 166 A6 (----56--) grade 1 indicator in both codes. 167 A7 (---456--) Converts upper cell to cell + dot-67, other root to root + dot-78. 168 A8 (-------8) Under user control can indicate hyperlinks or font enhancements or... 169 A9 (---4---8) start shape beginning with 01 and ending at first root cell 170 AA (----5--8) start shape beginning with 02 171 AB (---45--8) start shape beginning with 03 172 AC (-----6-8) start shape beginning with 04 173 AD (---4-6-8) start shape beginning with 05 174 AE (----56-8) start shape beginning with 06 175 AF (---456-8) start shape beginning with 07 176 B0 (1--4---8) Copyright sign 177 B1 (1--4-6-8) partial differential sign 178 B2 (-2---6--) subscript indicator 179 B3 (1------8) alpha 180 B4 (12-----8) beta 181 B5 (12-45--8) gamma 182 B6 (1--45--8) delta 183 B7 (1---5--8) epsilon 184 B8 (1-3-56-8) zeta 185 B9 (1---56-8) eta 186 BA (1--456-8) theta 187 BB (-2-4---8) iota 188 BC (1-3----8) kappa 189 BD (123----8) lambda 190 BE (1-34---8) mu 191 BF (1-345--8) nu 192 C0 (1-34-6-8) xi 193 C1 (1-3-5--8) omichron 194 C2 (1234---8) pi 195 C3 (123-5--8) rho 196 C4 (-234---8) sigma 197 C5 (-2345--8) tau 198 C6 (1-3--6-8) upsilon 199 C7 (12-4---8) phi 200 C8 (1234-6-8) chi 201 C9 (1-3456-8) psi 202 CA (-2-456-8) omega 203 CB (1----67-) cap Alpha 204 CC (12---67-) cap Beta 205 CD (12-4567-) cap Gamma 206 CE (1--4567-) cap Delta 207 CF (1---567-) cap Epsilon 208 D0 (1-3-5678) cap zeta 209 D1 (1---5678) cap Eta 210 D2 (1--45678) cap Theta 211 D3 (-2-4-67-) cap Iota 212 D4 (1-3---78) cap kappa 213 D5 (123---78) cap lambda 214 D6 (1-34--78) cap mu 215 D7 (1-345-78) cap nu 216 D8 (1-34-678) cap xi 217 D9 (1-3-5-78) cap omichron 218 DA (1234--78) cap pi 219 DB (123-5-78) cap rho 220 DC (-234--78) cap sigma 221 DD (-2345-78) cap tau 222 DE (1-3--678) cap upsilon 223 DF (12-4-67-) cap Phi 224 E0 (1234-678) cap chi 225 E1 (1-345678) cap psi 226 E2 (-2-45678) cap omega 227 E3 (-2--5--8) times dot sign 228 E4 (-2-45--8) small circle sign 229 E5 (-2-4-6-8) radical sign, not operator 230 E6 (12---6--) open braille bracket 231 E7 (12-4-6--) horizontal combination symbol indicator 232 E8 (12--56--) vertical stack symbol indicator 233 E9 (12-456--) superimposed combination symbol indicator 234 EA (12--56-8) absolute value bar sign 235 EB (--3-5---) superscript indicator 236 EC (--345---) close braille bracket 237 ED (--34-6--) underscript indicator 238 EE (--3-56--) start math word indicator 239 EF (--3456--) Number indicator (6 dot code) 240 F0 (---4----) Accent mark 241 F1 (--3--6-8) ellipses sign 242 F2 (--34-6-8) dagger, transpose sign 243 F3 (--3-56-8) left arrow sign 244 F4 (--3456-8) UK pound 245 F5 (-234-6--) two dimensional array indicator 246 F6 (1----6--) simple fraction line indicator 247 F7 (-23-56--) contraction indicator. 248 F8 (-23456--) close fraction indicator 249 F9 (-234-6-8) end of two dimensional array 250 FA (-23-56-8) approximately equals sign, single tilde over single bar. 251 FB (1234-6--) Large symbol indicator. 252 FC (123-56--) open fraction indicator 253 FD (123456--) quantity indicator 254 FE (------7-) prime mark 255 FF (---4--7-) script font symbol indicator screen-4.9.1/etc/newsyntax380000775000175000017500000000373614467014146014406 0ustar alexalex#! /bin/sh # # newsyntax38 -- update a screenrc file from 3.3 to 3.8 syntax # # Please bring your scripts up to syntax level 3.3 before running this script. # Please check all comments after running this script and watch out # for funny passages. # # * aka and shellaka are replaced by title and shelltitle. # # * Pairs of termcap and terminfo commands are folded into a single # termcapinfo command where possible. # # * trailing blanks are zapped. Unintentionally. # # 12.10.95, jnweiger, use at your own risk. # if [ $# != 1 ]; then echo "usage $0 screenrcfile" echo "" echo "The named file will be updated in place to the syntax of screen 3.8" echo "A backup copy will be written to .bak" exit 1; fi #Ultrix 4.2 /bin/sh does not handle "read a < $1" #Dean Gaudet exec < $1 read a if [ "$a" = "#3.8" ]; then echo "$1 already updated" exit 0 fi rm -f $1.old $1.dups cp $1 $1.old echo "#3.8" > $1 echo "# Do not remove the above line. This screen rc file was updated" >> $1 echo "# by the newsyntax script." >> $1 # termcap and terminfo lines can only be folded when there is no parameter # expansion in the codes. Parameters are denoted differently in # termcap and termcap syntax. Everything else is identical, I assume. # Thus codes not containing '%' can be savely folded. sed < $1.old > $1.dups \ -e 's/^\([ #]*\)aka/\1title/' \ -e 's/^\([ #]*\)shellaka/\1shelltitle/' \ -e 's/^\([ #]*\)termcap[ ][ ]*\([^%]*$\)/\1termcapinfo \2/' \ -e 's/^\([ #]*\)terminfo[ ][ ]*\([^%]*$\)/\1termcapinfo \2/' \ -e 's/\\/\\\\/g' # Oh, my bourne shell seems to gobble backslashes while reading. # Thus the sed above duplicates them in advance. # Hope this is not just another silly bash featureism. # It still zaps trailing blanks. I do not know why. But that is nice. exec < $1.dups while read a ; do if [ "$a" = "$b" ]; then case "$a" in *termcapinfo*) continue ;; esac fi echo "$a" >> $1 b="$a" done rm -f $1.dups screen-4.9.1/etc/completer.zsh0000664000175000017500000000722314467014146014760 0ustar alexalex#compdef screen #Generated by # help2simple.pl -c screen -p -f # simple2long.xsl # args.xsl # For details see: # http://www.geocities.com/f_rosencrantz/xml_completion.htm local context state line typeset -A opt_args _arguments \ "-a[Force all capabilities into each window's termcap.]" \ '-A:Adapt all windows to the new display width & height.' \ "-c:Read configuration file instead of '.screenrc'.:_files -/" \ '-d:Detach the elsewhere running screen (with -r: reattach here).:->sessionname' \ '-dmS:Start as daemon: Screen session in detached mode.' \ '-D:Detach and logout remote (with -r: reattach here).' \ '-e:Change command characters.' \ '-f-:Flow control on, -fn = off, -fa = auto.:((n\:Flow\ conrol\ off a\:Flow\ conrol\ auto))' \ '-h:Set the size of the scrollback history buffer.' \ '-i[Interrupt output sooner when flow control is on.]' \ '-l[Login mode on (update /var/run/utmp), -ln = off.]' \ '-list[Do nothing, just list our SockDir.]' \ '-ls[Do nothing, just list our SockDir.]' \ "-L[Terminal's last character can be safely updated.]" \ '-m[ignore $STY variable, do create a new screen session.]' \ '-O[Choose optimal output rather than exact vt100 emulation.]' \ '-p:Preselect the named window if it exists.' \ '-q[Quiet startup. Exits with non-zero return code if unsuccessful.]' \ '-r[Reattach to a detached screen process.]:Handling Tag sessionname:->sessionname' \ '-R[Reattach if possible, otherwise start a new session.]' \ '-s:Shell to execute rather than $SHELL.' \ '-S:Name this session .sockname instead of ...' \ "-t:Set title. (window's name)." \ '-T:Use term as $TERM for windows, rather than "screen".' \ '-U[Tell screen to use UTF-8 encoding.]' \ '-v[Print "Screen version 3.09.11beta (FAU) 11-Oct-01".]' \ '-wipe[Do nothing, just clean up SockDir.]' \ '-x[Attach to a not detached screen. (Multi display mode).]' \ '-X[Execute as a screen command in the specified session.]:Handling Tag screencmd:( acladd addacl aclchg acldel aclgrp aclumask activity allpartial at attrcolor autodetach autonuke bce bell_msg bind bindkey break breaktype bufferfile c1 caption charset chdir clear colon command compacthist console copy copy_reg crlf debug defc1 defautonuke defbce defbreaktype defcharset defescape defflow defgr defhstatus defkanji deflogin defmode defmonitor defobuflimit defscrollback defshell defsilence defslowpaste defutf8 defwrap defwritelock detach dinfo displays digraph dumptermcap echo escape exec fit flow focus gr hardcopy hardcopy_append hardcopydir hardstatus height help history hstatus info ins_reg kill lastmsg license lockscreen log logfile login logtstamp mapdefault mapnotnext maptimeout markkeys meta monitor msgminwait msgwait multiuser nethack next nonblock number obu! ! flimit only other partial password paste pastefont pow_break pow_detach pow_detach_msg prev printcmd process quit readbuf readreg redisplay register remove removebuf reset resize screen scrollback select sessionname setenv shell shelltitle silence silencewait sleep slowpaste sorendition split startup_message stuff su term termcap terminfo termcapinfo time title unsetenv utf8 vbell vbell_msg vbellwait verbose version wall width windows wrap writebuf writelock xoff xon zombie)' case $state in "sessionname") # Complete folder names. local screendir screendir=(`screen -ls | grep Socket | sed -n -e 's/\.$//' -e '$p' | awk '{print $NF;}'`) _wanted files expl 'screen process' _path_files -W screendir ;; esac screen-4.9.1/layout.c0000664000175000017500000002004514467014146013143 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "config.h" #include "screen.h" #include "extern.h" #include "layout.h" extern struct display *display; extern int captionalways; struct layout *layouts; struct layout *laytab[MAXLAY]; struct layout *layout_last, layout_last_marker; struct layout *layout_attach = &layout_last_marker; void FreeLayoutCv(struct canvas *cv) { struct canvas *cnext, *c = cv; for (; cv; cv = cnext) { if (cv->c_slperp) { FreeLayoutCv(cv->c_slperp); free(cv->c_slperp); cv->c_slperp = 0; } cnext = cv->c_slnext; cv->c_slnext = 0; if (cv != c) free(cv); } } struct layout *CreateLayout(char *title, int startat) { struct layout *lay, **pl; int i; if (startat >= MAXLAY || startat < 0) startat = 0; for (i = startat; ;) { if (!laytab[i]) break; if (++i == MAXLAY) i = 0; if (i == startat) { Msg(0, "No more layouts\n"); return 0; } } lay = (struct layout *)calloc(1, sizeof(*lay)); lay->lay_title = SaveStr(title); lay->lay_autosave = 1; lay->lay_number = i; laytab[i] = lay; lay->lay_next = 0; pl = &layouts; while (*pl) pl = &(*pl)->lay_next; *pl = lay; return lay; } void SaveLayout(char *name, struct canvas *cv) { struct layout *lay; struct canvas *fcv; for (lay = layouts; lay; lay = lay->lay_next) if (!strcmp(lay->lay_title, name)) break; if (lay) FreeLayoutCv(&lay->lay_canvas); else lay = CreateLayout(name, 0); if (!lay) return; fcv = D_forecv; DupLayoutCv(cv, &lay->lay_canvas, 1); lay->lay_forecv = D_forecv; D_forecv = fcv; D_layout = lay; } void AutosaveLayout(struct layout *lay) { struct canvas *fcv; if (!lay || !lay->lay_autosave) return; FreeLayoutCv(&lay->lay_canvas); fcv = D_forecv; DupLayoutCv(&D_canvas, &lay->lay_canvas, 1); lay->lay_forecv = D_forecv; D_forecv = fcv; } struct layout *FindLayout(char *name) { struct layout *lay; char *s; int i; for (i = 0, s = name; *s >= '0' && *s <= '9'; s++) i = i * 10 + (*s - '0'); if (!*s && s != name && i >= 0 && i < MAXLAY) return laytab[i]; for (lay = layouts; lay; lay = lay->lay_next) if (!strcmp(lay->lay_title, name)) break; return lay; } void LoadLayout(struct layout *lay, struct canvas *cv) { AutosaveLayout(D_layout); if (!lay) { while (D_canvas.c_slperp) FreeCanvas(D_canvas.c_slperp); MakeDefaultCanvas(); SetCanvasWindow(D_forecv, 0); D_layout = 0; return; } while (D_canvas.c_slperp) FreeCanvas(D_canvas.c_slperp); D_cvlist = 0; D_forecv = lay->lay_forecv; if (!D_forecv) MakeDefaultCanvas(); DupLayoutCv(&lay->lay_canvas, &D_canvas, 0); D_canvas.c_ys = (D_has_hstatus == HSTATUS_FIRSTLINE); D_canvas.c_ye = D_height - 1 - ((D_canvas.c_slperp && D_canvas.c_slperp->c_slnext) || captionalways) - (D_has_hstatus == HSTATUS_LASTLINE); ResizeCanvas(&D_canvas); RecreateCanvasChain(); RethinkDisplayViewports(); PutWindowCv(&D_canvas); ResizeLayersToCanvases(); D_layout = lay; } void NewLayout(char *title, int startat) { struct layout *lay; struct canvas *fcv; lay = CreateLayout(title, startat); if (!lay) return; if (display) { LoadLayout(0, &D_canvas); fcv = D_forecv; DupLayoutCv(&D_canvas, &lay->lay_canvas, 1); lay->lay_forecv = D_forecv; D_forecv = fcv; D_layout = lay; } else layout_attach = lay; lay->lay_autosave = 1; } static char *AddLayoutsInfo(char *buf, int len, int where) { char *s, *ss, *t; struct layout *p, **pp; int l; s = ss = buf; for (pp = laytab; pp < laytab + MAXLAY; pp++) { if (pp - laytab == where && ss == buf) ss = s; if ((p = *pp) == 0) continue; t = p->lay_title; l = strlen(t); if (l > 20) l = 20; if (s - buf + l > len - 24) break; if (s > buf) { *s++ = ' '; *s++ = ' '; } sprintf(s, "%d", p->lay_number); if (p->lay_number == where) ss = s; s += strlen(s); if (display && p == D_layout) *s++ = '*'; *s++ = ' '; strncpy(s, t, l); s += l; } *s = 0; return ss; } void ShowLayouts(int where) { char buf[1024]; char *s, *ss; if (!display) return; if (!layouts) { Msg(0, "No layouts defined\n"); return; } if (where == -1 && D_layout) where = D_layout->lay_number; ss = AddLayoutsInfo(buf, sizeof(buf), where); s = buf + strlen(buf); if (ss - buf > D_width / 2) { ss -= D_width / 2; if (s - ss < D_width) { ss = s - D_width; if (ss < buf) ss = buf; } } else ss = buf; Msg(0, "%s", ss); } void RemoveLayout(struct layout *lay) { struct layout **layp = &layouts; for (; *layp; layp = &(*layp)->lay_next) { if (*layp == lay) { *layp = lay->lay_next; break; } } laytab[lay->lay_number] = (struct layout *)0; if (display && D_layout == lay) D_layout = (struct layout *)0; FreeLayoutCv(&lay->lay_canvas); if (lay->lay_title) free(lay->lay_title); free(lay); if (layouts) LoadLayout((display && D_layout) ? D_layout : *layp ? *layp : layouts, display ? &D_canvas : (struct canvas *)0); Activate(0); } void UpdateLayoutCanvas(struct canvas *cv, struct win * wi) { for (; cv; cv = cv->c_slnext) { if (cv->c_layer && Layer2Window(cv->c_layer) == wi) { /* A simplistic version of SetCanvasWindow(cv, 0) */ struct layer *l = cv->c_layer; cv->c_layer = 0; if (l->l_cvlist == 0 && (wi == 0 || l != wi->w_savelayer)) KillLayerChain(l); l = &cv->c_blank; l->l_data = 0; if (l->l_cvlist != cv) { cv->c_lnext = l->l_cvlist; l->l_cvlist = cv; } cv->c_layer = l; /* Do not end here. Multiple canvases can have the same window */ } if (cv->c_slperp) UpdateLayoutCanvas(cv->c_slperp, wi); } } static void dump_canvas(struct canvas *cv, FILE *file) { struct canvas *c; for (c = cv->c_slperp; c && c->c_slnext; c = c->c_slnext) fprintf(file, "split%s\n", c->c_slorient == SLICE_HORI ? " -v" : ""); for (c = cv->c_slperp; c; c = c->c_slnext) { if (c->c_slperp) dump_canvas(c, file); else fprintf(file, "focus\n"); } } int LayoutDumpCanvas(struct canvas *cv, char *filename) { FILE *file = secfopen(filename, "a"); if (!file) return 0; dump_canvas(cv, file); fclose(file); return 1; } void RenameLayout(struct layout *layout, const char *name) { free(layout->lay_title); layout->lay_title = SaveStr(name); } int RenumberLayout(struct layout *layout, int number) { int old; struct layout *lay; old = layout->lay_number; if (number < 0 || number >= MAXLAY) return 0; lay = laytab[number]; laytab[number] = layout; layout->lay_number = number; laytab[old] = lay; if (lay) lay->lay_number = old; return 1; } screen-4.9.1/NEWS.3.90000664000175000017500000001512314467014146012472 0ustar alexalex ------------------------------- What's new in screen-3.9.15 ? ------------------------------- * unicode combining character support * new encoding: Chinese GBK * new 'backtick' command and string escape to embed command output into e.g. the hardstatus line ------------------------------- What's new in screen-3.9.13 ? ------------------------------- * altscreen support from Gurusamy Sarathy * new command "maxwin" to set a limit on the number of windows * new keys in copy&paste mode: 'B' and 'E' ------------------------------- What's new in screen-3.9.11 ? ------------------------------- * windowlist, bound to ^A" * support for other encodings, e.g. big5, koi8r, cp1251 new commands 'encoding', 'defencoding' 'register', 'readreg', 'readbuf', 'writebuf' now understand an extra encoding parameter * support for double UTF-8 characters * lots of new string escapes and extensions to existing ones: %LD, %LM, %Lw, %W, %-w, %+w, %H, %f, %F, %l, %=, %<, %> * new commands: 'source', 'eval', 'deflog', 'ignorecase', 'setsid' * command key classes: 'bind', 'command' and 'help' understand a '-c ' parameter. See the man page for examples * new login state: always - don't remove slot even if screen gets detached * 256 color support (experimental) * configurable time format string (for ^At) * config option to use localized month/week names * new option '-h' for hardcopy: also dump the scrollback buffer ------------------------------ What's new in screen-3.9.9 ? ------------------------------ * new '-X' option to send commands to screen sessions. screen -X echo Hi... * added a possibility to change the attributes/color in caption or hardstatus strings: caption always "%3n %{r}%t%{-}%? @%u%?%? %{g}[%h]%{-}%?" * new 'dinfo' command to show what screen thinks about your terminal. * new 'attrcolor' command to map attributes to color codes: attrcolor u "-u b" attrcolor b "r" * support for UTF-8: new commands 'utf8', 'defutf8' to change the encoding of a window, plus a '-U' option to tell screen that your terminal sends/receives UTF-8 codes. * support for 16 colors. ------------------------------ What's new in screen-3.9.8 ? ------------------------------ * new command 'resize' to resize regions (aka split windows), try: bind = resize = bind + resize +1 bind - resize -1 bind _ resize max * new argument for 'focus': up, down, top, bottom * X11 mouse tracking support * Support for the "new color model", aka "background color erase": the bce/defbce commands change the color model of the current window/new windows. * experimental rxvt OSC sequence support (used to set a background picture or to change the default colors), disabled by default. ---------------------------- What's new in screen-3.9 ? ---------------------------- * real multiuser support A window can now be displayed on more than one attached displays. Screen does all the necessary clipping if the window size doesn't fit the display. New command: ^AF - fit the window size into the display size. * split screen support A display may now host multiple windows. New commands: ^AS - split horizontally. This add another region to the display ^A - move the focus to the next region ^AX - kill the current region ^AQ - kill all other regions * hardstatus emulation support The last line of the display may now be used as a hardstatus line if the terminal doesn't have the 'hs' capability. New commands: hardstatus [always]lastline hardstatus [always]message hardstatus [always]ignore * configurable window separator and hardstatus strings The window (region) separator and the hardstatus can be set to an arbitrary string containing screen's % escape sequences. The window's hardstatus is just another escape sequence, '%h'. New commands: hardstatus string [string] caption string [string] The default strings are "%h" (hardstatus) and "%3n %t" (caption). * permanent window separator The window separator can be set to stay on screen even if the display contains only one region New commands: caption always caption splitonly * many new escapes %c - current time HH:MM (*CHANGE*: this was %w in screen-3.7) %C - current time HH:MM in 24h format %l - the load of the system %h - hardstatus of the window %w - all window names %W - all window names except the current window %u - all other users on this window %? - the part to the next %? is displayed only if an escape expands to an nonempty string. %: - "else" part of %? Some escapes like %c may be qualified with a '0' (like %0c) to make screen use '0' instead of space as a filler. Others understand a length qualifier, like %3n. If escapes like the current time are used as hardstatus/caption string screen will update them so that you can always have the current time onscreen. *CHANGE* ~ is no longer used as bell character, use ^G instead! * logfile timestamps and flush timeout New commands: logfile flush logtstamp [on|off] logtstamp string [string] logtstamp after [secs] * configurable breaktype You can now choose one of TIOCSBRK, TCSBRK, tcsendbreak. New commands: breaktype defbreaktype * other new commands: hstatus - set the window's hardstatus defslowpaste defsilence * optional builtin telnet. This is useful if screen is used as frontend to a terminal multiplexor. Use //telnet to access the builtin telnet program, as in: 'screen //telnet host [port]' * remote detach and reattach change: '-d' is now ignored if the screen is already detached and you want to reattach. You can also use '-RR' to make screen use the first session found if more than one session is available. Thus '-d -RR' or '-x -RR' always gets you a screen. * support for history compaction You can tell screen to suppress trailing blank lines when scrolling up text into the history buffer. (Wayne Davison) New command: compacthist * optional Braille support. If you can read Braille and have one of the devices listed in README.DOTSCREEN, please compile with -DHAVE_BRAILLE and let us know if this feature is useful. screen-4.9.1/image.h0000664000175000017500000001626414467014146012725 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #undef IFFONT #undef IFCOLOR #ifdef FONT # define IFFONT(x) x # define IFFONTX(x) x #else # define IFFONT(x) # define IFFONTX(x) #endif #ifdef COLOR # define IFCOLOR(x) x #else # define IFCOLOR(x) #endif #if defined(COLOR) && defined(COLORS16) && defined(COLORS256) # define IFCOLORX(x) x #else # define IFCOLORX(x) #endif #ifdef DW_CHARS # define IFDWCHAR(x) x #else # define IFDWCHAR(x) #endif struct mchar { unsigned char image; unsigned char attr; IFFONT( unsigned char font; ) IFFONTX( unsigned char fontx; ) IFCOLOR( unsigned char color; ) IFCOLORX(unsigned char colorx; ) IFDWCHAR(unsigned char mbcs; ) }; struct mline { unsigned char *image; unsigned char *attr; IFFONT( unsigned char *font; ) IFFONTX( unsigned char *fontx; ) IFCOLOR( unsigned char *color; ) IFCOLORX(unsigned char *colorx; ) }; #define save_mline(ml, n) do { \ bcopy((char *)(ml)->image, (char *)mline_old.image, (n)); \ bcopy((char *)(ml)->attr, (char *)mline_old.attr, (n)); \ IFFONT( bcopy((char *)(ml)->font, (char *)mline_old.font, (n)); ) \ IFFONTX( bcopy((char *)(ml)->fontx, (char *)mline_old.fontx, (n)); ) \ IFCOLOR( bcopy((char *)(ml)->color, (char *)mline_old.color, (n)); ) \ IFCOLORX(bcopy((char *)(ml)->colorx, (char *)mline_old.colorx, (n)); ) \ } while (0) #define bcopy_mline(ml, xf, xt, n) do { \ bcopy((char *)(ml)->image + (xf), (char *)(ml)->image + (xt), (n)); \ bcopy((char *)(ml)->attr + (xf), (char *)(ml)->attr + (xt), (n)); \ IFFONT( bcopy((char *)(ml)->font + (xf), (char *)(ml)->font + (xt), (n)); ) \ IFFONTX( bcopy((char *)(ml)->fontx + (xf), (char *)(ml)->fontx + (xt), (n)); ) \ IFCOLOR( bcopy((char *)(ml)->color + (xf), (char *)(ml)->color + (xt), (n)); ) \ IFCOLORX(bcopy((char *)(ml)->colorx + (xf), (char *)(ml)->colorx + (xt), (n));) \ } while (0) #define clear_mline(ml, x, n) do { \ bclear((char *)(ml)->image + (x), (n)); \ if ((ml)->attr != null) bzero((char *)(ml)->attr + (x), (n)); \ IFFONT( if ((ml)->font != null) bzero((char *)(ml)->font + (x), (n)); ) \ IFFONTX( if ((ml)->fontx != null) bzero((char *)(ml)->fontx + (x), (n)); ) \ IFCOLOR( if ((ml)->color!= null) bzero((char *)(ml)->color + (x), (n)); ) \ IFCOLORX(if ((ml)->colorx!= null) bzero((char *)(ml)->colorx + (x), (n)); ) \ } while (0) #define cmp_mline(ml1, ml2, x) ( \ (ml1)->image[x] == (ml2)->image[x] \ && (ml1)->attr[x] == (ml2)->attr[x] \ IFFONT( && (ml1)->font[x] == (ml2)->font[x] ) \ IFFONTX( && (ml1)->fontx[x] == (ml2)->fontx[x] ) \ IFCOLOR( && (ml1)->color[x] == (ml2)->color[x] ) \ IFCOLORX(&& (ml1)->colorx[x] == (ml2)->colorx[x] ) \ ) #define cmp_mchar(mc1, mc2) ( \ (mc1)->image == (mc2)->image \ && (mc1)->attr == (mc2)->attr \ IFFONT( && (mc1)->font == (mc2)->font ) \ IFFONTX( && (mc1)->fontx == (mc2)->fontx ) \ IFCOLOR( && (mc1)->color == (mc2)->color ) \ IFCOLORX(&& (mc1)->colorx == (mc2)->colorx ) \ ) #define cmp_mchar_mline(mc, ml, x) ( \ (mc)->image == (ml)->image[x] \ && (mc)->attr == (ml)->attr[x] \ IFFONT( && (mc)->font == (ml)->font[x] ) \ IFFONTX( && (mc)->fontx == (ml)->fontx[x] ) \ IFCOLOR( && (mc)->color == (ml)->color[x] ) \ IFCOLORX(&& (mc)->colorx == (ml)->colorx[x] ) \ ) #define copy_mchar2mline(mc, ml, x) do { \ (ml)->image[x] = (mc)->image; \ (ml)->attr[x] = (mc)->attr; \ IFFONT( (ml)->font[x] = (mc)->font; ) \ IFFONTX( (ml)->fontx[x] = (mc)->fontx; ) \ IFCOLOR( (ml)->color[x] = (mc)->color; ) \ IFCOLORX((ml)->colorx[x] = (mc)->colorx; ) \ } while (0) #define copy_mline2mchar(mc, ml, x) do { \ (mc)->image = (ml)->image[x]; \ (mc)->attr = (ml)->attr[x]; \ IFFONT( (mc)->font = (ml)->font[x]; ) \ IFFONTX( (mc)->fontx = (ml)->fontx[x]; ) \ IFCOLOR( (mc)->color = (ml)->color[x]; ) \ IFCOLORX((mc)->colorx = (ml)->colorx[x]; ) \ IFDWCHAR((mc)->mbcs = 0; ) \ } while (0) #ifdef COLOR # ifdef COLORS16 # ifdef COLORS256 # define rend_getbg(mc) (((mc)->color & 0xf0) >> 4 | ((mc)->attr & A_BBG ? 0x100 : 0) | ((mc)->colorx & 0xf0)) # define rend_setbg(mc, c) ((mc)->color = ((mc)->color & 0x0f) | (c << 4 & 0xf0), (mc)->colorx = ((mc)->colorx & 0x0f) | (c & 0xf0), (mc)->attr = ((mc)->attr | A_BBG) ^ (c & 0x100 ? 0 : A_BBG)) # define rend_getfg(mc) (((mc)->color & 0x0f) | ((mc)->attr & A_BFG ? 0x100 : 0) | (((mc)->colorx & 0x0f) << 4)) # define rend_setfg(mc, c) ((mc)->color = ((mc)->color & 0xf0) | (c & 0x0f), (mc)->colorx = ((mc)->colorx & 0xf0) | ((c & 0xf0) >> 4), (mc)->attr = ((mc)->attr | A_BFG) ^ (c & 0x100 ? 0 : A_BFG)) # define rend_setdefault(mc) ((mc)->color = (mc)->colorx = 0, (mc)->attr &= ~(A_BBG|A_BFG)) # else # define rend_getbg(mc) (((mc)->color & 0xf0) >> 4 | ((mc)->attr & A_BBG ? 0x100 : 0)) # define rend_setbg(mc, c) ((mc)->color = ((mc)->color & 0x0f) | (c << 4 & 0xf0), (mc)->attr = ((mc)->attr | A_BBG) ^ (c & 0x100 ? 0 : A_BBG)) # define rend_getfg(mc) (((mc)->color & 0x0f) | ((mc)->attr & A_BFG ? 0x100 : 0)) # define rend_setfg(mc, c) ((mc)->color = ((mc)->color & 0xf0) | (c & 0x0f), (mc)->attr = ((mc)->attr | A_BFG) ^ (c & 0x100 ? 0 : A_BFG)) # define rend_setdefault(mc) ((mc)->color = 0, (mc)->attr &= ~(A_BBG|A_BFG)) # endif # define coli2e(c) ((((c) & 0x1f8) == 0x108 ? (c) ^ 0x108 : (c & 0xff)) ^ 9) # define cole2i(c) ((c) >= 8 && (c) < 16 ? (c) ^ 0x109 : (c) ^ 9) # else # define rend_getbg(mc) (((mc)->color & 0xf0) >> 4) # define rend_setbg(mc, c) ((mc)->color = ((mc)->color & 0x0f) | (c << 4 & 0xf0)) # define rend_getfg(mc) ((mc)->color & 0x0f) # define rend_setfg(mc, c) ((mc)->color = ((mc)->color & 0xf0) | (c & 0x0f)) # define rend_setdefault(mc) ((mc)->color = 0) # define coli2e(c) ((c) ^ 9) # define cole2i(c) ((c) ^ 9) # endif #endif enum { REND_BELL = 0, REND_MONITOR, REND_SILENCE, NUM_RENDS }; screen-4.9.1/ansi.c0000664000175000017500000021252014467014146012561 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include #ifndef sun /* we want to know about TIOCPKT. */ # include #endif #include "config.h" #include "screen.h" #include "braille.h" #include "extern.h" #include "logfile.h" extern struct display *display, *displays; extern struct win *fore; /* for 83 escape */ extern struct layer *flayer; /* for 83 escape */ extern struct NewWindow nwin_default; /* for ResetWindow() */ extern int nversion; /* numerical version of screen */ extern int log_flush, logtstamp_on, logtstamp_after; extern char *logtstamp_string; extern char *captionstring; extern char *hstatusstring; extern char *wliststr; #ifdef COPY_PASTE extern int compacthist; #endif #ifdef MULTIUSER extern struct acluser *EffectiveAclUser; #endif /* widths for Z0/Z1 switching */ const int Z0width = 132; const int Z1width = 80; /* globals set in WriteString */ static struct win *curr; /* window we are working on */ static int rows, cols; /* window size of the curr window */ int visual_bell = 0; int use_hardstatus = 1; /* display status line in hs */ char *printcmd = 0; int use_altscreen = 0; /* enable alternate screen support? */ unsigned char *blank; /* line filled with spaces */ unsigned char *null; /* line filled with '\0' */ struct mline mline_old; struct mline mline_blank; struct mline mline_null; struct mchar mchar_null; struct mchar mchar_blank = {' ' /* , 0, 0, ... */}; struct mchar mchar_so = {' ', A_SO /* , 0, 0, ... */}; int renditions[NUM_RENDS] = {65529 /* =ub */, 65531 /* =b */, 65533 /* =u */ }; /* keep string_t and string_t_string in sync! */ static char *string_t_string[] = { "NONE", "DCS", /* Device control string */ "OSC", /* Operating system command */ "APC", /* Application program command */ /* - used for status change */ "PM", /* Privacy message */ "AKA", /* title for current screen */ "GM", /* Global message to every display */ "STATUS" /* User hardstatus line */ }; /* keep state_t and state_t_string in sync! */ static char *state_t_string[] = { "LIT", /* Literal input */ "ESC", /* Start of escape sequence */ "ASTR", /* Start of control string */ "STRESC", /* ESC seen in control string */ "CSI", /* Reading arguments in "CSI Pn ;...*/ "PRIN", /* Printer mode */ "PRINESC", /* ESC seen in printer mode */ "PRINCSI", /* CSI seen in printer mode */ "PRIN4" /* CSI 4 seen in printer mode */ }; static int Special __P((int)); static void DoESC __P((int, int)); static void DoCSI __P((int, int)); static void StringStart __P((enum string_t)); static void StringChar __P((int)); static int StringEnd __P((void)); static void PrintStart __P((void)); static void PrintChar __P((int)); static void PrintFlush __P((void)); #ifdef FONT static void DesignateCharset __P((int, int)); static void MapCharset __P((int)); static void MapCharsetR __P((int)); #endif static void SaveCursor __P((struct cursor *)); static void RestoreCursor __P((struct cursor *)); static void BackSpace __P((void)); static void Return __P((void)); static void LineFeed __P((int)); static void ReverseLineFeed __P((void)); static void InsertChar __P((int)); static void DeleteChar __P((int)); static void DeleteLine __P((int)); static void InsertLine __P((int)); static void Scroll __P((char *, int, int, char *)); static void ForwardTab __P((void)); static void BackwardTab __P((void)); static void ClearScreen __P((void)); static void ClearFromBOS __P((void)); static void ClearToEOS __P((void)); static void ClearLineRegion __P((int, int)); static void CursorRight __P((int)); static void CursorUp __P((int)); static void CursorDown __P((int)); static void CursorLeft __P((int)); static void ASetMode __P((int)); static void SelectRendition __P((void)); static void RestorePosRendition __P((void)); static void FillWithEs __P((void)); static void FindAKA __P((void)); static void Report __P((char *, int, int)); static void ScrollRegion __P((int)); #ifdef COPY_PASTE static void WAddLineToHist __P((struct win *, struct mline *)); #endif static void WLogString __P((struct win *, char *, int)); static void WReverseVideo __P((struct win *, int)); static int WindowChangedCheck __P((char *, int, int *)); static void MFixLine __P((struct win *, int, struct mchar *)); static void MScrollH __P((struct win *, int, int, int, int, int)); static void MScrollV __P((struct win *, int, int, int, int)); static void MClearArea __P((struct win *, int, int, int, int, int)); static void MInsChar __P((struct win *, struct mchar *, int, int)); static void MPutChar __P((struct win *, struct mchar *, int, int)); static void MPutStr __P((struct win *, char *, int, struct mchar *, int, int)); static void MWrapChar __P((struct win *, struct mchar *, int, int, int, int)); #ifdef COLOR static void MBceLine __P((struct win *, int, int, int, int)); #endif #ifdef COLOR # define CURR_BCE (curr->w_bce ? rend_getbg(&curr->w_rend) : 0) #else # define CURR_BCE 0 #endif void ResetAnsiState(p) struct win *p; { p->w_state = LIT; p->w_StringType = NONE; } void ResetWindow(p) register struct win *p; { register int i; p->w_wrap = nwin_default.wrap; p->w_origin = 0; p->w_insert = 0; p->w_revvid = 0; p->w_mouse = 0; p->w_curinv = 0; p->w_curvvis = 0; p->w_autolf = 0; p->w_keypad = 0; p->w_cursorkeys = 0; p->w_top = 0; p->w_bot = p->w_height - 1; p->w_saved.on = 0; p->w_x = p->w_y = 0; p->w_state = LIT; p->w_StringType = NONE; bzero(p->w_tabs, p->w_width); for (i = 8; i < p->w_width; i += 8) p->w_tabs[i] = 1; p->w_rend = mchar_null; #ifdef FONT ResetCharsets(p); #endif #ifdef COLOR p->w_bce = nwin_default.bce; #endif } /* adds max 22 bytes */ int GetAnsiStatus(w, buf) struct win *w; char *buf; { char *p = buf; if (w->w_state == LIT) return 0; strcpy(p, state_t_string[w->w_state]); p += strlen(p); if (w->w_intermediate) { *p++ = '-'; if (w->w_intermediate > 0xff) p += AddXChar(p, w->w_intermediate >> 8); p += AddXChar(p, w->w_intermediate & 0xff); *p = 0; } if (w->w_state == ASTR || w->w_state == STRESC) sprintf(p, "-%s", string_t_string[w->w_StringType]); p += strlen(p); return p - buf; } #ifdef FONT void ResetCharsets(p) struct win *p; { p->w_gr = nwin_default.gr; p->w_c1 = nwin_default.c1; SetCharsets(p, "BBBB02"); if (nwin_default.charset) SetCharsets(p, nwin_default.charset); #ifdef ENCODINGS ResetEncoding(p); #endif } void SetCharsets(p, s) struct win *p; char *s; { int i; for (i = 0; i < 4 && *s; i++, s++) if (*s != '.') p->w_charsets[i] = ((*s == 'B') ? ASCII : *s); if (*s && *s++ != '.') p->w_Charset = s[-1] - '0'; if (*s && *s != '.') p->w_CharsetR = *s - '0'; p->w_ss = 0; p->w_FontL = p->w_charsets[p->w_Charset]; p->w_FontR = p->w_charsets[p->w_CharsetR]; } #endif /* FONT */ /*****************************************************************/ /* * Here comes the vt100 emulator * - writes logfiles, * - sets timestamp and flags activity in window. * - record program output in window scrollback * - translate program output for the display and put it into the obuf. * */ void WriteString(wp, buf, len) struct win *wp; register char *buf; register int len; { register int c; #ifdef FONT register int font; #endif struct canvas *cv; if (!len) return; if (wp->w_log) WLogString(wp, buf, len); /* set global variables (yuck!) */ curr = wp; cols = curr->w_width; rows = curr->w_height; if (curr->w_silence) SetTimeout(&curr->w_silenceev, curr->w_silencewait * 1000); if (curr->w_monitor == MON_ON) { debug2("ACTIVITY %d %d\n", curr->w_monitor, curr->w_bell); curr->w_monitor = MON_FOUND; } if (cols > 0 && rows > 0) { do { c = (unsigned char)*buf++; #ifdef FONT # ifdef DW_CHARS if (!curr->w_mbcs) # endif curr->w_rend.font = curr->w_FontL; /* Default: GL */ #endif /* The next part is only for speedup */ if (curr->w_state == LIT && #ifdef UTF8 curr->w_encoding != UTF8 && #endif #ifdef DW_CHARS !is_dw_font(curr->w_rend.font) && # ifdef ENCODINGS curr->w_rend.font != KANA && !curr->w_mbcs && # endif #endif #ifdef FONT curr->w_rend.font != '<' && #endif c >= ' ' && c != 0x7f && ((c & 0x80) == 0 || ((c >= 0xa0 || !curr->w_c1) && !curr->w_gr)) && !curr->w_ss && !curr->w_insert && curr->w_x < cols - 1) { register int currx = curr->w_x; char *imp = buf - 1; while (currx < cols - 1) { currx++; if (--len == 0) break; c = (unsigned char)*buf++; if (c < ' ' || c == 0x7f || ((c & 0x80) && ((c < 0xa0 && curr->w_c1) || curr->w_gr))) break; } currx -= curr->w_x; if (currx > 0) { MPutStr(curr, imp, currx, &curr->w_rend, curr->w_x, curr->w_y); LPutStr(&curr->w_layer, imp, currx, &curr->w_rend, curr->w_x, curr->w_y); curr->w_x += currx; } if (len == 0) break; } /* end of speedup code */ #ifdef UTF8 if (curr->w_encoding == UTF8) { c = FromUtf8(c, &curr->w_decodestate); if (c == -1) continue; if (c == -2) { c = UCS_REPL; /* try char again */ buf--; len++; } if (c > 0xff) debug1("read UNICODE %04x\n", c); } #endif tryagain: switch (curr->w_state) { case PRIN: switch (c) { case '\033': curr->w_state = PRINESC; break; default: PrintChar(c); } break; case PRINESC: switch (c) { case '[': curr->w_state = PRINCSI; break; default: PrintChar('\033'); PrintChar(c); curr->w_state = PRIN; } break; case PRINCSI: switch (c) { case '4': curr->w_state = PRIN4; break; default: PrintChar('\033'); PrintChar('['); PrintChar(c); curr->w_state = PRIN; } break; case PRIN4: switch (c) { case 'i': curr->w_state = LIT; PrintFlush(); if (curr->w_pdisplay && curr->w_pdisplay->d_printfd >= 0) { close(curr->w_pdisplay->d_printfd); curr->w_pdisplay->d_printfd = -1; } curr->w_pdisplay = 0; break; default: PrintChar('\033'); PrintChar('['); PrintChar('4'); PrintChar(c); curr->w_state = PRIN; } break; case ASTR: if (c == 0) break; if (c == '\033') { curr->w_state = STRESC; break; } /* special xterm hack: accept SetStatus sequence. Yucc! */ /* allow ^E for title escapes */ if (!(curr->w_StringType == OSC && c < ' ' && c != '\005')) if (!curr->w_c1 || c != ('\\' ^ 0xc0)) { StringChar(c); break; } c = '\\'; /* FALLTHROUGH */ case STRESC: switch (c) { case '\\': if (StringEnd() == 0 || len <= 1) break; /* check if somewhere a status is displayed */ for (cv = curr->w_layer.l_cvlist; cv; cv = cv->c_lnext) { display = cv->c_display; if (D_status == STATUS_ON_WIN) break; } if (cv) { if (len > IOSIZE + 1) len = IOSIZE + 1; curr->w_outlen = len - 1; bcopy(buf, curr->w_outbuf, len - 1); return; /* wait till status is gone */ } break; case '\033': StringChar('\033'); break; default: curr->w_state = ASTR; StringChar('\033'); StringChar(c); break; } break; case ESC: switch (c) { case '[': curr->w_NumArgs = 0; curr->w_intermediate = 0; bzero((char *) curr->w_args, MAXARGS * sizeof(int)); curr->w_state = CSI; break; case ']': StringStart(OSC); break; case '_': StringStart(APC); break; case 'P': StringStart(DCS); break; case '^': StringStart(PM); break; case '!': StringStart(GM); break; case '"': case 'k': StringStart(AKA); break; default: if (Special(c)) { curr->w_state = LIT; break; } debug1("not special. c = %x\n", c); if (c >= ' ' && c <= '/') { if (curr->w_intermediate) { #ifdef DW_CHARS if (curr->w_intermediate == '$') c |= '$' << 8; else #endif c = -1; } curr->w_intermediate = c; } else if (c >= '0' && c <= '~') { DoESC(c, curr->w_intermediate); curr->w_state = LIT; } else { curr->w_state = LIT; goto tryagain; } } break; case CSI: switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (curr->w_NumArgs >= 0 && curr->w_NumArgs < MAXARGS) { if (curr->w_args[curr->w_NumArgs] < 100000000) curr->w_args[curr->w_NumArgs] = 10 * curr->w_args[curr->w_NumArgs] + (c - '0'); } break; case ';': case ':': if (curr->w_NumArgs < MAXARGS) curr->w_NumArgs++; break; default: if (Special(c)) break; if (c >= '@' && c <= '~') { if (curr->w_NumArgs < MAXARGS) curr->w_NumArgs++; DoCSI(c, curr->w_intermediate); if (curr->w_state != PRIN) curr->w_state = LIT; } else if ((c >= ' ' && c <= '/') || (c >= '<' && c <= '?')) curr->w_intermediate = curr->w_intermediate ? -1 : c; else { curr->w_state = LIT; goto tryagain; } } break; case LIT: default: #ifdef DW_CHARS if (curr->w_mbcs) if (c <= ' ' || c == 0x7f || (c >= 0x80 && c < 0xa0 && curr->w_c1)) curr->w_mbcs = 0; #endif if (c < ' ') { if (c == '\033') { curr->w_intermediate = 0; curr->w_state = ESC; if (curr->w_autoaka < 0) curr->w_autoaka = 0; } else Special(c); break; } if (c >= 0x80 && c < 0xa0 && curr->w_c1) #ifdef FONT if ((curr->w_FontR & 0xf0) != 0x20 # ifdef UTF8 || curr->w_encoding == UTF8 # endif ) #endif { switch (c) { case 0xc0 ^ 'D': case 0xc0 ^ 'E': case 0xc0 ^ 'H': case 0xc0 ^ 'M': case 0xc0 ^ 'N': /* SS2 */ case 0xc0 ^ 'O': /* SS3 */ DoESC(c ^ 0xc0, 0); break; case 0xc0 ^ '[': if (curr->w_autoaka < 0) curr->w_autoaka = 0; curr->w_NumArgs = 0; curr->w_intermediate = 0; bzero((char *) curr->w_args, MAXARGS * sizeof(int)); curr->w_state = CSI; break; case 0xc0 ^ 'P': StringStart(DCS); break; default: break; } break; } #ifdef FONT # ifdef DW_CHARS if (!curr->w_mbcs) { # endif if (c < 0x80 || curr->w_gr == 0) curr->w_rend.font = curr->w_FontL; # ifdef ENCODINGS else if (curr->w_gr == 2 && !curr->w_ss) curr->w_rend.font = curr->w_FontE; # endif else curr->w_rend.font = curr->w_FontR; # ifdef DW_CHARS } # endif # ifdef UTF8 if (curr->w_encoding == UTF8) { if (curr->w_rend.font == '0') { struct mchar mc, *mcp; debug1("SPECIAL %x\n", c); mc.image = c; mc.mbcs = 0; mc.font = '0'; mc.fontx = 0; mcp = recode_mchar(&mc, 0, UTF8); debug2("%02x %02x\n", mcp->image, mcp->font); c = mcp->image | mcp->font << 8; } curr->w_rend.font = 0; } if (curr->w_encoding == UTF8 && c >= 0x0300 && utf8_iscomb(c)) { int ox, oy; struct mchar omc; ox = curr->w_x - 1; oy = curr->w_y; if (ox < 0) { ox = curr->w_width - 1; oy--; } if (oy < 0) oy = 0; copy_mline2mchar(&omc, &curr->w_mlines[oy], ox); if (omc.image == 0xff && omc.font == 0xff && omc.fontx == 0) { ox--; if (ox >= 0) { copy_mline2mchar(&omc, &curr->w_mlines[oy], ox); omc.mbcs = 0xff; } } if (ox >= 0) { utf8_handle_comb(c, &omc); MFixLine(curr, oy, &omc); copy_mchar2mline(&omc, &curr->w_mlines[oy], ox); LPutChar(&curr->w_layer, &omc, ox, oy); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } break; } # ifdef DW_CHARS if (curr->w_encoding == UTF8 && utf8_isdouble(c)) curr->w_mbcs = 0xff; # endif font = curr->w_rend.font; # endif # ifdef DW_CHARS # ifdef ENCODINGS if (font == KANA && curr->w_encoding == SJIS && curr->w_mbcs == 0) { /* Lets see if it is the first byte of a kanji */ debug1("%x may be first of SJIS\n", c); if ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xef)) { debug("YES!\n"); curr->w_mbcs = c; break; } } # endif if (font == 031 && c == 0x80 && !curr->w_mbcs) font = curr->w_rend.font = 0; if (is_dw_font(font) && c == ' ') font = curr->w_rend.font = 0; if (is_dw_font(font) || curr->w_mbcs) { int t = c; if (curr->w_mbcs == 0) { curr->w_mbcs = c; break; } if (curr->w_x == cols - 1) { curr->w_x += curr->w_wrap ? 1 : -1; debug1("Patched w_x to %d\n", curr->w_x); } # ifdef UTF8 if (curr->w_encoding != UTF8) # endif { c = curr->w_mbcs; # ifdef ENCODINGS if (font == KANA && curr->w_encoding == SJIS) { debug2("SJIS !! %x %x\n", c, t); /* * SJIS -> EUC mapping: * First byte: * 81,82...9f -> 21,23...5d * e0,e1...ef -> 5f,61...7d * Second byte: * 40-7e -> 21-5f * 80-9e -> 60-7e * 9f-fc -> 21-7e (increment first byte!) */ if (0x40 <= t && t <= 0xfc && t != 0x7f) { if (c <= 0x9f) c = (c - 0x81) * 2 + 0x21; else c = (c - 0xc1) * 2 + 0x21; if (t <= 0x7e) t -= 0x1f; else if (t <= 0x9e) t -= 0x20; else t -= 0x7e, c++; curr->w_rend.font = KANJI; } else { /* Incomplete shift-jis - skip first byte */ c = t; t = 0; } debug2("SJIS after %x %x\n", c, t); } # endif if (t && curr->w_gr && font != 030 && font != 031) { t &= 0x7f; if (t < ' ') goto tryagain; } if (t == '\177') break; curr->w_mbcs = t; } } # endif /* DW_CHARS */ if (font == '<' && c >= ' ') { font = curr->w_rend.font = 0; c |= 0x80; } # ifdef UTF8 else if (curr->w_gr && curr->w_encoding != UTF8) # else else if (curr->w_gr) # endif { #ifdef ENCODINGS if (c == 0x80 && font == 0 && curr->w_encoding == GBK) c = 0xa4; else c &= 0x7f; if (c < ' ' && font != 031) goto tryagain; #else c &= 0x7f; if (c < ' ') /* this is ugly but kanji support */ goto tryagain; /* prevents nicer programming */ #endif } #endif /* FONT */ if (c == '\177') break; curr->w_rend.image = c; #ifdef UTF8 if (curr->w_encoding == UTF8) { curr->w_rend.font = c >> 8; curr->w_rend.fontx = c >> 16; } #endif #ifdef DW_CHARS curr->w_rend.mbcs = curr->w_mbcs; #endif if (curr->w_x < cols - 1) { if (curr->w_insert) { save_mline(&curr->w_mlines[curr->w_y], cols); MInsChar(curr, &curr->w_rend, curr->w_x, curr->w_y); LInsChar(&curr->w_layer, &curr->w_rend, curr->w_x, curr->w_y, &mline_old); curr->w_x++; } else { MPutChar(curr, &curr->w_rend, curr->w_x, curr->w_y); LPutChar(&curr->w_layer, &curr->w_rend, curr->w_x, curr->w_y); curr->w_x++; } } else if (curr->w_x == cols - 1) { MPutChar(curr, &curr->w_rend, curr->w_x, curr->w_y); LPutChar(&curr->w_layer, &curr->w_rend, curr->w_x, curr->w_y); if (curr->w_wrap) curr->w_x++; } else { MWrapChar(curr, &curr->w_rend, curr->w_y, curr->w_top, curr->w_bot, curr->w_insert); LWrapChar(&curr->w_layer, &curr->w_rend, curr->w_y, curr->w_top, curr->w_bot, curr->w_insert); if (curr->w_y != curr->w_bot && curr->w_y != curr->w_height - 1) curr->w_y++; curr->w_x = 1; } #ifdef FONT # ifdef DW_CHARS if (curr->w_mbcs) { curr->w_rend.mbcs = curr->w_mbcs = 0; curr->w_x++; } # endif if (curr->w_ss) { curr->w_FontL = curr->w_charsets[curr->w_Charset]; curr->w_FontR = curr->w_charsets[curr->w_CharsetR]; curr->w_rend.font = curr->w_FontL; LSetRendition(&curr->w_layer, &curr->w_rend); curr->w_ss = 0; } #endif /* FONT */ break; } } while (--len); } if (!printcmd && curr->w_state == PRIN) PrintFlush(); } static void WLogString(p, buf, len) struct win *p; char *buf; int len; { if (!p->w_log) return; if (logtstamp_on && p->w_logsilence >= logtstamp_after * 2) { char *t = MakeWinMsg(logtstamp_string, p, '%'); logfwrite(p->w_log, t, strlen(t)); /* long time no write */ } p->w_logsilence = 0; if (logfwrite(p->w_log, buf, len) < 1) { WMsg(p, errno, "Error writing logfile"); logfclose(p->w_log); p->w_log = 0; } if (!log_flush) logfflush(p->w_log); } static int Special(c) register int c; { switch (c) { case '\b': BackSpace(); return 1; case '\r': Return(); return 1; case '\n': if (curr->w_autoaka) FindAKA(); case '\013': /* Vertical tab is the same as Line Feed */ LineFeed(0); return 1; case '\007': WBell(curr, visual_bell); return 1; case '\t': ForwardTab(); return 1; #ifdef FONT case '\017': /* SI */ MapCharset(G0); return 1; case '\016': /* SO */ MapCharset(G1); return 1; #endif } return 0; } static void DoESC(c, intermediate) int c, intermediate; { debug2("DoESC: %x - inter = %x\n", c, intermediate); switch (intermediate) { case 0: switch (c) { case 'E': LineFeed(1); break; case 'D': LineFeed(0); break; case 'M': ReverseLineFeed(); break; case 'H': curr->w_tabs[curr->w_x] = 1; break; case 'Z': /* jph: Identify as VT100 */ Report("\033[?%d;%dc", 1, 2); break; case '7': SaveCursor(&curr->w_saved); break; case '8': RestoreCursor(&curr->w_saved); break; case 'c': ClearScreen(); ResetWindow(curr); LKeypadMode(&curr->w_layer, 0); LCursorkeysMode(&curr->w_layer, 0); #ifndef TIOCPKT WNewAutoFlow(curr, 1); #endif /* XXX SetRendition(&mchar_null); InsertMode(0); ChangeScrollRegion(0, rows - 1); */ LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); break; case '=': LKeypadMode(&curr->w_layer, curr->w_keypad = 1); #ifndef TIOCPKT WNewAutoFlow(curr, 0); #endif /* !TIOCPKT */ break; case '>': LKeypadMode(&curr->w_layer, curr->w_keypad = 0); #ifndef TIOCPKT WNewAutoFlow(curr, 1); #endif /* !TIOCPKT */ break; #ifdef FONT case 'n': /* LS2 */ MapCharset(G2); break; case 'o': /* LS3 */ MapCharset(G3); break; case '~': MapCharsetR(G1); /* LS1R */ break; /* { */ case '}': MapCharsetR(G2); /* LS2R */ break; case '|': MapCharsetR(G3); /* LS3R */ break; case 'N': /* SS2 */ if (curr->w_charsets[curr->w_Charset] != curr->w_charsets[G2] || curr->w_charsets[curr->w_CharsetR] != curr->w_charsets[G2]) curr->w_FontR = curr->w_FontL = curr->w_charsets[curr->w_ss = G2]; else curr->w_ss = 0; break; case 'O': /* SS3 */ if (curr->w_charsets[curr->w_Charset] != curr->w_charsets[G3] || curr->w_charsets[curr->w_CharsetR] != curr->w_charsets[G3]) curr->w_FontR = curr->w_FontL = curr->w_charsets[curr->w_ss = G3]; else curr->w_ss = 0; break; #endif /* FONT */ case 'g': /* VBELL, private screen sequence */ WBell(curr, 1); break; } break; case '#': switch (c) { case '8': FillWithEs(); break; } break; #ifdef FONT case '(': DesignateCharset(c, G0); break; case ')': DesignateCharset(c, G1); break; case '*': DesignateCharset(c, G2); break; case '+': DesignateCharset(c, G3); break; # ifdef DW_CHARS /* * ESC $ ( Fn: invoke multi-byte charset, Fn, to G0 * ESC $ Fn: same as above. (old sequence) * ESC $ ) Fn: invoke multi-byte charset, Fn, to G1 * ESC $ * Fn: invoke multi-byte charset, Fn, to G2 * ESC $ + Fn: invoke multi-byte charset, Fn, to G3 */ case '$': case '$'<<8 | '(': DesignateCharset(c & 037, G0); break; case '$'<<8 | ')': DesignateCharset(c & 037, G1); break; case '$'<<8 | '*': DesignateCharset(c & 037, G2); break; case '$'<<8 | '+': DesignateCharset(c & 037, G3); break; # endif #endif /* FONT */ } } static void DoCSI(c, intermediate) int c, intermediate; { register int i, a1 = curr->w_args[0], a2 = curr->w_args[1]; if (curr->w_NumArgs > MAXARGS) curr->w_NumArgs = MAXARGS; switch (intermediate) { case 0: switch (c) { case 'H': case 'f': if (a1 < 1) a1 = 1; if (curr->w_origin) a1 += curr->w_top; if (a1 > rows) a1 = rows; if (a2 < 1) a2 = 1; if (a2 > cols) a2 = cols; LGotoPos(&curr->w_layer, --a2, --a1); curr->w_x = a2; curr->w_y = a1; if (curr->w_autoaka) curr->w_autoaka = a1 + 1; break; case 'J': if (a1 < 0 || a1 > 2) a1 = 0; switch (a1) { case 0: ClearToEOS(); break; case 1: ClearFromBOS(); break; case 2: ClearScreen(); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); break; } break; case 'K': if (a1 < 0 || a1 > 2) a1 %= 3; switch (a1) { case 0: ClearLineRegion(curr->w_x, cols - 1); break; case 1: ClearLineRegion(0, curr->w_x); break; case 2: ClearLineRegion(0, cols - 1); break; } break; case 'X': a1 = curr->w_x + (a1 ? a1 - 1 : 0); ClearLineRegion(curr->w_x, a1 < cols ? a1 : cols - 1); break; case 'A': CursorUp(a1 ? a1 : 1); break; case 'B': CursorDown(a1 ? a1 : 1); break; case 'C': CursorRight(a1 ? a1 : 1); break; case 'D': CursorLeft(a1 ? a1 : 1); break; case 'E': curr->w_x = 0; CursorDown(a1 ? a1 : 1); /* positions cursor */ break; case 'F': curr->w_x = 0; CursorUp(a1 ? a1 : 1); /* positions cursor */ break; case 'G': case '`': /* HPA */ curr->w_x = a1 ? a1 - 1 : 0; if (curr->w_x >= cols) curr->w_x = cols - 1; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); break; case 'd': /* VPA */ curr->w_y = a1 ? a1 - 1 : 0; if (curr->w_y >= rows) curr->w_y = rows - 1; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); break; case 'm': SelectRendition(); break; case 'g': if (a1 == 0) curr->w_tabs[curr->w_x] = 0; else if (a1 == 3) bzero(curr->w_tabs, cols); break; case 'r': if (!a1) a1 = 1; if (!a2) a2 = rows; if (a1 < 1 || a2 > rows || a1 >= a2) break; curr->w_top = a1 - 1; curr->w_bot = a2 - 1; /* ChangeScrollRegion(curr->w_top, curr->w_bot); */ if (curr->w_origin) { curr->w_y = curr->w_top; curr->w_x = 0; } else curr->w_y = curr->w_x = 0; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); break; case 's': SaveCursor(&curr->w_saved); break; case 't': switch(a1) { case 11: if (curr->w_layer.l_cvlist) Report("\033[1t", 0, 0); else Report("\033[2t", 0, 0); break; case 7: LRefreshAll(&curr->w_layer, 0); break; case 21: a1 = strlen(curr->w_title); if ((unsigned)(curr->w_inlen + 5 + a1) <= sizeof(curr->w_inbuf)) { bcopy("\033]l", curr->w_inbuf + curr->w_inlen, 3); bcopy(curr->w_title, curr->w_inbuf + curr->w_inlen + 3, a1); bcopy("\033\\", curr->w_inbuf + curr->w_inlen + 3 + a1, 2); curr->w_inlen += 5 + a1; } break; case 8: a1 = curr->w_args[2]; if (a1 < 1) a1 = curr->w_width; if (a2 < 1) a2 = curr->w_height; if (a1 > 10000 || a2 > 10000) break; WChangeSize(curr, a1, a2); cols = curr->w_width; rows = curr->w_height; break; default: break; } break; case 'u': RestoreCursor(&curr->w_saved); break; case 'I': if (!a1) a1 = 1; while (a1--) ForwardTab(); break; case 'Z': if (!a1) a1 = 1; while (a1--) BackwardTab(); break; case 'L': InsertLine(a1 ? a1 : 1); break; case 'M': DeleteLine(a1 ? a1 : 1); break; case 'P': DeleteChar(a1 ? a1 : 1); break; case '@': InsertChar(a1 ? a1 : 1); break; case 'h': ASetMode(1); break; case 'l': ASetMode(0); break; case 'i': /* MC Media Control */ if (a1 == 5) PrintStart(); break; case 'n': if (a1 == 5) /* Report terminal status */ Report("\033[0n", 0, 0); else if (a1 == 6) /* Report cursor position */ Report("\033[%d;%dR", curr->w_y + 1, curr->w_x + 1); break; case 'c': /* Identify as VT100 */ if (a1 == 0) Report("\033[?%d;%dc", 1, 2); break; case 'x': /* decreqtparm */ if (a1 == 0 || a1 == 1) Report("\033[%d;1;1;112;112;1;0x", a1 + 2, 0); break; case 'p': /* obscure code from a 97801 term */ if (a1 == 6 || a1 == 7) { curr->w_curinv = 7 - a1; LCursorVisibility(&curr->w_layer, curr->w_curinv ? -1 : curr->w_curvvis); } break; case 'S': /* code from a 97801 term / DEC vt400 */ ScrollRegion(a1 ? a1 : 1); break; case 'T': /* code from a 97801 term / DEC vt400 */ case '^': /* SD as per ISO 6429 */ ScrollRegion(a1 ? -a1 : -1); break; } break; case '?': for (a2 = 0; a2 < curr->w_NumArgs; a2++) { a1 = curr->w_args[a2]; debug2("\\E[?%d%c\n",a1,c); if (c != 'h' && c != 'l') break; i = (c == 'h'); switch (a1) { case 1: /* CKM: cursor key mode */ LCursorkeysMode(&curr->w_layer, curr->w_cursorkeys = i); #ifndef TIOCPKT WNewAutoFlow(curr, !i); #endif /* !TIOCPKT */ break; case 2: /* ANM: ansi/vt52 mode */ if (i) { #ifdef FONT # ifdef ENCODINGS if (curr->w_encoding) break; # endif curr->w_charsets[0] = curr->w_charsets[1] = curr->w_charsets[2] = curr->w_charsets[3] = curr->w_FontL = curr->w_FontR = ASCII; curr->w_Charset = 0; curr->w_CharsetR = 2; curr->w_ss = 0; #endif } break; case 3: /* COLM: column mode */ i = (i ? Z0width : Z1width); ClearScreen(); curr->w_x = 0; curr->w_y = 0; WChangeSize(curr, i, curr->w_height); cols = curr->w_width; rows = curr->w_height; break; /* case 4: SCLM: scrolling mode */ case 5: /* SCNM: screen mode */ if (i != curr->w_revvid) WReverseVideo(curr, i); curr->w_revvid = i; break; case 6: /* OM: origin mode */ if ((curr->w_origin = i) != 0) { curr->w_y = curr->w_top; curr->w_x = 0; } else curr->w_y = curr->w_x = 0; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); break; case 7: /* AWM: auto wrap mode */ curr->w_wrap = i; break; /* case 8: ARM: auto repeat mode */ /* case 9: INLM: interlace mode */ case 9: /* X10 mouse tracking */ curr->w_mouse = i ? 9 : 0; LMouseMode(&curr->w_layer, curr->w_mouse); break; /* case 10: EDM: edit mode */ /* case 11: LTM: line transmit mode */ /* case 13: SCFDM: space compression / field delimiting */ /* case 14: TEM: transmit execution mode */ /* case 16: EKEM: edit key execution mode */ /* case 18: PFF: Printer term form feed */ /* case 19: PEX: Printer extend screen / scroll. reg */ case 25: /* TCEM: text cursor enable mode */ curr->w_curinv = !i; LCursorVisibility(&curr->w_layer, curr->w_curinv ? -1 : curr->w_curvvis); break; /* case 34: RLM: Right to left mode */ /* case 35: HEBM: hebrew keyboard map */ /* case 36: HEM: hebrew encoding */ /* case 38: TeK Mode */ /* case 40: 132 col enable */ /* case 42: NRCM: 7bit NRC character mode */ /* case 44: margin bell enable */ case 47: /* xterm-like alternate screen */ case 1047: /* xterm-like alternate screen */ case 1049: /* xterm-like alternate screen */ if (use_altscreen) { if (i) { if (!curr->w_alt.on) { SaveCursor(&curr->w_alt.cursor); EnterAltScreen(curr); } } else { if (curr->w_alt.on) { RestoreCursor(&curr->w_alt.cursor); LeaveAltScreen(curr); } } if (a1 == 47 && !i) curr->w_saved.on = 0; LRefreshAll(&curr->w_layer, 0); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } break; case 1048: if (i) SaveCursor(&curr->w_saved); else RestoreCursor(&curr->w_saved); break; /* case 66: NKM: Numeric keypad appl mode */ /* case 68: KBUM: Keyboard usage mode (data process) */ case 1000: /* VT200 mouse tracking */ case 1001: /* VT200 highlight mouse */ case 1002: /* button event mouse*/ case 1003: /* any event mouse*/ curr->w_mouse = i ? a1 : 0; LMouseMode(&curr->w_layer, curr->w_mouse); break; /* case 1005: UTF-8 mouse mode rejected */ case 1006: /* SGR mouse mode */ curr->w_extmouse = i ? a1 : 0; LExtMouseMode(&curr->w_layer, curr->w_extmouse); break; /* case 1015: UXRVT mouse mode rejected */ } } break; case '>': switch (c) { case 'c': /* secondary DA */ if (a1 == 0) Report("\033[>%d;%d;0c", 83, nversion); /* 83 == 'S' */ break; } break; } } static void StringStart(type) enum string_t type; { curr->w_StringType = type; curr->w_stringp = curr->w_string; curr->w_state = ASTR; } static void StringChar(c) int c; { if (curr->w_stringp >= curr->w_string + MAXSTR - 1) curr->w_state = LIT; else *(curr->w_stringp)++ = c; } /* * Do string processing. Returns -1 if output should be suspended * until status is gone. */ static int StringEnd() { struct canvas *cv; char *p; int typ; char *t; /* There's two ways to terminate an OSC. If we've seen an ESC * then it's been ST otherwise it's BEL. */ t = curr->w_state == STRESC ? "\033\\" : "\a"; curr->w_state = LIT; *curr->w_stringp = '\0'; switch (curr->w_StringType) { case OSC: /* special xterm compatibility hack */ if (curr->w_string[0] == ';' || (p = index(curr->w_string, ';')) == 0) break; typ = atoi(curr->w_string); p++; #ifdef MULTIUSER if (typ == 83) /* 83 = 'S' */ { /* special execute commands sequence */ char *args[MAXARGS]; int argl[MAXARGS]; struct acluser *windowuser; windowuser = *FindUserPtr(":window:"); if (windowuser && Parse(p, sizeof(curr->w_string) - (p - curr->w_string), args, argl)) { for (display = displays; display; display = display->d_next) if (D_forecv->c_layer->l_bottom == &curr->w_layer) break; /* found it */ if (display == 0 && curr->w_layer.l_cvlist) display = curr->w_layer.l_cvlist->c_display; if (display == 0) display = displays; EffectiveAclUser = windowuser; fore = curr; flayer = fore->w_savelayer ? fore->w_savelayer : &fore->w_layer; DoCommand(args, argl); EffectiveAclUser = 0; fore = 0; flayer = 0; } break; } #endif #ifdef RXVT_OSC if (typ == 0 || typ == 1 || typ == 2 || typ == 11 || typ == 20 || typ == 39 || typ == 49) { int typ2; typ2 = typ / 10; if (strcmp(curr->w_xtermosc[typ2], p)) { if (typ != 11 || strcmp("?", p)) { strncpy(curr->w_xtermosc[typ2], p, sizeof(curr->w_xtermosc[typ2]) - 1); curr->w_xtermosc[typ2][sizeof(curr->w_xtermosc[typ2]) - 1] = 0; } for (display = displays; display; display = display->d_next) { if (!D_CXT) continue; if (D_forecv->c_layer->l_bottom == &curr->w_layer) SetXtermOSC(typ2, p, t); if ((typ2 == 3 || typ2 == 4) && D_xtermosc[typ2]) Redisplay(0); if (typ == 11 && !strcmp("?", p)) break; } } } if (typ != 0 && typ != 2) break; #else if (typ < 0 || typ > 2) break; #endif curr->w_stringp -= p - curr->w_string; if (curr->w_stringp > curr->w_string) bcopy(p, curr->w_string, curr->w_stringp - curr->w_string); *curr->w_stringp = '\0'; /* FALLTHROUGH */ case APC: if (curr->w_hstatus) { if (strcmp(curr->w_hstatus, curr->w_string) == 0) break; /* not changed */ free(curr->w_hstatus); curr->w_hstatus = 0; } if (curr->w_string != curr->w_stringp) curr->w_hstatus = SaveStr(curr->w_string); WindowChanged(curr, 'h'); break; case PM: case GM: for (display = displays; display; display = display->d_next) { for (cv = D_cvlist; cv; cv = cv->c_next) if (cv->c_layer->l_bottom == &curr->w_layer) break; if (cv || curr->w_StringType == GM) MakeStatus(curr->w_string); } return -1; case DCS: LAY_DISPLAYS(&curr->w_layer, AddStr(curr->w_string)); break; case AKA: if (curr->w_title == curr->w_akabuf && !*curr->w_string) break; if (curr->w_dynamicaka) ChangeAKA(curr, curr->w_string, strlen(curr->w_string)); if (!*curr->w_string) curr->w_autoaka = curr->w_y + 1; break; default: break; } return 0; } static void PrintStart() { curr->w_pdisplay = 0; /* find us a nice display to print on, fore preferred */ display = curr->w_lastdisp; if (!(display && curr == D_fore && (printcmd || D_PO))) for (display = displays; display; display = display->d_next) if (curr == D_fore && (printcmd || D_PO)) break; if (!display) { struct canvas *cv; for (cv = curr->w_layer.l_cvlist; cv; cv = cv->c_lnext) { display = cv->c_display; if (printcmd || D_PO) break; } if (!cv) { display = displays; if (!display || display->d_next || !(printcmd || D_PO)) return; } } curr->w_pdisplay = display; curr->w_stringp = curr->w_string; curr->w_state = PRIN; if (printcmd && curr->w_pdisplay->d_printfd < 0) curr->w_pdisplay->d_printfd = printpipe(curr, printcmd); } static void PrintChar(c) int c; { if (curr->w_stringp >= curr->w_string + MAXSTR - 1) PrintFlush(); *(curr->w_stringp)++ = c; } static void PrintFlush() { display = curr->w_pdisplay; if (display && printcmd) { char *bp = curr->w_string; int len = curr->w_stringp - curr->w_string; int r; while (len && display->d_printfd >= 0) { r = write(display->d_printfd, bp, len); if (r <= 0) { WMsg(curr, errno, "printing aborted"); close(display->d_printfd); display->d_printfd = -1; break; } bp += r; len -= r; } } else if (display && curr->w_stringp > curr->w_string) { AddCStr(D_PO); AddStrn(curr->w_string, curr->w_stringp - curr->w_string); AddCStr(D_PF); Flush(3); } curr->w_stringp = curr->w_string; } void WNewAutoFlow(win, on) struct win *win; int on; { debug1("WNewAutoFlow: %d\n", on); if (win->w_flow & FLOW_AUTOFLAG) win->w_flow = FLOW_AUTOFLAG | (FLOW_AUTO|FLOW_NOW) * on; else win->w_flow = (win->w_flow & ~FLOW_AUTO) | FLOW_AUTO * on; LSetFlow(&win->w_layer, win->w_flow & FLOW_NOW); } #ifdef FONT static void DesignateCharset(c, n) int c, n; { curr->w_ss = 0; # ifdef ENCODINGS if (c == ('@' & 037)) /* map JIS 6226 to 0208 */ c = KANJI; # endif if (c == 'B') c = ASCII; if (curr->w_charsets[n] != c) { curr->w_charsets[n] = c; if (curr->w_Charset == n) { curr->w_FontL = c; curr->w_rend.font = curr->w_FontL; LSetRendition(&curr->w_layer, &curr->w_rend); } if (curr->w_CharsetR == n) curr->w_FontR = c; } } static void MapCharset(n) int n; { curr->w_ss = 0; if (curr->w_Charset != n) { curr->w_Charset = n; curr->w_FontL = curr->w_charsets[n]; curr->w_rend.font = curr->w_FontL; LSetRendition(&curr->w_layer, &curr->w_rend); } } static void MapCharsetR(n) int n; { curr->w_ss = 0; if (curr->w_CharsetR != n) { curr->w_CharsetR = n; curr->w_FontR = curr->w_charsets[n]; } curr->w_gr = 1; } #endif /* FONT */ static void SaveCursor(cursor) struct cursor *cursor; { cursor->on = 1; cursor->x = curr->w_x; cursor->y = curr->w_y; cursor->Rend = curr->w_rend; #ifdef FONT cursor->Charset = curr->w_Charset; cursor->CharsetR = curr->w_CharsetR; bcopy((char *) curr->w_charsets, (char *) cursor->Charsets, 4 * sizeof(int)); #endif } static void RestoreCursor(cursor) struct cursor *cursor; { if (!cursor->on) return; LGotoPos(&curr->w_layer, cursor->x, cursor->y); curr->w_x = cursor->x; curr->w_y = cursor->y; curr->w_rend = cursor->Rend; #ifdef FONT bcopy((char *) cursor->Charsets, (char *) curr->w_charsets, 4 * sizeof(int)); curr->w_Charset = cursor->Charset; curr->w_CharsetR = cursor->CharsetR; curr->w_ss = 0; curr->w_FontL = curr->w_charsets[curr->w_Charset]; curr->w_FontR = curr->w_charsets[curr->w_CharsetR]; #endif LSetRendition(&curr->w_layer, &curr->w_rend); } static void BackSpace() { if (curr->w_x > 0) { curr->w_x--; } else if (curr->w_wrap && curr->w_y > 0) { curr->w_x = cols - 1; curr->w_y--; } LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void Return() { if (curr->w_x == 0) return; curr->w_x = 0; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void LineFeed(out_mode) int out_mode; { /* out_mode: 0=lf, 1=cr+lf */ if (out_mode) curr->w_x = 0; if (curr->w_y != curr->w_bot) /* Don't scroll */ { if (curr->w_y < rows-1) curr->w_y++; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); return; } if (curr->w_autoaka > 1) curr->w_autoaka--; MScrollV(curr, 1, curr->w_top, curr->w_bot, CURR_BCE); LScrollV(&curr->w_layer, 1, curr->w_top, curr->w_bot, CURR_BCE); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void ReverseLineFeed() { if (curr->w_y == curr->w_top) { MScrollV(curr, -1, curr->w_top, curr->w_bot, CURR_BCE); LScrollV(&curr->w_layer, -1, curr->w_top, curr->w_bot, CURR_BCE); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } else if (curr->w_y > 0) CursorUp(1); } static void InsertChar(n) int n; { register int y = curr->w_y, x = curr->w_x; if (n <= 0) return; if (x == cols) x--; save_mline(&curr->w_mlines[y], cols); MScrollH(curr, -n, y, x, curr->w_width - 1, CURR_BCE); LScrollH(&curr->w_layer, -n, y, x, curr->w_width - 1, CURR_BCE, &mline_old); LGotoPos(&curr->w_layer, x, y); } static void DeleteChar(n) int n; { register int y = curr->w_y, x = curr->w_x; if (x == cols) x--; save_mline(&curr->w_mlines[y], cols); MScrollH(curr, n, y, x, curr->w_width - 1, CURR_BCE); LScrollH(&curr->w_layer, n, y, x, curr->w_width - 1, CURR_BCE, &mline_old); LGotoPos(&curr->w_layer, x, y); } static void DeleteLine(n) int n; { if (curr->w_y < curr->w_top || curr->w_y > curr->w_bot) return; if (n > curr->w_bot - curr->w_y + 1) n = curr->w_bot - curr->w_y + 1; MScrollV(curr, n, curr->w_y, curr->w_bot, CURR_BCE); LScrollV(&curr->w_layer, n, curr->w_y, curr->w_bot, CURR_BCE); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void InsertLine(n) int n; { if (curr->w_y < curr->w_top || curr->w_y > curr->w_bot) return; if (n > curr->w_bot - curr->w_y + 1) n = curr->w_bot - curr->w_y + 1; MScrollV(curr, -n, curr->w_y, curr->w_bot, CURR_BCE); LScrollV(&curr->w_layer, -n, curr->w_y, curr->w_bot, CURR_BCE); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void ScrollRegion(n) int n; { MScrollV(curr, n, curr->w_top, curr->w_bot, CURR_BCE); LScrollV(&curr->w_layer, n, curr->w_top, curr->w_bot, CURR_BCE); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void ForwardTab() { register int x = curr->w_x; if (x == cols) { LineFeed(1); x = 0; } if (curr->w_tabs[x] && x < cols - 1) x++; while (x < cols - 1 && !curr->w_tabs[x]) x++; curr->w_x = x; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void BackwardTab() { register int x = curr->w_x; if (curr->w_tabs[x] && x > 0) x--; while (x > 0 && !curr->w_tabs[x]) x--; curr->w_x = x; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void ClearScreen() { LClearArea(&curr->w_layer, 0, 0, curr->w_width - 1, curr->w_height - 1, CURR_BCE, 1); #ifdef COPY_PASTE MScrollV(curr, curr->w_height, 0, curr->w_height - 1, CURR_BCE); #else MClearArea(curr, 0, 0, curr->w_width - 1, curr->w_height - 1, CURR_BCE); #endif } static void ClearFromBOS() { register int y = curr->w_y, x = curr->w_x; LClearArea(&curr->w_layer, 0, 0, x, y, CURR_BCE, 1); MClearArea(curr, 0, 0, x, y, CURR_BCE); RestorePosRendition(); } static void ClearToEOS() { register int y = curr->w_y, x = curr->w_x; if (x == 0 && y == 0) { ClearScreen(); RestorePosRendition(); return; } LClearArea(&curr->w_layer, x, y, cols - 1, rows - 1, CURR_BCE, 1); MClearArea(curr, x, y, cols - 1, rows - 1, CURR_BCE); RestorePosRendition(); } static void ClearLineRegion(from, to) int from, to; { register int y = curr->w_y; LClearArea(&curr->w_layer, from, y, to, y, CURR_BCE, 1); MClearArea(curr, from, y, to, y, CURR_BCE); RestorePosRendition(); } static void CursorRight(n) register int n; { register int x = curr->w_x; if (x == cols) { LineFeed(1); x = 0; } if ((curr->w_x += n) >= cols) curr->w_x = cols - 1; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void CursorUp(n) register int n; { if (curr->w_y < curr->w_top) /* if above scrolling rgn, */ { if ((curr->w_y -= n) < 0) /* ignore its limits */ curr->w_y = 0; } else if ((curr->w_y -= n) < curr->w_top) curr->w_y = curr->w_top; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void CursorDown(n) register int n; { if (curr->w_y > curr->w_bot) /* if below scrolling rgn, */ { if ((curr->w_y += n) > rows - 1) /* ignore its limits */ curr->w_y = rows - 1; } else if ((curr->w_y += n) > curr->w_bot) curr->w_y = curr->w_bot; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void CursorLeft(n) register int n; { if ((curr->w_x -= n) < 0) curr->w_x = 0; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } static void ASetMode(on) int on; { register int i; for (i = 0; i < curr->w_NumArgs; ++i) { switch (curr->w_args[i]) { /* case 2: KAM: Lock keyboard */ case 4: /* IRM: Insert mode */ curr->w_insert = on; LAY_DISPLAYS(&curr->w_layer, InsertMode(on)); break; /* case 12: SRM: Echo mode on */ case 20: /* LNM: Linefeed mode */ curr->w_autolf = on; break; case 34: curr->w_curvvis = !on; LCursorVisibility(&curr->w_layer, curr->w_curinv ? -1 : curr->w_curvvis); break; default: break; } } } static char rendlist[] = { ~((1 << NATTR) - 1), A_BD, A_DI, A_SO, A_US, A_BL, 0, A_RV, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~(A_BD|A_SO|A_DI), ~A_SO, ~A_US, ~A_BL, 0, ~A_RV }; static void SelectRendition() { #ifdef COLOR register int j, i = 0, a = curr->w_rend.attr, c = curr->w_rend.color; # ifdef COLORS256 int cx = curr->w_rend.colorx; # endif #else register int j, i = 0, a = curr->w_rend.attr; #endif do { j = curr->w_args[i]; #ifdef COLOR if ((j == 38 || j == 48) && i + 2 < curr->w_NumArgs && curr->w_args[i + 1] == 5) { int jj; i += 2; jj = curr->w_args[i]; if (jj < 0 || jj > 255) continue; # ifdef COLORS256 if (j == 38) { c = (c & 0xf0) | ((jj & 0x0f) ^ 9); a |= A_BFG; if (jj >= 8 && jj < 16) c |= 0x08; else a ^= A_BFG; a = (a & 0xbf) | (jj & 8 ? 0x40 : 0); cx = (cx & 0xf0) | (jj >> 4 & 0x0f); } else { c = (c & 0x0f) | ((jj & 0x0f) ^ 9) << 4; a |= A_BBG; if (jj >= 8 && jj < 16) c |= 0x80; else a ^= A_BBG; cx = (cx & 0x0f) | (jj & 0xf0); } continue; # else jj = color256to16(jj) + 30; if (jj >= 38) jj += 60 - 8; j = j == 38 ? jj : jj + 10; # endif } # ifdef COLORS16 if (j == 0 || (j >= 30 && j <= 39 && j != 38)) a &= 0xbf; if (j == 0 || (j >= 40 && j <= 49 && j != 48)) a &= 0x7f; if (j >= 90 && j <= 97) a |= 0x40; if (j >= 100 && j <= 107) a |= 0x80; # endif if (j >= 90 && j <= 97) j -= 60; if (j >= 100 && j <= 107) j -= 60; if (j >= 30 && j <= 39 && j != 38) c = (c & 0xf0) | ((j - 30) ^ 9); else if (j >= 40 && j <= 49 && j != 48) c = (c & 0x0f) | (((j - 40) ^ 9) << 4); if (j == 0) c = 0; # ifdef COLORS256 if (j == 0 || (j >= 30 && j <= 39 && j != 38)) cx &= 0xf0; if (j == 0 || (j >= 40 && j <= 49 && j != 48)) cx &= 0x0f; # endif #endif if (j < 0 || j >= (int)(sizeof(rendlist)/sizeof(*rendlist))) continue; j = rendlist[j]; if (j & (1 << NATTR)) a &= j; else a |= j; } while (++i < curr->w_NumArgs); curr->w_rend.attr = a; #ifdef COLOR curr->w_rend.color = c; # ifdef COLORS256 curr->w_rend.colorx = cx; # endif #endif LSetRendition(&curr->w_layer, &curr->w_rend); } static void FillWithEs() { register int i; register unsigned char *p, *ep; LClearAll(&curr->w_layer, 1); curr->w_y = curr->w_x = 0; for (i = 0; i < rows; ++i) { clear_mline(&curr->w_mlines[i], 0, cols + 1); p = curr->w_mlines[i].image; ep = p + cols; while (p < ep) *p++ = 'E'; } LRefreshAll(&curr->w_layer, 1); } /* * Ugly autoaka hack support: * ChangeAKA() sets a new aka * FindAKA() searches for an autoaka match */ void ChangeAKA(p, s, l) struct win *p; char *s; int l; { int i, c; for (i = 0; l > 0; l--) { if (p->w_akachange + i == p->w_akabuf + sizeof(p->w_akabuf) - 1) break; c = (unsigned char)*s++; if (c == 0) break; if (c < 32 || c == 127 || (c >= 128 && c < 160 && p->w_c1)) continue; p->w_akachange[i++] = c; } p->w_akachange[i] = 0; p->w_title = p->w_akachange; if (p->w_akachange != p->w_akabuf) if (p->w_akachange[0] == 0 || p->w_akachange[-1] == ':') p->w_title = p->w_akabuf + strlen(p->w_akabuf) + 1; WindowChanged(p, 't'); WindowChanged((struct win *)0, 'w'); WindowChanged((struct win *)0, 'W'); } static void FindAKA() { register unsigned char *cp, *line; register struct win *wp = curr; register int len = strlen(wp->w_akabuf); int y; y = (wp->w_autoaka > 0 && wp->w_autoaka <= wp->w_height) ? wp->w_autoaka - 1 : wp->w_y; cols = wp->w_width; try_line: cp = line = wp->w_mlines[y].image; if (wp->w_autoaka > 0 && *wp->w_akabuf != '\0') { for (;;) { if (cp - line >= cols - len) { if (++y == wp->w_autoaka && y < rows) goto try_line; return; } if (strncmp((char *)cp, wp->w_akabuf, len) == 0) break; cp++; } cp += len; } for (len = cols - (cp - line); len && *cp == ' '; len--, cp++) ; if (len) { if (wp->w_autoaka > 0 && (*cp == '!' || *cp == '%' || *cp == '^')) wp->w_autoaka = -1; else wp->w_autoaka = 0; line = cp; while (len && *cp != ' ') { if (*cp++ == '/') line = cp; len--; } ChangeAKA(wp, (char *)line, cp - line); } else wp->w_autoaka = 0; } static void RestorePosRendition() { LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); LSetRendition(&curr->w_layer, &curr->w_rend); } /* Send a terminal report as if it were typed. */ static void Report(fmt, n1, n2) char *fmt; int n1, n2; { register int len; char rbuf[40]; /* enough room for all replies */ sprintf(rbuf, fmt, n1, n2); len = strlen(rbuf); #ifdef PSEUDOS if (W_UWP(curr)) { if ((unsigned)(curr->w_pwin->p_inlen + len) <= sizeof(curr->w_pwin->p_inbuf)) { bcopy(rbuf, curr->w_pwin->p_inbuf + curr->w_pwin->p_inlen, len); curr->w_pwin->p_inlen += len; } } else #endif { if ((unsigned)(curr->w_inlen + len) <= sizeof(curr->w_inbuf)) { bcopy(rbuf, curr->w_inbuf + curr->w_inlen, len); curr->w_inlen += len; } } } /* *====================================================================* *====================================================================* */ /********************************************************************** * * Memory subsystem. * */ static void MFixLine(p, y, mc) struct win *p; int y; struct mchar *mc; { struct mline *ml = &p->w_mlines[y]; if (mc->attr && ml->attr == null) { if ((ml->attr = (unsigned char *)calloc(p->w_width + 1, 1)) == 0) { ml->attr = null; mc->attr = p->w_rend.attr = 0; WMsg(p, 0, "Warning: no space for attr - turned off"); } } #ifdef FONT if (mc->font && ml->font == null) { if ((ml->font = (unsigned char *)calloc(p->w_width + 1, 1)) == 0) { ml->font = null; p->w_FontL = p->w_charsets[p->w_ss ? p->w_ss : p->w_Charset] = 0; p->w_FontR = p->w_charsets[p->w_ss ? p->w_ss : p->w_CharsetR] = 0; mc->font = mc->fontx = p->w_rend.font = 0; WMsg(p, 0, "Warning: no space for font - turned off"); } } if (mc->fontx && ml->fontx == null) { if ((ml->fontx = (unsigned char *)calloc(p->w_width + 1, 1)) == 0) { ml->fontx = null; mc->fontx = 0; } } #endif #ifdef COLOR if (mc->color && ml->color == null) { if ((ml->color = (unsigned char *)calloc(p->w_width + 1, 1)) == 0) { ml->color = null; mc->color = p->w_rend.color = 0; WMsg(p, 0, "Warning: no space for color - turned off"); } } # ifdef COLORS256 if (mc->colorx && ml->colorx == null) { if ((ml->colorx = (unsigned char *)calloc(p->w_width + 1, 1)) == 0) { ml->colorx = null; mc->colorx = p->w_rend.colorx = 0; WMsg(p, 0, "Warning: no space for extended colors - turned off"); } } # endif #endif } /*****************************************************************/ #ifdef DW_CHARS # define MKillDwRight(p, ml, x) \ if (dw_right(ml, x, p->w_encoding)) \ { \ if (x > 0) \ copy_mchar2mline(&mchar_blank, ml, x - 1); \ copy_mchar2mline(&mchar_blank, ml, x); \ } # define MKillDwLeft(p, ml, x) \ if (dw_left(ml, x, p->w_encoding)) \ { \ copy_mchar2mline(&mchar_blank, ml, x); \ copy_mchar2mline(&mchar_blank, ml, x + 1); \ } #else # define MKillDwRight(p, ml, x) ; # define MKillDwLeft(p, ml, x) ; #endif static void MScrollH(p, n, y, xs, xe, bce) struct win *p; int n, y, xs, xe, bce; { struct mline *ml; if (n == 0) return; ml = &p->w_mlines[y]; MKillDwRight(p, ml, xs); MKillDwLeft(p, ml, xe); if (n > 0) { if (xe - xs + 1 > n) { MKillDwRight(p, ml, xs + n); bcopy_mline(ml, xs + n, xs, xe + 1 - xs - n); } else n = xe - xs + 1; clear_mline(ml, xe + 1 - n, n); #ifdef COLOR if (bce) MBceLine(p, y, xe + 1 - n, n, bce); #endif } else { n = -n; if (xe - xs + 1 > n) { MKillDwLeft(p, ml, xe - n); bcopy_mline(ml, xs, xs + n, xe + 1 - xs - n); } else n = xe - xs + 1; clear_mline(ml, xs, n); #ifdef COLOR if (bce) MBceLine(p, y, xs, n, bce); #endif } } static void MScrollV(p, n, ys, ye, bce) struct win *p; int n, ys, ye, bce; { int i, cnt1, cnt2; struct mline tmp[256]; struct mline *ml; if (n == 0) return; if (n > 0) { if (ye - ys + 1 < n) n = ye - ys + 1; if (n > 256) { MScrollV(p, n - 256, ys, ye, bce); n = 256; } #ifdef COPY_PASTE if (compacthist) { ye = MFindUsedLine(p, ye, ys); if (ye - ys + 1 < n) n = ye - ys + 1; if (n <= 0) return; } #endif /* Clear lines */ ml = p->w_mlines + ys; for (i = ys; i < ys + n; i++, ml++) { #ifdef COPY_PASTE if (ys == p->w_top) WAddLineToHist(p, ml); #endif if (ml->attr != null) free(ml->attr); ml->attr = null; #ifdef FONT if (ml->font != null) free(ml->font); ml->font = null; if (ml->fontx != null) free(ml->fontx); ml->fontx = null; #endif #ifdef COLOR if (ml->color != null) free(ml->color); ml->color = null; # ifdef COLORS256 if (ml->colorx != null) free(ml->colorx); ml->colorx = null; # endif #endif bclear((char *)ml->image, p->w_width + 1); #ifdef COLOR if (bce) MBceLine(p, i, 0, p->w_width, bce); #endif } /* switch 'em over */ cnt1 = n * sizeof(struct mline); cnt2 = (ye - ys + 1 - n) * sizeof(struct mline); if (cnt1 && cnt2) Scroll((char *)(p->w_mlines + ys), cnt1, cnt2, (char *)tmp); } else { n = -n; if (ye - ys + 1 < n) n = ye - ys + 1; if (n > 256) { MScrollV(p, - (n - 256), ys, ye, bce); n = 256; } ml = p->w_mlines + ye; /* Clear lines */ for (i = ye; i > ye - n; i--, ml--) { if (ml->attr != null) free(ml->attr); ml->attr = null; #ifdef FONT if (ml->font != null) free(ml->font); ml->font = null; if (ml->fontx != null) free(ml->fontx); ml->fontx = null; #endif #ifdef COLOR if (ml->color != null) free(ml->color); ml->color = null; # ifdef COLORS256 if (ml->colorx != null) free(ml->colorx); ml->colorx = null; # endif #endif bclear((char *)ml->image, p->w_width + 1); #ifdef COLOR if (bce) MBceLine(p, i, 0, p->w_width, bce); #endif } cnt1 = n * sizeof(struct mline); cnt2 = (ye - ys + 1 - n) * sizeof(struct mline); if (cnt1 && cnt2) Scroll((char *)(p->w_mlines + ys), cnt2, cnt1, (char *)tmp); } } static void Scroll(cp, cnt1, cnt2, tmp) char *cp, *tmp; int cnt1, cnt2; { if (!cnt1 || !cnt2) return; if (cnt1 <= cnt2) { bcopy(cp, tmp, cnt1); bcopy(cp + cnt1, cp, cnt2); bcopy(tmp, cp + cnt2, cnt1); } else { bcopy(cp + cnt1, tmp, cnt2); bcopy(cp, cp + cnt2, cnt1); bcopy(tmp, cp, cnt2); } } static void MClearArea(p, xs, ys, xe, ye, bce) struct win *p; int xs, ys, xe, ye, bce; { int n, y; int xxe; struct mline *ml; /* Check for zero-height window */ if (ys < 0 || ye < ys) return; /* check for magic margin condition */ if (xs >= p->w_width) xs = p->w_width - 1; if (xe >= p->w_width) xe = p->w_width - 1; MKillDwRight(p, p->w_mlines + ys, xs); MKillDwLeft(p, p->w_mlines + ye, xe); ml = p->w_mlines + ys; for (y = ys; y <= ye; y++, ml++) { xxe = (y == ye) ? xe : p->w_width - 1; n = xxe - xs + 1; if (n > 0) clear_mline(ml, xs, n); #ifdef COLOR if (n > 0 && bce) MBceLine(p, y, xs, xs + n - 1, bce); #endif xs = 0; } } static void MInsChar(p, c, x, y) struct win *p; struct mchar *c; int x, y; { int n; struct mline *ml; ASSERT(x >= 0 && x < p->w_width); MFixLine(p, y, c); ml = p->w_mlines + y; n = p->w_width - x - 1; MKillDwRight(p, ml, x); if (n > 0) { MKillDwRight(p, ml, p->w_width - 1); bcopy_mline(ml, x, x + 1, n); } copy_mchar2mline(c, ml, x); #ifdef DW_CHARS if (c->mbcs) { if (--n > 0) { MKillDwRight(p, ml, p->w_width - 1); bcopy_mline(ml, x + 1, x + 2, n); } copy_mchar2mline(c, ml, x + 1); ml->image[x + 1] = c->mbcs; # ifdef UTF8 if (p->w_encoding != UTF8) ml->font[x + 1] |= 0x80; else if (p->w_encoding == UTF8 && c->mbcs) { ml->font[x + 1] = c->mbcs; ml->fontx[x + 1] = 0; } # else ml->font[x + 1] |= 0x80; # endif } #endif } static void MPutChar(p, c, x, y) struct win *p; struct mchar *c; int x, y; { struct mline *ml; MFixLine(p, y, c); ml = &p->w_mlines[y]; MKillDwRight(p, ml, x); MKillDwLeft(p, ml, x); copy_mchar2mline(c, ml, x); #ifdef DW_CHARS if (c->mbcs) { MKillDwLeft(p, ml, x + 1); copy_mchar2mline(c, ml, x + 1); ml->image[x + 1] = c->mbcs; # ifdef UTF8 if (p->w_encoding != UTF8) ml->font[x + 1] |= 0x80; else if (p->w_encoding == UTF8 && c->mbcs) { ml->font[x + 1] = c->mbcs; ml->fontx[x + 1] = 0; } # else ml->font[x + 1] |= 0x80; # endif } #endif } static void MWrapChar(p, c, y, top, bot, ins) struct win *p; struct mchar *c; int y, top, bot; int ins; { struct mline *ml; int bce; #ifdef COLOR bce = rend_getbg(c); #else bce = 0; #endif MFixLine(p, y, c); ml = &p->w_mlines[y]; copy_mchar2mline(&mchar_null, ml, p->w_width); if (y == bot) MScrollV(p, 1, top, bot, bce); else if (y < p->w_height - 1) y++; if (ins) MInsChar(p, c, 0, y); else MPutChar(p, c, 0, y); } static void MPutStr(p, s, n, r, x, y) struct win *p; char *s; int n; struct mchar *r; int x, y; { struct mline *ml; int i; unsigned char *b; if (n <= 0) return; MFixLine(p, y, r); ml = &p->w_mlines[y]; MKillDwRight(p, ml, x); MKillDwLeft(p, ml, x + n - 1); bcopy(s, (char *)ml->image + x, n); if (ml->attr != null) { b = ml->attr + x; for (i = n; i-- > 0;) *b++ = r->attr; } #ifdef FONT if (ml->font != null) { b = ml->font + x; for (i = n; i-- > 0;) *b++ = r->font; } if (ml->fontx != null) { b = ml->fontx + x; for (i = n; i-- > 0;) *b++ = r->fontx; } #endif #ifdef COLOR if (ml->color != null) { b = ml->color + x; for (i = n; i-- > 0;) *b++ = r->color; } # ifdef COLORS256 if (ml->colorx != null) { b = ml->colorx + x; for (i = n; i-- > 0;) *b++ = r->colorx; } # endif #endif } #ifdef COLOR static void MBceLine(p, y, xs, xe, bce) struct win *p; int y, xs, xe, bce; { struct mchar mc; struct mline *ml; int x; mc = mchar_null; rend_setbg(&mc, bce); MFixLine(p, y, &mc); ml = p->w_mlines + y; # ifdef COLORS16 if (mc.attr) for (x = xs; x <= xe; x++) ml->attr[x] = mc.attr; # endif if (mc.color) for (x = xs; x <= xe; x++) ml->color[x] = mc.color; # ifdef COLORS256 if (mc.colorx) for (x = xs; x <= xe; x++) ml->colorx[x] = mc.colorx; # endif } #endif #ifdef COPY_PASTE static void WAddLineToHist(wp, ml) struct win *wp; struct mline *ml; { register unsigned char *q, *o; struct mline *hml; if (wp->w_histheight == 0) return; hml = &wp->w_hlines[wp->w_histidx]; q = ml->image; ml->image = hml->image; hml->image = q; q = ml->attr; o = hml->attr; hml->attr = q; ml->attr = null; if (o != null) free(o); #ifdef FONT q = ml->font; o = hml->font; hml->font = q; ml->font = null; if (o != null) free(o); q = ml->fontx; o = hml->fontx; hml->fontx = q; ml->fontx = null; if (o != null) free(o); #endif #ifdef COLOR q = ml->color; o = hml->color; hml->color = q; ml->color = null; if (o != null) free(o); # ifdef COLORS256 q = ml->colorx; o = hml->colorx; hml->colorx = q; ml->colorx = null; if (o != null) free(o); # endif #endif if (++wp->w_histidx >= wp->w_histheight) wp->w_histidx = 0; if (wp->w_scrollback_height < wp->w_histheight) ++wp->w_scrollback_height; } #endif int MFindUsedLine(p, ye, ys) struct win *p; int ys, ye; { int y; struct mline *ml = p->w_mlines + ye; debug2("MFindUsedLine: %d %d\n", ye, ys); for (y = ye; y >= ys; y--, ml--) { if (bcmp((char*)ml->image, blank, p->w_width)) break; if (ml->attr != null && bcmp((char*)ml->attr, null, p->w_width)) break; #ifdef COLOR if (ml->color != null && bcmp((char*)ml->color, null, p->w_width)) break; # ifdef COLORS256 if (ml->colorx != null && bcmp((char*)ml->colorx, null, p->w_width)) break; # endif #endif #ifdef UTF8 if (p->w_encoding == UTF8) { if (ml->font != null && bcmp((char*)ml->font, null, p->w_width)) break; if (ml->fontx != null && bcmp((char*)ml->fontx, null, p->w_width)) break; } #endif } debug1("MFindUsedLine returning %d\n", y); return y; } /* *====================================================================* *====================================================================* */ /* * Tricky: send only one bell even if the window is displayed * more than once. */ void WBell(p, visual) struct win *p; int visual; { struct canvas *cv; if (displays == NULL) p->w_bell = BELL_DONE; for (display = displays; display; display = display->d_next) { for (cv = D_cvlist; cv; cv = cv->c_next) if (cv->c_layer->l_bottom == &p->w_layer) break; if (cv && !visual) AddCStr(D_BL); else if (cv && D_VB) AddCStr(D_VB); else p->w_bell = visual ? BELL_VISUAL : BELL_FOUND; } } /* * This should be reverse video. * Only change video if window is fore. * Because it is used in some termcaps to emulate * a visual bell we do this hack here. * (screen uses \Eg as special vbell sequence) */ static void WReverseVideo(p, on) struct win *p; int on; { struct canvas *cv; for (cv = p->w_layer.l_cvlist; cv; cv = cv->c_lnext) { display = cv->c_display; if (cv != D_forecv) continue; ReverseVideo(on); if (!on && p->w_revvid && !D_CVR) { if (D_VB) AddCStr(D_VB); else p->w_bell = BELL_VISUAL; } } } void WMsg(p, err, str) struct win *p; int err; char *str; { extern struct layer *flayer; struct layer *oldflayer = flayer; flayer = &p->w_layer; LMsg(err, "%s", str); flayer = oldflayer; } void WChangeSize(p, w, h) struct win *p; int w, h; { int wok = 0; struct canvas *cv; if (p->w_layer.l_cvlist == 0) { /* window not displayed -> works always */ ChangeWindowSize(p, w, h, p->w_histheight); return; } for (cv = p->w_layer.l_cvlist; cv; cv = cv->c_lnext) { display = cv->c_display; if (p != D_fore) continue; /* change only fore */ if (D_CWS) break; if (D_CZ0 && (w == Z0width || w == Z1width)) wok = 1; } if (cv == 0 && wok == 0) /* can't change any display */ return; if (!D_CWS) h = p->w_height; ChangeWindowSize(p, w, h, p->w_histheight); for (display = displays; display; display = display->d_next) { if (p == D_fore) { if (D_cvlist && D_cvlist->c_next == 0) ResizeDisplay(w, h); else ResizeDisplay(w, D_height); ResizeLayersToCanvases(); /* XXX Hmm ? */ continue; } for (cv = D_cvlist; cv; cv = cv->c_next) if (cv->c_layer->l_bottom == &p->w_layer) break; if (cv) Redisplay(0); } } static int WindowChangedCheck(s, what, hp) char *s; int what; int *hp; { int h = 0; int l; while(*s) { if (*s++ != (hp ? '%' : '\005')) continue; l = 0; s += (*s == '+'); s += (*s == '-'); while (*s >= '0' && *s <= '9') s++; if (*s == 'L') { s++; l = 0x100; } if (*s == 'h') h = 1; if (*s == what || ((*s | l) == what) || what == 'd') break; if (*s) s++; } if (hp) *hp = h; return *s ? 1 : 0; } void WindowChanged(p, what) struct win *p; int what; { int inwstr, inhstr, inlstr; int inwstrh = 0, inhstrh = 0, inlstrh = 0; int got, ox, oy; struct display *olddisplay = display; struct canvas *cv; inwstr = inhstr = 0; if (what == 'f') { WindowChanged((struct win *)0, 'w'|0x100); WindowChanged((struct win *)0, 'W'|0x100); } if (what) { inwstr = WindowChangedCheck(captionstring, what, &inwstrh); inhstr = WindowChangedCheck(hstatusstring, what, &inhstrh); inlstr = WindowChangedCheck(wliststr, what, &inlstrh); } else { inwstr = inhstr = 0; inlstr = 1; } if (p == 0) { for (display = displays; display; display = display->d_next) { ox = D_x; oy = D_y; for (cv = D_cvlist; cv; cv = cv->c_next) { if (inlstr || (inlstrh && p && p->w_hstatus && *p->w_hstatus && WindowChangedCheck(p->w_hstatus, what, (int *)0))) WListUpdatecv(cv, (struct win *)0); p = Layer2Window(cv->c_layer); if (inwstr || (inwstrh && p && p->w_hstatus && *p->w_hstatus && WindowChangedCheck(p->w_hstatus, what, (int *)0))) if (cv->c_ye + 1 < D_height) RefreshLine(cv->c_ye + 1, 0, D_width - 1, 0); } p = D_fore; if (inhstr || (inhstrh && p && p->w_hstatus && *p->w_hstatus && WindowChangedCheck(p->w_hstatus, what, (int *)0))) RefreshHStatus(); if (ox != -1 && oy != -1) GotoPos(ox, oy); } display = olddisplay; return; } if (p->w_hstatus && *p->w_hstatus && (inwstrh || inhstrh || inlstrh) && WindowChangedCheck(p->w_hstatus, what, (int *)0)) { inwstr |= inwstrh; inhstr |= inhstrh; inlstr |= inlstrh; } if (!inwstr && !inhstr && !inlstr) return; for (display = displays; display; display = display->d_next) { got = 0; ox = D_x; oy = D_y; for (cv = D_cvlist; cv; cv = cv->c_next) { if (inlstr) WListUpdatecv(cv, p); if (Layer2Window(cv->c_layer) != p) continue; got = 1; if (inwstr && cv->c_ye + 1 < D_height) RefreshLine(cv->c_ye + 1, 0, D_width - 1, 0); } if (got && inhstr && p == D_fore) RefreshHStatus(); if (ox != -1 && oy != -1) GotoPos(ox, oy); } display = olddisplay; } screen-4.9.1/misc.c0000664000175000017500000003203614467014146012564 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include #include /* mkdir() declaration */ #include #include "config.h" #include "screen.h" #include "extern.h" #ifdef SVR4 # include #endif extern struct layer *flayer; extern int eff_uid, real_uid; extern int eff_gid, real_gid; extern struct mline mline_old; extern struct mchar mchar_blank; extern unsigned char *null, *blank; #ifdef HAVE_FDWALK static int close_func __P((void *, int)); #endif char * SaveStr(register const char *str) { register char *cp; if (str == NULL) Panic(0, "SaveStr() received NULL - possibly failed crypt()"); if ((cp = malloc(strlen(str) + 1)) == NULL) Panic(0, "%s", strnomem); else strcpy(cp, str); return cp; } char * SaveStrn(register const char *str, int n) { register char *cp; if ((cp = malloc(n + 1)) == NULL) Panic(0, "%s", strnomem); else { bcopy((char *)str, cp, n); cp[n] = 0; } return cp; } /* cheap strstr replacement */ char * InStr(char *str, const char *pat) { int npat = strlen(pat); for (; *str; str++) if (!strncmp(str, pat, npat)) return str; return 0; } #ifndef HAVE_STRERROR char * strerror(int err) { extern int sys_nerr; extern char *sys_errlist[]; static char er[20]; if (err > 0 && err < sys_nerr) return sys_errlist[err]; sprintf(er, "Error %d", err); return er; } #endif void centerline(char *str, int y) { int l, n; ASSERT(flayer); n = strlen(str); if (n > flayer->l_width - 1) n = flayer->l_width - 1; l = (flayer->l_width - 1 - n) / 2; LPutStr(flayer, str, n, &mchar_blank, l, y); } void leftline(char *str, int y, struct mchar *rend) { int l, n; struct mchar mchar_dol; mchar_dol = mchar_blank; mchar_dol.image = '$'; ASSERT(flayer); l = n = strlen(str); if (n > flayer->l_width - 1) n = flayer->l_width - 1; LPutStr(flayer, str, n, rend ? rend : &mchar_blank, 0, y); if (n != l) LPutChar(flayer, &mchar_dol, n, y); } char * Filename(char *s) { register char *p = s; if (p) while (*p) if (*p++ == '/') s = p; return s; } char * stripdev(char *nam) { #ifdef apollo char *p; if (nam == NULL) return NULL; # ifdef SVR4 /* unixware has /dev/pts012 as synonym for /dev/pts/12 */ if (!strncmp(nam, "/dev/pts", 8) && nam[8] >= '0' && nam[8] <= '9') { static char b[13]; sprintf(b, "pts/%d", atoi(nam + 8)); return b; } # endif /* SVR4 */ if (p = strstr(nam, "/dev/")) return p + 5; #else /* apollo */ if (nam == NULL) return NULL; if (strncmp(nam, "/dev/", 5) == 0) return nam + 5; #endif /* apollo */ return nam; } /* * Signal handling */ #ifdef POSIX sigret_t (*xsignal(sig, func)) # ifndef __APPLE__ __P(SIGPROTOARG) # else () # endif int sig; sigret_t (*func) __P(SIGPROTOARG); { struct sigaction osa, sa; sa.sa_handler = func; (void)sigemptyset(&sa.sa_mask); #ifdef SA_RESTART sa.sa_flags = (sig == SIGCHLD ? SA_RESTART : 0); #else sa.sa_flags = 0; #endif if (sigaction(sig, &sa, &osa)) return (sigret_t (*)__P(SIGPROTOARG))-1; return osa.sa_handler; } #else # ifdef hpux /* * hpux has berkeley signal semantics if we use sigvector, * but not, if we use signal, so we define our own signal() routine. */ void (*xsignal(sig, func)) __P(SIGPROTOARG) int sig; void (*func) __P(SIGPROTOARG); { struct sigvec osv, sv; sv.sv_handler = func; sv.sv_mask = sigmask(sig); sv.sv_flags = SV_BSDSIG; if (sigvector(sig, &sv, &osv) < 0) return (void (*)__P(SIGPROTOARG))(BADSIG); return osv.sv_handler; } # endif /* hpux */ #endif /* POSIX */ /* * uid/gid handling */ #ifdef HAVE_SETEUID void xseteuid(int euid) { if (seteuid(euid) == 0) return; seteuid(0); if (seteuid(euid)) Panic(errno, "seteuid"); } void xsetegid(int egid) { if (setegid(egid)) Panic(errno, "setegid"); } #else /* HAVE_SETEUID */ # ifdef HAVE_SETREUID void xseteuid(int euid) { int oeuid; oeuid = geteuid(); if (oeuid == euid) return; if ((int)getuid() != euid) oeuid = getuid(); if (setreuid(oeuid, euid)) Panic(errno, "setreuid"); } void xsetegid(int egid) { int oegid; oegid = getegid(); if (oegid == egid) return; if ((int)getgid() != egid) oegid = getgid(); if (setregid(oegid, egid)) Panic(errno, "setregid"); } # endif /* HAVE_SETREUID */ #endif /* HAVE_SETEUID */ #ifdef NEED_OWN_BCOPY void xbcopy(register char *s1, register char *s2, register int len) { if (s1 < s2 && s2 < s1 + len) { s1 += len; s2 += len; while (len-- > 0) *--s2 = *--s1; } else while (len-- > 0) *s2++ = *s1++; } #endif /* NEED_OWN_BCOPY */ void bclear(char *p, int n) { bcopy((char *)blank, p, n); } void Kill(int pid, int sig) { if (pid < 2) return; (void)kill(pid, sig); } #ifdef HAVE_FDWALK /* * Modern versions of Solaris include fdwalk(3c) which allows efficient * implementation of closing open descriptors; this is helpful because * the default file descriptor limit has risen to 65k. */ static int close_func(void *cb_data, int fd) { int except = *(int *)cb_data; if (fd > 2 && fd != except) (void)close(fd); return (0); } void closeallfiles(int except) { (void)fdwalk(close_func, &except); } #else /* HAVE_FDWALK */ void closeallfiles(int except) { int f; #ifdef SVR4 struct rlimit rl; if ((getrlimit(RLIMIT_NOFILE, &rl) == 0) && rl.rlim_max != RLIM_INFINITY) f = rl.rlim_max; else #endif /* SVR4 */ #if defined(SYSV) && defined(NOFILE) && !defined(ISC) f = NOFILE; while (--f > 2) if (f != except) close(f); #else /* SYSV && !ISC */ { struct pollfd pfd[1024]; int maxfd, i, ret, z; i = 3; /* skip stdin, stdout and stderr */ maxfd = getdtablesize(); while (i < maxfd) { memset(pfd, 0, sizeof(pfd)); z = 0; for (f = i; f < maxfd && f < i + 1024; f++) pfd[z++].fd = f; ret = poll(pfd, f - i, 0); if (ret < 0) Panic(errno, "poll"); z = 0; for (f = i; f < maxfd && f < i + 1024; f++) if (!(pfd[z++].revents & POLLNVAL) && f != except) close(f); i = f; } } #endif /* SYSV && !ISC */ } #endif /* HAVE_FDWALK */ /* * Security - switch to real uid */ #ifndef USE_SETEUID static int UserPID; static sigret_t (*Usersigcld) __P(SIGPROTOARG); #endif static int UserSTAT; int UserContext() { #ifndef USE_SETEUID if (eff_uid == real_uid && eff_gid == real_gid) return 1; Usersigcld = signal(SIGCHLD, SIG_DFL); debug("UserContext: forking.\n"); switch (UserPID = fork()) { case -1: Msg(errno, "fork"); return -1; case 0: signal(SIGHUP, SIG_DFL); signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_DFL); signal(SIGTERM, SIG_DFL); # ifdef BSDJOBS signal(SIGTTIN, SIG_DFL); signal(SIGTTOU, SIG_DFL); # endif setuid(real_uid); setgid(real_gid); return 1; default: return 0; } #else xseteuid(real_uid); xsetegid(real_gid); return 1; #endif } void UserReturn(int val) { #ifndef USE_SETEUID if (eff_uid == real_uid && eff_gid == real_gid) UserSTAT = val; else _exit(val); #else xseteuid(eff_uid); xsetegid(eff_gid); UserSTAT = val; #endif } int UserStatus() { #ifndef USE_SETEUID int i; # ifdef BSDWAIT union wait wstat; # else int wstat; # endif if (eff_uid == real_uid && eff_gid == real_gid) return UserSTAT; if (UserPID < 0) return -1; while ((errno = 0, i = wait(&wstat)) != UserPID) if (i < 0 && errno != EINTR) break; (void)signal(SIGCHLD, Usersigcld); if (i == -1) return -1; return WEXITSTATUS(wstat); #else return UserSTAT; #endif } #ifndef HAVE_RENAME int rename(char *old, char *new) { if (link(old, new) < 0) return -1; return unlink(old); } #endif int AddXChar(char *buf, int ch) { char *p = buf; if (ch < ' ' || ch == 0x7f) { *p++ = '^'; *p++ = ch ^ 0x40; } else if (ch >= 0x80) { *p++ = '\\'; *p++ = (ch >> 6 & 7) + '0'; *p++ = (ch >> 3 & 7) + '0'; *p++ = (ch >> 0 & 7) + '0'; } else *p++ = ch; return p - buf; } int AddXChars(char *buf, int len, char *str) { char *p; if (str == 0) { *buf = 0; return 0; } len -= 4; /* longest sequence produced by AddXChar() */ for (p = buf; p < buf + len && *str; str++) { if (*str == ' ') *p++ = *str; else p += AddXChar(p, *str); } *p = 0; return p - buf; } #ifdef DEBUG void opendebug(int new, int shout) { char buf[256]; #ifdef _MODE_T mode_t oumask = umask(0); #else int oumask = umask(0); #endif ASSERT(!dfp); (void)mkdir(DEBUGDIR, 0777); sprintf(buf, shout ? "%s/SCREEN.%d" : "%s/screen.%d", DEBUGDIR, getpid()); if (!(dfp = fopen(buf, new ? "w" : "a"))) dfp = stderr; else (void)chmod(buf, 0666); (void)umask(oumask); debug("opendebug: done.\n"); } #endif /* DEBUG */ void sleep1000(int msec) { struct timeval t; t.tv_sec = (long)(msec / 1000); t.tv_usec = (long)((msec % 1000) * 1000); select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &t); } /* * This uses either setenv() or putenv(). If it is putenv() we cannot dare * to free the buffer after putenv(), unless it it the one found in putenv.c */ void xsetenv(char *var, char *value) { #ifndef USESETENV char *buf; int l; if ((buf = (char *)malloc((l = strlen(var)) + strlen(value) + 2)) == NULL) { Msg(0, strnomem); return; } strcpy(buf, var); buf[l] = '='; strcpy(buf + l + 1, value); putenv(buf); # ifdef NEEDPUTENV /* * we use our own putenv(), knowing that it does a malloc() * the string space, we can free our buf now. */ free(buf); # else /* NEEDPUTENV */ /* * For all sysv-ish systems that link a standard putenv() * the string-space buf is added to the environment and must not * be freed, or modified. * We are sorry to say that memory is lost here, when setting * the same variable again and again. */ # endif /* NEEDPUTENV */ #else /* USESETENV */ # if HAVE_SETENV_3 setenv(var, value, 1); # else setenv(var, value); # endif /* HAVE_SETENV_3 */ #endif /* USESETENV */ } #ifdef TERMINFO /* * This is a replacement for the buggy _delay function from the termcap * emulation of libcurses, which ignores ospeed. */ int _delay(register int delay, int (*outc) __P((int))) { int pad; extern short ospeed; static short osp2pad[] = { 0,2000,1333,909,743,666,500,333,166,83,55,41,20,10,5,2,1,1 }; if (ospeed <= 0 || ospeed >= (int)(sizeof(osp2pad)/sizeof(*osp2pad))) return 0; pad =osp2pad[ospeed]; delay = (delay + pad / 2) / pad; while (delay-- > 0) (*outc)(0); return 0; } #endif /* TERMINFO */ #ifndef USEVARARGS # define xva_arg(s, t, tn) (*(t *)(s += xsnoff(tn, 0, 0), s - xsnoff(tn, 0, 0))) # define xva_list char * static int xsnoff(int a, char *b, int c) { return a ? (char *)&c - (char *)&b : (char *)&b - (char *)&a; } int xsnprintf(char *s, int n, char *fmt, unsigned long p1, p2, p3, p4, p5, p6) { int xvsnprintf __P((char *, int, char *, xva_list)); return xvsnprintf(s, n, fmt, (char *)&fmt + xsnoff(1, 0, 0)); } #else # define xva_arg(s, t, tn) va_arg(s, t) # define xva_list va_list #endif #if !defined(USEVARARGS) || !defined(HAVE_VSNPRINTF) int xvsnprintf(char *s, int n, char *fmt, xva_list stack) { char *f, *sf = 0; int i, on, argl = 0; char myf[10], buf[20]; char *arg, *myfp; on = n; f = fmt; arg = 0; while (arg || (sf = index(f, '%')) || (sf = f + strlen(f))) { if (arg == 0) { arg = f; argl = sf - f; } if (argl) { i = argl > n - 1 ? n - 1 : argl; strncpy(s, arg, i); s += i; n -= i; if (i < argl) { *s = 0; return on; } } arg = 0; if (sf == 0) continue; f = sf; sf = 0; if (!*f) break; myfp = myf; *myfp++ = *f++; while (((*f >= '0' && *f <= '9') || *f == '#') && myfp - myf < 8) *myfp++ = *f++; *myfp++ = *f; *myfp = 0; if (!*f++) break; switch (f[-1]) { case '%': arg = "%"; break; case 'c': case 'o': case 'd': case 'x': i = xva_arg(stack, int, 0); sprintf(buf, myf, i); arg = buf; break; case 's': arg = xva_arg(stack, char *, 1); if (arg == 0) arg = "NULL"; break; default: arg = ""; break; } argl = strlen(arg); } *s = 0; return on - n; } #endif screen-4.9.1/screen.c0000664000175000017500000024331214467014146013111 0ustar alexalex/* Copyright (c) 2010 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann #ifdef HAVE_BRAILLE * Modified by: * Authors: Hadi Bargi Rangin bargi@dots.physics.orst.edu * Bill Barry barryb@dots.physics.orst.edu * Randy Lundquist randyl@dots.physics.orst.edu * * Modifications Copyright (c) 1995 by * Science Access Project, Oregon State University. #endif * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #ifdef _AIX #include #endif #include #include #include #include #include #if defined(__sun) # include #endif #ifdef sgi # include #endif #include #ifndef sun # include #endif #ifndef SIGINT # include #endif #include "config.h" #ifdef HAVE_STROPTS_H # include #endif #if defined(SYSV) && !defined(ISC) # include #endif #if defined(sequent) || defined(SVR4) # include #endif /* sequent || SVR4 */ #ifdef ISC # include # include # include #endif /* ISC */ #if (defined(AUX) || defined(_AUX_SOURCE)) && defined(POSIX) # include #endif #if defined(USE_LOCALE) || defined(ENCODINGS) # include #endif #if defined(HAVE_NL_LANGINFO) && defined(ENCODINGS) # include #endif #include "screen.h" #ifdef HAVE_BRAILLE # include "braille.h" #endif #include "patchlevel.h" /* * At the moment we only need the real password if the * builtin lock is used. Therefore disable SHADOWPW if * we do not really need it (kind of security thing). */ #ifndef LOCK # undef SHADOWPW #endif #include #ifdef SHADOWPW # include #endif /* SHADOWPW */ #include "logfile.h" /* islogfile, logfflush, logfopen/logfclose */ #ifdef DEBUG FILE *dfp; #endif extern char Term[], screenterm[], **environ, Termcap[]; int force_vt = 1; int VBellWait, MsgWait, MsgMinWait, SilenceWait; extern struct acluser *users; extern struct display *displays, *display; extern struct LayFuncs MarkLf; extern int visual_bell; #ifdef COPY_PASTE extern unsigned char mark_key_tab[]; #endif extern char version[]; extern char DefaultShell[]; #ifdef ZMODEM extern char *zmodem_sendcmd; extern char *zmodem_recvcmd; #endif extern struct layout *layout_last; char *ShellProg; char *ShellArgs[2]; extern struct NewWindow nwin_undef, nwin_default, nwin_options; struct backtick; static struct passwd *getpwbyname __P((char *, struct passwd *)); static void SigChldHandler __P((void)); static sigret_t SigChld __P(SIGPROTOARG); static sigret_t SigInt __P(SIGPROTOARG); static sigret_t CoreDump __P(SIGPROTOARG); static sigret_t FinitHandler __P(SIGPROTOARG); static void DoWait __P((void)); static void serv_read_fn __P((struct event *, char *)); static void serv_select_fn __P((struct event *, char *)); static void logflush_fn __P((struct event *, char *)); static void backtick_filter __P((struct backtick *)); static void backtick_fn __P((struct event *, char *)); static char *runbacktick __P((struct backtick *, int *, time_t)); static int IsSymbol __P((char *, char *)); static char *ParseChar __P((char *, char *)); static int ParseEscape __P((char *)); static char *pad_expand __P((char *, char *, int, int)); static void SetTtyname __P((bool, struct stat *)); #ifdef DEBUG static void fds __P((void)); #endif int nversion; /* numerical version, used for secondary DA */ /* the attacher */ struct passwd *ppp; char *attach_tty; /* Indicator whether the current tty exists in another namespace. */ bool attach_tty_is_in_new_ns = false; /* Content of the tty symlink when attach_tty_is_in_new_ns == true. */ char attach_tty_name_in_ns[MAXPATHLEN]; int attach_fd = -1; char *attach_term; char *LoginName; struct mode attach_Mode; char SockPath[MAXPATHLEN + 2 * MAXSTR]; char *SockName; /* SockName is pointer in SockPath */ char *SockMatch = NULL; /* session id command line argument */ int ServerSocket = -1; struct event serv_read; struct event serv_select; struct event logflushev; char **NewEnv = NULL; char *RcFileName = NULL; char *home; char *screenlogfile; /* filename layout */ int log_flush = 10; /* flush interval in seconds */ int logtstamp_on = 0; /* tstamp disabled */ char *logtstamp_string; /* stamp layout */ int logtstamp_after = 120; /* first tstamp after 120s */ char *hardcopydir = NULL; char *BellString; char *VisualBellString; char *ActivityString; #ifdef COPY_PASTE char *BufferFile; #endif #ifdef POW_DETACH char *PowDetachString; #endif char *hstatusstring; char *captionstring; char *timestring; char *wliststr; char *wlisttit; int auto_detach = 1; int iflag, rflag, dflag, lsflag, quietflag, wipeflag, xflag; int cmdflag; int queryflag = -1; int adaptflag; #ifdef MULTIUSER char *multi; char *multi_home; int multi_uid; int own_uid; int multiattach; int tty_mode; int tty_oldmode = -1; #endif char HostName[MAXSTR]; int MasterPid, PanicPid; int real_uid, real_gid, eff_uid, eff_gid; int default_startup; int ZombieKey_destroy, ZombieKey_resurrect, ZombieKey_onerror; char *preselect = NULL; /* only used in Attach() */ #ifdef UTF8 char *screenencodings; #endif #ifdef DW_CHARS int cjkwidth; #endif #ifdef NETHACK int nethackflag = 0; #endif int maxwin; struct layer *flayer; struct win *fore; struct win *windows; struct win *console_window; #ifdef BUILTIN_TELNET int af; #endif /* * Do this last */ #include "extern.h" char strnomem[] = "Out of memory."; static int InterruptPlease; static int GotSigChld; static int lf_secreopen(name, wantfd, l) char *name; int wantfd; struct logfile *l; { int got_fd; close(wantfd); if (((got_fd = secopen(name, O_WRONLY | O_CREAT | O_APPEND, 0666)) < 0) || lf_move_fd(got_fd, wantfd) < 0) { logfclose(l); debug1("lf_secreopen: failed for %s\n", name); return -1; } l->st->st_ino = l->st->st_dev = 0; debug2("lf_secreopen: %d = %s\n", wantfd, name); return 0; } /********************************************************************/ /********************************************************************/ /********************************************************************/ static struct passwd * getpwbyname(name, ppp) char *name; struct passwd *ppp; { int n; #ifdef SHADOWPW struct spwd *sss = NULL; static char *spw = NULL; #endif if (!ppp && !(ppp = getpwnam(name))) return NULL; /* Do password sanity check..., allow ##user for SUN_C2 security */ #ifdef SHADOWPW pw_try_again: #endif n = 0; if (ppp->pw_passwd[0] == '#' && ppp->pw_passwd[1] == '#' && strcmp(ppp->pw_passwd + 2, ppp->pw_name) == 0) n = 13; for (; n < 13; n++) { char c = ppp->pw_passwd[n]; if (!(c == '.' || c == '/' || c == '$' || (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) break; } #ifdef SHADOWPW /* try to determine real password */ if (n < 13 && sss == 0) { sss = getspnam(ppp->pw_name); if (sss) { if (spw) free(spw); ppp->pw_passwd = spw = SaveStr(sss->sp_pwdp); endspent(); /* this should delete all buffers ... */ goto pw_try_again; } endspent(); /* this should delete all buffers ... */ } #endif if (n < 13) ppp->pw_passwd = 0; #ifdef linux if (ppp->pw_passwd && strlen(ppp->pw_passwd) == 13 + 11) ppp->pw_passwd[13] = 0; /* beware of linux's long passwords */ #endif return ppp; } static char *locale_name(void) { static char *s; if (!s) { s = getenv("LC_ALL"); if (s == NULL) s = getenv("LC_CTYPE"); if (s == NULL) s = getenv("LANG"); } return s; } int main(int ac, char** av) { register int n; char *ap; char *av0; char socknamebuf[2 * MAXSTR]; int mflag = 0; char *myname = (ac == 0) ? "screen" : av[0]; char *SockDir; struct stat st; #ifdef _MODE_T /* (jw) */ mode_t oumask; #else int oumask; #endif #if defined(SYSV) && !defined(ISC) struct utsname utsnam; #endif struct NewWindow nwin; int detached = 0; /* start up detached */ #ifdef MULTIUSER char *sockp; #endif char *sty = 0; #if (defined(AUX) || defined(_AUX_SOURCE)) && defined(POSIX) setcompat(COMPAT_POSIX|COMPAT_BSDPROT); /* turn on seteuid support */ #endif #if defined(sun) && defined(SVR4) { /* Solaris' login blocks SIGHUP! This is _very bad_ */ sigset_t sset; sigemptyset(&sset); sigprocmask(SIG_SETMASK, &sset, 0); } #endif /* * First, close all unused descriptors * (otherwise, we might have problems with the select() call) */ closeallfiles(0); #ifdef DEBUG opendebug(1, 0); #endif snprintf(version, 59, "%d.%.2d.%.2d%s (%s%s) %s", REV, VERS, PATCHLEVEL, STATE, ORIGIN, GIT_REV, DATE); nversion = REV * 10000 + VERS * 100 + PATCHLEVEL; debug2("-- screen debug started %s (%s)\n", *av, version); #ifdef POSIX debug("POSIX\n"); #endif #ifdef TERMIO debug("TERMIO\n"); #endif #ifdef SYSV debug("SYSV\n"); #endif #ifdef SYSVSIGS debug("SYSVSIGS\n"); #endif #if defined(SIGWINCH) && defined(TIOCGWINSZ) debug("Window size changing enabled\n"); #endif #ifdef HAVE_SETREUID debug("SETREUID\n"); #endif #ifdef HAVE_SETEUID debug("SETEUID\n"); #endif #ifdef hpux debug("hpux\n"); #endif #ifdef USEBCOPY debug("USEBCOPY\n"); #endif #ifdef UTMPOK debug("UTMPOK\n"); #endif #ifdef LOADAV debug("LOADAV\n"); #endif #ifdef NETHACK debug("NETHACK\n"); #endif #ifdef TERMINFO debug("TERMINFO\n"); #endif #ifdef SHADOWPW debug("SHADOWPW\n"); #endif #ifdef NAME_MAX debug1("NAME_MAX = %d\n", NAME_MAX); #endif BellString = SaveStr("Bell in window %n"); VisualBellString = SaveStr(" Wuff, Wuff!! "); ActivityString = SaveStr("Activity in window %n"); screenlogfile = SaveStr("screenlog.%n"); logtstamp_string = SaveStr("-- %n:%t -- time-stamp -- %M/%d/%y %c:%s --\n"); hstatusstring = SaveStr("%h"); captionstring = SaveStr("%4n %t"); timestring = SaveStr("%c:%s %M %d %H%? %l%?"); wlisttit = SaveStr(" Num Name%=Flags"); wliststr = SaveStr("%4n %t%=%f"); #ifdef COPY_PASTE BufferFile = SaveStr(DEFAULT_BUFFERFILE); #endif ShellProg = NULL; #ifdef POW_DETACH PowDetachString = 0; #endif default_startup = (ac > 1) ? 0 : 1; adaptflag = 0; VBellWait = VBELLWAIT * 1000; MsgWait = MSGWAIT * 1000; MsgMinWait = MSGMINWAIT * 1000; SilenceWait = SILENCEWAIT; #ifdef HAVE_BRAILLE InitBraille(); #endif #ifdef ZMODEM zmodem_sendcmd = SaveStr("!!! sz -vv -b "); zmodem_recvcmd = SaveStr("!!! rz -vv -b -E"); #endif #ifdef COPY_PASTE CompileKeys((char *)0, 0, mark_key_tab); #endif #ifdef UTF8 InitBuiltinTabs(); screenencodings = SaveStr(SCREENENCODINGS); #endif #ifdef DW_CHARS cjkwidth = 0; #endif nwin = nwin_undef; nwin_options = nwin_undef; strncpy(screenterm, "screen", MAXTERMLEN); screenterm[MAXTERMLEN] = '\0'; #ifdef BUILTIN_TELNET af = AF_UNSPEC; #endif real_uid = getuid(); real_gid = getgid(); eff_uid = geteuid(); eff_gid = getegid(); logreopen_register(lf_secreopen); av0 = *av; /* if this is a login screen, assume -RR */ if (av0 && *av0 == '-') { rflag = 4; #ifdef MULTI xflag = 1; #else dflag = 1; #endif ShellProg = SaveStr(DefaultShell); /* to prevent nasty circles */ } while (ac > 0){ ap = *++av; if (--ac > 0 && *ap == '-') { if (ap[1] == '-' && ap[2] == 0) { av++; ac--; break; } if (ap[1] == '-' && !strcmp(ap, "--version")) { printf("Screen version %s\n", version); exit(0); } if (ap[1] == '-' && !strcmp(ap, "--help")) exit_with_usage(myname, NULL, NULL); while (ap && *ap && *++ap) { switch (*ap) { #ifdef BUILTIN_TELNET case '4': af = AF_INET; break; case '6': af = AF_INET6; break; #endif case 'a': nwin_options.aflag = 1; break; case 'A': adaptflag = 1; break; case 'p': /* preselect */ if (*++ap) preselect = ap; else { if (!--ac) exit_with_usage(myname, "Specify a window to preselect with -p", NULL); preselect = *++av; } ap = NULL; break; #ifdef HAVE_BRAILLE case 'B': bd.bd_start_braille = 1; break; #endif case 'c': if (*++ap) RcFileName = ap; else { if (--ac == 0) exit_with_usage(myname, "Specify an alternate rc-filename with -c", NULL); RcFileName = *++av; } ap = NULL; break; case 'e': if (!*++ap) { if (--ac == 0) exit_with_usage(myname, "Specify command characters with -e", NULL); ap = *++av; } if (ParseEscape(ap)) Panic(0, "Two characters are required with -e option, not '%s'.", ap); ap = NULL; break; case 'f': ap++; switch (*ap++) { case 'n': case '0': nwin_options.flowflag = FLOW_NOW * 0; break; case '\0': ap--; /* FALLTHROUGH */ case 'y': case '1': nwin_options.flowflag = FLOW_NOW * 1; break; case 'a': nwin_options.flowflag = FLOW_AUTOFLAG; break; default: exit_with_usage(myname, "Unknown flow option -%s", --ap); } break; case 'h': if (--ac == 0) exit_with_usage(myname, NULL, NULL); nwin_options.histheight = atoi(*++av); if (nwin_options.histheight < 0) exit_with_usage(myname, "-h: %s: negative scrollback size?", *av); break; case 'i': iflag = 1; break; case 't': /* title, the former AkA == -k */ if (--ac == 0) exit_with_usage(myname, "Specify a new window-name with -t", NULL); nwin_options.aka = *++av; break; case 'l': ap++; switch (*ap++) { case 'n': case '0': nwin_options.lflag = 0; break; case '\0': ap--; /* FALLTHROUGH */ case 'y': case '1': nwin_options.lflag = 1; break; case 'a': nwin_options.lflag = 3; break; case 's': /* -ls */ case 'i': /* -list */ lsflag = 1; if (ac > 1 && !SockMatch) { SockMatch = *++av; ac--; } ap = NULL; break; default: exit_with_usage(myname, "%s: Unknown suboption to -l", --ap); } break; case 'w': if (strcmp(ap+1, "ipe")) exit_with_usage(myname, "Unknown option %s", --ap); lsflag = 1; wipeflag = 1; if (ac > 1 && !SockMatch) { SockMatch = *++av; ac--; } break; case 'L': if (!strcmp(ap + 1, "ogfile")) { if (--ac == 0) exit_with_usage(myname, "Specify logfile path with -Logfile", NULL); if (strlen(*++av) > PATH_MAX) Panic(1, "-Logfile name too long. (max. %d char)", PATH_MAX); free(screenlogfile); /* we already set it up while starting */ screenlogfile = SaveStr(*av); ap = NULL; } else if (!strcmp(ap, "L")) nwin_options.Lflag = 1; break; case 'm': mflag = 1; break; case 'O': /* to be (or not to be?) deleted. jw. */ force_vt = 0; break; case 'T': if (--ac == 0) exit_with_usage(myname, "Specify terminal-type with -T", NULL); if (strlen(*++av) < MAXTERMLEN) { strncpy(screenterm, *av, MAXTERMLEN); screenterm[MAXTERMLEN] = '\0'; } else Panic(0, "-T: terminal name too long. (max. %d char)", MAXTERMLEN); nwin_options.term = screenterm; break; case 'q': quietflag = 1; break; case 'Q': queryflag = 1; cmdflag = 1; break; case 'r': case 'R': #ifdef MULTI case 'x': #endif if (ac > 1 && *av[1] != '-' && !SockMatch) { SockMatch = *++av; ac--; debug2("rflag=%d, SockMatch=%s\n", dflag, SockMatch); } #ifdef MULTI if (*ap == 'x') xflag = 1; #endif if (rflag) rflag = 2; rflag += (*ap == 'R') ? 2 : 1; break; #ifdef REMOTE_DETACH case 'd': dflag = 1; /* FALLTHROUGH */ case 'D': if (!dflag) dflag = 2; if (ac == 2) { if (*av[1] != '-' && !SockMatch) { SockMatch = *++av; ac--; debug2("dflag=%d, SockMatch=%s\n", dflag, SockMatch); } } break; #endif case 's': if (--ac == 0) exit_with_usage(myname, "Specify shell with -s", NULL); if (ShellProg) free(ShellProg); ShellProg = SaveStr(*++av); debug1("ShellProg: '%s'\n", ShellProg); break; case 'S': if (!SockMatch) { if (--ac == 0) exit_with_usage(myname, "Specify session-name with -S", NULL); SockMatch = *++av; debug1("SockMatch: '%s'\n", SockMatch); debug1("SockMatch len: '%d'\n", (int)strlen(SockMatch)); if (strlen(SockMatch) > 80) exit_with_usage(myname, "Session-name is too long (max length is 80 symbols)", NULL); } if (!*SockMatch) exit_with_usage(myname, "Empty session-name?", NULL); break; case 'X': cmdflag = 1; break; case 'v': printf("Screen version %s\n", version); exit(0); #ifdef UTF8 case 'U': nwin_options.encoding = nwin_options.encoding == -1 ? UTF8 : 0; break; #endif default: exit_with_usage(myname, "Unknown option %s", --ap); } } } else break; } #ifdef SIGBUS /* OOPS, linux has no bus errors! */ signal(SIGBUS, CoreDump); #endif /* SIGBUS */ signal(SIGSEGV, CoreDump); #ifdef USE_LOCALE setlocale(LC_ALL, ""); #endif #ifdef ENCODINGS if (nwin_options.encoding == -1) { /* ask locale if we should start in UTF-8 mode */ # ifdef HAVE_NL_LANGINFO # ifndef USE_LOCALE setlocale(LC_CTYPE, ""); # endif nwin_options.encoding = FindEncoding(nl_langinfo(CODESET)); debug1("locale says encoding = %d\n", nwin_options.encoding); # else # ifdef UTF8 char *s; if ((s = locale_name()) && InStr(s, "UTF-8")) nwin_options.encoding = UTF8; # endif debug1("environment says encoding=%d\n", nwin_options.encoding); #endif } # ifdef DW_CHARS { char *s; if ((s = locale_name())) { if(!strncmp(s, "zh_", 3) || !strncmp(s, "ja_", 3) || !strncmp(s, "ko_", 3)) { cjkwidth = 1; } } } #endif #endif if (nwin_options.aka) { #ifdef ENCODINGS if (nwin_options.encoding > 0) { size_t len = strlen(nwin_options.aka); size_t newsz; char *newbuf = malloc(3 * len); if (!newbuf) Panic(0, "%s", strnomem); newsz = RecodeBuf((unsigned char *)nwin_options.aka, len, nwin_options.encoding, 0, (unsigned char *)newbuf); newbuf[newsz] = '\0'; nwin_options.aka = newbuf; } else #endif { /* If we just use the original value from av, subsequent shelltitle invocations will attempt to free space we don't own... */ nwin_options.aka = SaveStr(nwin_options.aka); } } if (SockMatch && strlen(SockMatch) >= MAXSTR) Panic(0, "Ridiculously long socketname - try again."); if (cmdflag && !rflag && !dflag && !xflag) xflag = 1; if (!cmdflag && dflag && mflag && !(rflag || xflag)) detached = 1; nwin = nwin_options; #ifdef ENCODINGS nwin.encoding = nwin_undef.encoding; /* let screenrc overwrite it */ #endif if (ac) nwin.args = av; /* make the write() calls return -1 on all errors */ #ifdef SIGXFSZ /* * Ronald F. Guilmette, Oct 29 '94, bug-gnu-utils@prep.ai.mit.edu: * It appears that in System V Release 4, UNIX, if you are writing * an output file and you exceed the currently set file size limit, * you _don't_ just get the call to `write' returning with a * failure code. Rather, you get a signal called `SIGXFSZ' which, * if neither handled nor ignored, will cause your program to crash * with a core dump. */ signal(SIGXFSZ, SIG_IGN); #endif /* SIGXFSZ */ #ifdef SIGPIPE signal(SIGPIPE, SIG_IGN); #endif if (!ShellProg) { register char *sh; sh = getenv("SHELL"); ShellProg = SaveStr(sh ? sh : DefaultShell); } ShellArgs[0] = ShellProg; home = getenv("HOME"); if (!mflag && !SockMatch) { sty = getenv("STY"); if (sty && *sty == 0) sty = 0; } #ifdef NETHACK if (!(nethackflag = (getenv("NETHACKOPTIONS") != NULL))) { char nethackrc[MAXPATHLEN]; if (home && (strlen(home) < (MAXPATHLEN - 20))) { sprintf(nethackrc,"%s/.nethackrc", home); nethackflag = !access(nethackrc, F_OK); } } #endif #ifdef MULTIUSER own_uid = multi_uid = real_uid; if (SockMatch && (sockp = index(SockMatch, '/'))) { *sockp = 0; multi = SockMatch; SockMatch = sockp + 1; if (*multi) { struct passwd *mppp; if ((mppp = getpwnam(multi)) == (struct passwd *)0) Panic(0, "Cannot identify account '%s'.", multi); multi_uid = mppp->pw_uid; multi_home = SaveStr(mppp->pw_dir); if (strlen(multi_home) > MAXPATHLEN - 10) Panic(0, "home directory path too long"); # ifdef MULTI /* always fake multi attach mode */ if (rflag || lsflag) xflag = 1; # endif /* MULTI */ detached = 0; multiattach = 1; } /* Special case: effective user is multiuser. */ if (eff_uid && (multi_uid != eff_uid)) Panic(0, "Must run suid root for multiuser support."); } if (SockMatch && *SockMatch == 0) SockMatch = 0; #endif /* MULTIUSER */ if ((LoginName = getlogin()) && LoginName[0] != '\0') { if ((ppp = getpwnam(LoginName)) != (struct passwd *) 0) if ((int)ppp->pw_uid != real_uid) ppp = (struct passwd *) 0; } if (ppp == 0) { if ((ppp = getpwuid(real_uid)) == 0) { Panic(0, "getpwuid() can't identify your account!"); exit(1); } LoginName = ppp->pw_name; } LoginName = SaveStr(LoginName); ppp = getpwbyname(LoginName, ppp); #if !defined(SOCKDIR) && defined(MULTIUSER) if (multi && !multiattach) { if (home && strcmp(home, ppp->pw_dir)) Panic(0, "$HOME must match passwd entry for multiuser screens."); } #endif #define SET_GUID() do \ { \ setgid(real_gid); \ setuid(real_uid); \ eff_uid = real_uid; \ eff_gid = real_gid; \ } while (0) if (home == 0 || *home == '\0') home = ppp->pw_dir; if (strlen(LoginName) > MAXLOGINLEN) Panic(0, "LoginName too long - sorry."); #ifdef MULTIUSER if (multi && strlen(multi) > MAXLOGINLEN) Panic(0, "Screen owner name too long - sorry."); #endif if (strlen(home) > MAXPATHLEN - 25) Panic(0, "$HOME too long - sorry."); attach_tty = ""; if (!detached && !lsflag && !cmdflag && !(dflag && !mflag && !rflag && !xflag) && !(sty && !SockMatch && !mflag && !rflag && !xflag)) { int fl; /* ttyname implies isatty */ SetTtyname(true, &st); #ifdef MULTIUSER tty_mode = (int)st.st_mode & 0777; #endif fl = fcntl(0, F_GETFL, 0); if (fl != -1 && (fl & (O_RDWR|O_RDONLY|O_WRONLY)) == O_RDWR) attach_fd = 0; if (attach_fd == -1) { if ((n = secopen(attach_tty, O_RDWR | O_NONBLOCK, 0)) < 0) Panic(0, "Cannot open your terminal '%s' - please check.", attach_tty); /* If the server uses a socket we need an open fd. */ attach_fd = n; } debug2("attach_tty is %s, attach_fd is %d\n", attach_tty, attach_fd); if ((attach_term = getenv("TERM")) == 0 || *attach_term == 0) Panic(0, "Please set a terminal type."); if (strlen(attach_term) > MAXTERMLEN) Panic(0, "$TERM too long - sorry."); GetTTY(0, &attach_Mode); #ifdef DEBUG DebugTTY(&attach_Mode); #endif /* DEBUG */ } #ifdef _MODE_T oumask = umask(0); /* well, unsigned never fails? jw. */ #else if ((oumask = (int)umask(0)) == -1) Panic(errno, "Cannot change umask to zero"); #endif SockDir = getenv("SCREENDIR"); if (SockDir) { if (strlen(SockDir) >= MAXPATHLEN - 1) Panic(0, "Ridiculously long $SCREENDIR - try again."); #ifdef MULTIUSER if (multi) Panic(0, "No $SCREENDIR with multi screens, please."); #endif } #ifdef MULTIUSER if (multiattach) { # ifndef SOCKDIR sprintf(SockPath, "%s/.screen", multi_home); SockDir = SockPath; # else SockDir = SOCKDIR; sprintf(SockPath, "%s/S-%s", SockDir, multi); # endif } else #endif { #ifndef SOCKDIR if (SockDir == 0) { sprintf(SockPath, "%s/.screen", home); SockDir = SockPath; } #endif if (SockDir) { if (access(SockDir, F_OK)) { debug1("SockDir '%s' missing ...\n", SockDir); if (UserContext() > 0) { if (mkdir(SockDir, 0700)) UserReturn(0); UserReturn(1); } if (UserStatus() <= 0) Panic(0, "Cannot make directory '%s'.", SockDir); } if (SockDir != SockPath) strcpy(SockPath, SockDir); } #ifdef SOCKDIR else { SockDir = SOCKDIR; if (stat(SockDir, &st)) { n = (eff_uid == 0 && (real_uid || eff_gid == real_gid)) ? 0755 : (eff_gid != real_gid) ? 0775 : #ifdef S_ISVTX 0777|S_ISVTX; #else 0777; #endif if (mkdir(SockDir, n) == -1) Panic(errno, "Cannot make directory '%s'", SockDir); } else { if (!S_ISDIR(st.st_mode)) Panic(0, "'%s' must be a directory.", SockDir); if (eff_uid == 0 && real_uid && (int)st.st_uid != eff_uid) Panic(0, "Directory '%s' must be owned by root.", SockDir); n = (eff_uid == 0 && (real_uid || (st.st_mode & 0775) != 0775)) ? 0755 : (eff_gid == (int)st.st_gid && eff_gid != real_gid) ? 0775 : 0777; if (((int)st.st_mode & 0777) != n) Panic(0, "Directory '%s' must have mode %03o.", SockDir, n); } sprintf(SockPath, "%s/S-%s", SockDir, LoginName); if (access(SockPath, F_OK)) { if (mkdir(SockPath, 0700) == -1 && errno != EEXIST) Panic(errno, "Cannot make directory '%s'", SockPath); (void) chown(SockPath, real_uid, real_gid); } } #endif } if (stat(SockPath, &st) == -1) Panic(errno, "Cannot access %s", SockPath); else if (!S_ISDIR(st.st_mode)) Panic(0, "%s is not a directory.", SockPath); #ifdef MULTIUSER if (multi) { if ((int)st.st_uid != multi_uid) Panic(0, "%s is not the owner of %s.", multi, SockPath); } else #endif { #ifdef SOCKDIR /* if SOCKDIR is not defined, the socket is in $HOME. in that case it does not make sense to compare uids. */ if ((int)st.st_uid != real_uid) Panic(0, "You are not the owner of %s.", SockPath); #endif } if ((st.st_mode & 0777) != 0700) Panic(0, "Directory %s must have mode 700.", SockPath); if (SockMatch && index(SockMatch, '/')) Panic(0, "Bad session name '%s'", SockMatch); SockName = SockPath + strlen(SockPath) + 1; *SockName = 0; (void) umask(oumask); debug2("SockPath: %s SockMatch: %s\n", SockPath, SockMatch ? SockMatch : "NULL"); #if defined(SYSV) && !defined(ISC) if (uname(&utsnam) == -1) Panic(errno, "uname"); strncpy(HostName, utsnam.nodename, sizeof(utsnam.nodename) < MAXSTR ? sizeof(utsnam.nodename) : MAXSTR - 1); HostName[sizeof(utsnam.nodename) < MAXSTR ? sizeof(utsnam.nodename) : MAXSTR - 1] = '\0'; #else (void) gethostname(HostName, MAXSTR); HostName[MAXSTR - 1] = '\0'; #endif if ((ap = index(HostName, '.')) != NULL) *ap = '\0'; if (lsflag) { int i, fo, oth; bool sock; #ifdef MULTIUSER if (multi) real_uid = multi_uid; #endif SET_GUID(); i = FindSocket((int *)NULL, &fo, &oth, SockMatch, &sock); if (quietflag) { if (rflag) exit(10 + i); else exit(9 + (fo || oth ? 1 : 0) + fo); } if (fo == 0) Panic(0, "No Sockets found in %s.\n", SockPath); Msg(0, "%d Socket%s in %s.", fo, fo > 1 ? "s" : "", SockPath); eexit(0); } signal(SIG_BYE, AttacherFinit); /* prevent races */ if (cmdflag) { #ifdef MULTIUSER if (multi) real_uid = multi_uid; #endif /* attach_tty is not mandatory */ SetTtyname(false, &st); if (!*av) Panic(0, "Please specify a command."); if (!strncmp("sessionname", *av, 11)) { if (!*++av) Panic(0, "Please specify a parameter."); if (strlen(*av) > 80) Panic(0, "Parameter of command 'sessionname' is too long."); --av; } SET_GUID(); SendCmdMessage(sty, SockMatch, av, queryflag >= 0); exit(0); } else if (rflag || xflag) { debug("screen -r: - is there anybody out there?\n"); if (Attach(MSG_ATTACH)) { Attacher(); /* NOTREACHED */ } #ifdef MULTIUSER if (multiattach) Panic(0, "Can't create sessions of other users."); #endif debug("screen -r: backend not responding -- still crying\n"); } else if (dflag && !mflag) { SetTtyname(false, &st); Attach(MSG_DETACH); Msg(0, "[%s %sdetached.]\n", SockName, (dflag > 1 ? "power " : "")); eexit(0); /* NOTREACHED */ } if (!SockMatch && !mflag && sty) { /* attach_tty is not mandatory */ SetTtyname(false, &st); SET_GUID(); nwin_options.args = av; SendCreateMsg(sty, &nwin); exit(0); /* NOTREACHED */ } nwin_compose(&nwin_default, &nwin_options, &nwin_default); if (!detached || dflag != 2) MasterPid = fork(); else MasterPid = 0; switch (MasterPid) { case -1: Panic(errno, "fork"); /* NOTREACHED */ case 0: break; default: if (detached) exit(0); if (SockMatch) sprintf(socknamebuf, "%d.%s", MasterPid, SockMatch); else sprintf(socknamebuf, "%d.%s.%s", MasterPid, stripdev(attach_tty), HostName); for (ap = socknamebuf; *ap; ap++) if (*ap == '/') *ap = '-'; #ifdef NAME_MAX if (strlen(socknamebuf) > NAME_MAX) socknamebuf[NAME_MAX] = 0; #endif sprintf(SockPath + strlen(SockPath), "/%s", socknamebuf); SET_GUID(); Attacher(); /* NOTREACHED */ } if (!detached) PanicPid = getppid(); if (DefaultEsc == -1) DefaultEsc = Ctrl('a'); if (DefaultMetaEsc == -1) DefaultMetaEsc = 'a'; ap = av0 + strlen(av0) - 1; while (ap >= av0) { if (!strncmp("screen", ap, 6)) { memcpy(ap, "SCREEN", 6); /* name this process "SCREEN-BACKEND" */ break; } ap--; } if (ap < av0) *av0 = 'S'; #ifdef DEBUG { char buf[256]; if (dfp && dfp != stderr) fclose(dfp); sprintf(buf, "%s/SCREEN.%d", DEBUGDIR, (int)getpid()); if ((dfp = fopen(buf, "w")) == NULL) dfp = stderr; else (void) chmod(buf, 0666); } #endif if (!detached) { if (attach_fd == -1) { if ((n = secopen(attach_tty, O_RDWR | O_NONBLOCK, 0)) < 0) Panic(0, "Cannot reopen '%s' - please check.", attach_tty); } else n = dup(attach_fd); } else n = -1; freopen("/dev/null", "r", stdin); freopen("/dev/null", "w", stdout); #ifdef DEBUG if (dfp != stderr) #endif freopen("/dev/null", "w", stderr); debug("-- screen.back debug started\n"); /* This guarantees that the session owner is listed, even when we * start detached. From now on we should not refer to 'LoginName' * any more, use users->u_name instead. */ if (UserAdd(LoginName, (char *)0, (struct acluser **)0) < 0) Panic(0, "Could not create user info"); if (!detached) { if (MakeDisplay(LoginName, attach_tty, attach_term, n, getppid(), &attach_Mode) == 0) Panic(0, "Could not alloc display"); PanicPid = 0; #ifdef ENCODINGS D_encoding = nwin_options.encoding > 0 ? nwin_options.encoding : 0; debug1("D_encoding = %d\n", D_encoding); #endif } if (SockMatch) { /* user started us with -S option */ sprintf(socknamebuf, "%d.%s", (int)getpid(), SockMatch); } else { sprintf(socknamebuf, "%d.%s.%s", (int)getpid(), stripdev(attach_tty), HostName); } for (ap = socknamebuf; *ap; ap++) if (*ap == '/') *ap = '-'; #ifdef NAME_MAX if (strlen(socknamebuf) > NAME_MAX) { debug2("Socketname %s truncated to %d chars\n", socknamebuf, NAME_MAX); socknamebuf[NAME_MAX] = 0; } #endif sprintf(SockPath + strlen(SockPath), "/%s", socknamebuf); /* Always create sockets. We only allow attaching to fifos not creating * new ones. */ ServerSocket = MakeServerSocket(true); #ifdef ETCSCREENRC # ifdef ALLOW_SYSSCREENRC if ((ap = getenv("SYSSCREENRC"))) (void)StartRc(ap, 0); else # endif (void)StartRc(ETCSCREENRC, 0); #endif (void)StartRc(RcFileName, 0); # ifdef UTMPOK # ifndef UTNOKEEP InitUtmp(); # endif /* UTNOKEEP */ # endif /* UTMPOK */ if (display) { if (InitTermcap(0, 0)) { debug("Could not init termcap - exiting\n"); fcntl(D_userfd, F_SETFL, 0); /* Flush sets FNBLOCK */ freetty(); if (D_userpid) Kill(D_userpid, SIG_BYE); eexit(1); } MakeDefaultCanvas(); InitTerm(0); #ifdef UTMPOK RemoveLoginSlot(); #endif } else MakeTermcap(1); #ifdef LOADAV InitLoadav(); #endif /* LOADAV */ InitKeytab(); MakeNewEnv(); signal(SIGHUP, SigHup); signal(SIGINT, FinitHandler); signal(SIGQUIT, FinitHandler); signal(SIGTERM, FinitHandler); #ifdef BSDJOBS signal(SIGTTIN, SIG_IGN); signal(SIGTTOU, SIG_IGN); #endif if (display) { brktty(D_userfd); SetMode(&D_OldMode, &D_NewMode, D_flow, iflag); /* Note: SetMode must be called _before_ FinishRc. */ SetTTY(D_userfd, &D_NewMode); if (fcntl(D_userfd, F_SETFL, FNBLOCK)) Msg(errno, "Warning: NBLOCK fcntl failed"); } else brktty(-1); /* just try */ signal(SIGCHLD, SigChld); #ifdef ETCSCREENRC # ifdef ALLOW_SYSSCREENRC if ((ap = getenv("SYSSCREENRC"))) FinishRc(ap); else # endif FinishRc(ETCSCREENRC); #endif FinishRc(RcFileName); debug2("UID %d EUID %d\n", (int)getuid(), (int)geteuid()); if (windows == NULL) { debug("We open one default window, as screenrc did not specify one.\n"); if (MakeWindow(&nwin) == -1) { fd_set rfd; struct timeval tv = { MsgWait/1000, 1000*(MsgWait%1000) }; FD_SET(0, &rfd); Msg(0, "Sorry, could not find a PTY or TTY."); // allow user to exit early by pressing any key. select(1, &rfd, NULL, NULL, &tv); Finit(0); /* NOTREACHED */ } } else if (ac) /* Screen was invoked with a command */ MakeWindow(&nwin); #ifdef HAVE_BRAILLE StartBraille(); #endif if (display && default_startup) display_copyright(); signal(SIGINT, SigInt); if (rflag && (rflag & 1) == 0 && !quietflag) { Msg(0, "New screen..."); rflag = 0; } serv_read.type = EV_READ; serv_read.fd = ServerSocket; serv_read.handler = serv_read_fn; evenq(&serv_read); serv_select.pri = -10; serv_select.type = EV_ALWAYS; serv_select.handler = serv_select_fn; evenq(&serv_select); logflushev.type = EV_TIMEOUT; logflushev.handler = logflush_fn; sched(); /* NOTREACHED */ return 0; } void WindowDied(p, wstat, wstat_valid) struct win *p; #ifdef BSDWAIT union wait wstat; #else int wstat; #endif int wstat_valid; { int killit = 0; if (p->w_destroyev.data == (char *)p) { wstat = p->w_exitstatus; wstat_valid = 1; evdeq(&p->w_destroyev); p->w_destroyev.data = 0; } #if defined(BSDJOBS) && !defined(BSDWAIT) if (!wstat_valid && p->w_pid > 0) { /* EOF on file descriptor. The process is probably also dead. * try a waitpid */ if (waitpid(p->w_pid, &wstat, WNOHANG | WUNTRACED) == p->w_pid) { p->w_pid = 0; wstat_valid = 1; } } #endif if (ZombieKey_destroy && ZombieKey_onerror && wstat_valid && WIFEXITED(wstat) && WEXITSTATUS(wstat) == 0) killit = 1; if (ZombieKey_destroy && !killit) { char buf[200], *s, reason[100]; time_t now; if (wstat_valid) { if (WIFEXITED(wstat)) if (WEXITSTATUS(wstat)) sprintf(reason, "terminated with exit status %d", WEXITSTATUS(wstat)); else sprintf(reason, "terminated normally"); else if (WIFSIGNALED(wstat)) sprintf(reason, "terminated with signal %d%s", WTERMSIG(wstat), #ifdef WCOREDUMP WCOREDUMP(wstat) ? " (core file generated)" : ""); #else ""); #endif } else sprintf(reason, "detached from window"); (void) time(&now); s = ctime(&now); if (s && *s) s[strlen(s) - 1] = '\0'; debug3("window %d (%s) going into zombie state fd %d", p->w_number, p->w_title, p->w_ptyfd); #ifdef UTMPOK if (p->w_slot != (slot_t)0 && p->w_slot != (slot_t)-1) { RemoveUtmp(p); p->w_slot = 0; /* "detached" */ } #endif CloseDevice(p); p->w_deadpid = p->w_pid; p->w_pid = 0; ResetWindow(p); /* p->w_y = p->w_bot; */ p->w_y = MFindUsedLine(p, p->w_bot, 1); sprintf(buf, "\n\r=== Command %s (%s) ===", reason, s ? s : "?"); WriteString(p, buf, strlen(buf)); if (p->w_poll_zombie_timeout) { debug2("Set zombie poll timeout for window %s to %d\n", p->w_title, p->w_poll_zombie_timeout); SetTimeout(&p->w_zombieev, p->w_poll_zombie_timeout * 1000); evenq(&p->w_zombieev); } WindowChanged(p, 'f'); } else KillWindow(p); #ifdef UTMPOK CarefulUtmp(); #endif } static void SigChldHandler() { struct stat st; #ifdef DEBUG fds(); #endif while (GotSigChld) { GotSigChld = 0; DoWait(); #ifdef SYSVSIGS signal(SIGCHLD, SigChld); #endif } if (stat(SockPath, &st) == -1) { debug1("SigChldHandler: Yuck! cannot stat '%s'\n", SockPath); if (!RecoverSocket()) { debug("SCREEN cannot recover from corrupt Socket, bye\n"); Finit(1); } else debug1("'%s' reconstructed\n", SockPath); } else debug2("SigChldHandler: stat '%s' o.k. (%03o)\n", SockPath, (int)st.st_mode); } static sigret_t SigChld SIGDEFARG { debug("SigChld()\n"); GotSigChld = 1; SIGRETURN; } sigret_t SigHup SIGDEFARG { /* Hangup all displays */ while ((display = displays) != 0) Hangup(); SIGRETURN; } /* * the backend's Interrupt handler * we cannot insert the intrc directly, as we never know * if fore is valid. */ static sigret_t SigInt SIGDEFARG { #if HAZARDOUS char ibuf; debug("SigInt()\n"); if (fore && displays) { # if defined(TERMIO) || defined(POSIX) ibuf = displays->d_OldMode.tio.c_cc[VINTR]; # else ibuf = displays->d_OldMode.m_tchars.t_intrc; # endif fore->w_inlen = 0; write(fore->w_ptyfd, &ibuf, 1); } #else signal(SIGINT, SigInt); debug("SigInt() careful\n"); InterruptPlease = 1; #endif SIGRETURN; } static sigret_t CoreDump SIGDEFARG { /* if running with s-bit, we must reset the s-bit, so that we get a * core file anyway. */ struct display *disp; char buf[80]; char *dump_msg = " (core dumped)"; int running_w_s_bit = getuid() != geteuid(); #if defined(SHADOWPW) && !defined(DEBUG) && !defined(DUMPSHADOW) if (running_w_s_bit) dump_msg = ""; #endif #if defined(SYSVSIGS) && defined(SIGHASARG) signal(sigsig, SIG_IGN); #endif setgid(getgid()); setuid(getuid()); unlink("core"); #ifdef SIGHASARG sprintf(buf, "\r\n[screen caught signal %d.%s]\r\n", sigsig, dump_msg); #else sprintf(buf, "\r\n[screen caught a fatal signal.%s]\r\n", dump_msg); #endif for (disp = displays; disp; disp = disp->d_next) { if (disp->d_nonblock < -1 || disp->d_nonblock > 1000000) continue; fcntl(disp->d_userfd, F_SETFL, 0); SetTTY(disp->d_userfd, &D_OldMode); write(disp->d_userfd, buf, strlen(buf)); Kill(disp->d_userpid, SIG_BYE); } if (running_w_s_bit) { #if defined(SHADOWPW) && !defined(DEBUG) && !defined(DUMPSHADOW) Kill(getpid(), SIGKILL); eexit(11); #else /* SHADOWPW && !DEBUG */ abort(); #endif /* SHADOWPW && !DEBUG */ } else abort(); SIGRETURN; } static void DoWait() { register int pid; struct win *p, *next; #ifdef BSDWAIT union wait wstat; #else int wstat; #endif #ifdef BSDJOBS # ifndef BSDWAIT while ((pid = waitpid(-1, &wstat, WNOHANG | WUNTRACED)) > 0) # else # ifdef USE_WAIT2 /* * From: rouilj@sni-usa.com (John Rouillard) * note that WUNTRACED is not documented to work, but it is defined in * /usr/include/sys/wait.h, so it may work */ while ((pid = wait2(&wstat, WNOHANG | WUNTRACED )) > 0) # else /* USE_WAIT2 */ while ((pid = wait3(&wstat, WNOHANG | WUNTRACED, (struct rusage *) 0)) > 0) # endif /* USE_WAIT2 */ # endif #else /* BSDJOBS */ while ((pid = wait(&wstat)) < 0) if (errno != EINTR) break; if (pid > 0) #endif /* BSDJOBS */ { for (p = windows; p; p = next) { next = p->w_next; if ((p->w_pid && pid == p->w_pid) || (p->w_deadpid && pid == p->w_deadpid)) { /* child has ceased to exist */ p->w_pid = 0; #ifdef BSDJOBS if (WIFSTOPPED(wstat)) { debug3("Window %d pid %d: WIFSTOPPED (sig %d)\n", p->w_number, pid, WSTOPSIG(wstat)); #ifdef SIGTTIN if (WSTOPSIG(wstat) == SIGTTIN) { Msg(0, "Suspended (tty input)"); continue; } #endif #ifdef SIGTTOU if (WSTOPSIG(wstat) == SIGTTOU) { Msg(0, "Suspended (tty output)"); continue; } #endif /* Try to restart process */ Msg(0, "Child has been stopped, restarting."); if (killpg(pid, SIGCONT)) kill(pid, SIGCONT); } else #endif { /* Screen will detect the window has died when the window's * file descriptor signals EOF (which it will do when the process in * the window terminates). So do this in a timeout of 10 seconds. * (not doing this at all might also work) * See #27061 for more details. */ p->w_destroyev.data = (char *)p; p->w_exitstatus = wstat; SetTimeout(&p->w_destroyev, 10 * 1000); evenq(&p->w_destroyev); } break; } #ifdef PSEUDOS if (p->w_pwin && pid == p->w_pwin->p_pid) { debug2("pseudo of win Nr %d died. pid == %d\n", p->w_number, p->w_pwin->p_pid); FreePseudowin(p); break; } #endif } if (p == 0) { debug1("pid %d not found - hope that's ok\n", pid); } } } static sigret_t FinitHandler SIGDEFARG { #ifdef SIGHASARG debug1("FinitHandler called, sig %d.\n", sigsig); #else debug("FinitHandler called.\n"); #endif Finit(1); SIGRETURN; } void Finit(int i) { signal(SIGCHLD, SIG_DFL); signal(SIGHUP, SIG_IGN); debug1("Finit(%d);\n", i); while (windows) { struct win *p = windows; windows = windows->w_next; FreeWindow(p); } if (ServerSocket != -1) { debug1("we unlink(%s)\n", SockPath); #ifdef USE_SETEUID xseteuid(real_uid); xsetegid(real_gid); #endif (void) unlink(SockPath); #ifdef USE_SETEUID xseteuid(eff_uid); xsetegid(eff_gid); #endif } for (display = displays; display; display = display->d_next) { if (D_status) RemoveStatus(); FinitTerm(); #ifdef UTMPOK RestoreLoginSlot(); #endif AddStr("[screen is terminating]\r\n"); Flush(3); SetTTY(D_userfd, &D_OldMode); fcntl(D_userfd, F_SETFL, 0); freetty(); Kill(D_userpid, SIG_BYE); } /* * we _cannot_ call eexit(i) here, * instead of playing with the Socket above. Sigh. */ exit(i); } void eexit(int e) { debug("eexit\n"); if (ServerSocket != -1) { debug1("we unlink(%s)\n", SockPath); setgid(real_gid); setuid(real_uid); (void) unlink(SockPath); } exit(e); } void Hangup() { if (display == 0) return; debug1("Hangup %lx\n", (long)display); if (D_userfd >= 0) { close(D_userfd); D_userfd = -1; } if (auto_detach || displays->d_next) Detach(D_HANGUP); else Finit(0); } /* * Detach now has the following modes: *D_DETACH SIG_BYE detach backend and exit attacher *D_HANGUP SIG_BYE detach backend and exit attacher *D_STOP SIG_STOP stop attacher (and detach backend) *D_REMOTE SIG_BYE remote detach -- reattach to new attacher *D_POWER SIG_POWER_BYE power detach -- attacher kills his parent *D_REMOTE_POWER SIG_POWER_BYE remote power detach -- both *D_LOCK SIG_LOCK lock the attacher * (jw) * we always remove our utmp slots. (even when "lock" or "stop") * Note: Take extra care here, we may be called by interrupt! */ void Detach(int mode) { int sign = 0, pid; struct canvas *cv; struct win *p; if (display == 0) return; #define AddStrSock(msg) do { \ if (SockName) \ { \ AddStr("[" msg " from "); \ AddStr(SockName); \ AddStr("]\r\n"); \ } \ else \ AddStr("[" msg "]\r\n"); \ } while (0) signal(SIGHUP, SIG_IGN); debug1("Detach(%d)\n", mode); if (D_status) RemoveStatus(); FinitTerm(); if (!display) return; switch (mode) { case D_HANGUP: sign = SIG_BYE; break; case D_DETACH: AddStrSock("detached"); sign = SIG_BYE; break; #ifdef BSDJOBS case D_STOP: sign = SIG_STOP; break; #endif #ifdef REMOTE_DETACH case D_REMOTE: AddStrSock("remote detached"); sign = SIG_BYE; break; #endif #ifdef POW_DETACH case D_POWER: AddStrSock("power detached"); if (PowDetachString) { AddStr(PowDetachString); AddStr("\r\n"); } sign = SIG_POWER_BYE; break; #ifdef REMOTE_DETACH case D_REMOTE_POWER: AddStrSock("remote power detached"); if (PowDetachString) { AddStr(PowDetachString); AddStr("\r\n"); } sign = SIG_POWER_BYE; break; #endif #endif case D_LOCK: ClearAll(); sign = SIG_LOCK; /* tell attacher to lock terminal with a lockprg. */ break; } #ifdef UTMPOK if (displays->d_next == 0) { for (p = windows; p; p = p->w_next) { if (p->w_slot != (slot_t) -1 && !(p->w_lflag & 2)) { RemoveUtmp(p); /* Set the slot to 0 to get the window logged in again. */ p->w_slot = (slot_t) 0; } } } if (mode != D_HANGUP) RestoreLoginSlot(); #endif if (displays->d_next == 0 && console_window) { if (TtyGrabConsole(console_window->w_ptyfd, 0, "detach")) { debug("could not release console - killing window\n"); KillWindow(console_window); display = displays; /* restore display */ } } if (D_fore) { #ifdef MULTIUSER ReleaseAutoWritelock(display, D_fore); #endif D_user->u_detachwin = D_fore->w_number; D_user->u_detachotherwin = D_other ? D_other->w_number : -1; } AutosaveLayout(D_layout); layout_last = D_layout; for (cv = D_cvlist; cv; cv = cv->c_next) { p = Layer2Window(cv->c_layer); SetCanvasWindow(cv, 0); if (p) WindowChanged(p, 'u'); } pid = D_userpid; debug2("display: %#lx displays: %#lx\n", (long)display, (long)displays); FreeDisplay(); if (displays == 0) /* Flag detached-ness */ (void) chsock(); /* * tell father what to do. We do that after we * freed the tty, thus getty feels more comfortable on hpux * if it was a power detach. */ Kill(pid, sign); debug2("Detach: Signal %d to Attacher(%d)!\n", sign, pid); debug("Detach returns, we are successfully detached.\n"); signal(SIGHUP, SigHup); #undef AddStrSock } static int IsSymbol(char *e, char *s) { register int l; l = strlen(s); return strncmp(e, s, l) == 0 && e[l] == '='; } void MakeNewEnv() { register char **op, **np; static char stybuf[MAXSTR]; for (op = environ; *op; ++op) ; if (NewEnv) free((char *)NewEnv); NewEnv = np = (char **) malloc((unsigned) (op - environ + 7 + 1) * sizeof(char **)); if (!NewEnv) Panic(0, "%s", strnomem); sprintf(stybuf, "STY=%s", strlen(SockName) <= MAXSTR - 5 ? SockName : "?"); *np++ = stybuf; /* NewEnv[0] */ *np++ = Term; /* NewEnv[1] */ np++; /* room for SHELL */ #ifdef TIOCSWINSZ np += 2; /* room for TERMCAP and WINDOW */ #else np += 4; /* room for TERMCAP WINDOW LINES COLUMNS */ #endif for (op = environ; *op; ++op) { if (!IsSymbol(*op, "TERM") && !IsSymbol(*op, "TERMCAP") && !IsSymbol(*op, "STY") && !IsSymbol(*op, "WINDOW") && !IsSymbol(*op, "SCREENCAP") && !IsSymbol(*op, "SHELL") && !IsSymbol(*op, "LINES") && !IsSymbol(*op, "COLUMNS")) *np++ = *op; } *np = 0; } #if defined(USEVARARGS) && defined(__STDC__) #define DEFINE_VARARGS_FN(fnname) void fnname (int err, const char *fmt, VA_DOTS) #else #define DEFINE_VARARGS_FN(fnname) void fnname(err, fmt, VA_DOTS) \ int err; \ const char *fmt; \ VA_DECL #endif #define PROCESS_MESSAGE(B) do { \ char *p = B; \ VA_LIST(ap) \ VA_START(ap, fmt); \ fmt = DoNLS(fmt); \ (void)vsnprintf(p, sizeof(B) - 100, fmt, VA_ARGS(ap)); \ VA_END(ap); \ if (err) \ { \ p += strlen(p); \ *p++ = ':'; \ *p++ = ' '; \ strncpy(p, strerror(err), B + sizeof(B) - p - 1); \ B[sizeof(B) - 1] = 0; \ } \ } while (0) DEFINE_VARARGS_FN(Msg) { char buf[MAXPATHLEN*2]; PROCESS_MESSAGE(buf); debug2("Msg('%s') (%#lx);\n", buf, (long)display); if (display && displays) MakeStatus(buf); else if (displays) { for (display = displays; display; display = display->d_next) MakeStatus(buf); } else if (display) { /* no displays but a display - must have forked. * send message to backend! */ char *tty = D_usertty; struct display *olddisplay = display; display = 0; /* only send once */ SendErrorMsg(tty, buf); display = olddisplay; } else printf("%s\r\n", buf); if (queryflag >= 0) write(queryflag, buf, strlen(buf)); } /* * Call FinitTerm for all displays, write a message to each and call eexit(); */ DEFINE_VARARGS_FN(Panic) { char buf[MAXPATHLEN*2]; PROCESS_MESSAGE(buf); debug3("Panic('%s'); display=%lx displays=%lx\n", buf, (long)display, (long)displays); if (displays == 0 && display == 0) { printf("%s\r\n", buf); if (PanicPid) Kill(PanicPid, SIG_BYE); } else if (displays == 0) { /* no displays but a display - must have forked. * send message to backend! */ char *tty = D_usertty; display = 0; SendErrorMsg(tty, buf); sleep(2); _exit(1); } else for (display = displays; display; display = display->d_next) { if (D_status) RemoveStatus(); FinitTerm(); Flush(3); #ifdef UTMPOK RestoreLoginSlot(); #endif SetTTY(D_userfd, &D_OldMode); fcntl(D_userfd, F_SETFL, 0); write(D_userfd, buf, strlen(buf)); write(D_userfd, "\n", 1); freetty(); if (D_userpid) Kill(D_userpid, SIG_BYE); } #ifdef MULTIUSER if (tty_oldmode >= 0) { # ifdef USE_SETEUID if (setuid(own_uid)) xseteuid(own_uid); /* may be a loop. sigh. */ # else setuid(own_uid); # endif debug1("Panic: changing back modes from %s\n", attach_tty); chmod(attach_tty, tty_oldmode); } #endif eexit(1); } DEFINE_VARARGS_FN(QueryMsg) { char buf[MAXPATHLEN*2]; if (queryflag < 0) return; PROCESS_MESSAGE(buf); write(queryflag, buf, strlen(buf)); } DEFINE_VARARGS_FN(Dummy) {} #undef PROCESS_MESSAGE #undef DEFINE_VARARGS_FN /* * '^' is allowed as an escape mechanism for control characters. jw. * * Added time insertion using ideas/code from /\ndy Jones * (andy@lingua.cltr.uq.OZ.AU) - thanks a lot! * */ #ifndef USE_LOCALE static const char days[] = "SunMonTueWedThuFriSat"; static const char months[] = "JanFebMarAprMayJunJulAugSepOctNovDec"; #endif static char winmsg_buf[MAXSTR]; #define MAX_WINMSG_REND 256 /* rendition changes */ static int winmsg_rend[MAX_WINMSG_REND]; static int winmsg_rendpos[MAX_WINMSG_REND]; static int winmsg_numrend; static char *pad_expand(char *buf, char *p, int numpad, int padlen) { char *pn, *pn2; int i, r; padlen = padlen - (p - buf); /* space for rent */ if (padlen < 0) padlen = 0; pn2 = pn = p + padlen; r = winmsg_numrend; while (p >= buf) { if (r && *p != 127 && p - buf == winmsg_rendpos[r - 1]) { winmsg_rendpos[--r] = pn - buf; continue; } *pn-- = *p; if (*p-- == 127) { pn[1] = ' '; i = numpad > 0 ? (padlen + numpad - 1) / numpad : 0; padlen -= i; while (i-- > 0) *pn-- = ' '; numpad--; if (r && p - buf + 1== winmsg_rendpos[r - 1]) winmsg_rendpos[--r] = pn - buf + 1; } } return pn2; } struct backtick { struct backtick *next; int num; int tick; int lifespan; time_t bestbefore; char result[MAXSTR]; char **cmdv; struct event ev; char *buf; int bufi; }; struct backtick *backticks; static void backtick_filter(struct backtick *bt) { char *p, *q; int c; for (p = q = bt->result; (c = (unsigned char)*p++) != 0;) { if (c == '\t') c = ' '; if (c >= ' ' || c == '\005') *q++ = c; } *q = 0; } static void backtick_fn(struct event *ev, char *data) { struct backtick *bt; int i, j, k, l; bt = (struct backtick *)data; debug1("backtick_fn for #%d\n", bt->num); i = bt->bufi; l = read(ev->fd, bt->buf + i, MAXSTR - i); if (l <= 0) { debug1("EOF on backtick #%d\n", bt->num); evdeq(ev); close(ev->fd); ev->fd = -1; return; } debug1("read %d bytes\n", l); i += l; for (j = 0; j < l; j++) if (bt->buf[i - j - 1] == '\n') break; if (j < l) { for (k = i - j - 2; k >= 0; k--) if (bt->buf[k] == '\n') break; k++; bcopy(bt->buf + k, bt->result, i - j - k); bt->result[i - j - k - 1] = 0; backtick_filter(bt); WindowChanged(0, '`'); } if (j == l && i == MAXSTR) { j = MAXSTR/2; l = j + 1; } if (j < l){ if (j) bcopy(bt->buf + i - j, bt->buf, j); i = j; } bt->bufi = i; } void setbacktick(int num, int lifespan, int tick, char **cmdv) { struct backtick **btp, *bt; char **v; debug1("setbacktick called for backtick #%d\n", num); for (btp = &backticks; (bt = *btp) != 0; btp = &bt->next) if (bt->num == num) break; if (!bt && !cmdv) return; if (bt) { for (v = bt->cmdv; *v; v++) free(*v); free(bt->cmdv); if (bt->buf) free(bt->buf); if (bt->ev.fd >= 0) close(bt->ev.fd); evdeq(&bt->ev); } if (bt && !cmdv) { *btp = bt->next; free(bt); return; } if (!bt){ bt = (struct backtick *)malloc(sizeof *bt); if (!bt){ Msg(0, "%s", strnomem); return; } bzero(bt, sizeof(*bt)); bt->next = 0; *btp = bt; } bt->num = num; bt->tick = tick; bt->lifespan = lifespan; bt->bestbefore = 0; bt->result[0] = 0; bt->buf = 0; bt->bufi = 0; bt->cmdv = cmdv; bt->ev.fd = -1; if (bt->tick == 0 && bt->lifespan == 0) { debug("setbacktick: continuous mode\n"); bt->buf = (char *)malloc(MAXSTR); if (bt->buf == 0) { Msg(0, "%s", strnomem); setbacktick(num, 0, 0, (char **)0); return; } bt->ev.type = EV_READ; bt->ev.fd = readpipe(bt->cmdv); bt->ev.handler = backtick_fn; bt->ev.data = (char *)bt; if (bt->ev.fd >= 0) evenq(&bt->ev); } } static char * runbacktick(struct backtick *bt, int *tickp, time_t now) { int f, i, l, j; time_t now2; debug1("runbacktick called for backtick #%d\n", bt->num); if (bt->tick && (!*tickp || bt->tick < *tickp)) *tickp = bt->tick; if ((bt->lifespan == 0 && bt->tick == 0) || now < bt->bestbefore) { debug1("returning old result (%d)\n", bt->lifespan); return bt->result; } f = readpipe(bt->cmdv); if (f == -1) return bt->result; i = 0; while ((l = read(f, bt->result + i, sizeof(bt->result) - i)) > 0) { debug1("runbacktick: read %d bytes\n", l); i += l; for (j = 1; j < l; j++) if (bt->result[i - j - 1] == '\n') break; if (j == l && i == sizeof(bt->result)) { j = sizeof(bt->result) / 2; l = j + 1; } if (j < l) { bcopy(bt->result + i - j, bt->result, j); i = j; } } close(f); bt->result[sizeof(bt->result) - 1] = '\n'; if (i && bt->result[i - 1] == '\n') i--; debug1("runbacktick: finished, %d bytes\n", i); bt->result[i] = 0; backtick_filter(bt); (void)time(&now2); bt->bestbefore = now2 + bt->lifespan; return bt->result; } int AddWinMsgRend(const char *str, int r) { if (winmsg_numrend >= MAX_WINMSG_REND || str < winmsg_buf || str >= winmsg_buf + MAXSTR) return -1; winmsg_rend[winmsg_numrend] = r; winmsg_rendpos[winmsg_numrend] = str - winmsg_buf; winmsg_numrend++; return 0; } char *MakeWinMsgEv(char *str, struct win *win, int esc, int padlen, struct event *ev, int rec) { static int tick; char *s = str; register char *p = winmsg_buf; register int ctrl; struct timeval now; struct tm *tm; int l, i, r; int num; int zeroflg; int longflg; int minusflg; int plusflg; int qmflag = 0, omflag = 0, qmnumrend = 0; char *qmpos = 0; int numpad = 0; int lastpad = 0; int truncpos = -1; int truncper = 0; int trunclong = 0; struct backtick *bt = NULL; if (winmsg_numrend >= 0) winmsg_numrend = 0; else winmsg_numrend = -winmsg_numrend; tick = 0; tm = 0; ctrl = 0; gettimeofday(&now, NULL); for (; *s && (l = winmsg_buf + MAXSTR - 1 - p) > 0; s++, p++) { *p = *s; if (ctrl) { ctrl = 0; if (*s != '^' && *s >= 64) *p &= 0x1f; continue; } if (*s != esc) { if (esc == '%') { switch (*s) { #if 0 case '~': *p = BELL; break; #endif case '^': ctrl = 1; *p-- = '^'; break; default: break; } } continue; } if (*++s == esc) /* double escape ? */ continue; if ((plusflg = *s == '+') != 0) s++; if ((minusflg = *s == '-') != 0) s++; if ((zeroflg = *s == '0') != 0) s++; num = 0; while(*s >= '0' && *s <= '9') num = num * 10 + (*s++ - '0'); if ((longflg = *s == 'L') != 0) s++; switch (*s) { case '?': p--; if (qmpos) { if ((!qmflag && !omflag) || omflag == 1){ p = qmpos; if (qmnumrend < winmsg_numrend) winmsg_numrend = qmnumrend; } qmpos = 0; break; } qmpos = p; qmnumrend = winmsg_numrend; qmflag = omflag = 0; break; case ':': p--; if (!qmpos) break; if (qmflag && omflag != 1) { omflag = 1; qmpos = p; qmnumrend = winmsg_numrend; } else { p = qmpos; if (qmnumrend < winmsg_numrend) winmsg_numrend = qmnumrend; omflag = -1; } break; case 'd': case 'D': case 'm': case 'M': case 'y': case 'Y': case 'a': case 'A': case 's': case 'c': case 'C': if (l < 4) break; if (tm == 0) { time_t nowsec = now.tv_sec; tm = localtime(&nowsec); } qmflag = 1; if (!tick || tick > 3600) tick = 3600; switch (*s) { case 'd': sprintf(p, "%02d", tm->tm_mday % 100); break; case 'D': #ifdef USE_LOCALE strftime(p, l, (longflg ? "%A" : "%a"), tm); #else sprintf(p, "%3.3s", days + 3 * tm->tm_wday); #endif break; case 'm': sprintf(p, "%02d", tm->tm_mon + 1); break; case 'M': #ifdef USE_LOCALE strftime(p, l, (longflg ? "%B" : "%b"), tm); #else sprintf(p, "%3.3s", months + 3 * tm->tm_mon); #endif break; case 'y': sprintf(p, "%02d", tm->tm_year % 100); break; case 'Y': sprintf(p, "%04d", tm->tm_year + 1900); break; case 'a': sprintf(p, tm->tm_hour >= 12 ? "pm" : "am"); break; case 'A': sprintf(p, tm->tm_hour >= 12 ? "PM" : "AM"); break; case 's': sprintf(p, "%02d", tm->tm_sec); tick = 1; break; case 'c': sprintf(p, zeroflg ? "%02d:%02d" : "%2d:%02d", tm->tm_hour, tm->tm_min); if (!tick || tick > 60) tick = 60; break; case 'C': sprintf(p, zeroflg ? "%02d:%02d" : "%2d:%02d", (tm->tm_hour + 11) % 12 + 1, tm->tm_min); if (!tick || tick > 60) tick = 60; break; default: break; } p += strlen(p) - 1; break; case 'X': case 'x': *p = 0; for (i = 0; win && win->w_cmdargs[i]; i++) { if (l < strlen(win->w_cmdargs[i]) + 1) break; sprintf(p, i ? " %s" : "%s", win->w_cmdargs[i]); l -= strlen(p); p += strlen(p); if (i == 0 && *s == 'X') break; } p--; break; case 'l': #ifdef LOADAV *p = 0; if (l > 20) AddLoadav(p); if (*p) { qmflag = 1; p += strlen(p) - 1; } else *p = '?'; if (!tick || tick > 60) tick = 60; #else *p = '?'; #endif p += strlen(p) - 1; break; case '`': case 'h': if (rec >= 10 || (*s == 'h' && (win == 0 || win->w_hstatus == 0 || *win->w_hstatus == 0))) { p--; break; } if (*s == '`') { for (bt = backticks; bt; bt = bt->next) if (bt->num == num) break; if (bt == 0) { p--; break; } } { char savebuf[sizeof(winmsg_buf)]; int oldtick = tick; int oldnumrend = winmsg_numrend; *p = 0; strcpy(savebuf, winmsg_buf); winmsg_numrend = -winmsg_numrend; MakeWinMsgEv(*s == 'h' ? win->w_hstatus : runbacktick(bt, &oldtick, now.tv_sec), win, '\005', 0, (struct event *)0, rec + 1); debug2("oldtick=%d tick=%d\n", oldtick, tick); if (!tick || oldtick < tick) tick = oldtick; if ((int)strlen(winmsg_buf) < l) strcat(savebuf, winmsg_buf); strcpy(winmsg_buf, savebuf); while (oldnumrend < winmsg_numrend) winmsg_rendpos[oldnumrend++] += p - winmsg_buf; if (*p) qmflag = 1; p += strlen(p) - 1; } break; case 'w': case 'W': { struct win *oldfore = 0; if (display) { oldfore = D_fore; D_fore = win; } AddWindows(p, l - 1, (*s == 'w' ? 0 : 1) | (longflg ? 0 : 2) | (plusflg ? 4 : 0) | (minusflg ? 8 : 0), win ? win->w_number : -1); if (display) D_fore = oldfore; } if (*p) qmflag = 1; p += strlen(p) - 1; break; case 'u': *p = 0; if (win) AddOtherUsers(p, l - 1, win); if (*p) qmflag = 1; p += strlen(p) - 1; break; case 'f': *p = 0; if (win) AddWindowFlags(p, l - 1, win); if (*p) qmflag = 1; p += strlen(p) - 1; break; case 't': *p = 0; if (win && (int)strlen(win->w_title) < l) { strcpy(p, win->w_title); if (*p) qmflag = 1; } p += strlen(p) - 1; break; #ifdef ENCODINGS case 'e': *p = 0; D_encoding = nwin_options.encoding > 0 ? nwin_options.encoding : 0; if (win && win->w_encoding) { *p++ = ' '; strcpy(p, EncodingName(win->w_encoding)); } p += strlen(p) - 1; break; #endif case '{': { char rbuf[128]; s++; for (i = 0; i < 127; i++) if (s[i] && s[i] != '}') rbuf[i] = s[i]; else break; if (s[i] == '}' && winmsg_numrend < MAX_WINMSG_REND) { r = -1; rbuf[i] = 0; debug1("MakeWinMsg attrcolor %s\n", rbuf); if (i != 1 || rbuf[0] != '-') r = ParseAttrColor(rbuf, (char *)0, 0); if (r != -1 || (i == 1 && rbuf[0] == '-')) { winmsg_rend[winmsg_numrend] = r; winmsg_rendpos[winmsg_numrend] = p - winmsg_buf; winmsg_numrend++; } } s += i; p--; } break; case 'H': *p = 0; if ((int)strlen(HostName) < l) { strcpy(p, HostName); if (*p) qmflag = 1; } p += strlen(p) - 1; break; case 'S': { char *session_name; *p = 0; session_name = strchr(SockName, '.') + 1; if ((int)strlen(session_name) < l) { strcpy(p, session_name); if (*p) qmflag = 1; } p += strlen(p) - 1; } break; case 'p': { sprintf(p, "%d", (plusflg && display) ? D_userpid : getpid()); p += strlen(p) - 1; } break; case 'F': p--; /* small hack */ if (display && ((ev && ev == &D_forecv->c_captev) || (!ev && win && win == D_fore))) minusflg = !minusflg; if (minusflg) qmflag = 1; break; case 'P': p--; #ifdef COPY_PASTE if (display && ev && ev != &D_hstatusev) { /* Hack */ /* Is the layer in the current canvas in copy mode? */ struct canvas *cv = (struct canvas *)ev->data; if (ev == &cv->c_captev && cv->c_layer->l_layfn == &MarkLf) qmflag = 1; } #endif break; case 'E': p--; if (display && D_ESCseen) qmflag = 1; break; case '>': truncpos = p - winmsg_buf; truncper = num > 100 ? 100 : num; trunclong = longflg; p--; break; case '=': case '<': *p = ' '; if (num || zeroflg || plusflg || longflg || (*s != '=')) { /* expand all pads */ if (minusflg) { num = (plusflg ? lastpad : padlen) - num; if (!plusflg && padlen == 0) num = p - winmsg_buf; plusflg = 0; } else if (!zeroflg) { if (*s != '=' && num == 0 && !plusflg) num = 100; if (num > 100) num = 100; if (padlen == 0) num = p - winmsg_buf; else num = (padlen - (plusflg ? lastpad : 0)) * num / 100; } if (num < 0) num = 0; if (plusflg) num += lastpad; if (num > MAXSTR - 1) num = MAXSTR - 1; if (numpad) p = pad_expand(winmsg_buf, p, numpad, num); numpad = 0; if (p - winmsg_buf > num && !longflg) { int left, trunc; if (truncpos == -1) { truncpos = lastpad; truncper = 0; } trunc = lastpad + truncper * (num - lastpad) / 100; if (trunc > num) trunc = num; if (trunc < lastpad) trunc = lastpad; left = truncpos - trunc; if (left > p - winmsg_buf - num) left = p - winmsg_buf - num; debug1("lastpad = %d, ", lastpad); debug3("truncpos = %d, trunc = %d, left = %d\n", truncpos, trunc, left); if (left > 0) { if (left + lastpad > p - winmsg_buf) left = p - winmsg_buf - lastpad; if (p - winmsg_buf - lastpad - left > 0) bcopy(winmsg_buf + lastpad + left, winmsg_buf + lastpad, p - winmsg_buf - lastpad - left); p -= left; r = winmsg_numrend; while (r && winmsg_rendpos[r - 1] > lastpad) { r--; winmsg_rendpos[r] -= left; if (winmsg_rendpos[r] < lastpad) winmsg_rendpos[r] = lastpad; } if (trunclong) { if (p - winmsg_buf > lastpad) winmsg_buf[lastpad] = '.'; if (p - winmsg_buf > lastpad + 1) winmsg_buf[lastpad + 1] = '.'; if (p - winmsg_buf > lastpad + 2) winmsg_buf[lastpad + 2] = '.'; } } if (p - winmsg_buf > num) { p = winmsg_buf + num; if (trunclong) { if (num - 1 >= lastpad) p[-1] = '.'; if (num - 2 >= lastpad) p[-2] = '.'; if (num - 3 >= lastpad) p[-3] = '.'; } r = winmsg_numrend; while (r && winmsg_rendpos[r - 1] > num) winmsg_rendpos[--r] = num; } truncpos = -1; trunclong = 0; if (lastpad > p - winmsg_buf) lastpad = p - winmsg_buf; debug1("lastpad now %d\n", lastpad); } if (*s == '=') { while (p - winmsg_buf < num) *p++ = ' '; lastpad = p - winmsg_buf; truncpos = -1; trunclong = 0; debug1("lastpad2 now %d\n", lastpad); } p--; } else if (padlen) { *p = 127; /* internal pad representation */ numpad++; } break; case 'n': s++; /* FALLTHROUGH */ default: s--; if (l > 10 + num) { if (num == 0) num = 1; if (!win) sprintf(p, "%*s", num, num > 1 ? "--" : "-"); else sprintf(p, "%*d", num, win->w_number); qmflag = 1; p += strlen(p) - 1; } break; } } if (qmpos && !qmflag) p = qmpos + 1; *p = '\0'; if (numpad) { if (padlen > MAXSTR - 1) padlen = MAXSTR - 1; p = pad_expand(winmsg_buf, p, numpad, padlen); } if (ev) { evdeq(ev); /* just in case */ ev->timeout.tv_sec = 0; ev->timeout.tv_usec = 0; } if (ev && tick) { now.tv_usec = 100000; if (tick == 1) now.tv_sec++; else now.tv_sec += tick - (now.tv_sec % tick); ev->timeout = now; debug2("NEW timeout %ld %d\n", (long)ev->timeout.tv_sec, tick); } return winmsg_buf; } char *MakeWinMsg(char *s, struct win *win, int esc) { return MakeWinMsgEv(s, win, esc, 0, (struct event *)0, 0); } void PutWinMsg(char *s, int start, int max) { int i, p, l, r, n; struct mchar rend; struct mchar rendstack[MAX_WINMSG_REND]; int rendstackn = 0; if (s != winmsg_buf) { /* sorry, no fancy coloring available */ debug1("PutWinMsg %s plain\n", s); l = strlen(s); if (l > max) l = max; l -= start; s += start; while (l-- > 0) PUTCHARLP(*s++); return; } rend = D_rend; p = 0; l = strlen(s); debug2("PutWinMsg %s start attr %x\n", s, rend.attr); for (i = 0; i < winmsg_numrend && max > 0; i++) { if (p > winmsg_rendpos[i] || winmsg_rendpos[i] > l) break; if (p < winmsg_rendpos[i]) { n = winmsg_rendpos[i] - p; if (n > max) n = max; max -= n; p += n; while(n-- > 0) { if (start-- > 0) s++; else PUTCHARLP(*s++); } } r = winmsg_rend[i]; if (r == -1) { if (rendstackn > 0) rend = rendstack[--rendstackn]; } else { rendstack[rendstackn++] = rend; ApplyAttrColor(r, &rend); } SetRendition(&rend); } if (p < l){ n = l - p; if (n > max) n = max; while(n-- > 0) { if (start-- > 0) s++; else PUTCHARLP(*s++); } } } #ifdef DEBUG static void fds1(int i, int j) { while (i < j) { debug1("%d ", i); i++; } if ((j = open("/dev/null", 0)) >= 0) { fds1(i + 1, j); close(j); } else { while (dup(++i) < 0 && errno != EBADF) debug1("%d ", i); debug1(" [%d]\n", i); } } static void fds() { debug("fds: "); fds1(-1, -1); } #endif static void serv_read_fn(struct event *ev, char *data) { debug("Knock - knock!\n"); ReceiveMsg(); } static void serv_select_fn(struct event *ev, char *data) { struct win *p; debug("serv_select_fn called\n"); /* XXX: messages?? */ if (GotSigChld) SigChldHandler(); if (InterruptPlease) { debug("Backend received interrupt\n"); /* This approach is rather questionable in a multi-display * environment */ if (fore && displays) { #if defined(TERMIO) || defined(POSIX) char ibuf = displays->d_OldMode.tio.c_cc[VINTR]; #else char ibuf = displays->d_OldMode.m_tchars.t_intrc; #endif #ifdef PSEUDOS write(W_UWP(fore) ? fore->w_pwin->p_ptyfd : fore->w_ptyfd, &ibuf, 1); debug1("Backend wrote interrupt to %d", fore->w_number); debug1("%s\n", W_UWP(fore) ? " (pseudowin)" : ""); #else write(fore->w_ptyfd, &ibuf, 1); debug1("Backend wrote interrupt to %d\n", fore->w_number); #endif } InterruptPlease = 0; } for (p = windows; p; p = p->w_next){ if (p->w_bell == BELL_FOUND || p->w_bell == BELL_VISUAL) { struct canvas *cv; int visual = p->w_bell == BELL_VISUAL || visual_bell; p->w_bell = BELL_ON; for (display = displays; display; display = display->d_next) { for (cv = D_cvlist; cv; cv = cv->c_next) if (cv->c_layer->l_bottom == &p->w_layer) break; if (cv == 0) { p->w_bell = BELL_DONE; Msg(0, "%s", MakeWinMsg(BellString, p, '%')); } else if (visual && !D_VB && (!D_status || !D_status_bell)) { Msg(0, "%s", VisualBellString); if (D_status) { D_status_bell = 1; debug1("using vbell timeout %d\n", VBellWait); SetTimeout(&D_statusev, VBellWait ); } } } /* don't annoy the user with two messages */ if (p->w_monitor == MON_FOUND) p->w_monitor = MON_DONE; WindowChanged(p, 'f'); } if (p->w_monitor == MON_FOUND) { struct canvas *cv; p->w_monitor = MON_ON; for (display = displays; display; display = display->d_next) { for (cv = D_cvlist; cv; cv = cv->c_next) if (cv->c_layer->l_bottom == &p->w_layer) break; if (cv) continue; /* user already sees window */ #ifdef MULTIUSER if (!(ACLBYTE(p->w_mon_notify, D_user->u_id) & ACLBIT(D_user->u_id))) continue; /* user doesn't care */ #endif Msg(0, "%s", MakeWinMsg(ActivityString, p, '%')); p->w_monitor = MON_DONE; } WindowChanged(p, 'f'); } if (p->w_silence == SILENCE_FOUND) { /* Unset the flag if the user switched to this window. */ if (p->w_layer.l_cvlist) { p->w_silence = SILENCE_ON; WindowChanged(p, 'f'); } } } for (display = displays; display; display = display->d_next) { struct canvas *cv; if (D_status == STATUS_ON_WIN) continue; /* XXX: should use display functions! */ for (cv = D_cvlist; cv; cv = cv->c_next) { int lx, ly; /* normalize window, see resize.c */ lx = cv->c_layer->l_x; ly = cv->c_layer->l_y; if (lx == cv->c_layer->l_width) lx--; if (ly + cv->c_yoff < cv->c_ys) { int i, n = cv->c_ys - (ly + cv->c_yoff); cv->c_yoff = cv->c_ys - ly; RethinkViewportOffsets(cv); if (n > cv->c_layer->l_height) n = cv->c_layer->l_height; CV_CALL(cv, LScrollV(flayer, -n, 0, flayer->l_height - 1, 0); LayRedisplayLine(-1, -1, -1, 1); for (i = 0; i < n; i++) LayRedisplayLine(i, 0, flayer->l_width - 1, 1); if (cv == cv->c_display->d_forecv) LaySetCursor(); ); } else if (ly + cv->c_yoff > cv->c_ye) { int i, n = ly + cv->c_yoff - cv->c_ye; cv->c_yoff = cv->c_ye - ly; RethinkViewportOffsets(cv); if (n > cv->c_layer->l_height) n = cv->c_layer->l_height; CV_CALL(cv, LScrollV(flayer, n, 0, cv->c_layer->l_height - 1, 0); LayRedisplayLine(-1, -1, -1, 1); for (i = 0; i < n; i++) LayRedisplayLine(i + flayer->l_height - n, 0, flayer->l_width - 1, 1); if (cv == cv->c_display->d_forecv) LaySetCursor(); ); } if (lx + cv->c_xoff < cv->c_xs) { int i, n = cv->c_xs - (lx + cv->c_xoff); if (n < (cv->c_xe - cv->c_xs + 1) / 2) n = (cv->c_xe - cv->c_xs + 1) / 2; if (cv->c_xoff + n > cv->c_xs) n = cv->c_xs - cv->c_xoff; cv->c_xoff += n; RethinkViewportOffsets(cv); if (n > cv->c_layer->l_width) n = cv->c_layer->l_width; CV_CALL(cv, LayRedisplayLine(-1, -1, -1, 1); for (i = 0; i < flayer->l_height; i++) { LScrollH(flayer, -n, i, 0, flayer->l_width - 1, 0, 0); LayRedisplayLine(i, 0, n - 1, 1); } if (cv == cv->c_display->d_forecv) LaySetCursor(); ); } else if (lx + cv->c_xoff > cv->c_xe) { int i, n = lx + cv->c_xoff - cv->c_xe; if (n < (cv->c_xe - cv->c_xs + 1) / 2) n = (cv->c_xe - cv->c_xs + 1) / 2; if (cv->c_xoff - n + cv->c_layer->l_width - 1 < cv->c_xe) n = cv->c_xoff + cv->c_layer->l_width - 1 - cv->c_xe; cv->c_xoff -= n; RethinkViewportOffsets(cv); if (n > cv->c_layer->l_width) n = cv->c_layer->l_width; CV_CALL(cv, LayRedisplayLine(-1, -1, -1, 1); for (i = 0; i < flayer->l_height; i++) { LScrollH(flayer, n, i, 0, flayer->l_width - 1, 0, 0); LayRedisplayLine(i, flayer->l_width - n, flayer->l_width - 1, 1); } if (cv == cv->c_display->d_forecv) LaySetCursor(); ); } } } for (display = displays; display; display = display->d_next) { if (D_status == STATUS_ON_WIN || D_cvlist == 0 || D_cvlist->c_next == 0) continue; debug1("serv_select_fn: Restore on cv %#lx\n", (long)D_forecv); CV_CALL(D_forecv, LayRestore();LaySetCursor()); } } static void logflush_fn(struct event *ev, char *data) { struct win *p; char *buf; int n; if (!islogfile(NULL)) return; /* no more logfiles */ logfflush(NULL); n = log_flush ? log_flush : (logtstamp_after + 4) / 5; if (n) { SetTimeout(ev, n * 1000); evenq(ev); /* re-enqueue ourself */ } if (!logtstamp_on) return; /* write fancy time-stamp */ for (p = windows; p; p = p->w_next) { if (!p->w_log) continue; p->w_logsilence += n; if (p->w_logsilence < logtstamp_after) continue; if (p->w_logsilence - n >= logtstamp_after) continue; buf = MakeWinMsg(logtstamp_string, p, '%'); logfwrite(p->w_log, buf, strlen(buf)); } } /* * Interprets ^?, ^@ and other ^-control-char notation. * Interprets \ddd octal notation * * The result is placed in *cp, p is advanced behind the parsed expression and * returned. */ static char *ParseChar(char *p, char *cp) { if (*p == 0) return 0; if (*p == '^' && p[1]) { if (*++p == '?') *cp = '\177'; else if (*p >= '@') *cp = Ctrl(*p); else return 0; ++p; } else if (*p == '\\' && *++p <= '7' && *p >= '0') { *cp = 0; do *cp = *cp * 8 + *p - '0'; while (*++p <= '7' && *p >= '0'); } else *cp = *p++; return p; } static int ParseEscape(char *p) { unsigned char buf[2]; if (*p == 0) SetEscape((struct acluser *)0, -1, -1); else { if ((p = ParseChar(p, (char *)buf)) == NULL || (p = ParseChar(p, (char *)buf+1)) == NULL || *p) return -1; SetEscape((struct acluser *)0, buf[0], buf[1]); } return 0; } void SetTtyname(bool fatal, struct stat *st) { int ret; int saved_errno = 0; attach_tty_is_in_new_ns = false; memset(&attach_tty_name_in_ns, 0, sizeof(attach_tty_name_in_ns)); errno = 0; attach_tty = ttyname(0); if (!attach_tty) { if (errno == ENODEV) { saved_errno = errno; attach_tty = "/proc/self/fd/0"; attach_tty_is_in_new_ns = true; ret = readlink(attach_tty, attach_tty_name_in_ns, sizeof(attach_tty_name_in_ns)); if (ret < 0 || (size_t)ret >= sizeof(attach_tty_name_in_ns)) Panic(0, "Bad tty '%s'", attach_tty); } else if (fatal) { Panic(0, "Must be connected to a terminal."); } else { attach_tty = ""; } } if (attach_tty && strcmp(attach_tty, "")) { if (stat(attach_tty, st)) Panic(errno, "Cannot access '%s'", attach_tty); if (strlen(attach_tty) >= MAXPATHLEN) Panic(0, "TtyName too long - sorry."); /* Only call CheckTtyname() if the device does not exist in * another namespace. */ if (saved_errno != ENODEV && CheckTtyname(attach_tty)) Panic(0, "Bad tty '%s'", attach_tty); } } screen-4.9.1/TODO0000664000175000017500000000035714467014146012156 0ustar alexalex- display size adaption (Activate) - process.c cleanup via comm splitting - writelocks? - partial? - type into several windows at once (for cluster admins) - configurable digraph table - command line options should overwrite config files. screen-4.9.1/list_generic.h0000664000175000017500000000510714467014146014304 0ustar alexalex/* Copyright (c) 2010 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ struct ListData; struct ListRow { void *data; /* Some data relevant to this row */ struct ListRow *next, *prev; /* doubly linked list */ int y; /* -1 if not on display */ }; struct GenericList { int (*gl_printheader) __P((struct ListData *)); /* Print the header */ int (*gl_printfooter) __P((struct ListData *)); /* Print the footer */ int (*gl_printrow) __P((struct ListData *, struct ListRow *)); /* Print one row */ int (*gl_pinput) __P((struct ListData *, char **inp, int *len)); /* Process input */ int (*gl_freerow) __P((struct ListData *, struct ListRow *)); /* Free data for a row */ int (*gl_free) __P((struct ListData *)); /* Free data for the list */ int (*gl_matchrow) __P((struct ListData *, struct ListRow *, const char *)); }; struct ListData { const char *name; /* An identifier for the list */ struct ListRow *root; /* The first item in the list */ struct ListRow *selected; /* The selected row */ struct ListRow *top; /* The topmost visible row */ struct GenericList *list_fn; /* The functions that deal with the list */ char *search; /* The search term, if any */ void *data; /* List specific data */ }; extern struct LayFuncs ListLf; struct ListRow * glist_add_row __P((struct ListData *ldata, void *data, struct ListRow *after)); void glist_remove_rows __P((struct ListData *ldata)); void glist_display_all __P((struct ListData *list)); struct ListData * glist_display __P((struct GenericList *list, const char *name)); void glist_abort __P((void)); void display_displays __P((void)); void display_windows __P((int onblank, int order, struct win *group)); screen-4.9.1/braille.h0000664000175000017500000000632314467014146013250 0ustar alexalex/* * Authors: Hadi Bargi Rangin bargi@dots.physics.orst.edu * Bill Barry barryb@dots.physics.orst.edu * Randy Lundquist randyl@dots.physics.orst.edu * * Modifications Copyright (c) 1995 by * Science Access Project, Oregon State University. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #ifdef HAVE_BRAILLE extern void StartBraille __P((void)); struct braille_display { struct display *bd_dpy; /* display we are connected to */ int bd_start_braille; /* screenrc var to request to turn braille on */ int bd_using_braille; /* all is fine, use braille */ struct event bd_readev; struct event bd_writeev; struct event bd_selectev; int bd_fd; /* file descriptor */ int bd_obuflen; /* current number of charactors in output buffer */ char bd_obuf[IOSIZE]; int bd_info; /* default, no info, 0,1,2,3 */ int bd_ncrc; /* default 1, numbers of cells on the right side of real cursor, 1...bd_width */ int bd_skip; /* default off, on/off */ int bd_link; /* default, linked, on/off */ int bd_width; /* length of braille display to use, <=bd_ncells */ int bd_scroll; /* default on, scroll on/off */ char *bd_braille_table; /* braille code */ int bd_bell; /* bell used for navigation on/off */ int bd_ncells; /* real number of cells on braille display */ int bd_eightdot; /* eightdot on/off */ int bd_baud; /* communication baudrate between port and braille display */ char *bd_port; /* serial port to use */ char *bd_type; /* kind of braille display */ double bd_version; /* rom version of braille display */ char bd_btable[256]; /* braille translation table */ /* functions which communicate with braille displays */ int (*write_line_braille) __P((char [],int, int)); void (*buttonpress) __P((void)); int (*bd_response_test) __P((void)); int bd_refreshing; /* are we doing a refresh? */ char bd_line[40+1]; /* bd_ncells chars displayed on braille */ int bd_cursorpos; /* cursor position on braille */ char bd_oline[40+1]; /* bd_ncells chars displayed on braille */ int bd_sx, bd_sy; /* screen cursor pos */ int bd_moved; /* used braille move keys */ int bd_searching; /* are we seaching (bd_skip is on) */ int bd_searchmax; /* search: max x */ int bd_searchmin; /* search: min x */ int bd_searchstart; int bd_searchend; }; extern struct braille_display bd; #define BD_FORE bd.bd_dpy->d_fore #endif screen-4.9.1/FAQ0000777000175000017500000000000014467014146013105 2doc/FAQustar alexalexscreen-4.9.1/process.c0000664000175000017500000051350114467014146013310 0ustar alexalex/* Copyright (c) 2010 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "config.h" #include #include #include #include #if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX) # include #endif #include #ifndef sun #include #endif /* for solaris 2.1, Unixware (SVR4.2) and possibly others: */ #ifdef HAVE_STROPTS_H # include #endif #include "screen.h" #include "extern.h" #include "logfile.h" #include "layout.h" #include "viewport.h" #include "list_generic.h" extern struct comm comms[]; extern char *rc_name; extern char *RcFileName, *home; extern char *BellString, *ActivityString, *ShellProg, *ShellArgs[]; extern char *hstatusstring, *captionstring, *timestring; extern char *wliststr, *wlisttit; extern int captionalways; extern int queryflag; extern char *hardcopydir, *screenlogfile, *logtstamp_string; extern int log_flush, logtstamp_on, logtstamp_after; extern char *VisualBellString; extern int VBellWait, MsgWait, MsgMinWait, SilenceWait; extern char SockPath[], *SockName; extern int TtyMode, auto_detach, use_altscreen; extern int iflag, maxwin; extern int focusminwidth, focusminheight; extern int use_hardstatus, visual_bell; #ifdef COLOR extern int attr2color[][4]; extern int nattr2color; #endif extern int hardstatusemu; extern char *printcmd; extern int default_startup; extern int defobuflimit; extern int defnonblock; extern int defmousetrack; extern int ZombieKey_destroy; extern int ZombieKey_resurrect; extern int ZombieKey_onerror; #ifdef AUTO_NUKE extern int defautonuke; #endif extern int separate_sids; extern struct NewWindow nwin_default, nwin_undef; #ifdef COPY_PASTE extern int join_with_cr; extern int compacthist; extern int search_ic; # ifdef FONT extern int pastefont; # endif extern unsigned char mark_key_tab[]; extern char *BufferFile; #endif #ifdef POW_DETACH extern char *BufferFile, *PowDetachString; #endif #ifdef MULTIUSER extern struct acluser *EffectiveAclUser; /* acl.c */ #endif extern struct term term[]; /* terminal capabilities */ #ifdef MAPKEYS extern char *kmapdef[]; extern char *kmapadef[]; extern char *kmapmdef[]; #endif extern struct mchar mchar_so, mchar_null; extern int renditions[]; extern int VerboseCreate; #ifdef UTF8 extern char *screenencodings; #endif #ifdef DW_CHARS extern int cjkwidth; #endif static int CheckArgNum __P((int, char **)); static void ClearAction __P((struct action *)); static void SaveAction __P((struct action *, int, char **, int *)); static int NextWindow __P((void)); static int PreviousWindow __P((void)); static int MoreWindows __P((void)); static void CollapseWindowlist __P((void)); static void LogToggle __P((int)); static void ShowInfo __P((void)); static void ShowDInfo __P((void)); static struct win *WindowByName __P((char *)); static int WindowByNumber __P((char *)); static int ParseOnOff __P((struct action *, int *)); static int ParseWinNum __P((struct action *, int *)); static int ParseBase __P((struct action *, char *, int *, int, char *)); static int ParseNum1000 __P((struct action *, int *)); static char **SaveArgs __P((char **)); static int IsNum __P((char *, int)); static void Colonfin __P((char *, int, char *)); static void InputSelect __P((void)); static void InputSetenv __P((char *)); static void InputAKA __P((void)); #ifdef MULTIUSER static int InputSu __P((struct win *, struct acluser **, char *)); static void su_fin __P((char *, int, char *)); #endif static void AKAfin __P((char *, int, char *)); #ifdef COPY_PASTE static void copy_reg_fn __P((char *, int, char *)); static void ins_reg_fn __P((char *, int, char *)); #endif static void process_fn __P((char *, int, char *)); #ifdef PASSWORD static void pass1 __P((char *, int, char *)); static void pass2 __P((char *, int, char *)); #endif #ifdef POW_DETACH static void pow_detach_fn __P((char *, int, char *)); #endif static void digraph_fn __P((char *, int, char *)); static int digraph_find __P((const char *buf)); static void confirm_fn __P((char *, int, char *)); static int IsOnDisplay __P((struct win *)); static void ResizeRegions __P((char *, int)); static void ResizeFin __P((char *, int, char *)); static struct action *FindKtab __P((char *, int)); static void SelectFin __P((char *, int, char *)); static void SelectLayoutFin __P((char *, int, char *)); static void ShowWindowsX __P((char *)); extern struct layer *flayer; extern struct display *display, *displays; extern struct win *fore, *console_window, *windows; extern struct acluser *users; extern struct layout *layouts, *layout_attach, layout_last_marker; extern struct layout *laytab[]; extern char screenterm[], HostName[], version[]; extern struct NewWindow nwin_undef, nwin_default; extern struct LayFuncs WinLf, MarkLf; extern const int Z0width, Z1width; extern int real_uid, real_gid; #ifdef NETHACK extern int nethackflag; #endif extern struct win **wtab; #ifdef MULTIUSER extern char *multi; extern int maxusercount; #endif char NullStr[] = ""; struct plop plop_tab[MAX_PLOP_DEFS]; #ifndef PTYMODE # define PTYMODE 0622 #endif int TtyMode = PTYMODE; int hardcopy_append = 0; int all_norefresh = 0; #ifdef ZMODEM int zmodem_mode = 0; char *zmodem_sendcmd; char *zmodem_recvcmd; static char *zmodes[4] = {"off", "auto", "catch", "pass"}; #endif int idletimo; struct action idleaction; #ifdef BLANKER_PRG char **blankerprg; #endif struct action ktab[256 + KMAP_KEYS]; /* command key translation table */ struct kclass { struct kclass *next; char *name; struct action ktab[256 + KMAP_KEYS]; }; struct kclass *kclasses; #ifdef MAPKEYS struct action umtab[KMAP_KEYS+KMAP_AKEYS]; struct action dmtab[KMAP_KEYS+KMAP_AKEYS]; struct action mmtab[KMAP_KEYS+KMAP_AKEYS]; struct kmap_ext *kmap_exts; int kmap_extn; static int maptimeout = 300; #endif #ifndef MAX_DIGRAPH #define MAX_DIGRAPH 512 #endif struct digraph { unsigned char d[2]; int value; }; /* digraph table taken from old vim and rfc1345 */ static struct digraph digraphs[MAX_DIGRAPH + 1] = { {{' ', ' '}, 160}, /*   */ {{'N', 'S'}, 160}, /*   */ {{'~', '!'}, 161}, /* ¡ */ {{'!', '!'}, 161}, /* ¡ */ {{'!', 'I'}, 161}, /* ¡ */ {{'c', '|'}, 162}, /* ¢ */ {{'c', 't'}, 162}, /* ¢ */ {{'$', '$'}, 163}, /* £ */ {{'P', 'd'}, 163}, /* £ */ {{'o', 'x'}, 164}, /* ¤ */ {{'C', 'u'}, 164}, /* ¤ */ {{'C', 'u'}, 164}, /* ¤ */ {{'E', 'u'}, 164}, /* ¤ */ {{'Y', '-'}, 165}, /* ¥ */ {{'Y', 'e'}, 165}, /* ¥ */ {{'|', '|'}, 166}, /* ¦ */ {{'B', 'B'}, 166}, /* ¦ */ {{'p', 'a'}, 167}, /* § */ {{'S', 'E'}, 167}, /* § */ {{'"', '"'}, 168}, /* ¨ */ {{'\'', ':'}, 168}, /* ¨ */ {{'c', 'O'}, 169}, /* © */ {{'C', 'o'}, 169}, /* © */ {{'a', '-'}, 170}, /* ª */ {{'<', '<'}, 171}, /* « */ {{'-', ','}, 172}, /* ¬ */ {{'N', 'O'}, 172}, /* ¬ */ {{'-', '-'}, 173}, /* ­ */ {{'r', 'O'}, 174}, /* ® */ {{'R', 'g'}, 174}, /* ® */ {{'-', '='}, 175}, /* ¯ */ {{'\'', 'm'}, 175}, /* ¯ */ {{'~', 'o'}, 176}, /* ° */ {{'D', 'G'}, 176}, /* ° */ {{'+', '-'}, 177}, /* ± */ {{'2', '2'}, 178}, /* ² */ {{'2', 'S'}, 178}, /* ² */ {{'3', '3'}, 179}, /* ³ */ {{'3', 'S'}, 179}, /* ³ */ {{'\'', '\''}, 180}, /* ´ */ {{'j', 'u'}, 181}, /* µ */ {{'M', 'y'}, 181}, /* µ */ {{'p', 'p'}, 182}, /* ¶ */ {{'P', 'I'}, 182}, /* ¶ */ {{'~', '.'}, 183}, /* · */ {{'.', 'M'}, 183}, /* · */ {{',', ','}, 184}, /* ¸ */ {{'\'', ','}, 184}, /* ¸ */ {{'1', '1'}, 185}, /* ¹ */ {{'1', 'S'}, 185}, /* ¹ */ {{'o', '-'}, 186}, /* º */ {{'>', '>'}, 187}, /* » */ {{'1', '4'}, 188}, /* ¼ */ {{'1', '2'}, 189}, /* ½ */ {{'3', '4'}, 190}, /* ¾ */ {{'~', '?'}, 191}, /* ¿ */ {{'?', '?'}, 191}, /* ¿ */ {{'?', 'I'}, 191}, /* ¿ */ {{'A', '`'}, 192}, /* À */ {{'A', '!'}, 192}, /* À */ {{'A', '\''}, 193}, /* Á */ {{'A', '^'}, 194}, /*  */ {{'A', '>'}, 194}, /*  */ {{'A', '~'}, 195}, /* à */ {{'A', '?'}, 195}, /* à */ {{'A', '"'}, 196}, /* Ä */ {{'A', ':'}, 196}, /* Ä */ {{'A', '@'}, 197}, /* Å */ {{'A', 'A'}, 197}, /* Å */ {{'A', 'E'}, 198}, /* Æ */ {{'C', ','}, 199}, /* Ç */ {{'E', '`'}, 200}, /* È */ {{'E', '!'}, 200}, /* È */ {{'E', '\''}, 201}, /* É */ {{'E', '^'}, 202}, /* Ê */ {{'E', '>'}, 202}, /* Ê */ {{'E', '"'}, 203}, /* Ë */ {{'E', ':'}, 203}, /* Ë */ {{'I', '`'}, 204}, /* Ì */ {{'I', '!'}, 204}, /* Ì */ {{'I', '\''}, 205}, /* Í */ {{'I', '^'}, 206}, /* Î */ {{'I', '>'}, 206}, /* Î */ {{'I', '"'}, 207}, /* Ï */ {{'I', ':'}, 207}, /* Ï */ {{'D', '-'}, 208}, /* Ð */ {{'N', '~'}, 209}, /* Ñ */ {{'N', '?'}, 209}, /* Ñ */ {{'O', '`'}, 210}, /* Ò */ {{'O', '!'}, 210}, /* Ò */ {{'O', '\''}, 211}, /* Ó */ {{'O', '^'}, 212}, /* Ô */ {{'O', '>'}, 212}, /* Ô */ {{'O', '~'}, 213}, /* Õ */ {{'O', '?'}, 213}, /* Õ */ {{'O', '"'}, 214}, /* Ö */ {{'O', ':'}, 214}, /* Ö */ {{'/', '\\'}, 215}, /* × */ {{'*', 'x'}, 215}, /* × */ {{'O', '/'}, 216}, /* Ø */ {{'U', '`'}, 217}, /* Ù */ {{'U', '!'}, 217}, /* Ù */ {{'U', '\''}, 218}, /* Ú */ {{'U', '^'}, 219}, /* Û */ {{'U', '>'}, 219}, /* Û */ {{'U', '"'}, 220}, /* Ü */ {{'U', ':'}, 220}, /* Ü */ {{'Y', '\''}, 221}, /* Ý */ {{'I', 'p'}, 222}, /* Þ */ {{'T', 'H'}, 222}, /* Þ */ {{'s', 's'}, 223}, /* ß */ {{'s', '"'}, 223}, /* ß */ {{'a', '`'}, 224}, /* à */ {{'a', '!'}, 224}, /* à */ {{'a', '\''}, 225}, /* á */ {{'a', '^'}, 226}, /* â */ {{'a', '>'}, 226}, /* â */ {{'a', '~'}, 227}, /* ã */ {{'a', '?'}, 227}, /* ã */ {{'a', '"'}, 228}, /* ä */ {{'a', ':'}, 228}, /* ä */ {{'a', 'a'}, 229}, /* å */ {{'a', 'e'}, 230}, /* æ */ {{'c', ','}, 231}, /* ç */ {{'e', '`'}, 232}, /* è */ {{'e', '!'}, 232}, /* è */ {{'e', '\''}, 233}, /* é */ {{'e', '^'}, 234}, /* ê */ {{'e', '>'}, 234}, /* ê */ {{'e', '"'}, 235}, /* ë */ {{'e', ':'}, 235}, /* ë */ {{'i', '`'}, 236}, /* ì */ {{'i', '!'}, 236}, /* ì */ {{'i', '\''}, 237}, /* í */ {{'i', '^'}, 238}, /* î */ {{'i', '>'}, 238}, /* î */ {{'i', '"'}, 239}, /* ï */ {{'i', ':'}, 239}, /* ï */ {{'d', '-'}, 240}, /* ð */ {{'n', '~'}, 241}, /* ñ */ {{'n', '?'}, 241}, /* ñ */ {{'o', '`'}, 242}, /* ò */ {{'o', '!'}, 242}, /* ò */ {{'o', '\''}, 243}, /* ó */ {{'o', '^'}, 244}, /* ô */ {{'o', '>'}, 244}, /* ô */ {{'o', '~'}, 245}, /* õ */ {{'o', '?'}, 245}, /* õ */ {{'o', '"'}, 246}, /* ö */ {{'o', ':'}, 246}, /* ö */ {{':', '-'}, 247}, /* ÷ */ {{'o', '/'}, 248}, /* ø */ {{'u', '`'}, 249}, /* ù */ {{'u', '!'}, 249}, /* ù */ {{'u', '\''}, 250}, /* ú */ {{'u', '^'}, 251}, /* û */ {{'u', '>'}, 251}, /* û */ {{'u', '"'}, 252}, /* ü */ {{'u', ':'}, 252}, /* ü */ {{'y', '\''}, 253}, /* ý */ {{'i', 'p'}, 254}, /* þ */ {{'t', 'h'}, 254}, /* þ */ {{'y', '"'}, 255}, /* ÿ */ {{'y', ':'}, 255}, /* ÿ */ {{'"', '['}, 196}, /* Ä */ {{'"', '\\'}, 214}, /* Ö */ {{'"', ']'}, 220}, /* Ü */ {{'"', '{'}, 228}, /* ä */ {{'"', '|'}, 246}, /* ö */ {{'"', '}'}, 252}, /* ü */ {{'"', '~'}, 223} /* ß */ }; #define RESIZE_FLAG_H 1 #define RESIZE_FLAG_V 2 #define RESIZE_FLAG_L 4 static char *resizeprompts[] = { "resize # lines: ", "resize -h # lines: ", "resize -v # lines: ", "resize -b # lines: ", "resize -l # lines: ", "resize -l -h # lines: ", "resize -l -v # lines: ", "resize -l -b # lines: ", }; static int parse_input_int(buf, len, val) const char *buf; int len; int *val; { int x = 0, i; if (len >= 1 && ((*buf == 'U' && buf[1] == '+') || (*buf == '0' && (buf[1] == 'x' || buf[1] == 'X')))) { x = 0; for (i = 2; i < len; i++) { if (buf[i] >= '0' && buf[i] <= '9') x = x * 16 | (buf[i] - '0'); else if (buf[i] >= 'a' && buf[i] <= 'f') x = x * 16 | (buf[i] - ('a' - 10)); else if (buf[i] >= 'A' && buf[i] <= 'F') x = x * 16 | (buf[i] - ('A' - 10)); else return 0; } } else if (buf[0] == '0') { x = 0; for (i = 1; i < len; i++) { if (buf[i] < '0' || buf[i] > '7') return 0; x = x * 8 | (buf[i] - '0'); } } else return 0; *val = x; return 1; } char *noargs[1]; int enter_window_name_mode = 0; void InitKeytab() { register unsigned int i; #ifdef MAPKEYS char *argarr[2]; #endif for (i = 0; i < sizeof(ktab)/sizeof(*ktab); i++) { ktab[i].nr = RC_ILLEGAL; ktab[i].args = noargs; ktab[i].argl = 0; } #ifdef MAPKEYS for (i = 0; i < KMAP_KEYS+KMAP_AKEYS; i++) { umtab[i].nr = RC_ILLEGAL; umtab[i].args = noargs; umtab[i].argl = 0; dmtab[i].nr = RC_ILLEGAL; dmtab[i].args = noargs; dmtab[i].argl = 0; mmtab[i].nr = RC_ILLEGAL; mmtab[i].args = noargs; mmtab[i].argl = 0; } argarr[1] = 0; for (i = 0; i < NKMAPDEF; i++) { if (i + KMAPDEFSTART < T_CAPS) continue; if (i + KMAPDEFSTART >= T_CAPS + KMAP_KEYS) continue; if (kmapdef[i] == 0) continue; argarr[0] = kmapdef[i]; SaveAction(dmtab + i + (KMAPDEFSTART - T_CAPS), RC_STUFF, argarr, 0); } for (i = 0; i < NKMAPADEF; i++) { if (i + KMAPADEFSTART < T_CURSOR) continue; if (i + KMAPADEFSTART >= T_CURSOR + KMAP_AKEYS) continue; if (kmapadef[i] == 0) continue; argarr[0] = kmapadef[i]; SaveAction(dmtab + i + (KMAPADEFSTART - T_CURSOR + KMAP_KEYS), RC_STUFF, argarr, 0); } for (i = 0; i < NKMAPMDEF; i++) { if (i + KMAPMDEFSTART < T_CAPS) continue; if (i + KMAPMDEFSTART >= T_CAPS + KMAP_KEYS) continue; if (kmapmdef[i] == 0) continue; argarr[0] = kmapmdef[i]; argarr[1] = 0; SaveAction(mmtab + i + (KMAPMDEFSTART - T_CAPS), RC_STUFF, argarr, 0); } #endif ktab['h'].nr = RC_HARDCOPY; #ifdef BSDJOBS ktab['z'].nr = ktab[Ctrl('z')].nr = RC_SUSPEND; #endif ktab['c'].nr = ktab[Ctrl('c')].nr = RC_SCREEN; ktab[' '].nr = ktab[Ctrl(' ')].nr = ktab['n'].nr = ktab[Ctrl('n')].nr = RC_NEXT; ktab['N'].nr = RC_NUMBER; ktab[Ctrl('h')].nr = ktab[0177].nr = ktab['p'].nr = ktab[Ctrl('p')].nr = RC_PREV; ktab['k'].nr = ktab[Ctrl('k')].nr = RC_KILL; ktab['l'].nr = ktab[Ctrl('l')].nr = RC_REDISPLAY; ktab['w'].nr = ktab[Ctrl('w')].nr = RC_WINDOWS; ktab['v'].nr = RC_VERSION; ktab[Ctrl('v')].nr = RC_DIGRAPH; ktab['q'].nr = ktab[Ctrl('q')].nr = RC_XON; ktab['s'].nr = ktab[Ctrl('s')].nr = RC_XOFF; ktab['t'].nr = ktab[Ctrl('t')].nr = RC_TIME; ktab['i'].nr = ktab[Ctrl('i')].nr = RC_INFO; ktab['m'].nr = ktab[Ctrl('m')].nr = RC_LASTMSG; ktab['A'].nr = RC_TITLE; #if defined(UTMPOK) && defined(LOGOUTOK) ktab['L'].nr = RC_LOGIN; #endif ktab[','].nr = RC_LICENSE; ktab['W'].nr = RC_WIDTH; ktab['.'].nr = RC_DUMPTERMCAP; ktab[Ctrl('\\')].nr = RC_QUIT; #ifdef DETACH ktab['d'].nr = ktab[Ctrl('d')].nr = RC_DETACH; # ifdef POW_DETACH ktab['D'].nr = RC_POW_DETACH; # endif #endif ktab['r'].nr = ktab[Ctrl('r')].nr = RC_WRAP; ktab['f'].nr = ktab[Ctrl('f')].nr = RC_FLOW; ktab['C'].nr = RC_CLEAR; ktab['Z'].nr = RC_RESET; ktab['H'].nr = RC_LOG; ktab['M'].nr = RC_MONITOR; ktab['?'].nr = RC_HELP; #ifdef MULTI ktab['*'].nr = RC_DISPLAYS; #endif { char *args[2]; args[0] = "-"; args[1] = NULL; SaveAction(ktab + '-', RC_SELECT, args, 0); } for (i = 0; i < ((maxwin && maxwin < 10) ? maxwin : 10); i++) { char *args[2], arg1[10]; args[0] = arg1; args[1] = 0; sprintf(arg1, "%d", i); SaveAction(ktab + '0' + i, RC_SELECT, args, 0); } ktab['\''].nr = RC_SELECT; /* calling a window by name */ { char *args[2]; args[0] = "-b"; args[1] = 0; SaveAction(ktab + '"', RC_WINDOWLIST, args, 0); } ktab[Ctrl('G')].nr = RC_VBELL; ktab[':'].nr = RC_COLON; #ifdef COPY_PASTE ktab['['].nr = ktab[Ctrl('[')].nr = RC_COPY; { char *args[2]; args[0] = "."; args[1] = 0; SaveAction(ktab + ']', RC_PASTE, args, 0); SaveAction(ktab + Ctrl(']'), RC_PASTE, args, 0); } ktab['{'].nr = RC_HISTORY; ktab['}'].nr = RC_HISTORY; ktab['>'].nr = RC_WRITEBUF; ktab['<'].nr = RC_READBUF; ktab['='].nr = RC_REMOVEBUF; #endif #ifdef POW_DETACH ktab['D'].nr = RC_POW_DETACH; #endif #ifdef LOCK ktab['x'].nr = ktab[Ctrl('x')].nr = RC_LOCKSCREEN; #endif ktab['b'].nr = ktab[Ctrl('b')].nr = RC_BREAK; ktab['B'].nr = RC_POW_BREAK; ktab['_'].nr = RC_SILENCE; ktab['S'].nr = RC_SPLIT; ktab['Q'].nr = RC_ONLY; ktab['X'].nr = RC_REMOVE; ktab['F'].nr = RC_FIT; ktab['\t'].nr = RC_FOCUS; { char *args[2]; args[0] = "prev"; args[1] = 0; SaveAction(ktab + T_BACKTAB - T_CAPS + 256, RC_FOCUS, args, 0); } { char *args[2]; args[0] = "-v"; args[1] = 0; SaveAction(ktab + '|', RC_SPLIT, args, 0); } /* These come last; they may want overwrite others: */ if (DefaultEsc >= 0) { ClearAction(&ktab[DefaultEsc]); ktab[DefaultEsc].nr = RC_OTHER; } if (DefaultMetaEsc >= 0) { ClearAction(&ktab[DefaultMetaEsc]); ktab[DefaultMetaEsc].nr = RC_META; } idleaction.nr = RC_BLANKER; idleaction.args = noargs; idleaction.argl = 0; } static struct action * FindKtab(class, create) char *class; int create; { struct kclass *kp, **kpp; int i; if (class == 0) return ktab; for (kpp = &kclasses; (kp = *kpp) != 0; kpp = &kp->next) if (!strcmp(kp->name, class)) break; if (kp == 0) { if (!create) return 0; if (strlen(class) > 80) { Msg(0, "Command class name too long."); return 0; } kp = malloc(sizeof(*kp)); if (kp == 0) { Msg(0, "%s", strnomem); return 0; } kp->name = SaveStr(class); for (i = 0; i < (int)(sizeof(kp->ktab)/sizeof(*kp->ktab)); i++) { kp->ktab[i].nr = RC_ILLEGAL; kp->ktab[i].args = noargs; kp->ktab[i].argl = 0; kp->ktab[i].quiet = 0; } kp->next = 0; *kpp = kp; } return kp->ktab; } static void ClearAction(act) struct action *act; { char **p; if (act->nr == RC_ILLEGAL) return; act->nr = RC_ILLEGAL; if (act->args == noargs) return; for (p = act->args; *p; p++) free(*p); free((char *)act->args); act->args = noargs; act->argl = 0; } /* * ProcessInput: process input from display and feed it into * the layer on canvas D_forecv. */ #ifdef MAPKEYS /* * This ProcessInput just does the keybindings and passes * everything else on to ProcessInput2. */ void ProcessInput(ibuf, ilen) char *ibuf; int ilen; { int ch, slen; unsigned char *s, *q; int i, l; char *p; debug1("ProcessInput: %d bytes\n", ilen); if (display == 0 || ilen == 0) return; if (D_seql) evdeq(&D_mapev); slen = ilen; s = (unsigned char *)ibuf; while (ilen-- > 0) { ch = *s++; if (D_dontmap || !D_nseqs) { D_dontmap = 0; continue; } for (;;) { debug3("cmp %c %c[%ld]\n", ch, *D_seqp, (long)(D_seqp - D_kmaps)); if (*D_seqp != ch) { l = D_seqp[D_seqp[-D_seql-1] + 1]; if (l) { D_seqp += l * 2 + 4; debug1("miss %ld\n", (long)(D_seqp - D_kmaps)); continue; } debug("complete miss\n"); D_mapdefault = 0; l = D_seql; p = (char *)D_seqp - l; D_seql = 0; D_seqp = D_kmaps + 3; if (l == 0) break; if ((q = D_seqh) != 0) { D_seqh = 0; i = q[0] << 8 | q[1]; i &= ~KMAP_NOTIMEOUT; debug1("Mapping former hit #%d - ", i); debug2("%d(%s) - ", q[2], q + 3); if (StuffKey(i)) ProcessInput2((char *)q + 3, q[2]); if (display == 0) return; l -= q[2]; p += q[2]; } else D_dontmap = 1; debug1("flush old %d\n", l); ProcessInput(p, l); if (display == 0) return; evdeq(&D_mapev); continue; } if (D_seql++ == 0) { /* Finish old stuff */ slen -= ilen + 1; debug1("finish old %d\n", slen); if (slen) ProcessInput2(ibuf, slen); if (display == 0) return; D_seqh = 0; } ibuf = (char *)s; slen = ilen; D_seqp++; l = D_seql; debug2("length am %d, want %d\n", l, D_seqp[-l - 1]); if (l == D_seqp[-l - 1]) { if (D_seqp[l] != l) { q = D_seqp + 1 + l; if (D_kmaps + D_nseqs > q && q[2] > l && !bcmp(D_seqp - l, q + 3, l)) { debug1("have another mapping (%s), delay execution\n", q + 3); D_seqh = D_seqp - 3 - l; D_seqp = q + 3 + l; break; } } i = D_seqp[-l - 3] << 8 | D_seqp[-l - 2]; i &= ~KMAP_NOTIMEOUT; debug1("Mapping #%d - ", i); p = (char *)D_seqp - l; debug2("%d(%s) - ", l, p); D_seql = 0; D_seqp = D_kmaps + 3; D_seqh = 0; if (StuffKey(i)) ProcessInput2(p, l); if (display == 0) return; } break; } } if (D_seql) { debug("am in sequence -> check for timeout\n"); l = D_seql; for (s = D_seqp; ; s += i * 2 + 4) { if (s[-l-3] & KMAP_NOTIMEOUT >> 8) break; if ((i = s[s[-l-1] + 1]) == 0) { SetTimeout(&D_mapev, maptimeout); evenq(&D_mapev); break; } } } ProcessInput2(ibuf, slen); } #else # define ProcessInput2 ProcessInput #endif /* * Here only the screen escape commands are handled. */ void ProcessInput2(ibuf, ilen) char *ibuf; int ilen; { char *s; int ch, slen; struct action *ktabp; debug1("ProcessInput2: %d bytes\n", ilen); while (ilen && display) { debug1(" - ilen now %d bytes\n", ilen); flayer = D_forecv->c_layer; fore = D_fore; slen = ilen; s = ibuf; if (!D_ESCseen) { while (ilen > 0) { if ((unsigned char)*s++ == D_user->u_Esc) break; ilen--; } slen -= ilen; if (slen) DoProcess(fore, &ibuf, &slen, 0); if (--ilen == 0) { D_ESCseen = ktab; WindowChanged(fore, 'E'); } } if (ilen <= 0) return; ktabp = D_ESCseen ? D_ESCseen : ktab; if (D_ESCseen) { D_ESCseen = 0; WindowChanged(fore, 'E'); } ch = (unsigned char)*s; /* * As users have different esc characters, but a common ktab[], * we fold back the users esc and meta-esc key to the Default keys * that can be looked up in the ktab[]. grmbl. jw. * XXX: make ktab[] a per user thing. */ if (ch == D_user->u_Esc) ch = DefaultEsc; else if (ch == D_user->u_MetaEsc) ch = DefaultMetaEsc; if (ch >= 0) DoAction(&ktabp[ch], ch); ibuf = (char *)(s + 1); ilen--; } } void DoProcess(p, bufp, lenp, pa) struct win *p; char **bufp; int *lenp; struct paster *pa; { int oldlen; struct display *d = display; #ifdef COPY_PASTE /* XXX -> PasteStart */ if (pa && *lenp > 1 && p && p->w_slowpaste) { /* schedule slowpaste event */ SetTimeout(&p->w_paster.pa_slowev, p->w_slowpaste); evenq(&p->w_paster.pa_slowev); return; } #endif while (flayer && *lenp) { #ifdef COPY_PASTE if (!pa && p && p->w_paster.pa_pastelen && flayer == p->w_paster.pa_pastelayer) { debug("layer is busy - beep!\n"); WBell(p, visual_bell); *bufp += *lenp; *lenp = 0; display = d; return; } #endif oldlen = *lenp; LayProcess(bufp, lenp); #ifdef COPY_PASTE if (pa && !pa->pa_pastelayer) break; /* flush rest of paste */ #endif if (*lenp == oldlen) { if (pa) { display = d; return; } /* We're full, let's beep */ debug("layer is full - beep!\n"); WBell(p, visual_bell); break; } } *bufp += *lenp; *lenp = 0; display = d; #ifdef COPY_PASTE if (pa && pa->pa_pastelen == 0) FreePaster(pa); #endif } int FindCommnr(str) const char *str; { int x, m, l = 0, r = RC_LAST; while (l <= r) { m = (l + r) / 2; x = strcmp(str, comms[m].name); if (x > 0) l = m + 1; else if (x < 0) r = m - 1; else return m; } return RC_ILLEGAL; } static int CheckArgNum(nr, args) int nr; char **args; { int i, n; static char *argss[] = {"no", "one", "two", "three", "four", "OOPS"}; static char *orformat[] = { "%s: %s: %s argument%s required", "%s: %s: %s or %s argument%s required", "%s: %s: %s, %s or %s argument%s required", "%s: %s: %s, %s, %s or %s argument%s required" }; n = comms[nr].flags & ARGS_MASK; for (i = 0; args[i]; i++) ; if (comms[nr].flags & ARGS_ORMORE) { if (i < n) { Msg(0, "%s: %s: at least %s argument%s required", rc_name, comms[nr].name, argss[n], n != 1 ? "s" : ""); return -1; } } else if ((comms[nr].flags & ARGS_PLUS1) && (comms[nr].flags & ARGS_PLUS2) && (comms[nr].flags & ARGS_PLUS3)) { if (i != n && i != n + 1 && i != n + 2 && i != n + 3) { Msg(0, orformat[3], rc_name, comms[nr].name, argss[n], argss[n + 1], argss[n + 2], argss[n + 3], ""); return -1; } } else if ((comms[nr].flags & ARGS_PLUS1) && (comms[nr].flags & ARGS_PLUS2)) { if (i != n && i != n + 1 && i != n + 2) { Msg(0, orformat[2], rc_name, comms[nr].name, argss[n], argss[n + 1], argss[n + 2], ""); return -1; } } else if ((comms[nr].flags & ARGS_PLUS1) && (comms[nr].flags & ARGS_PLUS3)) { if (i != n && i != n + 1 && i != n + 3) { Msg(0, orformat[2], rc_name, comms[nr].name, argss[n], argss[n + 1], argss[n + 3], ""); return -1; } } else if ((comms[nr].flags & ARGS_PLUS2) && (comms[nr].flags & ARGS_PLUS3)) { if (i != n && i != n + 2 && i != n + 3) { Msg(0, orformat[2], rc_name, comms[nr].name, argss[n], argss[n + 2], argss[n + 3], ""); return -1; } } else if (comms[nr].flags & ARGS_PLUS1) { if (i != n && i != n + 1) { Msg(0, orformat[1], rc_name, comms[nr].name, argss[n], argss[n + 1], n != 0 ? "s" : ""); return -1; } } else if (comms[nr].flags & ARGS_PLUS2) { if (i != n && i != n + 2) { Msg(0, orformat[1], rc_name, comms[nr].name, argss[n], argss[n + 2], "s"); return -1; } } else if (comms[nr].flags & ARGS_PLUS3) { if (i != n && i != n + 3) { Msg(0, orformat[1], rc_name, comms[nr].name, argss[n], argss[n + 3], ""); return -1; } } else if (i != n) { Msg(0, orformat[0], rc_name, comms[nr].name, argss[n], n != 1 ? "s" : ""); return -1; } return i; } static void StuffFin(buf, len, data) char *buf; int len; char *data; { if (!flayer) return; while(len) LayProcess(&buf, &len); } /* If the command is not 'quieted', then use Msg to output the message. If it's a remote * query, then Msg takes care of also outputting the message to the querying client. * * If we want the command to be quiet, and it's a remote query, then use QueryMsg so that * the response does go back to the querying client. * * If the command is quieted, and it's not a remote query, then just don't print the message. */ #define OutputMsg (!act->quiet ? Msg : queryflag >= 0 ? QueryMsg : Dummy) /*ARGSUSED*/ void DoAction(act, key) struct action *act; int key; { int nr = act->nr; char **args = act->args; int *argl = act->argl; struct win *p; int argc, i, n, msgok; char *s; char ch; struct display *odisplay = display; struct acluser *user; user = display ? D_user : users; if (nr == RC_ILLEGAL) { debug1("key '%c': No action\n", key); return; } n = comms[nr].flags; /* Commands will have a CAN_QUERY flag, depending on whether they have * something to return on a query. For example, 'windows' can return a result, * but 'other' cannot. * If some command causes an error, then it should reset queryflag to -1, so that * the process requesting the query can be notified that an error happened. */ if (!(n & CAN_QUERY) && queryflag >= 0) { /* Query flag is set, but this command cannot be queried. */ OutputMsg(0, "%s command cannot be queried.", comms[nr].name); queryflag = -1; return; } if ((n & NEED_DISPLAY) && display == 0) { OutputMsg(0, "%s: %s: display required", rc_name, comms[nr].name); queryflag = -1; return; } if ((n & NEED_FORE) && fore == 0) { OutputMsg(0, "%s: %s: window required", rc_name, comms[nr].name); queryflag = -1; return; } if ((n & NEED_LAYER) && flayer == 0) { OutputMsg(0, "%s: %s: display or window required", rc_name, comms[nr].name); queryflag = -1; return; } if ((argc = CheckArgNum(nr, args)) < 0) return; #ifdef MULTIUSER if (display) { if (AclCheckPermCmd(D_user, ACL_EXEC, &comms[nr])) { OutputMsg(0, "%s: %s: permission denied (user %s)", rc_name, comms[nr].name, (EffectiveAclUser ? EffectiveAclUser : D_user)->u_name); queryflag = -1; return; } } #endif /* MULTIUSER */ msgok = display && !*rc_name; switch(nr) { case RC_SELECT: if (!*args) InputSelect(); else if (args[0][0] == '-' && !args[0][1]) { SetForeWindow((struct win *)0); Activate(0); } else if (args[0][0] == '.' && !args[0][1]) { if (!fore) { OutputMsg(0, "select . needs a window"); queryflag = -1; } else { SetForeWindow(fore); Activate(0); } } else if (ParseWinNum(act, &n) == 0) SwitchWindow(n); else if (queryflag >= 0) queryflag = -1; /* ParseWinNum already prints out an appropriate error message. */ break; #ifdef AUTO_NUKE case RC_DEFAUTONUKE: if (ParseOnOff(act, &defautonuke) == 0 && msgok) OutputMsg(0, "Default autonuke turned %s", defautonuke ? "on" : "off"); if (display && *rc_name) D_auto_nuke = defautonuke; break; case RC_AUTONUKE: if (ParseOnOff(act, &D_auto_nuke) == 0 && msgok) OutputMsg(0, "Autonuke turned %s", D_auto_nuke ? "on" : "off"); break; #endif case RC_DEFOBUFLIMIT: if (ParseNum(act, &defobuflimit) == 0 && msgok) OutputMsg(0, "Default limit set to %d", defobuflimit); if (display && *rc_name) { D_obufmax = defobuflimit; D_obuflenmax = D_obuflen - D_obufmax; } break; case RC_OBUFLIMIT: if (*args == 0) OutputMsg(0, "Limit is %d, current buffer size is %d", D_obufmax, D_obuflen); else if (ParseNum(act, &D_obufmax) == 0 && msgok) OutputMsg(0, "Limit set to %d", D_obufmax); D_obuflenmax = D_obuflen - D_obufmax; break; case RC_DUMPTERMCAP: WriteFile(user, (char *)0, DUMP_TERMCAP); break; case RC_HARDCOPY: { int mode = DUMP_HARDCOPY; char *file = NULL; if (args[0]) { if (!strcmp(*args, "-h")) { mode = DUMP_SCROLLBACK; file = args[1]; } else if (!strcmp(*args, "--") && args[1]) file = args[1]; else file = args[0]; } if (args[0] && file == args[0] && args[1]) { OutputMsg(0, "%s: hardcopy: too many arguments", rc_name); break; } WriteFile(user, file, mode); } break; case RC_DEFLOG: (void)ParseOnOff(act, &nwin_default.Lflag); break; case RC_LOG: n = fore->w_log ? 1 : 0; ParseSwitch(act, &n); LogToggle(n); break; #ifdef BSDJOBS case RC_SUSPEND: Detach(D_STOP); break; #endif case RC_NEXT: if (MoreWindows()) SwitchWindow(NextWindow()); break; case RC_PREV: if (MoreWindows()) SwitchWindow(PreviousWindow()); break; case RC_KILL: { char *name; if (key >= 0) { #ifdef PSEUDOS Input(fore->w_pwin ? "Really kill this filter [y/n]" : "Really kill this window [y/n]", 1, INP_RAW, confirm_fn, NULL, RC_KILL); #else Input("Really kill this window [y/n]", 1, INP_RAW, confirm_fn, NULL, RC_KILL); #endif break; } n = fore->w_number; #ifdef PSEUDOS if (fore->w_pwin) { FreePseudowin(fore); OutputMsg(0, "Filter removed."); break; } #endif name = SaveStr(fore->w_title); KillWindow(fore); OutputMsg(0, "Window %d (%s) killed.", n, name); if (name) free(name); break; } case RC_QUIT: if (key >= 0) { Input("Really quit and kill all your windows [y/n]", 1, INP_RAW, confirm_fn, NULL, RC_QUIT); break; } Finit(0); /* NOTREACHED */ #ifdef DETACH case RC_DETACH: if (*args && !strcmp(*args, "-h")) Hangup(); else Detach(D_DETACH); break; # ifdef POW_DETACH case RC_POW_DETACH: if (key >= 0) { static char buf[2]; buf[0] = key; Input(buf, 1, INP_RAW, pow_detach_fn, NULL, 0); } else Detach(D_POWER); /* detach and kill Attacher's parent */ break; # endif #endif case RC_DEBUG: #ifdef DEBUG if (!*args) { if (dfp) OutputMsg(0, "debugging info is written to %s/", DEBUGDIR); else OutputMsg(0, "debugging is currently off. Use 'debug on' to enable."); break; } if (dfp) { debug("debug: closing debug file.\n"); fflush(dfp); fclose(dfp); dfp = NULL; } if (strcmp("off", *args)) opendebug(0, 1); # ifdef SIG_NODEBUG else if (display) kill(D_userpid, SIG_NODEBUG); /* a one shot item, but hey... */ # endif /* SIG_NODEBUG */ #else if (*args == 0 || strcmp("off", *args)) OutputMsg(0, "Sorry, screen was compiled without -DDEBUG option."); #endif break; #ifdef ZMODEM case RC_ZMODEM: if (*args && !strcmp(*args, "sendcmd")) { if (args[1]) { free(zmodem_sendcmd); zmodem_sendcmd = SaveStr(args[1]); } if (msgok) OutputMsg(0, "zmodem sendcmd: %s", zmodem_sendcmd); break; } if (*args && !strcmp(*args, "recvcmd")) { if (args[1]) { free(zmodem_recvcmd); zmodem_recvcmd = SaveStr(args[1]); } if (msgok) OutputMsg(0, "zmodem recvcmd: %s", zmodem_recvcmd); break; } if (*args) { for (i = 0; i < 4; i++) if (!strcmp(zmodes[i], *args)) break; if (i == 4 && !strcmp(*args, "on")) i = 1; if (i == 4) { OutputMsg(0, "usage: zmodem off|auto|catch|pass"); break; } zmodem_mode = i; } if (msgok) OutputMsg(0, "zmodem mode is %s", zmodes[zmodem_mode]); break; #endif case RC_UNBINDALL: { register unsigned int i; for (i = 0; i < sizeof(ktab)/sizeof(*ktab); i++) ClearAction(&ktab[i]); OutputMsg(0, "Unbound all keys." ); break; } case RC_ZOMBIE: { if (!(s = *args)) { ZombieKey_destroy = 0; break; } if (*argl == 0 || *argl > 2) { OutputMsg(0, "%s:zombie: one or two characters expected.", rc_name); break; } if (args[1]) { if (!strcmp(args[1], "onerror")) { ZombieKey_onerror = 1; } else { OutputMsg(0, "usage: zombie [keys [onerror]]"); break; } } else ZombieKey_onerror = 0; ZombieKey_destroy = args[0][0]; ZombieKey_resurrect = *argl == 2 ? args[0][1] : 0; } break; case RC_WALL: #ifdef MULTIUSER s = D_user->u_name; #else s = D_usertty; #endif { struct display *olddisplay = display; display = 0; /* no display will cause a broadcast */ OutputMsg(0, "%s: %s", s, *args); display = olddisplay; } break; case RC_AT: /* where this AT command comes from: */ if (!user) break; #ifdef MULTIUSER s = SaveStr(user->u_name); /* DO NOT RETURN FROM HERE WITHOUT RESETTING THIS: */ EffectiveAclUser = user; #else s = SaveStr(display ? D_usertty : user->u_name); #endif n = strlen(args[0]); if (n) n--; /* * the windows/displays loops are quite dangerous here, take extra * care not to trigger landmines. Things may appear/disappear while * we are walking along. */ switch (args[0][n]) { case '*': /* user */ { struct display *nd; struct acluser *u; if (!n) u = user; else { for (u = users; u; u = u->u_next) { debug3("strncmp('%s', '%s', %d)\n", *args, u->u_name, n); if (!strncmp(*args, u->u_name, n)) break; } if (!u) { args[0][n] = '\0'; OutputMsg(0, "Did not find any user matching '%s'", args[0]); break; } } debug1("at all displays of user %s\n", u->u_name); for (display = displays; display; display = nd) { nd = display->d_next; if (D_forecv == 0) continue; flayer = D_forecv->c_layer; fore = D_fore; if (D_user != u) continue; debug1("AT display %s\n", D_usertty); DoCommand(args + 1, argl + 1); if (display) OutputMsg(0, "command from %s: %s %s", s, args[1], args[2] ? args[2] : ""); display = NULL; flayer = 0; fore = NULL; } break; } case '%': /* display */ { struct display *nd; debug1("at display matching '%s'\n", args[0]); for (display = displays; display; display = nd) { nd = display->d_next; if (D_forecv == 0) continue; fore = D_fore; flayer = D_forecv->c_layer; if (strncmp(args[0], D_usertty, n) && (strncmp("/dev/", D_usertty, 5) || strncmp(args[0], D_usertty + 5, n)) && (strncmp("/dev/tty", D_usertty, 8) || strncmp(args[0], D_usertty + 8, n))) continue; debug1("AT display %s\n", D_usertty); DoCommand(args + 1, argl + 1); if (display) OutputMsg(0, "command from %s: %s %s", s, args[1], args[2] ? args[2] : ""); display = NULL; fore = NULL; flayer = 0; } break; } case '#': /* window */ n--; /* FALLTHROUGH */ default: { struct win *nw; int ch; n++; ch = args[0][n]; args[0][n] = '\0'; if (!*args[0] || (i = WindowByNumber(args[0])) < 0) { args[0][n] = ch; /* must restore string in case of bind */ /* try looping over titles */ for (fore = windows; fore; fore = nw) { nw = fore->w_next; if (strncmp(args[0], fore->w_title, n)) continue; debug2("AT window %d(%s)\n", fore->w_number, fore->w_title); /* * consider this a bug or a feature: * while looping through windows, we have fore AND * display context. This will confuse users who try to * set up loops inside of loops, but often allows to do * what you mean, even when you adress your context wrong. */ i = 0; /* XXX: other displays? */ if (fore->w_layer.l_cvlist) display = fore->w_layer.l_cvlist->c_display; flayer = fore->w_savelayer ? fore->w_savelayer : &fore->w_layer; DoCommand(args + 1, argl + 1); /* may destroy our display */ if (fore && fore->w_layer.l_cvlist) { display = fore->w_layer.l_cvlist->c_display; OutputMsg(0, "command from %s: %s %s", s, args[1], args[2] ? args[2] : ""); } } display = NULL; fore = NULL; if (i < 0) OutputMsg(0, "%s: at '%s': no such window.\n", rc_name, args[0]); break; } else if (i < maxwin && (fore = wtab[i])) { args[0][n] = ch; /* must restore string in case of bind */ debug2("AT window %d (%s)\n", fore->w_number, fore->w_title); if (fore->w_layer.l_cvlist) display = fore->w_layer.l_cvlist->c_display; flayer = fore->w_savelayer ? fore->w_savelayer : &fore->w_layer; DoCommand(args + 1, argl + 1); if (fore && fore->w_layer.l_cvlist) { display = fore->w_layer.l_cvlist->c_display; OutputMsg(0, "command from %s: %s %s", s, args[1], args[2] ? args[2] : ""); } display = NULL; fore = NULL; } else OutputMsg(0, "%s: at [identifier][%%|*|#] command [args]", rc_name); break; } } free(s); #ifdef MULTIUSER EffectiveAclUser = NULL; #endif break; #ifdef COPY_PASTE case RC_READREG: #ifdef ENCODINGS i = fore ? fore->w_encoding : display ? display->d_encoding : 0; if (args[0] && args[1] && !strcmp(args[0], "-e")) { i = FindEncoding(args[1]); if (i == -1) { OutputMsg(0, "%s: readreg: unknown encoding", rc_name); break; } args += 2; } #endif /* * Without arguments we prompt for a destination register. * It will receive the copybuffer contents. * This is not done by RC_PASTE, as we prompt for source * (not dest) there. */ if ((s = *args) == NULL) { Input("Copy to register:", 1, INP_RAW, copy_reg_fn, NULL, 0); break; } if (*argl != 1) { OutputMsg(0, "%s: copyreg: character, ^x, or (octal) \\032 expected.", rc_name); break; } ch = args[0][0]; /* * With two arguments we *really* read register contents from file */ if (args[1]) { if (args[2]) { OutputMsg(0, "%s: readreg: too many arguments", rc_name); break; } if ((s = ReadFile(args[1], &n))) { struct plop *pp = plop_tab + (int)(unsigned char)ch; if (pp->buf) free(pp->buf); pp->buf = s; pp->len = n; #ifdef ENCODINGS pp->enc = i; #endif } } else /* * with one argument we copy the copybuffer into a specified register * This could be done with RC_PASTE too, but is here to be consistent * with the zero argument call. */ copy_reg_fn(&ch, 0, NULL); break; #endif case RC_REGISTER: #ifdef ENCODINGS i = fore ? fore->w_encoding : display ? display->d_encoding : 0; if (args[0] && args[1] && !strcmp(args[0], "-e")) { i = FindEncoding(args[1]); if (i == -1) { OutputMsg(0, "%s: register: unknown encoding", rc_name); break; } args += 2; argc -= 2; } #endif if (argc != 2) { OutputMsg(0, "%s: register: illegal number of arguments.", rc_name); break; } if (*argl != 1) { OutputMsg(0, "%s: register: character, ^x, or (octal) \\032 expected.", rc_name); break; } ch = args[0][0]; #ifdef COPY_PASTE if (ch == '.') { if (user->u_plop.buf != NULL) UserFreeCopyBuffer(user); if (args[1] && args[1][0]) { user->u_plop.buf = SaveStrn(args[1], argl[1]); user->u_plop.len = argl[1]; #ifdef ENCODINGS user->u_plop.enc = i; #endif } } else #endif { struct plop *plp = plop_tab + (int)(unsigned char)ch; if (plp->buf) free(plp->buf); plp->buf = SaveStrn(args[1], argl[1]); plp->len = argl[1]; #ifdef ENCODINGS plp->enc = i; #endif } break; case RC_PROCESS: if ((s = *args) == NULL) { Input("Process register:", 1, INP_RAW, process_fn, NULL, 0); break; } if (*argl != 1) { OutputMsg(0, "%s: process: character, ^x, or (octal) \\032 expected.", rc_name); break; } ch = args[0][0]; process_fn(&ch, 0, NULL); break; case RC_STUFF: s = *args; if (!args[0]) { Input("Stuff:", 100, INP_COOKED, StuffFin, NULL, 0); break; } n = *argl; if (args[1]) { if (strcmp(s, "-k")) { OutputMsg(0, "%s: stuff: invalid option %s", rc_name, s); break; } s = args[1]; for (i = T_CAPS; i < T_OCAPS; i++) if (strcmp(term[i].tcname, s) == 0) break; if (i == T_OCAPS) { OutputMsg(0, "%s: stuff: unknown key '%s'", rc_name, s); break; } #ifdef MAPKEYS if (StuffKey(i - T_CAPS) == 0) break; #endif s = display ? D_tcs[i].str : 0; if (s == 0) break; n = strlen(s); } while(n) LayProcess(&s, &n); break; case RC_REDISPLAY: Activate(-1); break; case RC_WINDOWS: if (args[0]) { ShowWindowsX(args[0]); break; } ShowWindows(-1); break; case RC_VERSION: OutputMsg(0, "screen %s", version); break; case RC_TIME: if (*args) { timestring = SaveStr(*args); break; } OutputMsg(0, "%s", MakeWinMsg(timestring, fore, '%')); break; case RC_INFO: ShowInfo(); break; case RC_DINFO: ShowDInfo(); break; case RC_COMMAND: { struct action *ktabp = ktab; if (argc == 2 && !strcmp(*args, "-c")) { if ((ktabp = FindKtab(args[1], 0)) == 0) { OutputMsg(0, "Unknown command class '%s'", args[1]); break; } } if (D_ESCseen != ktab || ktabp != ktab) { if (D_ESCseen != ktabp) { D_ESCseen = ktabp; WindowChanged(fore, 'E'); } break; } if (D_ESCseen) { D_ESCseen = 0; WindowChanged(fore, 'E'); } } /* FALLTHROUGH */ case RC_OTHER: if (MoreWindows()) SwitchWindow(display && D_other ? D_other->w_number : NextWindow()); break; case RC_META: if (user->u_Esc == -1) break; ch = user->u_Esc; s = &ch; n = 1; LayProcess(&s, &n); break; case RC_XON: ch = Ctrl('q'); s = &ch; n = 1; LayProcess(&s, &n); break; case RC_XOFF: ch = Ctrl('s'); s = &ch; n = 1; LayProcess(&s, &n); break; case RC_DEFBREAKTYPE: case RC_BREAKTYPE: { static char *types[] = { "TIOCSBRK", "TCSBRK", "tcsendbreak", NULL }; extern int breaktype; if (*args) { if (ParseNum(act, &n)) for (n = 0; n < (int)(sizeof(types)/sizeof(*types)); n++) { for (i = 0; i < 4; i++) { ch = args[0][i]; if (ch >= 'a' && ch <= 'z') ch -= 'a' - 'A'; if (ch != types[n][i] && (ch + ('a' - 'A')) != types[n][i]) break; } if (i == 4) break; } if (n < 0 || n >= (int)(sizeof(types)/sizeof(*types))) OutputMsg(0, "%s invalid, chose one of %s, %s or %s", *args, types[0], types[1], types[2]); else { breaktype = n; OutputMsg(0, "breaktype set to (%d) %s", n, types[n]); } } else OutputMsg(0, "breaktype is (%d) %s", breaktype, types[breaktype]); } break; case RC_POW_BREAK: case RC_BREAK: n = 0; if (*args && ParseNum(act, &n)) break; SendBreak(fore, n, nr == RC_POW_BREAK); break; #ifdef LOCK case RC_LOCKSCREEN: Detach(D_LOCK); break; #endif case RC_WIDTH: case RC_HEIGHT: { int w, h; int what = 0; i = 1; if (*args && !strcmp(*args, "-w")) what = 1; else if (*args && !strcmp(*args, "-d")) what = 2; if (what) args++; if (what == 0 && flayer && !display) what = 1; if (what == 1) { if (!flayer) { OutputMsg(0, "%s: %s: window required", rc_name, comms[nr].name); break; } w = flayer->l_width; h = flayer->l_height; } else { if (!display) { OutputMsg(0, "%s: %s: display required", rc_name, comms[nr].name); break; } w = D_width; h = D_height; } if (*args && args[0][0] == '-') { OutputMsg(0, "%s: %s: unknown option %s", rc_name, comms[nr].name, *args); break; } if (nr == RC_HEIGHT) { if (!*args) { #define H0height 42 #define H1height 24 if (h == H0height) h = H1height; else if (h == H1height) h = H0height; else if (h > (H0height + H1height) / 2) h = H0height; else h = H1height; } else { h = atoi(*args); if (args[1]) w = atoi(args[1]); } } else { if (!*args) { if (w == Z0width) w = Z1width; else if (w == Z1width) w = Z0width; else if (w > (Z0width + Z1width) / 2) w = Z0width; else w = Z1width; } else { w = atoi(*args); if (args[1]) h = atoi(args[1]); } } if (*args && args[1] && args[2]) { OutputMsg(0, "%s: %s: too many arguments", rc_name, comms[nr].name); break; } if (w <= 0) { OutputMsg(0, "Illegal width"); break; } if (h <= 0) { OutputMsg(0, "Illegal height"); break; } if (what == 1) { if (flayer->l_width == w && flayer->l_height == h) break; ResizeLayer(flayer, w, h, (struct display *)0); break; } if (D_width == w && D_height == h) break; if (what == 2) { ChangeScreenSize(w, h, 1); } else { if (ResizeDisplay(w, h) == 0) { Activate(D_fore ? D_fore->w_norefresh : 0); /* autofit */ ResizeLayer(D_forecv->c_layer, D_forecv->c_xe - D_forecv->c_xs + 1, D_forecv->c_ye - D_forecv->c_ys + 1, 0); break; } if (h == D_height) OutputMsg(0, "Your termcap does not specify how to change the terminal's width to %d.", w); else if (w == D_width) OutputMsg(0, "Your termcap does not specify how to change the terminal's height to %d.", h); else OutputMsg(0, "Your termcap does not specify how to change the terminal's resolution to %dx%d.", w, h); } } break; case RC_DEFDYNAMICTITLE: (void)ParseOnOff(act, &nwin_default.dynamicaka); break; case RC_DYNAMICTITLE: (void)ParseOnOff(act, &fore->w_dynamicaka); break; case RC_TITLE: if (queryflag >= 0) { if (fore) OutputMsg(0, "%s", fore->w_title); else queryflag = -1; break; } if (*args == 0) InputAKA(); else ChangeAKA(fore, *args, strlen(*args)); break; case RC_COLON: Input(":", MAXSTR, INP_EVERY, Colonfin, NULL, 0); if (*args && **args) { s = *args; n = strlen(s); LayProcess(&s, &n); } break; case RC_LASTMSG: if (D_status_lastmsg) OutputMsg(0, "%s", D_status_lastmsg); break; case RC_SCREEN: DoScreen("key", args); break; case RC_WRAP: if (ParseSwitch(act, &fore->w_wrap) == 0 && msgok) OutputMsg(0, "%cwrap", fore->w_wrap ? '+' : '-'); break; case RC_FLOW: if (*args) { if (args[0][0] == 'a') { fore->w_flow = (fore->w_flow & FLOW_AUTO) ? FLOW_AUTOFLAG |FLOW_AUTO|FLOW_NOW : FLOW_AUTOFLAG; } else { if (ParseOnOff(act, &n)) break; fore->w_flow = (fore->w_flow & FLOW_AUTO) | n; } } else { if (fore->w_flow & FLOW_AUTOFLAG) fore->w_flow = (fore->w_flow & FLOW_AUTO) | FLOW_NOW; else if (fore->w_flow & FLOW_NOW) fore->w_flow &= ~FLOW_NOW; else fore->w_flow = fore->w_flow ? FLOW_AUTOFLAG|FLOW_AUTO|FLOW_NOW : FLOW_AUTOFLAG; } SetFlow(fore->w_flow & FLOW_NOW); if (msgok) OutputMsg(0, "%cflow%s", (fore->w_flow & FLOW_NOW) ? '+' : '-', (fore->w_flow & FLOW_AUTOFLAG) ? "(auto)" : ""); break; #ifdef MULTIUSER case RC_DEFWRITELOCK: if (args[0][0] == 'a') nwin_default.wlock = WLOCK_AUTO; else { if (ParseOnOff(act, &n)) break; nwin_default.wlock = n ? WLOCK_ON : WLOCK_OFF; } break; case RC_WRITELOCK: if (*args) { if (args[0][0] == 'a') { fore->w_wlock = WLOCK_AUTO; } else { if (ParseOnOff(act, &n)) break; fore->w_wlock = n ? WLOCK_ON : WLOCK_OFF; } /* * user may have permission to change the writelock setting, * but he may never aquire the lock himself without write permission */ if (!AclCheckPermWin(D_user, ACL_WRITE, fore)) fore->w_wlockuser = D_user; } OutputMsg(0, "writelock %s", (fore->w_wlock == WLOCK_AUTO) ? "auto" : ((fore->w_wlock == WLOCK_OFF) ? "off" : "on")); break; #endif case RC_CLEAR: ResetAnsiState(fore); WriteString(fore, "\033[H\033[J", 6); break; case RC_RESET: ResetAnsiState(fore); #ifdef ZMODEM if (fore->w_zdisplay) zmodem_abort(fore, fore->w_zdisplay); #endif WriteString(fore, "\033c", 2); break; case RC_MONITOR: n = fore->w_monitor != MON_OFF; #ifdef MULTIUSER if (display) n = n && (ACLBYTE(fore->w_mon_notify, D_user->u_id) & ACLBIT(D_user->u_id)); #endif if (ParseSwitch(act, &n)) break; if (n) { #ifdef MULTIUSER if (display) /* we tell only this user */ ACLBYTE(fore->w_mon_notify, D_user->u_id) |= ACLBIT(D_user->u_id); else for (i = 0; i < maxusercount; i++) ACLBYTE(fore->w_mon_notify, i) |= ACLBIT(i); #endif if (fore->w_monitor == MON_OFF) fore->w_monitor = MON_ON; OutputMsg(0, "Window %d (%s) is now being monitored for all activity.", fore->w_number, fore->w_title); } else { #ifdef MULTIUSER if (display) /* we remove only this user */ ACLBYTE(fore->w_mon_notify, D_user->u_id) &= ~ACLBIT(D_user->u_id); else for (i = 0; i < maxusercount; i++) ACLBYTE(fore->w_mon_notify, i) &= ~ACLBIT(i); for (i = maxusercount - 1; i >= 0; i--) if (ACLBYTE(fore->w_mon_notify, i)) break; if (i < 0) #endif fore->w_monitor = MON_OFF; OutputMsg(0, "Window %d (%s) is no longer being monitored for activity.", fore->w_number, fore->w_title); } break; #ifdef MULTI case RC_DISPLAYS: display_displays(); break; #endif case RC_WINDOWLIST: if (!*args) display_windows(0, WLIST_NUM, (struct win *)0); else if (!strcmp(*args, "string")) { if (args[1]) { if (wliststr) free(wliststr); wliststr = SaveStr(args[1]); } if (msgok) OutputMsg(0, "windowlist string is '%s'", wliststr); } else if (!strcmp(*args, "title")) { if (args[1]) { if (wlisttit) free(wlisttit); wlisttit = SaveStr(args[1]); } if (msgok) OutputMsg(0, "windowlist title is '%s'", wlisttit); } else { int flag = 0; int blank = 0; for (i = 0; i < argc; i++) if (!args[i]) continue; else if (!strcmp(args[i], "-m")) flag |= WLIST_MRU; else if (!strcmp(args[i], "-b")) blank = 1; else if (!strcmp(args[i], "-g")) flag |= WLIST_NESTED; else { OutputMsg(0, "usage: windowlist [-b] [-g] [-m] [string [string] | title [title]]"); break; } if (i == argc) display_windows(blank, flag, (struct win *)0); } break; case RC_HELP: if (argc == 2 && !strcmp(*args, "-c")) { struct action *ktabp; if ((ktabp = FindKtab(args[1], 0)) == 0) { OutputMsg(0, "Unknown command class '%s'", args[1]); break; } display_help(args[1], ktabp); } else display_help((char *)0, ktab); break; case RC_LICENSE: display_copyright(); break; #ifdef COPY_PASTE case RC_COPY: if (flayer->l_layfn != &WinLf) { OutputMsg(0, "Must be on a window layer"); break; } MarkRoutine(); WindowChanged(fore, 'P'); break; case RC_HISTORY: { static char *pasteargs[] = {".", 0}; static int pasteargl[] = {1}; if (flayer->l_layfn != &WinLf) { OutputMsg(0, "Must be on a window layer"); break; } if (GetHistory() == 0) break; if (user->u_plop.buf == NULL) break; args = pasteargs; argl = pasteargl; } /*FALLTHROUGH*/ case RC_PASTE: { char *ss, *dbuf, dch; int l = 0; # ifdef ENCODINGS int enc = -1; # endif /* * without args we prompt for one(!) register to be pasted in the window */ if ((s = *args) == NULL) { Input("Paste from register:", 1, INP_RAW, ins_reg_fn, NULL, 0); break; } if (args[1] == 0 && !fore) /* no window? */ break; /* * with two arguments we paste into a destination register * (no window needed here). */ if (args[1] && argl[1] != 1) { OutputMsg(0, "%s: paste destination: character, ^x, or (octal) \\032 expected.", rc_name); break; } # ifdef ENCODINGS else if (fore) enc = fore->w_encoding; # endif /* * measure length of needed buffer */ for (ss = s = *args; (ch = *ss); ss++) { if (ch == '.') { # ifdef ENCODINGS if (enc == -1) enc = user->u_plop.enc; if (enc != user->u_plop.enc) l += RecodeBuf((unsigned char *)user->u_plop.buf, user->u_plop.len, user->u_plop.enc, enc, (unsigned char *)0); else # endif l += user->u_plop.len; } else { # ifdef ENCODINGS if (enc == -1) enc = plop_tab[(int)(unsigned char)ch].enc; if (enc != plop_tab[(int)(unsigned char)ch].enc) l += RecodeBuf((unsigned char *)plop_tab[(int)(unsigned char)ch].buf, plop_tab[(int)(unsigned char)ch].len, plop_tab[(int)(unsigned char)ch].enc, enc, (unsigned char *)0); else # endif l += plop_tab[(int)(unsigned char)ch].len; } } if (l == 0) { OutputMsg(0, "empty buffer"); break; } /* * shortcut: * if there is only one source and the destination is a window, then * pass a pointer rather than duplicating the buffer. */ if (s[1] == 0 && args[1] == 0) # ifdef ENCODINGS if (enc == (*s == '.' ? user->u_plop.enc : plop_tab[(int)(unsigned char)*s].enc)) # endif { MakePaster(&fore->w_paster, *s == '.' ? user->u_plop.buf : plop_tab[(int)(unsigned char)*s].buf, l, 0); break; } /* * if no shortcut, we construct a buffer */ if ((dbuf = (char *)malloc(l)) == 0) { OutputMsg(0, "%s", strnomem); break; } l = 0; /* * concatenate all sources into our own buffer, copy buffer is * special and is skipped if no display exists. */ for (ss = s; (ch = *ss); ss++) { struct plop *pp = (ch == '.' ? &user->u_plop : &plop_tab[(int)(unsigned char)ch]); #ifdef ENCODINGS if (pp->enc != enc) { l += RecodeBuf((unsigned char *)pp->buf, pp->len, pp->enc, enc, (unsigned char *)dbuf + l); continue; } #endif bcopy(pp->buf, dbuf + l, pp->len); l += pp->len; } /* * when called with one argument we paste our buffer into the window */ if (args[1] == 0) { MakePaster(&fore->w_paster, dbuf, l, 1); } else { /* * we have two arguments, the second is already in dch. * use this as destination rather than the window. */ dch = args[1][0]; if (dch == '.') { if (user->u_plop.buf != NULL) UserFreeCopyBuffer(user); user->u_plop.buf = dbuf; user->u_plop.len = l; #ifdef ENCODINGS user->u_plop.enc = enc; #endif } else { struct plop *pp = plop_tab + (int)(unsigned char)dch; if (pp->buf) free(pp->buf); pp->buf = dbuf; pp->len = l; #ifdef ENCODINGS pp->enc = enc; #endif } } break; } case RC_WRITEBUF: if (!user->u_plop.buf) { OutputMsg(0, "empty buffer"); break; } #ifdef ENCODINGS { struct plop oldplop; oldplop = user->u_plop; if (args[0] && args[1] && !strcmp(args[0], "-e")) { int enc, l; char *newbuf; enc = FindEncoding(args[1]); if (enc == -1) { OutputMsg(0, "%s: writebuf: unknown encoding", rc_name); break; } if (enc != oldplop.enc) { l = RecodeBuf((unsigned char *)oldplop.buf, oldplop.len, oldplop.enc, enc, (unsigned char *)0); newbuf = malloc(l + 1); if (!newbuf) { OutputMsg(0, "%s", strnomem); break; } user->u_plop.len = RecodeBuf((unsigned char *)oldplop.buf, oldplop.len, oldplop.enc, enc, (unsigned char *)newbuf); user->u_plop.buf = newbuf; user->u_plop.enc = enc; } args += 2; } #endif if (args[0] && args[1]) OutputMsg(0, "%s: writebuf: too many arguments", rc_name); else WriteFile(user, args[0], DUMP_EXCHANGE); #ifdef ENCODINGS if (user->u_plop.buf != oldplop.buf) free(user->u_plop.buf); user->u_plop = oldplop; } #endif break; case RC_READBUF: #ifdef ENCODINGS i = fore ? fore->w_encoding : display ? display->d_encoding : 0; if (args[0] && args[1] && !strcmp(args[0], "-e")) { i = FindEncoding(args[1]); if (i == -1) { OutputMsg(0, "%s: readbuf: unknown encoding", rc_name); break; } args += 2; } #endif if (args[0] && args[1]) { OutputMsg(0, "%s: readbuf: too many arguments", rc_name); break; } if ((s = ReadFile(args[0] ? args[0] : BufferFile, &n))) { if (user->u_plop.buf) UserFreeCopyBuffer(user); user->u_plop.len = n; user->u_plop.buf = s; #ifdef ENCODINGS user->u_plop.enc = i; #endif } break; case RC_REMOVEBUF: KillBuffers(); break; case RC_IGNORECASE: (void)ParseSwitch(act, &search_ic); if (msgok) OutputMsg(0, "Will %signore case in searches", search_ic ? "" : "not "); break; #endif /* COPY_PASTE */ case RC_ESCAPE: if (*argl == 0) SetEscape(user, -1, -1); else if (*argl == 2) SetEscape(user, (int)(unsigned char)args[0][0], (int)(unsigned char)args[0][1]); else { OutputMsg(0, "%s: two characters required after escape.", rc_name); break; } /* Change defescape if master user. This is because we only * have one ktab. */ if (display && user != users) break; /* FALLTHROUGH */ case RC_DEFESCAPE: if (*argl == 0) SetEscape(NULL, -1, -1); else if (*argl == 2) SetEscape(NULL, (int)(unsigned char)args[0][0], (int)(unsigned char)args[0][1]); else { OutputMsg(0, "%s: two characters required after defescape.", rc_name); break; } #ifdef MAPKEYS CheckEscape(); #endif break; case RC_CHDIR: s = *args ? *args : home; if (chdir(s) == -1) OutputMsg(errno, "%s", s); break; case RC_SHELL: case RC_DEFSHELL: if (ParseSaveStr(act, &ShellProg) == 0) ShellArgs[0] = ShellProg; break; case RC_HARDCOPYDIR: if (*args) (void)ParseSaveStr(act, &hardcopydir); if (msgok) OutputMsg(0, "hardcopydir is %s\n", hardcopydir && *hardcopydir ? hardcopydir : ""); break; case RC_LOGFILE: if (*args) { char buf[1024]; if (args[1] && !(strcmp(*args, "flush"))) { log_flush = atoi(args[1]); if (msgok) OutputMsg(0, "log flush timeout set to %ds\n", log_flush); break; } if (ParseSaveStr(act, &screenlogfile)) break; if (fore && fore->w_log) if (DoStartLog(fore, buf, sizeof(buf))) OutputMsg(0, "Error opening logfile \"%s\"", buf); if (!msgok) break; } OutputMsg(0, "logfile is '%s'", screenlogfile); break; case RC_LOGTSTAMP: if (!*args || !strcmp(*args, "on") || !strcmp(*args, "off")) { if (ParseSwitch(act, &logtstamp_on) == 0 && msgok) OutputMsg(0, "timestamps turned %s", logtstamp_on ? "on" : "off"); } else if (!strcmp(*args, "string")) { if (args[1]) { if (logtstamp_string) free(logtstamp_string); logtstamp_string = SaveStr(args[1]); } if (msgok) OutputMsg(0, "logfile timestamp is '%s'", logtstamp_string); } else if (!strcmp(*args, "after")) { if (args[1]) { logtstamp_after = atoi(args[1]); if (!msgok) break; } OutputMsg(0, "timestamp printed after %ds\n", logtstamp_after); } else OutputMsg(0, "usage: logtstamp [after [n]|string [str]|on|off]"); break; case RC_SHELLTITLE: (void)ParseSaveStr(act, &nwin_default.aka); break; case RC_TERMCAP: case RC_TERMCAPINFO: case RC_TERMINFO: if (!rc_name || !*rc_name) OutputMsg(0, "Sorry, too late now. Place that in your .screenrc file."); break; case RC_SLEEP: break; /* Already handled */ case RC_TERM: s = NULL; if (ParseSaveStr(act, &s)) break; if (strlen(s) > MAXTERMLEN) { OutputMsg(0, "%s: term: argument too long ( < %d)", rc_name, MAXTERMLEN); free(s); break; } strncpy(screenterm, s, MAXTERMLEN); screenterm[MAXTERMLEN] = '\0'; free(s); debug1("screenterm set to %s\n", screenterm); MakeTermcap((display == 0)); debug("new termcap made\n"); break; case RC_ECHO: if (!msgok && (!rc_name || strcmp(rc_name, "-X"))) break; /* * user typed ^A:echo... well, echo isn't FinishRc's job, * but as he wanted to test us, we show good will */ if (argc > 1 && !strcmp(*args, "-n")) { args++; argc--; } s = *args; if (argc > 1 && !strcmp(*args, "-p")) { args++; argc--; s = *args; if (s) s = MakeWinMsg(s, fore, '%'); } if (s) OutputMsg(0, "%s", s); else { OutputMsg(0, "%s: 'echo [-n] [-p] \"string\"' expected.", rc_name); queryflag = -1; } break; case RC_BELL: case RC_BELL_MSG: if (*args == 0) { char buf[256]; AddXChars(buf, sizeof(buf), BellString); OutputMsg(0, "bell_msg is '%s'", buf); break; } (void)ParseSaveStr(act, &BellString); break; #ifdef COPY_PASTE case RC_BUFFERFILE: if (*args == 0) BufferFile = SaveStr(DEFAULT_BUFFERFILE); else if (ParseSaveStr(act, &BufferFile)) break; if (msgok) OutputMsg(0, "Bufferfile is now '%s'", BufferFile); break; #endif case RC_ACTIVITY: (void)ParseSaveStr(act, &ActivityString); break; #if defined(DETACH) && defined(POW_DETACH) case RC_POW_DETACH_MSG: if (*args == 0) { char buf[256]; AddXChars(buf, sizeof(buf), PowDetachString); OutputMsg(0, "pow_detach_msg is '%s'", buf); break; } (void)ParseSaveStr(act, &PowDetachString); break; #endif #if defined(UTMPOK) && defined(LOGOUTOK) case RC_LOGIN: n = fore->w_slot != (slot_t)-1; if (*args && !strcmp(*args, "always")) { fore->w_lflag = 3; if (!displays && n) SlotToggle(n); break; } if (*args && !strcmp(*args, "attached")) { fore->w_lflag = 1; if (!displays && n) SlotToggle(0); break; } if (ParseSwitch(act, &n) == 0) SlotToggle(n); break; case RC_DEFLOGIN: if (!strcmp(*args, "always")) nwin_default.lflag |= 2; else if (!strcmp(*args, "attached")) nwin_default.lflag &= ~2; else (void)ParseOnOff(act, &nwin_default.lflag); break; #endif case RC_DEFFLOW: if (args[0] && args[1] && args[1][0] == 'i') { iflag = 1; for (display = displays; display; display = display->d_next) { if (!D_flow) continue; #if defined(TERMIO) || defined(POSIX) D_NewMode.tio.c_cc[VINTR] = D_OldMode.tio.c_cc[VINTR]; D_NewMode.tio.c_lflag |= ISIG; #else /* TERMIO || POSIX */ D_NewMode.m_tchars.t_intrc = D_OldMode.m_tchars.t_intrc; #endif /* TERMIO || POSIX */ SetTTY(D_userfd, &D_NewMode); } } if (args[0] && args[0][0] == 'a') nwin_default.flowflag = FLOW_AUTOFLAG; else (void)ParseOnOff(act, &nwin_default.flowflag); break; case RC_DEFWRAP: (void)ParseOnOff(act, &nwin_default.wrap); break; case RC_DEFC1: (void)ParseOnOff(act, &nwin_default.c1); break; #ifdef COLOR case RC_DEFBCE: (void)ParseOnOff(act, &nwin_default.bce); break; #endif case RC_DEFGR: (void)ParseOnOff(act, &nwin_default.gr); break; case RC_DEFMONITOR: if (ParseOnOff(act, &n) == 0) nwin_default.monitor = (n == 0) ? MON_OFF : MON_ON; break; case RC_DEFMOUSETRACK: if (ParseOnOff(act, &n) == 0) defmousetrack = (n == 0) ? 0 : 1000; break; case RC_MOUSETRACK: if (!args[0]) { OutputMsg(0, "Mouse tracking for this display is turned %s", D_mousetrack ? "on" : "off"); } else if (ParseOnOff(act, &n) == 0) { D_mousetrack = n == 0 ? 0 : 1000; if (D_fore) MouseMode(D_fore->w_mouse); } break; case RC_DEFSILENCE: if (ParseOnOff(act, &n) == 0) nwin_default.silence = (n == 0) ? SILENCE_OFF : SILENCE_ON; break; case RC_VERBOSE: if (!*args) OutputMsg(0, "W%s echo command when creating windows.", VerboseCreate ? "ill" : "on't"); else if (ParseOnOff(act, &n) == 0) VerboseCreate = n; break; case RC_HARDSTATUS: if (display) { OutputMsg(0, "%s", ""); /* wait till mintime (keep gcc quiet) */ RemoveStatus(); } if (args[0] && strcmp(args[0], "on") && strcmp(args[0], "off")) { struct display *olddisplay = display; int old_use, new_use = -1; s = args[0]; if (!strncmp(s, "always", 6)) s += 6; if (!strcmp(s, "firstline")) new_use = HSTATUS_FIRSTLINE; else if (!strcmp(s, "lastline")) new_use = HSTATUS_LASTLINE; else if (!strcmp(s, "ignore")) new_use = HSTATUS_IGNORE; else if (!strcmp(s, "message")) new_use = HSTATUS_MESSAGE; else if (!strcmp(args[0], "string")) { if (!args[1]) { char buf[256]; AddXChars(buf, sizeof(buf), hstatusstring); OutputMsg(0, "hardstatus string is '%s'", buf); break; } } else { OutputMsg(0, "%s: usage: hardstatus [always]lastline|ignore|message|string [string]", rc_name); break; } if (new_use != -1) { hardstatusemu = new_use | (s == args[0] ? 0 : HSTATUS_ALWAYS); for (display = displays; display; display = display->d_next) { RemoveStatus(); new_use = hardstatusemu & ~HSTATUS_ALWAYS; if (D_HS && s == args[0]) new_use = HSTATUS_HS; ShowHStatus((char *)0); old_use = D_has_hstatus; D_has_hstatus = new_use; if ((new_use == HSTATUS_LASTLINE && old_use != HSTATUS_LASTLINE) || (new_use != HSTATUS_LASTLINE && old_use == HSTATUS_LASTLINE)) ChangeScreenSize(D_width, D_height, 1); if ((new_use == HSTATUS_FIRSTLINE && old_use != HSTATUS_FIRSTLINE) || (new_use != HSTATUS_FIRSTLINE && old_use == HSTATUS_FIRSTLINE)) ChangeScreenSize(D_width, D_height, 1); RefreshHStatus(); } } if (args[1]) { if (hstatusstring) free(hstatusstring); hstatusstring = SaveStr(args[1]); for (display = displays; display; display = display->d_next) RefreshHStatus(); } display = olddisplay; break; } (void)ParseSwitch(act, &use_hardstatus); if (msgok) OutputMsg(0, "messages displayed on %s", use_hardstatus ? "hardstatus line" : "window"); break; case RC_CAPTION: if (strcmp(args[0], "always") == 0 || strcmp(args[0], "splitonly") == 0) { struct display *olddisplay = display; captionalways = args[0][0] == 'a'; for (display = displays; display; display = display->d_next) ChangeScreenSize(D_width, D_height, 1); display = olddisplay; } else if (strcmp(args[0], "string") == 0) { if (!args[1]) { char buf[256]; AddXChars(buf, sizeof(buf), captionstring); OutputMsg(0, "caption string is '%s'", buf); break; } } else { OutputMsg(0, "%s: usage: caption always|splitonly|string ", rc_name); break; } if (!args[1]) break; if (captionstring) free(captionstring); captionstring = SaveStr(args[1]); RedisplayDisplays(0); break; case RC_CONSOLE: n = (console_window != 0); if (ParseSwitch(act, &n)) break; if (TtyGrabConsole(fore->w_ptyfd, n, rc_name)) break; if (n == 0) OutputMsg(0, "%s: releasing console %s", rc_name, HostName); else if (console_window) OutputMsg(0, "%s: stealing console %s from window %d (%s)", rc_name, HostName, console_window->w_number, console_window->w_title); else OutputMsg(0, "%s: grabbing console %s", rc_name, HostName); console_window = n ? fore : 0; break; case RC_ALLPARTIAL: if (ParseOnOff(act, &all_norefresh)) break; if (!all_norefresh && fore) Activate(-1); if (msgok) OutputMsg(0, all_norefresh ? "No refresh on window change!\n" : "Window specific refresh\n"); break; case RC_PARTIAL: (void)ParseSwitch(act, &n); fore->w_norefresh = n; break; case RC_VBELL: if (ParseSwitch(act, &visual_bell) || !msgok) break; if (visual_bell == 0) OutputMsg(0, "switched to audible bell."); else OutputMsg(0, "switched to visual bell."); break; case RC_VBELLWAIT: if (ParseNum1000(act, &VBellWait) == 0 && msgok) OutputMsg(0, "vbellwait set to %.10g seconds", VBellWait/1000.); break; case RC_MSGWAIT: if (ParseNum1000(act, &MsgWait) == 0 && msgok) OutputMsg(0, "msgwait set to %.10g seconds", MsgWait/1000.); break; case RC_MSGMINWAIT: if (ParseNum1000(act, &MsgMinWait) == 0 && msgok) OutputMsg(0, "msgminwait set to %.10g seconds", MsgMinWait/1000.); break; case RC_SILENCEWAIT: if (ParseNum(act, &SilenceWait)) break; if (SilenceWait < 1) SilenceWait = 1; for (p = windows; p; p = p->w_next) p->w_silencewait = SilenceWait; if (msgok) OutputMsg(0, "silencewait set to %d seconds", SilenceWait); break; case RC_BUMPRIGHT: if (fore->w_number < NextWindow()) WindowChangeNumber(fore->w_number, NextWindow()); break; case RC_BUMPLEFT: if (fore->w_number > PreviousWindow()) WindowChangeNumber(fore->w_number, PreviousWindow()); break; case RC_COLLAPSE: CollapseWindowlist(); break; case RC_NUMBER: if (*args == 0) OutputMsg(0, queryflag >= 0 ? "%d (%s)" : "This is window %d (%s).", fore->w_number, fore->w_title); else { int old = fore->w_number; int rel = 0, parse; if (args[0][0] == '+') rel = 1; else if (args[0][0] == '-') rel = -1; if (rel) ++act->args[0]; parse = ParseNum(act, &n); if (rel) --act->args[0]; if (parse) break; if (rel > 0) n += old; else if (rel < 0) n = old - n; if (!WindowChangeNumber(old, n)) { /* Window number could not be changed. */ queryflag = -1; return; } } break; case RC_ZOMBIE_TIMEOUT: if (argc != 1) { Msg(0, "Setting zombie polling needs a timeout arg\n"); break; } nwin_default.poll_zombie_timeout = atoi(args[0]); if (fore) fore->w_poll_zombie_timeout = nwin_default.poll_zombie_timeout; debug1("Setting zombie polling to %d\n", nwin_default.poll_zombie_timeout); break; case RC_SORT: if (fore) { /* Better do not allow this. Not sure what the utmp stuff in number * command above is for (you get four entries in e.g. /var/log/wtmp * per number switch). But I don't know enough about this. */ Msg(0, "Sorting inside a window is not allowed. Push CTRL-a \" " "and try again\n"); break; } /* * Simple sort algorithm: Look out for the smallest, put it * to the first place, look out for the 2nd smallest, ... */ for (i = 0; i < maxwin ; i++) { if (wtab[i] == NULL) continue; n = i; for (nr = i + 1; nr < maxwin; nr++) { if (wtab[nr] == NULL) continue; debug2("Testing window %d and %d.\n", nr, n); if (strcmp(wtab[nr]->w_title,wtab[n]->w_title) < 0) n = nr; } if (n != i) { debug2("Exchange window %d and %d.\n", i, n); p = wtab[n]; wtab[n] = wtab[i]; wtab[i] = p; wtab[n]->w_number = n; wtab[i]->w_number = i; #ifdef MULTIUSER /* exchange the acls for these windows. */ AclWinSwap(i, n); #endif } } WindowChanged((struct win *)0, 0); break; case RC_SILENCE: n = fore->w_silence != 0; i = fore->w_silencewait; if (args[0] && (args[0][0] == '-' || (args[0][0] >= '0' && args[0][0] <= '9'))) { if (ParseNum(act, &i)) break; n = i > 0; } else if (ParseSwitch(act, &n)) break; if (n) { #ifdef MULTIUSER if (display) /* we tell only this user */ ACLBYTE(fore->w_lio_notify, D_user->u_id) |= ACLBIT(D_user->u_id); else for (n = 0; n < maxusercount; n++) ACLBYTE(fore->w_lio_notify, n) |= ACLBIT(n); #endif fore->w_silencewait = i; fore->w_silence = SILENCE_ON; SetTimeout(&fore->w_silenceev, fore->w_silencewait * 1000); evenq(&fore->w_silenceev); if (!msgok) break; OutputMsg(0, "The window is now being monitored for %d sec. silence.", fore->w_silencewait); } else { #ifdef MULTIUSER if (display) /* we remove only this user */ ACLBYTE(fore->w_lio_notify, D_user->u_id) &= ~ACLBIT(D_user->u_id); else for (n = 0; n < maxusercount; n++) ACLBYTE(fore->w_lio_notify, n) &= ~ACLBIT(n); for (i = maxusercount - 1; i >= 0; i--) if (ACLBYTE(fore->w_lio_notify, i)) break; if (i < 0) #endif { fore->w_silence = SILENCE_OFF; evdeq(&fore->w_silenceev); } if (!msgok) break; OutputMsg(0, "The window is no longer being monitored for silence."); } break; #ifdef COPY_PASTE case RC_DEFSCROLLBACK: (void)ParseNum(act, &nwin_default.histheight); break; case RC_SCROLLBACK: if (flayer->l_layfn == &MarkLf) { OutputMsg(0, "Cannot resize scrollback buffer in copy/scrollback mode."); break; } (void)ParseNum(act, &n); ChangeWindowSize(fore, fore->w_width, fore->w_height, n); if (msgok) OutputMsg(0, "scrollback set to %d", fore->w_histheight); break; #endif case RC_SESSIONNAME: if (*args == 0) OutputMsg(0, "This session is named '%s'\n", SockName); else { char buf[MAXPATHLEN]; s = 0; if (ParseSaveStr(act, &s)) break; if (!*s || strlen(s) + (SockName - SockPath) > MAXPATHLEN - 13 || index(s, '/')) { OutputMsg(0, "%s: bad session name '%s'\n", rc_name, s); free(s); break; } strncpy(buf, SockPath, SockName - SockPath); sprintf(buf + (SockName - SockPath), "%d.%s", (int)getpid(), s); free(s); if ((access(buf, F_OK) == 0) || (errno != ENOENT)) { OutputMsg(0, "%s: inappropriate path: '%s'.", rc_name, buf); break; } if (rename(SockPath, buf)) { OutputMsg(errno, "%s: failed to rename(%s, %s)", rc_name, SockPath, buf); break; } debug2("rename(%s, %s) done\n", SockPath, buf); strcpy(SockPath, buf); MakeNewEnv(); WindowChanged((struct win *)0, 'S'); } break; case RC_SETENV: if (!args[0] || !args[1]) { debug1("RC_SETENV arguments missing: %s\n", args[0] ? args[0] : ""); InputSetenv(args[0]); } else { xsetenv(args[0], args[1]); MakeNewEnv(); } break; case RC_UNSETENV: unsetenv(*args); MakeNewEnv(); break; #ifdef COPY_PASTE case RC_DEFSLOWPASTE: (void)ParseNum(act, &nwin_default.slow); break; case RC_SLOWPASTE: if (*args == 0) OutputMsg(0, fore->w_slowpaste ? "Slowpaste in window %d is %d milliseconds." : "Slowpaste in window %d is unset.", fore->w_number, fore->w_slowpaste); else if (ParseNum(act, &fore->w_slowpaste) == 0 && msgok) OutputMsg(0, fore->w_slowpaste ? "Slowpaste in window %d set to %d milliseconds." : "Slowpaste in window %d now unset.", fore->w_number, fore->w_slowpaste); break; case RC_MARKKEYS: if (CompileKeys(*args, *argl, mark_key_tab)) { OutputMsg(0, "%s: markkeys: syntax error.", rc_name); break; } debug1("markkeys %s\n", *args); break; # ifdef FONT case RC_PASTEFONT: if (ParseSwitch(act, &pastefont) == 0 && msgok) OutputMsg(0, "Will %spaste font settings", pastefont ? "" : "not "); break; # endif case RC_CRLF: (void)ParseSwitch(act, &join_with_cr); break; case RC_COMPACTHIST: if (ParseSwitch(act, &compacthist) == 0 && msgok) OutputMsg(0, "%scompacting history lines", compacthist ? "" : "not "); break; #endif #ifdef NETHACK case RC_NETHACK: (void)ParseOnOff(act, &nethackflag); break; #else case RC_NETHACK: Msg(0, "nethack disabled at build time"); break; #endif case RC_HARDCOPY_APPEND: (void)ParseOnOff(act, &hardcopy_append); break; case RC_VBELL_MSG: if (*args == 0) { char buf[256]; AddXChars(buf, sizeof(buf), VisualBellString); OutputMsg(0, "vbell_msg is '%s'", buf); break; } (void)ParseSaveStr(act, &VisualBellString); debug1(" new vbellstr '%s'\n", VisualBellString); break; case RC_DEFMODE: if (ParseBase(act, *args, &n, 8, "octal")) break; if (n < 0 || n > 0777) { OutputMsg(0, "%s: mode: Invalid tty mode %o", rc_name, n); break; } TtyMode = n; if (msgok) OutputMsg(0, "Ttymode set to %03o", TtyMode); break; case RC_AUTODETACH: (void)ParseOnOff(act, &auto_detach); break; case RC_STARTUP_MESSAGE: (void)ParseOnOff(act, &default_startup); break; #ifdef PASSWORD case RC_PASSWORD: if (*args) { n = (*user->u_password) ? 1 : 0; if (user->u_password != NullStr) free((char *)user->u_password); user->u_password = SaveStr(*args); if (!strcmp(user->u_password, "none")) { if (n) OutputMsg(0, "Password checking disabled"); free(user->u_password); user->u_password = NullStr; } } else { if (!fore) { OutputMsg(0, "%s: password: window required", rc_name); break; } Input("New screen password:", 100, INP_NOECHO, pass1, display ? (char *)D_user : (char *)users, 0); } break; #endif /* PASSWORD */ case RC_BIND: { struct action *ktabp = ktab; int kflag = 0; for (;;) { if (argc > 2 && !strcmp(*args, "-c")) { ktabp = FindKtab(args[1], 1); if (ktabp == 0) break; args += 2; argl += 2; argc -= 2; } else if (argc > 1 && !strcmp(*args, "-k")) { kflag = 1; args++; argl++; argc--; } else break; } #ifdef MAPKEYS if (kflag) { for (n = 0; n < KMAP_KEYS; n++) if (strcmp(term[n + T_CAPS].tcname, *args) == 0) break; if (n == KMAP_KEYS) { OutputMsg(0, "%s: bind: unknown key '%s'", rc_name, *args); break; } n += 256; } else #endif if (*argl != 1) { OutputMsg(0, "%s: bind: character, ^x, or (octal) \\032 expected.", rc_name); break; } else n = (unsigned char)args[0][0]; if (args[1]) { if ((i = FindCommnr(args[1])) == RC_ILLEGAL) { OutputMsg(0, "%s: bind: unknown command '%s'", rc_name, args[1]); break; } if (CheckArgNum(i, args + 2) < 0) break; ClearAction(&ktabp[n]); SaveAction(ktabp + n, i, args + 2, argl + 2); } else ClearAction(&ktabp[n]); } break; #ifdef MAPKEYS case RC_BINDKEY: { struct action *newact; int newnr, fl = 0, kf = 0, af = 0, df = 0, mf = 0; struct display *odisp = display; int used = 0; struct kmap_ext *kme = NULL; for (; *args && **args == '-'; args++, argl++) { if (strcmp(*args, "-t") == 0) fl = KMAP_NOTIMEOUT; else if (strcmp(*args, "-k") == 0) kf = 1; else if (strcmp(*args, "-a") == 0) af = 1; else if (strcmp(*args, "-d") == 0) df = 1; else if (strcmp(*args, "-m") == 0) mf = 1; else if (strcmp(*args, "--") == 0) { args++; argl++; break; } else { OutputMsg(0, "%s: bindkey: invalid option %s", rc_name, *args); return; } } if (df && mf) { OutputMsg(0, "%s: bindkey: -d does not work with -m", rc_name); break; } if (*args == 0) { if (mf) display_bindkey("Edit mode", mmtab); else if (df) display_bindkey("Default", dmtab); else display_bindkey("User", umtab); break; } if (kf == 0) { if (af) { OutputMsg(0, "%s: bindkey: -a only works with -k", rc_name); break; } if (*argl == 0) { OutputMsg(0, "%s: bindkey: empty string makes no sense", rc_name); break; } for (i = 0, kme = kmap_exts; i < kmap_extn; i++, kme++) if (kme->str == 0) { if (args[1]) break; } else if (*argl == (kme->fl & ~KMAP_NOTIMEOUT) && bcmp(kme->str, *args, *argl) == 0) break; if (i == kmap_extn) { if (!args[1]) { OutputMsg(0, "%s: bindkey: keybinding not found", rc_name); break; } kmap_extn += 8; kmap_exts = (struct kmap_ext *)xrealloc((char *)kmap_exts, kmap_extn * sizeof(*kmap_exts)); kme = kmap_exts + i; bzero((char *)kme, 8 * sizeof(*kmap_exts)); for (; i < kmap_extn; i++, kme++) { kme->str = 0; kme->dm.nr = kme->mm.nr = kme->um.nr = RC_ILLEGAL; kme->dm.args = kme->mm.args = kme->um.args = noargs; kme->dm.argl = kme->mm.argl = kme->um.argl = 0; } i -= 8; kme -= 8; } if (df == 0 && kme->dm.nr != RC_ILLEGAL) used = 1; if (mf == 0 && kme->mm.nr != RC_ILLEGAL) used = 1; if ((df || mf) && kme->um.nr != RC_ILLEGAL) used = 1; i += KMAP_KEYS + KMAP_AKEYS; newact = df ? &kme->dm : mf ? &kme->mm : &kme->um; } else { for (i = T_CAPS; i < T_OCAPS; i++) if (strcmp(term[i].tcname, *args) == 0) break; if (i == T_OCAPS) { OutputMsg(0, "%s: bindkey: unknown key '%s'", rc_name, *args); break; } if (af && i >= T_CURSOR && i < T_OCAPS) i -= T_CURSOR - KMAP_KEYS; else i -= T_CAPS; newact = df ? &dmtab[i] : mf ? &mmtab[i] : &umtab[i]; } if (args[1]) { if ((newnr = FindCommnr(args[1])) == RC_ILLEGAL) { OutputMsg(0, "%s: bindkey: unknown command '%s'", rc_name, args[1]); break; } if (CheckArgNum(newnr, args + 2) < 0) break; ClearAction(newact); SaveAction(newact, newnr, args + 2, argl + 2); if (kf == 0 && args[1]) { if (kme->str) free(kme->str); kme->str = SaveStrn(*args, *argl); kme->fl = fl | *argl; } } else ClearAction(newact); for (display = displays; display; display = display->d_next) remap(i, args[1] ? 1 : 0); if (kf == 0 && !args[1]) { if (!used && kme->str) { free(kme->str); kme->str = 0; kme->fl = 0; } } display = odisp; } break; case RC_MAPTIMEOUT: if (*args) { if (ParseNum(act, &n)) break; if (n < 0) { OutputMsg(0, "%s: maptimeout: illegal time %d", rc_name, n); break; } maptimeout = n; } if (*args == 0 || msgok) OutputMsg(0, "maptimeout is %dms", maptimeout); break; case RC_MAPNOTNEXT: D_dontmap = 1; break; case RC_MAPDEFAULT: D_mapdefault = 1; break; #endif #ifdef MULTIUSER case RC_ACLCHG: case RC_ACLADD: case RC_ADDACL: case RC_CHACL: UsersAcl(NULL, argc, args); break; case RC_ACLDEL: if (UserDel(args[0], NULL)) break; if (msgok) OutputMsg(0, "%s removed from acl database", args[0]); break; case RC_ACLGRP: /* * modify a user to gain or lose rights granted to a group. * This group is actually a normal user whose rights were defined * with chacl in the usual way. */ if (args[1]) { if (strcmp(args[1], "none")) /* link a user to another user */ { if (AclLinkUser(args[0], args[1])) break; if (msgok) OutputMsg(0, "User %s joined acl-group %s", args[0], args[1]); } else /* remove all groups from user */ { struct acluser *u; struct aclusergroup *g; if (!(u = *FindUserPtr(args[0]))) break; while ((g = u->u_group)) { u->u_group = g->next; free((char *)g); } } } else /* show all groups of user */ { char buf[256], *p = buf; int ngroups = 0; struct acluser *u; struct aclusergroup *g; if (!(u = *FindUserPtr(args[0]))) { if (msgok) OutputMsg(0, "User %s does not exist.", args[0]); break; } g = u->u_group; while (g) { ngroups++; sprintf(p, "%s ", g->u->u_name); p += strlen(p); if (p > buf+200) break; g = g->next; } if (ngroups) *(--p) = '\0'; OutputMsg(0, "%s's group%s: %s.", args[0], (ngroups == 1) ? "" : "s", (ngroups == 0) ? "none" : buf); } break; case RC_ACLUMASK: case RC_UMASK: while ((s = *args++)) { char *err = 0; if (AclUmask(display ? D_user : users, s, &err)) OutputMsg(0, "umask: %s\n", err); } break; case RC_MULTIUSER: if (ParseOnOff(act, &n)) break; multi = n ? "" : 0; chsock(); if (msgok) OutputMsg(0, "Multiuser mode %s", multi ? "enabled" : "disabled"); break; #endif /* MULTIUSER */ #ifdef PSEUDOS case RC_EXEC: winexec(args); break; #endif #ifdef MULTI case RC_NONBLOCK: i = D_nonblock >= 0; if (*args && ((args[0][0] >= '0' && args[0][0] <= '9') || args[0][0] == '.')) { if (ParseNum1000(act, &i)) break; } else if (!ParseSwitch(act, &i)) i = i == 0 ? -1 : 1000; else break; if (msgok && i == -1) OutputMsg(0, "display set to blocking mode"); else if (msgok && i == 0) OutputMsg(0, "display set to nonblocking mode, no timeout"); else if (msgok) OutputMsg(0, "display set to nonblocking mode, %.10gs timeout", i/1000.); D_nonblock = i; if (D_nonblock <= 0) evdeq(&D_blockedev); break; case RC_DEFNONBLOCK: if (*args && ((args[0][0] >= '0' && args[0][0] <= '9') || args[0][0] == '.')) { if (ParseNum1000(act, &defnonblock)) break; } else if (!ParseOnOff(act, &defnonblock)) defnonblock = defnonblock == 0 ? -1 : 1000; else break; if (display && *rc_name) { D_nonblock = defnonblock; if (D_nonblock <= 0) evdeq(&D_blockedev); } break; #endif case RC_GR: #ifdef ENCODINGS if (fore->w_gr == 2) fore->w_gr = 0; #endif if (ParseSwitch(act, &fore->w_gr) == 0 && msgok) OutputMsg(0, "Will %suse GR", fore->w_gr ? "" : "not "); #ifdef ENCODINGS if (fore->w_gr == 0 && fore->w_FontE) fore->w_gr = 2; #endif break; case RC_C1: if (ParseSwitch(act, &fore->w_c1) == 0 && msgok) OutputMsg(0, "Will %suse C1", fore->w_c1 ? "" : "not "); break; #ifdef COLOR case RC_BCE: if (ParseSwitch(act, &fore->w_bce) == 0 && msgok) OutputMsg(0, "Will %serase with background color", fore->w_bce ? "" : "not "); break; #endif #ifdef ENCODINGS case RC_KANJI: case RC_ENCODING: #ifdef UTF8 if (*args && !strcmp(args[0], "-d")) { if (!args[1]) OutputMsg(0, "encodings directory is %s", screenencodings ? screenencodings : ""); else { free(screenencodings); screenencodings = SaveStr(args[1]); } break; } if (*args && !strcmp(args[0], "-l")) { if (!args[1]) OutputMsg(0, "encoding: -l: argument required"); else if (LoadFontTranslation(-1, args[1])) OutputMsg(0, "encoding: could not load utf8 encoding file"); else if (msgok) OutputMsg(0, "encoding: utf8 encoding file loaded"); break; } #else if (*args && (!strcmp(args[0], "-l") || !strcmp(args[0], "-d"))) { if (msgok) OutputMsg(0, "encoding: screen is not compiled for UTF-8."); break; } #endif for (i = 0; i < 2; i++) { if (args[i] == 0) break; if (!strcmp(args[i], ".")) continue; n = FindEncoding(args[i]); if (n == -1) { OutputMsg(0, "encoding: unknown encoding '%s'", args[i]); break; } if (i == 0 && fore) { WinSwitchEncoding(fore, n); ResetCharsets(fore); } else if (i && display) D_encoding = n; } break; case RC_DEFKANJI: case RC_DEFENCODING: n = FindEncoding(*args); if (n == -1) { OutputMsg(0, "defencoding: unknown encoding '%s'", *args); break; } nwin_default.encoding = n; break; #endif #ifdef UTF8 case RC_DEFUTF8: n = nwin_default.encoding == UTF8; if (ParseSwitch(act, &n) == 0) { nwin_default.encoding = n ? UTF8 : 0; if (msgok) OutputMsg(0, "Will %suse UTF-8 encoding for new windows", n ? "" : "not "); } break; case RC_UTF8: for (i = 0; i < 2; i++) { if (i && args[i] == 0) break; if (args[i] == 0) n = fore->w_encoding != UTF8; else if (strcmp(args[i], "off") == 0) n = 0; else if (strcmp(args[i], "on") == 0) n = 1; else { OutputMsg(0, "utf8: illegal argument (%s)", args[i]); break; } if (i == 0) { WinSwitchEncoding(fore, n ? UTF8 : 0); if (msgok) OutputMsg(0, "Will %suse UTF-8 encoding", n ? "" : "not "); } else if (display) D_encoding = n ? UTF8 : 0; if (args[i] == 0) break; } break; #endif case RC_PRINTCMD: if (*args) { if (printcmd) free(printcmd); printcmd = 0; if (**args) printcmd = SaveStr(*args); } if (*args == 0 || msgok) { if (printcmd) OutputMsg(0, "using '%s' as print command", printcmd); else OutputMsg(0, "using termcap entries for printing"); break; } break; case RC_DIGRAPH: if (argl && argl[0] > 0 && args[1] && argl[1] > 0) { if (argl[0] != 2) { OutputMsg(0, "Two characters expected to define a digraph"); break; } i = digraph_find(args[0]); digraphs[i].d[0] = args[0][0]; digraphs[i].d[1] = args[0][1]; if (!parse_input_int(args[1], argl[1], &digraphs[i].value)) { if (!(digraphs[i].value = atoi(args[1]))) { if (!args[1][1]) digraphs[i].value = (int)args[1][0]; #ifdef UTF8 else { int t; unsigned char *s = (unsigned char *)args[1]; digraphs[i].value = 0; while (*s) { t = FromUtf8(*s++, &digraphs[i].value); if (t == -1) continue; if (t == -2) digraphs[i].value = 0; else digraphs[i].value = t; break; } } #endif } } break; } Input("Enter digraph: ", 10, INP_EVERY, digraph_fn, NULL, 0); if (*args && **args) { s = *args; n = strlen(s); LayProcess(&s, &n); } break; case RC_DEFHSTATUS: if (*args == 0) { char buf[256]; *buf = 0; if (nwin_default.hstatus) AddXChars(buf, sizeof(buf), nwin_default.hstatus); OutputMsg(0, "default hstatus is '%s'", buf); break; } (void)ParseSaveStr(act, &nwin_default.hstatus); if (*nwin_default.hstatus == 0) { free(nwin_default.hstatus); nwin_default.hstatus = 0; } break; case RC_HSTATUS: (void)ParseSaveStr(act, &fore->w_hstatus); if (*fore->w_hstatus == 0) { free(fore->w_hstatus); fore->w_hstatus = 0; } WindowChanged(fore, 'h'); break; #ifdef FONT case RC_DEFCHARSET: case RC_CHARSET: if (*args == 0) { char buf[256]; *buf = 0; if (nwin_default.charset) AddXChars(buf, sizeof(buf), nwin_default.charset); OutputMsg(0, "default charset is '%s'", buf); break; } n = strlen(*args); if (n == 0 || n > 6) { OutputMsg(0, "%s: %s: string has illegal size.", rc_name, comms[nr].name); break; } if (n > 4 && ( ((args[0][4] < '0' || args[0][4] > '3') && args[0][4] != '.') || ((args[0][5] < '0' || args[0][5] > '3') && args[0][5] && args[0][5] != '.'))) { OutputMsg(0, "%s: %s: illegal mapping number.", rc_name, comms[nr].name); break; } if (nr == RC_CHARSET) { SetCharsets(fore, *args); break; } if (nwin_default.charset) free(nwin_default.charset); nwin_default.charset = SaveStr(*args); break; #endif #ifdef COLOR case RC_ATTRCOLOR: s = args[0]; if (*s >= '0' && *s <= '9') i = *s - '0'; else for (i = 0; i < 8; i++) if (*s == "dubrsBiI"[i]) break; s++; nr = 0; if (*s && s[1] && !s[2]) { if (*s == 'd' && s[1] == 'd') nr = 3; else if (*s == '.' && s[1] == 'd') nr = 2; else if (*s == 'd' && s[1] == '.') nr = 1; else if (*s != '.' || s[1] != '.') s--; s += 2; } if (*s || i < 0 || i >= 8) { OutputMsg(0, "%s: attrcolor: unknown attribute '%s'.", rc_name, args[0]); break; } n = 0; if (args[1]) n = ParseAttrColor(args[1], args[2], 1); if (n == -1) break; attr2color[i][nr] = n; n = 0; for (i = 0; i < 8; i++) if (attr2color[i][0] || attr2color[i][1] || attr2color[i][2] || attr2color[i][3]) n |= 1 << i; nattr2color = n; break; #endif case RC_RENDITION: i = -1; if (strcmp(args[0], "bell") == 0) { i = REND_BELL; } else if (strcmp(args[0], "monitor") == 0) { i = REND_MONITOR; } else if (strcmp(args[0], "silence") == 0) { i = REND_SILENCE; } else if (strcmp(args[0], "so") != 0) { OutputMsg(0, "Invalid option '%s' for rendition", args[0]); break; } ++args; ++argl; if (i != -1) { renditions[i] = ParseAttrColor(args[0], args[1], 1); WindowChanged((struct win *)0, 'w'); WindowChanged((struct win *)0, 'W'); WindowChanged((struct win *)0, 0); break; } /* We are here, means we want to set the sorendition. */ /* FALLTHROUGH*/ case RC_SORENDITION: i = 0; if (*args) { i = ParseAttrColor(*args, args[1], 1); if (i == -1) break; ApplyAttrColor(i, &mchar_so); WindowChanged((struct win *)0, 0); debug2("--> %x %x\n", mchar_so.attr, mchar_so.color); } if (msgok) #ifdef COLOR OutputMsg(0, "Standout attributes 0x%02x color 0x%02x", (unsigned char)mchar_so.attr, 0x99 ^ (unsigned char)mchar_so.color); #else OutputMsg(0, "Standout attributes 0x%02x ", (unsigned char)mchar_so.attr); #endif break; case RC_SOURCE: do_source(*args); break; #ifdef MULTIUSER case RC_SU: s = NULL; if (!*args) { OutputMsg(0, "%s:%s screen login", HostName, SockPath); InputSu(D_fore, &D_user, NULL); } else if (!args[1]) InputSu(D_fore, &D_user, args[0]); else if (!args[2]) s = DoSu(&D_user, args[0], args[1], "\377"); else s = DoSu(&D_user, args[0], args[1], args[2]); if (s) OutputMsg(0, "%s", s); break; #endif /* MULTIUSER */ case RC_SPLIT: s = args[0]; if (s && !strcmp(s, "-v")) AddCanvas(SLICE_HORI); else AddCanvas(SLICE_VERT); Activate(-1); break; case RC_REMOVE: RemCanvas(); Activate(-1); break; case RC_ONLY: OneCanvas(); Activate(-1); break; case RC_FIT: D_forecv->c_xoff = D_forecv->c_xs; D_forecv->c_yoff = D_forecv->c_ys; RethinkViewportOffsets(D_forecv); ResizeLayer(D_forecv->c_layer, D_forecv->c_xe - D_forecv->c_xs + 1, D_forecv->c_ye - D_forecv->c_ys + 1, 0); flayer = D_forecv->c_layer; LaySetCursor(); break; case RC_FOCUS: { struct canvas *cv = 0; if (!*args || !strcmp(*args, "next")) cv = D_forecv->c_next ? D_forecv->c_next : D_cvlist; else if (!strcmp(*args, "prev")) { for (cv = D_cvlist; cv->c_next && cv->c_next != D_forecv; cv = cv->c_next) ; } else if (!strcmp(*args, "top")) cv = D_cvlist; else if (!strcmp(*args, "bottom")) { for (cv = D_cvlist; cv->c_next; cv = cv->c_next) ; } else if (!strcmp(*args, "up")) cv = FindCanvas(D_forecv->c_xs, D_forecv->c_ys - 1); else if (!strcmp(*args, "down")) cv = FindCanvas(D_forecv->c_xs, D_forecv->c_ye + 2); else if (!strcmp(*args, "left")) cv = FindCanvas(D_forecv->c_xs - 1, D_forecv->c_ys); else if (!strcmp(*args, "right")) cv = FindCanvas(D_forecv->c_xe + 1, D_forecv->c_ys); else { OutputMsg(0, "%s: usage: focus [next|prev|up|down|left|right|top|bottom]", rc_name); break; } SetForeCanvas(display, cv); } break; case RC_RESIZE: i = 0; if (D_forecv->c_slorient == SLICE_UNKN) { OutputMsg(0, "resize: need more than one region"); break; } for (; *args; args++) { if (!strcmp(*args, "-h")) i |= RESIZE_FLAG_H; else if (!strcmp(*args, "-v")) i |= RESIZE_FLAG_V; else if (!strcmp(*args, "-b")) i |= RESIZE_FLAG_H | RESIZE_FLAG_V; else if (!strcmp(*args, "-p")) i |= D_forecv->c_slorient == SLICE_VERT ? RESIZE_FLAG_H : RESIZE_FLAG_V; else if (!strcmp(*args, "-l")) i |= RESIZE_FLAG_L; else break; } if (*args && args[1]) { OutputMsg(0, "%s: usage: resize [-h] [-v] [-l] [num]\n", rc_name); break; } if (*args) ResizeRegions(*args, i); else Input(resizeprompts[i], 20, INP_EVERY, ResizeFin, (char*)0, i); break; case RC_SETSID: (void)ParseSwitch(act, &separate_sids); break; case RC_EVAL: args = SaveArgs(args); for (i = 0; args[i]; i++) { if (args[i][0]) Colonfin(args[i], strlen(args[i]), (char *)0); free(args[i]); } free(args); break; case RC_ALTSCREEN: (void)ParseSwitch(act, &use_altscreen); if (msgok) OutputMsg(0, "Will %sdo alternate screen switching", use_altscreen ? "" : "not "); break; case RC_MAXWIN: if (!args[0]) { OutputMsg(0, "maximum windows allowed: %d", maxwin); break; } if (ParseNum(act, &n)) break; if (n < 1) OutputMsg(0, "illegal maxwin number specified"); else if (n > 2048) OutputMsg(0, "maximum 2048 windows allowed"); else if (n > maxwin && windows) OutputMsg(0, "may increase maxwin only when there's no window"); else { if (!windows) { wtab = realloc(wtab, n * sizeof(struct win *)); bzero(wtab, n * sizeof(struct win *)); } maxwin = n; } break; case RC_BACKTICK: if (ParseBase(act, *args, &n, 10, "decimal")) break; if (!args[1]) setbacktick(n, 0, 0, (char **)0); else { int lifespan, tick; if (argc < 4) { OutputMsg(0, "%s: usage: backtick num [lifespan tick cmd args...]", rc_name); break; } if (ParseBase(act, args[1], &lifespan, 10, "decimal")) break; if (ParseBase(act, args[2], &tick, 10, "decimal")) break; setbacktick(n, lifespan, tick, SaveArgs(args + 3)); } WindowChanged(0, '`'); break; case RC_BLANKER: #ifdef BLANKER_PRG if (blankerprg) { RunBlanker(blankerprg); break; } #endif ClearAll(); CursorVisibility(-1); D_blocked = 4; break; #ifdef BLANKER_PRG case RC_BLANKERPRG: if (!args[0]) { if (blankerprg) { char path[MAXPATHLEN]; char *p = path, **pp; for (pp = blankerprg; *pp; pp++) p += snprintf(p, sizeof(path) - (p - path) - 1, "%s ", *pp); *(p - 1) = '\0'; OutputMsg(0, "blankerprg: %s", path); } else OutputMsg(0, "No blankerprg set."); break; } if (blankerprg) { char **pp; for (pp = blankerprg; *pp; pp++) free(*pp); free(blankerprg); blankerprg = 0; } if (args[0][0]) blankerprg = SaveArgs(args); break; #endif case RC_IDLE: if (*args) { struct display *olddisplay = display; if (!strcmp(*args, "off")) idletimo = 0; else if (args[0][0]) idletimo = atoi(*args) * 1000; if (argc > 1) { if ((i = FindCommnr(args[1])) == RC_ILLEGAL) { OutputMsg(0, "%s: idle: unknown command '%s'", rc_name, args[1]); break; } if (CheckArgNum(i, args + 2) < 0) break; ClearAction(&idleaction); SaveAction(&idleaction, i, args + 2, argl + 2); } for (display = displays; display; display = display->d_next) ResetIdle(); display = olddisplay; } if (msgok) { if (idletimo) OutputMsg(0, "idle timeout %ds, %s", idletimo / 1000, comms[idleaction.nr].name); else OutputMsg(0, "idle off"); } break; case RC_FOCUSMINSIZE: for (i = 0; i < 2 && args[i]; i++) { if (!strcmp(args[i], "max") || !strcmp(args[i], "_")) n = -1; else n = atoi(args[i]); if (i == 0) focusminwidth = n; else focusminheight = n; } if (msgok) { char b[2][20]; for (i = 0; i < 2; i++) { n = i == 0 ? focusminwidth : focusminheight; if (n == -1) strcpy(b[i], "max"); else sprintf(b[i], "%d", n); } OutputMsg(0, "focus min size is %s %s\n", b[0], b[1]); } break; case RC_GROUP: if (*args) { fore->w_group = 0; if (args[0][0]) { fore->w_group = WindowByName(*args); if (fore->w_group == fore || (fore->w_group && fore->w_group->w_type != W_TYPE_GROUP)) fore->w_group = 0; } WindowChanged((struct win *)0, 'w'); WindowChanged((struct win *)0, 'W'); WindowChanged((struct win *)0, 0); } if (msgok) { if (fore->w_group) OutputMsg(0, "window group is %d (%s)\n", fore->w_group->w_number, fore->w_group->w_title); else OutputMsg(0, "window belongs to no group"); } break; case RC_LAYOUT: // A number of the subcommands for "layout" are ignored, or not processed correctly when there // is no attached display. if (!strcmp(args[0], "title")) { if (!display) { if (!args[1]) // There is no display, and there is no new title. Ignore. break; if (!layout_attach || layout_attach == &layout_last_marker) layout_attach = CreateLayout(args[1], 0); else RenameLayout(layout_attach, args[1]); break; } if (!D_layout) { OutputMsg(0, "not on a layout"); break; } if (!args[1]) { OutputMsg(0, "current layout is %d (%s)", D_layout->lay_number, D_layout->lay_title); break; } RenameLayout(D_layout, args[1]); } else if (!strcmp(args[0], "number")) { if (!display) { if (args[1] && layout_attach && layout_attach != &layout_last_marker) RenumberLayout(layout_attach, atoi(args[1])); break; } if (!D_layout) { OutputMsg(0, "not on a layout"); break; } if (!args[1]) { OutputMsg(0, "This is layout %d (%s).\n", D_layout->lay_number, D_layout->lay_title); break; } RenumberLayout(D_layout, atoi(args[1])); break; } else if (!strcmp(args[0], "autosave")) { if (!display) { if (args[1] && layout_attach && layout_attach != &layout_last_marker) { if (!strcmp(args[1], "on")) layout_attach->lay_autosave = 1; else if (!strcmp(args[1], "off")) layout_attach->lay_autosave = 0; } break; } if (!D_layout) { OutputMsg(0, "not on a layout"); break; } if (args[1]) { if (!strcmp(args[1], "on")) D_layout->lay_autosave = 1; else if (!strcmp(args[1], "off")) D_layout->lay_autosave = 0; else { OutputMsg(0, "invalid argument. Give 'on' or 'off"); break; } } if (msgok) OutputMsg(0, "autosave is %s", D_layout->lay_autosave ? "on" : "off"); } else if (!strcmp(args[0], "new")) { char *t = args[1]; n = 0; if (t) { while (*t >= '0' && *t <= '9') t++; if (t != args[1] && (!*t || *t == ':')) { n = atoi(args[1]); if (*t) t++; } else t = args[1]; } if (!t || !*t) t = "layout"; NewLayout(t, n); Activate(-1); } else if (!strcmp(args[0], "save")) { if (!args[1]) { OutputMsg(0, "usage: layout save "); break; } if (display) SaveLayout(args[1], &D_canvas); } else if (!strcmp(args[0], "select")) { if (!display) { if (args[1]) layout_attach = FindLayout(args[1]); break; } if (!args[1]) { Input("Switch to layout: ", 20, INP_COOKED, SelectLayoutFin, NULL, 0); break; } SelectLayoutFin(args[1], strlen(args[1]), (char *)0); } else if (!strcmp(args[0], "next")) { if (!display) { if (layout_attach && layout_attach != &layout_last_marker) layout_attach = layout_attach->lay_next ? layout_attach->lay_next : layouts;; break; } struct layout *lay = D_layout; if (lay) lay = lay->lay_next ? lay->lay_next : layouts; else lay = layouts; if (!lay) { OutputMsg(0, "no layout defined"); break; } if (lay == D_layout) break; LoadLayout(lay, &D_canvas); Activate(-1); } else if (!strcmp(args[0], "prev")) { struct layout *lay = display ? D_layout : layout_attach; struct layout *target = lay; if (lay) { for (lay = layouts; lay->lay_next && lay->lay_next != target; lay = lay->lay_next) ; } else lay = layouts; if (!display) { layout_attach = lay; break; } if (!lay) { OutputMsg(0, "no layout defined"); break; } if (lay == D_layout) break; LoadLayout(lay, &D_canvas); Activate(-1); } else if (!strcmp(args[0], "attach")) { if (!args[1]) { if (!layout_attach) OutputMsg(0, "no attach layout set"); else if (layout_attach == &layout_last_marker) OutputMsg(0, "will attach to last layout"); else OutputMsg(0, "will attach to layout %d (%s)", layout_attach->lay_number, layout_attach->lay_title); break; } if (!strcmp(args[1], ":last")) layout_attach = &layout_last_marker; else if (!args[1][0]) layout_attach = 0; else { struct layout *lay; lay = FindLayout(args[1]); if (!lay) { OutputMsg(0, "unknown layout '%s'", args[1]); break; } layout_attach = lay; } } else if (!strcmp(args[0], "show")) { ShowLayouts(-1); } else if (!strcmp(args[0], "remove")) { struct layout *lay = display ? D_layout : layouts; if (args[1]) { lay = layouts ? FindLayout(args[1]) : (struct layout *)0; if (!lay) { OutputMsg(0, "unknown layout '%s'", args[1]); break; } } if (lay) RemoveLayout(lay); } else if (!strcmp(args[0], "dump")) { if (!display) OutputMsg(0, "Must have a display for 'layout dump'."); else if (!LayoutDumpCanvas(&D_canvas, args[1] ? args[1] : "layout-dump")) OutputMsg(errno, "Error dumping layout."); else OutputMsg(0, "Layout dumped to \"%s\"", args[1] ? args[1] : "layout-dump"); } else OutputMsg(0, "unknown layout subcommand"); break; #ifdef DW_CHARS case RC_CJKWIDTH: if(ParseSwitch(act, &cjkwidth) == 0) { if(msgok) OutputMsg(0, "Treat ambiguous width characters as %s width", cjkwidth ? "full" : "half"); } break; #endif default: #ifdef HAVE_BRAILLE /* key == -2: input from braille keybord, msgok always 0 */ DoBrailleAction(act, key == -2 ? 0 : msgok); #endif break; } if (display != odisplay) { for (display = displays; display; display = display->d_next) if (display == odisplay) break; } } #undef OutputMsg void CollapseWindowlist() /* renumber windows from 0, leaving no gaps */ { int pos, moveto=0; for (pos = 1; pos < MAXWIN; pos++) if (wtab[pos]) for (; moveto < pos; moveto++) if (!wtab[moveto]) { WindowChangeNumber(pos, moveto); break; } } void DoCommand(argv, argl) char **argv; int *argl; { struct action act; const char *cmd = *argv; act.quiet = 0; /* For now, we actually treat both 'supress error' and 'suppress normal message' as the * same, and ignore all messages on either flag. If we wanted to do otherwise, we would * need to change the definition of 'OutputMsg' slightly. */ if (*cmd == '@') /* Suppress error */ { act.quiet |= 0x01; cmd++; } if (*cmd == '-') /* Suppress normal message */ { act.quiet |= 0x02; cmd++; } if ((act.nr = FindCommnr(cmd)) == RC_ILLEGAL) { Msg(0, "%s: unknown command '%s'", rc_name, cmd); return; } act.args = argv + 1; act.argl = argl + 1; DoAction(&act, -1); } static void SaveAction(act, nr, args, argl) struct action *act; int nr; char **args; int *argl; { register int argc = 0; char **pp; int *lp; if (args) while (args[argc]) argc++; if (argc == 0) { act->nr = nr; act->args = noargs; act->argl = 0; return; } if ((pp = (char **)malloc((unsigned)(argc + 1) * sizeof(char *))) == 0) Panic(0, "%s", strnomem); if ((lp = (int *)malloc((unsigned)(argc) * sizeof(int))) == 0) Panic(0, "%s", strnomem); act->nr = nr; act->args = pp; act->argl = lp; while (argc--) { *lp = argl ? *argl++ : (int)strlen(*args); *pp++ = SaveStrn(*args++, *lp++); } *pp = 0; } static char ** SaveArgs(args) char **args; { register char **ap, **pp; register int argc = 0; while (args[argc]) argc++; if ((pp = ap = (char **)malloc((unsigned)(argc + 1) * sizeof(char **))) == 0) Panic(0, "%s", strnomem); while (argc--) *pp++ = SaveStr(*args++); *pp = 0; return ap; } /* * buf is split into argument vector args. * leading whitespace is removed. * @!| abbreviations are expanded. * the end of buffer is recognized by '\0' or an un-escaped '#'. * " and ' are interpreted. * * argc is returned. */ int Parse(buf, bufl, args, argl) char *buf, **args; int bufl, *argl; { register char *p = buf, **ap = args, *pp; register int delim, argc; int *lp = argl; debug2("Parse %d %s\n", bufl, buf); argc = 0; pp = buf; delim = 0; for (;;) { *lp = 0; while (*p && (*p == ' ' || *p == '\t')) ++p; #ifdef PSEUDOS if (argc == 0 && *p == '!') { *ap++ = "exec"; *lp++ = 4; p++; argc++; continue; } #endif if (*p == '\0' || *p == '#' || *p == '\n') { *p = '\0'; for (delim = 0; delim < argc; delim++) debug1("-- %s\n", args[delim]); args[argc] = 0; return argc; } if (++argc >= MAXARGS) { Msg(0, "%s: too many tokens.", rc_name); return 0; } *ap++ = pp; debug1("- new arg %s\n", p); while (*p) { if (*p == delim) delim = 0; else if (delim != '\'' && *p == '\\' && (p[1] == 'n' || p[1] == 'r' || p[1] == 't' || p[1] == '\'' || p[1] == '"' || p[1] == '\\' || p[1] == '$' || p[1] == '#' || p[1] == '^' || (p[1] >= '0' && p[1] <= '7'))) { p++; if (*p >= '0' && *p <= '7') { *pp = *p - '0'; if (p[1] >= '0' && p[1] <= '7') { p++; *pp = (*pp << 3) | (*p - '0'); if (p[1] >= '0' && p[1] <= '7') { p++; *pp = (*pp << 3) | (*p - '0'); } } pp++; } else { switch (*p) { case 'n': *pp = '\n'; break; case 'r': *pp = '\r'; break; case 't': *pp = '\t'; break; default: *pp = *p; break; } pp++; } } else if (delim != '\'' && *p == '$' && (p[1] == '{' || p[1] == ':' || (p[1] >= 'a' && p[1] <= 'z') || (p[1] >= 'A' && p[1] <= 'Z') || (p[1] >= '0' && p[1] <= '9') || p[1] == '_')) { char *ps, *pe, op, *v, xbuf[11], path[MAXPATHLEN]; int vl; ps = ++p; debug1("- var %s\n", ps); p++; while (*p) { if (*ps == '{' && *p == '}') break; if (*ps == ':' && *p == ':') break; if (*ps != '{' && *ps != ':' && (*p < 'a' || *p > 'z') && (*p < 'A' || *p > 'Z') && (*p < '0' || *p > '9') && *p != '_') break; p++; } pe = p; if (*ps == '{' || *ps == ':') { if (!*p) { Msg(0, "%s: bad variable name.", rc_name); return 0; } p++; } op = *pe; *pe = 0; debug1("- var is '%s'\n", ps); if (*ps == ':') v = gettermcapstring(ps + 1); else { if (*ps == '{') ps++; v = xbuf; if (!strcmp(ps, "TERM")) v = display ? D_termname : "unknown"; else if (!strcmp(ps, "COLUMNS")) sprintf(xbuf, "%d", display ? D_width : -1); else if (!strcmp(ps, "LINES")) sprintf(xbuf, "%d", display ? D_height : -1); else if (!strcmp(ps, "PID")) sprintf(xbuf, "%d", getpid()); else if (!strcmp(ps, "PWD")) { if (getcwd(path, sizeof(path) - 1) == 0) v = "?"; else v = path; } else if (!strcmp(ps, "STY")) { if ((v = strchr(SockName, '.'))) /* Skip the PID */ v++; else v = SockName; } else v = getenv(ps); } *pe = op; vl = v ? strlen(v) : 0; if (vl) { debug1("- sub is '%s'\n", v); if (p - pp < vl) { int right = buf + bufl - (p + strlen(p) + 1); if (right > 0) { bcopy(p, p + right, strlen(p) + 1); p += right; } } if (p - pp < vl) { Msg(0, "%s: no space left for variable expansion.", rc_name); return 0; } bcopy(v, pp, vl); pp += vl; } continue; } else if (delim != '\'' && *p == '^' && p[1]) { p++; *pp++ = *p == '?' ? '\177' : *p & 0x1f; } else if (delim == 0 && (*p == '\'' || *p == '"')) delim = *p; else if (delim == 0 && (*p == ' ' || *p == '\t' || *p == '\n')) break; else *pp++ = *p; p++; } if (delim) { Msg(0, "%s: Missing %c quote.", rc_name, delim); return 0; } if (*p) p++; *pp = 0; debug2("- arg done, '%s' rest %s\n", ap[-1], p); *lp++ = pp - ap[-1]; pp++; } } void SetEscape(u, e, me) struct acluser *u; int e, me; { if (u) { u->u_Esc = e; u->u_MetaEsc = me; } else { if (users) { if (DefaultEsc >= 0) ClearAction(&ktab[DefaultEsc]); if (DefaultMetaEsc >= 0) ClearAction(&ktab[DefaultMetaEsc]); } DefaultEsc = e; DefaultMetaEsc = me; if (users) { if (DefaultEsc >= 0) { ClearAction(&ktab[DefaultEsc]); ktab[DefaultEsc].nr = RC_OTHER; } if (DefaultMetaEsc >= 0) { ClearAction(&ktab[DefaultMetaEsc]); ktab[DefaultMetaEsc].nr = RC_META; } } } } int ParseSwitch(act, var) struct action *act; int *var; { if (*act->args == 0) { *var ^= 1; return 0; } return ParseOnOff(act, var); } static int ParseOnOff(act, var) struct action *act; int *var; { register int num = -1; char **args = act->args; if (args[1] == 0) { if (strcmp(args[0], "on") == 0) num = 1; else if (strcmp(args[0], "off") == 0) num = 0; } if (num < 0) { Msg(0, "%s: %s: invalid argument. Give 'on' or 'off'", rc_name, comms[act->nr].name); return -1; } *var = num; return 0; } int ParseSaveStr(act, var) struct action *act; char **var; { char **args = act->args; if (*args == 0 || args[1]) { Msg(0, "%s: %s: one argument required.", rc_name, comms[act->nr].name); return -1; } if (*var) free(*var); *var = SaveStr(*args); return 0; } int ParseNum(act, var) struct action *act; int *var; { int i; char *p, **args = act->args; p = *args; if (p == 0 || *p == 0 || args[1]) { Msg(0, "%s: %s: invalid argument. Give one argument.", rc_name, comms[act->nr].name); return -1; } i = 0; while (*p) { if (*p >= '0' && *p <= '9') i = 10 * i + (*p - '0'); else { Msg(0, "%s: %s: invalid argument. Give numeric argument.", rc_name, comms[act->nr].name); return -1; } p++; } debug1("ParseNum got %d\n", i); *var = i; return 0; } static int ParseNum1000(act, var) struct action *act; int *var; { int i; char *p, **args = act->args; int dig = 0; p = *args; if (p == 0 || *p == 0 || args[1]) { Msg(0, "%s: %s: invalid argument. Give one argument.", rc_name, comms[act->nr].name); return -1; } i = 0; while (*p) { if (*p >= '0' && *p <= '9') { if (dig < 4) i = 10 * i + (*p - '0'); else if (dig == 4 && *p >= '5') i++; if (dig) dig++; } else if (*p == '.' && !dig) dig++; else { Msg(0, "%s: %s: invalid argument. Give floating point argument.", rc_name, comms[act->nr].name); return -1; } p++; } if (dig == 0) i *= 1000; else while (dig++ < 4) i *= 10; if (i < 0) i = (int)((unsigned int)~0 >> 1); debug1("ParseNum1000 got %d\n", i); *var = i; return 0; } static struct win * WindowByName(s) char *s; { struct win *p; for (p = windows; p; p = p->w_next) if (!strcmp(p->w_title, s)) return p; for (p = windows; p; p = p->w_next) if (!strncmp(p->w_title, s, strlen(s))) return p; return 0; } static int WindowByNumber(str) char *str; { int i; char *s; for (i = 0, s = str; *s; s++) { if (*s < '0' || *s > '9') break; i = i * 10 + (*s - '0'); } return *s ? -1 : i; } /* * Get window number from Name or Number string. * Numbers are tried first, then names, a prefix match suffices. * Be careful when assigning numeric strings as WindowTitles. */ int WindowByNoN(str) char *str; { int i; struct win *p; if ((i = WindowByNumber(str)) < 0 || i >= maxwin) { if ((p = WindowByName(str))) return p->w_number; return -1; } return i; } static int ParseWinNum(act, var) struct action *act; int *var; { char **args = act->args; int i = 0; if (*args == 0 || args[1]) { Msg(0, "%s: %s: one argument required.", rc_name, comms[act->nr].name); return -1; } i = WindowByNoN(*args); if (i < 0) { Msg(0, "%s: %s: invalid argument. Give window number or name.", rc_name, comms[act->nr].name); return -1; } debug1("ParseWinNum got %d\n", i); *var = i; return 0; } static int ParseBase(act, p, var, base, bname) struct action *act; char *p; int *var; int base; char *bname; { int i = 0; int c; if (*p == 0) { Msg(0, "%s: %s: empty argument.", rc_name, comms[act->nr].name); return -1; } while ((c = *p++)) { if (c >= 'a' && c <= 'z') c -= 'a' - 'A'; if (c >= 'A' && c <= 'Z') c -= 'A' - ('0' + 10); c -= '0'; if (c < 0 || c >= base) { Msg(0, "%s: %s: argument is not %s.", rc_name, comms[act->nr].name, bname); return -1; } i = base * i + c; } debug1("ParseBase got %d\n", i); *var = i; return 0; } static int IsNum(s, base) register char *s; register int base; { for (base += '0'; *s; ++s) if (*s < '0' || *s > base) return 0; return 1; } int IsNumColon(s, base, p, psize) int base, psize; char *s, *p; { char *q; if ((q = rindex(s, ':')) != 0) { strncpy(p, q + 1, psize - 1); p[psize - 1] = '\0'; *q = '\0'; } else *p = '\0'; return IsNum(s, base); } void SwitchWindow(n) int n; { struct win *p; debug1("SwitchWindow %d\n", n); if (n < 0 || n >= maxwin) { ShowWindows(-1); return; } if ((p = wtab[n]) == 0) { ShowWindows(n); return; } if (display == 0) { fore = p; return; } if (p == D_fore) { Msg(0, "This IS window %d (%s).", n, p->w_title); return; } #ifdef MULTIUSER if (AclCheckPermWin(D_user, ACL_READ, p)) { Msg(0, "Access to window %d denied.", p->w_number); return; } #endif SetForeWindow(p); Activate(fore->w_norefresh); } /* * SetForeWindow changes the window in the input focus of the display. * Puts window wi in canvas display->d_forecv. */ void SetForeWindow(wi) struct win *wi; { struct win *p; if (display == 0) { fore = wi; return; } p = Layer2Window(D_forecv->c_layer); SetCanvasWindow(D_forecv, wi); if (p) WindowChanged(p, 'u'); if (wi) WindowChanged(wi, 'u'); flayer = D_forecv->c_layer; /* Activate called afterwards, so no RefreshHStatus needed */ } /*****************************************************************/ /* * Activate - make fore window active * norefresh = -1 forces a refresh, disregard all_norefresh then. */ void Activate(norefresh) int norefresh; { debug1("Activate(%d)\n", norefresh); if (display == 0) return; if (D_status) { Msg(0, "%s", ""); /* wait till mintime (keep gcc quiet) */ RemoveStatus(); } if (MayResizeLayer(D_forecv->c_layer)) ResizeLayer(D_forecv->c_layer, D_forecv->c_xe - D_forecv->c_xs + 1, D_forecv->c_ye - D_forecv->c_ys + 1, display); fore = D_fore; if (fore) { /* XXX ? */ if (fore->w_monitor != MON_OFF) fore->w_monitor = MON_ON; fore->w_bell = BELL_ON; WindowChanged(fore, 'f'); #if 0 if (ResizeDisplay(fore->w_width, fore->w_height)) { debug2("Cannot resize from (%d,%d)", D_width, D_height); debug2(" to (%d,%d) -> resize window\n", fore->w_width, fore->w_height); DoResize(D_width, D_height); } #endif } Redisplay(norefresh + all_norefresh); } static int NextWindow() { register struct win **pp; int n = fore ? fore->w_number : maxwin; struct win *group = fore ? fore->w_group : 0; for (pp = fore ? wtab + n + 1 : wtab; pp != wtab + n; pp++) { if (pp == wtab + maxwin) pp = wtab; if (*pp) { if (!fore || group == (*pp)->w_group) break; } } if (pp == wtab + n) return -1; return pp - wtab; } static int PreviousWindow() { register struct win **pp; int n = fore ? fore->w_number : -1; struct win *group = fore ? fore->w_group : 0; for (pp = wtab + n - 1; pp != wtab + n; pp--) { if (pp == wtab - 1) pp = wtab + maxwin - 1; if (*pp) { if (!fore || group == (*pp)->w_group) break; } } if (pp == wtab + n) return -1; return pp - wtab; } static int MoreWindows() { char *m = "No other window."; if (windows && (fore == 0 || windows->w_next)) return 1; if (fore == 0) { Msg(0, "No window available"); return 0; } Msg(0, m, fore->w_number); /* other arg for nethack */ return 0; } void KillWindow(wi) struct win *wi; { struct win **pp, *p; struct canvas *cv; int gotone; struct layout *lay; /* * Remove window from linked list. */ for (pp = &windows; (p = *pp); pp = &p->w_next) if (p == wi) break; ASSERT(p); *pp = p->w_next; wi->w_inlen = 0; wtab[wi->w_number] = 0; if (windows == 0) { FreeWindow(wi); Finit(0); } /* * switch to different window on all canvases */ for (display = displays; display; display = display->d_next) { gotone = 0; for (cv = D_cvlist; cv; cv = cv->c_next) { if (Layer2Window(cv->c_layer) != wi) continue; /* switch to other window */ SetCanvasWindow(cv, FindNiceWindow(D_other, 0)); gotone = 1; } if (gotone) { #ifdef ZMODEM if (wi->w_zdisplay == display) { D_blocked = 0; D_readev.condpos = D_readev.condneg = 0; } #endif Activate(-1); } } /* do the same for the layouts */ for (lay = layouts; lay; lay = lay->lay_next) UpdateLayoutCanvas(&lay->lay_canvas, wi); FreeWindow(wi); WindowChanged((struct win *)0, 'w'); WindowChanged((struct win *)0, 'W'); WindowChanged((struct win *)0, 0); } static void LogToggle(on) int on; { char buf[1024]; if ((fore->w_log != 0) == on) { if (display && !*rc_name) Msg(0, "You are %s logging.", on ? "already" : "not"); return; } if (fore->w_log != 0) { Msg(0, "Logfile \"%s\" closed.", fore->w_log->name); logfclose(fore->w_log); fore->w_log = 0; WindowChanged(fore, 'f'); return; } if (DoStartLog(fore, buf, sizeof(buf))) { Msg(errno, "Error opening logfile \"%s\"", buf); return; } if (ftell(fore->w_log->fp) == 0) Msg(0, "Creating logfile \"%s\".", fore->w_log->name); else Msg(0, "Appending to logfile \"%s\".", fore->w_log->name); WindowChanged(fore, 'f'); } char * AddWindows(buf, len, flags, where) char *buf; int len; int flags; int where; { register char *s, *ss; register struct win **pp, *p; register char *cmd; int l; s = ss = buf; if ((flags & 8) && where < 0) { *s = 0; return ss; } for (pp = ((flags & 4) && where >= 0) ? wtab + where + 1: wtab; pp < wtab + maxwin; pp++) { int rend = -1; if (pp - wtab == where && ss == buf) ss = s; if ((p = *pp) == 0) continue; if ((flags & 1) && display && p == D_fore) continue; if (display && D_fore && D_fore->w_group != p->w_group) continue; cmd = p->w_title; l = strlen(cmd); if (l > 20) l = 20; if (s - buf + l > len - 24) break; if (s > buf || (flags & 4)) { *s++ = ' '; *s++ = ' '; } if (p->w_number == where) { ss = s; if (flags & 8) break; } if (!(flags & 4) || where < 0 || ((flags & 4) && where < p->w_number)) { if (p->w_monitor == MON_DONE && renditions[REND_MONITOR] != -1) rend = renditions[REND_MONITOR]; else if ((p->w_bell == BELL_DONE || p->w_bell == BELL_FOUND) && renditions[REND_BELL] != -1) rend = renditions[REND_BELL]; else if ((p->w_silence == SILENCE_FOUND || p->w_silence == SILENCE_DONE) && renditions[REND_SILENCE] != -1) rend = renditions[REND_SILENCE]; } if (rend != -1) AddWinMsgRend(s, rend); sprintf(s, "%d", p->w_number); s += strlen(s); if (display && p == D_fore) *s++ = '*'; if (!(flags & 2)) { if (display && p == D_other) *s++ = '-'; s = AddWindowFlags(s, len, p); } *s++ = ' '; strncpy(s, cmd, l); s += l; if (rend != -1) AddWinMsgRend(s, -1); } *s = 0; return ss; } char * AddWindowFlags(buf, len, p) char *buf; int len; struct win *p; { char *s = buf; if (p == 0 || len < 12) { *s = 0; return s; } #if 0 if (display && p == D_fore) *s++ = '*'; if (display && p == D_other) *s++ = '-'; #endif if (p->w_layer.l_cvlist && p->w_layer.l_cvlist->c_lnext) *s++ = '&'; if (p->w_monitor == MON_DONE #ifdef MULTIUSER && display && (ACLBYTE(p->w_mon_notify, D_user->u_id) & ACLBIT(D_user->u_id)) #endif ) *s++ = '@'; if (p->w_bell == BELL_DONE) *s++ = '!'; #ifdef UTMPOK if (p->w_slot != (slot_t) 0 && p->w_slot != (slot_t) -1) *s++ = '$'; #endif if (p->w_log != 0) { strcpy(s, "(L)"); s += 3; } if (p->w_ptyfd < 0 && p->w_type != W_TYPE_GROUP) *s++ = 'Z'; *s = 0; return s; } char * AddOtherUsers(buf, len, p) char *buf; int len; struct win *p; { struct display *d, *olddisplay = display; struct canvas *cv; char *s; int l; s = buf; for (display = displays; display; display = display->d_next) { if (olddisplay && D_user == olddisplay->d_user) continue; for (cv = D_cvlist; cv; cv = cv->c_next) if (Layer2Window(cv->c_layer) == p) break; if (!cv) continue; for (d = displays; d && d != display; d = d->d_next) if (D_user == d->d_user) break; if (d && d != display) continue; if (len > 1 && s != buf) { *s++ = ','; len--; } l = strlen(D_user->u_name); if (l + 1 > len) break; strcpy(s, D_user->u_name); s += l; len -= l; } *s = 0; display = olddisplay; return s; } void ShowWindows(where) int where; { char buf[1024]; char *s, *ss; if (display && where == -1 && D_fore) where = D_fore->w_number; ss = AddWindows(buf, sizeof(buf), 0, where); s = buf + strlen(buf); if (display && ss - buf > D_width / 2) { ss -= D_width / 2; if (s - ss < D_width) { ss = s - D_width; if (ss < buf) ss = buf; } } else ss = buf; Msg(0, "%s", ss); } /* * String Escape based windows listing * mls: currently does a Msg() call for each(!) window, dunno why */ static void ShowWindowsX(str) char *str; { int i; debug1("ShowWindowsX: string [%s]", str); for (i = 0; i < maxwin ; i++) { if (!wtab[i]) continue; Msg(0, "%s", MakeWinMsg(str, wtab[i], '%')); } } static void ShowInfo() { char buf[512], *p; register struct win *wp = fore; register int i; if (wp == 0) { Msg(0, "(%d,%d)/(%d,%d) no window", D_x + 1, D_y + 1, D_width, D_height); return; } p = buf; if (buf < (p += GetAnsiStatus(wp, p))) *p++ = ' '; sprintf(p, "(%d,%d)/(%d,%d)", wp->w_x + 1, wp->w_y + 1, wp->w_width, wp->w_height); #ifdef COPY_PASTE sprintf(p += strlen(p), "+%d", wp->w_histheight); #endif sprintf(p += strlen(p), " %c%sflow", (wp->w_flow & FLOW_NOW) ? '+' : '-', (wp->w_flow & FLOW_AUTOFLAG) ? "" : ((wp->w_flow & FLOW_AUTO) ? "(+)" : "(-)")); if (!wp->w_wrap) sprintf(p += strlen(p), " -wrap"); if (wp->w_insert) sprintf(p += strlen(p), " ins"); if (wp->w_origin) sprintf(p += strlen(p), " org"); if (wp->w_keypad) sprintf(p += strlen(p), " app"); if (wp->w_log) sprintf(p += strlen(p), " log"); if (wp->w_monitor != MON_OFF #ifdef MULTIUSER && (ACLBYTE(wp->w_mon_notify, D_user->u_id) & ACLBIT(D_user->u_id)) #endif ) sprintf(p += strlen(p), " mon"); if (wp->w_mouse) sprintf(p += strlen(p), " mouse"); #ifdef COLOR if (wp->w_bce) sprintf(p += strlen(p), " bce"); #endif if (!wp->w_c1) sprintf(p += strlen(p), " -c1"); if (wp->w_norefresh) sprintf(p += strlen(p), " nored"); p += strlen(p); #ifdef FONT # ifdef ENCODINGS if (wp->w_encoding && (display == 0 || D_encoding != wp->w_encoding || EncodingDefFont(wp->w_encoding) <= 0)) { *p++ = ' '; strcpy(p, EncodingName(wp->w_encoding)); p += strlen(p); } # ifdef UTF8 if (wp->w_encoding != UTF8) # endif # endif if (display && (D_CC0 || (D_CS0 && *D_CS0))) { if (wp->w_gr == 2) { sprintf(p, " G%c", wp->w_Charset + '0'); if (wp->w_FontE >= ' ') p[3] = wp->w_FontE; else { p[3] = '^'; p[4] = wp->w_FontE ^ 0x40; p++; } p[4] = '['; p++; } else if (wp->w_gr) sprintf(p++, " G%c%c[", wp->w_Charset + '0', wp->w_CharsetR + '0'); else sprintf(p, " G%c[", wp->w_Charset + '0'); p += 4; for (i = 0; i < 4; i++) { if (wp->w_charsets[i] == ASCII) *p++ = 'B'; else if (wp->w_charsets[i] >= ' ') *p++ = wp->w_charsets[i]; else { *p++ = '^'; *p++ = wp->w_charsets[i] ^ 0x40; } } *p++ = ']'; *p = 0; } #endif if (wp->w_type == W_TYPE_PLAIN) { /* add info about modem control lines */ *p++ = ' '; TtyGetModemStatus(wp->w_ptyfd, p); } #ifdef BUILTIN_TELNET else if (wp->w_type == W_TYPE_TELNET) { *p++ = ' '; TelStatus(wp, p, sizeof(buf) - 1 - (p - buf)); } #endif Msg(0, "%s %d(%s)", buf, wp->w_number, wp->w_title); } static void ShowDInfo() { char buf[512], *p; if (display == 0) return; p = buf; sprintf(p, "(%d,%d)", D_width, D_height), p += strlen(p); #ifdef ENCODINGS if (D_encoding) { *p++ = ' '; strcpy(p, EncodingName(D_encoding)); p += strlen(p); } #endif if (D_CXT) { strcpy(p, " xterm"); p += strlen(p); } #ifdef COLOR if (D_hascolor) { strcpy(p, " color"); p += strlen(p); } #endif #ifdef FONT if (D_CG0) { strcpy(p, " iso2022"); p += strlen(p); } else if (D_CS0 && *D_CS0) { strcpy(p, " altchar"); p += strlen(p); } #endif Msg(0, "%s", buf); } static void AKAfin(buf, len, data) char *buf; int len; char *data; /* dummy */ { ASSERT(display); if (len && fore) ChangeAKA(fore, buf, strlen(buf)); enter_window_name_mode = 0; } static void InputAKA() { char *s, *ss; int n; if (enter_window_name_mode == 1) return; enter_window_name_mode = 1; Input("Set window's title to: ", sizeof(fore->w_akabuf) - 1, INP_COOKED, AKAfin, NULL, 0); s = fore->w_title; if (!s) return; for (; *s; s++) { if ((*(unsigned char *)s & 0x7f) < 0x20 || *s == 0x7f) continue; ss = s; n = 1; LayProcess(&ss, &n); } } static void Colonfin(buf, len, data) char *buf; int len; char *data; /* dummy */ { char mbuf[256]; RemoveStatus(); if (buf[len] == '\t') { int m, x; int l = 0, r = RC_LAST; int showmessage = 0; char *s = buf; while (*s && s - buf < len) if (*s++ == ' ') return; /* Showing a message when there's no hardstatus or caption cancels the input */ if (display && (captionalways || D_has_hstatus == HSTATUS_LASTLINE || (D_canvas.c_slperp && D_canvas.c_slperp->c_slnext))) showmessage = 1; while (l <= r) { m = (l + r) / 2; x = strncmp(buf, comms[m].name, len); if (x > 0) l = m + 1; else if (x < 0) r = m - 1; else { s = mbuf; for (l = m - 1; l >= 0 && strncmp(buf, comms[l].name, len) == 0; l--) ; for (m = ++l; m <= r && strncmp(buf, comms[m].name, len) == 0 && s - mbuf < sizeof(mbuf); m++) s += snprintf(s, sizeof(mbuf) - (s - mbuf), " %s", comms[m].name); if (l < m - 1) { if (showmessage) Msg(0, "Possible commands:%s", mbuf); } else { s = mbuf; len = snprintf(mbuf, sizeof(mbuf), "%s \t", comms[l].name + len); if (len > 0 && len < sizeof(mbuf)) LayProcess(&s, &len); } break; } } if (l > r && showmessage) Msg(0, "No commands matching '%*s'", len, buf); return; } if (!len || buf[len]) return; len = strlen(buf) + 1; if (len > (int)sizeof(mbuf)) RcLine(buf, len); else { bcopy(buf, mbuf, len); RcLine(mbuf, sizeof mbuf); } } static void SelectFin(buf, len, data) char *buf; int len; char *data; /* dummy */ { int n; if (!len || !display) return; if (len == 1 && *buf == '-') { SetForeWindow((struct win *)0); Activate(0); return; } if ((n = WindowByNoN(buf)) < 0) return; SwitchWindow(n); } static void SelectLayoutFin(buf, len, data) char *buf; int len; char *data; /* dummy */ { struct layout *lay; if (!len || !display) return; if (len == 1 && *buf == '-') { LoadLayout((struct layout *)0, (struct canvas *)0); Activate(0); return; } lay = FindLayout(buf); if (!lay) Msg(0, "No such layout\n"); else if (lay == D_layout) Msg(0, "This IS layout %d (%s).\n", lay->lay_number, lay->lay_title); else { LoadLayout(lay, &D_canvas); Activate(0); } } static void InputSelect() { Input("Switch to window: ", 20, INP_COOKED, SelectFin, NULL, 0); } static char setenv_var[31]; static void SetenvFin1(buf, len, data) char *buf; int len; char *data; /* dummy */ { if (!len || !display) return; InputSetenv(buf); } static void SetenvFin2(buf, len, data) char *buf; int len; char *data; /* dummy */ { if (!len || !display) return; debug2("SetenvFin2: setenv '%s' '%s'\n", setenv_var, buf); xsetenv(setenv_var, buf); MakeNewEnv(); } static void InputSetenv(arg) char *arg; { static char setenv_buf[50 + sizeof(setenv_var)]; /* need to be static here, cannot be freed */ if (arg) { strncpy(setenv_var, arg, sizeof(setenv_var) - 1); sprintf(setenv_buf, "Enter value for %s: ", setenv_var); Input(setenv_buf, 30, INP_COOKED, SetenvFin2, NULL, 0); } else Input("Setenv: Enter variable name: ", 30, INP_COOKED, SetenvFin1, NULL, 0); } /* * the following options are understood by this parser: * -f, -f0, -f1, -fy, -fa * -t title, -T terminal-type, -h height-of-scrollback, * -ln, -l0, -ly, -l1, -l * -a, -M, -L */ void DoScreen(fn, av) char *fn, **av; { struct NewWindow nwin; register int num; char buf[20]; nwin = nwin_undef; while (av && *av && av[0][0] == '-') { if (av[0][1] == '-') { av++; break; } switch (av[0][1]) { case 'f': switch (av[0][2]) { case 'n': case '0': nwin.flowflag = FLOW_NOW * 0; break; case 'y': case '1': case '\0': nwin.flowflag = FLOW_NOW * 1; break; case 'a': nwin.flowflag = FLOW_AUTOFLAG; break; default: break; } break; case 't': /* no more -k */ if (av[0][2]) nwin.aka = &av[0][2]; else if (*++av) nwin.aka = *av; else --av; break; case 'T': if (av[0][2]) nwin.term = &av[0][2]; else if (*++av) nwin.term = *av; else --av; break; case 'h': if (av[0][2]) nwin.histheight = atoi(av[0] + 2); else if (*++av) nwin.histheight = atoi(*av); else --av; break; #ifdef LOGOUTOK case 'l': switch (av[0][2]) { case 'n': case '0': nwin.lflag = 0; break; case 'y': case '1': case '\0': nwin.lflag = 1; break; case 'a': nwin.lflag = 3; break; default: break; } break; #endif case 'a': nwin.aflag = 1; break; case 'M': nwin.monitor = MON_ON; break; case 'L': nwin.Lflag = 1; break; default: Msg(0, "%s: screen: invalid option -%c.", fn, av[0][1]); break; } ++av; } if (av && *av && IsNumColon(*av, 10, buf, sizeof(buf))) { if (*buf != '\0') nwin.aka = buf; num = atoi(*av); if (num < 0 || (maxwin && num > maxwin - 1) || (!maxwin && num > MAXWIN - 1)) { Msg(0, "%s: illegal screen number %d.", fn, num); num = 0; } nwin.StartAt = num; ++av; } if (av && *av) { nwin.args = av; if (!nwin.aka) nwin.aka = Filename(*av); } MakeWindow(&nwin); } #ifdef COPY_PASTE /* * CompileKeys must be called before Markroutine is first used. * to initialise the keys with defaults, call CompileKeys(NULL, mark_key_tab); * * s is an ascii string in a termcap-like syntax. It looks like * "j=u:k=d:l=r:h=l: =.:" and so on... * this example rebinds the cursormovement to the keys u (up), d (down), * l (left), r (right). placing a mark will now be done with ".". */ int CompileKeys(s, sl, array) char *s; int sl; unsigned char *array; { int i; unsigned char key, value; if (sl == 0) { for (i = 0; i < 256; i++) array[i] = i; return 0; } debug1("CompileKeys: '%s'\n", s); while (sl) { key = *(unsigned char *)s++; if (*s != '=' || sl < 3) return -1; sl--; do { s++; sl -= 2; value = *(unsigned char *)s++; array[value] = key; } while (*s == '=' && sl >= 2); if (sl == 0) break; if (*s++ != ':') return -1; sl--; } return 0; } #endif /* COPY_PASTE */ /* * Asynchronous input functions */ #if defined(DETACH) && defined(POW_DETACH) static void pow_detach_fn(buf, len, data) char *buf; int len; char *data; /* dummy */ { debug("pow_detach_fn called\n"); if (len) { memset(buf, 0, len); return; } if (ktab[(int)(unsigned char)*buf].nr != RC_POW_DETACH) { if (display) write(D_userfd, "\007", 1); Msg(0, "Detach aborted."); } else Detach(D_POWER); } #endif /* POW_DETACH */ #ifdef COPY_PASTE static void copy_reg_fn(buf, len, data) char *buf; int len; char *data; /* dummy */ { struct plop *pp = plop_tab + (int)(unsigned char)*buf; if (len) { memset(buf, 0, len); return; } if (pp->buf) free(pp->buf); pp->buf = 0; pp->len = 0; if (D_user->u_plop.len) { if ((pp->buf = (char *)malloc(D_user->u_plop.len)) == NULL) { Msg(0, "%s", strnomem); return; } bcopy(D_user->u_plop.buf, pp->buf, D_user->u_plop.len); } pp->len = D_user->u_plop.len; #ifdef ENCODINGS pp->enc = D_user->u_plop.enc; #endif Msg(0, "Copied %d characters into register %c", D_user->u_plop.len, *buf); } static void ins_reg_fn(buf, len, data) char *buf; int len; char *data; /* dummy */ { struct plop *pp = plop_tab + (int)(unsigned char)*buf; if (len) { memset(buf, 0, len); return; } if (!fore) return; /* Input() should not call us w/o fore, but you never know... */ if (*buf == '.') Msg(0, "ins_reg_fn: Warning: pasting real register '.'!"); if (pp->buf) { MakePaster(&fore->w_paster, pp->buf, pp->len, 0); return; } Msg(0, "Empty register."); } #endif /* COPY_PASTE */ static void process_fn(buf, len, data) char *buf; int len; char *data; /* dummy */ { struct plop *pp = plop_tab + (int)(unsigned char)*buf; if (len) { memset(buf, 0, len); return; } if (pp->buf) { ProcessInput(pp->buf, pp->len); return; } Msg(0, "Empty register."); } static void confirm_fn(buf, len, data) char *buf; int len; char *data; { struct action act; if (len || (*buf != 'y' && *buf != 'Y')) { memset(buf, 0, len); return; } act.nr = *(int *)data; act.args = noargs; act.argl = 0; act.quiet = 0; DoAction(&act, -1); } #ifdef MULTIUSER struct inputsu { struct acluser **up; char name[24]; char pw1[130]; /* FreeBSD crypts to 128 bytes */ char pw2[130]; }; static void su_fin(buf, len, data) char *buf; int len; char *data; { struct inputsu *i = (struct inputsu *)data; char *p; int l; if (!*i->name) { p = i->name; l = sizeof(i->name) - 1; } else if (!*i->pw1) { strcpy(p = i->pw1, "\377"); l = sizeof(i->pw1) - 1; } else { strcpy(p = i->pw2, "\377"); l = sizeof(i->pw2) - 1; } if (buf && len) strncpy(p, buf, 1 + ((l < len) ? l : len)); if (!*i->name) Input("Screen User: ", sizeof(i->name) - 1, INP_COOKED, su_fin, (char *)i, 0); else if (!*i->pw1) Input("User's UNIX Password: ", sizeof(i->pw1)-1, INP_COOKED|INP_NOECHO, su_fin, (char *)i, 0); else if (!*i->pw2) Input("User's Screen Password: ", sizeof(i->pw2)-1, INP_COOKED|INP_NOECHO, su_fin, (char *)i, 0); else { if ((p = DoSu(i->up, i->name, i->pw2, i->pw1))) Msg(0, "%s", p); free((char *)i); } } static int InputSu(w, up, name) struct win *w; struct acluser **up; char *name; { struct inputsu *i; if (!(i = (struct inputsu *)calloc(1, sizeof(struct inputsu)))) return -1; i->up = up; if (name && *name) su_fin(name, (int)strlen(name), (char *)i); /* can also initialise stuff */ else su_fin((char *)0, 0, (char *)i); return 0; } #endif /* MULTIUSER */ #ifdef PASSWORD static void pass1(buf, len, data) char *buf; int len; char *data; { struct acluser *u = (struct acluser *)data; if (!*buf) return; ASSERT(u); if (u->u_password != NullStr) free((char *)u->u_password); u->u_password = SaveStr(buf); bzero(buf, strlen(buf)); Input("Retype new password:", 100, INP_NOECHO, pass2, data, 0); } static void pass2(buf, len, data) char *buf; int len; char *data; { int st; char salt[3]; struct acluser *u = (struct acluser *)data; ASSERT(u); if (!buf || strcmp(u->u_password, buf)) { Msg(0, "[ Passwords don't match - checking turned off ]"); if (u->u_password != NullStr) { bzero(u->u_password, strlen(u->u_password)); free((char *)u->u_password); } u->u_password = NullStr; } else if (u->u_password[0] == '\0') { Msg(0, "[ No password - no secure ]"); if (buf) bzero(buf, strlen(buf)); } if (u->u_password != NullStr) { for (st = 0; st < 2; st++) salt[st] = 'A' + (int)((time(0) >> 6 * st) % 26); salt[2] = 0; buf = crypt(u->u_password, salt); bzero(u->u_password, strlen(u->u_password)); free((char *)u->u_password); if (!buf) { Msg(0, "[ crypt() error - no secure ]"); u->u_password = NullStr; return; } u->u_password = SaveStr(buf); bzero(buf, strlen(buf)); #ifdef COPY_PASTE if (u->u_plop.buf) UserFreeCopyBuffer(u); u->u_plop.len = strlen(u->u_password); # ifdef ENCODINGS u->u_plop.enc = 0; #endif if (!(u->u_plop.buf = SaveStr(u->u_password))) { Msg(0, "%s", strnomem); D_user->u_plop.len = 0; } else Msg(0, "[ Password moved into copybuffer ]"); #else /* COPY_PASTE */ Msg(0, "[ Crypted password is \"%s\" ]", u->u_password); #endif /* COPY_PASTE */ } } #endif /* PASSWORD */ static int digraph_find(buf) const char *buf; { int i; for (i = 0; i < MAX_DIGRAPH && digraphs[i].d[0]; i++) if ((digraphs[i].d[0] == (unsigned char)buf[0] && digraphs[i].d[1] == (unsigned char)buf[1]) || (digraphs[i].d[0] == (unsigned char)buf[1] && digraphs[i].d[1] == (unsigned char)buf[0])) break; return i; } static void digraph_fn(buf, len, data) char *buf; int len; char *data; /* dummy */ { int ch, i, x; ch = buf[len]; if (ch) { buf[len + 1] = ch; /* so we can restore it later */ if (ch < ' ' || ch == '\177') return; if (len >= 1 && ((*buf == 'U' && buf[1] == '+') || (*buf == '0' && (buf[1] == 'x' || buf[1] == 'X')))) { if (len == 1) return; if ((ch < '0' || ch > '9') && (ch < 'a' || ch > 'f') && (ch < 'A' || ch > 'F')) { buf[len] = '\034'; /* ^] is ignored by Input() */ return; } if (len == (*buf == 'U' ? 5 : 3)) buf[len] = '\n'; return; } if (len && *buf == '0') { if (ch < '0' || ch > '7') { buf[len] = '\034'; /* ^] is ignored by Input() */ return; } if (len == 3) buf[len] = '\n'; return; } if (len == 1) buf[len] = '\n'; return; } if (len < 1) return; if (buf[len + 1]) { buf[len] = buf[len + 1]; /* stored above */ len++; } if (len < 2) return; if (!parse_input_int(buf, len, &x)) { i = digraph_find(buf); if ((x = digraphs[i].value) <= 0) { Msg(0, "Unknown digraph"); return; } } i = 1; *buf = x; #ifdef UTF8 if (flayer->l_encoding == UTF8) i = ToUtf8(buf, x); /* buf is big enough for all UTF-8 codes */ #endif while(i) LayProcess(&buf, &i); } #ifdef MAPKEYS int StuffKey(i) int i; { struct action *act; int discard = 0; int keyno = i; debug1("StuffKey #%d", i); #ifdef DEBUG if (i < KMAP_KEYS) debug1(" - %s", term[i + T_CAPS].tcname); #endif if (i < KMAP_KEYS && D_ESCseen) { struct action *act = &D_ESCseen[i + 256]; if (act->nr != RC_ILLEGAL) { D_ESCseen = 0; WindowChanged(fore, 'E'); DoAction(act, i + 256); return 0; } discard = 1; } if (i >= T_CURSOR - T_CAPS && i < T_KEYPAD - T_CAPS && D_cursorkeys) i += T_OCAPS - T_CURSOR; else if (i >= T_KEYPAD - T_CAPS && i < T_OCAPS - T_CAPS && D_keypad) i += T_OCAPS - T_CURSOR; debug1(" - action %d\n", i); flayer = D_forecv->c_layer; fore = D_fore; act = 0; #ifdef COPY_PASTE if (flayer && flayer->l_mode == 1) act = i < KMAP_KEYS+KMAP_AKEYS ? &mmtab[i] : &kmap_exts[i - (KMAP_KEYS+KMAP_AKEYS)].mm; #endif if ((!act || act->nr == RC_ILLEGAL) && !D_mapdefault) act = i < KMAP_KEYS+KMAP_AKEYS ? &umtab[i] : &kmap_exts[i - (KMAP_KEYS+KMAP_AKEYS)].um; if (!act || act->nr == RC_ILLEGAL) act = i < KMAP_KEYS+KMAP_AKEYS ? &dmtab[i] : &kmap_exts[i - (KMAP_KEYS+KMAP_AKEYS)].dm; if (discard && (!act || act->nr != RC_COMMAND)) { /* if the input was just a single byte we let it through */ if (D_tcs[keyno + T_CAPS].str && strlen(D_tcs[keyno + T_CAPS].str) == 1) return -1; if (D_ESCseen) { D_ESCseen = 0; WindowChanged(fore, 'E'); } return 0; } D_mapdefault = 0; if (act == 0 || act->nr == RC_ILLEGAL) return -1; DoAction(act, 0); return 0; } #endif static int IsOnDisplay(wi) struct win *wi; { struct canvas *cv; ASSERT(display); for (cv = D_cvlist; cv; cv = cv->c_next) if (Layer2Window(cv->c_layer) == wi) return 1; return 0; } struct win * FindNiceWindow(wi, presel) struct win *wi; char *presel; { int i; debug2("FindNiceWindow %d %s\n", wi ? wi->w_number : -1 , presel ? presel : "NULL"); if (presel) { i = WindowByNoN(presel); if (i >= 0) wi = wtab[i]; } if (!display) return wi; #ifdef MULTIUSER if (wi && AclCheckPermWin(D_user, ACL_READ, wi)) wi = 0; #endif if (!wi || (IsOnDisplay(wi) && !presel)) { /* try to get another window */ wi = 0; #ifdef MULTIUSER for (wi = windows; wi; wi = wi->w_next) if (!wi->w_layer.l_cvlist && !AclCheckPermWin(D_user, ACL_WRITE, wi)) break; if (!wi) for (wi = windows; wi; wi = wi->w_next) if (wi->w_layer.l_cvlist && !IsOnDisplay(wi) && !AclCheckPermWin(D_user, ACL_WRITE, wi)) break; if (!wi) for (wi = windows; wi; wi = wi->w_next) if (!wi->w_layer.l_cvlist && !AclCheckPermWin(D_user, ACL_READ, wi)) break; if (!wi) for (wi = windows; wi; wi = wi->w_next) if (wi->w_layer.l_cvlist && !IsOnDisplay(wi) && !AclCheckPermWin(D_user, ACL_READ, wi)) break; #endif if (!wi) for (wi = windows; wi; wi = wi->w_next) if (!wi->w_layer.l_cvlist) break; if (!wi) for (wi = windows; wi; wi = wi->w_next) if (wi->w_layer.l_cvlist && !IsOnDisplay(wi)) break; } #ifdef MULTIUSER if (wi && AclCheckPermWin(D_user, ACL_READ, wi)) wi = 0; #endif return wi; } #if 0 /* sorted list of all commands */ static struct comm **commtab; static int ncommtab; void AddComms(cos, hand) struct comm *cos; void (*hand) __P((struct comm *, char **, int)); { int n, i, j, r; for (n = 0; cos[n].name; n++) ; if (n == 0) return; if (commtab) commtab = (struct commt *)realloc(commtab, sizeof(*commtab) * (ncommtab + n)); else commtab = (struct commt *)malloc(sizeof(*commtab) * (ncommtab + n)); if (!commtab) Panic(0, strnomem); for (i = 0; i < n; i++) { for (j = 0; j < ncommtab; j++) { r = strcmp(cos[i].name, commtab[j]->name); if (r == 0) Panic(0, "Duplicate command: %s\n", cos[i].name); if (r < 0) break; } for (r = ncommtab; r > j; r--) commtab[r] = commtab[r - 1]; commtab[j] = cos + i; cos[i].handler = hand; bzero(cos[i].userbits, sizeof(cos[i].userbits)); ncommtab++; } } struct comm * FindComm(str) char *str; { int x, m, l = 0, r = ncommtab - 1; while (l <= r) { m = (l + r) / 2; x = strcmp(str, commtab[m]->name); if (x > 0) l = m + 1; else if (x < 0) r = m - 1; else return commtab[m]; } return 0; } #endif static int CalcSlicePercent(cv, percent) struct canvas *cv; int percent; { int w, wsum, up; if (!cv || !cv->c_slback) return percent; up = CalcSlicePercent(cv->c_slback->c_slback, percent); w = cv->c_slweight; for (cv = cv->c_slback->c_slperp, wsum = 0; cv; cv = cv->c_slnext) wsum += cv->c_slweight; if (wsum == 0) return 0; return (up * w) / wsum; } static int ChangeCanvasSize(fcv, abs, diff, gflag, percent) struct canvas *fcv; /* make this canvas bigger */ int abs; /* mode: 0:rel 1:abs 2:max */ int diff; /* change this much */ int gflag; /* go up if neccessary */ int percent; { struct canvas *cv; int done, have, m, dir; debug3("ChangeCanvasSize abs %d diff %d percent=%d\n", abs, diff, percent); if (abs == 0 && diff == 0) return 0; if (abs == 2) { if (diff == 0) fcv->c_slweight = 0; else { for (cv = fcv->c_slback->c_slperp; cv; cv = cv->c_slnext) cv->c_slweight = 0; fcv->c_slweight = 1; cv = fcv->c_slback->c_slback; if (gflag && cv && cv->c_slback) ChangeCanvasSize(cv, abs, diff, gflag, percent); } return diff; } if (abs) { if (diff < 0) diff = 0; if (percent && diff > percent) diff = percent; } if (percent) { int wsum, up; for (cv = fcv->c_slback->c_slperp, wsum = 0; cv; cv = cv->c_slnext) wsum += cv->c_slweight; if (wsum) { up = gflag ? CalcSlicePercent(fcv->c_slback->c_slback, percent) : percent; debug3("up=%d, wsum=%d percent=%d\n", up, wsum, percent); if (wsum < 1000) { int scale = wsum < 10 ? 1000 : 100; for (cv = fcv->c_slback->c_slperp; cv; cv = cv->c_slnext) cv->c_slweight *= scale; wsum *= scale; debug1("scaled wsum to %d\n", wsum); } for (cv = fcv->c_slback->c_slperp; cv; cv = cv->c_slnext) { if (cv->c_slweight) { cv->c_slweight = (cv->c_slweight * up) / percent; if (cv->c_slweight == 0) cv->c_slweight = 1; } debug1(" - weight %d\n", cv->c_slweight); } diff = (diff * wsum) / percent; percent = wsum; } } else { if (abs && diff == (fcv->c_slorient == SLICE_VERT ? fcv->c_ye - fcv->c_ys + 2 : fcv->c_xe - fcv->c_xs + 2)) return 0; /* fix weights to real size (can't be helped, sorry) */ for (cv = fcv->c_slback->c_slperp; cv; cv = cv->c_slnext) { cv->c_slweight = cv->c_slorient == SLICE_VERT ? cv->c_ye - cv->c_ys + 2 : cv->c_xe - cv->c_xs + 2; debug1(" - weight %d\n", cv->c_slweight); } } if (abs) diff = diff - fcv->c_slweight; debug1("diff = %d\n", diff); if (diff == 0) return 0; if (diff < 0) { cv = fcv->c_slnext ? fcv->c_slnext : fcv->c_slprev; fcv->c_slweight += diff; cv->c_slweight -= diff; return diff; } done = 0; dir = 1; for (cv = fcv->c_slnext; diff > 0; cv = dir > 0 ? cv->c_slnext : cv->c_slprev) { if (!cv) { debug1("reached end, dir is %d\n", dir); if (dir == -1) break; dir = -1; cv = fcv; continue; } if (percent) m = 1; else m = cv->c_slperp ? CountCanvasPerp(cv) * 2 : 2; debug2("min is %d, have %d\n", m, cv->c_slweight); if (cv->c_slweight > m) { have = cv->c_slweight - m; if (have > diff) have = diff; debug1("subtract %d\n", have); cv->c_slweight -= have; done += have; diff -= have; } } if (diff && gflag) { /* need more room! */ cv = fcv->c_slback->c_slback; if (cv && cv->c_slback) done += ChangeCanvasSize(fcv->c_slback->c_slback, 0, diff, gflag, percent); } fcv->c_slweight += done; debug1("ChangeCanvasSize returns %d\n", done); return done; } static void ResizeRegions(arg, flags) char *arg; int flags; { struct canvas *cv; int diff, l; int gflag = 0, abs = 0, percent = 0; int orient = 0; ASSERT(display); if (!*arg) return; if (D_forecv->c_slorient == SLICE_UNKN) { Msg(0, "resize: need more than one region"); return; } gflag = flags & RESIZE_FLAG_L ? 0 : 1; orient |= flags & RESIZE_FLAG_H ? SLICE_HORI : 0; orient |= flags & RESIZE_FLAG_V ? SLICE_VERT : 0; if (orient == 0) orient = D_forecv->c_slorient; l = strlen(arg); if (*arg == '=') { /* make all regions the same height */ struct canvas *cv = gflag ? &D_canvas : D_forecv->c_slback; if (cv->c_slperp->c_slorient & orient) EqualizeCanvas(cv->c_slperp, gflag); /* can't use cv->c_slorient directly as it can be D_canvas */ if ((cv->c_slperp->c_slorient ^ (SLICE_HORI ^ SLICE_VERT)) & orient) { if (cv->c_slback) { cv = cv->c_slback; EqualizeCanvas(cv->c_slperp, gflag); } else EqualizeCanvas(cv, gflag); } ResizeCanvas(cv); RecreateCanvasChain(); RethinkDisplayViewports(); ResizeLayersToCanvases(); return; } if (!strcmp(arg, "min") || !strcmp(arg, "0")) { abs = 2; diff = 0; } else if (!strcmp(arg, "max") || !strcmp(arg, "_")) { abs = 2; diff = 1; } else { if (l > 0 && arg[l - 1] == '%') percent = 1000; if (*arg == '+') diff = atoi(arg + 1); else if (*arg == '-') diff = -atoi(arg + 1); else { diff = atoi(arg); /* +1 because of caption line */ if (diff < 0) diff = 0; abs = diff == 0 ? 2 : 1; } } if (!abs && !diff) return; if (percent) diff = diff * percent / 100; cv = D_forecv; if (cv->c_slorient & orient) ChangeCanvasSize(cv, abs, diff, gflag, percent); if (cv->c_slback->c_slorient & orient) ChangeCanvasSize(cv->c_slback, abs, diff, gflag, percent); ResizeCanvas(&D_canvas); RecreateCanvasChain(); RethinkDisplayViewports(); ResizeLayersToCanvases(); return; #if 0 if (siz + diff < 1) diff = 1 - siz; if (siz + diff > dsize - (nreg - 1) * 2 - 1) diff = dsize - (nreg - 1) * 2 - 1 - siz; if (diff == 0 || siz + diff < 1) return; if (diff < 0) { if (D_forecv->c_next) { D_forecv->c_ye += diff; D_forecv->c_next->c_ys += diff; D_forecv->c_next->c_yoff += diff; } else { for (cv = D_cvlist; cv; cv = cv->c_next) if (cv->c_next == D_forecv) break; ASSERT(cv); cv->c_ye -= diff; D_forecv->c_ys -= diff; D_forecv->c_yoff -= diff; } } else { int s, i = 0, found = 0, di = diff, d2; s = dsize - (nreg - 1) * 2 - 1 - siz; for (cv = D_cvlist; cv; i = cv->c_ye + 2, cv = cv->c_next) { if (cv == D_forecv) { cv->c_ye = i + (cv->c_ye - cv->c_ys) + diff; cv->c_yoff -= cv->c_ys - i; cv->c_ys = i; found = 1; continue; } s -= cv->c_ye - cv->c_ys; if (!found) { if (s >= di) continue; d2 = di - s; } else d2 = di > cv->c_ye - cv->c_ys ? cv->c_ye - cv->c_ys : di; di -= d2; cv->c_ye = i + (cv->c_ye - cv->c_ys) - d2; cv->c_yoff -= cv->c_ys - i; cv->c_ys = i; } } RethinkDisplayViewports(); ResizeLayersToCanvases(); #endif } static void ResizeFin(buf, len, data) char *buf; int len; char *data; { int ch; int flags = *(int *)data; ch = ((unsigned char *)buf)[len]; if (ch == 0) { ResizeRegions(buf, flags); return; } if (ch == 'h') flags ^= RESIZE_FLAG_H; else if (ch == 'v') flags ^= RESIZE_FLAG_V; else if (ch == 'b') flags |= RESIZE_FLAG_H|RESIZE_FLAG_V; else if (ch == 'p') flags ^= D_forecv->c_slorient == SLICE_VERT ? RESIZE_FLAG_H : RESIZE_FLAG_V; else if (ch == 'l') flags ^= RESIZE_FLAG_L; else return; inp_setprompt(resizeprompts[flags], NULL); *(int *)data = flags; buf[len] = '\034'; } void SetForeCanvas(d, cv) struct display *d; struct canvas *cv; { struct display *odisplay = display; if (d->d_forecv == cv) return; display = d; D_forecv = cv; if ((focusminwidth && (focusminwidth < 0 || D_forecv->c_xe - D_forecv->c_xs + 1 < focusminwidth)) || (focusminheight && (focusminheight < 0 || D_forecv->c_ye - D_forecv->c_ys + 1 < focusminheight))) { ResizeCanvas(&D_canvas); RecreateCanvasChain(); RethinkDisplayViewports(); ResizeLayersToCanvases(); /* redisplays */ } fore = D_fore = Layer2Window(D_forecv->c_layer); if (D_other == fore) D_other = 0; flayer = D_forecv->c_layer; #ifdef RXVT_OSC if (D_xtermosc[2] || D_xtermosc[3]) { Activate(-1); } else #endif { RefreshHStatus(); #ifdef RXVT_OSC RefreshXtermOSC(); #endif flayer = D_forecv->c_layer; CV_CALL(D_forecv, LayRestore();LaySetCursor()); WindowChanged(0, 'F'); } display = odisplay; } #ifdef RXVT_OSC void RefreshXtermOSC() { int i; struct win *p; p = Layer2Window(D_forecv->c_layer); for (i = 4; i >=0; i--) SetXtermOSC(i, p ? p->w_xtermosc[i] : 0, "\a"); } #endif int ParseAttrColor(s1, s2, msgok) char *s1, *s2; int msgok; { int i, n; char *s, *ss; int r = 0; s = s1; while (*s == ' ') s++; ss = s; while (*ss && *ss != ' ') ss++; while (*ss == ' ') ss++; if (*s && (s2 || *ss || !((*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'Z') || *s == '.'))) { int mode = 0, n = 0; if (*s == '+') { mode = 1; s++; } else if (*s == '-') { mode = -1; s++; } else if (*s == '!') { mode = 2; s++; } else if (*s == '=') s++; if (*s >= '0' && *s <= '9') { n = *s++ - '0'; if (*s >= '0' && *s <= '9') n = n * 16 + (*s++ - '0'); else if (*s >= 'a' && *s <= 'f') n = n * 16 + (*s++ - ('a' - 10)); else if (*s >= 'A' && *s <= 'F') n = n * 16 + (*s++ - ('A' - 10)); else if (*s && *s != ' ') { if (msgok) Msg(0, "Illegal attribute hexchar '%c'", *s); return -1; } } else { while (*s && *s != ' ') { if (*s == 'd') n |= A_DI; else if (*s == 'u') n |= A_US; else if (*s == 'b') n |= A_BD; else if (*s == 'r') n |= A_RV; else if (*s == 's') n |= A_SO; else if (*s == 'B') n |= A_BL; else { if (msgok) Msg(0, "Illegal attribute specifier '%c'", *s); return -1; } s++; } } if (*s && *s != ' ') { if (msgok) Msg(0, "junk after attribute description: '%c'", *s); return -1; } if (mode == -1) r = n << 8 | n; else if (mode == 1) r = n << 8; else if (mode == 2) r = n; else if (mode == 0) r = 0xffff ^ n; } while (*s && *s == ' ') s++; if (s2) { if (*s) { if (msgok) Msg(0, "junk after description: '%c'", *s); return -1; } s = s2; while (*s && *s == ' ') s++; } #ifdef COLOR if (*s) { static char costr[] = "krgybmcw d i.01234567 9 f FKRGYBMCW I "; int numco = 0, j; n = 0; if (*s == '.') { numco++; n = 0x0f; s++; } for (j = 0; j < 2 && *s && *s != ' '; j++) { for (i = 0; costr[i]; i++) if (*s == costr[i]) break; if (!costr[i]) { if (msgok) Msg(0, "illegal color descriptor: '%c'", *s); return -1; } numco++; n = n << 4 | (i & 15); #ifdef COLORS16 if (i >= 48) n = (n & 0x20ff) | 0x200; #endif s++; } if ((n & 0xf00) == 0xf00) n ^= 0xf00; /* clear superflous bits */ #ifdef COLORS16 if (n & 0x2000) n ^= 0x2400; /* shift bit into right position */ #endif if (numco == 1) n |= 0xf0; /* don't change bg color */ if (numco != 2 && n != 0xff) n |= 0x100; /* special invert mode */ if (*s && *s != ' ') { if (msgok) Msg(0, "junk after color description: '%c'", *s); return -1; } n ^= 0xff; r |= n << 16; } #endif while (*s && *s == ' ') s++; if (*s) { if (msgok) Msg(0, "junk after description: '%c'", *s); return -1; } debug1("ParseAttrColor %06x\n", r); return r; } /* * Color coding: * 0-7 normal colors * 9 default color * e just set intensity * f don't change anything * Intensity is encoded into bits 17(fg) and 18(bg). */ void ApplyAttrColor(i, mc) int i; struct mchar *mc; { debug1("ApplyAttrColor %06x\n", i); mc->attr |= i >> 8 & 255; mc->attr ^= i & 255; #ifdef COLOR i = (i >> 16) ^ 0xff; if ((i & 0x100) != 0) { i &= 0xeff; if (mc->attr & (A_SO|A_RV)) # ifdef COLORS16 i = ((i & 0x0f) << 4) | ((i & 0xf0) >> 4) | ((i & 0x200) << 1) | ((i & 0x400) >> 1); # else i = ((i & 0x0f) << 4) | ((i & 0xf0) >> 4); # endif } # ifdef COLORS16 if ((i & 0x0f) != 0x0f) mc->attr = (mc->attr & 0xbf) | ((i >> 3) & 0x40); if ((i & 0xf0) != 0xf0) mc->attr = (mc->attr & 0x7f) | ((i >> 3) & 0x80); # endif mc->color = 0x99 ^ mc->color; if ((i & 0x0e) == 0x0e) i = (i & 0xf0) | (mc->color & 0x0f); if ((i & 0xe0) == 0xe0) i = (i & 0x0f) | (mc->color & 0xf0); mc->color = 0x99 ^ i; debug2("ApplyAttrColor - %02x %02x\n", mc->attr, i); #endif } screen-4.9.1/loadav.c0000664000175000017500000001776414467014146013112 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include #ifdef ultrix # include #endif /* mach stuff included here to prevent index macro conflict */ #ifdef NeXT # include # if KERNEL_MAJOR_VERSION > 2 # include # else # include # endif #endif #ifdef _AIX #include extern int getkerninfo(int op, char *buf, int *buf_size, int32long64_t arg); #endif #include "config.h" #include "screen.h" #include "extern.h" #ifdef LOADAV static int GetLoadav __P((void)); static LOADAV_TYPE loadav[LOADAV_NUM]; static int loadok; /***************************************************************/ #if defined(linux) && !defined(LOADAV_DONE) #define LOADAV_DONE /* * This is the easy way. It relies in /proc being mounted. * For the big and ugly way refer to previous screen version. */ void InitLoadav() { loadok = 1; } static int GetLoadav() { FILE *fp; char buf[128], *s; int i; double d, e; if ((fp = secfopen("/proc/loadavg", "r")) == NULL) return 0; *buf = 0; fgets(buf, sizeof(buf), fp); fclose(fp); /* can't use fscanf because the decimal point symbol depends on * the locale but the kernel uses always '.'. */ s = buf; for (i = 0; i < (LOADAV_NUM > 3 ? 3 : LOADAV_NUM); i++) { d = e = 0; while(*s == ' ') s++; if (*s == 0) break; for(;;) { if (*s == '.') e = 1; else if (*s >= '0' && *s <= '9') { d = d * 10 + (*s - '0'); if (e) e *= 10; } else break; s++; } loadav[i] = e ? d / e : d; } return i; } #endif /* linux */ /***************************************************************/ #if defined(LOADAV_GETLOADAVG) && !defined(LOADAV_DONE) #define LOADAV_DONE void InitLoadav() { loadok = 1; } static int GetLoadav() { return getloadavg(loadav, LOADAV_NUM); } #endif /***************************************************************/ #if defined(apollo) && !defined(LOADAV_DONE) #define LOADAV_DONE void InitLoadav() { loadok = 1; } static int GetLoadav() { proc1_$get_loadav(loadav); return LOADAV_NUM; } #endif /***************************************************************/ #if defined(NeXT) && !defined(LOADAV_DONE) #define LOADAV_DONE static processor_set_t default_set; void InitLoadav() { kern_return_t error; error = processor_set_default(host_self(), &default_set); if (error != KERN_SUCCESS) mach_error("Error calling processor_set_default", error); else loadok = 1; } static int GetLoadav() { unsigned int info_count; struct processor_set_basic_info info; host_t host; info_count = PROCESSOR_SET_BASIC_INFO_COUNT; if (processor_set_info(default_set, PROCESSOR_SET_BASIC_INFO, &host, (processor_set_info_t)&info, &info_count) != KERN_SUCCESS) return 0; loadav[0] = (float)info.load_average / LOAD_SCALE; return 1; } #endif /***************************************************************/ #if defined(sun) && defined(SVR4) && !defined(LOADAV_DONE) #define LOADAV_DONE #include static kstat_ctl_t *kc; void InitLoadav() { loadok = (kc = kstat_open()) != 0; } static int GetLoadav() { kstat_t *ks; kstat_named_t *avgs[3]; int i; kstat_chain_update(kc); if ((ks = kstat_lookup(kc, "unix", -1, "system_misc")) == 0 || kstat_read(kc, ks, (void *)0) == -1) return (loadok = 0); avgs[0] = kstat_data_lookup(ks, "avenrun_1min"); avgs[1] = kstat_data_lookup(ks, "avenrun_5min"); avgs[2] = kstat_data_lookup(ks, "avenrun_15min"); for (i = 0; i < 3; i++) { if (avgs[i] == 0 || avgs[i]->data_type != KSTAT_DATA_ULONG) return (loadok = 0); loadav[i] = avgs[i]->value.ul; } return 3; } #endif /***************************************************************/ #if defined(__osf__) && defined(__alpha) && !defined(LOADAV_DONE) #define LOADAV_DONE struct rtentry; struct mbuf; /* shut up gcc on OSF/1 4.0 */ #include void InitLoadav() { loadok = 1; } static int GetLoadav() { struct tbl_loadavg tbl; int i; if (table(TBL_LOADAVG, 0, &tbl, 1, sizeof(struct tbl_loadavg)) != 1) return 0; if (tbl.tl_lscale) { /* in long */ for (i = 0; i < LOADAV_NUM; i++) loadav[i] = (double) tbl.tl_avenrun.l[i] / tbl.tl_lscale; } else { /* in double */ for (i = 0; i < LOADAV_NUM; i++) loadav[i] = tbl.tl_avenrun.d[i]; } return LOADAV_NUM; } #endif /***************************************************************/ #if defined(_AIX) && !defined(LOADAV_DONE) #define LOADAV_DONE /* * AIX uses KINFO_GET_AVENRUN syscall */ void InitLoadav() { loadok = 1; } static int GetLoadav() { long long avenrun[3]; int avsize = 3 * sizeof(long long); int i; if (getkerninfo(KINFO_GET_AVENRUN, (char *)&avenrun, &avsize, 0) < 0) { return 0; } for (i = 0; i < (LOADAV_NUM > 3 ? 3 : LOADAV_NUM); i++) { loadav[i] = avenrun[i]; } return i; } #endif /* _AIX */ /***************************************************************/ #if !defined(LOADAV_DONE) /* * The old fashion way: open kernel and read avenrun * * Header File includes */ # ifdef NLIST_STRUCT # include # else # include # endif # ifndef NLIST_DECLARED extern int nlist __P((char *, struct nlist *)); # endif #ifdef LOADAV_USE_NLIST64 # define nlist nlist64 #endif static struct nlist nl[2]; static int kmemf; #ifdef _IBMR2 # define nlist(u,l) knlist(l,1,sizeof(*l)) #endif void InitLoadav() { debug("Init Kmem...\n"); if ((kmemf = open("/dev/kmem", O_RDONLY)) == -1) return; # if !defined(_AUX_SOURCE) && !defined(AUX) # ifdef NLIST_NAME_UNION nl[0].n_un.n_name = LOADAV_AVENRUN; # else nl[0].n_name = LOADAV_AVENRUN; # endif # else strncpy(nl[0].n_name, LOADAV_AVENRUN, sizeof(nl[0].n_name)); # endif debug2("Searching in %s for %s\n", LOADAV_UNIX, nl[0].n_name); nlist(LOADAV_UNIX, nl); if (nl[0].n_value == 0) { close(kmemf); return; } # if 0 /* no longer needed (Al.Smith@aeschi.ch.eu.org) */ # ifdef sgi nl[0].n_value &= (unsigned long)-1 >> 1; /* clear upper bit */ # endif /* sgi */ # endif debug1("AvenrunSym found (0x%lx)!!\n", nl[0].n_value); loadok = 1; } static int GetLoadav() { if (lseek(kmemf, (off_t) nl[0].n_value, 0) == (off_t)-1) return 0; if (read(kmemf, (char *) loadav, sizeof(loadav)) != sizeof(loadav)) return 0; return LOADAV_NUM; } #endif /***************************************************************/ #ifndef FIX_TO_DBL #define FIX_TO_DBL(l) ((double)(l) / LOADAV_SCALE) #endif void AddLoadav(p) char *p; { int i, j; if (loadok == 0) return; j = GetLoadav(); for (i = 0; i < j; i++) { sprintf(p, " %2.2f" + !i, FIX_TO_DBL(loadav[i])); p += strlen(p); } } #endif /* LOADAV */ screen-4.9.1/mark.h0000664000175000017500000000455614467014146012576 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ struct markdata { struct win *md_window;/* pointer to window we are working on */ struct acluser *md_user; /* The user who brought us up */ int cx, cy; /* cursor Position in WIN coords*/ int x1, y1; /* first mark in WIN coords */ int second; /* first mark dropped flag */ int left_mar, right_mar, nonl; int rep_cnt; /* number of repeats */ int append_mode; /* shall we overwrite or append to copybuffer */ int write_buffer; /* shall we do a KEY_WRITE_EXCHANGE right away? */ int hist_offset; /* how many lines are on top of the screen */ char isstr[100]; /* string we are searching for */ int isstrl; char isistr[200]; /* string of chars user has typed */ int isistrl; int isdir; /* current search direction */ int isstartpos; /* position where isearch was started */ int isstartdir; /* direction when isearch was started */ struct { /* bookkeeping for fFtT;, commands */ int flag, target, direction; } f_cmd; }; #define W2D(y) ((y) - markdata->hist_offset) #define D2W(y) ((y) + markdata->hist_offset) screen-4.9.1/.iscreenrc0000664000175000017500000001517014467014146013443 0ustar alexalex# # A sample .screenrc which I use for everyday work. # # some of the commands commented out here, have been moved to # /local/etc/screenrc # # we want no password, right? #password # This will ask us for a password. password none # Same as not even mentioning it. #password 12Bz/9hNlPLZk # "1234" #password YahtrWblnJw # ypmatch jnweiger passwd. Well, ... :-) scrollback 200 # we have a 200 lines history buffer markkeys "@=\177:@=^C" # our mad facit-twist terminal buffer overflow... markkeys "h=^B:l=^F:\$=^E" # some missing emacs style bindings in copymode echo -n "booting screen" # let it flash, not horn! #vbell on # "vbell" doesn't work any longer, sorry. #vbell_msg " Wuff, Wuff!! " # this is the default message #bell "Bimmmel No. %" # sounds the bell and shows a message # we want to login all windows we create. #login on # "login", "nologin" don't work any longer, sorry 2. echo -n "." # we have no termcap entry for screen on the target machine? Well then # we tell a lie. term screen # would be the obvious default here. #term vt100 # screen will understand vt100 for 99%. # we want to survive hangups # note that the default setting is off now! autodetach on # when we open a window, where shall its CWD be? chdir # without argument it's my $HOME echo -n "." # I hate nonexisting status lines! Force screen to believe me. #hardstatus off # now some Terminal setup: # Printing in the leftmost column is not save. We express that fact as :LP@: # # Emacs tends to smear it's highlighted status bar across the screen, producing # ugly areas of bright background, if termcap isn't perfectly sober. # Give a little :ms@: in the termcap, this may help. # # And who invented the initialisation for facit terminals? We tell him that # we don't like smooth scroll, by specifying :ti=\E[?l:. # \E[?3l 80 Zeichen # \E[?3h 132 Zeichen # LP Last column Printable # \E[A cursor up # \E[B cursor down # \E[?4h smooth scroll # \E[?4l jump scroll # \E[%dL insert %d lines # \E[K clear to end of line # cs \E[%i%d;%dr for twist and xterm # ms@ Move in Standout mode is NOT save. # WS our private variable, it declares that the terminal can # be resized by an escape-sequence # The termcap statement takes 2 or three parameters. First parameter lists # which TERMCAPs are affected by this statement. Second we specify changes # in screen's view of that terminals. Third we may specify some capabilities # that user-programs want to see in the $TERMCAP environment variable or in # screen's termcap entry. termcap vt* cl=\E[H\E[J\E[?1h:vi=\E[?35h:ve=\E[35l:ti=\E[?4l[vt100] termcap facit ti=\E[?4l[facit] termcap xterm* is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l:Z0=\E[?3h:Z1=\E[?3l echo -n "." # "\E(B", "\E(0", "\E(1", "\E(2", ... to switch between charsets. # screen internally emulates G1: "\E)..", G2: "\E*..", G3: "\E+.." # you can switch between them, with: # # code | switch to # ------+------ # ^O | G0 # ^N | G1 # \En | G2 # \Eo | G3 #termcap facit|vt100|xterm* G0 # how do we resize windows? under sunview, this is standard, but xterm # needs to be a specially hacked xterm, to make this work. termcap xterm* WS=\E[8;%d;%dt # ICL 6402 testing: termcap icl* G0:S0=\E$[start]:E0=\E%[end]:C0=j9kx5 GS=\E(0^O:GE=\E(B^O:G1=k:G2=l:G3=m:G4=j:GV=x:GH=q:GR=u:GL=t:GU=w:GD=v:GC=n # Flow control produces trouble. ^S und ^Q will never reach screen, as our # terminals catch them locally. Who can explain that to me?: #flow on|off|auto [interrupt] # Long lines get wrapped around (the back of your terminal). This is the # default for vt100. But now programs make different asumptions about your # terminal. You may find two linefeeds where you'd expect one, or you may # be confronted with a truncated line. Currently there is no fix, but pressing # C-A r and doing a redraw. #wrap on # the autoaka allows you to see the currently executing shell command in the # window name field. To use that, your shell prompt must contain ^[k^[\ or # you will see the string "(init)" as a name. # in my .cshrc I may use this for a wonderful tcsh-prompt: # set prompt="%{^[k^[\\%}%h %c2(%m)%# " # # defining a shellaka that contains a pipe-symbol (|) activates the # autoaka feature. To the left of that | you specify a constant part of # your prompt as a trigger, to the right you may place a default string # as in shellaka '> |tc' # but beware! specifying a window name with the -t option has priority over # the autoaka mechanism. Although specifying -t "> |foo" will work. # shellaka tc # ... now a little bit of key bindings # In case we don't have write permission for /etc/utmp (no s-bit) # we create even local windows via rlogin. -> Et voila: a utmp-slot # utmp-slots are strongly recommended to keep sccs and talk happy. # (thus we have ^A# or. ^Ac for window creation with or without utmp-slot.) # but if we run suid-root, we produce all the rlogins with -ln, # as nobody shall refer to these pty's. bind '!' screen -ln -k faui41 rlogin faui41 bind '@' screen -ln -k vme2 rlogin faui4_vme2 #bind '#' screen -k faui43 bind '#' screen -ln -k faui43 rlogin faui43 bind '$' screen -ln -k faui44 rlogin faui44 bind '%' screen -ln -k faui45 rlogin faui45 bind '\^' screen -ln -k sup1 rlogin fausup1 bind '&' screen -ln -k sup2 rlogin fausup2 bind '*' screen -ln -k faui48 rlogin faui48 bind '(' screen -ln -k faui09 rlogin faui09 bind ')' screen -ln -k faui10 rlogin faui10 bind 'J' screen -ln -k 4j rlogin faui4j bind 'P' screen -ln -k 4p rlogin faui4p bind '^C' screen -ln -k 45c rlogin faui45c bind '^D' screen -ln -k 45d rlogin faui45d bind '^E' screen -ln -k 45e rlogin faui45e bind '^I' screen -ln -k 45i rlogin faui45i # these two are logIn and logOut. As a toggle is too stupid. #bind 'I' set login on #bind 'O' set login off bind 'L' # What happens, when you 'think emacs' and want to erase a whole # line? You type ^A^K right? Under screen it should be ^Aa^K. But... # killing the window would be a real punishment for a little mistyping. bind k #wow! I even mange to type ^Ak by accident. #bind ^k #bind K kill echo -n "." #screen 1:faui43 # My good old : syntax #screen -k faui43 # The way Wayne Davison thinks about it. #screen -ln -k faui43 # this one not logged in. #screen -ln 2:faui09 rlogin faui09 -l jnweiger # Finally another bonus feature for people using strange terminal settings like # different baud rate, etc. The next user will get standard settings # as ^[c is a reset sequence. #pow_detach_msg "" # is the default pow_detach_msg "c" echo "done." screen-4.9.1/window.h0000664000175000017500000002562314467014146013151 0ustar alexalex/* Copyright (c) 2010 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #ifndef SCREEN_WINDOW_H #define SCREEN_WINDOW_H /* keep this in sync with the initialisations in window.c */ struct NewWindow { int StartAt; /* where to start the search for the slot */ char *aka; /* aka string */ char **args; /* argv vector */ char *dir; /* directory for chdir */ char *term; /* TERM to be set instead of "screen" */ int aflag; int dynamicaka; int flowflag; int lflag; int histheight; int monitor; int wlock; /* default writelock setting */ int silence; int wrap; int Lflag; /* logging */ int slow; /* inter character milliseconds */ int gr; int c1; int bce; int encoding; char *hstatus; char *charset; int poll_zombie_timeout; }; #ifdef PSEUDOS struct pseudowin { int p_fdpat; int p_pid; int p_ptyfd; struct event p_readev; struct event p_writeev; char p_cmd[MAXSTR]; char p_tty[MAXSTR]; char p_inbuf[IOSIZE]; /* buffered writing to p_ptyfd */ int p_inlen; }; /* bits for fdpat: */ #define F_PMASK 0x0003 #define F_PSHIFT 2 #define F_PFRONT 0x0001 /* . */ #define F_PBACK 0x0002 /* ! */ #define F_PBOTH (F_PFRONT | F_PBACK) /* : */ #define F_UWP 0x1000 /* | */ /* The screen process ...) * ... wants to write to pseudo */ #define W_WP(w) ((w)->w_pwin && ((w)->w_pwin->p_fdpat & F_PFRONT)) /* ... wants to write to window: user writes to window * or stdout/stderr of pseudo are duplicated to window */ #define W_WW(w) (!((w)->w_pwin) || \ (((w)->w_pwin->p_fdpat & F_PMASK) == F_PBACK) || \ ((((w)->w_pwin->p_fdpat >> F_PSHIFT) & F_PMASK) == F_PBOTH) || \ ((((w)->w_pwin->p_fdpat >> (F_PSHIFT * 2)) & F_PMASK) == F_PBOTH)) /* ... wants to read from pseudowin */ #define W_RP(w) ((w)->w_pwin && ((w)->w_pwin->p_fdpat & \ ((F_PFRONT << (F_PSHIFT * 2)) | (F_PFRONT << F_PSHIFT)) )) /* ... wants to read from window */ #define W_RW(w) (!((w)->w_pwin) || ((w)->w_pwin->p_fdpat & F_PFRONT)) /* user input is written to pseudo */ #define W_UWP(w) ((w)->w_pwin && ((w)->w_pwin->p_fdpat & F_UWP)) /* pseudo output has to be stuffed in window */ #define W_PTOW(w) (\ ((w)->w_pwin->p_fdpat & F_PMASK << F_PSHIFT) == F_PBOTH << F_PSHIFT || \ ((w)->w_pwin->p_fdpat & F_PMASK << F_PSHIFT * 2) == F_PBOTH << F_PSHIFT * 2 ) /* window output has to be stuffed in pseudo */ #define W_WTOP(w) (((w)->w_pwin->p_fdpat & F_PMASK) == F_PBOTH) #endif /* PSEUDOS */ /* definitions for wlocktype */ #define WLOCK_OFF 0 /* all in w_userbits can write */ #define WLOCK_AUTO 1 /* who selects first, can write */ #define WLOCK_ON 2 /* user writes even if deselected */ #ifdef COPY_PASTE struct paster { char *pa_pastebuf; /* this gets pasted in the window */ char *pa_pasteptr; /* pointer in pastebuf */ int pa_pastelen; /* bytes left to paste */ struct layer *pa_pastelayer; /* layer to paste into */ struct event pa_slowev; /* slowpaste event */ }; #else struct paster; #endif struct win { struct win *w_next; /* next window */ int w_type; /* type of window */ void *w_data; struct layer w_layer; /* our layer */ struct layer *w_savelayer; /* the layer to keep */ int w_blocked; /* block input */ #ifdef PSEUDOS struct pseudowin *w_pwin; /* ptr to pseudo */ #endif struct display *w_pdisplay; /* display for printer relay */ struct display *w_lastdisp; /* where the last input was made */ int w_number; /* window number */ struct event w_readev; struct event w_writeev; struct event w_silenceev; /* silence event */ struct event w_zombieev; /* event to try to resurrect window */ int w_poll_zombie_timeout; int w_ptyfd; /* fd of the master pty */ char w_inbuf[IOSIZE]; int w_inlen; char w_outbuf[IOSIZE]; int w_outlen; int w_aflag; /* (-a option) */ int w_dynamicaka; /* should we change name */ char *w_title; /* name of the window */ char *w_akachange; /* autoaka hack */ char w_akabuf[MAXSTR]; /* aka buffer */ int w_autoaka; /* autoaka hack */ struct win *w_group; /* window group we belong to */ int w_intermediate; /* char used while parsing ESC-seq */ int w_args[MAXARGS]; /* emulator args */ int w_NumArgs; #ifdef MULTIUSER int w_wlock; /* WLOCK_AUTO, WLOCK_OFF, WLOCK_ON */ struct acluser *w_wlockuser; /* NULL when unlocked or user who writes */ AclBits w_userbits[ACL_BITS_PER_WIN]; AclBits w_lio_notify; /* whom to tell when lastio+seconds < time() */ AclBits w_mon_notify; /* whom to tell monitor statis */ #endif enum state_t w_state; /* parser state */ enum string_t w_StringType; struct mline *w_mlines; struct mchar w_rend; /* current rendition */ #ifdef FONT char w_FontL; /* character font GL */ char w_FontR; /* character font GR */ # ifdef ENCODINGS char w_FontE; /* character font GR locked */ # endif int w_Charset; /* charset number GL */ int w_CharsetR; /* charset number GR */ int w_charsets[4]; /* Font = charsets[Charset] */ #endif int w_ss; struct cursor { int on; int x, y; struct mchar Rend; #ifdef FONT int Charset; int CharsetR; int Charsets[4]; #endif } w_saved; int w_top, w_bot; /* scrollregion */ int w_wrap; /* autowrap */ int w_origin; /* origin mode */ int w_insert; /* window is in insert mode */ int w_keypad; /* keypad mode */ int w_cursorkeys; /* appl. cursorkeys mode */ int w_revvid; /* reverse video */ int w_curinv; /* cursor invisible */ int w_curvvis; /* cursor very visible */ int w_autolf; /* automatic linefeed */ char *w_hstatus; /* hardstatus line */ int w_gr; /* enable GR flag */ int w_c1; /* enable C1 flag */ int w_bce; /* enable backcol erase */ #if 0 int w_encoding; /* for input and paste */ #endif int w_decodestate; /* state of our input decoder */ #ifdef DW_CHARS int w_mbcs; /* saved char for multibytes charset */ #endif char w_string[MAXSTR]; char *w_stringp; char *w_tabs; /* line with tabs */ int w_bell; /* bell status of this window */ int w_flow; /* flow flags */ struct logfile *w_log; /* log to file */ int w_logsilence; /* silence in secs */ int w_monitor; /* monitor status */ int w_silencewait; /* wait for silencewait secs */ int w_silence; /* silence status (Lloyd Zusman) */ char w_vbwait; char w_norefresh; /* dont redisplay when switching to that win */ #ifdef RXVT_OSC char w_xtermosc[5][2560]; /* special xterm/rxvt escapes */ #endif int w_mouse; /* mouse mode 0,9,1000 */ int w_extmouse; /* extended mouse mode 0,1006 */ #ifdef HAVE_BRAILLE int w_bd_x, w_bd_y; /* Braille cursor position */ #endif #ifdef COPY_PASTE int w_slowpaste; /* do careful writes to the window */ int w_histheight; /* all histbases are malloced with width * histheight */ int w_histidx; /* 0 <= histidx < histheight; where we insert lines */ int w_scrollback_height; /* number of lines of output stored, to be updated with w_histidx, w_histheight */ struct mline *w_hlines; /* history buffer */ struct paster w_paster; /* paste info */ #else int w_histheight; /* always 0 */ #endif int w_pid; /* process at the other end of ptyfd */ int w_deadpid; /* saved w_pid of a process that closed the ptyfd to us */ char *w_cmdargs[MAXARGS]; /* command line argument vector */ char *w_dir; /* directory for chdir */ char *w_term; /* TERM to be set instead of "screen" */ int w_lflag; /* login flag */ slot_t w_slot; /* utmp slot */ #if defined (UTMPOK) struct utmp w_savut; /* utmp entry of this window */ #endif char w_tty[MAXSTR]; int w_zauto; #ifdef ZMODEM struct display *w_zdisplay; #endif #ifdef BUILTIN_TELNET struct sockaddr_storage w_telsa; char w_telbuf[IOSIZE]; int w_telbufl; char w_telmopts[256]; char w_telropts[256]; int w_telstate; char w_telsubbuf[128]; int w_telsubidx; struct event w_telconnev; #endif struct { int on; /* Is the alternate buffer currently being used? */ struct mline *mlines; int width; int height; #ifdef COPY_PASTE int histheight; struct mline *hlines; int histidx; #else int histheight; /* 0 */ #endif struct cursor cursor; } w_alt; struct event w_destroyev; /* window destroy event */ #ifdef BSDWAIT union wait w_exitstatus; /* window exit status */ #else int w_exitstatus; #endif }; #define w_encoding w_layer.l_encoding #define w_width w_layer.l_width #define w_height w_layer.l_height #define w_x w_layer.l_x #define w_y w_layer.l_y /* definitions for w_type */ #define W_TYPE_PTY 0 #define W_TYPE_PLAIN 1 #define W_TYPE_TELNET 2 #define W_TYPE_GROUP 3 /* * Definitions for flow * 000 -(-) flow off, auto would be off * 001 +(-) flow on , auto would be off * 010 -(+) flow off, auto would be on * 011 +(+) flow on , auto would be on * 100 - flow auto, currently off * 111 + flow auto, currently on * Application controls auto_flow via TIOCPKT, if available, * else via application keypad mode. */ #define FLOW_NOW (1<<0) #define FLOW_AUTO (1<<1) #define FLOW_AUTOFLAG (1<<2) /* * WIN gives us a reference to line y of the *whole* image * where line 0 is the oldest line in our history. * y must be in whole image coordinate system, not in display. */ #define WIN(y) ((y < fore->w_histheight) ? \ &fore->w_hlines[(fore->w_histidx + y) % fore->w_histheight] \ : &fore->w_mlines[y - fore->w_histheight]) #define Layer2Window(l) ((struct win *)(l)->l_bottom->l_data) int WindowChangeNumber __P((int, int)); int OpenDevice __P((char **, int, int *, char **)); #endif /* SCREEN_WINDOW_H */ screen-4.9.1/NEWS.3.70000664000175000017500000000270114467014146012466 0ustar alexalex ---------------------------- What's new in screen-3.7 ? ---------------------------- * Color support. Screen understands the following capabilities: AF (setaf) = Set foreground color (ANSI compatible) AB (setab) = Set background color (ANSI compatible) AX = Does understand ANSI set default fg/bg color (\E[39m / \E[49m) The tweaks for the color xterm would be: termcap xterm 'AF=\E[3%dm:AB=\E[4%dm' terminfo xterm 'AF=\E[3%p1%dm:AB=\E[4%p1%dm' * New 'digraph' command (bound to ^A^V) ^A^Va" or ^A^V0344 input an a-umlaut * activity/bell message strings can now include the window title: %t - title %n - number (a single % still works) * 'defhstatus' command to give every window a default hardstatus line. ^E is used as a string escape instead of % (see above). Try 'defhstatus "Screen: window ^E (^Et)"' * Input parser changed to understand '^' (see ^E above). Note that the linux color xterm has a stupid bug: the characters get the color of the cursor, therefore if you change color and move the cursor around all the characters will get the new color... Here is a patch: pub/utilities/screen/color_xterm_patch Btw.: rxvt works fine. * Optional Braille support. If you can read Braille and have one of the devices listed in README.DOTSCREEN, please compile with -DHAVE_BRAILLE and let us know if this feature is useful. screen-4.9.1/resize.c0000664000175000017500000006274714467014146013146 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include #ifndef sun #include #endif #ifdef ISC # include # include # include #endif #include "config.h" #include "screen.h" #include "extern.h" /* maximum window width */ #define MAXWIDTH 1000 static void CheckMaxSize __P((int)); static void FreeMline __P((struct mline *)); static int AllocMline __P((struct mline *ml, int)); static void MakeBlankLine __P((unsigned char *, int)); static void kaablamm __P((void)); static int BcopyMline __P((struct mline *, int, struct mline *, int, int, int)); static void SwapAltScreen __P((struct win *)); extern struct layer *flayer; extern struct display *display, *displays; extern unsigned char *blank, *null; extern struct mline mline_blank, mline_null, mline_old; extern struct win *windows; extern const int Z0width, Z1width; extern int captionalways; #if defined(TIOCGWINSZ) || defined(TIOCSWINSZ) struct winsize glwz; #endif static struct mline mline_zero = { (unsigned char *)0, (unsigned char *)0 #ifdef FONT ,(unsigned char *)0 #endif #ifdef COLOR ,(unsigned char *)0 # ifdef COLORS256 ,(unsigned char *)0 # endif #endif }; /* * ChangeFlag: 0: try to modify no window * 1: modify fore (and try to modify no other) + redisplay * 2: modify all windows * * Note: Activate() is only called if change_flag == 1 * i.e. on a WINCH event */ void CheckScreenSize(change_flag) int change_flag; { int wi, he; if (display == 0) { debug("CheckScreenSize: No display -> no check.\n"); return; } #ifdef TIOCGWINSZ if (ioctl(D_userfd, TIOCGWINSZ, (char *)&glwz) != 0) { debug2("CheckScreenSize: ioctl(%d, TIOCGWINSZ) errno %d\n", D_userfd, errno); wi = D_CO; he = D_LI; } else { wi = glwz.ws_col; he = glwz.ws_row; if (wi == 0) wi = D_CO; if (he == 0) he = D_LI; } #else wi = D_CO; he = D_LI; #endif debug2("CheckScreenSize: screen is (%d,%d)\n", wi, he); #if 0 /* XXX: Fixme */ if (change_flag == 2) { debug("Trying to adapt all windows (-A)\n"); for (p = windows; p; p = p->w_next) if (p->w_display == 0 || p->w_display == display) ChangeWindowSize(p, wi, he, p->w_histheight); } #endif if (D_width == wi && D_height == he) { debug("CheckScreenSize: No change -> return.\n"); return; } #ifdef BLANKER_PRG KillBlanker(); #endif ResetIdle(); ChangeScreenSize(wi, he, change_flag); /* XXX Redisplay logic */ #if 0 if (change_flag == 1) Redisplay(D_fore ? D_fore->w_norefresh : 0); #endif } void ChangeScreenSize(wi, he, change_fore) int wi, he; int change_fore; { struct win *p; struct canvas *cv; int wwi; debug2("ChangeScreenSize from (%d,%d) ", D_width, D_height); debug3("to (%d,%d) (change_fore: %d)\n",wi, he, change_fore); cv = &D_canvas; cv->c_xe = wi - 1; cv->c_ys = (D_has_hstatus == HSTATUS_FIRSTLINE); cv->c_ye = he - 1 - ((cv->c_slperp && cv->c_slperp->c_slnext) || captionalways) - (D_has_hstatus == HSTATUS_LASTLINE); cv->c_blank.l_height = cv->c_ye - cv->c_ys + 1; if (cv->c_slperp) { ResizeCanvas(cv); RecreateCanvasChain(); RethinkDisplayViewports(); } if (D_forecv == 0) D_forecv = D_cvlist; if (D_forecv) D_fore = Layer2Window(D_forecv->c_layer); D_width = wi; D_height = he; CheckMaxSize(wi); if (D_CWS) { D_defwidth = D_CO; D_defheight = D_LI; } else { if (D_CZ0 && (wi == Z0width || wi == Z1width) && (D_CO == Z0width || D_CO == Z1width)) D_defwidth = D_CO; else D_defwidth = wi; D_defheight = he; } debug2("Default size: (%d,%d)\n", D_defwidth, D_defheight); if (change_fore) ResizeLayersToCanvases(); if (change_fore == 2 && D_CWS == NULL && displays->d_next == 0) { /* adapt all windows - to be removed ? */ for (p = windows; p; p = p->w_next) { debug1("Trying to change window %d.\n", p->w_number); wwi = wi; #if 0 if (D_CZ0 && p->w_width != wi && (wi == Z0width || wi == Z1width)) { if (p->w_width > (Z0width + Z1width) / 2) wwi = Z0width; else wwi = Z1width; } #endif if (p->w_savelayer && p->w_savelayer->l_cvlist == 0) ResizeLayer(p->w_savelayer, wwi, he, 0); #if 0 ChangeWindowSize(p, wwi, he, p->w_histheight); #endif } } } void ResizeLayersToCanvases() { struct canvas *cv; struct layer *l; int lx, ly; debug("ResizeLayersToCanvases\n"); D_kaablamm = 0; for (cv = D_cvlist; cv; cv = cv->c_next) { l = cv->c_layer; if (l == 0) continue; debug("Doing canvas: "); if (l->l_width == cv->c_xe - cv->c_xs + 1 && l->l_height == cv->c_ye - cv->c_ys + 1) { debug("already fitting.\n"); continue; } if (!MayResizeLayer(l)) { debug("may not resize.\n"); } else { debug("doing resize.\n"); ResizeLayer(l, cv->c_xe - cv->c_xs + 1, cv->c_ye - cv->c_ys + 1, display); } /* normalize window, see screen.c */ lx = cv->c_layer->l_x; ly = cv->c_layer->l_y; if (ly + cv->c_yoff < cv->c_ys) { cv->c_yoff = cv->c_ys - ly; RethinkViewportOffsets(cv); } else if (ly + cv->c_yoff > cv->c_ye) { cv->c_yoff = cv->c_ye - ly; RethinkViewportOffsets(cv); } if (lx + cv->c_xoff < cv->c_xs) { int n = cv->c_xs - (lx + cv->c_xoff); if (n < (cv->c_xe - cv->c_xs + 1) / 2) n = (cv->c_xe - cv->c_xs + 1) / 2; if (cv->c_xoff + n > cv->c_xs) n = cv->c_xs - cv->c_xoff; cv->c_xoff += n; RethinkViewportOffsets(cv); } else if (lx + cv->c_xoff > cv->c_xe) { int n = lx + cv->c_xoff - cv->c_xe; if (n < (cv->c_xe - cv->c_xs + 1) / 2) n = (cv->c_xe - cv->c_xs + 1) / 2; if (cv->c_xoff - n + cv->c_layer->l_width - 1 < cv->c_xe) n = cv->c_xoff + cv->c_layer->l_width - 1 - cv->c_xe; cv->c_xoff -= n; RethinkViewportOffsets(cv); } } Redisplay(0); if (D_kaablamm) { kaablamm(); D_kaablamm = 0; } } int MayResizeLayer(l) struct layer *l; { int cvs = 0; debug("MayResizeLayer:\n"); for (; l; l = l->l_next) { if (l->l_cvlist) if (++cvs > 1 || l->l_cvlist->c_lnext) { debug1("may not - cvs %d\n", cvs); return 0; } } debug("may resize\n"); return 1; } /* * Easy implementation: rely on the fact that the only layers * supporting resize are Win and Blank. So just kill all overlays. * * This is a lot harder if done the right way... */ static void kaablamm() { Msg(0, "Aborted because of window size change."); } /* Kills non-resizable layers. */ #define RESIZE_OR_KILL_LAYERS(l, wi, he) do \ { \ struct layer *_last = NULL; \ flayer = (l); \ while (flayer->l_next) \ { \ if (LayResize(wi, he) == 0) \ { \ _last = flayer; \ flayer = flayer->l_next; \ } \ else \ { \ struct canvas *_cv; \ for (_cv = flayer->l_cvlist; _cv; _cv = _cv->c_lnext) \ _cv->c_display->d_kaablamm = 1; \ ExitOverlayPage(); \ if (_last) \ _last->l_next = flayer; \ } \ } \ /* We assume that the bottom-most layer, i.e. when flayer->l_next == 0, \ * is always resizable. Currently, WinLf and BlankLf can be the bottom-most layers. \ */ \ LayResize(wi, he); \ } while (0) void ResizeLayer(l, wi, he, norefdisp) struct layer *l; int wi, he; struct display *norefdisp; { struct win *p; struct canvas *cv; struct layer *oldflayer = flayer; struct display *d, *olddisplay = display; if (l->l_width == wi && l->l_height == he) return; p = Layer2Window(l); /* If 'flayer' and 'l' are for the same window, then we will not * restore 'flayer'. */ if (oldflayer && (l == oldflayer || Layer2Window(oldflayer) == p)) oldflayer = NULL; flayer = l; if (p) { /* It's a window layer. Kill the overlays on it in all displays. */ for (d = displays; d; d = d->d_next) for (cv = d->d_cvlist; cv; cv = cv->c_next) { if (p == Layer2Window(cv->c_layer)) { /* Canvas 'cv' on display 'd' shows this window. Remove any non-resizable * layers over it. */ RESIZE_OR_KILL_LAYERS(cv->c_layer, wi, he); } } } else { /* It's a Blank layer. Just kill the non-resizable overlays over it. */ RESIZE_OR_KILL_LAYERS(flayer, wi, he); } for (display = displays; display; display = display->d_next) { if (display == norefdisp) continue; for (cv = D_cvlist; cv; cv = cv->c_next) if (Layer2Window(cv->c_layer) == p) { CV_CALL(cv, LayRedisplayLine(-1, -1, -1, 0)); RefreshArea(cv->c_xs, cv->c_ys, cv->c_xe, cv->c_ye, 0); } if (D_kaablamm) { kaablamm(); D_kaablamm = 0; } } /* If we started resizing a non-flayer layer, then restore the flayer. * Otherwise, flayer should already be updated to the topmost foreground layer. */ if (oldflayer) flayer = oldflayer; display = olddisplay; } static void FreeMline(ml) struct mline *ml; { if (ml->image) free(ml->image); if (ml->attr && ml->attr != null) free(ml->attr); #ifdef FONT if (ml->font && ml->font != null) free(ml->font); if (ml->fontx && ml->fontx != null) free(ml->fontx); #endif #ifdef COLOR if (ml->color && ml->color != null) free(ml->color); # ifdef COLORS256 if (ml->colorx && ml->colorx != null) free(ml->colorx); # endif #endif *ml = mline_zero; } static int AllocMline(ml, w) struct mline *ml; int w; { ml->image = malloc(w); ml->attr = null; #ifdef FONT ml->font = null; ml->fontx = null; #endif #ifdef COLOR ml->color = null; # ifdef COLORS256 ml->colorx = null; # endif #endif if (ml->image == 0) return -1; return 0; } static int BcopyMline(mlf, xf, mlt, xt, l, w) struct mline *mlf, *mlt; int xf, xt, l, w; { int r = 0; bcopy((char *)mlf->image + xf, (char *)mlt->image + xt, l); if (mlf->attr != null && mlt->attr == null) { if ((mlt->attr = (unsigned char *)calloc(w, 1)) == 0) mlt->attr = null, r = -1; } if (mlt->attr != null) bcopy((char *)mlf->attr + xf, (char *)mlt->attr + xt, l); #ifdef FONT if (mlf->font != null && mlt->font == null) { if ((mlt->font = (unsigned char *)calloc(w, 1)) == 0) mlt->font = null, r = -1; } if (mlt->font != null) bcopy((char *)mlf->font + xf, (char *)mlt->font + xt, l); if (mlf->fontx != null && mlt->fontx == null) { if ((mlt->fontx = (unsigned char *)calloc(w, 1)) == 0) mlt->fontx = null, r = -1; } if (mlt->fontx != null) bcopy((char *)mlf->fontx + xf, (char *)mlt->fontx + xt, l); #endif #ifdef COLOR if (mlf->color != null && mlt->color == null) { if ((mlt->color = (unsigned char *)calloc(w, 1)) == 0) mlt->color = null, r = -1; } if (mlt->color != null) bcopy((char *)mlf->color + xf, (char *)mlt->color + xt, l); # ifdef COLORS256 if (mlf->colorx != null && mlt->colorx == null) { if ((mlt->colorx = (unsigned char *)calloc(w, 1)) == 0) mlt->colorx = null, r = -1; } if (mlt->colorx != null) bcopy((char *)mlf->colorx + xf, (char *)mlt->colorx + xt, l); # endif #endif return r; } static int maxwidth; static void CheckMaxSize(wi) int wi; { unsigned char *oldnull = null; unsigned char *oldblank = blank; struct win *p; int i; struct mline *ml; if (wi > MAXWIDTH) wi = MAXWIDTH; if (wi <= maxwidth) return; maxwidth = wi + 1; debug1("New maxwidth: %d\n", maxwidth); blank = (unsigned char *)xrealloc((char *)blank, maxwidth); null = (unsigned char *)xrealloc((char *)null, maxwidth); mline_old.image = (unsigned char *)xrealloc((char *)mline_old.image, maxwidth); mline_old.attr = (unsigned char *)xrealloc((char *)mline_old.attr, maxwidth); #ifdef FONT mline_old.font = (unsigned char *)xrealloc((char *)mline_old.font, maxwidth); mline_old.fontx = (unsigned char *)xrealloc((char *)mline_old.fontx, maxwidth); #endif #ifdef COLOR mline_old.color = (unsigned char *)xrealloc((char *)mline_old.color, maxwidth); # ifdef COLORS256 mline_old.colorx = (unsigned char *)xrealloc((char *)mline_old.colorx, maxwidth); # endif #endif if (!(blank && null && mline_old.image && mline_old.attr IFFONT(&& mline_old.font) IFFONTX(&& mline_old.fontx) IFCOLOR(&& mline_old.color) IFCOLORX(&& mline_old.colorx))) Panic(0, "%s", strnomem); MakeBlankLine(blank, maxwidth); bzero((char *)null, maxwidth); mline_blank.image = blank; mline_blank.attr = null; mline_null.image = null; mline_null.attr = null; #ifdef FONT mline_blank.font = null; mline_null.font = null; mline_blank.fontx = null; mline_null.fontx = null; #endif #ifdef COLOR mline_blank.color = null; mline_null.color = null; # ifdef COLORS256 mline_blank.colorx = null; mline_null.colorx = null; # endif #endif #define RESET_AFC(x, bl) do { if (x == old##bl) x = bl; } while (0) #define RESET_LINES(lines, count) \ do { \ ml = lines; \ for (i = 0; i < count; i++, ml++) \ { \ RESET_AFC(ml->image, blank); \ RESET_AFC(ml->attr, null); \ IFFONT(RESET_AFC(ml->font, null)); \ IFFONT(RESET_AFC(ml->fontx, null)); \ IFCOLOR(RESET_AFC(ml->color, null)); \ IFCOLORX(RESET_AFC(ml->colorx, null)); \ } \ } while (0) /* We have to run through all windows to substitute * the null and blank references. */ for (p = windows; p; p = p->w_next) { RESET_LINES(p->w_mlines, p->w_height); #ifdef COPY_PASTE RESET_LINES(p->w_hlines, p->w_histheight); RESET_LINES(p->w_alt.hlines, p->w_alt.histheight); #endif RESET_LINES(p->w_alt.mlines, p->w_alt.height); } } char * xrealloc(mem, len) char *mem; int len; { register char *nmem; if (mem == 0) return malloc(len); if ((nmem = realloc(mem, len))) return nmem; free(mem); return (char *)0; } static void MakeBlankLine(p, n) register unsigned char *p; register int n; { while (n--) *p++ = ' '; } #ifdef COPY_PASTE #define OLDWIN(y) ((y < p->w_histheight) \ ? &p->w_hlines[(p->w_histidx + y) % p->w_histheight] \ : &p->w_mlines[y - p->w_histheight]) #define NEWWIN(y) ((y < hi) ? &nhlines[y] : &nmlines[y - hi]) #else #define OLDWIN(y) (&p->w_mlines[y]) #define NEWWIN(y) (&nmlines[y]) #endif int ChangeWindowSize(p, wi, he, hi) struct win *p; int wi, he, hi; { struct mline *mlf = 0, *mlt = 0, *ml, *nmlines, *nhlines; int fy, ty, l, lx, lf, lt, yy, oty, addone; int ncx, ncy, naka, t; int y, shift; if (wi <= 0 || he <= 0) wi = he = hi = 0; if (p->w_type == W_TYPE_GROUP) return 0; if (wi > MAXWIDTH) { Msg(0, "Window width too large. Truncated to %d.", MAXWIDTH); wi = MAXWIDTH; } if (he > MAXWIDTH) { Msg(0, "Window height too large. Truncated to %d.", MAXWIDTH); he = MAXWIDTH; } if (p->w_width == wi && p->w_height == he && p->w_histheight == hi) { debug("ChangeWindowSize: No change.\n"); return 0; } CheckMaxSize(wi); /* XXX */ #if 0 /* just in case ... */ if (wi && (p->w_width != wi || p->w_height != he) && p->w_lay != &p->w_winlay) { debug("ChangeWindowSize: No resize because of overlay?\n"); return -1; } #endif debug("ChangeWindowSize"); debug3(" from (%d,%d)+%d", p->w_width, p->w_height, p->w_histheight); debug3(" to(%d,%d)+%d\n", wi, he, hi); fy = p->w_histheight + p->w_height - 1; ty = hi + he - 1; nmlines = nhlines = 0; ncx = 0; ncy = 0; naka = 0; if (wi) { if (wi != p->w_width || he != p->w_height) { if ((nmlines = (struct mline *)calloc(he, sizeof(struct mline))) == 0) { KillWindow(p); Msg(0, "%s", strnomem); return -1; } } else { debug1("image stays the same: %d lines\n", he); nmlines = p->w_mlines; fy -= he; ty -= he; ncx = p->w_x; ncy = p->w_y; naka = p->w_autoaka; } } #ifdef COPY_PASTE if (hi) { if ((nhlines = (struct mline *)calloc(hi, sizeof(struct mline))) == 0) { Msg(0, "No memory for history buffer - turned off"); hi = 0; ty = he - 1; } } #endif /* special case: cursor is at magic margin position */ addone = 0; if (p->w_width && p->w_x == p->w_width) { debug2("Special addone case: %d %d\n", p->w_x, p->w_y); addone = 1; p->w_x--; } /* handle the cursor and autoaka lines now if the widths are equal */ if (p->w_width == wi) { ncx = p->w_x + addone; ncy = p->w_y + he - p->w_height; /* never lose sight of the line with the cursor on it */ shift = -ncy; for (yy = p->w_y + p->w_histheight - 1; yy >= 0 && ncy + shift < he; yy--) { ml = OLDWIN(yy); if (!ml->image) break; if (ml->image[p->w_width] == ' ') break; shift++; } if (shift < 0) shift = 0; else debug1("resize: cursor out of bounds, shifting %d\n", shift); ncy += shift; if (p->w_autoaka > 0) { naka = p->w_autoaka + he - p->w_height + shift; if (naka < 1 || naka > he) naka = 0; } while (shift-- > 0) { ml = OLDWIN(fy); FreeMline(ml); fy--; } } debug2("fy %d ty %d\n", fy, ty); if (fy >= 0) mlf = OLDWIN(fy); if (ty >= 0) mlt = NEWWIN(ty); while (fy >= 0 && ty >= 0) { if (p->w_width == wi) { /* here is a simple shortcut: just copy over */ *mlt = *mlf; *mlf = mline_zero; if (--fy >= 0) mlf = OLDWIN(fy); if (--ty >= 0) mlt = NEWWIN(ty); continue; } /* calculate lenght */ for (l = p->w_width - 1; l > 0; l--) if (mlf->image[l] != ' ' || mlf->attr[l]) break; if (fy == p->w_y + p->w_histheight && l < p->w_x) l = p->w_x; /* cursor is non blank */ l++; lf = l; /* add wrapped lines to length */ for (yy = fy - 1; yy >= 0; yy--) { ml = OLDWIN(yy); if (ml->image[p->w_width] == ' ') break; l += p->w_width; } /* rewrap lines */ lt = (l - 1) % wi + 1; /* lf is set above */ oty = ty; while (l > 0 && fy >= 0 && ty >= 0) { lx = lt > lf ? lf : lt; if (mlt->image == 0) { if (AllocMline(mlt, wi + 1)) goto nomem; MakeBlankLine(mlt->image + lt, wi - lt); mlt->image[wi] = ((oty == ty) ? ' ' : 0); } if (BcopyMline(mlf, lf - lx, mlt, lt - lx, lx, wi + 1)) goto nomem; /* did we copy the cursor ? */ if (fy == p->w_y + p->w_histheight && lf - lx <= p->w_x && lf > p->w_x) { ncx = p->w_x + lt - lf + addone; ncy = ty - hi; shift = wi ? -ncy + (l - lx) / wi : 0; if (ty + shift > hi + he - 1) shift = hi + he - 1 - ty; if (shift > 0) { debug3("resize: cursor out of bounds, shifting %d [%d/%d]\n", shift, lt - lx, wi); for (y = hi + he - 1; y >= ty; y--) { mlt = NEWWIN(y); FreeMline(mlt); if (y - shift < ty) continue; ml = NEWWIN(y - shift); *mlt = *ml; *ml = mline_zero; } ncy += shift; ty += shift; mlt = NEWWIN(ty); if (naka > 0) naka = naka + shift > he ? 0 : naka + shift; } ASSERT(ncy >= 0); } /* did we copy autoaka line ? */ if (p->w_autoaka > 0 && fy == p->w_autoaka - 1 + p->w_histheight && lf - lx <= 0) naka = ty - hi >= 0 ? 1 + ty - hi : 0; lf -= lx; lt -= lx; l -= lx; if (lf == 0) { FreeMline(mlf); lf = p->w_width; if (--fy >= 0) mlf = OLDWIN(fy); } if (lt == 0) { lt = wi; if (--ty >= 0) mlt = NEWWIN(ty); } } ASSERT(l != 0 || fy == yy); } while (fy >= 0) { FreeMline(mlf); if (--fy >= 0) mlf = OLDWIN(fy); } while (ty >= 0) { if (AllocMline(mlt, wi + 1)) goto nomem; MakeBlankLine(mlt->image, wi + 1); if (--ty >= 0) mlt = NEWWIN(ty); } #ifdef DEBUG if (nmlines != p->w_mlines) for (fy = 0; fy < p->w_height + p->w_histheight; fy++) { ml = OLDWIN(fy); ASSERT(ml->image == 0); } #endif if (p->w_mlines && p->w_mlines != nmlines) free((char *)p->w_mlines); p->w_mlines = nmlines; #ifdef COPY_PASTE if (p->w_hlines && p->w_hlines != nhlines) free((char *)p->w_hlines); p->w_hlines = nhlines; #endif nmlines = nhlines = 0; /* change tabs */ if (p->w_width != wi) { if (wi) { t = p->w_tabs ? p->w_width : 0; p->w_tabs = xrealloc(p->w_tabs, wi + 1); if (p->w_tabs == 0) goto nomem; for (; t < wi; t++) p->w_tabs[t] = t && !(t & 7) ? 1 : 0; p->w_tabs[wi] = 0; } else { if (p->w_tabs) free(p->w_tabs); p->w_tabs = 0; } } /* Change w_saved.y - this is only an estimate... */ p->w_saved.y += ncy - p->w_y; p->w_x = ncx; p->w_y = ncy; if (p->w_autoaka > 0) p->w_autoaka = naka; /* do sanity checks */ if (p->w_x > wi) p->w_x = wi; if (p->w_y >= he) p->w_y = he - 1; if (p->w_saved.x > wi) p->w_saved.x = wi; if (p->w_saved.y >= he) p->w_saved.y = he - 1; if (p->w_saved.y < 0) p->w_saved.y = 0; if (p->w_alt.cursor.x > wi) p->w_alt.cursor.x = wi; if (p->w_alt.cursor.y >= he) p->w_alt.cursor.y = he - 1; if (p->w_alt.cursor.y < 0) p->w_alt.cursor.y = 0; /* reset scrolling region */ p->w_top = 0; p->w_bot = he - 1; /* signal new size to window */ #ifdef TIOCSWINSZ if (wi && (p->w_width != wi || p->w_height != he) && p->w_width != 0 && p->w_height != 0 && p->w_ptyfd >= 0 && p->w_pid) { glwz.ws_col = wi; glwz.ws_row = he; debug("Setting pty winsize.\n"); if (ioctl(p->w_ptyfd, TIOCSWINSZ, (char *)&glwz)) debug2("SetPtySize: errno %d (fd:%d)\n", errno, p->w_ptyfd); } #endif /* TIOCSWINSZ */ /* store new size */ p->w_width = wi; p->w_height = he; if(p->w_scrollback_height > hi) p->w_scrollback_height = hi; #ifdef COPY_PASTE p->w_histidx = 0; p->w_histheight = hi; #endif #ifdef BUILTIN_TELNET if (p->w_type == W_TYPE_TELNET) TelWindowSize(p); #endif #ifdef DEBUG /* Test if everything was ok */ for (fy = 0; fy < p->w_height + p->w_histheight; fy++) { ml = OLDWIN(fy); ASSERT(ml->image); # ifdef UTF8 if (p->w_encoding == UTF8) { for (l = 0; l < p->w_width; l++) ASSERT(ml->image[l] >= ' ' || ml->font[l] || ml->fontx); } else #endif for (l = 0; l < p->w_width; l++) ASSERT(ml->image[l] >= ' '); } #endif return 0; nomem: if (nmlines || nhlines) { for (ty = he + hi - 1; ty >= 0; ty--) { mlt = NEWWIN(ty); FreeMline(mlt); } if (nmlines && p->w_mlines != nmlines) free((char *)nmlines); #ifdef COPY_PASTE if (nhlines && p->w_hlines != nhlines) free((char *)nhlines); #endif } KillWindow(p); Msg(0, "%s", strnomem); return -1; } void FreeAltScreen(p) struct win *p; { int i; if (p->w_alt.mlines) { for (i = 0; i < p->w_alt.height; i++) FreeMline(p->w_alt.mlines + i); free(p->w_alt.mlines); } p->w_alt.mlines = 0; p->w_alt.width = 0; p->w_alt.height = 0; #ifdef COPY_PASTE if (p->w_alt.hlines) { for (i = 0; i < p->w_alt.histheight; i++) FreeMline(p->w_alt.hlines + i); free(p->w_alt.hlines); } p->w_alt.hlines = 0; p->w_alt.histidx = 0; p->w_alt.histheight = 0; #endif } static void SwapAltScreen(p) struct win *p; { struct mline *ml; int t; #define SWAP(item, t) do { (t) = p->w_alt. item; p->w_alt. item = p->w_##item; p->w_##item = (t); } while (0) SWAP(mlines, ml); SWAP(width, t); SWAP(height, t); #ifdef COPY_PASTE SWAP(histheight, t); SWAP(hlines, ml); SWAP(histidx, t); #endif #undef SWAP } void EnterAltScreen(p) struct win *p; { if (!p->w_alt.on) { /* If not already using the alternate screen buffer, then create a new one and swap it with the 'real' screen buffer. */ FreeAltScreen(p); SwapAltScreen(p); } else { /* Already using the alternate buffer. Just clear the screen. To do so, it is only necessary to reset the height(s) without resetting the width. */ p->w_height = 0; p->w_histheight = 0; } ChangeWindowSize(p, p->w_alt.width, p->w_alt.height, p->w_alt.histheight); p->w_alt.on = 1; } void LeaveAltScreen(p) struct win *p; { if (!p->w_alt.on) return; SwapAltScreen(p); ChangeWindowSize(p, p->w_alt.width, p->w_alt.height, p->w_alt.histheight); FreeAltScreen(p); p->w_alt.on = 0; } screen-4.9.1/autogen.sh0000775000175000017500000000003014467014146013453 0ustar alexalex#!/bin/sh autoreconf -i screen-4.9.1/patchlevel.h0000664000175000017500000010131314467014146013760 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ /**************************************************************** * * patchlevel.h: Our life story. * * 08.07.91 -- 3.00.01 -wipe and a 'setenv TERM dumb' bugfix. * 17.07.91 -- 3.00.02 another patchlevel by Wayne Davison * 31.07.91 -- 3.00.03 E0, S0, C0 for flexible semi-graphics, nonblocking * window title input and 'C-a :' command input. * 10.08.91 -- 3.00.04 scrollback, markkeys and some bugfixes. * 13.08.91 -- 3.00.05 mark routine improved, ansi prototypes added. * 20.08.91 -- 3.00.06 screen -h, faster GotoPos in overlay, termcap %. * instead of %c * 28.08.91 -- 3.00.07 environment variable support. security. terminfo. * pyramid and ultrix support. * 07.09.91 -- 3.00.99 secopen(), MIPS support, SVR4 support. * 09.09.91 -- 3.01.00 backspace bug fixed. * 03.10.91 -- 3.01.01 ansi.c: null-ptr fixed, CLS now saves to scrollback. * Using setresuid on hpux. Memory leak fixed. * Better GotoPos(). Support for IC. Another resize bug. * Detach() w/o fore crashed. -T and -A(dapt) option. * GNU copyleft. * 19.12.91 -- 3.01.02 flow now really automatic (autoflow killed). * 7 bit restriction removed from WriteString(). * 09.01.92 -- 3.01.03 flow reattach bug fixed. VDISCARD bug fixed. * 13.01.92 -- 3.01.04 new flow concept: ^Af toggles now three states * 21.01.92 -- 3.01.05 '^A:screen 11' bug fixed. aflag in DoScreen(). * Some code cleanup. attach_tty and display_tty[] * added. * 26.01.92 -- 3.01.06 apollo support, "hardcopy_append on", "bufferfile", * SECURITY PROBLEM cleared.. * 28.01.92 -- 3.01.07 screen after su allowed. Pid became part of * SockName. sysvish 14 character restriction considered. * 31.01.92 -- 3.02.00 Ultrix port, Irix 3.3 SGI port, shadow pw support, * data loss on stdin overflow fixed. "refresh off". * 12.02.92 -- 3.02.02 stripdev() moved, -S introduced, bufferfile improved, * ShellProg coredump cleared. SVR4 bugfixes. * I/O code speedup added. * 24.04.92 -- 3.02.03 perfectly stackable overlays. One scrollback per window, * not per display. * 05.05.92 -- 3.02.04 very nasty initialisation bug fixed. * 09.05.92 -- 3.02.05 parsing for $:cl: termcap strings and \012 octal notation * in screenrc file. More structuring. Detached startup * with 'screen -d -m -S...' bugfixed. * 11.05.92 -- 3.02.06 setreuid() bugs cleared, C-a : setenv added. * "xn" capability in TERMCAP needed since "am" is there. * 25.06.92 -- 3.02.07 The multi display test version. Have merci. * 15.07.92 -- 3.02.08 :B8: supports automatic charset switching for 8-bit * 26.09.92 -- 3.02.09 Ported to linux. Ignoring bad files in $SCREENDIR * 22.10.92 -- 3.02.10 screen.c/ansi.c splitted in several pieces. * Better ISearch. Cleanup of loadav.c * 29.10.92 -- 3.02.11 Key mechanism rewritten. New command names. * New iscreenrc syntax. * 02.11.92 -- 3.02.12 'bind g copy_reg' and 'bind x ins_reg' as suggested by * stillson@tsfsrv.mitre.org (Ken Stillson). * 03.11.92 -- 3.02.13 Ported to SunOs 4.1.2. Gulp. Some NULL ptrs fixed and * misc. braindamage fixed. * 03.11.92 -- 3.02.14 Argument number checking, AKA fixed. * 05.11.92 -- 3.02.15 Memory leaks in Detach() and KillWindow() fixed. * Lockprg powerdetaches on SIGHUP. * 12.11.92 -- 3.02.16 Introduced two new termcaps: "CS" and "CE". * (Switch cursorkeys in application mode) * Tim's async output patch. * Fixed an ugly bug in WriteString(). * New command: 'process' * 16.11.92 -- 3.02.17 Nuking unsent tty output is now optional, (toxic * ESC radiation). * 30.11.92 -- 3.02.18 Lots of multi display bugs fixed. New layer * function 'Restore'. MULTIUSER code cleanup. * Rudimental acls added for multiuser. * No more error output, when output gives write errors. * 02.12.92 -- 3.02.19 BROKEN_PIPE and SOCK_NOT_IN_FS defines added for * braindead systems. Bug in recover socket code fixed. * Can create windows again from shell. * 22.12.92 -- 3.02.20 Made a superb configure script. STY and break fixed. * 01.02.93 -- 3.02.21 Coredump bug fixed: 8-bit output in background windows. * Console grabbing somewhat more useable. * 23.02.93 -- 3.02.22 Added ^:exec command, but not tested at all. * 23.02.93 -- 3.02.23 Added 'hardcopydir' and 'logdir' commands. * 11.03.93 -- 3.02.24 Prefixed display and window structure elements. * Screen now handles autowrapped lines correctly * in the redisplay and mark function. * 19.03.93 -- 3.03.00 Patched for BSD386. pseudos work. * 31.03.93 -- 3.03.01 Don't allocate so much empty attr and font lines. * 04.04.93 -- 3.03.02 fixed :exec !..| less and :|less, patched BELL_DONE & * ^B/^F. Fixed auto_nuke attribute resetting. Better linux * configure. ^AW shows '&' when window has other attacher. * MAXWIN > 10 patch. KEEP_UNDEF in config.h.in, shellaka * bug fixed. dec alpha port. Solaris port. * 02.05.93 -- 3.03.03 Configure tweaked for sgi. Update environment with * setenv command. Silence on|off, silencewait , * defautonuke commands added. Manual page updated. * 13.05.93 -- 3.03.04 exit in newsyntax script, finished _CX_UX port. * Texinfo page added by Jason Merrill. Much longish debug * output removed. Select window by title (or number). * 16.06.93 -- 3.04.00 Replaced ^A- by ^A^H to be complementary to ^A SPACE. * Moved into CVS. Yacc. * 28.06.93 -- 3.04.01 Fixed selecting windows with numeric title. Silence * now works without nethackoption set. * 01.07.93 -- 3.04.02 Implementing real acls. * 22.07.93 -- 3.05.00 Fixed SVR4, some multiuser bugs, -- DISTRIBUTED * 05.08.93 -- 3.05.01 ${srcdir} feature added. Shellprog bug fixed. * Motorola reattach bug fixed. Writelock bug fixed. * Copybuffer moved into struct acluser. Configure.in * uglified for Autoconf1.5. Paste may now have an * argument. Interactive setenv. Right margin bug * fixed. IRIX 5 patches. -- DISTRIBUTED * 13.08.93 -- 3.05.02 ultrix support added. expand_vars removed from * register function. Paste bug fixed. * sysmacros.h now included in pty.c on sgis * Strange hpux hack added for TTYCMP. * Zombie feature improved. * 08.09.93 -- 3.05.03 Makefile and OSF1 fine tuning. Eased attach to * multi sessions. Writelock now obeys acl write * permissions. UserDel() now preserves defaults. * acladd/aclchg syntax improved. Updated * documentation. Bug in at command fixed. * MakeWindow() now obeys perm defaults. * 03.10.93 -- 3.05.90 Multiple displays can now share the same window. * Layers now belong to Windows. "Select -" yields a blank * page. Debug output can be switched on/off at runtime. * Number command changes window number and utmp-slot. * 14.10.93 -- 3.05.91 Mechanism to find the "best" window added. Much * debugging done and still needed. Slowpaste setting now * per window. Preserving fore AND other window when * detached. Per user settings for `monitor' and `silence'. * New command `su'. BlankWindow performs now ColonInput. * History command fixed, it depended on paste code that * was previously changed to allow concatenation of buffers. * Fixing umask problem with WriteFile() reported by Jamie * Mason. * 30.11.93 -- 3.05.04 Kanji support added. New keymap feature: * bindkey and various map commands. GR and C1 * flags now define the character processing. * 30.11.93 -- 3.05.92 Kanji support added. New keymap feature: * bindkey and various map commands. GR and C1 * flags now define the character processing. * 17.12.93 -- 3.05.93 Tcon authentification mechanism. AddChar macro broken up * into 2 functions. Acl.c, network.c, misc.c, termcap.c * and tty.c are now display free! * 27.12.93 -- 3.05.94 Telnet login works, can export one window per mux. * Acl-groups added. Export rights is an acl. * connect works, can create shadow window thus import * command channel and switch windows. Can detach sessions * from each other. Can renumber imported and exported * windows. DL_LOOP prevents now SEGV, sessions have names * and can be connected to very flexible. * 03.01.94 -- 3.05.95 Import and export of any number of channels works, * except a small bug with margin handling when exporting. * Window titles are forwarded, break is forwarded and * tcon learned the mux protocoll. A few more bugs in * network.c fixed. Tcon has Mux arrays, Protocoll is '\0' * free. * 08.01.94 -- 3.05.96 More tcon work. Solaris debugging. * * 14.01.94 -- 3.05.05 New FindSocket() code. Nicer socket handling. * 20.01.94 -- 3.05.06 New attribute handling code. NeXT fixes. * 04.02.94 -- 3.05.07 Ugly bug in ScrollH fixed. Keymap defaults. * 10.03.94 -- 3.05.97 'defsilence' by Lloyd Zusman. Zombie resurrekt key. * -b, -p options. Fixed Compilekeys(), gulp. config.h * allows choice of VMIN/VTIME/NDELAY for ttys. * 13.04.94 -- 3.05.08 Kanji bug fixed. POSIX sigaction support. * os.h cleanup. UTNOKEEP splitted into * UT_CLOSE and UT_UNSORTED. linux no longer * implies UT_CLOSE. "struct display" name * convention change: _d_ to d_ and d_ to D_. * 20.04.94 -- 3.05.09 configure.in ptyrange bug fixed. Upgraded * to autoconf-1.8 * 27.04.94 -- 3.05.10 97801 obscure code support. Linux long * password workaround. * 09.05.94 -- 3.05.11 seteuid() support added. Security fixes. * _IBMR2 kludge makes call to sleep obsolete. * Small fixes in uname() code. djm suggests replace of * BSDI by __bsdi__. * 27.07.94 -- 3.05.12 seteuid attacher bug fixed. ks/ke changed * in termcap/info and termcap.c * 01.09.94 -- 3.05.58 (There are a few more patches to come, subtracted 40) * breaktype command to select how we cause breaks. * Testing logfile.c. Manual and texinfo documentation * updated to explain all new commands except keymapping. * Added modem lines to info of plain ttys. Using * cfset{i,o}speed() for POSIX is better, much better. * 07.09.94 -- 3.05.59 Flushing logfiles every 5 seconds. Testing new * resize linewrap code. Resize with care. * Resurrect now displays its command string. * 11.09.94 -- 3.05.60 Lines are now correctly wrapped, when window size * changes; this prevents loss of text. * 15.09.94 -- 3.05.61 umask renamed to aclumask, bell renamed to bell_msg. * *_msg commands show message when called w/o parameter. * Many changes in the manual, thanks to Sven Guckes. * -O removed. * 27.09.94 -- 3.05.13 defwlock stupidity fixed. MakeTermcap ks/ke * ':' removed. Termcap entry improved. * copy_reg and ins_reg obsoleted by better paste command: * paste => paste . * copy_reg r => paste . r * ins_reg r => paste r * ins_reg => paste * 18.10.94 -- 3.05.62 breaktype changed. -L option added to enable logging * from both command line and screenrc. SIGXFSZ ignored. * 28.11.94 -- 3.05.63 ACL's sharpened. No user has any rights, unless * explicitly given. Only two exceptions: 1) "acladd user" * without further parameters. 2) Evry user has a default * umask that gives himself all permissions on the windows * he creates. Bug with colon input on shared windows fixed. * The commad is now executed by the user typing the final * Enter-Key rather by a random user. * 30.11.94 -- 3.05.64 On demand grabbing of pending auto writelocks. * Solaris troubles us with kill(pid, 0) ... not fixed... * defbreaktype added. (breaktype is also global, still...) * SIGARGHACK cleared, to pamper poor little Ultrix4.4 cfe. * defescape added. * w_status changed to w_hstatus, it's a #define in * Domain/OS reported by ejackson@iastate.edu. * 05.12.94 -- 3.05.17 SVR4 pty bug fixed, don't update window status * line if not changed, onyx support. Manual * pages updated. * 14.12.94 -- 3.05.18 w_status changed to w_hstatus, it's a #define in * Domain/OS reported by ejackson@iastate.edu. * Screen manpage patches by larry. * Ugly seteuid bug in ForkWindow() fixed. * 20.12.94 -- 3.06.00 Solaris has broken seteuid(). * osf loadav patches. -- DISTRIBUTED * 08.01.95 -- 3.05.65 Bug with LOGOUTOK and -ln fixed. redundant secfopen() * avoided, when logfflush() looks at delayed nfs updates. * Option parser now allowes condensed options. -A fixed. * New commands 'preselect' and 'defpreselect'. New option * -WdmS starts a detached screen session with watchdog. * 16.01.95 -- 3.06.01 KANJI patch. doc/Makefile.in fixed. * Install now calls doc/Makefile install. * Don't use 'ds' too often, breaks MSkermit. * undef'd LOGOUTOK logs in now. * Ultrix is broken, too (seteuid). * Use \r (not \n) to join lines in pastebuf. * bindkey can now remove sequences. * InitTTY fixed for PLAIN. -- DISTRIBUTED * 06.02.95 -- 3.05.66 DisplayLine() does now clipping to reduce coredump- * frequency. Window size is adapted to the display that * types input, to reduce multi-user confusion. Scrollback * mode still may get the wrong size. * 07.02.95 -- 3.05.67 WinRewrite() also needs to clip. Users without unix * account, but with screen password allowed. Chacl * allows password change, su prompts for user name too. * 01.03.95 -- 3.05.68 Leaving a window may now cause a resize to match a * remaining display. Simple ESC-CR fix in the vt100 * state machine. * 26.03.95 -- 3.05.69 Markroutine() needs to resize the window to avoid * coredumps, just like WinProcess() already does. * More NEED_ flags added in comm.c to avoid coredumps. * 04.04.95 -- 3.06.02 Simple ESC-CR fix in the vt100 state machine. * Now compiles again with all extras disabled. * Zombie resurrect added. defc1, defgr, defkanji * added. Screen now replies to a secondary DA * query. Some missing NEED_XXX added in comm.c. * Better default tty permissions/group test. * More AUX support, now compiles with POSIX. * Function keycodes xtermified (F11, F12). * Paste bug fixed (only worked with KANJI). * Check bcopy before memcpy/memmove. * FindSocket code much fixed & improved. * 10.04.95 -- 3.05.70 Display_displays() now shows the users permissions on * the currently displayed window, this is easier than a * full featured lsacl, but also helps. chacl can now copy * users, but we need to copy windows. * 26.04.95 -- 3.05.71 Multi digit screen numbers in utmp. MakeWindow() now * echoes what it does, just like RemakeWindow() when * 'verbose on' (default off). * `screen -ls myname/' will find own(!) non-multi sessions. * Command line option -q improved and documented. * 'debug off' also shuts attacher debugging off now. * 03.05.95 -- 3.05.72 'connect' command bugfixed. colon prompt improved. * open(O_NONBLOCK) does not work on 4.1.3, using O_NDELAY. * There are writes to exp_wid2chan[-1], XXX I just added * fillers to the mux structure, please debug this ASAP! * WindowByName() prefers exact matches now. Esc forwarding * from Frontend to Backend suppressed unless specified. * 26.06.95 -- 3.05.73 Improving the combination of dflag and rflag: If both * are set, a screen session is reattached, regardless * if it was previously detached or attached elseewhere. * "screen -D -RR" is thus most powerful: Give me my screen * session here and now. No matter, if this means creating * a new session (due to the second R without warning * message), detching the session first (and due to the * capitalised D logging out), or simply attaching to it. * 13.07.95 -- 3.05.74 Markroutine learned new join mode: comma seperated. * Can disable the detach feature from config.h. * Configure.in now calls etc/toolcheck. Password is no * longer a static array. * 30.07.95 -- 3.05.75 Karl Heuer wants to install with a relative symlink. * Command line option -k removed (try -t). * 31.08.95 -- 3.06.03 Color support, digraph command, code * cleanup (struct mchar/mline added). * 03.09.95 -- 3.06.04 SetRendition display check. Solaris unblock * SIGHUP. w_curchar->w_rend, lintified. * Shadow-password code moved and rewritten * (includes sun C2). * 06.09.95 -- 3.05.76 Added support for braille displays (by Hadi Bargi Rangin * and Bill Barry, {bargy,barryb}@dots.physics.orst.edu * Added baud, cs8, istrip, ixon, ixoff options for plain * tty windows. Untested. * 09.09.95 -- 3.07.99 Merged 3.7.76 back into the main distribution but * without network, blankwindow and dlist support. * Global variable Password removed. * Resize code completely rewritten. * New commands: sorendition, (def)charset. * strftime-like message generation. * 26.09.95 -- 3.06.05 resize code completely rewritten. * Very visible cursor added. vbell sequence * \Eb added. _delay for terminfo libs added * to make the padding work for the first time. * New ProcessInput() makes "command command" * work. '[def]escape ""' clears escape chars. * Changed logdir command to logfile. It now uses * MakeWinMsg() to create the filename. * Updated the manuals. * 03.10.95 -- 3.08.00 Merged 3.07.99 back into my 3.06.05. * pause removed. NONROOT now in config.h. * sysV68 configure test. Socket protocol got * revision number. New command termcapinfo. * Screenrcs, docs & configure.in updated * 18.10.95 -- 3.08.01 Info shows parser state. * Very visible cursor added. vbell sequence * \Eb added. _delay for terminfo libs added * to make the padding work for the first time. * Braille code almost completely reworked. * New ProcessInput() makes "command command" * work. '[def]escape ""' clears escape chars. * Command logdir -> logfile and uses MakeWinMsg. * Updated the manuals. New mark command 'x'. * stuff has new "-k" parameter. * 28.10.95 -- 3.06.06 Added new 'XC' capability to provide * a method for character translation. * 17.11.95 -- 3.07.00 Added CheckEscape() function. * acl -> acls because of hpux10 nameclash * /stand/vmunix added to kernel list (hpux10) * stripdev changed to translate * /dev/pts to /dev/pts/ (unixware) * -lgen added to GETUTENT configure test. * 20.11.95 -- 3.07.01 corrected vbell null ptr reference. * -- DISTRIBUTED * 27.11.95 -- 3.08.02 Added CheckEscape() function. * acl -> acls because of hpux10 nameclash * /stand/vmunix added to kernel list (hpux10) * stripdev changed to translate * /dev/pts to /dev/pts/ (unixware) * -lgen added to GETUTENT configure test. * corrected vbell null ptr reference * -- 3.08.03 etc/toolcheck is now shouting louder. * Solaris 2.5 has /kernel/genunix. * Touching socket when detach/attach. * FindWindow corrected. AIX4 patch * from robert@mayday.cix.co.uk. * 1.09.96 -- 3.07.02 added #ifdef MAPKEYS for CheckEscape. * etc/toolcheck is now shouting louder. * Touching socket when detach/attach. * Linux tcflush hack. Linux md5 password suport. * USE_SGR support for dumb (wyse) terminals. * "at" and "reset" commands improved. * Now sensitive to broken AIX4 TIOCPKT. * tek patch unapplied. * linux utmp patch: set slot to DEAD_PROCESS. * include signal.h for killpg if hpux10.10. * linux: elf, but no SVR4, check for utmpx. * hpux10.10 libcurses breaks select()! * -- DISTRIBUTED * 27.09.96 -- 3.07.03 ncurses tgetflag returns -1 if cap not valid. * autonuke fix: reset application mode. An init * string may have cleared it. * Small UTMPOK patch from Douglas B. Jones. * 23.06.97 -- 3.07.04 Some bugfixes. Kanji fixed. * Code update from 3.8.6: Colon line editing added. * Digraph made line-editing resistant. * DEC ALPHA ut_user[0] = 0; * Added error messages to exit_with_usage. * FindSocket code improved (the MULTIUSER part). * Use utimes() if available. Power-detached start. * vsnprintf() support. exit -> _exit in window.c. * AddXChars now tolerates NULL string. * -- DISTRIBUTED * 10.11.98 -- 3.07.05 Wayne's resize.c patch to keep the cursor * onscreen. FindWindow corrected. AIX4 patch * from robert@mayday.cix.co.uk. * Fixed kanji am & markcursor bugs. * SCO support (Gert Doering). * Wayne's statusline extra space. New flag nospc * for MakeWinMsg. New TF capability: add missing * termcap/info caps. screen-exchange security * fix. Use kstat for Solaris' loadavg. * Check for mode 775 if screen runs setgid. * Fixed typo in silence command. * Allow detach with no tty. HPUX10.20 ltchars * hack. Use @1/@7 as replacement for kh/kH. * Use seteuid before calling tgetent. * Check for displays in Msg(). * Linux ncurses hack: redefine _nc_timed_wait. * Configure check for ncurses (sigh). * ITOH Yasufumi: kanji fixes, osf support, * bug fixes. More secure Rewrite(). * Increased line buffer size to 2048 bytes. * SCO-5 Fixes (Brian L. Gentry). * 25.11.98 -- 3.07.06 resize code now handles tabs correctly. * -- DISTRIBUTED * -- 3.09.00 loads'o'bugs fixed, 3.8 merged with 3.7. * new region clip code. * Many new features (see NEWS file). * 3.08.99 -- 3.09.02 -- DISTRIBUTED * 11.08.99 -- 3.09.04 small utmp fix, BSD chflags fix, tty mode fix * -- DISTRIBUTED * 1.09.99 -- 3.09.05 linux SVR4_PTYS fixes, better ShowWindos(), * Panic() displays bug fixed, strerror fixed, * missing $srcdir & bad prefix in Makefiles. * console grabbing with SRIOCSREDIR. * linux utmp workaround added. Some KANJI bugs * fixed. Stupid StuffKey() bug fixed. * -- DISTRIBUTED * 24.07.00 -- 3.09.06 kanji fixes. lock escape char fix. * removed delayed message hack. * resize command & focus subcomands by joze. * fix for solaris' utmp_helper bug. * linux tty handling fix. * mousetracking, rxvt osc sequences. * background color erase support. * don't log user in after hangup. * hstatus escape update bug fixed. * 1.09.00 -- 3.09.08 -- DISTRIBUTED * 25.05.01 -- 3.09.09 use $DESTDIR in Makefiles. * renamed struct user to acluser to fix hpux * problem for good. utf8 support. 16 color * support. New -X option and escape sequence * to send screen commands. * New commands: attrcolor, defutf8, dinfo, utf8. * Extended commands: width, height, readbuf, * writebuf. Better nlist64 detection. * New config.h option SOCKDIR_IS_LOCAL_TO_HOST. * Don't call tputs with an empty string. * New string escape %{ for attr/color changes. * LRefreshAll bug fixed (0 instead of -1 as bce). * New quote handling in Parse(). Workaround for * some bad termcap/info entries added. Set BE * for all xtermish emulators. Added '0x' and * 'U+' prefix in digraph command. LOADAV_TYPE * detection fixed. * -- DISTRIBUTED * 4.09.01 -- 3.09.10 '-R' security fix. Fixed array in MScrollV(). * -- DISTRIBUTED * Reset charset after 'me'. * 14.02.02 -- 3.09.11 Support for other encodings. Double width * utf-8 chars. 'L' modifier for %D, %M, %w * and %W. New %= (hfill), %H (hostname), * %f (flags), %F (focus) escapes. New commands * source, windowlist, deflog. Command key classes. * New login state: always. Time format * changeable. 256 color support. * Updated digraph table. Ignorecase. * Windowlist resizeable on blank window. * Added encoding to paste buffers. * Hpux loadtype detection fixed. * Disabled im/ic warning. Fixed a bug that * could cause window lockups in rare * circumstances. Made hangup signal to the * backend process detach all displays. * New escapes %< %>, + and - flag for %w. * Added eval command, added -h option to detach. * Also set flayer when processing -X commands. * use getpt() on linux systems. doc patches from * Adam Lazur. tty flow/intr cleanup. * -- DISTRIBUTED * 29.08.2002 3.09.12 Port to POSIX 1003.1-2001 hosts (Paul Eggert). * Fixed encoding for reattach password test. * Fixed NUL characters when encodings are active. * Fixed silly encodings bugs. Fixed bogus * oldflayer when a window gets freed. * Altscreen support by Gurusamy Sarathy. * Reuse old password in builtin_screenlock. * -- DISTRIBUTED * 05.09.2002 3.09.13 added missing break statement that broke * the eval command. * -- DISTRIBUTED * 13.03.2003 3.09.15 Console workaround for linux. Scrolling-region * reset fix. GBK encoding added. * support for unicode combining characters added. * openpty() support added (thomas@xs4all.nl). * preselect of blank window ('-') or window * list ('=') added. Added %` string escape * and backtick command. * -- DISTRIBUTED * 08.09.2003 4.00.00 rewrote nonblock command, added defnonblock. * added zmodem support (catch & passthrough). * added screenblanker. * fixed a couple of GBK bugs. * rewrote command parsing. * added -m option to windowlist (Felix Rosencrantz) * -- DISTRIBUTED * 18.09.2003 4.00.01 fixed two small bugs in the new parser. * -- DISTRIBUTED * 05.12.2003 4.00.02 fixed a bug in the ansi parser. fixed execs * on ttys. fixed hardstatus line on blanked screen. * -- DISTRIBUTED * 11.10.2004, 4.00.03jw handle StartRc errors nonfatal if due to a msg. * 12.10.2004, 4.00.03jw1 let docu of 'split' 'focus' 'remove' and 'only' refer to each other. * 01.11.2004, 4.00.03jw2 zombie command has new option 'onerror' * 2005-12-19, 4.00.03jw3 syntax error. */ #define ORIGIN "GNU" #define REV 4 #define VERS 9 #define PATCHLEVEL 1 #define DATE "20-Aug-23" #define STATE "" screen-4.9.1/nethack.c0000664000175000017500000001122714467014146013245 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "config.h" #include "screen.h" #ifdef NETHACK extern int nethackflag; #endif struct nlstrans { char *from; char *to; }; #ifdef NETHACK static struct nlstrans nethacktrans[] = { {"Cannot lock terminal - fork failed", "Cannot fork terminal - lock failed"}, {"Got only %d bytes from %s", "You choke on your food: %d bytes from %s"}, {"Copy mode - Column %d Line %d(+%d) (%d,%d)", "Welcome to hacker's treasure zoo - Column %d Line %d(+%d) (%d,%d)"}, {"First mark set - Column %d Line %d", "You drop a magic marker - Column %d Line %d"}, {"Copy mode aborted", "You escaped the dungeon."}, {"Filter removed.", "You have a sad feeling for a moment..."}, {"Window %d (%s) killed.", "You destroy poor window %d (%s)."}, {"Window %d (%s) is now being monitored for all activity.", "You feel like someone is watching you..."}, {"Window %d (%s) is no longer being monitored for activity.", "You no longer sense the watcher's presence."}, {"empty buffer", "Nothing happens."}, {"switched to audible bell.", "Suddenly you can't see your bell!"}, {"switched to visual bell.", "Your bell is no longer invisible."}, {"The window is now being monitored for %d sec. silence.", "You feel like someone is waiting for %d sec. silence..."}, {"The window is no longer being monitored for silence.", "You no longer sense the watcher's silence."}, {"No other window.", "You cannot escape from window %d!"}, {"Logfile \"%s\" closed.", "You put away your scroll of logging named \"%s\"." }, {"Error opening logfile \"%s\"", "You don't seem to have a scroll of logging named \"%s\"."}, {"Creating logfile \"%s\".", "You start writing on your scroll of logging named \"%s\"."}, {"Appending to logfile \"%s\".", "You add to your scroll of logging named \"%s\"."}, {"Detach aborted.", "The blast of disintegration whizzes by you!"}, {"Empty register.", "Nothing happens."}, {"[ Passwords don't match - checking turned off ]", "[ Passwords don't match - your armor crumbles away ]"}, {"Aborted because of window size change.", "KAABLAMM!!! You triggered a land mine!"}, {"Out of memory.", "Who was that Maude person anyway?"}, {"getpwuid() can't identify your account!", "An alarm sounds through the dungeon...\nThe Keystone Kops are after you!"}, {"Must be connected to a terminal.", "You must play from a terminal."}, {"No Sockets found in %s.\n", "This room is empty (%s).\n"}, {"New screen...", "Be careful! New screen tonight."}, {"Child has been stopped, restarting.", "You regain consciousness."}, {"There are screens on:", "Your inventory:"}, {"There is a screen on:", "Your inventory:"}, {"There are several screens on:", "Prove thyself worthy or perish:"}, {"There is a suitable screen on:", "You see here a good looking screen:"}, {"There are several suitable screens on:", "You may wish for a screen, what do you want?"}, {"%d socket%s wiped out.", "You hear %d distant explosion%s."}, {"Remove dead screens with 'screen -wipe'.", "The dead screen%s touch%s you. Try 'screen -wipe'."}, {"Illegal reattach attempt from terminal %s.", "'%s' tries to touch your session, but fails."}, {"Could not write %s", "%s is too hard to dig in"}, {0, 0} }; #endif const char * DoNLS(from) const char *from; { #ifdef NETHACK struct nlstrans *t; if (nethackflag) { for (t = nethacktrans; t->from; t++) if (strcmp(from, t->from) == 0) return t->to; } #endif return from; } screen-4.9.1/canvas.c0000664000175000017500000005124114467014146013103 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "config.h" #include "screen.h" #include "extern.h" #include "canvas.h" #include "list_generic.h" extern struct display *display; extern struct win *fore, *windows; extern struct layer *flayer; extern int captionalways; extern struct LayFuncs BlankLf; extern int focusminwidth, focusminheight; static void CanvasInitBlank(cv) struct canvas *cv; { cv->c_blank.l_cvlist = cv; cv->c_blank.l_width = cv->c_xe - cv->c_xs + 1; cv->c_blank.l_height = cv->c_ye - cv->c_ys + 1; cv->c_blank.l_x = cv->c_blank.l_y = 0; cv->c_blank.l_layfn = &BlankLf; cv->c_blank.l_data = 0; cv->c_blank.l_next = 0; cv->c_blank.l_bottom = &cv->c_blank; cv->c_blank.l_blocking = 0; cv->c_layer = &cv->c_blank; } static void FreePerp(pcv) struct canvas *pcv; { struct canvas *cv; if (!pcv->c_slperp) return; cv = pcv->c_slperp; cv->c_slprev = pcv->c_slprev; if (cv->c_slprev) cv->c_slprev->c_slnext = cv; cv->c_slback = pcv->c_slback; if (cv->c_slback && cv->c_slback->c_slperp == pcv) cv->c_slback->c_slperp = cv; cv->c_slorient = pcv->c_slorient; cv->c_slweight = pcv->c_slweight; while (cv->c_slnext) { cv = cv->c_slnext; cv->c_slorient = pcv->c_slorient; cv->c_slback = pcv->c_slback; cv->c_slweight = pcv->c_slweight; } cv->c_slnext = pcv->c_slnext; if (cv->c_slnext) cv->c_slnext->c_slprev = cv; LayerCleanupMemory(&pcv->c_blank); free(pcv); } void FreeCanvas(cv) struct canvas *cv; { struct viewport *vp, *nvp; struct canvas **cvp; struct win *p; if (cv->c_slprev) cv->c_slprev->c_slnext = cv->c_slnext; if (cv->c_slnext) cv->c_slnext->c_slprev = cv->c_slprev; if (cv->c_slback && cv->c_slback->c_slperp == cv) cv->c_slback->c_slperp = cv->c_slnext ? cv->c_slnext : cv->c_slprev; if (cv->c_slperp) { while (cv->c_slperp) FreeCanvas(cv->c_slperp); LayerCleanupMemory(&cv->c_blank); free(cv); return; } if (display) { if (D_forecv == cv) D_forecv = 0; /* remove from canvas chain as SetCanvasWindow might call * some layer function */ for (cvp = &D_cvlist; *cvp ; cvp = &(*cvp)->c_next) if (*cvp == cv) { *cvp = cv->c_next; break; } } p = cv->c_layer ? Layer2Window(cv->c_layer) : 0; SetCanvasWindow(cv, 0); if (p) WindowChanged(p, 'u'); if (flayer == cv->c_layer) flayer = 0; for (vp = cv->c_vplist; vp; vp = nvp) { vp->v_canvas = 0; nvp = vp->v_next; vp->v_next = 0; free(vp); } evdeq(&cv->c_captev); LayerCleanupMemory(&cv->c_blank); free(cv); } int CountCanvas(cv) struct canvas *cv; { int num = 0; for (; cv; cv = cv->c_slnext) { if (cv->c_slperp) { struct canvas *cvp; int nump = 1, n; for (cvp = cv->c_slperp; cvp; cvp = cvp->c_slnext) if (cvp->c_slperp) { n = CountCanvas(cvp->c_slperp); if (n > nump) nump = n; } num += nump; } else num++; } return num; } int CountCanvasPerp(cv) struct canvas *cv; { struct canvas *cvp; int num = 1, n; for (cvp = cv->c_slperp; cvp; cvp = cvp->c_slnext) if (cvp->c_slperp) { n = CountCanvas(cvp->c_slperp); if (n > num) num = n; } return num; } struct canvas * FindCanvas(x, y) int x, y; { struct canvas *cv, *mcv = 0; int m, mm = 0; for (cv = D_cvlist; cv; cv = cv->c_next) { /* ye + 1 because of caption line */ if (x >= cv->c_xs && x <= cv->c_xe && y >= cv->c_ys && y <= cv->c_ye + 1) return cv; if (cv == D_forecv) continue; m = 0; if (x >= D_forecv->c_xs && x <= D_forecv->c_xe) { if (x < cv->c_xs || x > cv->c_xe) continue; if (y < D_forecv->c_ys && y < cv->c_ys) continue; if (y > D_forecv->c_ye + 1 && y > cv->c_ye + 1) continue; if (y < cv->c_ys) m = cv->c_ys - y; if (y > cv->c_ye + 1) m = y - (cv->c_ye + 1); } if (y >= D_forecv->c_ys && y <= D_forecv->c_ye + 1) { if (y < cv->c_ys || y > cv->c_ye + 1) continue; if (x < D_forecv->c_xs && x < cv->c_xs) continue; if (x > D_forecv->c_xe && x > cv->c_xe) continue; if (x < cv->c_xs) m = cv->c_xs - x; if (x > cv->c_xe) m = x - cv->c_xe; } if (m && (!mm || m < mm)) { mcv = cv; mm = m; } } return mcv ? mcv : D_forecv; } void SetCanvasWindow(cv, wi) struct canvas *cv; struct win *wi; { struct win *p = 0, **pp; struct layer *l; struct canvas *cvp, **cvpp; l = cv->c_layer; display = cv->c_display; if (l) { /* remove old layer */ for (cvpp = &l->l_cvlist; (cvp = *cvpp); cvpp = &cvp->c_lnext) if (cvp == cv) break; ASSERT(cvp); *cvpp = cvp->c_lnext; p = Layer2Window(l); l = cv->c_layer; cv->c_layer = 0; if (p && cv == D_forecv) { #ifdef MULTIUSER ReleaseAutoWritelock(display, p); #endif if (p->w_silence) { SetTimeout(&p->w_silenceev, p->w_silencewait * 1000); evenq(&p->w_silenceev); } D_other = fore; D_fore = 0; } if (l->l_cvlist == 0 && (p == 0 || l != p->w_savelayer)) KillLayerChain(l); } /* find right layer to display on canvas */ if (wi && wi->w_type != W_TYPE_GROUP) { l = &wi->w_layer; if (wi->w_savelayer && (wi->w_blocked || wi->w_savelayer->l_cvlist == 0)) l = wi->w_savelayer; } else { l = &cv->c_blank; if (wi) l->l_data = (char *)wi; else l->l_data = 0; } /* add our canvas to the layer's canvaslist */ ASSERT(l->l_cvlist != cv); cv->c_lnext = l->l_cvlist; l->l_cvlist = cv; cv->c_layer = l; cv->c_xoff = cv->c_xs; cv->c_yoff = cv->c_ys; RethinkViewportOffsets(cv); if (flayer == 0) flayer = l; if (wi && wi->w_type == W_TYPE_GROUP) { /* auto-start windowlist on groups */ struct display *d = display; struct layer *oldflayer = flayer; flayer = l; display_windows(0, 0, wi); flayer = oldflayer; display = d; } if (wi && D_other == wi) D_other = wi->w_next; /* Might be 0, but that's OK. */ if (cv == D_forecv) { D_fore = wi; fore = D_fore; /* XXX ? */ if (wi) { #ifdef MULTIUSER ObtainAutoWritelock(display, wi); #endif /* * Place the window at the head of the most-recently-used list */ if (windows != wi) { for (pp = &windows; (p = *pp); pp = &p->w_next) if (p == wi) break; ASSERT(p); *pp = p->w_next; p->w_next = windows; windows = p; WListLinkChanged(); } } } } static void cv_winid_fn(ev, data) struct event *ev; char *data; { int ox, oy; struct canvas *cv = (struct canvas *)data; display = cv->c_display; if (D_status == STATUS_ON_WIN) { SetTimeout(ev, 1); evenq(ev); return; } ox = D_x; oy = D_y; if (cv->c_ye + 1 < D_height) RefreshLine(cv->c_ye + 1, 0, D_width - 1, 0); if (ox != -1 && oy != -1) GotoPos(ox, oy); } int MakeDefaultCanvas() { struct canvas *cv; ASSERT(display); if ((cv = (struct canvas *)calloc(1, sizeof *cv)) == 0) return -1; cv->c_xs = 0; cv->c_xe = D_width - 1; cv->c_ys = (D_has_hstatus == HSTATUS_FIRSTLINE); cv->c_ye = D_height - 1 - (D_has_hstatus == HSTATUS_LASTLINE) - captionalways; debug2("MakeDefaultCanvas 0,0 %d,%d\n", cv->c_xe, cv->c_ye); cv->c_xoff = 0; cv->c_yoff = 0; cv->c_next = 0; cv->c_display = display; cv->c_vplist = 0; cv->c_slnext = 0; cv->c_slprev = 0; cv->c_slperp = 0; cv->c_slweight = 1; cv->c_slback = &D_canvas; D_canvas.c_slperp = cv; D_canvas.c_xs = cv->c_xs; D_canvas.c_xe = cv->c_xe; D_canvas.c_ys = cv->c_ys; D_canvas.c_ye = cv->c_ye; cv->c_slorient = SLICE_UNKN; cv->c_captev.type = EV_TIMEOUT; cv->c_captev.data = (char *)cv; cv->c_captev.handler = cv_winid_fn; CanvasInitBlank(cv); cv->c_lnext = 0; D_cvlist = cv; RethinkDisplayViewports(); D_forecv = cv; /* default input focus */ return 0; } static struct canvas ** CreateCanvasChainRec(cv, cvp) struct canvas *cv; struct canvas **cvp; { for (; cv; cv = cv->c_slnext) { if (cv->c_slperp) cvp = CreateCanvasChainRec(cv->c_slperp, cvp); else { *cvp = cv; cvp = &cv->c_next; } } return cvp; } void RecreateCanvasChain() { struct canvas **cvp; cvp = CreateCanvasChainRec(D_canvas.c_slperp, &D_cvlist); *cvp = 0; } void EqualizeCanvas(cv, gflag) struct canvas *cv; int gflag; { struct canvas *cv2; for (; cv; cv = cv->c_slnext) { if (cv->c_slperp && gflag) { cv->c_slweight = CountCanvasPerp(cv); for (cv2 = cv->c_slperp; cv2; cv2 = cv2->c_slnext) if (cv2->c_slperp) EqualizeCanvas(cv2->c_slperp, gflag); } else cv->c_slweight = 1; } } void ResizeCanvas(cv) struct canvas *cv; { struct canvas *cv2, *cvn, *fcv; int nh, i, maxi, hh, m, w, wsum; int need, got; int xs, ys, xe, ye; int focusmin = 0; xs = cv->c_xs; ys = cv->c_ys; xe = cv->c_xe; ye = cv->c_ye; cv = cv->c_slperp; debug2("ResizeCanvas: %d,%d", xs, ys); debug2(" %d,%d\n", xe, ye); if (cv == 0) return; if (cv->c_slorient == SLICE_UNKN) { ASSERT(!cv->c_slnext && !cv->c_slperp); cv->c_xs = xs; cv->c_xe = xe; cv->c_ys = ys; cv->c_ye = ye; cv->c_xoff = cv->c_xs; cv->c_yoff = cv->c_ys; cv->c_blank.l_width = cv->c_xe - cv->c_xs + 1; cv->c_blank.l_height = cv->c_ye - cv->c_ys + 1; return; } fcv = 0; if (focusminwidth || focusminheight) { debug("searching for focus canvas\n"); cv2 = D_forecv; while (cv2->c_slback) { if (cv2->c_slback == cv->c_slback) { fcv = cv2; focusmin = cv->c_slorient == SLICE_VERT ? focusminheight : focusminwidth; if (focusmin > 0) focusmin--; else if (focusmin < 0) focusmin = cv->c_slorient == SLICE_VERT ? ye - ys + 2 : xe - xs + 2; debug1("found, focusmin=%d\n", focusmin); } cv2 = cv2->c_slback; } } if (focusmin) { m = CountCanvas(cv) * 2; nh = cv->c_slorient == SLICE_VERT ? ye - ys + 2 : xe - xs + 2; nh -= m; if (nh < 0) nh = 0; if (focusmin > nh) focusmin = nh; debug1("corrected to %d\n", focusmin); } /* pass 1: calculate weight sum */ for (cv2 = cv, wsum = 0; cv2; cv2 = cv2->c_slnext) { debug1(" weight %d\n", cv2->c_slweight); wsum += cv2->c_slweight; } debug1("wsum = %d\n", wsum); if (wsum == 0) wsum = 1; w = wsum; /* pass 2: calculate need/excess space */ nh = cv->c_slorient == SLICE_VERT ? ye - ys + 2 : xe - xs + 2; for (cv2 = cv, need = got = 0; cv2; cv2 = cv2->c_slnext) { m = cv2->c_slperp ? CountCanvasPerp(cv2) * 2 - 1 : 1; if (cv2 == fcv) m += focusmin; hh = cv2->c_slweight ? nh * cv2->c_slweight / w : 0; w -= cv2->c_slweight; nh -= hh; debug2(" should %d min %d\n", hh, m); if (hh <= m + 1) need += m + 1 - hh; else got += hh - m - 1; } debug2("need: %d, got %d\n", need, got); if (need > got) need = got; /* pass 3: distribute space */ nh = cv->c_slorient == SLICE_VERT ? ye - ys + 2 : xe - xs + 2; i = cv->c_slorient == SLICE_VERT ? ys : xs; maxi = cv->c_slorient == SLICE_VERT ? ye : xe; w = wsum; for (; cv; cv = cvn) { cvn = cv->c_slnext; if (i > maxi) { if (cv->c_slprev && !cv->c_slback->c_slback && !cv->c_slprev->c_slperp && !cv->c_slprev->c_slprev) { cv->c_slprev->c_slorient = SLICE_UNKN; if (!captionalways) { cv->c_slback->c_ye++; cv->c_slprev->c_ye++; } } SetCanvasWindow(cv, 0); FreeCanvas(cv); continue; } m = cv->c_slperp ? CountCanvasPerp(cv) * 2 - 1 : 1; if (cv == fcv) m += focusmin; hh = cv->c_slweight ? nh * cv->c_slweight / w : 0; w -= cv->c_slweight; nh -= hh; debug2(" should %d min %d\n", hh, m); if (hh <= m + 1) { hh = m + 1; debug1(" -> %d\n", hh); } else { int hx = 1; //FIXME Division by zero (got) is posible. "hx = 1" is random number here!!! if (got != 0) hx = need * (hh - m - 1) / got; else debug(" got = 0\n"); debug3(" -> %d - %d = %d\n", hh, hx, hh - hx); got -= (hh - m - 1); hh -= hx; need -= hx; debug2(" now need=%d got=%d\n", need, got); } ASSERT(hh >= m + 1); /* hh is window size plus pation line */ if (i + hh > maxi + 2) { hh = maxi + 2 - i; debug1(" not enough space, reducing to %d\n", hh); } if (i + hh == maxi + 1) { hh++; debug(" incrementing as no other canvas will fit\n"); } if (cv->c_slorient == SLICE_VERT) { cv->c_xs = xs; cv->c_xe = xe; cv->c_ys = i; cv->c_ye = i + hh - 2; cv->c_xoff = xs; cv->c_yoff = i; } else { cv->c_xs = i; cv->c_xe = i + hh - 2; cv->c_ys = ys; cv->c_ye = ye; cv->c_xoff = i; cv->c_yoff = ys; } cv->c_xoff = cv->c_xs; cv->c_yoff = cv->c_ys; cv->c_blank.l_width = cv->c_xe - cv->c_xs + 1; cv->c_blank.l_height = cv->c_ye - cv->c_ys + 1; if (cv->c_slperp) { ResizeCanvas(cv); if (!cv->c_slperp->c_slnext) { debug("deleting perp node\n"); FreePerp(cv->c_slperp); FreePerp(cv); } } i += hh; } } static struct canvas * AddPerp(cv) struct canvas *cv; { struct canvas *pcv; debug("Creating new perp node\n"); if ((pcv = (struct canvas *)calloc(1, sizeof *cv)) == 0) return 0; pcv->c_next = 0; pcv->c_display = cv->c_display; pcv->c_slnext = cv->c_slnext; pcv->c_slprev = cv->c_slprev; pcv->c_slperp = cv; pcv->c_slback = cv->c_slback; if (cv->c_slback && cv->c_slback->c_slperp == cv) cv->c_slback->c_slperp = pcv; pcv->c_slorient = cv->c_slorient; pcv->c_xoff = 0; pcv->c_yoff = 0; pcv->c_xs = cv->c_xs; pcv->c_xe = cv->c_xe; pcv->c_ys = cv->c_ys; pcv->c_ye = cv->c_ye; if (pcv->c_slnext) pcv->c_slnext->c_slprev = pcv; if (pcv->c_slprev) pcv->c_slprev->c_slnext = pcv; pcv->c_slweight = cv->c_slweight; CanvasInitBlank(pcv); cv->c_slweight = 1; cv->c_slnext = 0; cv->c_slprev = 0; cv->c_slperp = 0; cv->c_slback = pcv; cv->c_slorient = SLICE_UNKN; return pcv; } int AddCanvas(orient) int orient; { struct canvas *cv; int xs, xe, ys, ye; int h, num; cv = D_forecv; debug2("AddCanvas orient %d, forecv is %d\n", orient, cv->c_slorient); if (cv->c_slorient != SLICE_UNKN && cv->c_slorient != orient) if (!AddPerp(cv)) return -1; cv = D_forecv; xs = cv->c_slback->c_xs; xe = cv->c_slback->c_xe; ys = cv->c_slback->c_ys; ye = cv->c_slback->c_ye; if (!captionalways && cv == D_canvas.c_slperp && !cv->c_slnext) ye--; /* need space for caption */ debug2("Adding Canvas to slice %d,%d ", xs, ys); debug2("%d,%d\n", xe, ye); num = CountCanvas(cv->c_slback->c_slperp) + 1; debug1("Num = %d\n", num); if (orient == SLICE_VERT) h = ye - ys + 1; else h = xe - xs + 1; h -= 2 * num - 1; if (h < 0) return -1; /* can't fit in */ if ((cv = (struct canvas *)calloc(1, sizeof *cv)) == 0) return -1; D_forecv->c_slback->c_ye = ye; /* in case we modified it above */ D_forecv->c_slorient = orient; /* in case it was UNKN */ cv->c_slnext = D_forecv->c_slnext; cv->c_slprev = D_forecv; D_forecv->c_slnext = cv; if (cv->c_slnext) cv->c_slnext->c_slprev = cv; cv->c_slorient = orient; cv->c_slback = D_forecv->c_slback; cv->c_xs = xs; cv->c_xe = xe; cv->c_ys = ys; cv->c_ye = ye; cv->c_xoff = 0; cv->c_yoff = 0; cv->c_display = display; cv->c_vplist = 0; cv->c_captev.type = EV_TIMEOUT; cv->c_captev.data = (char *)cv; cv->c_captev.handler = cv_winid_fn; CanvasInitBlank(cv); cv->c_lnext = 0; cv->c_next = 0; cv = cv->c_slback; EqualizeCanvas(cv->c_slperp, 0); ResizeCanvas(cv); RecreateCanvasChain(); RethinkDisplayViewports(); ResizeLayersToCanvases(); return 0; } void RemCanvas() { int ye; struct canvas *cv; debug("RemCanvas\n"); cv = D_forecv; ye = cv->c_slback->c_ye; if (cv->c_slorient == SLICE_UNKN) return; while (cv->c_slprev) cv = cv->c_slprev; if (!cv->c_slnext) return; if (!cv->c_slnext->c_slnext && cv->c_slback->c_slback) { /* two canvases in slice, kill perp node */ cv = D_forecv; debug("deleting perp node\n"); FreePerp(cv->c_slprev ? cv->c_slprev : cv->c_slnext); FreePerp(cv->c_slback); } /* free canvas */ cv = D_forecv; D_forecv = cv->c_slprev; if (!D_forecv) D_forecv = cv->c_slnext; FreeCanvas(cv); cv = D_forecv; while (D_forecv->c_slperp) D_forecv = D_forecv->c_slperp; /* if only one canvas left, set orient back to unknown */ if (!cv->c_slnext && !cv->c_slprev && !cv->c_slback->c_slback && !cv->c_slperp) { cv->c_slorient = SLICE_UNKN; if (!captionalways) cv->c_slback->c_ye = ++ye; /* caption line no longer needed */ } cv = cv->c_slback; EqualizeCanvas(cv->c_slperp, 0); ResizeCanvas(cv); D_fore = Layer2Window(D_forecv->c_layer); flayer = D_forecv->c_layer; RecreateCanvasChain(); RethinkDisplayViewports(); ResizeLayersToCanvases(); } void OneCanvas() { struct canvas *cv = D_forecv, *ocv = 0; if (cv->c_slprev) { ocv = cv->c_slprev; cv->c_slprev->c_slnext = cv->c_slnext; } if (cv->c_slnext) { ocv = cv->c_slnext; cv->c_slnext->c_slprev = cv->c_slprev; } if (!ocv) return; if (cv->c_slback && cv->c_slback->c_slperp == cv) cv->c_slback->c_slperp = ocv; cv->c_slorient = SLICE_UNKN; while (D_canvas.c_slperp) FreeCanvas(D_canvas.c_slperp); cv = D_forecv; D_canvas.c_slperp = cv; cv->c_slback = &D_canvas; cv->c_slnext = 0; cv->c_slprev = 0; ASSERT(!cv->c_slperp); if (!captionalways) D_canvas.c_ye++; /* caption line no longer needed */ ResizeCanvas(&D_canvas); RecreateCanvasChain(); RethinkDisplayViewports(); ResizeLayersToCanvases(); } void DupLayoutCv(cvf, cvt, save) struct canvas *cvf, *cvt; int save; { while(cvf) { cvt->c_slorient = cvf->c_slorient; cvt->c_slweight = cvf->c_slweight; if (cvf == D_forecv) D_forecv = cvt; if (!save) { cvt->c_display = display; if (!cvf->c_slperp) { cvt->c_captev.type = EV_TIMEOUT; cvt->c_captev.data = (char *)cvt; cvt->c_captev.handler = cv_winid_fn; cvt->c_blank.l_cvlist = 0; cvt->c_blank.l_layfn = &BlankLf; cvt->c_blank.l_bottom = &cvt->c_blank; } cvt->c_layer = cvf->c_layer; } else { struct win *p = cvf->c_layer ? Layer2Window(cvf->c_layer) : 0; cvt->c_layer = p ? &p->w_layer : 0; } if (cvf->c_slperp) { cvt->c_slperp = (struct canvas *)calloc(1, sizeof(struct canvas)); cvt->c_slperp->c_slback = cvt; CanvasInitBlank(cvt->c_slperp); DupLayoutCv(cvf->c_slperp, cvt->c_slperp, save); } if (cvf->c_slnext) { cvt->c_slnext = (struct canvas *)calloc(1, sizeof(struct canvas)); cvt->c_slnext->c_slprev = cvt; cvt->c_slnext->c_slback = cvt->c_slback; CanvasInitBlank(cvt->c_slnext); } cvf = cvf->c_slnext; cvt = cvt->c_slnext; } } void PutWindowCv(cv) struct canvas *cv; { struct win *p; for (; cv; cv = cv->c_slnext) { if (cv->c_slperp) { PutWindowCv(cv->c_slperp); continue; } p = cv->c_layer ? (struct win *)cv->c_layer->l_data : 0; cv->c_layer = 0; SetCanvasWindow(cv, p); } } screen-4.9.1/layout.h0000664000175000017500000000446514467014146013160 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #ifndef SCREEN_LAYOUT_H #define SCREEN_LAYOUT_H #include "canvas.h" #define MAXLAY 10 struct layout { struct layout *lay_next; char *lay_title; int lay_number; struct canvas lay_canvas; struct canvas *lay_forecv; struct canvas *lay_cvlist; int lay_autosave; }; extern void AutosaveLayout __P((struct layout *)); extern void LoadLayout __P((struct layout *, struct canvas *)); extern void NewLayout __P((char *, int)); extern void SaveLayout __P((char *, struct canvas *)); extern void ShowLayouts __P((int)); extern struct layout *FindLayout __P((char *)); extern void UpdateLayoutCanvas __P((struct canvas *, struct win *)); extern struct layout *CreateLayout __P((char *, int)); extern void RemoveLayout __P((struct layout *)); extern int LayoutDumpCanvas __P((struct canvas *, char *)); extern void RenameLayout __P((struct layout *, const char *)); extern int RenumberLayout __P((struct layout *, int)); #endif /* SCREEN_LAYOUT_H */ screen-4.9.1/INSTALL0000664000175000017500000001313614467014146012516 0ustar alexalexInstallation of GNU screen. 0.) This instruction is quite lengthy ------------------------------------- ... and there are still important items near the end. Start here: Unpack. Screen comes as a compressed tar archive. You need gzip to uncompress. And... well, you probably already managed that step, when you are reading this. For general documentation on the coding and usage standards this distributions follows, see the GNU standards document on https://www.gnu.org/prep/standards/, especially the `Makefile Conventions', `Configuration', and `User Interfaces' sections. 0.) autogen.sh -------------- First, run ./autogen.sh. This will create configure file that you can use. This should be already done, so you can skip this step. 1.) configure & config.status ----------------------------- Run ./configure. This should create a reasonable Makefile and a config.h file suited for your machine. Rename config.status to reflect the architecture (hostname) where it was built. To reconfigure quickly for that architecture just run that config.status file. If this process fails, try to find out what configure did do and what it should have checked. And then please report a bug (https://savannah.gnu.org/bugs/?group=screen or mail screen-devel@gnu.org). Actually the initial Makefile that comes with the distribution just runs configure -- thus you can start by typing 'make' right after unpacking. You will be prompted to run 'make' again, which will really make screen. 2.) Makefile & config.h ----------------------- Look through the Makefile & user configuration section in config.h and check pathnames. Change them to suit your installation requirements. Usually sysadmins discuss the location of SOCKDIR, whether it should be in /tmp or not. At least it must be on a filesystem that supports sockets/fifos. SOCKDIR must not point into an AFS (Andrew File System) mounted directory. If you are uncertain about your NFS implementation, use a UFS directory for SOCKDIR. Personally, I favour a user's home directory and recommend the the /tmp/ area. The path for ETCSCREENRC may also need to be adapted. 3.) how to actually compile --------------------------- Run 'make'. Screen should compile without too many warnings :) The creation of term.h, comm.h, tty.c or osdef.h may fail on some machines for some odd reason. (E.g. the sed under SCO-unix is known to be case-insensitive and breaks term.h.) If so, please mail a short description of the problem to screen-devel@gnu.org and use the files ending in .dist as a replacement (or in case of osdef.h retry with an empty file). You can then try 'make install' (if you dare). 4.) where to install -------------------- You may well run screen from your private binary directory and with a private socket directory like $HOME/.screen. But to have a full featured screen and (from a user's point of view) more secure pty's you should consult a system administrator and discuss installing screen setuid-root in some globally accessible directory like /usr/local/bin. Consider this, when deciding whether you install screen setuid-root: - On some machines root privileges are required to open pty's. - Pty's should be owned by the user, so that she can do chmod to prevent intruder attacks. The PTYs used by screen will remain world read-writable if screen is not installed setuid-root. - Some commands only work properly when the pty is owned by the user. These include mesg and biff. - The ^At feature may need to lseek and read the kernel file to retrieve the load average. - On most machines utmp slots can only be created/manipulated with root privileges. Users will appear to be logged on the primary terminal instead of the screen windows, if screen is not installed setuid-root. - Multi-user screen sessions are only allowed when screen has a root-s-bit. - If screen sockets of multiple users are kept in one directory (e.g. /tmp/screens), this directory must be world writable when screen is not installed setuid-root. Any user can remove or abuse any socket then. 5.) doc/screen.1 & doc/screen.texinfo ------------------------------------- The man page doc/screen.1 should go to /usr/local/man/man1, or some similar directory. It should format nicely with nroff -man. If it does not, then try removing extra dots with: sed -e 's/^\.\././' < screen.1 | nroff -man The info page doc/screen.texinfo contains basically the same information as the man-page, we may have missed one or another thing in one of the files. If so, mail me. 6.) etc/screenrc & etc/etcscreenrc ---------------------------------- The files screenrc and etc/etcscreenrc are instructive samples that demonstrate what can/should be done from your private .screenrc and from $ETCSCREENRC -- do not just copy them. Read them. Look through the etcscreenrc file for system wide defaults that you like to set, e.g. autodetach off, startup_message off, vbell on, ... Since version 3.2.15 the screenrc file syntax changed slightly. All rc files from previous versions should be run through the 'newsyntax' script that comes with this package. If and only if you want to install screen as a console multiplexer, look at the *.sample files and what 'make cscreen' suggests. 7.) terminfo/screeninfo.src & terminfo/screencap ------------------------------------------------ Every now and then we update the termcap/terminfo entries for screen. E.g. keycodes were added in 3.6.0 -- thus you check that your termcap/terminfo database is up to date. See the README in the terminfo subdirectory. 8.) have fun ------------ To get an idea what the basic screen commands are, read the file README. Request snail mail address for liquid and solid donations. :-) screen-4.9.1/sched.h0000664000175000017500000000327614467014146012730 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ struct event { struct event *next; void (*handler) __P((struct event *, char *)); char *data; int fd; int type; int pri; struct timeval timeout; int queued; /* in evs queue */ int active; /* in fdset */ int *condpos; /* only active if condpos - condneg > 0 */ int *condneg; }; #define EV_TIMEOUT 0 #define EV_READ 1 #define EV_WRITE 2 #define EV_ALWAYS 3 screen-4.9.1/acconfig.h0000664000175000017500000003723214467014146013412 0ustar alexalex/* Copyright (c) 1993-2000 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ /********************************************************************** * * User Configuration Section */ /* * Maximum of simultaneously allowed windows per screen session. */ #ifndef MAXWIN # define MAXWIN 100 #endif /* * Define SOCKDIR to be the directory to contain the named sockets * screen creates. This should be in a common subdirectory, such as * /usr/local or /tmp. It makes things a little more secure if you * choose a directory which is not writable by everyone or where the * "sticky" bit is on, but this isn't required. * If SOCKDIR is not defined screen will put the named sockets in * the user's home directory. Notice that this can cause you problems * if some user's HOME directories are AFS- or NFS-mounted. Especially * AFS is unlikely to support named sockets. * * Screen will name the subdirectories "S-$USER" (e.g /tmp/S-davison). */ #undef SOCKDIR /* * Define this if the SOCKDIR is not shared between hosts. */ #define SOCKDIR_IS_LOCAL_TO_HOST /* * Screen can look for the environment variable $SYSSCREENRC and -if it * exists- load the file specified in that variable as global screenrc. * If you want to enable this feature, define ALLOW_SYSSCREENRC to one (1). * Otherwise ETCSCREENRC is always loaded. */ #define ALLOW_SYSSCREENRC 1 /* * Define CHECKLOGIN to force Screen users to enter their Unix password * in addition to the screen password. * * Define NOSYSLOG if yo do not have logging facilities. Currently * syslog() will be used to trace ``su'' commands only. */ #define CHECKLOGIN 1 #undef NOSYSLOG /* * define PTYMODE if you do not like the default of 0622, which allows * public write to your pty. * define PTYGROUP to some numerical group-id if you do not want the * tty to be in "your" group. * Note, screen is unable to change mode or group of the pty if it * is not installed with sufficient privilege. (e.g. set-uid-root) * define PTYROFS if the /dev/pty devices are mounted on a read-only * filesystem so screen should not even attempt to set mode or group * even if running as root (e.g. on TiVo). */ #undef PTYMODE #undef PTYGROUP #undef PTYROFS /* * If screen is NOT installed set-uid root, screen can provide tty * security by exclusively locking the ptys. While this keeps other * users from opening your ptys, it also keeps your own subprocesses * from being able to open /dev/tty. Define LOCKPTY to add this * exclusive locking. */ #undef LOCKPTY /* * If you'd rather see the status line on the first line of your * terminal rather than the last, define TOPSTAT. */ #undef TOPSTAT /* * define DETACH can detach a session. An absolute 'must'. */ #define DETACH /* * here come the erlangen extensions to screen: * define LOCK if you want to use a lock program for a screenlock. * define PASSWORD for secure reattach of your screen. * define COPY_PASTE to use the famous hacker's treasure zoo. * define POW_DETACH to have a detach_and_logout key (requires DETACH). * define REMOTE_DETACH (-d option) to move screen between terminals. * define AUTO_NUKE to enable Tim MacKenzies clear screen nuking * define PSEUDOS to allow window input/output filtering * define MULTI to allow multiple attaches. * define MULTIUSER to allow other users attach to your session * (if they are in the acl, of course) * define MAPKEYS to include input keyboard translation. * define FONT to support ISO2022/alternet charset support * define COLOR to include ansi color support. This may expose * a bug in x11r6-color-xterm. * define DW_CHARS to include support for double-width character * sets. * define ENCODINGS to include support for encodings like euc or big5. * Needs FONT to work. * define UTF8 if you want support for UTF-8 encoding. * Needs FONT and ENCODINGS to work. * define COLORS16 if you want 16 colors. * Needs COLOR to work. * define BUILTIN_TELNET to add telnet support to screen. * Syntax: screen //telnet host [port] * define RXVT_OSC if you want support for rxvts special * change fgcolor/bgcolor/bgpicture sequences */ #undef SIMPLESCREEN #ifndef SIMPLESCREEN # define LOCK # define PASSWORD # define COPY_PASTE # define REMOTE_DETACH # define POW_DETACH # define AUTO_NUKE # define PSEUDOS # define MULTI # define MULTIUSER # define MAPKEYS # define COLOR # define FONT # define DW_CHARS # define ENCODINGS # define UTF8 # define COLORS16 # define ZMODEM # define BLANKER_PRG #endif /* SIMPLESCREEN */ #undef BUILTIN_TELNET #undef RXVT_OSC #undef COLORS256 /* * If you have a braille display you should define HAVE_BRAILLE. * The code inside #ifdef HAVE_BRAILLE was contributed by Hadi Bargi * Rangin (bargi@dots.physics.orst.edu). * WARNING: this is more or less unsupported code, it may be full of * bugs leading to security holes, enable at your own risk! */ #undef HAVE_BRAILLE /* * As error messages are mostly meaningless to the user, we * try to throw out phrases that are somewhat more familiar * to ...well, at least familiar to us NetHack players. */ #ifndef NONETHACK # define NETHACK #endif /* NONETHACK */ /* * If screen is installed with permissions to update /etc/utmp (such * as if it is installed set-uid root), define UTMPOK. */ #define UTMPOK /* Set LOGINDEFAULT to one (1) * if you want entries added to /etc/utmp by default, else set it to * zero (0). * LOGINDEFAULT will be one (1) whenever LOGOUTOK is undefined! */ #define LOGINDEFAULT 1 /* Set LOGOUTOK to one (1) * if you want the user to be able to log her/his windows out. * (Meaning: They are there, but not visible in /etc/utmp). * Disabling this feature only makes sense if you have a secure /etc/utmp * database. * Negative examples: suns usually have a world writable utmp file, * xterm will run perfectly without s-bit. * * If LOGOUTOK is undefined and UTMPOK is defined, all windows are * initially and permanently logged in. * * Set CAREFULUTMP to one (1) if you want that users have at least one * window per screen session logged in. */ #define LOGOUTOK 1 #undef CAREFULUTMP /* * If UTMPOK is defined and your system (incorrectly) counts logins by * counting non-null entries in /etc/utmp (instead of counting non-null * entries with no hostname that are not on a pseudo tty), define USRLIMIT * to have screen put an upper-limit on the number of entries to write * into /etc/utmp. This helps to keep you from exceeding a limited-user * license. */ #undef USRLIMIT /* * both must be defined if you want to favor tcsendbreak over * other calls to generate a break condition on serial lines. * (Do not bother, if you are not using plain tty windows.) */ #define POSIX_HAS_A_GOOD_TCSENDBREAK #define SUNOS4_AND_WE_TRUST_TCSENDBREAK /* * to lower the interrupt load on the host machine, you may want to * adjust the VMIN and VTIME settings used for plain tty windows. * See the termio(4) manual page (Non-Canonical Mode Input Processing) * for details. * if undefined, VMIN=1, VTIME=0 is used as a default - this gives you * best user responsiveness, but highest interrupt frequency. * (Do not bother, if you are not using plain tty windows.) */ #define TTYVMIN 100 #define TTYVTIME 2 /* * looks like the above values are ignored by setting FNDELAY. * This is default for all pty/ttys, you may disable it for * ttys here. After playing with it for a while, one may find out * that this feature may cause screen to lock up. */ #ifdef bsdi # define TTY_DISABLE_FNBLOCK /* select barfs without it ... */ #endif /* * Some terminals, e.g. Wyse 120, use a bitfield to select attributes. * This doesn't work with the standard so/ul/m? terminal entries, * because they will cancel each other out. * On TERMINFO machines, "sa" (sgr) may work. If you want screen * to switch attributes only with sgr, define USE_SGR. * This is *not* recomended, do this only if you must. */ #undef USE_SGR /* * Define USE_LOCALE if you want screen to use the locale names * for the name of the month and day of the week. */ #undef USE_LOCALE /* * Define USE_PAM if your system supports PAM (Pluggable Authentication * Modules) and you want screen to use it instead of calling crypt(). * (You may also need to add -lpam to LIBS in the Makefile.) */ #undef USE_PAM /* * Define CHECK_SCREEN_W if you want screen to set TERM to screen-w * if the terminal width is greater than 131 columns. No longer needed * on modern systems which use $COLUMNS or the tty settings instead. */ #undef CHECK_SCREEN_W /********************************************************************** * * End of User Configuration Section * * Rest of this file is modified by 'configure' * Change at your own risk! * */ /* * Some defines to identify special unix variants */ #ifndef SVR4 #undef SVR4 #endif /* #ifndef __osf__ */ #ifndef MIPS #undef MIPS #endif /* #endif */ #ifndef OSX #undef OSX #endif #ifndef ISC #undef ISC #endif #ifndef sysV68 #undef sysV68 #endif #ifndef _POSIX_SOURCE #undef _POSIX_SOURCE #endif /* * Define POSIX if your system supports IEEE Std 1003.1-1988 (POSIX). */ #undef POSIX /* * Define BSDJOBS if you have BSD-style job control (both process * groups and a tty that deals correctly with them). */ #undef BSDJOBS /* * Define TERMIO if you have struct termio instead of struct sgttyb. * This is usually the case for SVID systems, where BSD uses sgttyb. * POSIX systems should define this anyway, even though they use * struct termios. */ #undef TERMIO /* * Define CYTERMIO if you have cyrillic termio modes. */ #undef CYTERMIO /* * Define TERMINFO if your machine emulates the termcap routines * with the terminfo database. * Thus the .screenrc file is parsed for * the command 'terminfo' and not 'termcap'. */ #undef TERMINFO /* * If your library does not define ospeed, define this. */ #undef NEED_OSPEED /* * Define SYSV if your machine is SYSV complient (Sys V, HPUX, A/UX) */ #ifndef SYSV #undef SYSV #endif /* * Define SIGVOID if your signal handlers return void. On older * systems, signal returns int, but on newer ones, it returns void. */ #undef SIGVOID /* * Define USESIGSET if you have sigset for BSD 4.1 reliable signals. */ #undef USESIGSET /* * Define SYSVSIGS if signal handlers must be reinstalled after * they have been called. */ #undef SYSVSIGS /* * Define BSDWAIT if your system defines a 'union wait' in * * Only allow BSDWAIT i.e. wait3 on nonposix systems, since * posix implies wait(3) and waitpid(3). vdlinden@fwi.uva.nl * */ #ifndef POSIX #undef BSDWAIT #endif /* * On RISCOS we prefer wait2() over wait3(). rouilj@sni-usa.com */ #ifdef BSDWAIT #undef USE_WAIT2 #endif /* * If your system has getutent(), pututline(), etc. to write to the * utmp file, define GETUTENT. */ #undef GETUTENT /* * Define UTHOST if the utmp file has a host field. */ #undef UTHOST /* * Define if you have the utempter utmp helper program */ #undef HAVE_UTEMPTER /* * If ttyslot() breaks getlogin() by returning indexes to utmp entries * of type DEAD_PROCESS, then our getlogin() replacement should be * selected by defining BUGGYGETLOGIN. */ #undef BUGGYGETLOGIN /* * If your system has the calls setreuid() and setregid(), * define HAVE_SETREUID. Otherwise screen will use a forked process to * safely create output files without retaining any special privileges. */ #undef HAVE_SETRESUID #undef HAVE_SETREUID /* * If your system supports BSD4.4's seteuid() and setegid(), define * HAVE_SETEUID. */ #undef HAVE_SETEUID /* * execvpe is now defined in some systems. */ #undef HAVE_EXECVPE /* * If you want the "time" command to display the current load average * define LOADAV. Maybe you must install screen with the needed * privileges to read /dev/kmem. * Note that NLIST_ stuff is only checked, when getloadavg() is not available. */ #undef LOADAV #undef LOADAV_NUM #undef LOADAV_TYPE #undef LOADAV_SCALE #undef LOADAV_GETLOADAVG #undef LOADAV_UNIX #undef LOADAV_AVENRUN #undef LOADAV_USE_NLIST64 #undef NLIST_DECLARED #undef NLIST_STRUCT #undef NLIST_NAME_UNION /* * If your system has the new format /etc/ttys (like 4.3 BSD) and the * getttyent(3) library functions, define GETTTYENT. */ #undef GETTTYENT /* * Define USEBCOPY if the bcopy/memcpy from your system's C library * supports the overlapping of source and destination blocks. When * undefined, screen uses its own (probably slower) version of bcopy(). * * SYSV machines may have a working memcpy() -- Oh, this is * quite unlikely. Tell me if you see one. * "But then, memmove() should work, if at all available" he thought... * Boing, never say "works everywhere" unless you checked SCO UNIX. * Their memove fails the test in the configure script. Sigh. (Juergen) */ #undef USEBCOPY #undef USEMEMCPY #undef USEMEMMOVE /* * If your system has vsprintf() and requires the use of the macros in * "varargs.h" to use functions with variable arguments, * define USEVARARGS. */ #undef USEVARARGS /* * If the select return value doesn't treat a descriptor that is * usable for reading and writing as two hits, define SELECT_BROKEN. */ #undef SELECT_BROKEN /* * Define this if your system exits select() immediatly if a pipe is * opened read-only and no writer has opened it. */ #undef BROKEN_PIPE /* * Define this if the unix-domain socket implementation doesn't * create a socket in the filesystem. */ #undef SOCK_NOT_IN_FS /* * If your system has setenv() and unsetenv() define USESETENV */ #undef USESETENV /* * If setenv() takes 3 arguments define HAVE_SETENV_3 */ #undef HAVE_SETENV_3 /* * If setenv() takes 2 arguments define HAVE_SETENV_2 */ #undef HAVE_SETENV_2 /* * If your system does not come with a setenv()/putenv()/getenv() * functions, you may bring in our own code by defining NEEDPUTENV. */ #undef NEEDPUTENV /* * If the passwords are stored in a shadow file and you want the * builtin lock to work properly, define SHADOWPW. */ #undef SHADOWPW /* * define HAVE_NL_LANGINFO if your system has the nl_langinfo() call * and defines CODESET. */ #undef HAVE_NL_LANGINFO /* * Newer versions of Solaris include fdwalk, which can greatly improve * the startup time of screen; otherwise screen spends a lot of time * closing file descriptors. */ #undef HAVE_FDWALK /* * define HAVE_DEV_PTC if you have a /dev/ptc character special * device. */ #undef HAVE_DEV_PTC /* * define HAVE_SVR4_PTYS if you have a /dev/ptmx character special * device and support the ptsname(), grantpt(), unlockpt() functions. */ #undef HAVE_SVR4_PTYS /* * define PTYRANGE0 and or PTYRANGE1 if you want to adapt screen * to unusual environments. E.g. For SunOs the defaults are "qpr" and * "0123456789abcdef". For SunOs 4.1.2 * #define PTYRANGE0 "pqrstuvwxyzPQRST" * is recommended by Dan Jacobson. */ #undef PTYRANGE0 #undef PTYRANGE1 screen-4.9.1/socket.c0000664000175000017500000013335514467014146013127 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "config.h" #include #include #include #include #include #include # include # ifdef _OpenBSD_ # include # endif # include #ifndef SIGINT # include #endif #include "screen.h" #ifdef HAVE_DIRENT_H # include #else # include # define dirent direct #endif #ifndef CMSG_LEN #define CMSG_LEN(length) ((_CMSG_DATA_ALIGN(sizeof(struct cmsghdr))) + (length)) #endif #ifndef CMSG_SPACE #define CMSG_SPACE(length) ((_CMSG_DATA_ALIGN(sizeof(struct cmsghdr))) + (_CMSG_DATA_ALIGN(length))) #endif #include "extern.h" #include "list_generic.h" static int CheckPid __P((int)); static void ExecCreate __P((struct msg *)); static void DoCommandMsg __P((struct msg *)); #if defined(_SEQUENT_) # define connect sconnect /* _SEQUENT_ has braindamaged connect */ static int sconnect __P((int, struct sockaddr *, int)); #endif static void FinishAttach __P((struct msg *)); static void FinishDetach __P((struct msg *)); static void AskPassword __P((struct msg *)); extern char *RcFileName, *extra_incap, *extra_outcap; extern int ServerSocket, real_uid, real_gid, eff_uid, eff_gid; extern int dflag, iflag, rflag, lsflag, quietflag, wipeflag, xflag; extern int queryflag; extern char *attach_tty, *LoginName, HostName[]; extern struct display *display, *displays; extern struct win *fore, **wtab, *console_window, *windows; extern struct layer *flayer; extern struct layout *layout_attach, *layout_last, layout_last_marker; extern struct NewWindow nwin_undef; #ifdef MULTIUSER extern char *multi; #endif extern int maxwin; extern char *getenv(); extern char SockPath[]; extern struct event serv_read; extern char *rc_name; extern struct comm comms[]; #ifdef MULTIUSER # define SOCKMODE (S_IWRITE | S_IREAD | (displays ? S_IEXEC : 0) | (multi ? 1 : 0)) #else # define SOCKMODE (S_IWRITE | S_IREAD | (displays ? S_IEXEC : 0)) #endif /* * Socket directory manager * * fdp: pointer to store the first good socket. * nfoundp: pointer to store the number of sockets found matching. * notherp: pointer to store the number of sockets not matching. * match: string to match socket name. * * The socket directory must be in SockPath! * The global variables LoginName, multi, rflag, xflag, dflag, * quietflag, SockPath are used. * * The first good socket is stored in fdp and its name is * appended to SockPath. * If none exists or fdp is NULL SockPath is not changed. * * Returns: number of good sockets. * */ int FindSocket(fdp, nfoundp, notherp, match, is_sock) int *fdp; int *nfoundp, *notherp; char *match; bool *is_sock; { DIR *dirp; struct dirent *dp; struct stat st; int mode; int sdirlen; int matchlen = 0; char *name, *n; int firsts = -1, sockfd; char *firstn = NULL; int nfound = 0, ngood = 0, ndead = 0, nwipe = 0, npriv = 0; int nperfect = 0; struct sent { struct sent *next; int mode; char *name; } *slist, **slisttail, *sent, *nsent; if (match) { matchlen = strlen(match); #ifdef NAME_MAX if (matchlen > NAME_MAX) matchlen = NAME_MAX; #endif } /* * SockPath contains the socket directory. * At the end of FindSocket the socket name will be appended to it. * Thus FindSocket() can only be called once! */ sdirlen = strlen(SockPath); #ifdef USE_SETEUID xseteuid(real_uid); xsetegid(real_gid); #endif if ((dirp = opendir(SockPath)) == 0) Panic(errno, "Cannot opendir %s", SockPath); slist = 0; slisttail = &slist; while ((dp = readdir(dirp))) { int cmatch = 0; name = dp->d_name; debug1("- %s\n", name); if (*name == 0 || *name == '.' || strlen(name) > 2*MAXSTR) continue; if (matchlen) { n = name; /* if we don't want to match digits. Skip them */ if ((*match <= '0' || *match > '9') && (*n > '0' && *n <= '9')) { while (*n >= '0' && *n <= '9') n++; if (*n == '.') n++; } /* the tty prefix is optional */ if (strncmp(match, "tty", 3) && strncmp(n, "tty", 3) == 0) n += 3; if (strncmp(match, n, matchlen)) { if (n == name && *match > '0' && *match <= '9') { while (*n >= '0' && *n <= '9') n++; if (*n == '.') n++; if (strncmp(match, n, matchlen)) continue; } else continue; } else cmatch = (*(n + matchlen) == 0); debug1(" -> matched %s\n", match); } sprintf(SockPath + sdirlen, "/%s", name); debug1("stat %s\n", SockPath); errno = 0; debug2("uid = %d, gid = %d\n", getuid(), getgid()); debug2("euid = %d, egid = %d\n", geteuid(), getegid()); if (stat(SockPath, &st)) { debug1("errno = %d\n", errno); continue; } *is_sock = S_ISSOCK(st.st_mode); if (!(*is_sock) && !S_ISFIFO(st.st_mode)) continue; debug2("st.st_uid = %d, real_uid = %d\n", st.st_uid, real_uid); #ifdef SOCKDIR /* if SOCKDIR is not defined, the socket is in $HOME. in that case it does not make sense to compare uids. */ if ((int)st.st_uid != real_uid) continue; #endif mode = (int)st.st_mode & 0777; debug1(" has mode 0%03o\n", mode); #ifdef MULTIUSER if (multi && ((mode & 0677) != 0601)) { debug(" is not a MULTI-USER session"); if (strcmp(multi, LoginName)) { debug(" and we are in a foreign directory.\n"); mode = -4; } else { debug(", but it is our own session.\n"); } } #endif debug(" store it.\n"); if ((sent = (struct sent *)malloc(sizeof(struct sent))) == 0) continue; sent->next = 0; sent->name = SaveStr(name); sent->mode = mode; *slisttail = sent; slisttail = &sent->next; nfound++; sockfd = MakeClientSocket(0, *is_sock); #ifdef USE_SETEUID /* MakeClientSocket sets ids back to eff */ xseteuid(real_uid); xsetegid(real_gid); #endif if (sockfd == -1) { debug2(" MakeClientSocket failed, unreachable? %d %d\n", matchlen, wipeflag); sent->mode = -3; #ifndef SOCKDIR_IS_LOCAL_TO_HOST /* Unreachable - it is dead if we detect that it's local * or we specified a match */ n = name + strlen(name) - 1; while (n != name && *n != '.') n--; if (matchlen == 0 && !(*n == '.' && n[1] && strncmp(HostName, n + 1, strlen(n + 1)) == 0)) { npriv++; /* a good socket that was not for us */ continue; } #endif ndead++; sent->mode = -1; if (wipeflag) { if (unlink(SockPath) == 0) { sent->mode = -2; nwipe++; } } continue; } mode &= 0776; /* Shall we connect ? */ debug2(" connecting: mode=%03o, rflag=%d, ", mode, rflag); debug2("xflag=%d, dflag=%d ?\n", xflag, dflag); /* * mode 600: socket is detached. * mode 700: socket is attached. * xflag implies rflag here. * * fail, when socket mode mode is not 600 or 700 * fail, when we want to detach w/o reattach, but it already is detached. * fail, when we only want to attach, but mode 700 and not xflag. * fail, if none of dflag, rflag, xflag is set. */ if ((mode != 0700 && mode != 0600) || (dflag && !rflag && !xflag && mode == 0600) || (!dflag && rflag && mode == 0700 && !xflag) || (!dflag && !rflag && !xflag)) { close(sockfd); debug(" no!\n"); npriv++; /* a good socket that was not for us */ continue; } ngood++; if (cmatch) nperfect++; if (fdp && (firsts == -1 || (cmatch && nperfect == 1))) { if (firsts != -1) close(firsts); firsts = sockfd; firstn = sent->name; debug(" taken.\n"); } else { debug(" discarded.\n"); close(sockfd); } } (void)closedir(dirp); if (!lsflag && nperfect == 1) ngood = nperfect; if (nfound && (lsflag || ngood != 1) && !quietflag) { switch(ngood) { case 0: Msg(0, nfound > 1 ? "There are screens on:" : "There is a screen on:"); break; case 1: Msg(0, nfound > 1 ? "There are several screens on:" : "There is a suitable screen on:"); break; default: Msg(0, "There are several suitable screens on:"); break; } for (sent = slist; sent; sent = sent->next) { switch (sent->mode) { case 0700: printf("\t%s\t(Attached)\n", sent->name); break; case 0600: printf("\t%s\t(Detached)\n", sent->name); break; #ifdef MULTIUSER case 0701: printf("\t%s\t(Multi, attached)\n", sent->name); break; case 0601: printf("\t%s\t(Multi, detached)\n", sent->name); break; #endif case -1: /* No trigraphs here! */ printf("\t%s\t(Dead ?%c?)\n", sent->name, '?'); break; case -2: printf("\t%s\t(Removed)\n", sent->name); break; case -3: printf("\t%s\t(Remote or dead)\n", sent->name); break; case -4: printf("\t%s\t(Private)\n", sent->name); break; } } } if (ndead && !quietflag) { char *m = "Remove dead screens with 'screen -wipe'."; if (wipeflag) Msg(0, "%d socket%s wiped out.", nwipe, nwipe > 1 ? "s" : ""); else Msg(0, m, ndead > 1 ? "s" : "", ndead > 1 ? "" : "es"); /* other args for nethack */ } if (firsts != -1) { sprintf(SockPath + sdirlen, "/%s", firstn); *fdp = firsts; } else SockPath[sdirlen] = 0; for (sent = slist; sent; sent = nsent) { nsent = sent->next; free(sent->name); free((char *)sent); } #ifdef USE_SETEUID xseteuid(eff_uid); xsetegid(eff_gid); #endif if (notherp) *notherp = npriv; if (nfoundp) *nfoundp = nfound - nwipe; return ngood; } /* FIFO (legacy mode) */ static int MakeServerFifo() { register int s; struct stat st; #ifdef USE_SETEUID xseteuid(real_uid); xsetegid(real_gid); #endif s = open(SockPath, O_WRONLY | O_NONBLOCK); if (s >= 0) { debug("huii, my fifo already exists??\n"); if (quietflag) { Kill(D_userpid, SIG_BYE); eexit(11); } Msg(0, "There is already a screen running on %s.", Filename(SockPath)); if (stat(SockPath, &st) < 0) Panic(errno, "stat"); #ifdef SOCKDIR /* if SOCKDIR is not defined, the socket is in $HOME. \ in that case it does not make sense to compare uids. */ if ((int)st.st_uid != real_uid) Panic(0, "Unfortunately you are not its owner."); #endif if ((st.st_mode & 0700) == 0600) Panic(0, "To resume it, use \"screen -r\""); else Panic(0, "It is not detached."); /* NOTREACHED */ } # ifdef USE_SETEUID (void) unlink(SockPath); if (mkfifo(SockPath, SOCKMODE) < 0) Panic(0, "mkfifo %s failed", SockPath); # ifdef BROKEN_PIPE s = open(SockPath, O_RDWR | O_NONBLOCK, 0); # else s = open(SockPath, O_RDONLY | O_NONBLOCK, 0); # endif if (s < 0) Panic(errno, "open fifo %s", SockPath); xseteuid(eff_uid); xsetegid(eff_gid); return s; # else /* !USE_SETEUID */ if (UserContext() > 0) { (void) unlink(SockPath); UserReturn(mkfifo(SockPath, SOCKMODE)); } if (UserStatus()) Panic(0, "mkfifo %s failed", SockPath); # ifdef BROKEN_PIPE s = secopen(SockPath, O_RDWR | O_NONBLOCK, 0); # else s = secopen(SockPath, O_RDONLY | O_NONBLOCK, 0); # endif if (s < 0) Panic(errno, "open fifo %s", SockPath); return s; # endif /* !USE_SETEUID */ } static int MakeClientFifo(err) int err; { register int s = 0; s = secopen(SockPath, O_WRONLY | O_NONBLOCK, 0); if (s >= 0) { (void) fcntl(s, F_SETFL, 0); return s; } if (err) Msg(errno, "%s", SockPath); debug2("MakeClientSocket() open %s failed (%d)\n", SockPath, errno); return -1; } /* Unix Domain Sockets */ static int MakeServerUnixSocket() { register int s; struct sockaddr_un a; struct stat st; s = socket(AF_UNIX, SOCK_STREAM, 0); if (s < 0) Panic(errno, "socket"); a.sun_family = AF_UNIX; strncpy(a.sun_path, SockPath, sizeof(a.sun_path)); a.sun_path[sizeof(a.sun_path) - 1] = 0; # ifdef USE_SETEUID xseteuid(real_uid); xsetegid(real_gid); # endif if (connect(s, (struct sockaddr *) &a, strlen(SockPath) + 2) != -1) { debug("oooooh! socket already is alive!\n"); if (quietflag) { Kill(D_userpid, SIG_BYE); /* * oh, well. nobody receives that return code. papa * dies by signal. */ eexit(11); } Msg(0, "There is already a screen running on %s.", Filename(SockPath)); if (stat(SockPath, &st) < 0) Panic(errno, "stat"); #ifdef SOCKDIR /* if SOCKDIR is not defined, the socket is in $HOME. \ in that case it does not make sense to compare uids. */ if (st.st_uid != real_uid) Panic(0, "Unfortunately you are not its owner."); #endif if ((st.st_mode & 0700) == 0600) Panic(0, "To resume it, use \"screen -r\""); else Panic(0, "It is not detached."); /* NOTREACHED */ } #if defined(m88k) || defined(sysV68) close(s); /* we get bind: Invalid argument if this is not done */ s = socket(AF_UNIX, SOCK_STREAM, 0); if (s < 0) Panic(errno, "reopen socket"); #endif (void) unlink(SockPath); if (bind(s, (struct sockaddr *) & a, strlen(SockPath) + 2) == -1) Panic(errno, "bind (%s)", SockPath); #ifdef SOCK_NOT_IN_FS { int f = secopen(SockPath, O_RDWR | O_CREAT, SOCKMODE); if (f < 0) Panic(errno, "shadow socket open"); close(f); } #else chmod(SockPath, SOCKMODE); #ifndef USE_SETEUID chown(SockPath, real_uid, real_gid); #endif #endif /* SOCK_NOT_IN_FS */ if (listen(s, 5) == -1) Panic(errno, "listen"); #ifdef F_SETOWN fcntl(s, F_SETOWN, getpid()); debug1("Serversocket owned by %d\n", fcntl(s, F_GETOWN, 0)); #endif /* F_SETOWN */ #ifdef USE_SETEUID xseteuid(eff_uid); xsetegid(eff_gid); #endif return s; } static int MakeClientUnixSocket(err) int err; { register int s; struct sockaddr_un a; s = socket(AF_UNIX, SOCK_STREAM, 0); if (s < 0) Panic(errno, "socket"); a.sun_family = AF_UNIX; strncpy(a.sun_path, SockPath, sizeof(a.sun_path)); a.sun_path[sizeof(a.sun_path) - 1] = 0; #ifdef USE_SETEUID xseteuid(real_uid); xsetegid(real_gid); #else if (access(SockPath, W_OK)) { if (err) Msg(errno, "%s", SockPath); debug2("MakeClientSocket: access(%s): %d.\n", SockPath, errno); close(s); return -1; } #endif if (connect(s, (struct sockaddr *)&a, strlen(SockPath) + 2) == -1) { if (err) Msg(errno, "%s: connect", SockPath); debug("MakeClientSocket: connect failed.\n"); close(s); s = -1; } #ifdef USE_SETEUID xseteuid(eff_uid); xsetegid(eff_gid); #endif return s; } int MakeServerSocket(socket) bool socket; { if (socket) return MakeServerUnixSocket(); return MakeServerFifo(); } int MakeClientSocket(err, socket) int err; bool socket; { if (socket) return MakeClientUnixSocket(err); return MakeClientFifo(err); } /* ** ** Message send and receive routines ** */ void SendCreateMsg(sty, nwin) char *sty; struct NewWindow *nwin; { int s; struct msg m; register char *p; register int len, n; char **av; bool is_socket; #ifdef NAME_MAX if (strlen(sty) > NAME_MAX) sty[NAME_MAX] = 0; #endif if (strlen(sty) > 2 * MAXSTR - 1) sty[2 * MAXSTR - 1] = 0; sprintf(SockPath + strlen(SockPath), "/%s", sty); is_socket = IsSocket(SockPath); if ((s = MakeClientSocket(1, is_socket)) == -1) exit(1); debug1("SendCreateMsg() to '%s'\n", SockPath); bzero((char *)&m, sizeof(m)); m.type = MSG_CREATE; strncpy(m.m_tty, attach_tty, sizeof(m.m_tty) - 1); m.m_tty[sizeof(m.m_tty) - 1] = 0; p = m.m.create.line; n = 0; if (nwin->args != nwin_undef.args) for (av = nwin->args; *av && n < MAXARGS - 1; ++av, ++n) { len = strlen(*av) + 1; if (p + len >= m.m.create.line + sizeof(m.m.create.line) - 1) break; strcpy(p, *av); p += len; } if (nwin->aka != nwin_undef.aka && p + strlen(nwin->aka) + 1 < m.m.create.line + sizeof(m.m.create.line)) strcpy(p, nwin->aka); else *p = '\0'; m.m.create.nargs = n; m.m.create.aflag = nwin->aflag; m.m.create.flowflag = nwin->flowflag; m.m.create.lflag = nwin->lflag; m.m.create.hheight = nwin->histheight; if (getcwd(m.m.create.dir, sizeof(m.m.create.dir)) == 0) { Msg(errno, "getcwd"); goto end; } if (nwin->term != nwin_undef.term) strncpy(m.m.create.screenterm, nwin->term, MAXTERMLEN); m.m.create.screenterm[MAXTERMLEN] = '\0'; m.protocol_revision = MSG_REVISION; debug1("SendCreateMsg writing '%s'\n", m.m.create.line); if (write(s, (char *) &m, sizeof m) != sizeof m) Msg(errno, "write"); end: close(s); } int SendErrorMsg(tty, buf) char *tty, *buf; { int s; struct msg m; bool is_socket; debug2("SendErrorMsg: %s %s\n", tty, buf); strncpy(m.m.message, buf, sizeof(m.m.message) - 1); m.m.message[sizeof(m.m.message) - 1] = 0; is_socket = IsSocket(SockPath); s = MakeClientSocket(0, is_socket); if (s < 0) return -1; m.type = MSG_ERROR; strncpy(m.m_tty, tty, sizeof(m.m_tty) - 1); m.m_tty[sizeof(m.m_tty) - 1] = 0; m.protocol_revision = MSG_REVISION; debug1("SendErrorMsg(): writing to '%s'\n", SockPath); (void) write(s, (char *) &m, sizeof m); close(s); return 0; } static void ExecCreate(mp) struct msg *mp; { struct NewWindow nwin; char *args[MAXARGS]; register int n; register char **pp = args, *p = mp->m.create.line; char buf[20]; nwin = nwin_undef; n = mp->m.create.nargs; if (n > MAXARGS - 1) n = MAXARGS - 1; /* ugly hack alert... should be done by the frontend! */ if (n) { int l, num; l = strlen(p); if (IsNumColon(p, 10, buf, sizeof(buf))) { if (*buf) nwin.aka = buf; num = atoi(p); if (num < 0 || num > maxwin - 1) num = 0; nwin.StartAt = num; p += l + 1; n--; } } for (; n > 0; n--) { *pp++ = p; p += strlen(p) + 1; } *pp = 0; if (*p) nwin.aka = p; if (*args) nwin.args = args; nwin.aflag = mp->m.create.aflag; nwin.flowflag = mp->m.create.flowflag; if (*mp->m.create.dir) nwin.dir = mp->m.create.dir; nwin.lflag = mp->m.create.lflag; nwin.histheight = mp->m.create.hheight; if (*mp->m.create.screenterm) nwin.term = mp->m.create.screenterm; MakeWindow(&nwin); } static int CheckPid(pid) int pid; { debug1("Checking pid %d\n", pid); if (pid < 2) return -1; if (eff_uid == real_uid) return kill(pid, 0); if (UserContext() > 0) UserReturn(kill(pid, 0)); return UserStatus(); } #ifdef hpux /* * From: "F. K. Bruner" * From: "Dan Egnor" Tue Aug 10 06:56:45 1993 * The problem is that under HPUX (and possibly other systems too) there are * two equivalent device files for each pty/tty device: * /dev/ttyxx == /dev/pty/ttyxx * /dev/ptyxx == /dev/ptym/ptyxx * I didn't look into the exact specifics, but I've run across this problem * before: Even if you open /dev/ttyxx as fds 0 1 & 2 for a process, if that * process calls the system to determine its tty, it'll get /dev/pty/ttyxx. * * Earlier versions seemed to work -- wonder what they did. */ static int ttycmp(s1, s2) char *s1, *s2; { if (strlen(s1) > 5) s1 += strlen(s1) - 5; if (strlen(s2) > 5) s2 += strlen(s2) - 5; return strcmp(s1, s2); } # define TTYCMP(a, b) ttycmp(a, b) #else # define TTYCMP(a, b) strcmp(a, b) #endif static int CreateTempDisplay(m, recvfd, wi) struct msg *m; int recvfd; struct win *wi; { int pid; int attach; char *user; int i; struct mode Mode; struct display *olddisplays = displays; switch (m->type) { case MSG_CONT: case MSG_ATTACH: pid = m->m.attach.apid; user = m->m.attach.auser; attach = 1; break; #ifdef REMOTE_DETACH case MSG_DETACH: # ifdef POW_DETACH case MSG_POW_DETACH: # endif /* POW_DETACH */ pid = m->m.detach.dpid; user = m->m.detach.duser; attach = 0; break; #endif default: return -1; } if (CheckPid(pid)) { Msg(0, "Attach attempt with bad pid(%d)!", pid); return -1; } if (recvfd != -1) { int ret; char ttyname_in_ns[MAXPATHLEN]; char *myttyname; i = recvfd; recvfd = -1; memset(&ttyname_in_ns, 0, sizeof(ttyname_in_ns)); errno = 0; myttyname = GetPtsPathOrSymlink(i); if (myttyname && errno == ENODEV) { ret = readlink(myttyname, ttyname_in_ns, sizeof(ttyname_in_ns)); if (ret < 0 || (size_t)ret >= sizeof(ttyname_in_ns)) { Msg(errno, "Could not perform necessary sanity checks on pts device."); close(i); Kill(pid, SIG_BYE); return -1; } if (strcmp(ttyname_in_ns, m->m_tty)) { Msg(errno, "Attach: passed fd does not match tty: %s - %s!", ttyname_in_ns, m->m_tty[0] != '\0' ? m->m_tty : "(null)"); close(i); Kill(pid, SIG_BYE); return -1; } /* m->m_tty so far contains the actual name of the pts device in the * its (e.g. /dev/pts/0). This name however is not valid in the * current namespace. So after we verified that the symlink returned * by GetPtsPathOrSymlink() refers to the same pts device in this * namespace we need to update m->m_tty to use that symlink for all * future operations. */ strncpy(m->m_tty, myttyname, sizeof(m->m_tty) - 1); m->m_tty[sizeof(m->m_tty) - 1] = 0; } else if (myttyname == 0 || strcmp(myttyname, m->m_tty)) { Msg(errno, "Attach: passed fd does not match tty: %s - %s!", m->m_tty, myttyname ? myttyname : "NULL"); close(i); Kill(pid, SIG_BYE); return -1; } } else if ((i = secopen(m->m_tty, O_RDWR | O_NONBLOCK, 0)) < 0) { Msg(errno, "Attach: Could not open %s!", m->m_tty); Kill(pid, SIG_BYE); return -1; } #ifdef MULTIUSER if (attach) Kill(pid, SIGCONT); #endif #if defined(ultrix) || defined(pyr) || defined(NeXT) brktty(i); /* for some strange reason this must be done */ #endif if (attach) { if (display || wi) { write(i, "Attaching from inside of screen?\n", 33); close(i); Kill(pid, SIG_BYE); Msg(0, "Attach msg ignored: coming from inside."); return -1; } #ifdef MULTIUSER if (strcmp(user, LoginName)) if (*FindUserPtr(user) == 0) { write(i, "Access to session denied.\n", 26); close(i); Kill(pid, SIG_BYE); Msg(0, "Attach: access denied for user %s.", user); return -1; } #endif debug2("RecMsg: apid %d is o.k. and we just opened '%s'\n", pid, m->m_tty); #ifndef MULTI if (displays) { write(i, "Screen session in use.\n", 23); close(i); Kill(pid, SIG_BYE); return -1; } #endif } /* create new display */ GetTTY(i, &Mode); if (MakeDisplay(user, m->m_tty, attach ? m->m.attach.envterm : "", i, pid, &Mode) == 0) { write(i, "Could not make display.\n", 24); close(i); Msg(0, "Attach: could not make display for user %s", user); Kill(pid, SIG_BYE); return -1; } #ifdef ENCODINGS if (attach) { # ifdef UTF8 D_encoding = m->m.attach.encoding == 1 ? UTF8 : m->m.attach.encoding ? m->m.attach.encoding - 1 : 0; # else D_encoding = m->m.attach.encoding ? m->m.attach.encoding - 1 : 0; # endif if (D_encoding < 0 || !EncodingName(D_encoding)) D_encoding = 0; } #endif if (iflag && olddisplays) { iflag = 0; #if defined(TERMIO) || defined(POSIX) olddisplays->d_NewMode.tio.c_cc[VINTR] = VDISABLE; olddisplays->d_NewMode.tio.c_lflag &= ~ISIG; #else /* TERMIO || POSIX */ olddisplays->d_NewMode.m_tchars.t_intrc = -1; #endif /* TERMIO || POSIX */ SetTTY(olddisplays->d_userfd, &olddisplays->d_NewMode); } SetMode(&D_OldMode, &D_NewMode, D_flow, iflag); SetTTY(D_userfd, &D_NewMode); if (fcntl(D_userfd, F_SETFL, FNBLOCK)) Msg(errno, "Warning: NBLOCK fcntl failed"); return 0; } void ReceiveMsg() { int left, len; static struct msg m; char *p; int ns = ServerSocket; struct win *wi; int recvfd = -1; struct acluser *user; bool is_socket; /* Socket specific variables. */ struct sockaddr_un a; struct msghdr msg; struct iovec iov; char control[1024]; is_socket = IsSocket(SockPath); if (!is_socket) { debug("Ha, there was someone knocking on my fifo??\n"); if (fcntl(ServerSocket, F_SETFL, 0) == -1) Panic(errno, "BLOCK fcntl"); p = (char *)&m; left = sizeof(m); } else { len = sizeof(a); debug("Ha, there was someone knocking on my socket??\n"); if ((ns = accept(ns, (struct sockaddr *)&a, (void *)&len)) < 0) { Msg(errno, "accept"); return; } p = (char *)&m; left = sizeof(m); bzero(&msg, sizeof(msg)); iov.iov_base = &m; iov.iov_len = left; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_controllen = sizeof(control); msg.msg_control = &control; while (left > 0) { len = recvmsg(ns, &msg, 0); if (len < 0 && errno == EINTR) continue; if (len < 0) { close(ns); Msg(errno, "read"); return; } if (msg.msg_controllen) { struct cmsghdr *cmsg; for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) { int cl; char *cp; if (cmsg->cmsg_level != SOL_SOCKET || cmsg->cmsg_type != SCM_RIGHTS) continue; cp = (char *)CMSG_DATA(cmsg); cl = cmsg->cmsg_len; while (cl >= CMSG_LEN(sizeof(int))) { int passedfd; bcopy(cp, &passedfd, sizeof(int)); if (recvfd >= 0 && passedfd != recvfd) close(recvfd); recvfd = passedfd; cl -= CMSG_LEN(sizeof(int)); } } } p += len; left -= len; break; } } while (left > 0) { len = read(ns, p, left); if (len < 0 && errno == EINTR) continue; if (len <= 0) break; p += len; left -= len; } if (!is_socket) { #ifndef BROKEN_PIPE /* Reopen pipe to prevent EOFs at the select() call */ close(ServerSocket); if ((ServerSocket = secopen(SockPath, O_RDONLY | O_NONBLOCK, 0)) < 0) Panic(errno, "reopen fifo %s", SockPath); evdeq(&serv_read); serv_read.fd = ServerSocket; evenq(&serv_read); #endif } else { close(ns); } if (len < 0) { Msg(errno, "read"); if (recvfd != -1) close(recvfd); return; } if (left > 0) { if (left != sizeof(m)) Msg(0, "Message %d of %d bytes too small", left, (int)sizeof(m)); else debug("No data on socket.\n"); return; } if (m.protocol_revision != MSG_REVISION) { if (recvfd != -1) close(recvfd); Msg(0, "Invalid message (magic 0x%08x).", m.protocol_revision); return; } debug2("*** RecMsg: type %d tty %s\n", m.type, m.m_tty); if (m.type != MSG_ATTACH && recvfd != -1) { close(recvfd); recvfd = -1; } for (display = displays; display; display = display->d_next) if (TTYCMP(D_usertty, m.m_tty) == 0) break; debug2("display: %s display %sfound\n", m.m_tty, display ? "" : "not "); wi = 0; if (!display) { for (wi = windows; wi; wi = wi->w_next) if (!TTYCMP(m.m_tty, wi->w_tty)) { /* XXX: hmmm, rework this? */ display = wi->w_layer.l_cvlist ? wi->w_layer.l_cvlist->c_display : 0; debug2("but window %s %sfound.\n", m.m_tty, display ? "" : "(backfacing)"); break; } } /* Remove the status to prevent garbage on the screen */ if (display && D_status) RemoveStatus(); if (display && !D_tcinited && m.type != MSG_HANGUP) { if (recvfd != -1) close(recvfd); return; /* ignore messages for bad displays */ } switch (m.type) { case MSG_WINCH: if (display) CheckScreenSize(1); /* Change fore */ break; case MSG_CREATE: /* * the window that issued the create message need not be an * active * window. Then we create the window without having a display. * Resulting in another inactive window. */ ExecCreate(&m); break; case MSG_CONT: if (display && D_userpid != 0 && kill(D_userpid, 0) == 0) break; /* Intruder Alert */ debug2("RecMsg: apid=%d,was %d\n", m.m.attach.apid, display ? D_userpid : 0); /* FALLTHROUGH */ case MSG_ATTACH: if (CreateTempDisplay(&m, recvfd, wi)) break; #ifdef PASSWORD if (D_user->u_password && *D_user->u_password) AskPassword(&m); else #endif FinishAttach(&m); break; case MSG_ERROR: { int blocked=D_blocked; if(D_blocked == 4) /* allow error messages while in blanker mode */ D_blocked=0; /* likely they're from failed blanker */ Msg(0, "%s", m.m.message); D_blocked=blocked; } break; case MSG_HANGUP: if (!wi) /* ignore hangups from inside */ Hangup(); break; #ifdef REMOTE_DETACH case MSG_DETACH: #ifdef POW_DETACH case MSG_POW_DETACH: #endif /* POW_DETACH */ #ifdef PASSWORD user = *FindUserPtr(m.m.detach.duser); if (user && user->u_password && *user->u_password) { if (CreateTempDisplay(&m, recvfd, 0)) break; AskPassword(&m); } else #endif /* PASSWORD */ FinishDetach(&m); break; #endif case MSG_QUERY: { char *oldSockPath = SaveStr(SockPath); strcpy(SockPath, m.m.command.writeback); bool is_socket = IsSocket(SockPath); int s = MakeClientSocket(0, is_socket); strcpy(SockPath, oldSockPath); Free(oldSockPath); if (s >= 0) { queryflag = s; DoCommandMsg(&m); close(s); } else queryflag = -1; if (CheckPid(m.m.command.apid)) { Msg(0, "Query attempt with bad pid(%d)!", m.m.command.apid); } else { Kill(m.m.command.apid, (queryflag >= 0) ? SIGCONT : SIG_BYE); /* Send SIG_BYE if an error happened */ queryflag = -1; } } break; case MSG_COMMAND: DoCommandMsg(&m); break; default: Msg(0, "Invalid message (type %d).", m.type); } } void ReceiveRaw(s) int s; { char rd[256]; int len = 0; struct sockaddr_un a; bool is_socket; is_socket = IsSocket(SockPath); if (!is_socket) { if (fcntl(s, F_SETFL, 0) < 0) Panic(errno, "BLOCK fcntl"); } else { len = sizeof(a); s = accept(s, (struct sockaddr *)&a, (void *)&len); if (s < 0) { Msg(errno, "accept"); return; } } while ((len = read(s, rd, 255)) > 0) { rd[len] = 0; printf("%s", rd); } close(s); } #if defined(_SEQUENT_) #undef connect /* * sequent_ptx socket emulation must have mode 000 on the socket! */ static int sconnect(s, sapp, len) int s, len; struct sockaddr *sapp; { register struct sockaddr_un *sap; struct stat st; int x; sap = (struct sockaddr_un *)sapp; if (stat(sap->sun_path, &st)) return -1; chmod(sap->sun_path, 0); x = connect(s, (struct sockaddr *) sap, len); chmod(sap->sun_path, st.st_mode); return x; } #endif /* * Set the mode bits of the socket to the current status */ int chsock() { int r, euid = geteuid(); if (euid != real_uid) { if (UserContext() <= 0) return UserStatus(); } r = chmod(SockPath, SOCKMODE); /* * Sockets usually reside in the /tmp/ area, where sysadmin scripts * may be happy to remove old files. We manually prevent the socket * from becoming old. (chmod does not touch mtime). */ (void)utimes(SockPath, NULL); if (euid != real_uid) UserReturn(r); return r; } /* * Try to recreate the socket/pipe */ int RecoverSocket() { bool is_socket; close(ServerSocket); if ((int)geteuid() != real_uid) { if (UserContext() > 0) UserReturn(unlink(SockPath)); (void)UserStatus(); } else (void) unlink(SockPath); is_socket = IsSocket(SockPath); if ((ServerSocket = MakeServerSocket(is_socket)) < 0) return 0; evdeq(&serv_read); serv_read.fd = ServerSocket; evenq(&serv_read); return 1; } static void FinishAttach(m) struct msg *m; { char *p; int pid; int noshowwin; struct win *wi; ASSERT(display); pid = D_userpid; #ifdef REMOTE_DETACH if (m->m.attach.detachfirst == MSG_DETACH # ifdef POW_DETACH || m->m.attach.detachfirst == MSG_POW_DETACH # endif ) FinishDetach(m); #endif #if defined(pyr) || defined(xelos) || defined(sequent) /* * Kludge for systems with braindamaged termcap routines, * which evaluate $TERMCAP, regardless whether it describes * the correct terminal type or not. */ debug("unsetenv(TERMCAP) in case of a different terminal"); unsetenv("TERMCAP"); #endif /* * We reboot our Terminal Emulator. Forget all we knew about * the old terminal, reread the termcap entries in .screenrc * (and nothing more from .screenrc is read. Mainly because * I did not check, whether a full reinit is safe. jw) * and /etc/screenrc, and initialise anew. */ if (extra_outcap) free(extra_outcap); if (extra_incap) free(extra_incap); extra_incap = extra_outcap = 0; debug2("Message says size (%dx%d)\n", m->m.attach.columns, m->m.attach.lines); #ifdef ETCSCREENRC # ifdef ALLOW_SYSSCREENRC if ((p = getenv("SYSSCREENRC"))) StartRc(p, 1); else # endif StartRc(ETCSCREENRC, 1); #endif StartRc(RcFileName, 1); if (InitTermcap(m->m.attach.columns, m->m.attach.lines)) { FreeDisplay(); Kill(pid, SIG_BYE); return; } MakeDefaultCanvas(); InitTerm(m->m.attach.adaptflag); /* write init string on fd */ if (displays->d_next == 0) (void) chsock(); signal(SIGHUP, SigHup); if (m->m.attach.esc != -1 && m->m.attach.meta_esc != -1) { D_user->u_Esc = m->m.attach.esc; D_user->u_MetaEsc = m->m.attach.meta_esc; } #ifdef UTMPOK /* * we set the Utmp slots again, if we were detached normally * and if we were detached by ^Z. * don't log zomies back in! */ RemoveLoginSlot(); if (displays->d_next == 0) for (wi = windows; wi; wi = wi->w_next) if (wi->w_ptyfd >= 0 && wi->w_slot != (slot_t) -1) SetUtmp(wi); #endif D_fore = NULL; if (layout_attach) { struct layout *lay = layout_attach; if (lay == &layout_last_marker) lay = layout_last; if (lay) { LoadLayout(lay, &D_canvas); SetCanvasWindow(D_forecv, 0); } } /* * there may be a window that we remember from last detach: */ debug1("D_user->u_detachwin = %d\n", D_user->u_detachwin); if (D_user->u_detachwin >= 0) fore = wtab[D_user->u_detachwin]; else fore = 0; /* Wayne wants us to restore the other window too. */ if (D_user->u_detachotherwin >= 0) D_other = wtab[D_user->u_detachotherwin]; noshowwin = 0; if (*m->m.attach.preselect) { if (!strcmp(m->m.attach.preselect, "=")) fore = 0; else if (!strcmp(m->m.attach.preselect, "-")) { fore = 0; noshowwin = 1; } else if (!strcmp(m->m.attach.preselect, "+")) { struct action newscreen; char *na = 0; newscreen.nr = RC_SCREEN; newscreen.args = &na; newscreen.quiet = 0; DoAction(&newscreen, -1); } else fore = FindNiceWindow(fore, m->m.attach.preselect); } else fore = FindNiceWindow(fore, 0); if (fore) SetForeWindow(fore); else if (!noshowwin) { #ifdef MULTIUSER if (!AclCheckPermCmd(D_user, ACL_EXEC, &comms[RC_WINDOWLIST])) #endif { struct display *olddisplay = display; flayer = D_forecv->c_layer; display_windows(1, WLIST_NUM, (struct win *)0); noshowwin = 1; display = olddisplay; /* display_windows can change display */ } } Activate(0); ResetIdle(); if (!D_fore && !noshowwin) ShowWindows(-1); if (displays->d_next == 0 && console_window) { if (TtyGrabConsole(console_window->w_ptyfd, 1, "reattach") == 0) Msg(0, "console %s is on window %d", HostName, console_window->w_number); } debug("activated...\n"); # if defined(DEBUG) && defined(SIG_NODEBUG) if (!dfp) { sleep(1); debug1("Attacher %d must not debug, as we have debug off.\n", pid); kill(pid, SIG_NODEBUG); } # endif /* SIG_NODEBUG */ } static void FinishDetach(m) struct msg *m; { struct display *next, **d, *det; int pid; if (m->type == MSG_ATTACH) pid = D_userpid; else pid = m->m.detach.dpid; /* Remove the temporary display prompting for the password from the list */ for (d = &displays; (det = *d); d = &det->d_next) { if (det->d_userpid == pid) break; } if (det) { *d = det->d_next; det->d_next = 0; } for (display = displays; display; display = next) { next = display->d_next; # ifdef POW_DETACH if (m->type == MSG_POW_DETACH) Detach(D_REMOTE_POWER); else # endif /* POW_DETACH */ if (m->type == MSG_DETACH) Detach(D_REMOTE); else if (m->type == MSG_ATTACH) { #ifdef POW_DETACH if (m->m.attach.detachfirst == MSG_POW_DETACH) Detach(D_REMOTE_POWER); else #endif if (m->m.attach.detachfirst == MSG_DETACH) Detach(D_REMOTE); } } display = displays = det; if (m->type != MSG_ATTACH) { if (display) FreeDisplay(); Kill(pid, SIGCONT); } } #ifdef PASSWORD static void PasswordProcessInput __P((char *, int)); struct pwdata { int l; char buf[MAXLOGINLEN + 1]; struct msg m; }; static void AskPassword(m) struct msg *m; { struct pwdata *pwdata; ASSERT(display); pwdata = (struct pwdata *)malloc(sizeof(struct pwdata)); if (!pwdata) Panic(0, "%s", strnomem); pwdata->l = 0; pwdata->m = *m; D_processinputdata = (char *)pwdata; D_processinput = PasswordProcessInput; AddStr("Screen password: "); } static void PasswordProcessInput(ibuf, ilen) char *ibuf; int ilen; { struct pwdata *pwdata; int c, l; char *up; int pid = D_userpid; pwdata = (struct pwdata *)D_processinputdata; l = pwdata->l; while (ilen-- > 0) { c = *(unsigned char *)ibuf++; if (c == '\r' || c == '\n') { char *buf = NULL; up = D_user->u_password; pwdata->buf[l] = 0; buf = crypt(pwdata->buf, up); if (!buf || strncmp(buf, up, strlen(up))) { /* uh oh, user failed */ bzero(pwdata->buf, sizeof(pwdata->buf)); if (!buf) AddStr("\r\ncrypt() failed.\r\n"); else AddStr("\r\nPassword incorrect.\r\n"); D_processinputdata = 0; /* otherwise freed by FreeDis */ FreeDisplay(); Msg(0, "Illegal reattach attempt from terminal %s.", pwdata->m.m_tty); free(pwdata); Kill(pid, SIG_BYE); return; } /* great, pw matched, all is fine */ bzero(pwdata->buf, sizeof(pwdata->buf)); AddStr("\r\n"); D_processinputdata = 0; D_processinput = ProcessInput; #ifdef REMOTE_DETACH if (pwdata->m.type == MSG_DETACH # ifdef POW_DETACH || pwdata->m.type == MSG_POW_DETACH # endif ) FinishDetach(&pwdata->m); else #endif FinishAttach(&pwdata->m); free(pwdata); return; } if (c == Ctrl('c')) { AddStr("\r\n"); FreeDisplay(); Kill(pid, SIG_BYE); return; } if (c == '\b' || c == 0177) { if (l > 0) l--; continue; } if (c == Ctrl('u')) { l = 0; continue; } if (l < (int)sizeof(pwdata->buf) - 1) pwdata->buf[l++] = c; } pwdata->l = l; } #endif /* 'end' is exclusive, i.e. you should *not* write in *end */ static char * strncpy_escape_quote(dst, src, end) char *dst; const char *src, *end; { while (*src && dst < end) { if (*src == '"') { if (dst + 2 < end) /* \\ \" \0 */ *dst++ = '\\'; else return NULL; } *dst++ = *src++; } if (dst >= end) return NULL; *dst = '\0'; return dst; } static void DoCommandMsg(mp) struct msg *mp; { char *args[MAXARGS]; int argl[MAXARGS]; char fullcmd[MAXSTR]; register char *fc; int n; register char *p = mp->m.command.cmd; struct acluser *user; #ifdef MULTIUSER extern struct acluser *EffectiveAclUser; /* acls.c */ #else extern struct acluser *users; /* acls.c */ #endif n = mp->m.command.nargs; if (n > MAXARGS - 1) n = MAXARGS - 1; for (fc = fullcmd; n > 0; n--) { int len = strlen(p); *fc++ = '"'; if (!(fc = strncpy_escape_quote(fc, p, fullcmd + sizeof(fullcmd) - 2))) /* '"' ' ' */ { Msg(0, "Remote command too long."); queryflag = -1; return; } p += len + 1; *fc++ = '"'; *fc++ = ' '; } if (fc != fullcmd) *--fc = 0; if (Parse(fullcmd, sizeof fullcmd, args, argl) <= 0) { queryflag = -1; return; } #ifdef MULTIUSER user = *FindUserPtr(mp->m.attach.auser); if (user == 0) { Msg(0, "Unknown user %s tried to send a command!", mp->m.attach.auser); queryflag = -1; return; } #else user = users; #endif #ifdef PASSWORD if (user->u_password && *user->u_password) { Msg(0, "User %s has a password, cannot use remote commands (using -Q or -X option).", mp->m.attach.auser); queryflag = -1; return; } #endif if (!display) for (display = displays; display; display = display->d_next) if (D_user == user) break; for (fore = windows; fore; fore = fore->w_next) if (!TTYCMP(mp->m_tty, fore->w_tty)) { if (!display) display = fore->w_layer.l_cvlist ? fore->w_layer.l_cvlist->c_display : 0; /* If the window is not visibile in any display, then do not use the originating window as * the foreground window for the command. This way, if there is an existing display, then * the command will execute from the foreground window of that display. This is necessary so * that commands that are relative to the window (e.g. 'next' etc.) do the right thing. */ if (!fore->w_layer.l_cvlist || !fore->w_layer.l_cvlist->c_display) fore = NULL; break; } if (!display) display = displays; /* sigh */ if (*mp->m.command.preselect) { int i = -1; if (strcmp(mp->m.command.preselect, "-")) { i = WindowByNoN(mp->m.command.preselect); if (i < 0 || !wtab[i]) { Msg(0, "Could not find pre-select window."); queryflag = -1; return; } } fore = i >= 0 ? wtab[i] : 0; } else if (!fore) { if (display && D_user == user) fore = Layer2Window(display->d_forecv->c_layer); if (!fore) { fore = user->u_detachwin >= 0 ? wtab[user->u_detachwin] : 0; fore = FindNiceWindow(fore, 0); } } if (!fore) fore = windows; /* sigh */ #ifdef MULTIUSER EffectiveAclUser = user; #endif if (*args) { char *oldrcname = rc_name; rc_name = "-X"; debug3("Running command on display %lx window %lx (%d)\n", (long)display, (long)fore, fore ? fore->w_number : -1); flayer = fore ? &fore->w_layer : 0; if (fore && fore->w_savelayer && (fore->w_blocked || fore->w_savelayer->l_cvlist == 0)) flayer = fore->w_savelayer; DoCommand(args, argl); rc_name = oldrcname; } #ifdef MULTIUSER EffectiveAclUser = 0; #endif } int SendAttachMsg(s, m, fd) int s; struct msg *m; int fd; { int r; struct msghdr msg; struct iovec iov; char buf[CMSG_SPACE(sizeof(int))]; struct cmsghdr *cmsg; iov.iov_base = (char *)m; iov.iov_len = sizeof(*m); bzero(&msg, sizeof(msg)); msg.msg_name = 0; msg.msg_namelen = 0; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_control = buf; msg.msg_controllen = sizeof(buf); cmsg = CMSG_FIRSTHDR(&msg); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; cmsg->cmsg_len = CMSG_LEN(sizeof(int)); bcopy(&fd, CMSG_DATA(cmsg), sizeof(int)); msg.msg_controllen = cmsg->cmsg_len; while(1) { r = sendmsg(s, &msg, 0); if (r == -1 && errno == EINTR) continue; if (r == -1) return -1; return 0; } } bool IsSocket(path) const char *path; { struct stat st; if (stat(path, &st) < 0) return false; return S_ISSOCK(st.st_mode); } screen-4.9.1/list_display.c0000664000175000017500000001516314467014146014333 0ustar alexalex/* Copyright (c) 2010 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ /* Deals with the list of displays */ #include "config.h" #include "screen.h" #include "extern.h" #include "list_generic.h" #ifdef MULTI extern struct layer *flayer; extern struct display *display, *displays; extern struct mchar mchar_blank, mchar_so; static char ListID[] = "display"; /* * layout of the displays page is as follows: xterm 80x42 jnweiger@/dev/ttyp4 0(m11) &rWx facit 80x24 nb mlschroe@/dev/ttyhf 11(tcsh) rwx xterm 80x42 jnhollma@/dev/ttyp5 0(m11) &R.x | | | | | | | | ¦___ window permissions | | | | | | | | (R. is locked r-only, | | | | | | | | W has wlock) | | | | | | | |___ Window is shared | | | | | | |___ Name/Title of window | | | | | |___ Number of window | | | | |___ Name of the display (the attached device) | | | |___ Username who is logged in at the display | | |___ Display is in nonblocking mode. Shows 'NB' if obuf is full. | |___ Displays geometry as width x height. |___ the terminal type known by screen for this display. */ static int gl_Display_header(struct ListData *ldata) { leftline("term-type size user interface window Perms", 0, 0); leftline("---------- ------- ---------- ----------------- ---------- -----", 1, 0); return 2; } static int gl_Display_footer(struct ListData *ldata) { centerline("[Press Space to refresh; Return to end.]", flayer->l_height - 1); return 1; } static int gl_Display_row(struct ListData *ldata, struct ListRow *lrow) { struct display *d = lrow->data; char tbuf[80]; static char *blockstates[5] = {"nb", "NB", "Z<", "Z>", "BL"}; struct win *w = d->d_fore; struct mchar m_current = mchar_blank; m_current.attr = A_BD; sprintf(tbuf, " %-10.10s%4dx%-4d%10.10s@%-16.16s%s", d->d_termname, d->d_width, d->d_height, d->d_user->u_name, d->d_usertty, (d->d_blocked || d->d_nonblock >= 0) && d->d_blocked <= 4 ? blockstates[d->d_blocked] : " "); if (w) { int l = 10 - strlen(w->w_title); if (l < 0) l = 0; sprintf(tbuf + strlen(tbuf), "%3d(%.10s)%*s%c%c%c%c", w->w_number, w->w_title, l, "", /* w->w_dlist->next */ 0 ? '&' : ' ', /* * The rwx triple: * -,r,R no read, read, read only due to foreign wlock * -,.,w,W no write, write suppressed by foreign wlock, * write, own wlock * -,x no execute, execute */ #ifdef MULTIUSER (AclCheckPermWin(d->d_user, ACL_READ, w) ? '-' : ((w->w_wlock == WLOCK_OFF || d->d_user == w->w_wlockuser) ? 'r' : 'R')), (AclCheckPermWin(d->d_user, ACL_READ, w) ? '-' : ((w->w_wlock == WLOCK_OFF) ? 'w' : ((d->d_user == w->w_wlockuser) ? 'W' : 'v'))), (AclCheckPermWin(d->d_user, ACL_READ, w) ? '-' : 'x') #else 'r', 'w', 'x' #endif ); } leftline(tbuf, lrow->y, lrow == ldata->selected ? &mchar_so : d == display ? &m_current : 0); return 1; } static void gl_Display_rebuild(struct ListData *ldata) { /* recreate the rows */ struct display *d; struct ListRow *row = NULL; for (d = displays; d; d = d->d_next) { row = glist_add_row(ldata, d, row); if (d == display) ldata->selected = row; } glist_display_all(ldata); } static int gl_Display_input(struct ListData *ldata, char **inp, int *len) { struct display *cd = display; unsigned char ch; if (!ldata->selected) return 0; ch = (unsigned char) **inp; ++*inp; --*len; switch (ch) { case ' ': /* Space to refresh */ glist_remove_rows(ldata); gl_Display_rebuild(ldata); break; case '\r': case '\n': glist_abort(); *len = 0; break; #ifdef REMOTE_DETACH case 'd': /* Detach */ case 'D': /* Power detach */ display = ldata->selected->data; if (display == cd) /* We do not allow detaching the current display */ break; Detach( #ifdef POW_DETACH ch == 'D' ? D_REMOTE_POWER : D_REMOTE #else D_REMOTE #endif ); display = cd; glist_remove_rows(ldata); gl_Display_rebuild(ldata); break; #endif default: /* We didn't actually process the input. */ --*inp; ++*len; return 0; } return 1; } static int gl_Display_freerow(struct ListData *ldata, struct ListRow *row) { /* There was no allocation when row->data was set. So nothing to do here. */ return 0; } static int gl_Display_free(struct ListData *ldata) { /* There was no allocation in ldata->data. So nothing to do here. */ return 0; } static struct GenericList gl_Display = { gl_Display_header, gl_Display_footer, gl_Display_row, gl_Display_input, gl_Display_freerow, gl_Display_free, NULL /* We do not allow searching in the display list, at the moment */ }; void display_displays() { struct ListData *ldata; if (flayer->l_width < 10 || flayer->l_height < 5) { LMsg(0, "Window size too small for displays page"); return; } ldata = glist_display(&gl_Display, ListID); if (!ldata) return; gl_Display_rebuild(ldata); } #endif /* MULTI */ screen-4.9.1/term.c0000664000175000017500000001714314467014146012602 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "term.h" #define KMAPDEF(s) #define KMAPADEF(s) #define KMAPMDEF(s) struct term term[T_N] = { /* display size */ { "li", T_NUM }, { "co", T_NUM }, /* terminal types*/ { "hc", T_FLG }, { "os", T_FLG }, { "ns", T_FLG }, /* cursor movement */ { "cm", T_STR }, { "ho", T_STR }, { "cr", T_STR }, { "up", T_STR }, { "UP", T_STR }, { "do", T_STR }, { "DO", T_STR }, { "bs", T_FLG }, { "bc", T_STR }, { "le", T_STR }, { "LE", T_STR }, { "nd", T_STR }, { "RI", T_STR }, /* scroll */ { "cs", T_STR }, { "nl", T_STR }, { "sf", T_STR }, { "sr", T_STR }, { "al", T_STR }, { "AL", T_STR }, { "dl", T_STR }, { "DL", T_STR }, /* insert/delete */ { "in", T_FLG }, { "im", T_STR }, { "ei", T_STR }, { "ic", T_STR }, { "IC", T_STR }, { "dc", T_STR }, { "DC", T_STR }, /* erase */ { "ut", T_FLG }, { "cl", T_STR }, { "cd", T_STR }, { "CD", T_STR }, { "ce", T_STR }, { "cb", T_STR }, /* initialise */ { "is", T_STR }, { "ti", T_STR }, { "te", T_STR }, /* bell */ { "bl", T_STR }, { "vb", T_STR }, /* resizing */ { "WS", T_STR }, { "Z0", T_STR }, { "Z1", T_STR }, /* attributes */ /* define T_ATTR */ { "mh", T_STR }, { "us", T_STR }, { "md", T_STR }, { "mr", T_STR }, { "so", T_STR }, { "mb", T_STR }, { "ue", T_STR }, { "se", T_STR }, { "me", T_STR }, { "ms", T_FLG }, { "sg", T_NUM }, { "ug", T_NUM }, { "sa", T_STR }, /* color */ { "AF", T_STR }, { "AB", T_STR }, { "Sf", T_STR }, { "Sb", T_STR }, { "op", T_STR }, { "Co", T_NUM }, { "be", T_FLG }, { "AX", T_FLG }, { "C8", T_FLG }, /* keypad/cursorkeys */ { "ks", T_STR }, { "ke", T_STR }, { "CS", T_STR }, { "CE", T_STR }, /* printer */ { "po", T_STR }, { "pf", T_STR }, /* status line */ { "hs", T_FLG }, { "ws", T_NUM }, { "ts", T_STR }, { "fs", T_STR }, { "ds", T_STR }, /* cursor visibility */ { "vi", T_STR }, { "vs", T_STR }, { "ve", T_STR }, /* margin handling */ { "am", T_FLG }, { "xv", T_FLG }, { "xn", T_FLG }, { "OP", T_FLG }, { "LP", T_FLG }, /* special settings */ { "NF", T_FLG }, { "nx", T_FLG }, { "AN", T_FLG }, { "OL", T_NUM }, { "KJ", T_STR }, { "VR", T_STR }, { "VN", T_STR }, { "TF", T_FLG }, { "XT", T_FLG }, /* d_font setting */ { "G0", T_FLG }, { "S0", T_STR }, { "E0", T_STR }, { "C0", T_STR }, { "as", T_STR }, { "ae", T_STR }, { "ac", T_STR }, { "eA", T_STR }, { "XC", T_STR }, /* keycaps */ /* define T_CAPS */ /* mouse */ { "Km", T_STR }, KMAPDEF("\033[M") KMAPMDEF("\222") /* nolist */ { "k0", T_STR }, KMAPDEF("\033[10~") { "k1", T_STR }, KMAPDEF("\033OP") { "k2", T_STR }, KMAPDEF("\033OQ") { "k3", T_STR }, KMAPDEF("\033OR") { "k4", T_STR }, KMAPDEF("\033OS") { "k5", T_STR }, KMAPDEF("\033[15~") { "k6", T_STR }, KMAPDEF("\033[17~") { "k7", T_STR }, KMAPDEF("\033[18~") { "k8", T_STR }, KMAPDEF("\033[19~") { "k9", T_STR }, KMAPDEF("\033[20~") { "k;", T_STR }, KMAPDEF("\033[21~") { "F1", T_STR }, KMAPDEF("\033[23~") { "F2", T_STR }, KMAPDEF("\033[24~") /* extra keys for vt220 (David.Leonard@it.uq.edu.au) */ /* define T_FEXTRA */ { "F3", T_STR }, { "F4", T_STR }, { "F5", T_STR }, { "F6", T_STR }, { "F7", T_STR }, { "F8", T_STR }, { "F9", T_STR }, { "FA", T_STR }, { "FB", T_STR }, { "FC", T_STR }, { "FD", T_STR }, { "FE", T_STR }, { "kb", T_STR }, { "K1", T_STR }, { "K2", T_STR }, { "K3", T_STR }, { "K4", T_STR }, { "K5", T_STR }, /* more keys for Andrew A. Chernov (ache@astral.msk.su) */ { "kA", T_STR }, { "ka", T_STR }, /* define T_BACKTAB */ { "kB", T_STR }, { "kC", T_STR }, { "kE", T_STR }, { "kF", T_STR }, KMAPMDEF("\004") { "kL", T_STR }, { "kM", T_STR }, { "kR", T_STR }, KMAPMDEF("\025") { "kS", T_STR }, { "kT", T_STR }, { "kt", T_STR }, { "*4", T_STR }, /* kDC */ { "*7", T_STR }, /* kEND */ { "#2", T_STR }, /* kHOM */ { "#3", T_STR }, /* kIC */ { "#4", T_STR }, /* kLFT */ { "%c", T_STR }, /* kNXT */ { "%e", T_STR }, /* kPRV */ { "%i", T_STR }, /* kRIT */ /* keys above the cursor */ /* define T_NAVIGATE */ { "kh", T_STR }, KMAPDEF("\033[1~") KMAPMDEF("\201") { "@1", T_STR }, { "kH", T_STR }, KMAPDEF("\033[4~") KMAPMDEF("\205") { "@7", T_STR }, KMAPDEF("\033[4~") KMAPMDEF("\205") { "kN", T_STR }, KMAPDEF("\033[6~") KMAPMDEF("\006") { "kP", T_STR }, KMAPDEF("\033[5~") KMAPMDEF("\002") { "kI", T_STR }, KMAPDEF("\033[2~") /* define T_NAVIGATE_DELETE */ { "kD", T_STR }, KMAPDEF("\033[3~") /* keys that can have two bindings */ /* define T_CURSOR */ { "ku", T_STR }, KMAPDEF("\033[A") KMAPADEF("\033OA") KMAPMDEF("\220") { "kd", T_STR }, KMAPDEF("\033[B") KMAPADEF("\033OB") KMAPMDEF("\216") { "kr", T_STR }, KMAPDEF("\033[C") KMAPADEF("\033OC") KMAPMDEF("\206") { "kl", T_STR }, KMAPDEF("\033[D") KMAPADEF("\033OD") KMAPMDEF("\202") /* define T_KEYPAD */ { "f0", T_STR }, KMAPDEF("0") KMAPADEF("\033Op") { "f1", T_STR }, KMAPDEF("1") KMAPADEF("\033Oq") { "f2", T_STR }, KMAPDEF("2") KMAPADEF("\033Or") { "f3", T_STR }, KMAPDEF("3") KMAPADEF("\033Os") { "f4", T_STR }, KMAPDEF("4") KMAPADEF("\033Ot") { "f5", T_STR }, KMAPDEF("5") KMAPADEF("\033Ou") { "f6", T_STR }, KMAPDEF("6") KMAPADEF("\033Ov") { "f7", T_STR }, KMAPDEF("7") KMAPADEF("\033Ow") { "f8", T_STR }, KMAPDEF("8") KMAPADEF("\033Ox") { "f9", T_STR }, KMAPDEF("9") KMAPADEF("\033Oy") { "f+", T_STR }, KMAPDEF("+") KMAPADEF("\033Ok") { "f-", T_STR }, KMAPDEF("-") KMAPADEF("\033Om") { "f*", T_STR }, KMAPDEF("*") KMAPADEF("\033Oj") { "f/", T_STR }, KMAPDEF("/") KMAPADEF("\033Oo") { "fq", T_STR }, KMAPDEF("=") KMAPADEF("\033OX") { "f.", T_STR }, KMAPDEF(".") KMAPADEF("\033On") { "f,", T_STR }, KMAPDEF(",") KMAPADEF("\033Ol") { "fe", T_STR }, KMAPDEF("\015") KMAPADEF("\033OM") /* other things related to keycaps */ /* define T_OCAPS */ { "km", T_FLG }, { "ko", T_STR }, { "l0", T_STR }, { "l1", T_STR }, { "l2", T_STR }, { "l3", T_STR }, { "l4", T_STR }, { "l5", T_STR }, { "l6", T_STR }, { "l7", T_STR }, { "l8", T_STR }, { "l9", T_STR }, { "la", T_STR }, /* list */ /* define T_ECAPS */ /* define T_N */ }; screen-4.9.1/sched.c0000664000175000017500000001543314467014146012721 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX) # include #endif #include #include "config.h" #include "screen.h" #include "extern.h" static struct event *evs; static struct event *tevs; static struct event *nextev; static int calctimeout; static struct event *calctimo __P((void)); #if (defined(sgi) && defined(SVR4)) || defined(__osf__) || defined(M_UNIX) static int sgihack __P((void)); #endif void evenq(struct event *ev) { struct event *evp, **evpp; debug3("New event fd %d type %d queued %d\n", ev -> fd, ev -> type, ev -> queued); if (ev->queued) return; evpp = &evs; if (ev->type == EV_TIMEOUT) { calctimeout = 1; evpp = &tevs; } for (; (evp = *evpp); evpp = &evp->next) if (ev->pri > evp->pri) break; ev->next = evp; *evpp = ev; ev->queued = 1; } void evdeq(struct event *ev) { struct event *evp, **evpp; debug3("Deq event fd %d type %d queued %d\n", ev -> fd, ev -> type, ev -> queued); if (!ev->queued) return; evpp = &evs; if (ev->type == EV_TIMEOUT) { calctimeout = 1; evpp = &tevs; } for (; (evp = *evpp); evpp = &evp->next) if (evp == ev) break; ASSERT(evp); *evpp = ev->next; ev->queued = 0; if (ev == nextev) nextev = nextev->next; } static struct event * calctimo() { struct event *ev, *min; long mins; if ((min = tevs) == 0) return 0; mins = min->timeout.tv_sec; for (ev = tevs->next; ev; ev = ev->next) { ASSERT(ev->type == EV_TIMEOUT); if (mins < ev->timeout.tv_sec) continue; if (mins > ev->timeout.tv_sec || min->timeout.tv_usec > ev->timeout.tv_usec) { min = ev; mins = ev->timeout.tv_sec; } } return min; } void sched() { struct event *ev; fd_set r, w, *set; struct event *timeoutev = 0; struct timeval timeout; int nsel; for (;;) { if (calctimeout) timeoutev = calctimo(); if (timeoutev) { gettimeofday(&timeout, NULL); /* tp - timeout */ timeout.tv_sec = timeoutev->timeout.tv_sec - timeout.tv_sec; timeout.tv_usec = timeoutev->timeout.tv_usec - timeout.tv_usec; if (timeout.tv_usec < 0) { timeout.tv_usec += 1000000; timeout.tv_sec--; } if (timeout.tv_sec < 0) { timeout.tv_usec = 0; timeout.tv_sec = 0; } } #ifdef DEBUG debug("waiting for events"); if (timeoutev) debug2(" timeout %ld secs %ld usecs", (long)timeout.tv_sec, (long)timeout.tv_usec); debug(":\n"); for (ev = evs; ev; ev = ev->next) debug3(" - fd %d type %d pri %d\n", ev->fd, ev->type, ev->pri); if (tevs) debug("timed events:\n"); for (ev = tevs; ev; ev = ev->next) debug3(" - pri %d sec %ld usec %ld\n", ev->pri, (long)ev->timeout.tv_sec, (long)ev->timeout.tv_usec); #endif FD_ZERO(&r); FD_ZERO(&w); for (ev = evs; ev; ev = ev->next) { if (ev->condpos && *ev->condpos <= (ev->condneg ? *ev->condneg : 0)) { debug2(" - cond ev fd %d type %d failed\n", ev->fd, ev->type); continue; } if (ev->type == EV_READ) FD_SET(ev->fd, &r); else if (ev->type == EV_WRITE) FD_SET(ev->fd, &w); } #ifdef DEBUG debug("readfds:"); for (nsel = 0; nsel < FD_SETSIZE; nsel++) if (FD_ISSET(nsel, &r)) debug1(" %d", nsel); debug("\n"); debug("writefds:"); for (nsel = 0; nsel < FD_SETSIZE; nsel++) if (FD_ISSET(nsel, &w)) debug1(" %d", nsel); debug("\n"); #endif nsel = select(FD_SETSIZE, &r, &w, (fd_set *)0, timeoutev ? &timeout : (struct timeval *)0); if (nsel < 0) { if (errno != EINTR) { #if defined(sgi) && defined(SVR4) if (errno == EIO && sgihack()) continue; #endif #if defined(__osf__) || defined(M_UNIX) /* OSF/1 3.x, SCO bug: EBADF */ /* OSF/1 4.x bug: EIO */ if ((errno == EIO || errno == EBADF) && sgihack()) continue; #endif Panic(errno, "select"); } nsel = 0; } else if (nsel == 0) { /* timeout */ debug("TIMEOUT!\n"); ASSERT(timeoutev); evdeq(timeoutev); timeoutev->handler(timeoutev, timeoutev->data); } #ifdef SELECT_BROKEN /* * Sequents select emulation counts a descriptor which is * readable and writeable only as one hit. Waaaaa. */ if (nsel) nsel = 2 * FD_SETSIZE; #endif for (ev = evs; ev; ev = nextev) { nextev = ev->next; if (ev->type != EV_ALWAYS) { set = ev->type == EV_READ ? &r : &w; if (nsel == 0 || !FD_ISSET(ev->fd, set)) continue; nsel--; } if (ev->condpos && *ev->condpos <= (ev->condneg ? *ev->condneg : 0)) continue; debug2(" + hit ev fd %d type %d!\n", ev->fd, ev->type); ev->handler(ev, ev->data); } } } void SetTimeout(struct event *ev, int timo) { ASSERT(ev->type == EV_TIMEOUT); debug2("event %lx new timeout %d ms\n", (long)ev, timo); gettimeofday(&ev->timeout, NULL); ev->timeout.tv_sec += timo / 1000; ev->timeout.tv_usec += (timo % 1000) * 1000; if (ev->timeout.tv_usec > 1000000) { ev->timeout.tv_usec -= 1000000; ev->timeout.tv_sec++; } if (ev->queued) calctimeout = 1; } #if (defined(sgi) && defined(SVR4)) || defined(__osf__) || defined(M_UNIX) /* do we still need it? @anaumov */ extern struct display *display, *displays; static int sgihack() { fd_set r, w; struct timeval tv; debug("IRIX5.2 workaround: searching for bad display\n"); for (display = displays; display;) { FD_ZERO(&r); FD_ZERO(&w); FD_SET(D_userfd, &r); FD_SET(D_userfd, &w); tv.tv_sec = tv.tv_usec = 0; if (select(FD_SETSIZE, &r, &w, (fd_set *)0, &tv) == -1) { if (errno == EINTR) continue; Hangup(); /* goodbye display */ return 1; } display = display->d_next; } return 0; } #endif screen-4.9.1/autom4te.cache/0000755000175000017500000000000014467014300014253 5ustar alexalexscreen-4.9.1/autom4te.cache/traces.20000664000175000017500000023322314467014300015626 0ustar alexalexm4trace:configure.ac:9: -1- AC_INIT([screen.c]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:9: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:9: -1- AC_SUBST([SHELL]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:9: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:9: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:9: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:9: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:9: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:9: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:9: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:9: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:9: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:9: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:9: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:9: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:9: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:9: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:9: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:9: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:9: -1- AC_SUBST([runstatedir], ['${localstatedir}/run']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([runstatedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:9: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:9: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:9: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:9: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:9: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:9: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:9: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:9: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:9: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:9: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:9: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:9: -1- AC_SUBST([DEFS]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:9: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:9: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:9: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:9: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:9: -1- AC_SUBST([LIBS]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:9: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:9: -1- AC_SUBST([build_alias]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:9: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:9: -1- AC_SUBST([host_alias]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:9: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:9: -1- AC_SUBST([target_alias]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:9: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:10: -1- _m4_warn([obsolete], [The macro `AC_CONFIG_HEADER' is obsolete. You should run autoupdate.], [./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from... configure.ac:10: the top level]) m4trace:configure.ac:10: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.ac:39: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:39: the top level]) m4trace:configure.ac:40: -1- AC_SUBST([VERSION]) m4trace:configure.ac:40: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:40: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:41: -1- AC_SUBST([ac_prefix_program]) m4trace:configure.ac:41: -1- AC_SUBST_TRACE([ac_prefix_program]) m4trace:configure.ac:41: -1- m4_pattern_allow([^ac_prefix_program$]) m4trace:configure.ac:42: -1- AC_SUBST([ac_prefix_program]) m4trace:configure.ac:42: -1- AC_SUBST_TRACE([ac_prefix_program]) m4trace:configure.ac:42: -1- m4_pattern_allow([^ac_prefix_program$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:45: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:45: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:45: -1- AC_SUBST([LIBS]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:45: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:45: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.ac:45: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:45: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.ac:45: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:46: -1- AC_SUBST([CPP]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPP$]) m4trace:configure.ac:46: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:46: -1- AC_SUBST([CPP]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPP$]) m4trace:configure.ac:47: -1- AC_SUBST([GREP]) m4trace:configure.ac:47: -1- AC_SUBST_TRACE([GREP]) m4trace:configure.ac:47: -1- m4_pattern_allow([^GREP$]) m4trace:configure.ac:47: -1- AC_SUBST([EGREP]) m4trace:configure.ac:47: -1- AC_SUBST_TRACE([EGREP]) m4trace:configure.ac:47: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.ac:48: -1- _m4_warn([obsolete], [The macro `AC_ISC_POSIX' is obsolete. You should run autoupdate.], [./lib/autoconf/specific.m4:550: AC_ISC_POSIX is expanded from... configure.ac:48: the top level]) m4trace:configure.ac:49: -1- _m4_warn([syntax], [AC_LINK_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS], [./lib/autoconf/specific.m4:364: AC_USE_SYSTEM_EXTENSIONS is expanded from... configure.ac:49: the top level]) m4trace:configure.ac:49: -1- AH_OUTPUT([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers\' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif ]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDIO_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:configure.ac:49: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.ac:49: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ @%:@undef STDC_HEADERS]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_WCHAR_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_WCHAR_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_MINIX_CONFIG_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_MINIX_CONFIG_H]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_ALL_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_ALL_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_DARWIN_C_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_DARWIN_C_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_GNU_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_GNU_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_HPUX_ALT_XOPEN_SOCKET_API]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_HPUX_ALT_XOPEN_SOCKET_API$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_NETBSD_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_NETBSD_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_OPENBSD_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_OPENBSD_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_PTHREAD_SEMANTICS]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_PTHREAD_SEMANTICS$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_ATTRIBS_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_BFP_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_BFP_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_DFP_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_DFP_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_FUNCS_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_FUNCS_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_TYPES_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_TYPES_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_LIB_EXT2__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_LIB_EXT2__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_MATH_SPEC_FUNCS__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_MATH_SPEC_FUNCS__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_TANDEM_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_TANDEM_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_MINIX]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_MINIX$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_1_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_1_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__EXTENSIONS__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__EXTENSIONS__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_XOPEN_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_XOPEN_SOURCE$]) m4trace:configure.ac:51: -1- AC_SUBST([AWK]) m4trace:configure.ac:51: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:51: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:53: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:53: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:53: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:53: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:53: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:53: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:53: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:56: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:56: the top level]) m4trace:configure.ac:57: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:57: the top level]) m4trace:configure.ac:64: -1- AC_DEFINE_TRACE_LITERAL([SOCKDIR]) m4trace:configure.ac:64: -1- m4_pattern_allow([^SOCKDIR$]) m4trace:configure.ac:89: -1- AC_DEFINE_TRACE_LITERAL([ISC]) m4trace:configure.ac:89: -1- m4_pattern_allow([^ISC$]) m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([sysV68]) m4trace:configure.ac:100: -1- m4_pattern_allow([^sysV68$]) m4trace:configure.ac:104: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:104: the top level]) m4trace:configure.ac:109: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:109: the top level]) m4trace:configure.ac:110: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:110: the top level]) m4trace:configure.ac:114: -1- AC_DEFINE_TRACE_LITERAL([MIPS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^MIPS$]) m4trace:configure.ac:115: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:115: the top level]) m4trace:configure.ac:117: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:117: the top level]) m4trace:configure.ac:123: -3- AC_DEFINE_TRACE_LITERAL([USE_WAIT2]) m4trace:configure.ac:123: -3- m4_pattern_allow([^USE_WAIT2$]) m4trace:configure.ac:118: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:118: the top level]) m4trace:configure.ac:116: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:116: the top level]) m4trace:configure.ac:130: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:130: the top level]) m4trace:configure.ac:140: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:140: the top level]) m4trace:configure.ac:141: -2- AC_DEFINE_TRACE_LITERAL([OSX]) m4trace:configure.ac:141: -2- m4_pattern_allow([^OSX$]) m4trace:configure.ac:141: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:141: the top level]) m4trace:configure.ac:147: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:147: the top level]) m4trace:configure.ac:158: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:158: the top level]) m4trace:configure.ac:167: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:167: the top level]) m4trace:configure.ac:167: -2- AC_DEFINE_TRACE_LITERAL([POSIX]) m4trace:configure.ac:167: -2- m4_pattern_allow([^POSIX$]) m4trace:configure.ac:170: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:170: the top level]) m4trace:configure.ac:174: -2- AC_DEFINE_TRACE_LITERAL([SYSV]) m4trace:configure.ac:174: -2- m4_pattern_allow([^SYSV$]) m4trace:configure.ac:171: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:171: the top level]) m4trace:configure.ac:176: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:176: the top level]) m4trace:configure.ac:183: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:183: the top level]) m4trace:configure.ac:189: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:189: the top level]) m4trace:configure.ac:189: -2- AC_DEFINE_TRACE_LITERAL([SVR4]) m4trace:configure.ac:189: -2- m4_pattern_allow([^SVR4$]) m4trace:configure.ac:193: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:193: the top level]) m4trace:configure.ac:194: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:194: the top level]) m4trace:configure.ac:194: -2- AC_DEFINE_TRACE_LITERAL([BUGGYGETLOGIN]) m4trace:configure.ac:194: -2- m4_pattern_allow([^BUGGYGETLOGIN$]) m4trace:configure.ac:194: -2- AC_DEFINE_TRACE_LITERAL([BUGGYGETLOGIN]) m4trace:configure.ac:194: -2- m4_pattern_allow([^BUGGYGETLOGIN$]) m4trace:configure.ac:202: -1- AH_OUTPUT([HAVE_STROPTS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STROPTS_H]) m4trace:configure.ac:202: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STROPTS_H]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STROPTS_H$]) m4trace:configure.ac:202: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:202: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRING_H]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STRING_H$]) m4trace:configure.ac:202: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.ac:202: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRINGS_H]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STRINGS_H$]) m4trace:configure.ac:204: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:204: the top level]) m4trace:configure.ac:234: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:234: the top level]) m4trace:configure.ac:250: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:250: the top level]) m4trace:configure.ac:250: -2- AC_DEFINE_TRACE_LITERAL([BSDJOBS]) m4trace:configure.ac:250: -2- m4_pattern_allow([^BSDJOBS$]) m4trace:configure.ac:250: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:250: the top level]) m4trace:configure.ac:235: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:235: the top level]) m4trace:configure.ac:255: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:255: the top level]) m4trace:configure.ac:260: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SETRESUID]) m4trace:configure.ac:260: -2- m4_pattern_allow([^HAVE_SETRESUID$]) m4trace:configure.ac:256: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:256: the top level]) m4trace:configure.ac:262: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:262: the top level]) m4trace:configure.ac:267: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SETREUID]) m4trace:configure.ac:267: -2- m4_pattern_allow([^HAVE_SETREUID$]) m4trace:configure.ac:263: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:263: the top level]) m4trace:configure.ac:275: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:275: the top level]) m4trace:configure.ac:284: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SETEUID]) m4trace:configure.ac:284: -2- m4_pattern_allow([^HAVE_SETEUID$]) m4trace:configure.ac:276: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:276: the top level]) m4trace:configure.ac:287: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:287: the top level]) m4trace:configure.ac:292: -2- AC_DEFINE_TRACE_LITERAL([HAVE_EXECVPE]) m4trace:configure.ac:292: -2- m4_pattern_allow([^HAVE_EXECVPE$]) m4trace:configure.ac:288: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:288: the top level]) m4trace:configure.ac:299: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:299: the top level]) m4trace:configure.ac:306: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:306: the top level]) m4trace:configure.ac:307: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:307: the top level]) m4trace:configure.ac:300: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:300: the top level]) m4trace:configure.ac:319: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:319: the top level]) m4trace:configure.ac:385: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:385: the top level]) m4trace:configure.ac:386: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:386: the top level]) m4trace:configure.ac:387: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:387: the top level]) m4trace:configure.ac:320: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:320: the top level]) m4trace:configure.ac:391: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:391: the top level]) m4trace:configure.ac:436: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:436: the top level]) m4trace:configure.ac:437: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:437: the top level]) m4trace:configure.ac:437: -2- AC_DEFINE_TRACE_LITERAL([BROKEN_PIPE]) m4trace:configure.ac:437: -2- m4_pattern_allow([^BROKEN_PIPE$]) m4trace:configure.ac:438: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:438: the top level]) m4trace:configure.ac:392: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:392: the top level]) m4trace:configure.ac:448: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:448: the top level]) m4trace:configure.ac:503: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:503: the top level]) m4trace:configure.ac:504: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:504: the top level]) m4trace:configure.ac:505: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:505: the top level]) m4trace:configure.ac:449: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:449: the top level]) m4trace:configure.ac:509: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:509: the top level]) m4trace:configure.ac:545: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:545: the top level]) m4trace:configure.ac:546: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:546: the top level]) m4trace:configure.ac:547: -2- AC_DEFINE_TRACE_LITERAL([SOCK_NOT_IN_FS]) m4trace:configure.ac:547: -2- m4_pattern_allow([^SOCK_NOT_IN_FS$]) m4trace:configure.ac:548: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:548: the top level]) m4trace:configure.ac:510: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:510: the top level]) m4trace:configure.ac:657: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:657: the top level]) m4trace:configure.ac:658: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:658: the top level]) m4trace:configure.ac:658: -2- AC_DEFINE_TRACE_LITERAL([SELECT_BROKEN]) m4trace:configure.ac:658: -2- m4_pattern_allow([^SELECT_BROKEN$]) m4trace:configure.ac:659: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:659: the top level]) m4trace:configure.ac:559: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:559: the top level]) m4trace:configure.ac:664: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:664: the top level]) m4trace:configure.ac:673: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:673: the top level]) m4trace:configure.ac:685: -3- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:685: the top level]) m4trace:configure.ac:693: -4- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:693: the top level]) m4trace:configure.ac:701: -5- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:701: the top level]) m4trace:configure.ac:709: -6- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:709: the top level]) m4trace:configure.ac:717: -7- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:717: the top level]) m4trace:configure.ac:725: -8- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:725: the top level]) m4trace:configure.ac:726: -8- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:726: the top level]) m4trace:configure.ac:718: -7- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:718: the top level]) m4trace:configure.ac:710: -6- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:710: the top level]) m4trace:configure.ac:702: -5- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:702: the top level]) m4trace:configure.ac:694: -4- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:694: the top level]) m4trace:configure.ac:686: -3- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:686: the top level]) m4trace:configure.ac:674: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:674: the top level]) m4trace:configure.ac:665: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:665: the top level]) m4trace:configure.ac:743: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:743: the top level]) m4trace:configure.ac:744: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:744: the top level]) m4trace:configure.ac:744: -2- AC_DEFINE_TRACE_LITERAL([TERMINFO]) m4trace:configure.ac:744: -2- m4_pattern_allow([^TERMINFO$]) m4trace:configure.ac:745: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:745: the top level]) m4trace:configure.ac:745: -2- AC_DEFINE_TRACE_LITERAL([TERMINFO]) m4trace:configure.ac:745: -2- m4_pattern_allow([^TERMINFO$]) m4trace:configure.ac:734: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:734: the top level]) m4trace:configure.ac:746: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:746: the top level]) m4trace:configure.ac:747: -2- AC_DEFINE_TRACE_LITERAL([NEED_OSPEED]) m4trace:configure.ac:747: -2- m4_pattern_allow([^NEED_OSPEED$]) m4trace:configure.ac:747: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:747: the top level]) m4trace:configure.ac:753: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:753: the top level]) m4trace:configure.ac:755: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_PTC]) m4trace:configure.ac:755: -1- m4_pattern_allow([^HAVE_DEV_PTC$]) m4trace:configure.ac:760: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:760: the top level]) m4trace:configure.ac:763: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:763: the top level]) m4trace:configure.ac:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SVR4_PTYS]) m4trace:configure.ac:763: -1- m4_pattern_allow([^HAVE_SVR4_PTYS$]) m4trace:configure.ac:772: -1- AH_OUTPUT([HAVE_GETPT], [/* Define to 1 if you have the `getpt\' function. */ @%:@undef HAVE_GETPT]) m4trace:configure.ac:772: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPT]) m4trace:configure.ac:772: -1- m4_pattern_allow([^HAVE_GETPT$]) m4trace:configure.ac:776: -1- AH_OUTPUT([HAVE_OPENPTY], [/* Define to 1 if you have the `openpty\' function. */ @%:@undef HAVE_OPENPTY]) m4trace:configure.ac:776: -1- AC_DEFINE_TRACE_LITERAL([HAVE_OPENPTY]) m4trace:configure.ac:776: -1- m4_pattern_allow([^HAVE_OPENPTY$]) m4trace:configure.ac:776: -1- AC_DEFINE_TRACE_LITERAL([HAVE_OPENPTY]) m4trace:configure.ac:776: -1- m4_pattern_allow([^HAVE_OPENPTY$]) m4trace:configure.ac:781: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:781: the top level]) m4trace:configure.ac:801: -1- AC_DEFINE_TRACE_LITERAL([PTYRANGE0]) m4trace:configure.ac:801: -1- m4_pattern_allow([^PTYRANGE0$]) m4trace:configure.ac:802: -1- AC_DEFINE_TRACE_LITERAL([PTYRANGE1]) m4trace:configure.ac:802: -1- m4_pattern_allow([^PTYRANGE1$]) m4trace:configure.ac:813: -1- AC_DEFINE_TRACE_LITERAL([PTYMODE]) m4trace:configure.ac:813: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:814: -1- AC_DEFINE_TRACE_LITERAL([PTYGROUP]) m4trace:configure.ac:814: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:817: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:817: the top level]) m4trace:configure.ac:895: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:895: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- AC_DEFINE_TRACE_LITERAL([PTYMODE]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:819: -1- AC_DEFINE_TRACE_LITERAL([PTYGROUP]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- AC_SUBST([WRITEPATH]) m4trace:configure.ac:819: -1- AC_SUBST_TRACE([WRITEPATH]) m4trace:configure.ac:819: -1- m4_pattern_allow([^WRITEPATH$]) m4trace:configure.ac:819: -1- AC_SUBST([XTERMPATH]) m4trace:configure.ac:819: -1- AC_SUBST_TRACE([XTERMPATH]) m4trace:configure.ac:819: -1- m4_pattern_allow([^XTERMPATH$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- AC_DEFINE_TRACE_LITERAL([PTYMODE]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:819: -1- AC_DEFINE_TRACE_LITERAL([PTYGROUP]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:903: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:903: the top level]) m4trace:configure.ac:917: -2- AC_DEFINE_TRACE_LITERAL([GETUTENT]) m4trace:configure.ac:917: -2- m4_pattern_allow([^GETUTENT$]) m4trace:configure.ac:920: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:920: the top level]) m4trace:configure.ac:934: -3- AC_DEFINE_TRACE_LITERAL([GETUTENT]) m4trace:configure.ac:934: -3- m4_pattern_allow([^GETUTENT$]) m4trace:configure.ac:921: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:921: the top level]) m4trace:configure.ac:904: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:904: the top level]) m4trace:configure.ac:936: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:936: the top level]) m4trace:configure.ac:946: -2- AC_DEFINE_TRACE_LITERAL([UTHOST]) m4trace:configure.ac:946: -2- m4_pattern_allow([^UTHOST$]) m4trace:configure.ac:937: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:937: the top level]) m4trace:configure.ac:949: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UTEMPTER]) m4trace:configure.ac:949: -1- m4_pattern_allow([^HAVE_UTEMPTER$]) m4trace:configure.ac:957: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:957: the top level]) m4trace:configure.ac:962: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:962: the top level]) m4trace:configure.ac:967: -2- AC_DEFINE_TRACE_LITERAL([LOADAV_GETLOADAVG]) m4trace:configure.ac:967: -2- m4_pattern_allow([^LOADAV_GETLOADAVG$]) m4trace:configure.ac:971: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:971: the top level]) m4trace:configure.ac:976: -3- AC_DEFINE_TRACE_LITERAL([LOADAV_GETLOADAVG]) m4trace:configure.ac:976: -3- m4_pattern_allow([^LOADAV_GETLOADAVG$]) m4trace:configure.ac:972: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:972: the top level]) m4trace:configure.ac:963: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:963: the top level]) m4trace:configure.ac:988: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:988: the top level]) m4trace:configure.ac:995: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:995: the top level]) m4trace:configure.ac:997: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:997: the top level]) m4trace:configure.ac:999: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_UNIX]) m4trace:configure.ac:999: -1- m4_pattern_allow([^LOADAV_UNIX$]) m4trace:configure.ac:1000: -1- AC_DEFINE_TRACE_LITERAL([NLIST_STRUCT]) m4trace:configure.ac:1000: -1- m4_pattern_allow([^NLIST_STRUCT$]) m4trace:configure.ac:1000: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/headers.m4:89: _AC_CHECK_HEADER_COMPILE is expanded from... ./lib/autoconf/headers.m4:56: AC_CHECK_HEADER is expanded from... configure.ac:1000: the top level]) m4trace:configure.ac:1000: -2- AC_DEFINE_TRACE_LITERAL([NLIST_NAME_UNION]) m4trace:configure.ac:1000: -2- m4_pattern_allow([^NLIST_NAME_UNION$]) m4trace:configure.ac:1000: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/headers.m4:89: _AC_CHECK_HEADER_COMPILE is expanded from... ./lib/autoconf/headers.m4:56: AC_CHECK_HEADER is expanded from... configure.ac:1000: the top level]) m4trace:configure.ac:1007: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1007: the top level]) m4trace:configure.ac:1014: -2- AC_DEFINE_TRACE_LITERAL([NLIST_DECLARED]) m4trace:configure.ac:1014: -2- m4_pattern_allow([^NLIST_DECLARED$]) m4trace:configure.ac:1016: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1016: the top level]) m4trace:configure.ac:1019: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1019: the top level]) m4trace:configure.ac:1019: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1019: the top level]) m4trace:configure.ac:1056: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1056: the top level]) m4trace:configure.ac:1058: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1058: the top level]) m4trace:configure.ac:1059: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_AVENRUN]) m4trace:configure.ac:1059: -1- m4_pattern_allow([^LOADAV_AVENRUN$]) m4trace:configure.ac:1061: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1061: the top level]) m4trace:configure.ac:1062: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_USE_NLIST64]) m4trace:configure.ac:1062: -1- m4_pattern_allow([^LOADAV_USE_NLIST64$]) m4trace:configure.ac:1067: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1067: the top level]) m4trace:configure.ac:1068: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1068: the top level]) m4trace:configure.ac:1069: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1069: the top level]) m4trace:configure.ac:1070: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1070: the top level]) m4trace:configure.ac:1071: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1071: the top level]) m4trace:configure.ac:1072: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1072: the top level]) m4trace:configure.ac:1073: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1073: the top level]) m4trace:configure.ac:1114: -1- AC_DEFINE_TRACE_LITERAL([LOADAV]) m4trace:configure.ac:1114: -1- m4_pattern_allow([^LOADAV$]) m4trace:configure.ac:1115: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_TYPE]) m4trace:configure.ac:1115: -1- m4_pattern_allow([^LOADAV_TYPE$]) m4trace:configure.ac:1116: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_NUM]) m4trace:configure.ac:1116: -1- m4_pattern_allow([^LOADAV_NUM$]) m4trace:configure.ac:1117: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_SCALE]) m4trace:configure.ac:1117: -1- m4_pattern_allow([^LOADAV_SCALE$]) m4trace:configure.ac:1125: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1125: the top level]) m4trace:configure.ac:1126: -1- AC_DEFINE_TRACE_LITERAL([SIGVOID]) m4trace:configure.ac:1126: -1- m4_pattern_allow([^SIGVOID$]) m4trace:configure.ac:1130: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1130: the top level]) m4trace:configure.ac:1137: -2- AC_DEFINE_TRACE_LITERAL([SIGVOID]) m4trace:configure.ac:1137: -2- m4_pattern_allow([^SIGVOID$]) m4trace:configure.ac:1131: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:1131: the top level]) m4trace:configure.ac:1139: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1139: the top level]) m4trace:configure.ac:1149: -2- AC_DEFINE_TRACE_LITERAL([USESIGSET]) m4trace:configure.ac:1149: -2- m4_pattern_allow([^USESIGSET$]) m4trace:configure.ac:1140: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1140: the top level]) m4trace:configure.ac:1151: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1151: the top level]) m4trace:configure.ac:1188: -2- AC_DEFINE_TRACE_LITERAL([SYSVSIGS]) m4trace:configure.ac:1188: -2- m4_pattern_allow([^SYSVSIGS$]) m4trace:configure.ac:1152: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1152: the top level]) m4trace:configure.ac:1196: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1196: the top level]) m4trace:configure.ac:1202: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1202: the top level]) m4trace:configure.ac:1203: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1203: the top level]) m4trace:configure.ac:1211: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1211: the top level]) m4trace:configure.ac:1212: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1212: the top level]) m4trace:configure.ac:1214: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1214: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- AC_DEFINE_TRACE_LITERAL([NOSYSLOG]) m4trace:configure.ac:1215: -1- m4_pattern_allow([^NOSYSLOG$]) m4trace:configure.ac:1239: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1239: the top level]) m4trace:configure.ac:1248: -2- AC_DEFINE_TRACE_LITERAL([BSDWAIT]) m4trace:configure.ac:1248: -2- m4_pattern_allow([^BSDWAIT$]) m4trace:configure.ac:1240: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:1240: the top level]) m4trace:configure.ac:1251: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1251: the top level]) m4trace:configure.ac:1252: -2- AC_DEFINE_TRACE_LITERAL([TERMIO]) m4trace:configure.ac:1252: -2- m4_pattern_allow([^TERMIO$]) m4trace:configure.ac:1254: -3- AC_DEFINE_TRACE_LITERAL([TERMIO]) m4trace:configure.ac:1254: -3- m4_pattern_allow([^TERMIO$]) m4trace:configure.ac:1254: -2- _m4_warn([obsolete], [The macro `AC_TRY_CPP' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2762: AC_TRY_CPP is expanded from... configure.ac:1254: the top level]) m4trace:configure.ac:1252: -1- _m4_warn([obsolete], [The macro `AC_TRY_CPP' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2762: AC_TRY_CPP is expanded from... configure.ac:1252: the top level]) m4trace:configure.ac:1260: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1260: the top level]) m4trace:configure.ac:1265: -2- AC_DEFINE_TRACE_LITERAL([SHADOWPW]) m4trace:configure.ac:1265: -2- m4_pattern_allow([^SHADOWPW$]) m4trace:configure.ac:1261: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1261: the top level]) m4trace:configure.ac:1267: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1267: the top level]) m4trace:configure.ac:1272: -2- AC_DEFINE_TRACE_LITERAL([GETTTYENT]) m4trace:configure.ac:1272: -2- m4_pattern_allow([^GETTTYENT$]) m4trace:configure.ac:1268: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1268: the top level]) m4trace:configure.ac:1274: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1274: the top level]) m4trace:configure.ac:1279: -2- AC_DEFINE_TRACE_LITERAL([HAVE_FDWALK]) m4trace:configure.ac:1279: -2- m4_pattern_allow([^HAVE_FDWALK$]) m4trace:configure.ac:1275: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1275: the top level]) m4trace:configure.ac:1281: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1281: the top level]) m4trace:configure.ac:1299: -2- AC_DEFINE_TRACE_LITERAL([USEBCOPY]) m4trace:configure.ac:1299: -2- m4_pattern_allow([^USEBCOPY$]) m4trace:configure.ac:1282: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1282: the top level]) m4trace:configure.ac:1319: -2- AC_DEFINE_TRACE_LITERAL([USEMEMMOVE]) m4trace:configure.ac:1319: -2- m4_pattern_allow([^USEMEMMOVE$]) m4trace:configure.ac:1320: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1320: the top level]) m4trace:configure.ac:1320: -2- AC_DEFINE_TRACE_LITERAL([USEMEMMOVE]) m4trace:configure.ac:1320: -2- m4_pattern_allow([^USEMEMMOVE$]) m4trace:configure.ac:1301: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1301: the top level]) m4trace:configure.ac:1340: -2- AC_DEFINE_TRACE_LITERAL([USEMEMCPY]) m4trace:configure.ac:1340: -2- m4_pattern_allow([^USEMEMCPY$]) m4trace:configure.ac:1322: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1322: the top level]) m4trace:configure.ac:1342: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_FILE_NAMES]) m4trace:configure.ac:1342: -1- m4_pattern_allow([^HAVE_LONG_FILE_NAMES$]) m4trace:configure.ac:1342: -1- AH_OUTPUT([HAVE_LONG_FILE_NAMES], [/* Define to 1 if you support file names longer than 14 characters. */ @%:@undef HAVE_LONG_FILE_NAMES]) m4trace:configure.ac:1350: -2- AC_DEFINE_TRACE_LITERAL([USEVARARGS]) m4trace:configure.ac:1350: -2- m4_pattern_allow([^USEVARARGS$]) m4trace:configure.ac:1345: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1345: the top level]) m4trace:configure.ac:1352: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ @%:@undef HAVE_DIRENT_H]) m4trace:configure.ac:1352: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ @%:@undef HAVE_SYS_NDIR_H]) m4trace:configure.ac:1352: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ @%:@undef HAVE_SYS_DIR_H]) m4trace:configure.ac:1352: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ @%:@undef HAVE_NDIR_H]) m4trace:configure.ac:1356: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1356: the top level]) m4trace:configure.ac:1363: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1363: the top level]) m4trace:configure.ac:1370: -1- AC_DEFINE_TRACE_LITERAL([USESETENV]) m4trace:configure.ac:1370: -1- m4_pattern_allow([^USESETENV$]) m4trace:configure.ac:1372: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SETENV_3]) m4trace:configure.ac:1372: -1- m4_pattern_allow([^HAVE_SETENV_3$]) m4trace:configure.ac:1374: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SETENV_2]) m4trace:configure.ac:1374: -1- m4_pattern_allow([^HAVE_SETENV_2$]) m4trace:configure.ac:1379: -2- AC_DEFINE_TRACE_LITERAL([NEEDPUTENV]) m4trace:configure.ac:1379: -2- m4_pattern_allow([^NEEDPUTENV$]) m4trace:configure.ac:1379: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1379: the top level]) m4trace:configure.ac:1386: -2- AC_DEFINE_TRACE_LITERAL([HAVE_NL_LANGINFO]) m4trace:configure.ac:1386: -2- m4_pattern_allow([^HAVE_NL_LANGINFO$]) m4trace:configure.ac:1382: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1382: the top level]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_RENAME], [/* Define to 1 if you have the `rename\' function. */ @%:@undef HAVE_RENAME]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_RENAME]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_RENAME$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_FCHMOD], [/* Define to 1 if you have the `fchmod\' function. */ @%:@undef HAVE_FCHMOD]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_FCHMOD]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_FCHMOD$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_FCHOWN], [/* Define to 1 if you have the `fchown\' function. */ @%:@undef HAVE_FCHOWN]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_FCHOWN]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_FCHOWN$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */ @%:@undef HAVE_STRERROR]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRERROR]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_STRERROR$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_LSTAT], [/* Define to 1 if you have the `lstat\' function. */ @%:@undef HAVE_LSTAT]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LSTAT]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_LSTAT$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE__EXIT], [/* Define to 1 if you have the `_exit\' function. */ @%:@undef HAVE__EXIT]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE__EXIT]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE__EXIT$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_UTIMES], [/* Define to 1 if you have the `utimes\' function. */ @%:@undef HAVE_UTIMES]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UTIMES]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_UTIMES$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define to 1 if you have the `vsnprintf\' function. */ @%:@undef HAVE_VSNPRINTF]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VSNPRINTF]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_VSNPRINTF$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_GETCWD], [/* Define to 1 if you have the `getcwd\' function. */ @%:@undef HAVE_GETCWD]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETCWD]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_GETCWD$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_SETLOCALE], [/* Define to 1 if you have the `setlocale\' function. */ @%:@undef HAVE_SETLOCALE]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SETLOCALE]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_SETLOCALE$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_STRFTIME], [/* Define to 1 if you have the `strftime\' function. */ @%:@undef HAVE_STRFTIME]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRFTIME]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_STRFTIME$]) m4trace:configure.ac:1403: -2- AC_DEFINE_TRACE_LITERAL([USE_PAM]) m4trace:configure.ac:1403: -2- m4_pattern_allow([^USE_PAM$]) m4trace:configure.ac:1397: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1397: the top level]) m4trace:configure.ac:1413: -1- AC_DEFINE_TRACE_LITERAL([USE_LOCALE]) m4trace:configure.ac:1413: -1- m4_pattern_allow([^USE_LOCALE$]) m4trace:configure.ac:1417: -1- AC_DEFINE_TRACE_LITERAL([BUILTIN_TELNET]) m4trace:configure.ac:1417: -1- m4_pattern_allow([^BUILTIN_TELNET$]) m4trace:configure.ac:1421: -1- AC_DEFINE_TRACE_LITERAL([COLORS256]) m4trace:configure.ac:1421: -1- m4_pattern_allow([^COLORS256$]) m4trace:configure.ac:1425: -1- AC_DEFINE_TRACE_LITERAL([RXVT_OSC]) m4trace:configure.ac:1425: -1- m4_pattern_allow([^RXVT_OSC$]) m4trace:configure.ac:1442: -1- AC_SUBST([ETCSCREENRC]) m4trace:configure.ac:1442: -1- AC_SUBST_TRACE([ETCSCREENRC]) m4trace:configure.ac:1442: -1- m4_pattern_allow([^ETCSCREENRC$]) m4trace:configure.ac:1444: -1- AC_CONFIG_FILES([Makefile doc/Makefile]) m4trace:configure.ac:1444: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) m4trace:configure.ac:1444: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:1444: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:1444: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:1444: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([INSTALL]) screen-4.9.1/autom4te.cache/output.10000664000175000017500000071066414467014300015715 0ustar alexalex@%:@! /bin/sh @%:@ From configure.ac Revision. @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71. @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='' PACKAGE_TARNAME='' PACKAGE_VERSION='' PACKAGE_STRING='' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="screen.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='LTLIBOBJS LIB@&t@OBJS ETCSCREENRC XTERMPATH WRITEPATH INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM AWK EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ac_prefix_program VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_socket_dir with_socket_dir with_pty_mode with_pty_group enable_pam enable_use_locale enable_telnet enable_colors256 enable_rxvt_osc with_sys_screenrc ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/PACKAGE@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-socket-dir disable system wide socket-dir and use ~/.screen instead --enable-pam enable PAM support --enable-use-locale use localized month/day names (default: yes) --enable-telnet enable builtin telnet --enable-colors256 enable support for 256 colors --enable-rxvt_osc enable support for rxvt OSC codes Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-socket-dir=path where to put the per-user sockets --with-pty-mode=mode default mode for ptys --with-pty-group=group default group for ptys --with-sys-screenrc=path to the global screenrc file Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_try_cpp LINENO @%:@ ---------------------- @%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_cpp @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_c_try_run LINENO @%:@ ---------------------- @%:@ Try to run conftest.@S|@ac_ext, and return whether this succeeded. Assumes that @%:@ executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_run @%:@ ac_fn_c_check_func LINENO FUNC VAR @%:@ ---------------------------------- @%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_func ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" # Auxiliary files required by this configure script. ac_aux_files="install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" rev=`sed < ${srcdir}/patchlevel.h -n -e '/#define REV/s/#define REV *//p'` vers=`sed < ${srcdir}/patchlevel.h -n -e '/#define VERS/s/#define VERS *//p'` pat=`sed < ${srcdir}/patchlevel.h -n -e '/#define PATCHLEVEL/s/#define PATCHLEVEL *//p'` VERSION="$rev.$vers.$pat" echo "this is screen version $VERSION" 1>&6 if test "x$prefix" = xNONE; then printf %s "checking for prefix by " >&6 # Extract the first word of "screen", so it can be a program name with args. set dummy screen; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_prefix_program+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_prefix_program in [\\/]* | ?:[\\/]*) ac_cv_path_ac_prefix_program="$ac_prefix_program" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_prefix_program="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_prefix_program=$ac_cv_path_ac_prefix_program if test -n "$ac_prefix_program"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prefix_program" >&5 printf "%s\n" "$ac_prefix_program" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$ac_prefix_program"; then prefix=`$as_dirname -- "$ac_prefix_program" || $as_expr X"$ac_prefix_program" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_prefix_program" : 'X\(//\)[^/]' \| \ X"$ac_prefix_program" : 'X\(//\)$' \| \ X"$ac_prefix_program" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_prefix_program" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` prefix=`$as_dirname -- "$prefix" || $as_expr X"$prefix" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$prefix" : 'X\(//\)[^/]' \| \ X"$prefix" : 'X\(//\)$' \| \ X"$prefix" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$prefix" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` fi fi if test "x$prefix" = xNONE; then printf %s "checking for prefix by " >&6 # Extract the first word of "gzip", so it can be a program name with args. set dummy gzip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_prefix_program+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_prefix_program in [\\/]* | ?:[\\/]*) ac_cv_path_ac_prefix_program="$ac_prefix_program" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_prefix_program="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_prefix_program=$ac_cv_path_ac_prefix_program if test -n "$ac_prefix_program"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prefix_program" >&5 printf "%s\n" "$ac_prefix_program" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$ac_prefix_program"; then prefix=`$as_dirname -- "$ac_prefix_program" || $as_expr X"$ac_prefix_program" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_prefix_program" : 'X\(//\)[^/]' \| \ X"$ac_prefix_program" : 'X\(//\)$' \| \ X"$ac_prefix_program" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_prefix_program" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` prefix=`$as_dirname -- "$prefix" || $as_expr X"$prefix" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$prefix" : 'X\(//\)[^/]' \| \ X"$prefix" : 'X\(//\)$' \| \ X"$prefix" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$prefix" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` fi fi old_CFLAGS="$CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 printf %s "checking whether $CC needs -traditional... " >&6; } if test ${ac_cv_prog_gcc_traditional+y} then : printf %s "(cached) " >&6 else $as_nop ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1 then : ac_cv_prog_gcc_traditional=yes else $as_nop ac_cv_prog_gcc_traditional=no fi rm -rf conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1 then : ac_cv_prog_gcc_traditional=yes fi rm -rf conftest* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 printf %s "checking for library containing strerror... " >&6; } if test ${ac_cv_search_strerror+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char strerror (); int main (void) { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_strerror+y} then : break fi done if test ${ac_cv_search_strerror+y} then : else $as_nop ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 printf "%s\n" "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else $as_nop ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "@%:@define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "@%:@define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "@%:@define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "@%:@define _MINIX 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_1_SOURCE 2" >>confdefs.h else $as_nop MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "@%:@define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "@%:@define _XOPEN_SOURCE 500" >>confdefs.h fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -f etc/toolcheck; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for buggy tools..." >&5 printf "%s\n" "$as_me: checking for buggy tools..." >&6;} sh etc/toolcheck 1>&6 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if a system-wide socket dir should be used" >&5 printf %s "checking if a system-wide socket dir should be used... " >&6; } @%:@ Check whether --enable-socket-dir was given. if test ${enable_socket_dir+y} then : enableval=$enable_socket_dir; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no. ~/.screen will be used instead." >&5 printf "%s\n" "no. ~/.screen will be used instead." >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the socket dir" >&5 printf %s "checking for the socket dir... " >&6; } SOCKDIR="(eff_uid ? \"/tmp/uscreens\" : \"/tmp/screens\")" @%:@ Check whether --with-socket-dir was given. if test ${with_socket_dir+y} then : withval=$with_socket_dir; case "${withval}" in *\"*) SOCKDIR="${withval}" ;; *) SOCKDIR="\"${withval}\"" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${SOCKDIR}" >&5 printf "%s\n" "${SOCKDIR}" >&6; } printf "%s\n" "@%:@define SOCKDIR $SOCKDIR" >>confdefs.h fi if test "$cross_compiling" = no && test -n "$ISC" ; then printf "%s\n" "@%:@define ISC 1" >>confdefs.h LIBS="$LIBS -linet" fi if test "$cross_compiling" = no && test -f /sysV68 ; then printf "%s\n" "@%:@define sysV68 1" >>confdefs.h fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MIPS..." >&5 printf "%s\n" "$as_me: checking for MIPS..." >&6;} if test -f /lib/libmld.a || test -f /usr/lib/libmld.a || test -f /usr/lib/cmplrs/cc/libmld.a; then oldlibs="$LIBS" test -f /bin/mx || LIBS="$LIBS -lmld" # for nlist. But not on alpha. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking mld library..." >&5 printf "%s\n" "$as_me: checking mld library..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -r /dev/ptc; then printf "%s\n" "@%:@define MIPS 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait3..." >&5 printf "%s\n" "$as_me: checking wait3..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { wait3(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait2..." >&5 printf "%s\n" "$as_me: checking wait2..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { wait2(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define USE_WAIT2 1" >>confdefs.h LIBS="$LIBS -lbsd" ; CC="$CC -I/usr/include/bsd" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Ultrix..." >&5 printf "%s\n" "$as_me: checking for Ultrix..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(ultrix) || defined(__ultrix) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : ULTRIX=1 fi rm -rf conftest* if test "$cross_compiling" = no && test -f /usr/lib/libpyr.a ; then oldlibs="$LIBS" LIBS="$LIBS -lpyr" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Pyramid OSX..." >&5 printf "%s\n" "$as_me: checking Pyramid OSX..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { open_controlling_pty("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define OSX 1" >>confdefs.h else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for butterfly..." >&5 printf "%s\n" "$as_me: checking for butterfly..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(butterfly) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : butterfly=1 fi rm -rf conftest* if test -z "$butterfly"; then if test -n "$ULTRIX"; then test -z "$GCC" && CC="$CC -YBSD" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for POSIX.1..." >&5 printf "%s\n" "$as_me: checking for POSIX.1..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifdef _POSIX_VERSION YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : echo "- you have a POSIX system" 1>&6 printf "%s\n" "@%:@define POSIX 1" >>confdefs.h posix=1 fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for System V..." >&5 printf "%s\n" "$as_me: checking for System V..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { int x = SIGCHLD | FNDELAY; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop printf "%s\n" "@%:@define SYSV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sequent/ptx..." >&5 printf "%s\n" "$as_me: checking for sequent/ptx..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _SEQUENT_ YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -linet";seqptx=1 fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SVR4..." >&5 printf "%s\n" "$as_me: checking SVR4..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if defined(SVR4) || defined(__SVR4) yes; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : echo "- you have a SVR4 system" 1>&6 printf "%s\n" "@%:@define SVR4 1" >>confdefs.h svr4=1 fi rm -rf conftest* if test -n "$svr4" ; then oldlibs="$LIBS" LIBS="$LIBS -lelf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SVR4..." >&5 printf "%s\n" "$as_me: checking SVR4..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_fn_c_check_header_compile "$LINENO" "dwarf.h" "ac_cv_header_dwarf_h" "$ac_includes_default" if test "x$ac_cv_header_dwarf_h" = xyes then : printf "%s\n" "@%:@define BUGGYGETLOGIN 1" >>confdefs.h else $as_nop ac_fn_c_check_header_compile "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default" if test "x$ac_cv_header_elf_h" = xyes then : printf "%s\n" "@%:@define BUGGYGETLOGIN 1" >>confdefs.h fi fi else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$ac_includes_default" if test "x$ac_cv_header_stropts_h" = xyes then : printf "%s\n" "@%:@define HAVE_STROPTS_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "@%:@define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes then : printf "%s\n" "@%:@define HAVE_STRINGS_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris 2.x..." >&5 printf "%s\n" "$as_me: checking for Solaris 2.x..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(SVR4) && defined(sun) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -lnsl -lkstat" fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking BSD job jontrol..." >&5 printf "%s\n" "$as_me: checking BSD job jontrol..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { #ifdef POSIX tcsetpgrp(0, 0); #else int x = TIOCSPGRP; #ifdef SYSV setpgrp(); #else int y = TIOCNOTTY; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : echo "- you have jobcontrol" 1>&6 printf "%s\n" "@%:@define BSDJOBS 1" >>confdefs.h else $as_nop echo "- you don't have jobcontrol" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking setresuid..." >&5 printf "%s\n" "$as_me: checking setresuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setresuid(0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETRESUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking setreuid..." >&5 printf "%s\n" "$as_me: checking setreuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setreuid(0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETREUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking seteuid..." >&5 printf "%s\n" "$as_me: checking seteuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { #if defined(linux) || defined(NeXT) || defined(_AUX_SOURCE) || defined(AUX) || defined(ultrix) || (defined(sun) && defined(SVR4)) || defined(ISC) || defined(sony_news) int seteuid_is_broken(int); seteuid_is_broken(0); #else seteuid(0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETEUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking execvpe..." >&5 printf "%s\n" "$as_me: checking execvpe..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { execvpe(0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_EXECVPE 1" >>confdefs.h CFLAGS="$CFLAGS -D_GNU_SOURCE" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking select..." >&5 printf "%s\n" "$as_me: checking select..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$LIBS -lnet -lnsl" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking select with $LIBS..." >&5 printf "%s\n" "$as_me: checking select with $LIBS..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop as_fn_error $? "!!! no select - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking fifos..." >&5 printf "%s\n" "$as_me: checking fifos..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming fifos are usable" 1>&6 fifo=1 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif char *fin = "/tmp/conftest$$"; int main() { struct stat stb; fd_set f; (void)alarm(5); unlink(fin); #ifdef POSIX if (mkfifo(fin, 0777)) #else if (mknod(fin, S_IFIFO|0777, 0)) #endif return 1; if (stat(fin, &stb) || (stb.st_mode & S_IFIFO) != S_IFIFO) return 1; close(0); #ifdef __386BSD__ /* * The next test fails under 386BSD, but screen works using fifos. * Fifos in O_RDWR mode are only used for the BROKEN_PIPE case and for * the select() configuration test. */ return 0; #endif if (open(fin, O_RDONLY | O_NONBLOCK)) return 1; if (fork() == 0) { close(0); if (open(fin, O_WRONLY | O_NONBLOCK)) return 1; close(0); if (open(fin, O_WRONLY | O_NONBLOCK)) return 1; if (write(0, "TEST", 4) == -1) return 1; return 0; } FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your fifos are usable" 1>&6 fifo=1 else $as_nop echo "- your fifos are not usable" 1>&6 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* if test -n "$fifo"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken fifo implementation..." >&5 printf "%s\n" "$as_me: checking for broken fifo implementation..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming fifo implementation is ok" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif char *fin = "/tmp/conftest$$"; int main() { struct timeval tv; fd_set f; #ifdef POSIX if (mkfifo(fin, 0600)) #else if (mknod(fin, S_IFIFO|0600, 0)) #endif return 1; close(0); if (open(fin, O_RDONLY|O_NONBLOCK)) return 1; FD_SET(0, &f); tv.tv_sec = 1; tv.tv_usec = 0; if (select(1, &f, 0, 0, &tv)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your implementation is ok" 1>&6 else $as_nop echo "- you have a broken implementation" 1>&6 printf "%s\n" "@%:@define BROKEN_PIPE 1" >>confdefs.h fifobr=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking sockets..." >&5 printf "%s\n" "$as_me: checking sockets..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming sockets are usable" 1>&6 sock=1 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #include #include #include #include char *son = "/tmp/conftest$$"; int main() { int s1, s2, l; struct sockaddr_un a; fd_set f; (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 1; a.sun_family = AF_UNIX; strcpy(a.sun_path, son); (void) unlink(son); if (bind(s1, (struct sockaddr *) &a, strlen(son)+2) == -1) return 1; if (listen(s1, 2)) return 1; if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(son) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); return 0; } l = sizeof(a); close(0); if (accept(s1, &a, &l)) return 1; FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your sockets are usable" 1>&6 sock=1 else $as_nop echo "- your sockets are not usable" 1>&6 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* if test -n "$sock"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking socket implementation..." >&5 printf "%s\n" "$as_me: checking socket implementation..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming sockets are normal" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #include #include char *son = "/tmp/conftest$$"; int main() { int s; struct stat stb; struct sockaddr_un a; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 0; a.sun_family = AF_UNIX; strcpy(a.sun_path, son); (void) unlink(son); if (bind(s, (struct sockaddr *) &a, strlen(son)+2) == -1) return 0; if (stat(son, &stb)) return 1; close(s); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- you are normal" 1>&6 else $as_nop echo "- unix domain sockets are not kept in the filesystem" 1>&6 printf "%s\n" "@%:@define SOCK_NOT_IN_FS 1" >>confdefs.h socknofs=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* fi if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming select is ok" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include char *nam = "/tmp/conftest$$"; #ifdef NAMEDPIPE #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif int main() { fd_set f; #ifdef __FreeBSD__ /* From Andrew A. Chernov (ache@astral.msk.su): * opening RDWR fifo fails in BSD 4.4, but select return values are * right. */ return 0; #endif (void)alarm(5); #ifdef POSIX if (mkfifo(nam, 0777)) #else if (mknod(nam, S_IFIFO|0777, 0)) #endif return 1; close(0); if (open(nam, O_RDWR | O_NONBLOCK)) return 1; if (write(0, "TEST", 4) == -1) return 1; #else #include #include #include #include #include #include int main() { int s1, s2, l; struct sockaddr_un a; fd_set f; (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 1; a.sun_family = AF_UNIX; strcpy(a.sun_path, nam); (void) unlink(nam); if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) return 1; if (listen(s1, 2)) return 1; if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); return 0; } l = sizeof(a); close(0); if (accept(s1, (struct sockaddr *)&a, &l)) return 1; #endif FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; if (select(1, &f, &f, 0, 0) != 2) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- select is ok" 1>&6 else $as_nop echo "- select can not count" 1>&6 printf "%s\n" "@%:@define SELECT_BROKEN 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent..." >&5 printf "%s\n" "$as_me: checking for tgetent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop olibs="$LIBS" LIBS="-lcurses $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libcurses..." >&5 printf "%s\n" "$as_me: checking libcurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #ifdef __hpux __sorry_hpux_libcurses_is_totally_broken_in_10_10(); #else tgetent((char *)0, (char *)0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltermcap $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtermcap..." >&5 printf "%s\n" "$as_me: checking libtermcap..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltermlib $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtermlib..." >&5 printf "%s\n" "$as_me: checking libtermlib..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-lncursesw $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libncursesw..." >&5 printf "%s\n" "$as_me: checking libncursesw..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltinfow $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtinfow..." >&5 printf "%s\n" "$as_me: checking libtinfow..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-lncurses $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libncurses..." >&5 printf "%s\n" "$as_me: checking libncurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltinfo $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtinfo..." >&5 printf "%s\n" "$as_me: checking libtinfo..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop as_fn_error $? "!!! no tgetent - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming terminfo database is used" 1>&6 printf "%s\n" "@%:@define TERMINFO 1" >>confdefs.h else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { return(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- you use the termcap database" 1>&6 else $as_nop echo "- you use the terminfo database" 1>&6 printf "%s\n" "@%:@define TERMINFO 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ospeed..." >&5 printf "%s\n" "$as_me: checking ospeed..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern short ospeed; int main (void) { ospeed=5; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop printf "%s\n" "@%:@define NEED_OSPEED 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc..." >&5 printf "%s\n" "$as_me: checking for /dev/ptc..." >&6;} if test -r /dev/ptc; then printf "%s\n" "@%:@define HAVE_DEV_PTC 1" >>confdefs.h fi fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SVR4 ptys..." >&5 printf "%s\n" "$as_me: checking for SVR4 ptys..." >&6;} sysvr4ptys= if test -c /dev/ptmx ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { ptsname(0);grantpt(0);unlockpt(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SVR4_PTYS 1" >>confdefs.h sysvr4ptys=1 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi ac_fn_c_check_func "$LINENO" "getpt" "ac_cv_func_getpt" if test "x$ac_cv_func_getpt" = xyes then : printf "%s\n" "@%:@define HAVE_GETPT 1" >>confdefs.h fi if test -z "$sysvr4ptys"; then for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" if test "x$ac_cv_func_openpty" = xyes then : printf "%s\n" "@%:@define HAVE_OPENPTY 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 printf %s "checking for openpty in -lutil... " >&6; } if test ${ac_cv_lib_util_openpty+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char openpty (); int main (void) { return openpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_util_openpty=yes else $as_nop ac_cv_lib_util_openpty=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 printf "%s\n" "$ac_cv_lib_util_openpty" >&6; } if test "x$ac_cv_lib_util_openpty" = xyes then : printf "%s\n" "@%:@define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" fi fi done fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ptyranges..." >&5 printf "%s\n" "$as_me: checking for ptyranges..." >&6;} if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : ptys=`echo /dev/ptyp??` else $as_nop ptys=`echo $pdir/pty??` fi rm -rf conftest* if test "$ptys" != "$pdir/pty??" ; then p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'` p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'` printf "%s\n" "@%:@define PTYRANGE0 \"$p0\"" >>confdefs.h printf "%s\n" "@%:@define PTYRANGE1 \"$p1\"" >>confdefs.h fi fi @%:@ Check whether --with-pty-mode was given. if test ${with_pty_mode+y} then : withval=$with_pty_mode; ptymode="${withval}" fi @%:@ Check whether --with-pty-group was given. if test ${with_pty_group+y} then : withval=$with_pty_group; ptygrp="${withval}" fi test -n "$ptymode" || ptymode=0620 if test -n "$ptygrp" ; then printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking default tty permissions/group..." >&5 printf "%s\n" "$as_me: checking default tty permissions/group..." >&6;} rm -f conftest_grp if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming ptys are world accessable" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include int main() { struct stat sb; char *x,*ttyname(); int om, m; FILE *fp; if (!(x = ttyname(0))) return 1; if (stat(x, &sb)) return 1; om = sb.st_mode; if (om & 002) return 0; m = system("mesg y"); if (m == -1 || m == 127) return 1; if (stat(x, &sb)) return 1; m = sb.st_mode; if (chmod(x, om)) return 1; if (m & 002) return 0; if (sb.st_gid == getgid()) return 1; if (!(fp=fopen("conftest_grp", "w"))) return 1; fprintf(fp, "%d\n", sb.st_gid); fclose(fp); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : if test -f conftest_grp; then ptygrp=`cat conftest_grp` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else echo "- ptys are world accessable" 1>&6 fi else $as_nop WRITEPATH='' XTERMPATH='' # Extract the first word of "write", so it can be a program name with args. set dummy write; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_WRITEPATH+y} then : printf %s "(cached) " >&6 else $as_nop case $WRITEPATH in [\\/]* | ?:[\\/]*) ac_cv_path_WRITEPATH="$WRITEPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_WRITEPATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi WRITEPATH=$ac_cv_path_WRITEPATH if test -n "$WRITEPATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WRITEPATH" >&5 printf "%s\n" "$WRITEPATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "xterm", so it can be a program name with args. set dummy xterm; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_XTERMPATH+y} then : printf %s "(cached) " >&6 else $as_nop case $XTERMPATH in [\\/]* | ?:[\\/]*) ac_cv_path_XTERMPATH="$XTERMPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_XTERMPATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XTERMPATH=$ac_cv_path_XTERMPATH if test -n "$XTERMPATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XTERMPATH" >&5 printf "%s\n" "$XTERMPATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi found= if test -n "$WRITEPATH$XTERMPATH"; then findfollow= lsfollow= found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null` if test -n "$found"; then findfollow=-follow lsfollow=L fi if test -n "$XTERMPATH"; then ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'` if test tty != "$ptygrpn"; then XTERMPATH= fi fi fi if test -n "$WRITEPATH$XTERMPATH"; then found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` if test -n "$found"; then ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else echo "- ptys are world accessable" 1>&6 fi else echo "- can not determine - assume ptys are world accessable" 1>&6 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest_grp fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getutent..." >&5 printf "%s\n" "$as_me: checking getutent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* to get time_t on SCO */ #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif #ifdef __hpux #define pututline _pututline #endif int main (void) { int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETUTENT 1" >>confdefs.h else $as_nop olibs="$LIBS" LIBS="$LIBS -lgen" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getutent with -lgen..." >&5 printf "%s\n" "$as_me: checking getutent with -lgen..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif #ifdef __hpux #define pututline _pututline #endif int main (void) { int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETUTENT 1" >>confdefs.h else $as_nop LIBS="$olibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ut_host..." >&5 printf "%s\n" "$as_me: checking ut_host..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif int main (void) { struct utmp u; u.ut_host[0] = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define UTHOST 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_fn_c_check_header_compile "$LINENO" "utempter.h" "ac_cv_header_utempter_h" "$ac_includes_default" if test "x$ac_cv_header_utempter_h" = xyes then : have_utempter=yes else $as_nop have_utempter=no fi if test "$have_utempter" = yes; then printf "%s\n" "@%:@define HAVE_UTEMPTER 1" >>confdefs.h LIBS="$LIBS -lutempter" fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libutil(s)..." >&5 printf "%s\n" "$as_me: checking for libutil(s)..." >&6;} test -f /usr/lib/libutils.a && LIBS="$LIBS -lutils" test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getloadavg..." >&5 printf "%s\n" "$as_me: checking getloadavg..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getloadavg((double *)0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define LOADAV_GETLOADAVG 1" >>confdefs.h load=1 else $as_nop if test "$cross_compiling" = no && test -f /usr/lib/libkvm.a ; then olibs="$LIBS" LIBS="$LIBS -lkvm" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getloadavg with -lkvm..." >&5 printf "%s\n" "$as_me: checking getloadavg with -lkvm..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getloadavg((double *)0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define LOADAV_GETLOADAVG 1" >>confdefs.h load=1 else $as_nop LIBS="$olibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$load" ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(NeXT) || defined(apollo) || defined(linux) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : load=1 fi rm -rf conftest* fi if test -z "$load" && test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kernelfile..." >&5 printf "%s\n" "$as_me: checking for kernelfile..." >&6;} for core in /unix /vmunix /dynix /hp-ux /xelos /dev/ksyms /kernel/unix /kernel/genunix /unicos /mach /netbsd /386bsd /dgux /bsd /stand/vmunix; do if test -f $core || test -c $core; then break fi done if test ! -f $core && test ! -c $core ; then echo "- no kernelfile found" 1>&6 else echo "- using kernelfile '$core'" 1>&6 if test -r $core ; then printf "%s\n" "@%:@define LOADAV_UNIX \"$core\"" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "nlist.h" "ac_cv_header_nlist_h" "$ac_includes_default" if test "x$ac_cv_header_nlist_h" = xyes then : printf "%s\n" "@%:@define NLIST_STRUCT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking n_un in struct nlist..." >&5 printf "%s\n" "$as_me: checking n_un in struct nlist..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { struct nlist n; n.n_un.n_name = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define NLIST_NAME_UNION 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nlist declaration..." >&5 printf "%s\n" "$as_me: checking for nlist declaration..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef NLIST_STRUCT # include #else # include #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "nlist(( | )( | )*.*\(|\()" >/dev/null 2>&1 then : printf "%s\n" "@%:@define NLIST_DECLARED 1" >>confdefs.h fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for avenrun symbol..." >&5 printf "%s\n" "$as_me: checking for avenrun symbol..." >&6;} nlist64= for av in avenrun _avenrun _Loadavg avenrun _avenrun _Loadavg; do if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef NLIST_STRUCT #include #else #include #endif $nlist64 struct nlist nl[2]; int main() { #if !defined(_AUX_SOURCE) && !defined(AUX) # ifdef NLIST_NAME_UNION nl[0].n_un.n_name = "$av"; # else nl[0].n_name = "$av"; # endif #else strncpy(nl[0].n_name, "$av", sizeof(nl[0].n_name)); #endif nlist(LOADAV_UNIX, nl); if (nl[0].n_value == 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : avensym=$av;break fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$av" = _Loadavg; then nlist64='#define nlist nlist64' fi done if test -z "$avensym" ; then echo "- no avenrun symbol found" 1>&6 else echo "- using avenrun symbol '$avensym'" 1>&6 printf "%s\n" "@%:@define LOADAV_AVENRUN \"$avensym\"" >>confdefs.h if test -n "$nlist64"; then echo "- used nlist64 to find it" 1>&6 printf "%s\n" "@%:@define LOADAV_USE_NLIST64 1" >>confdefs.h fi load=1 fi else echo "Can't configure the load average display feature" 1>&6 echo "because $core is not readable by you." 1>&6 echo "To configure the load average display feature" 1>&6 echo "re-run configure as root if possible." 1>&6 echo "If you are not the system administrator then disregard" 1>&6 echo "this warning. You can still use screen without" 1>&6 echo "the load average display feature." 1>&6 fi fi fi cat > conftest.c < #include _CUT_HERE_ #if !defined(LOADAV_GETLOADAVG) && ((defined(hp300) && !defined(__hpux)) || defined(sun) || (defined(ultrix) && defined(mips)) || defined(_SEQUENT_) || defined(sgi) || (defined(SVR4) && !defined(__hpux)) || defined(sony_news) || (!defined(__osf__) && defined(__alpha)) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) || defined(m88k)) loadtype=long # if defined(apollo) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) loadscale=65536 # else # if defined(FSCALE) && !defined(__osf__) # undef FSCALE loadscale=FSCALE # else # ifdef sgi loadtype=int loadscale=1024 # else # if defined(MIPS) || defined(SVR4) || defined(m88k) loadscale=256 # else /* not MIPS */ loadscale=1000 /* our default value */ # endif /* MIPS */ # endif /* sgi */ # endif /* not FSCALE */ # endif /* not apollo */ #else loadtype=double loadscale=1 #endif #ifdef alliant loadnum=4 #else loadnum=3 #endif EOF eval "$ac_cpp conftest.c 2>&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out" . ./conftest.out rm -f conftest* if test -n "$load" ; then printf "%s\n" "@%:@define LOADAV 1" >>confdefs.h fi if test -n "$loadtype" ; then printf "%s\n" "@%:@define LOADAV_TYPE $loadtype" >>confdefs.h fi if test -n "$loadnum" ; then printf "%s\n" "@%:@define LOADAV_NUM $loadnum" >>confdefs.h fi if test -n "$loadscale" ; then printf "%s\n" "@%:@define LOADAV_SCALE $loadscale" >>confdefs.h fi if test -n "$posix" ; then echo "assuming posix signal definition" 1>&6 printf "%s\n" "@%:@define SIGVOID 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers..." >&5 printf "%s\n" "$as_me: checking return type of signal handlers..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef signal #undef signal #endif extern void (*signal ()) (); int main (void) { int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define SIGVOID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking sigset..." >&5 printf "%s\n" "$as_me: checking sigset..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #ifdef SIGVOID sigset(0, (void (*)())0); #else sigset(0, (int (*)())0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define USESIGSET 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking signal implementation..." >&5 printf "%s\n" "$as_me: checking signal implementation..." >&6;} if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifdef USESIGSET #define signal sigset #endif int got; #ifdef SIGVOID void #endif hand() { got++; } int main() { /* on hpux we use sigvec to get bsd signals */ #ifdef __hpux (void)signal(SIGCLD, hand); kill(getpid(), SIGCLD); kill(getpid(), SIGCLD); if (got < 2) return 1; #endif return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : else $as_nop printf "%s\n" "@%:@define SYSVSIGS 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for crypt and sec libraries..." >&5 printf "%s\n" "$as_me: checking for crypt and sec libraries..." >&6;} if test "$cross_compiling" = no ; then test -f /lib/libcrypt_d.a || test -f /usr/lib/libcrypt_d.a && LIBS="$LIBS -lcrypt_d" fi oldlibs="$LIBS" LIBS="$LIBS -lcrypt" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking crypt..." >&5 printf "%s\n" "$as_me: checking crypt..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = no ; then test -f /lib/libsec.a || test -f /usr/lib/libsec.a && LIBS="$LIBS -lsec" test -f /lib/libshadow.a || test -f /usr/lib/libshadow.a && LIBS="$LIBS -lshadow" fi oldlibs="$LIBS" LIBS="$LIBS -lsun" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking IRIX sun library..." >&5 printf "%s\n" "$as_me: checking IRIX sun library..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking syslog..." >&5 printf "%s\n" "$as_me: checking syslog..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { closelog(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop oldlibs="$LIBS" LIBS="$LIBS -lbsd" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking syslog in libbsd.a..." >&5 printf "%s\n" "$as_me: checking syslog in libbsd.a..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { closelog(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : echo "- found." 1>&6 else $as_nop LIBS="$oldlibs" echo "- bad news: syslog missing." 1>&6 printf "%s\n" "@%:@define NOSYSLOG 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -lcrypt_i" fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait union..." >&5 printf "%s\n" "$as_me: checking wait union..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { union wait x; int y; #ifdef WEXITSTATUS y = WEXITSTATUS(x); #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define BSDWAIT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test -z "$butterfly"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for termio or termios..." >&5 printf "%s\n" "$as_me: checking for termio or termios..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : printf "%s\n" "@%:@define TERMIO 1" >>confdefs.h else $as_nop if test -n "$posix"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : printf "%s\n" "@%:@define TERMIO 1" >>confdefs.h fi rm -f conftest.err conftest.i conftest.$ac_ext fi fi rm -f conftest.err conftest.i conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getspnam..." >&5 printf "%s\n" "$as_me: checking getspnam..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getspnam("x"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define SHADOWPW 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getttyent..." >&5 printf "%s\n" "$as_me: checking getttyent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getttyent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETTTYENT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking fdwalk..." >&5 printf "%s\n" "$as_me: checking fdwalk..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { fdwalk(NULL, NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_FDWALK 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether memcpy/memmove/bcopy handles overlapping arguments..." >&5 printf "%s\n" "$as_me: checking whether memcpy/memmove/bcopy handles overlapping arguments..." >&6;} if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEBCOPY 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; use memmove" 1>&6 printf "%s\n" "@%:@define USEMEMMOVE 1" >>confdefs.h else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define bcopy(s,d,l) memmove(d,s,l) int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEMEMMOVE 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define bcopy(s,d,l) memcpy(d,s,l) int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEMEMCPY 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long file names" >&5 printf %s "checking for long file names... " >&6; } if test ${ac_cv_sys_long_file_names+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: # . the current directory, where building will happen # $prefix/lib where we will be installing things # $exec_prefix/lib likewise # $TMPDIR if set, where it might want to write temporary files # /tmp where it might want to write temporary files # /var/tmp likewise # /usr/tmp likewise for ac_dir in . "$TMPDIR" /tmp /var/tmp /usr/tmp "$prefix/lib" "$exec_prefix/lib"; do # Skip $TMPDIR if it is empty or bogus, and skip $exec_prefix/lib # in the usual case where exec_prefix is '${prefix}'. case $ac_dir in #( . | /* | ?:[\\/]*) ;; #( *) continue;; esac test -w "$ac_dir/." || continue # It is less confusing to not echo anything here. ac_xdir=$ac_dir/cf$$ (umask 077 && mkdir "$ac_xdir" 2>/dev/null) || continue ac_tf1=$ac_xdir/conftest9012345 ac_tf2=$ac_xdir/conftest9012346 touch "$ac_tf1" 2>/dev/null && test -f "$ac_tf1" && test ! -f "$ac_tf2" || ac_cv_sys_long_file_names=no rm -f -r "$ac_xdir" 2>/dev/null test $ac_cv_sys_long_file_names = no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_long_file_names" >&5 printf "%s\n" "$ac_cv_sys_long_file_names" >&6; } if test $ac_cv_sys_long_file_names = yes; then printf "%s\n" "@%:@define HAVE_LONG_FILE_NAMES 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for vsprintf" >&5 printf %s "checking for vsprintf... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { va_list valist; vsprintf(0,0,valist); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define USEVARARGS 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main (void) { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_ac_Header=yes" else $as_nop eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF @%:@define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setenv" >&5 printf %s "checking for setenv... " >&6; } if test -z "$ac_setenv_args"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setenv((char *) 0, (char *) 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_setenv_args=3 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi if test -z "$ac_setenv_args"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setenv((char *) 0, (char *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_setenv_args=2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi if test -n "$ac_setenv_args"; then printf "%s\n" "@%:@define USESETENV 1" >>confdefs.h if test "$ac_setenv_args" = 3; then printf "%s\n" "@%:@define HAVE_SETENV_3 1" >>confdefs.h elif test "$ac_setenv_args" = 2; then printf "%s\n" "@%:@define HAVE_SETENV_2 1" >>confdefs.h fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for putenv" >&5 printf %s "checking for putenv... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { putenv((char *)0);unsetenv((char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; };printf "%s\n" "@%:@define NEEDPUTENV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo(CODESET)" >&5 printf %s "checking for nl_langinfo(CODESET)... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define HAVE_NL_LANGINFO 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gethostname" >&5 printf %s "checking for library containing gethostname... " >&6; } if test ${ac_cv_search_gethostname+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gethostname (); int main (void) { return gethostname (); ; return 0; } _ACEOF for ac_lib in '' nsl do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gethostname=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gethostname+y} then : break fi done if test ${ac_cv_search_gethostname+y} then : else $as_nop ac_cv_search_gethostname=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostname" >&5 printf "%s\n" "$ac_cv_search_gethostname" >&6; } ac_res=$ac_cv_search_gethostname if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename" if test "x$ac_cv_func_rename" = xyes then : printf "%s\n" "@%:@define HAVE_RENAME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod" if test "x$ac_cv_func_fchmod" = xyes then : printf "%s\n" "@%:@define HAVE_FCHMOD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown" if test "x$ac_cv_func_fchown" = xyes then : printf "%s\n" "@%:@define HAVE_FCHOWN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : printf "%s\n" "@%:@define HAVE_STRERROR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" if test "x$ac_cv_func_lstat" = xyes then : printf "%s\n" "@%:@define HAVE_LSTAT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "_exit" "ac_cv_func__exit" if test "x$ac_cv_func__exit" = xyes then : printf "%s\n" "@%:@define HAVE__EXIT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" if test "x$ac_cv_func_utimes" = xyes then : printf "%s\n" "@%:@define HAVE_UTIMES 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = xyes then : printf "%s\n" "@%:@define HAVE_VSNPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" if test "x$ac_cv_func_getcwd" = xyes then : printf "%s\n" "@%:@define HAVE_GETCWD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes then : printf "%s\n" "@%:@define HAVE_SETLOCALE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = xyes then : printf "%s\n" "@%:@define HAVE_STRFTIME 1" >>confdefs.h fi @%:@ Check whether --enable-pam was given. if test ${enable_pam+y} then : enableval=$enable_pam; fi if test "$enable_pam" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PAM support" >&5 printf %s "checking for PAM support... " >&6; } oldlibs="$LIBS" LIBS="$LIBS -lpam" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { pam_start(0, 0, 0, 0); pam_authenticate(0, 0); pam_end(0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define USE_PAM 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; };LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi @%:@ Check whether --enable-use-locale was given. if test ${enable_use_locale+y} then : enableval=$enable_use_locale; else $as_nop enable_use_locale=yes fi if test "$enable_use_locale" = "yes"; then printf "%s\n" "@%:@define USE_LOCALE 1" >>confdefs.h fi @%:@ Check whether --enable-telnet was given. if test ${enable_telnet+y} then : enableval=$enable_telnet; fi if test "$enable_telnet" = "yes"; then printf "%s\n" "@%:@define BUILTIN_TELNET 1" >>confdefs.h fi @%:@ Check whether --enable-colors256 was given. if test ${enable_colors256+y} then : enableval=$enable_colors256; fi if test "$enable_colors256" = "yes"; then printf "%s\n" "@%:@define COLORS256 1" >>confdefs.h fi @%:@ Check whether --enable-rxvt_osc was given. if test ${enable_rxvt_osc+y} then : enableval=$enable_rxvt_osc; fi if test "$enable_rxvt_osc" = "yes"; then printf "%s\n" "@%:@define RXVT_OSC 1" >>confdefs.h fi if test -z "$old_CFLAGS"; then if test "x$CFLAGS" = "x-g"; then CFLAGS="-O" fi fi test -n "$seqptx" && LIBS="-ltermcap -lc -lsocket -linet -lnsl -lsec -lseq" ETCSCREENRC= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the global screenrc file" >&5 printf %s "checking for the global screenrc file... " >&6; } @%:@ Check whether --with-sys-screenrc was given. if test ${with_sys_screenrc+y} then : withval=$with_sys_screenrc; ETCSCREENRC="${withval}" fi ac_config_files="$ac_config_files Makefile doc/Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default":C) # a hook for preserving undef directive in config.h mv config.h conftest sed -e 's@^\(.*\)defin.\( .*\) .*/\*\(.*KEEP_UNDEF_HERE\)@\1undef\2 /\*\3@' < conftest > config.h rm -f conftest ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" if test -z "$AWK"; then echo "!!! Since you have no awk you must copy the files 'comm.h.dist'" echo "!!! and 'term.h.dist' to 'comm.h' and 'term.h'." echo "!!! Do _not_ change the user configuration section in config.h!" echo "Please check the pathnames in the Makefile." else echo "Now please check the pathnames in the Makefile and in the user" echo "configuration section in config.h." fi echo "Then type 'make' to make screen. Good luck." echo "" screen-4.9.1/autom4te.cache/requests0000664000175000017500000002004414467014300016053 0ustar alexalex# This file was generated by Autom4te 2.71. # It contains the lists of macros which have been traced. # It can be safely removed. @request = ( bless( [ '0', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', '/usr/share/aclocal-1.16/internal/ac-config-macro-dirs.m4', 'configure.ac' ], { '_AM_AUTOCONF_VERSION' => 1, 'm4_include' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'm4_pattern_allow' => 1, '_AM_CONFIG_MACRO_DIRS' => 1, 'AU_DEFUN' => 1, 'include' => 1, 'AC_PROGRAM_SOURCE' => 1, 'AC_DEFUN_ONCE' => 1, 'AC_DEFUN' => 1, '_m4_warn' => 1, 'AC_CONFIG_MACRO_DIR' => 1, 'm4_pattern_forbid' => 1 } ], 'Autom4te::Request' ), bless( [ '1', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'configure.ac' ], { '_AM_COND_ELSE' => 1, 'AM_GNU_GETTEXT' => 1, 'AC_SUBST' => 1, 'AM_PROG_MKDIR_P' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_CANONICAL_BUILD' => 1, 'LT_SUPPORTED_TAG' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AM_PATH_GUILE' => 1, 'AM_XGETTEXT_OPTION' => 1, '_AM_COND_IF' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'AM_PROG_CC_C_O' => 1, 'IT_PROG_INTLTOOL' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'AH_OUTPUT' => 1, 'AM_PROG_LIBTOOL' => 1, 'AM_NLS' => 1, 'AC_FC_FREEFORM' => 1, 'AM_CONDITIONAL' => 1, 'AC_LIBSOURCE' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_AUTOMAKE_VERSION' => 1, '_m4_warn' => 1, 'AC_CONFIG_FILES' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'm4_pattern_allow' => 1, 'AC_FC_PP_SRCEXT' => 1, 'AC_SUBST_TRACE' => 1, 'AM_PROG_MOC' => 1, 'AM_PROG_FC_C_O' => 1, 'sinclude' => 1, 'AC_CANONICAL_TARGET' => 1, 'AM_PROG_AR' => 1, '_AM_MAKEFILE_INCLUDE' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AC_CONFIG_HEADERS' => 1, 'AM_SILENT_RULES' => 1, 'AC_FC_PP_DEFINE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AM_INIT_AUTOMAKE' => 1, '_AM_COND_ENDIF' => 1, 'AC_INIT' => 1, '_LT_AC_TAGCONFIG' => 1, 'GTK_DOC_CHECK' => 1, '_AM_SUBST_NOTMAKE' => 1, 'm4_pattern_forbid' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AC_CONFIG_LINKS' => 1, 'm4_sinclude' => 1, 'AM_POT_TOOLS' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'LT_INIT' => 1, 'include' => 1, 'm4_include' => 1, 'AC_FC_SRCEXT' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_PROG_LIBTOOL' => 1, 'AM_PROG_F77_C_O' => 1, 'AM_PROG_CXX_C_O' => 1 } ], 'Autom4te::Request' ), bless( [ '2', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', '/usr/share/autoconf/autoconf/trailer.m4', 'configure.ac' ], { 'AC_FC_PP_SRCEXT' => 1, 'AM_PROG_MOC' => 1, 'AC_SUBST_TRACE' => 1, 'm4_pattern_allow' => 1, 'AM_PROG_FC_C_O' => 1, 'AM_PROG_CC_C_O' => 1, 'IT_PROG_INTLTOOL' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AC_CONFIG_FILES' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AM_NLS' => 1, 'AC_FC_FREEFORM' => 1, 'AH_OUTPUT' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'AM_PROG_LIBTOOL' => 1, 'AM_MAINTAINER_MODE' => 1, 'AC_LIBSOURCE' => 1, 'AM_AUTOMAKE_VERSION' => 1, '_m4_warn' => 1, 'AM_CONDITIONAL' => 1, 'LT_SUPPORTED_TAG' => 1, 'AC_CANONICAL_BUILD' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, '_AM_COND_IF' => 1, 'AM_XGETTEXT_OPTION' => 1, 'AM_PATH_GUILE' => 1, 'AC_SUBST' => 1, 'AM_GNU_GETTEXT' => 1, 'AM_PROG_MKDIR_P' => 1, '_AM_COND_ELSE' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'LT_INIT' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'include' => 1, 'm4_sinclude' => 1, 'AM_POT_TOOLS' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_FC_SRCEXT' => 1, 'AM_PROG_F77_C_O' => 1, 'AC_PROG_LIBTOOL' => 1, 'AM_PROG_CXX_C_O' => 1, 'm4_include' => 1, '_AM_SUBST_NOTMAKE' => 1, 'm4_pattern_forbid' => 1, 'AC_INIT' => 1, 'GTK_DOC_CHECK' => 1, '_LT_AC_TAGCONFIG' => 1, 'AC_CONFIG_LINKS' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AC_FC_PP_DEFINE' => 1, 'AM_INIT_AUTOMAKE' => 1, '_AM_COND_ENDIF' => 1, 'AC_CONFIG_HEADERS' => 1, 'AM_SILENT_RULES' => 1, 'AM_PROG_AR' => 1, 'AC_CANONICAL_TARGET' => 1, 'sinclude' => 1, 'AC_CANONICAL_SYSTEM' => 1, '_AM_MAKEFILE_INCLUDE' => 1 } ], 'Autom4te::Request' ) ); screen-4.9.1/autom4te.cache/traces.00000664000175000017500000016043014467014300015623 0ustar alexalexm4trace:configure.ac:9: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:9: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:9: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:9: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:10: -1- _m4_warn([obsolete], [The macro `AC_CONFIG_HEADER' is obsolete. You should run autoupdate.], [./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from... configure.ac:10: the top level]) m4trace:configure.ac:16: -1- AC_DEFUN([AC_PROGRAM_SOURCE], [AC_REQUIRE([AC_PROG_CPP])AC_PROVIDE([$0])cat > conftest.c <&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out" . ./conftest.out rm -f conftest* ]) m4trace:configure.ac:39: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:39: the top level]) m4trace:configure.ac:40: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:41: -1- m4_pattern_allow([^ac_prefix_program$]) m4trace:configure.ac:42: -1- m4_pattern_allow([^ac_prefix_program$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:45: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPP$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPP$]) m4trace:configure.ac:47: -1- m4_pattern_allow([^GREP$]) m4trace:configure.ac:47: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.ac:48: -1- _m4_warn([obsolete], [The macro `AC_ISC_POSIX' is obsolete. You should run autoupdate.], [./lib/autoconf/specific.m4:550: AC_ISC_POSIX is expanded from... configure.ac:48: the top level]) m4trace:configure.ac:49: -1- _m4_warn([syntax], [AC_LINK_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS], [./lib/autoconf/specific.m4:364: AC_USE_SYSTEM_EXTENSIONS is expanded from... configure.ac:49: the top level]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_stdio_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" stdio.h ]AS_TR_SH([stdio.h]) AS_TR_CPP([HAVE_stdio.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_stdlib_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" stdlib.h ]AS_TR_SH([stdlib.h]) AS_TR_CPP([HAVE_stdlib.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_string_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" string.h ]AS_TR_SH([string.h]) AS_TR_CPP([HAVE_string.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_inttypes_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" inttypes.h ]AS_TR_SH([inttypes.h]) AS_TR_CPP([HAVE_inttypes.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_stdint_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" stdint.h ]AS_TR_SH([stdint.h]) AS_TR_CPP([HAVE_stdint.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_strings_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" strings.h ]AS_TR_SH([strings.h]) AS_TR_CPP([HAVE_strings.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_sys_stat_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" sys/stat.h ]AS_TR_SH([sys/stat.h]) AS_TR_CPP([HAVE_sys/stat.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_sys_types_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" sys/types.h ]AS_TR_SH([sys/types.h]) AS_TR_CPP([HAVE_sys/types.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_unistd_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" unistd.h ]AS_TR_SH([unistd.h]) AS_TR_CPP([HAVE_unistd.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_wchar_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" wchar.h ]AS_TR_SH([wchar.h]) AS_TR_CPP([HAVE_wchar.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- AC_DEFUN([_AC_Header_minix_config_h], [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_]]_AC_LANG_ABBREV[[_list], [" minix/config.h ]AS_TR_SH([minix/config.h]) AS_TR_CPP([HAVE_minix/config.h])["])])_AC_HEADERS_EXPANSION(_AC_LANG_ABBREV)]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_ALL_SOURCE$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_DARWIN_C_SOURCE$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_GNU_SOURCE$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_HPUX_ALT_XOPEN_SOCKET_API$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_NETBSD_SOURCE$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_OPENBSD_SOURCE$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_PTHREAD_SEMANTICS$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_ATTRIBS_EXT__$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_BFP_EXT__$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_DFP_EXT__$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_FUNCS_EXT__$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_TYPES_EXT__$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_LIB_EXT2__$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_MATH_SPEC_FUNCS__$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_TANDEM_SOURCE$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_MINIX$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_SOURCE$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_1_SOURCE$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__EXTENSIONS__$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_XOPEN_SOURCE$]) m4trace:configure.ac:51: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:56: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:56: the top level]) m4trace:configure.ac:57: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:57: the top level]) m4trace:configure.ac:64: -1- m4_pattern_allow([^SOCKDIR$]) m4trace:configure.ac:89: -1- m4_pattern_allow([^ISC$]) m4trace:configure.ac:100: -1- m4_pattern_allow([^sysV68$]) m4trace:configure.ac:104: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:104: the top level]) m4trace:configure.ac:109: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:109: the top level]) m4trace:configure.ac:110: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:110: the top level]) m4trace:configure.ac:114: -1- m4_pattern_allow([^MIPS$]) m4trace:configure.ac:115: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:115: the top level]) m4trace:configure.ac:117: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:117: the top level]) m4trace:configure.ac:123: -3- m4_pattern_allow([^USE_WAIT2$]) m4trace:configure.ac:118: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:118: the top level]) m4trace:configure.ac:116: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:116: the top level]) m4trace:configure.ac:130: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:130: the top level]) m4trace:configure.ac:140: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:140: the top level]) m4trace:configure.ac:141: -2- m4_pattern_allow([^OSX$]) m4trace:configure.ac:141: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:141: the top level]) m4trace:configure.ac:147: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:147: the top level]) m4trace:configure.ac:158: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:158: the top level]) m4trace:configure.ac:167: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:167: the top level]) m4trace:configure.ac:167: -2- m4_pattern_allow([^POSIX$]) m4trace:configure.ac:170: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:170: the top level]) m4trace:configure.ac:174: -2- m4_pattern_allow([^SYSV$]) m4trace:configure.ac:171: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:171: the top level]) m4trace:configure.ac:176: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:176: the top level]) m4trace:configure.ac:183: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:183: the top level]) m4trace:configure.ac:189: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:189: the top level]) m4trace:configure.ac:189: -2- m4_pattern_allow([^SVR4$]) m4trace:configure.ac:193: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:193: the top level]) m4trace:configure.ac:194: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:194: the top level]) m4trace:configure.ac:194: -2- m4_pattern_allow([^BUGGYGETLOGIN$]) m4trace:configure.ac:194: -2- m4_pattern_allow([^BUGGYGETLOGIN$]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STROPTS_H$]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STRING_H$]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STRINGS_H$]) m4trace:configure.ac:204: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:204: the top level]) m4trace:configure.ac:234: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:234: the top level]) m4trace:configure.ac:250: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:250: the top level]) m4trace:configure.ac:250: -2- m4_pattern_allow([^BSDJOBS$]) m4trace:configure.ac:250: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:250: the top level]) m4trace:configure.ac:235: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:235: the top level]) m4trace:configure.ac:255: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:255: the top level]) m4trace:configure.ac:260: -2- m4_pattern_allow([^HAVE_SETRESUID$]) m4trace:configure.ac:256: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:256: the top level]) m4trace:configure.ac:262: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:262: the top level]) m4trace:configure.ac:267: -2- m4_pattern_allow([^HAVE_SETREUID$]) m4trace:configure.ac:263: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:263: the top level]) m4trace:configure.ac:275: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:275: the top level]) m4trace:configure.ac:284: -2- m4_pattern_allow([^HAVE_SETEUID$]) m4trace:configure.ac:276: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:276: the top level]) m4trace:configure.ac:287: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:287: the top level]) m4trace:configure.ac:292: -2- m4_pattern_allow([^HAVE_EXECVPE$]) m4trace:configure.ac:288: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:288: the top level]) m4trace:configure.ac:299: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:299: the top level]) m4trace:configure.ac:306: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:306: the top level]) m4trace:configure.ac:307: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:307: the top level]) m4trace:configure.ac:300: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:300: the top level]) m4trace:configure.ac:319: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:319: the top level]) m4trace:configure.ac:385: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:385: the top level]) m4trace:configure.ac:386: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:386: the top level]) m4trace:configure.ac:387: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:387: the top level]) m4trace:configure.ac:320: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:320: the top level]) m4trace:configure.ac:391: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:391: the top level]) m4trace:configure.ac:436: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:436: the top level]) m4trace:configure.ac:437: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:437: the top level]) m4trace:configure.ac:437: -2- m4_pattern_allow([^BROKEN_PIPE$]) m4trace:configure.ac:438: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:438: the top level]) m4trace:configure.ac:392: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:392: the top level]) m4trace:configure.ac:448: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:448: the top level]) m4trace:configure.ac:503: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:503: the top level]) m4trace:configure.ac:504: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:504: the top level]) m4trace:configure.ac:505: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:505: the top level]) m4trace:configure.ac:449: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:449: the top level]) m4trace:configure.ac:509: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:509: the top level]) m4trace:configure.ac:545: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:545: the top level]) m4trace:configure.ac:546: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:546: the top level]) m4trace:configure.ac:547: -2- m4_pattern_allow([^SOCK_NOT_IN_FS$]) m4trace:configure.ac:548: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:548: the top level]) m4trace:configure.ac:510: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:510: the top level]) m4trace:configure.ac:657: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:657: the top level]) m4trace:configure.ac:658: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:658: the top level]) m4trace:configure.ac:658: -2- m4_pattern_allow([^SELECT_BROKEN$]) m4trace:configure.ac:659: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:659: the top level]) m4trace:configure.ac:559: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:559: the top level]) m4trace:configure.ac:664: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:664: the top level]) m4trace:configure.ac:673: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:673: the top level]) m4trace:configure.ac:685: -3- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:685: the top level]) m4trace:configure.ac:693: -4- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:693: the top level]) m4trace:configure.ac:701: -5- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:701: the top level]) m4trace:configure.ac:709: -6- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:709: the top level]) m4trace:configure.ac:717: -7- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:717: the top level]) m4trace:configure.ac:725: -8- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:725: the top level]) m4trace:configure.ac:726: -8- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:726: the top level]) m4trace:configure.ac:718: -7- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:718: the top level]) m4trace:configure.ac:710: -6- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:710: the top level]) m4trace:configure.ac:702: -5- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:702: the top level]) m4trace:configure.ac:694: -4- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:694: the top level]) m4trace:configure.ac:686: -3- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:686: the top level]) m4trace:configure.ac:674: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:674: the top level]) m4trace:configure.ac:665: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:665: the top level]) m4trace:configure.ac:743: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:743: the top level]) m4trace:configure.ac:744: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:744: the top level]) m4trace:configure.ac:744: -2- m4_pattern_allow([^TERMINFO$]) m4trace:configure.ac:745: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:745: the top level]) m4trace:configure.ac:745: -2- m4_pattern_allow([^TERMINFO$]) m4trace:configure.ac:734: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:734: the top level]) m4trace:configure.ac:746: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:746: the top level]) m4trace:configure.ac:747: -2- m4_pattern_allow([^NEED_OSPEED$]) m4trace:configure.ac:747: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:747: the top level]) m4trace:configure.ac:753: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:753: the top level]) m4trace:configure.ac:755: -1- m4_pattern_allow([^HAVE_DEV_PTC$]) m4trace:configure.ac:760: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:760: the top level]) m4trace:configure.ac:763: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:763: the top level]) m4trace:configure.ac:763: -1- m4_pattern_allow([^HAVE_SVR4_PTYS$]) m4trace:configure.ac:772: -1- m4_pattern_allow([^HAVE_GETPT$]) m4trace:configure.ac:776: -1- m4_pattern_allow([^HAVE_OPENPTY$]) m4trace:configure.ac:776: -1- m4_pattern_allow([^HAVE_OPENPTY$]) m4trace:configure.ac:781: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:781: the top level]) m4trace:configure.ac:801: -1- m4_pattern_allow([^PTYRANGE0$]) m4trace:configure.ac:802: -1- m4_pattern_allow([^PTYRANGE1$]) m4trace:configure.ac:813: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:814: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:817: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:817: the top level]) m4trace:configure.ac:895: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:895: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- m4_pattern_allow([^WRITEPATH$]) m4trace:configure.ac:819: -1- m4_pattern_allow([^XTERMPATH$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:903: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:903: the top level]) m4trace:configure.ac:917: -2- m4_pattern_allow([^GETUTENT$]) m4trace:configure.ac:920: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:920: the top level]) m4trace:configure.ac:934: -3- m4_pattern_allow([^GETUTENT$]) m4trace:configure.ac:921: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:921: the top level]) m4trace:configure.ac:904: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:904: the top level]) m4trace:configure.ac:936: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:936: the top level]) m4trace:configure.ac:946: -2- m4_pattern_allow([^UTHOST$]) m4trace:configure.ac:937: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:937: the top level]) m4trace:configure.ac:949: -1- m4_pattern_allow([^HAVE_UTEMPTER$]) m4trace:configure.ac:957: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:957: the top level]) m4trace:configure.ac:962: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:962: the top level]) m4trace:configure.ac:967: -2- m4_pattern_allow([^LOADAV_GETLOADAVG$]) m4trace:configure.ac:971: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:971: the top level]) m4trace:configure.ac:976: -3- m4_pattern_allow([^LOADAV_GETLOADAVG$]) m4trace:configure.ac:972: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:972: the top level]) m4trace:configure.ac:963: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:963: the top level]) m4trace:configure.ac:988: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:988: the top level]) m4trace:configure.ac:995: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:995: the top level]) m4trace:configure.ac:997: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:997: the top level]) m4trace:configure.ac:999: -1- m4_pattern_allow([^LOADAV_UNIX$]) m4trace:configure.ac:1000: -1- m4_pattern_allow([^NLIST_STRUCT$]) m4trace:configure.ac:1000: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/headers.m4:89: _AC_CHECK_HEADER_COMPILE is expanded from... ./lib/autoconf/headers.m4:56: AC_CHECK_HEADER is expanded from... configure.ac:1000: the top level]) m4trace:configure.ac:1000: -2- m4_pattern_allow([^NLIST_NAME_UNION$]) m4trace:configure.ac:1000: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/headers.m4:89: _AC_CHECK_HEADER_COMPILE is expanded from... ./lib/autoconf/headers.m4:56: AC_CHECK_HEADER is expanded from... configure.ac:1000: the top level]) m4trace:configure.ac:1007: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1007: the top level]) m4trace:configure.ac:1014: -2- m4_pattern_allow([^NLIST_DECLARED$]) m4trace:configure.ac:1016: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1016: the top level]) m4trace:configure.ac:1019: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1019: the top level]) m4trace:configure.ac:1019: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1019: the top level]) m4trace:configure.ac:1056: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1056: the top level]) m4trace:configure.ac:1058: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1058: the top level]) m4trace:configure.ac:1059: -1- m4_pattern_allow([^LOADAV_AVENRUN$]) m4trace:configure.ac:1061: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1061: the top level]) m4trace:configure.ac:1062: -1- m4_pattern_allow([^LOADAV_USE_NLIST64$]) m4trace:configure.ac:1067: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1067: the top level]) m4trace:configure.ac:1068: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1068: the top level]) m4trace:configure.ac:1069: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1069: the top level]) m4trace:configure.ac:1070: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1070: the top level]) m4trace:configure.ac:1071: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1071: the top level]) m4trace:configure.ac:1072: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1072: the top level]) m4trace:configure.ac:1073: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1073: the top level]) m4trace:configure.ac:1078: -1- AC_PROGRAM_SOURCE([ #include #include ], [ #if !defined(LOADAV_GETLOADAVG) && ((defined(hp300) && !defined(__hpux)) || defined(sun) || (defined(ultrix) && defined(mips)) || defined(_SEQUENT_) || defined(sgi) || (defined(SVR4) && !defined(__hpux)) || defined(sony_news) || (!defined(__osf__) && defined(__alpha)) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) || defined(m88k)) loadtype=long # if defined(apollo) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) loadscale=65536 # else # if defined(FSCALE) && !defined(__osf__) # undef FSCALE loadscale=FSCALE # else # ifdef sgi loadtype=int loadscale=1024 # else # if defined(MIPS) || defined(SVR4) || defined(m88k) loadscale=256 # else /* not MIPS */ loadscale=1000 /* our default value */ # endif /* MIPS */ # endif /* sgi */ # endif /* not FSCALE */ # endif /* not apollo */ #else loadtype=double loadscale=1 #endif #ifdef alliant loadnum=4 #else loadnum=3 #endif ]) m4trace:configure.ac:1114: -1- m4_pattern_allow([^LOADAV$]) m4trace:configure.ac:1115: -1- m4_pattern_allow([^LOADAV_TYPE$]) m4trace:configure.ac:1116: -1- m4_pattern_allow([^LOADAV_NUM$]) m4trace:configure.ac:1117: -1- m4_pattern_allow([^LOADAV_SCALE$]) m4trace:configure.ac:1125: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1125: the top level]) m4trace:configure.ac:1126: -1- m4_pattern_allow([^SIGVOID$]) m4trace:configure.ac:1130: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1130: the top level]) m4trace:configure.ac:1137: -2- m4_pattern_allow([^SIGVOID$]) m4trace:configure.ac:1131: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:1131: the top level]) m4trace:configure.ac:1139: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1139: the top level]) m4trace:configure.ac:1149: -2- m4_pattern_allow([^USESIGSET$]) m4trace:configure.ac:1140: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1140: the top level]) m4trace:configure.ac:1151: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1151: the top level]) m4trace:configure.ac:1188: -2- m4_pattern_allow([^SYSVSIGS$]) m4trace:configure.ac:1152: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1152: the top level]) m4trace:configure.ac:1196: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1196: the top level]) m4trace:configure.ac:1202: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1202: the top level]) m4trace:configure.ac:1203: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1203: the top level]) m4trace:configure.ac:1211: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1211: the top level]) m4trace:configure.ac:1212: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1212: the top level]) m4trace:configure.ac:1214: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1214: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- m4_pattern_allow([^NOSYSLOG$]) m4trace:configure.ac:1239: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1239: the top level]) m4trace:configure.ac:1248: -2- m4_pattern_allow([^BSDWAIT$]) m4trace:configure.ac:1240: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:1240: the top level]) m4trace:configure.ac:1251: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1251: the top level]) m4trace:configure.ac:1252: -2- m4_pattern_allow([^TERMIO$]) m4trace:configure.ac:1254: -3- m4_pattern_allow([^TERMIO$]) m4trace:configure.ac:1254: -2- _m4_warn([obsolete], [The macro `AC_TRY_CPP' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2762: AC_TRY_CPP is expanded from... configure.ac:1254: the top level]) m4trace:configure.ac:1252: -1- _m4_warn([obsolete], [The macro `AC_TRY_CPP' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2762: AC_TRY_CPP is expanded from... configure.ac:1252: the top level]) m4trace:configure.ac:1260: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1260: the top level]) m4trace:configure.ac:1265: -2- m4_pattern_allow([^SHADOWPW$]) m4trace:configure.ac:1261: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1261: the top level]) m4trace:configure.ac:1267: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1267: the top level]) m4trace:configure.ac:1272: -2- m4_pattern_allow([^GETTTYENT$]) m4trace:configure.ac:1268: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1268: the top level]) m4trace:configure.ac:1274: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1274: the top level]) m4trace:configure.ac:1279: -2- m4_pattern_allow([^HAVE_FDWALK$]) m4trace:configure.ac:1275: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1275: the top level]) m4trace:configure.ac:1281: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1281: the top level]) m4trace:configure.ac:1299: -2- m4_pattern_allow([^USEBCOPY$]) m4trace:configure.ac:1282: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1282: the top level]) m4trace:configure.ac:1319: -2- m4_pattern_allow([^USEMEMMOVE$]) m4trace:configure.ac:1320: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1320: the top level]) m4trace:configure.ac:1320: -2- m4_pattern_allow([^USEMEMMOVE$]) m4trace:configure.ac:1301: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1301: the top level]) m4trace:configure.ac:1340: -2- m4_pattern_allow([^USEMEMCPY$]) m4trace:configure.ac:1322: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1322: the top level]) m4trace:configure.ac:1342: -1- m4_pattern_allow([^HAVE_LONG_FILE_NAMES$]) m4trace:configure.ac:1350: -2- m4_pattern_allow([^USEVARARGS$]) m4trace:configure.ac:1345: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1345: the top level]) m4trace:configure.ac:1356: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1356: the top level]) m4trace:configure.ac:1363: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1363: the top level]) m4trace:configure.ac:1370: -1- m4_pattern_allow([^USESETENV$]) m4trace:configure.ac:1372: -1- m4_pattern_allow([^HAVE_SETENV_3$]) m4trace:configure.ac:1374: -1- m4_pattern_allow([^HAVE_SETENV_2$]) m4trace:configure.ac:1379: -2- m4_pattern_allow([^NEEDPUTENV$]) m4trace:configure.ac:1379: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1379: the top level]) m4trace:configure.ac:1386: -2- m4_pattern_allow([^HAVE_NL_LANGINFO$]) m4trace:configure.ac:1382: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1382: the top level]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_RENAME$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_FCHMOD$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_FCHOWN$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_STRERROR$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_LSTAT$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE__EXIT$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_UTIMES$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_VSNPRINTF$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_GETCWD$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_SETLOCALE$]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_STRFTIME$]) m4trace:configure.ac:1403: -2- m4_pattern_allow([^USE_PAM$]) m4trace:configure.ac:1397: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1397: the top level]) m4trace:configure.ac:1413: -1- m4_pattern_allow([^USE_LOCALE$]) m4trace:configure.ac:1417: -1- m4_pattern_allow([^BUILTIN_TELNET$]) m4trace:configure.ac:1421: -1- m4_pattern_allow([^COLORS256$]) m4trace:configure.ac:1425: -1- m4_pattern_allow([^RXVT_OSC$]) m4trace:configure.ac:1442: -1- m4_pattern_allow([^ETCSCREENRC$]) m4trace:configure.ac:1444: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) m4trace:configure.ac:1444: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:1444: -1- m4_pattern_allow([^LTLIBOBJS$]) screen-4.9.1/autom4te.cache/output.20000664000175000017500000071066714467014300015721 0ustar alexalex@%:@! /bin/sh @%:@ From configure.ac Revision. @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71. @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='' PACKAGE_TARNAME='' PACKAGE_VERSION='' PACKAGE_STRING='' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="screen.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='LTLIBOBJS LIB@&t@OBJS ETCSCREENRC XTERMPATH WRITEPATH INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM AWK EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ac_prefix_program VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_socket_dir with_socket_dir with_pty_mode with_pty_group enable_pam enable_use_locale enable_telnet enable_colors256 enable_rxvt_osc with_sys_screenrc ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/PACKAGE@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-socket-dir disable system wide socket-dir and use ~/.screen instead --enable-pam enable PAM support --enable-use-locale use localized month/day names (default: yes) --enable-telnet enable builtin telnet --enable-colors256 enable support for 256 colors --enable-rxvt_osc enable support for rxvt OSC codes Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-socket-dir=path where to put the per-user sockets --with-pty-mode=mode default mode for ptys --with-pty-group=group default group for ptys --with-sys-screenrc=path to the global screenrc file Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_try_cpp LINENO @%:@ ---------------------- @%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_cpp @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_c_try_run LINENO @%:@ ---------------------- @%:@ Try to run conftest.@S|@ac_ext, and return whether this succeeded. Assumes that @%:@ executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_run @%:@ ac_fn_c_check_func LINENO FUNC VAR @%:@ ---------------------------------- @%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_func ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" # Auxiliary files required by this configure script. ac_aux_files="install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" rev=`sed < ${srcdir}/patchlevel.h -n -e '/#define REV/s/#define REV *//p'` vers=`sed < ${srcdir}/patchlevel.h -n -e '/#define VERS/s/#define VERS *//p'` pat=`sed < ${srcdir}/patchlevel.h -n -e '/#define PATCHLEVEL/s/#define PATCHLEVEL *//p'` VERSION="$rev.$vers.$pat" echo "this is screen version $VERSION" 1>&6 if test "x$prefix" = xNONE; then printf %s "checking for prefix by " >&6 # Extract the first word of "screen", so it can be a program name with args. set dummy screen; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_prefix_program+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_prefix_program in [\\/]* | ?:[\\/]*) ac_cv_path_ac_prefix_program="$ac_prefix_program" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_prefix_program="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_prefix_program=$ac_cv_path_ac_prefix_program if test -n "$ac_prefix_program"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prefix_program" >&5 printf "%s\n" "$ac_prefix_program" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$ac_prefix_program"; then prefix=`$as_dirname -- "$ac_prefix_program" || $as_expr X"$ac_prefix_program" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_prefix_program" : 'X\(//\)[^/]' \| \ X"$ac_prefix_program" : 'X\(//\)$' \| \ X"$ac_prefix_program" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_prefix_program" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` prefix=`$as_dirname -- "$prefix" || $as_expr X"$prefix" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$prefix" : 'X\(//\)[^/]' \| \ X"$prefix" : 'X\(//\)$' \| \ X"$prefix" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$prefix" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` fi fi if test "x$prefix" = xNONE; then printf %s "checking for prefix by " >&6 # Extract the first word of "gzip", so it can be a program name with args. set dummy gzip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_prefix_program+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_prefix_program in [\\/]* | ?:[\\/]*) ac_cv_path_ac_prefix_program="$ac_prefix_program" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_prefix_program="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_prefix_program=$ac_cv_path_ac_prefix_program if test -n "$ac_prefix_program"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prefix_program" >&5 printf "%s\n" "$ac_prefix_program" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$ac_prefix_program"; then prefix=`$as_dirname -- "$ac_prefix_program" || $as_expr X"$ac_prefix_program" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_prefix_program" : 'X\(//\)[^/]' \| \ X"$ac_prefix_program" : 'X\(//\)$' \| \ X"$ac_prefix_program" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_prefix_program" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` prefix=`$as_dirname -- "$prefix" || $as_expr X"$prefix" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$prefix" : 'X\(//\)[^/]' \| \ X"$prefix" : 'X\(//\)$' \| \ X"$prefix" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$prefix" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` fi fi old_CFLAGS="$CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 printf %s "checking whether $CC needs -traditional... " >&6; } if test ${ac_cv_prog_gcc_traditional+y} then : printf %s "(cached) " >&6 else $as_nop ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1 then : ac_cv_prog_gcc_traditional=yes else $as_nop ac_cv_prog_gcc_traditional=no fi rm -rf conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1 then : ac_cv_prog_gcc_traditional=yes fi rm -rf conftest* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 printf %s "checking for library containing strerror... " >&6; } if test ${ac_cv_search_strerror+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char strerror (); int main (void) { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_strerror+y} then : break fi done if test ${ac_cv_search_strerror+y} then : else $as_nop ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 printf "%s\n" "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else $as_nop ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "@%:@define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "@%:@define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "@%:@define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "@%:@define _MINIX 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_1_SOURCE 2" >>confdefs.h else $as_nop MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "@%:@define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "@%:@define _XOPEN_SOURCE 500" >>confdefs.h fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -f etc/toolcheck; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for buggy tools..." >&5 printf "%s\n" "$as_me: checking for buggy tools..." >&6;} sh etc/toolcheck 1>&6 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if a system-wide socket dir should be used" >&5 printf %s "checking if a system-wide socket dir should be used... " >&6; } @%:@ Check whether --enable-socket-dir was given. if test ${enable_socket_dir+y} then : enableval=$enable_socket_dir; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no. ~/.screen will be used instead." >&5 printf "%s\n" "no. ~/.screen will be used instead." >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the socket dir" >&5 printf %s "checking for the socket dir... " >&6; } SOCKDIR="(eff_uid ? \"/tmp/uscreens\" : \"/tmp/screens\")" @%:@ Check whether --with-socket-dir was given. if test ${with_socket_dir+y} then : withval=$with_socket_dir; case "${withval}" in *\"*) SOCKDIR="${withval}" ;; *) SOCKDIR="\"${withval}\"" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${SOCKDIR}" >&5 printf "%s\n" "${SOCKDIR}" >&6; } printf "%s\n" "@%:@define SOCKDIR $SOCKDIR" >>confdefs.h fi if test "$cross_compiling" = no && test -n "$ISC" ; then printf "%s\n" "@%:@define ISC 1" >>confdefs.h LIBS="$LIBS -linet" fi if test "$cross_compiling" = no && test -f /sysV68 ; then printf "%s\n" "@%:@define sysV68 1" >>confdefs.h fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MIPS..." >&5 printf "%s\n" "$as_me: checking for MIPS..." >&6;} if test -f /lib/libmld.a || test -f /usr/lib/libmld.a || test -f /usr/lib/cmplrs/cc/libmld.a; then oldlibs="$LIBS" test -f /bin/mx || LIBS="$LIBS -lmld" # for nlist. But not on alpha. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking mld library..." >&5 printf "%s\n" "$as_me: checking mld library..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -r /dev/ptc; then printf "%s\n" "@%:@define MIPS 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait3..." >&5 printf "%s\n" "$as_me: checking wait3..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { wait3(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait2..." >&5 printf "%s\n" "$as_me: checking wait2..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { wait2(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define USE_WAIT2 1" >>confdefs.h LIBS="$LIBS -lbsd" ; CC="$CC -I/usr/include/bsd" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Ultrix..." >&5 printf "%s\n" "$as_me: checking for Ultrix..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(ultrix) || defined(__ultrix) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : ULTRIX=1 fi rm -rf conftest* if test "$cross_compiling" = no && test -f /usr/lib/libpyr.a ; then oldlibs="$LIBS" LIBS="$LIBS -lpyr" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Pyramid OSX..." >&5 printf "%s\n" "$as_me: checking Pyramid OSX..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { open_controlling_pty("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define OSX 1" >>confdefs.h else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for butterfly..." >&5 printf "%s\n" "$as_me: checking for butterfly..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(butterfly) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : butterfly=1 fi rm -rf conftest* if test -z "$butterfly"; then if test -n "$ULTRIX"; then test -z "$GCC" && CC="$CC -YBSD" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for POSIX.1..." >&5 printf "%s\n" "$as_me: checking for POSIX.1..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifdef _POSIX_VERSION YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : echo "- you have a POSIX system" 1>&6 printf "%s\n" "@%:@define POSIX 1" >>confdefs.h posix=1 fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for System V..." >&5 printf "%s\n" "$as_me: checking for System V..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { int x = SIGCHLD | FNDELAY; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop printf "%s\n" "@%:@define SYSV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sequent/ptx..." >&5 printf "%s\n" "$as_me: checking for sequent/ptx..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _SEQUENT_ YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -linet";seqptx=1 fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SVR4..." >&5 printf "%s\n" "$as_me: checking SVR4..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if defined(SVR4) || defined(__SVR4) yes; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : echo "- you have a SVR4 system" 1>&6 printf "%s\n" "@%:@define SVR4 1" >>confdefs.h svr4=1 fi rm -rf conftest* if test -n "$svr4" ; then oldlibs="$LIBS" LIBS="$LIBS -lelf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SVR4..." >&5 printf "%s\n" "$as_me: checking SVR4..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_fn_c_check_header_compile "$LINENO" "dwarf.h" "ac_cv_header_dwarf_h" "$ac_includes_default" if test "x$ac_cv_header_dwarf_h" = xyes then : printf "%s\n" "@%:@define BUGGYGETLOGIN 1" >>confdefs.h else $as_nop ac_fn_c_check_header_compile "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default" if test "x$ac_cv_header_elf_h" = xyes then : printf "%s\n" "@%:@define BUGGYGETLOGIN 1" >>confdefs.h fi fi else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$ac_includes_default" if test "x$ac_cv_header_stropts_h" = xyes then : printf "%s\n" "@%:@define HAVE_STROPTS_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "@%:@define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes then : printf "%s\n" "@%:@define HAVE_STRINGS_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris 2.x..." >&5 printf "%s\n" "$as_me: checking for Solaris 2.x..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(SVR4) && defined(sun) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -lnsl -lkstat" fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking BSD job jontrol..." >&5 printf "%s\n" "$as_me: checking BSD job jontrol..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { #ifdef POSIX tcsetpgrp(0, 0); #else int x = TIOCSPGRP; #ifdef SYSV setpgrp(); #else int y = TIOCNOTTY; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : echo "- you have jobcontrol" 1>&6 printf "%s\n" "@%:@define BSDJOBS 1" >>confdefs.h else $as_nop echo "- you don't have jobcontrol" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking setresuid..." >&5 printf "%s\n" "$as_me: checking setresuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setresuid(0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETRESUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking setreuid..." >&5 printf "%s\n" "$as_me: checking setreuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setreuid(0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETREUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking seteuid..." >&5 printf "%s\n" "$as_me: checking seteuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { #if defined(linux) || defined(NeXT) || defined(_AUX_SOURCE) || defined(AUX) || defined(ultrix) || (defined(sun) && defined(SVR4)) || defined(ISC) || defined(sony_news) int seteuid_is_broken(int); seteuid_is_broken(0); #else seteuid(0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETEUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking execvpe..." >&5 printf "%s\n" "$as_me: checking execvpe..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { execvpe(0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_EXECVPE 1" >>confdefs.h CFLAGS="$CFLAGS -D_GNU_SOURCE" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking select..." >&5 printf "%s\n" "$as_me: checking select..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$LIBS -lnet -lnsl" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking select with $LIBS..." >&5 printf "%s\n" "$as_me: checking select with $LIBS..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop as_fn_error $? "!!! no select - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking fifos..." >&5 printf "%s\n" "$as_me: checking fifos..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming fifos are usable" 1>&6 fifo=1 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif char *fin = "/tmp/conftest$$"; int main() { struct stat stb; fd_set f; (void)alarm(5); unlink(fin); #ifdef POSIX if (mkfifo(fin, 0777)) #else if (mknod(fin, S_IFIFO|0777, 0)) #endif return 1; if (stat(fin, &stb) || (stb.st_mode & S_IFIFO) != S_IFIFO) return 1; close(0); #ifdef __386BSD__ /* * The next test fails under 386BSD, but screen works using fifos. * Fifos in O_RDWR mode are only used for the BROKEN_PIPE case and for * the select() configuration test. */ return 0; #endif if (open(fin, O_RDONLY | O_NONBLOCK)) return 1; if (fork() == 0) { close(0); if (open(fin, O_WRONLY | O_NONBLOCK)) return 1; close(0); if (open(fin, O_WRONLY | O_NONBLOCK)) return 1; if (write(0, "TEST", 4) == -1) return 1; return 0; } FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your fifos are usable" 1>&6 fifo=1 else $as_nop echo "- your fifos are not usable" 1>&6 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* if test -n "$fifo"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken fifo implementation..." >&5 printf "%s\n" "$as_me: checking for broken fifo implementation..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming fifo implementation is ok" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif char *fin = "/tmp/conftest$$"; int main() { struct timeval tv; fd_set f; #ifdef POSIX if (mkfifo(fin, 0600)) #else if (mknod(fin, S_IFIFO|0600, 0)) #endif return 1; close(0); if (open(fin, O_RDONLY|O_NONBLOCK)) return 1; FD_SET(0, &f); tv.tv_sec = 1; tv.tv_usec = 0; if (select(1, &f, 0, 0, &tv)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your implementation is ok" 1>&6 else $as_nop echo "- you have a broken implementation" 1>&6 printf "%s\n" "@%:@define BROKEN_PIPE 1" >>confdefs.h fifobr=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking sockets..." >&5 printf "%s\n" "$as_me: checking sockets..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming sockets are usable" 1>&6 sock=1 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #include #include #include #include char *son = "/tmp/conftest$$"; int main() { int s1, s2, l; struct sockaddr_un a; fd_set f; (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 1; a.sun_family = AF_UNIX; strcpy(a.sun_path, son); (void) unlink(son); if (bind(s1, (struct sockaddr *) &a, strlen(son)+2) == -1) return 1; if (listen(s1, 2)) return 1; if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(son) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); return 0; } l = sizeof(a); close(0); if (accept(s1, &a, &l)) return 1; FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your sockets are usable" 1>&6 sock=1 else $as_nop echo "- your sockets are not usable" 1>&6 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* if test -n "$sock"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking socket implementation..." >&5 printf "%s\n" "$as_me: checking socket implementation..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming sockets are normal" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #include #include char *son = "/tmp/conftest$$"; int main() { int s; struct stat stb; struct sockaddr_un a; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 0; a.sun_family = AF_UNIX; strcpy(a.sun_path, son); (void) unlink(son); if (bind(s, (struct sockaddr *) &a, strlen(son)+2) == -1) return 0; if (stat(son, &stb)) return 1; close(s); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- you are normal" 1>&6 else $as_nop echo "- unix domain sockets are not kept in the filesystem" 1>&6 printf "%s\n" "@%:@define SOCK_NOT_IN_FS 1" >>confdefs.h socknofs=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* fi if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming select is ok" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include char *nam = "/tmp/conftest$$"; #ifdef NAMEDPIPE #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif int main() { fd_set f; #ifdef __FreeBSD__ /* From Andrew A. Chernov (ache@astral.msk.su): * opening RDWR fifo fails in BSD 4.4, but select return values are * right. */ return 0; #endif (void)alarm(5); #ifdef POSIX if (mkfifo(nam, 0777)) #else if (mknod(nam, S_IFIFO|0777, 0)) #endif return 1; close(0); if (open(nam, O_RDWR | O_NONBLOCK)) return 1; if (write(0, "TEST", 4) == -1) return 1; #else #include #include #include #include #include #include int main() { int s1, s2, l; struct sockaddr_un a; fd_set f; (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 1; a.sun_family = AF_UNIX; strcpy(a.sun_path, nam); (void) unlink(nam); if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) return 1; if (listen(s1, 2)) return 1; if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); return 0; } l = sizeof(a); close(0); if (accept(s1, (struct sockaddr *)&a, &l)) return 1; #endif FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; if (select(1, &f, &f, 0, 0) != 2) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- select is ok" 1>&6 else $as_nop echo "- select can not count" 1>&6 printf "%s\n" "@%:@define SELECT_BROKEN 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent..." >&5 printf "%s\n" "$as_me: checking for tgetent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop olibs="$LIBS" LIBS="-lcurses $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libcurses..." >&5 printf "%s\n" "$as_me: checking libcurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #ifdef __hpux __sorry_hpux_libcurses_is_totally_broken_in_10_10(); #else tgetent((char *)0, (char *)0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltermcap $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtermcap..." >&5 printf "%s\n" "$as_me: checking libtermcap..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltermlib $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtermlib..." >&5 printf "%s\n" "$as_me: checking libtermlib..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-lncursesw $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libncursesw..." >&5 printf "%s\n" "$as_me: checking libncursesw..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltinfow $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtinfow..." >&5 printf "%s\n" "$as_me: checking libtinfow..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-lncurses $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libncurses..." >&5 printf "%s\n" "$as_me: checking libncurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltinfo $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtinfo..." >&5 printf "%s\n" "$as_me: checking libtinfo..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop as_fn_error $? "!!! no tgetent - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming terminfo database is used" 1>&6 printf "%s\n" "@%:@define TERMINFO 1" >>confdefs.h else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { return(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- you use the termcap database" 1>&6 else $as_nop echo "- you use the terminfo database" 1>&6 printf "%s\n" "@%:@define TERMINFO 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ospeed..." >&5 printf "%s\n" "$as_me: checking ospeed..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern short ospeed; int main (void) { ospeed=5; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop printf "%s\n" "@%:@define NEED_OSPEED 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc..." >&5 printf "%s\n" "$as_me: checking for /dev/ptc..." >&6;} if test -r /dev/ptc; then printf "%s\n" "@%:@define HAVE_DEV_PTC 1" >>confdefs.h fi fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SVR4 ptys..." >&5 printf "%s\n" "$as_me: checking for SVR4 ptys..." >&6;} sysvr4ptys= if test -c /dev/ptmx ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { ptsname(0);grantpt(0);unlockpt(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SVR4_PTYS 1" >>confdefs.h sysvr4ptys=1 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi ac_fn_c_check_func "$LINENO" "getpt" "ac_cv_func_getpt" if test "x$ac_cv_func_getpt" = xyes then : printf "%s\n" "@%:@define HAVE_GETPT 1" >>confdefs.h fi if test -z "$sysvr4ptys"; then for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" if test "x$ac_cv_func_openpty" = xyes then : printf "%s\n" "@%:@define HAVE_OPENPTY 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 printf %s "checking for openpty in -lutil... " >&6; } if test ${ac_cv_lib_util_openpty+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char openpty (); int main (void) { return openpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_util_openpty=yes else $as_nop ac_cv_lib_util_openpty=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 printf "%s\n" "$ac_cv_lib_util_openpty" >&6; } if test "x$ac_cv_lib_util_openpty" = xyes then : printf "%s\n" "@%:@define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" fi fi done fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ptyranges..." >&5 printf "%s\n" "$as_me: checking for ptyranges..." >&6;} if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : ptys=`echo /dev/ptyp??` else $as_nop ptys=`echo $pdir/pty??` fi rm -rf conftest* if test "$ptys" != "$pdir/pty??" ; then p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'` p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'` printf "%s\n" "@%:@define PTYRANGE0 \"$p0\"" >>confdefs.h printf "%s\n" "@%:@define PTYRANGE1 \"$p1\"" >>confdefs.h fi fi @%:@ Check whether --with-pty-mode was given. if test ${with_pty_mode+y} then : withval=$with_pty_mode; ptymode="${withval}" fi @%:@ Check whether --with-pty-group was given. if test ${with_pty_group+y} then : withval=$with_pty_group; ptygrp="${withval}" fi test -n "$ptymode" || ptymode=0620 if test -n "$ptygrp" ; then printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking default tty permissions/group..." >&5 printf "%s\n" "$as_me: checking default tty permissions/group..." >&6;} rm -f conftest_grp if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming ptys are world accessable" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include int main() { struct stat sb; char *x,*ttyname(); int om, m; FILE *fp; if (!(x = ttyname(0))) return 1; if (stat(x, &sb)) return 1; om = sb.st_mode; if (om & 002) return 0; m = system("mesg y"); if (m == -1 || m == 127) return 1; if (stat(x, &sb)) return 1; m = sb.st_mode; if (chmod(x, om)) return 1; if (m & 002) return 0; if (sb.st_gid == getgid()) return 1; if (!(fp=fopen("conftest_grp", "w"))) return 1; fprintf(fp, "%d\n", sb.st_gid); fclose(fp); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : if test -f conftest_grp; then ptygrp=`cat conftest_grp` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else echo "- ptys are world accessable" 1>&6 fi else $as_nop WRITEPATH='' XTERMPATH='' # Extract the first word of "write", so it can be a program name with args. set dummy write; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_WRITEPATH+y} then : printf %s "(cached) " >&6 else $as_nop case $WRITEPATH in [\\/]* | ?:[\\/]*) ac_cv_path_WRITEPATH="$WRITEPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_WRITEPATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi WRITEPATH=$ac_cv_path_WRITEPATH if test -n "$WRITEPATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WRITEPATH" >&5 printf "%s\n" "$WRITEPATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "xterm", so it can be a program name with args. set dummy xterm; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_XTERMPATH+y} then : printf %s "(cached) " >&6 else $as_nop case $XTERMPATH in [\\/]* | ?:[\\/]*) ac_cv_path_XTERMPATH="$XTERMPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_XTERMPATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XTERMPATH=$ac_cv_path_XTERMPATH if test -n "$XTERMPATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XTERMPATH" >&5 printf "%s\n" "$XTERMPATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi found= if test -n "$WRITEPATH$XTERMPATH"; then findfollow= lsfollow= found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null` if test -n "$found"; then findfollow=-follow lsfollow=L fi if test -n "$XTERMPATH"; then ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'` if test tty != "$ptygrpn"; then XTERMPATH= fi fi fi if test -n "$WRITEPATH$XTERMPATH"; then found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` if test -n "$found"; then ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else echo "- ptys are world accessable" 1>&6 fi else echo "- can not determine - assume ptys are world accessable" 1>&6 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest_grp fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getutent..." >&5 printf "%s\n" "$as_me: checking getutent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* to get time_t on SCO */ #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif #ifdef __hpux #define pututline _pututline #endif int main (void) { int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETUTENT 1" >>confdefs.h else $as_nop olibs="$LIBS" LIBS="$LIBS -lgen" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getutent with -lgen..." >&5 printf "%s\n" "$as_me: checking getutent with -lgen..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif #ifdef __hpux #define pututline _pututline #endif int main (void) { int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETUTENT 1" >>confdefs.h else $as_nop LIBS="$olibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ut_host..." >&5 printf "%s\n" "$as_me: checking ut_host..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif int main (void) { struct utmp u; u.ut_host[0] = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define UTHOST 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_fn_c_check_header_compile "$LINENO" "utempter.h" "ac_cv_header_utempter_h" "$ac_includes_default" if test "x$ac_cv_header_utempter_h" = xyes then : have_utempter=yes else $as_nop have_utempter=no fi if test "$have_utempter" = yes; then printf "%s\n" "@%:@define HAVE_UTEMPTER 1" >>confdefs.h LIBS="$LIBS -lutempter" fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libutil(s)..." >&5 printf "%s\n" "$as_me: checking for libutil(s)..." >&6;} test -f /usr/lib/libutils.a && LIBS="$LIBS -lutils" test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getloadavg..." >&5 printf "%s\n" "$as_me: checking getloadavg..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getloadavg((double *)0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define LOADAV_GETLOADAVG 1" >>confdefs.h load=1 else $as_nop if test "$cross_compiling" = no && test -f /usr/lib/libkvm.a ; then olibs="$LIBS" LIBS="$LIBS -lkvm" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getloadavg with -lkvm..." >&5 printf "%s\n" "$as_me: checking getloadavg with -lkvm..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getloadavg((double *)0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define LOADAV_GETLOADAVG 1" >>confdefs.h load=1 else $as_nop LIBS="$olibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$load" ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(NeXT) || defined(apollo) || defined(linux) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : load=1 fi rm -rf conftest* fi if test -z "$load" && test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kernelfile..." >&5 printf "%s\n" "$as_me: checking for kernelfile..." >&6;} for core in /unix /vmunix /dynix /hp-ux /xelos /dev/ksyms /kernel/unix /kernel/genunix /unicos /mach /netbsd /386bsd /dgux /bsd /stand/vmunix; do if test -f $core || test -c $core; then break fi done if test ! -f $core && test ! -c $core ; then echo "- no kernelfile found" 1>&6 else echo "- using kernelfile '$core'" 1>&6 if test -r $core ; then printf "%s\n" "@%:@define LOADAV_UNIX \"$core\"" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "nlist.h" "ac_cv_header_nlist_h" "$ac_includes_default" if test "x$ac_cv_header_nlist_h" = xyes then : printf "%s\n" "@%:@define NLIST_STRUCT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking n_un in struct nlist..." >&5 printf "%s\n" "$as_me: checking n_un in struct nlist..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { struct nlist n; n.n_un.n_name = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define NLIST_NAME_UNION 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nlist declaration..." >&5 printf "%s\n" "$as_me: checking for nlist declaration..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef NLIST_STRUCT # include #else # include #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "nlist(( | )( | )*.*\(|\()" >/dev/null 2>&1 then : printf "%s\n" "@%:@define NLIST_DECLARED 1" >>confdefs.h fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for avenrun symbol..." >&5 printf "%s\n" "$as_me: checking for avenrun symbol..." >&6;} nlist64= for av in avenrun _avenrun _Loadavg avenrun _avenrun _Loadavg; do if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef NLIST_STRUCT #include #else #include #endif $nlist64 struct nlist nl[2]; int main() { #if !defined(_AUX_SOURCE) && !defined(AUX) # ifdef NLIST_NAME_UNION nl[0].n_un.n_name = "$av"; # else nl[0].n_name = "$av"; # endif #else strncpy(nl[0].n_name, "$av", sizeof(nl[0].n_name)); #endif nlist(LOADAV_UNIX, nl); if (nl[0].n_value == 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : avensym=$av;break fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$av" = _Loadavg; then nlist64='#define nlist nlist64' fi done if test -z "$avensym" ; then echo "- no avenrun symbol found" 1>&6 else echo "- using avenrun symbol '$avensym'" 1>&6 printf "%s\n" "@%:@define LOADAV_AVENRUN \"$avensym\"" >>confdefs.h if test -n "$nlist64"; then echo "- used nlist64 to find it" 1>&6 printf "%s\n" "@%:@define LOADAV_USE_NLIST64 1" >>confdefs.h fi load=1 fi else echo "Can't configure the load average display feature" 1>&6 echo "because $core is not readable by you." 1>&6 echo "To configure the load average display feature" 1>&6 echo "re-run configure as root if possible." 1>&6 echo "If you are not the system administrator then disregard" 1>&6 echo "this warning. You can still use screen without" 1>&6 echo "the load average display feature." 1>&6 fi fi fi cat > conftest.c < #include _CUT_HERE_ #if !defined(LOADAV_GETLOADAVG) && ((defined(hp300) && !defined(__hpux)) || defined(sun) || (defined(ultrix) && defined(mips)) || defined(_SEQUENT_) || defined(sgi) || (defined(SVR4) && !defined(__hpux)) || defined(sony_news) || (!defined(__osf__) && defined(__alpha)) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) || defined(m88k)) loadtype=long # if defined(apollo) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) loadscale=65536 # else # if defined(FSCALE) && !defined(__osf__) # undef FSCALE loadscale=FSCALE # else # ifdef sgi loadtype=int loadscale=1024 # else # if defined(MIPS) || defined(SVR4) || defined(m88k) loadscale=256 # else /* not MIPS */ loadscale=1000 /* our default value */ # endif /* MIPS */ # endif /* sgi */ # endif /* not FSCALE */ # endif /* not apollo */ #else loadtype=double loadscale=1 #endif #ifdef alliant loadnum=4 #else loadnum=3 #endif EOF eval "$ac_cpp conftest.c 2>&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out" . ./conftest.out rm -f conftest* if test -n "$load" ; then printf "%s\n" "@%:@define LOADAV 1" >>confdefs.h fi if test -n "$loadtype" ; then printf "%s\n" "@%:@define LOADAV_TYPE $loadtype" >>confdefs.h fi if test -n "$loadnum" ; then printf "%s\n" "@%:@define LOADAV_NUM $loadnum" >>confdefs.h fi if test -n "$loadscale" ; then printf "%s\n" "@%:@define LOADAV_SCALE $loadscale" >>confdefs.h fi if test -n "$posix" ; then echo "assuming posix signal definition" 1>&6 printf "%s\n" "@%:@define SIGVOID 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers..." >&5 printf "%s\n" "$as_me: checking return type of signal handlers..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef signal #undef signal #endif extern void (*signal ()) (); int main (void) { int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define SIGVOID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking sigset..." >&5 printf "%s\n" "$as_me: checking sigset..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #ifdef SIGVOID sigset(0, (void (*)())0); #else sigset(0, (int (*)())0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define USESIGSET 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking signal implementation..." >&5 printf "%s\n" "$as_me: checking signal implementation..." >&6;} if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifdef USESIGSET #define signal sigset #endif int got; #ifdef SIGVOID void #endif hand() { got++; } int main() { /* on hpux we use sigvec to get bsd signals */ #ifdef __hpux (void)signal(SIGCLD, hand); kill(getpid(), SIGCLD); kill(getpid(), SIGCLD); if (got < 2) return 1; #endif return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : else $as_nop printf "%s\n" "@%:@define SYSVSIGS 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for crypt and sec libraries..." >&5 printf "%s\n" "$as_me: checking for crypt and sec libraries..." >&6;} if test "$cross_compiling" = no ; then test -f /lib/libcrypt_d.a || test -f /usr/lib/libcrypt_d.a && LIBS="$LIBS -lcrypt_d" fi oldlibs="$LIBS" LIBS="$LIBS -lcrypt" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking crypt..." >&5 printf "%s\n" "$as_me: checking crypt..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = no ; then test -f /lib/libsec.a || test -f /usr/lib/libsec.a && LIBS="$LIBS -lsec" test -f /lib/libshadow.a || test -f /usr/lib/libshadow.a && LIBS="$LIBS -lshadow" fi oldlibs="$LIBS" LIBS="$LIBS -lsun" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking IRIX sun library..." >&5 printf "%s\n" "$as_me: checking IRIX sun library..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking syslog..." >&5 printf "%s\n" "$as_me: checking syslog..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { closelog(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop oldlibs="$LIBS" LIBS="$LIBS -lbsd" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking syslog in libbsd.a..." >&5 printf "%s\n" "$as_me: checking syslog in libbsd.a..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { closelog(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : echo "- found." 1>&6 else $as_nop LIBS="$oldlibs" echo "- bad news: syslog missing." 1>&6 printf "%s\n" "@%:@define NOSYSLOG 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -lcrypt_i" fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait union..." >&5 printf "%s\n" "$as_me: checking wait union..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { union wait x; int y; #ifdef WEXITSTATUS y = WEXITSTATUS(x); #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define BSDWAIT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test -z "$butterfly"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for termio or termios..." >&5 printf "%s\n" "$as_me: checking for termio or termios..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : printf "%s\n" "@%:@define TERMIO 1" >>confdefs.h else $as_nop if test -n "$posix"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : printf "%s\n" "@%:@define TERMIO 1" >>confdefs.h fi rm -f conftest.err conftest.i conftest.$ac_ext fi fi rm -f conftest.err conftest.i conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getspnam..." >&5 printf "%s\n" "$as_me: checking getspnam..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getspnam("x"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define SHADOWPW 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getttyent..." >&5 printf "%s\n" "$as_me: checking getttyent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getttyent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETTTYENT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking fdwalk..." >&5 printf "%s\n" "$as_me: checking fdwalk..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { fdwalk(NULL, NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_FDWALK 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether memcpy/memmove/bcopy handles overlapping arguments..." >&5 printf "%s\n" "$as_me: checking whether memcpy/memmove/bcopy handles overlapping arguments..." >&6;} if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEBCOPY 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; use memmove" 1>&6 printf "%s\n" "@%:@define USEMEMMOVE 1" >>confdefs.h else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define bcopy(s,d,l) memmove(d,s,l) int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEMEMMOVE 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define bcopy(s,d,l) memcpy(d,s,l) int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEMEMCPY 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long file names" >&5 printf %s "checking for long file names... " >&6; } if test ${ac_cv_sys_long_file_names+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: # . the current directory, where building will happen # $prefix/lib where we will be installing things # $exec_prefix/lib likewise # $TMPDIR if set, where it might want to write temporary files # /tmp where it might want to write temporary files # /var/tmp likewise # /usr/tmp likewise for ac_dir in . "$TMPDIR" /tmp /var/tmp /usr/tmp "$prefix/lib" "$exec_prefix/lib"; do # Skip $TMPDIR if it is empty or bogus, and skip $exec_prefix/lib # in the usual case where exec_prefix is '${prefix}'. case $ac_dir in #( . | /* | ?:[\\/]*) ;; #( *) continue;; esac test -w "$ac_dir/." || continue # It is less confusing to not echo anything here. ac_xdir=$ac_dir/cf$$ (umask 077 && mkdir "$ac_xdir" 2>/dev/null) || continue ac_tf1=$ac_xdir/conftest9012345 ac_tf2=$ac_xdir/conftest9012346 touch "$ac_tf1" 2>/dev/null && test -f "$ac_tf1" && test ! -f "$ac_tf2" || ac_cv_sys_long_file_names=no rm -f -r "$ac_xdir" 2>/dev/null test $ac_cv_sys_long_file_names = no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_long_file_names" >&5 printf "%s\n" "$ac_cv_sys_long_file_names" >&6; } if test $ac_cv_sys_long_file_names = yes; then printf "%s\n" "@%:@define HAVE_LONG_FILE_NAMES 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for vsprintf" >&5 printf %s "checking for vsprintf... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { va_list valist; vsprintf(0,0,valist); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define USEVARARGS 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main (void) { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_ac_Header=yes" else $as_nop eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF @%:@define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setenv" >&5 printf %s "checking for setenv... " >&6; } if test -z "$ac_setenv_args"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setenv((char *) 0, (char *) 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_setenv_args=3 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi if test -z "$ac_setenv_args"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setenv((char *) 0, (char *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_setenv_args=2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi if test -n "$ac_setenv_args"; then printf "%s\n" "@%:@define USESETENV 1" >>confdefs.h if test "$ac_setenv_args" = 3; then printf "%s\n" "@%:@define HAVE_SETENV_3 1" >>confdefs.h elif test "$ac_setenv_args" = 2; then printf "%s\n" "@%:@define HAVE_SETENV_2 1" >>confdefs.h fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for putenv" >&5 printf %s "checking for putenv... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { putenv((char *)0);unsetenv((char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; };printf "%s\n" "@%:@define NEEDPUTENV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo(CODESET)" >&5 printf %s "checking for nl_langinfo(CODESET)... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define HAVE_NL_LANGINFO 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gethostname" >&5 printf %s "checking for library containing gethostname... " >&6; } if test ${ac_cv_search_gethostname+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gethostname (); int main (void) { return gethostname (); ; return 0; } _ACEOF for ac_lib in '' nsl do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gethostname=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gethostname+y} then : break fi done if test ${ac_cv_search_gethostname+y} then : else $as_nop ac_cv_search_gethostname=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostname" >&5 printf "%s\n" "$ac_cv_search_gethostname" >&6; } ac_res=$ac_cv_search_gethostname if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename" if test "x$ac_cv_func_rename" = xyes then : printf "%s\n" "@%:@define HAVE_RENAME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod" if test "x$ac_cv_func_fchmod" = xyes then : printf "%s\n" "@%:@define HAVE_FCHMOD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown" if test "x$ac_cv_func_fchown" = xyes then : printf "%s\n" "@%:@define HAVE_FCHOWN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : printf "%s\n" "@%:@define HAVE_STRERROR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" if test "x$ac_cv_func_lstat" = xyes then : printf "%s\n" "@%:@define HAVE_LSTAT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "_exit" "ac_cv_func__exit" if test "x$ac_cv_func__exit" = xyes then : printf "%s\n" "@%:@define HAVE__EXIT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" if test "x$ac_cv_func_utimes" = xyes then : printf "%s\n" "@%:@define HAVE_UTIMES 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = xyes then : printf "%s\n" "@%:@define HAVE_VSNPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" if test "x$ac_cv_func_getcwd" = xyes then : printf "%s\n" "@%:@define HAVE_GETCWD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes then : printf "%s\n" "@%:@define HAVE_SETLOCALE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = xyes then : printf "%s\n" "@%:@define HAVE_STRFTIME 1" >>confdefs.h fi @%:@ Check whether --enable-pam was given. if test ${enable_pam+y} then : enableval=$enable_pam; fi if test "$enable_pam" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PAM support" >&5 printf %s "checking for PAM support... " >&6; } oldlibs="$LIBS" LIBS="$LIBS -lpam" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { pam_start(0, 0, 0, 0); pam_authenticate(0, 0); pam_end(0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define USE_PAM 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; };LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi @%:@ Check whether --enable-use-locale was given. if test ${enable_use_locale+y} then : enableval=$enable_use_locale; else $as_nop enable_use_locale=yes fi if test "$enable_use_locale" = "yes"; then printf "%s\n" "@%:@define USE_LOCALE 1" >>confdefs.h fi @%:@ Check whether --enable-telnet was given. if test ${enable_telnet+y} then : enableval=$enable_telnet; fi if test "$enable_telnet" = "yes"; then printf "%s\n" "@%:@define BUILTIN_TELNET 1" >>confdefs.h fi @%:@ Check whether --enable-colors256 was given. if test ${enable_colors256+y} then : enableval=$enable_colors256; fi if test "$enable_colors256" = "yes"; then printf "%s\n" "@%:@define COLORS256 1" >>confdefs.h fi @%:@ Check whether --enable-rxvt_osc was given. if test ${enable_rxvt_osc+y} then : enableval=$enable_rxvt_osc; fi if test "$enable_rxvt_osc" = "yes"; then printf "%s\n" "@%:@define RXVT_OSC 1" >>confdefs.h fi if test -z "$old_CFLAGS"; then if test "x$CFLAGS" = "x-g"; then CFLAGS="-O" fi fi test -n "$seqptx" && LIBS="-ltermcap -lc -lsocket -linet -lnsl -lsec -lseq" ETCSCREENRC= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the global screenrc file" >&5 printf %s "checking for the global screenrc file... " >&6; } @%:@ Check whether --with-sys-screenrc was given. if test ${with_sys_screenrc+y} then : withval=$with_sys_screenrc; ETCSCREENRC="${withval}" fi ac_config_files="$ac_config_files Makefile doc/Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default":C) # a hook for preserving undef directive in config.h mv config.h conftest sed -e 's@^\(.*\)defin.\( .*\) .*/\*\(.*KEEP_UNDEF_HERE\)@\1undef\2 /\*\3@' < conftest > config.h rm -f conftest ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" if test -z "$AWK"; then echo "!!! Since you have no awk you must copy the files 'comm.h.dist'" echo "!!! and 'term.h.dist' to 'comm.h' and 'term.h'." echo "!!! Do _not_ change the user configuration section in config.h!" echo "Please check the pathnames in the Makefile." else echo "Now please check the pathnames in the Makefile and in the user" echo "configuration section in config.h." fi echo "Then type 'make' to make screen. Good luck." echo "" screen-4.9.1/autom4te.cache/traces.10000664000175000017500000023322314467014300015625 0ustar alexalexm4trace:configure.ac:9: -1- AC_INIT([screen.c]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:9: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:9: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:9: -1- AC_SUBST([SHELL]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:9: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:9: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:9: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:9: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:9: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:9: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:9: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:9: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:9: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:9: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:9: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:9: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:9: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:9: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:9: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:9: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:9: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:9: -1- AC_SUBST([runstatedir], ['${localstatedir}/run']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([runstatedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:9: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:9: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:9: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:9: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:9: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:9: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:9: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:9: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:9: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:9: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:9: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:9: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:9: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:9: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:9: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:9: -1- AC_SUBST([DEFS]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:9: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:9: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:9: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:9: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:9: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:9: -1- AC_SUBST([LIBS]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:9: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:9: -1- AC_SUBST([build_alias]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:9: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:9: -1- AC_SUBST([host_alias]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:9: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:9: -1- AC_SUBST([target_alias]) m4trace:configure.ac:9: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:9: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:10: -1- _m4_warn([obsolete], [The macro `AC_CONFIG_HEADER' is obsolete. You should run autoupdate.], [./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from... configure.ac:10: the top level]) m4trace:configure.ac:10: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.ac:39: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:39: the top level]) m4trace:configure.ac:40: -1- AC_SUBST([VERSION]) m4trace:configure.ac:40: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:40: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:41: -1- AC_SUBST([ac_prefix_program]) m4trace:configure.ac:41: -1- AC_SUBST_TRACE([ac_prefix_program]) m4trace:configure.ac:41: -1- m4_pattern_allow([^ac_prefix_program$]) m4trace:configure.ac:42: -1- AC_SUBST([ac_prefix_program]) m4trace:configure.ac:42: -1- AC_SUBST_TRACE([ac_prefix_program]) m4trace:configure.ac:42: -1- m4_pattern_allow([^ac_prefix_program$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:45: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:45: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:45: -1- AC_SUBST([LIBS]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:45: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:45: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:45: -1- AC_SUBST([CC]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:45: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:45: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.ac:45: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:45: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.ac:45: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.ac:45: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:46: -1- AC_SUBST([CPP]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPP$]) m4trace:configure.ac:46: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:46: -1- AC_SUBST([CPP]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.ac:46: -1- m4_pattern_allow([^CPP$]) m4trace:configure.ac:47: -1- AC_SUBST([GREP]) m4trace:configure.ac:47: -1- AC_SUBST_TRACE([GREP]) m4trace:configure.ac:47: -1- m4_pattern_allow([^GREP$]) m4trace:configure.ac:47: -1- AC_SUBST([EGREP]) m4trace:configure.ac:47: -1- AC_SUBST_TRACE([EGREP]) m4trace:configure.ac:47: -1- m4_pattern_allow([^EGREP$]) m4trace:configure.ac:48: -1- _m4_warn([obsolete], [The macro `AC_ISC_POSIX' is obsolete. You should run autoupdate.], [./lib/autoconf/specific.m4:550: AC_ISC_POSIX is expanded from... configure.ac:48: the top level]) m4trace:configure.ac:49: -1- _m4_warn([syntax], [AC_LINK_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS], [./lib/autoconf/specific.m4:364: AC_USE_SYSTEM_EXTENSIONS is expanded from... configure.ac:49: the top level]) m4trace:configure.ac:49: -1- AH_OUTPUT([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers\' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif ]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDIO_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:configure.ac:49: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.ac:49: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ @%:@undef STDC_HEADERS]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_WCHAR_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_WCHAR_H]) m4trace:configure.ac:49: -1- AH_OUTPUT([HAVE_MINIX_CONFIG_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_MINIX_CONFIG_H]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_ALL_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_ALL_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_DARWIN_C_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_DARWIN_C_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_GNU_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_GNU_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_HPUX_ALT_XOPEN_SOCKET_API]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_HPUX_ALT_XOPEN_SOCKET_API$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_NETBSD_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_NETBSD_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_OPENBSD_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_OPENBSD_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_PTHREAD_SEMANTICS]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_PTHREAD_SEMANTICS$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_ATTRIBS_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_BFP_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_BFP_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_DFP_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_DFP_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_FUNCS_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_FUNCS_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_IEC_60559_TYPES_EXT__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_IEC_60559_TYPES_EXT__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_LIB_EXT2__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_LIB_EXT2__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__STDC_WANT_MATH_SPEC_FUNCS__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__STDC_WANT_MATH_SPEC_FUNCS__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_TANDEM_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_TANDEM_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_MINIX]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_MINIX$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_1_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_POSIX_1_SOURCE$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([__EXTENSIONS__]) m4trace:configure.ac:49: -1- m4_pattern_allow([^__EXTENSIONS__$]) m4trace:configure.ac:49: -1- AC_DEFINE_TRACE_LITERAL([_XOPEN_SOURCE]) m4trace:configure.ac:49: -1- m4_pattern_allow([^_XOPEN_SOURCE$]) m4trace:configure.ac:51: -1- AC_SUBST([AWK]) m4trace:configure.ac:51: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:51: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:53: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:53: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:53: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:53: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:53: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:53: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:53: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:53: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:56: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:56: the top level]) m4trace:configure.ac:57: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:57: the top level]) m4trace:configure.ac:64: -1- AC_DEFINE_TRACE_LITERAL([SOCKDIR]) m4trace:configure.ac:64: -1- m4_pattern_allow([^SOCKDIR$]) m4trace:configure.ac:89: -1- AC_DEFINE_TRACE_LITERAL([ISC]) m4trace:configure.ac:89: -1- m4_pattern_allow([^ISC$]) m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([sysV68]) m4trace:configure.ac:100: -1- m4_pattern_allow([^sysV68$]) m4trace:configure.ac:104: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:104: the top level]) m4trace:configure.ac:109: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:109: the top level]) m4trace:configure.ac:110: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:110: the top level]) m4trace:configure.ac:114: -1- AC_DEFINE_TRACE_LITERAL([MIPS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^MIPS$]) m4trace:configure.ac:115: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:115: the top level]) m4trace:configure.ac:117: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:117: the top level]) m4trace:configure.ac:123: -3- AC_DEFINE_TRACE_LITERAL([USE_WAIT2]) m4trace:configure.ac:123: -3- m4_pattern_allow([^USE_WAIT2$]) m4trace:configure.ac:118: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:118: the top level]) m4trace:configure.ac:116: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:116: the top level]) m4trace:configure.ac:130: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:130: the top level]) m4trace:configure.ac:140: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:140: the top level]) m4trace:configure.ac:141: -2- AC_DEFINE_TRACE_LITERAL([OSX]) m4trace:configure.ac:141: -2- m4_pattern_allow([^OSX$]) m4trace:configure.ac:141: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:141: the top level]) m4trace:configure.ac:147: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:147: the top level]) m4trace:configure.ac:158: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:158: the top level]) m4trace:configure.ac:167: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:167: the top level]) m4trace:configure.ac:167: -2- AC_DEFINE_TRACE_LITERAL([POSIX]) m4trace:configure.ac:167: -2- m4_pattern_allow([^POSIX$]) m4trace:configure.ac:170: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:170: the top level]) m4trace:configure.ac:174: -2- AC_DEFINE_TRACE_LITERAL([SYSV]) m4trace:configure.ac:174: -2- m4_pattern_allow([^SYSV$]) m4trace:configure.ac:171: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:171: the top level]) m4trace:configure.ac:176: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:176: the top level]) m4trace:configure.ac:183: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:183: the top level]) m4trace:configure.ac:189: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:189: the top level]) m4trace:configure.ac:189: -2- AC_DEFINE_TRACE_LITERAL([SVR4]) m4trace:configure.ac:189: -2- m4_pattern_allow([^SVR4$]) m4trace:configure.ac:193: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:193: the top level]) m4trace:configure.ac:194: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:194: the top level]) m4trace:configure.ac:194: -2- AC_DEFINE_TRACE_LITERAL([BUGGYGETLOGIN]) m4trace:configure.ac:194: -2- m4_pattern_allow([^BUGGYGETLOGIN$]) m4trace:configure.ac:194: -2- AC_DEFINE_TRACE_LITERAL([BUGGYGETLOGIN]) m4trace:configure.ac:194: -2- m4_pattern_allow([^BUGGYGETLOGIN$]) m4trace:configure.ac:202: -1- AH_OUTPUT([HAVE_STROPTS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STROPTS_H]) m4trace:configure.ac:202: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STROPTS_H]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STROPTS_H$]) m4trace:configure.ac:202: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:202: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRING_H]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STRING_H$]) m4trace:configure.ac:202: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.ac:202: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRINGS_H]) m4trace:configure.ac:202: -1- m4_pattern_allow([^HAVE_STRINGS_H$]) m4trace:configure.ac:204: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:204: the top level]) m4trace:configure.ac:234: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:234: the top level]) m4trace:configure.ac:250: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:250: the top level]) m4trace:configure.ac:250: -2- AC_DEFINE_TRACE_LITERAL([BSDJOBS]) m4trace:configure.ac:250: -2- m4_pattern_allow([^BSDJOBS$]) m4trace:configure.ac:250: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:250: the top level]) m4trace:configure.ac:235: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:235: the top level]) m4trace:configure.ac:255: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:255: the top level]) m4trace:configure.ac:260: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SETRESUID]) m4trace:configure.ac:260: -2- m4_pattern_allow([^HAVE_SETRESUID$]) m4trace:configure.ac:256: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:256: the top level]) m4trace:configure.ac:262: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:262: the top level]) m4trace:configure.ac:267: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SETREUID]) m4trace:configure.ac:267: -2- m4_pattern_allow([^HAVE_SETREUID$]) m4trace:configure.ac:263: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:263: the top level]) m4trace:configure.ac:275: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:275: the top level]) m4trace:configure.ac:284: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SETEUID]) m4trace:configure.ac:284: -2- m4_pattern_allow([^HAVE_SETEUID$]) m4trace:configure.ac:276: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:276: the top level]) m4trace:configure.ac:287: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:287: the top level]) m4trace:configure.ac:292: -2- AC_DEFINE_TRACE_LITERAL([HAVE_EXECVPE]) m4trace:configure.ac:292: -2- m4_pattern_allow([^HAVE_EXECVPE$]) m4trace:configure.ac:288: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:288: the top level]) m4trace:configure.ac:299: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:299: the top level]) m4trace:configure.ac:306: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:306: the top level]) m4trace:configure.ac:307: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:307: the top level]) m4trace:configure.ac:300: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:300: the top level]) m4trace:configure.ac:319: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:319: the top level]) m4trace:configure.ac:385: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:385: the top level]) m4trace:configure.ac:386: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:386: the top level]) m4trace:configure.ac:387: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:387: the top level]) m4trace:configure.ac:320: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:320: the top level]) m4trace:configure.ac:391: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:391: the top level]) m4trace:configure.ac:436: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:436: the top level]) m4trace:configure.ac:437: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:437: the top level]) m4trace:configure.ac:437: -2- AC_DEFINE_TRACE_LITERAL([BROKEN_PIPE]) m4trace:configure.ac:437: -2- m4_pattern_allow([^BROKEN_PIPE$]) m4trace:configure.ac:438: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:438: the top level]) m4trace:configure.ac:392: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:392: the top level]) m4trace:configure.ac:448: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:448: the top level]) m4trace:configure.ac:503: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:503: the top level]) m4trace:configure.ac:504: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:504: the top level]) m4trace:configure.ac:505: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:505: the top level]) m4trace:configure.ac:449: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:449: the top level]) m4trace:configure.ac:509: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:509: the top level]) m4trace:configure.ac:545: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:545: the top level]) m4trace:configure.ac:546: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:546: the top level]) m4trace:configure.ac:547: -2- AC_DEFINE_TRACE_LITERAL([SOCK_NOT_IN_FS]) m4trace:configure.ac:547: -2- m4_pattern_allow([^SOCK_NOT_IN_FS$]) m4trace:configure.ac:548: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:548: the top level]) m4trace:configure.ac:510: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:510: the top level]) m4trace:configure.ac:657: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:657: the top level]) m4trace:configure.ac:658: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:658: the top level]) m4trace:configure.ac:658: -2- AC_DEFINE_TRACE_LITERAL([SELECT_BROKEN]) m4trace:configure.ac:658: -2- m4_pattern_allow([^SELECT_BROKEN$]) m4trace:configure.ac:659: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:659: the top level]) m4trace:configure.ac:559: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:559: the top level]) m4trace:configure.ac:664: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:664: the top level]) m4trace:configure.ac:673: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:673: the top level]) m4trace:configure.ac:685: -3- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:685: the top level]) m4trace:configure.ac:693: -4- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:693: the top level]) m4trace:configure.ac:701: -5- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:701: the top level]) m4trace:configure.ac:709: -6- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:709: the top level]) m4trace:configure.ac:717: -7- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:717: the top level]) m4trace:configure.ac:725: -8- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:725: the top level]) m4trace:configure.ac:726: -8- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:726: the top level]) m4trace:configure.ac:718: -7- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:718: the top level]) m4trace:configure.ac:710: -6- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:710: the top level]) m4trace:configure.ac:702: -5- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:702: the top level]) m4trace:configure.ac:694: -4- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:694: the top level]) m4trace:configure.ac:686: -3- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:686: the top level]) m4trace:configure.ac:674: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:674: the top level]) m4trace:configure.ac:665: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:665: the top level]) m4trace:configure.ac:743: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:743: the top level]) m4trace:configure.ac:744: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:744: the top level]) m4trace:configure.ac:744: -2- AC_DEFINE_TRACE_LITERAL([TERMINFO]) m4trace:configure.ac:744: -2- m4_pattern_allow([^TERMINFO$]) m4trace:configure.ac:745: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:745: the top level]) m4trace:configure.ac:745: -2- AC_DEFINE_TRACE_LITERAL([TERMINFO]) m4trace:configure.ac:745: -2- m4_pattern_allow([^TERMINFO$]) m4trace:configure.ac:734: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:734: the top level]) m4trace:configure.ac:746: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:746: the top level]) m4trace:configure.ac:747: -2- AC_DEFINE_TRACE_LITERAL([NEED_OSPEED]) m4trace:configure.ac:747: -2- m4_pattern_allow([^NEED_OSPEED$]) m4trace:configure.ac:747: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:747: the top level]) m4trace:configure.ac:753: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:753: the top level]) m4trace:configure.ac:755: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_PTC]) m4trace:configure.ac:755: -1- m4_pattern_allow([^HAVE_DEV_PTC$]) m4trace:configure.ac:760: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:760: the top level]) m4trace:configure.ac:763: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:763: the top level]) m4trace:configure.ac:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SVR4_PTYS]) m4trace:configure.ac:763: -1- m4_pattern_allow([^HAVE_SVR4_PTYS$]) m4trace:configure.ac:772: -1- AH_OUTPUT([HAVE_GETPT], [/* Define to 1 if you have the `getpt\' function. */ @%:@undef HAVE_GETPT]) m4trace:configure.ac:772: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPT]) m4trace:configure.ac:772: -1- m4_pattern_allow([^HAVE_GETPT$]) m4trace:configure.ac:776: -1- AH_OUTPUT([HAVE_OPENPTY], [/* Define to 1 if you have the `openpty\' function. */ @%:@undef HAVE_OPENPTY]) m4trace:configure.ac:776: -1- AC_DEFINE_TRACE_LITERAL([HAVE_OPENPTY]) m4trace:configure.ac:776: -1- m4_pattern_allow([^HAVE_OPENPTY$]) m4trace:configure.ac:776: -1- AC_DEFINE_TRACE_LITERAL([HAVE_OPENPTY]) m4trace:configure.ac:776: -1- m4_pattern_allow([^HAVE_OPENPTY$]) m4trace:configure.ac:781: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:781: the top level]) m4trace:configure.ac:801: -1- AC_DEFINE_TRACE_LITERAL([PTYRANGE0]) m4trace:configure.ac:801: -1- m4_pattern_allow([^PTYRANGE0$]) m4trace:configure.ac:802: -1- AC_DEFINE_TRACE_LITERAL([PTYRANGE1]) m4trace:configure.ac:802: -1- m4_pattern_allow([^PTYRANGE1$]) m4trace:configure.ac:813: -1- AC_DEFINE_TRACE_LITERAL([PTYMODE]) m4trace:configure.ac:813: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:814: -1- AC_DEFINE_TRACE_LITERAL([PTYGROUP]) m4trace:configure.ac:814: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:817: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:817: the top level]) m4trace:configure.ac:895: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:895: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- AC_DEFINE_TRACE_LITERAL([PTYMODE]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:819: -1- AC_DEFINE_TRACE_LITERAL([PTYGROUP]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- AC_SUBST([WRITEPATH]) m4trace:configure.ac:819: -1- AC_SUBST_TRACE([WRITEPATH]) m4trace:configure.ac:819: -1- m4_pattern_allow([^WRITEPATH$]) m4trace:configure.ac:819: -1- AC_SUBST([XTERMPATH]) m4trace:configure.ac:819: -1- AC_SUBST_TRACE([XTERMPATH]) m4trace:configure.ac:819: -1- m4_pattern_allow([^XTERMPATH$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- AC_DEFINE_TRACE_LITERAL([PTYMODE]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYMODE$]) m4trace:configure.ac:819: -1- AC_DEFINE_TRACE_LITERAL([PTYGROUP]) m4trace:configure.ac:819: -1- m4_pattern_allow([^PTYGROUP$]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2962: _AC_RUN_IFELSE is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:819: the top level]) m4trace:configure.ac:903: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:903: the top level]) m4trace:configure.ac:917: -2- AC_DEFINE_TRACE_LITERAL([GETUTENT]) m4trace:configure.ac:917: -2- m4_pattern_allow([^GETUTENT$]) m4trace:configure.ac:920: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:920: the top level]) m4trace:configure.ac:934: -3- AC_DEFINE_TRACE_LITERAL([GETUTENT]) m4trace:configure.ac:934: -3- m4_pattern_allow([^GETUTENT$]) m4trace:configure.ac:921: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:921: the top level]) m4trace:configure.ac:904: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:904: the top level]) m4trace:configure.ac:936: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:936: the top level]) m4trace:configure.ac:946: -2- AC_DEFINE_TRACE_LITERAL([UTHOST]) m4trace:configure.ac:946: -2- m4_pattern_allow([^UTHOST$]) m4trace:configure.ac:937: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:937: the top level]) m4trace:configure.ac:949: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UTEMPTER]) m4trace:configure.ac:949: -1- m4_pattern_allow([^HAVE_UTEMPTER$]) m4trace:configure.ac:957: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:957: the top level]) m4trace:configure.ac:962: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:962: the top level]) m4trace:configure.ac:967: -2- AC_DEFINE_TRACE_LITERAL([LOADAV_GETLOADAVG]) m4trace:configure.ac:967: -2- m4_pattern_allow([^LOADAV_GETLOADAVG$]) m4trace:configure.ac:971: -2- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:971: the top level]) m4trace:configure.ac:976: -3- AC_DEFINE_TRACE_LITERAL([LOADAV_GETLOADAVG]) m4trace:configure.ac:976: -3- m4_pattern_allow([^LOADAV_GETLOADAVG$]) m4trace:configure.ac:972: -2- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:972: the top level]) m4trace:configure.ac:963: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:963: the top level]) m4trace:configure.ac:988: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:988: the top level]) m4trace:configure.ac:995: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:995: the top level]) m4trace:configure.ac:997: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:997: the top level]) m4trace:configure.ac:999: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_UNIX]) m4trace:configure.ac:999: -1- m4_pattern_allow([^LOADAV_UNIX$]) m4trace:configure.ac:1000: -1- AC_DEFINE_TRACE_LITERAL([NLIST_STRUCT]) m4trace:configure.ac:1000: -1- m4_pattern_allow([^NLIST_STRUCT$]) m4trace:configure.ac:1000: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/headers.m4:89: _AC_CHECK_HEADER_COMPILE is expanded from... ./lib/autoconf/headers.m4:56: AC_CHECK_HEADER is expanded from... configure.ac:1000: the top level]) m4trace:configure.ac:1000: -2- AC_DEFINE_TRACE_LITERAL([NLIST_NAME_UNION]) m4trace:configure.ac:1000: -2- m4_pattern_allow([^NLIST_NAME_UNION$]) m4trace:configure.ac:1000: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/headers.m4:89: _AC_CHECK_HEADER_COMPILE is expanded from... ./lib/autoconf/headers.m4:56: AC_CHECK_HEADER is expanded from... configure.ac:1000: the top level]) m4trace:configure.ac:1007: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1007: the top level]) m4trace:configure.ac:1014: -2- AC_DEFINE_TRACE_LITERAL([NLIST_DECLARED]) m4trace:configure.ac:1014: -2- m4_pattern_allow([^NLIST_DECLARED$]) m4trace:configure.ac:1016: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1016: the top level]) m4trace:configure.ac:1019: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1019: the top level]) m4trace:configure.ac:1019: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [./lib/autoconf/general.m4:2981: AC_RUN_IFELSE is expanded from... ./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1019: the top level]) m4trace:configure.ac:1056: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1056: the top level]) m4trace:configure.ac:1058: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1058: the top level]) m4trace:configure.ac:1059: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_AVENRUN]) m4trace:configure.ac:1059: -1- m4_pattern_allow([^LOADAV_AVENRUN$]) m4trace:configure.ac:1061: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1061: the top level]) m4trace:configure.ac:1062: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_USE_NLIST64]) m4trace:configure.ac:1062: -1- m4_pattern_allow([^LOADAV_USE_NLIST64$]) m4trace:configure.ac:1067: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1067: the top level]) m4trace:configure.ac:1068: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1068: the top level]) m4trace:configure.ac:1069: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1069: the top level]) m4trace:configure.ac:1070: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1070: the top level]) m4trace:configure.ac:1071: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1071: the top level]) m4trace:configure.ac:1072: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1072: the top level]) m4trace:configure.ac:1073: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1073: the top level]) m4trace:configure.ac:1114: -1- AC_DEFINE_TRACE_LITERAL([LOADAV]) m4trace:configure.ac:1114: -1- m4_pattern_allow([^LOADAV$]) m4trace:configure.ac:1115: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_TYPE]) m4trace:configure.ac:1115: -1- m4_pattern_allow([^LOADAV_TYPE$]) m4trace:configure.ac:1116: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_NUM]) m4trace:configure.ac:1116: -1- m4_pattern_allow([^LOADAV_NUM$]) m4trace:configure.ac:1117: -1- AC_DEFINE_TRACE_LITERAL([LOADAV_SCALE]) m4trace:configure.ac:1117: -1- m4_pattern_allow([^LOADAV_SCALE$]) m4trace:configure.ac:1125: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1125: the top level]) m4trace:configure.ac:1126: -1- AC_DEFINE_TRACE_LITERAL([SIGVOID]) m4trace:configure.ac:1126: -1- m4_pattern_allow([^SIGVOID$]) m4trace:configure.ac:1130: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1130: the top level]) m4trace:configure.ac:1137: -2- AC_DEFINE_TRACE_LITERAL([SIGVOID]) m4trace:configure.ac:1137: -2- m4_pattern_allow([^SIGVOID$]) m4trace:configure.ac:1131: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:1131: the top level]) m4trace:configure.ac:1139: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1139: the top level]) m4trace:configure.ac:1149: -2- AC_DEFINE_TRACE_LITERAL([USESIGSET]) m4trace:configure.ac:1149: -2- m4_pattern_allow([^USESIGSET$]) m4trace:configure.ac:1140: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1140: the top level]) m4trace:configure.ac:1151: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1151: the top level]) m4trace:configure.ac:1188: -2- AC_DEFINE_TRACE_LITERAL([SYSVSIGS]) m4trace:configure.ac:1188: -2- m4_pattern_allow([^SYSVSIGS$]) m4trace:configure.ac:1152: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1152: the top level]) m4trace:configure.ac:1196: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1196: the top level]) m4trace:configure.ac:1202: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1202: the top level]) m4trace:configure.ac:1203: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1203: the top level]) m4trace:configure.ac:1211: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1211: the top level]) m4trace:configure.ac:1212: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1212: the top level]) m4trace:configure.ac:1214: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1214: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from... lib/m4sugar/m4sh.m4:699: AS_IF is expanded from... ./lib/autoconf/general.m4:2894: _AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2911: AC_LINK_IFELSE is expanded from... ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1215: the top level]) m4trace:configure.ac:1215: -1- AC_DEFINE_TRACE_LITERAL([NOSYSLOG]) m4trace:configure.ac:1215: -1- m4_pattern_allow([^NOSYSLOG$]) m4trace:configure.ac:1239: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1239: the top level]) m4trace:configure.ac:1248: -2- AC_DEFINE_TRACE_LITERAL([BSDWAIT]) m4trace:configure.ac:1248: -2- m4_pattern_allow([^BSDWAIT$]) m4trace:configure.ac:1240: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2847: AC_TRY_COMPILE is expanded from... configure.ac:1240: the top level]) m4trace:configure.ac:1251: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1251: the top level]) m4trace:configure.ac:1252: -2- AC_DEFINE_TRACE_LITERAL([TERMIO]) m4trace:configure.ac:1252: -2- m4_pattern_allow([^TERMIO$]) m4trace:configure.ac:1254: -3- AC_DEFINE_TRACE_LITERAL([TERMIO]) m4trace:configure.ac:1254: -3- m4_pattern_allow([^TERMIO$]) m4trace:configure.ac:1254: -2- _m4_warn([obsolete], [The macro `AC_TRY_CPP' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2762: AC_TRY_CPP is expanded from... configure.ac:1254: the top level]) m4trace:configure.ac:1252: -1- _m4_warn([obsolete], [The macro `AC_TRY_CPP' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2762: AC_TRY_CPP is expanded from... configure.ac:1252: the top level]) m4trace:configure.ac:1260: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1260: the top level]) m4trace:configure.ac:1265: -2- AC_DEFINE_TRACE_LITERAL([SHADOWPW]) m4trace:configure.ac:1265: -2- m4_pattern_allow([^SHADOWPW$]) m4trace:configure.ac:1261: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1261: the top level]) m4trace:configure.ac:1267: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1267: the top level]) m4trace:configure.ac:1272: -2- AC_DEFINE_TRACE_LITERAL([GETTTYENT]) m4trace:configure.ac:1272: -2- m4_pattern_allow([^GETTTYENT$]) m4trace:configure.ac:1268: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1268: the top level]) m4trace:configure.ac:1274: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1274: the top level]) m4trace:configure.ac:1279: -2- AC_DEFINE_TRACE_LITERAL([HAVE_FDWALK]) m4trace:configure.ac:1279: -2- m4_pattern_allow([^HAVE_FDWALK$]) m4trace:configure.ac:1275: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1275: the top level]) m4trace:configure.ac:1281: -1- _m4_warn([obsolete], [The macro `AC_CHECKING' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2499: AC_CHECKING is expanded from... configure.ac:1281: the top level]) m4trace:configure.ac:1299: -2- AC_DEFINE_TRACE_LITERAL([USEBCOPY]) m4trace:configure.ac:1299: -2- m4_pattern_allow([^USEBCOPY$]) m4trace:configure.ac:1282: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1282: the top level]) m4trace:configure.ac:1319: -2- AC_DEFINE_TRACE_LITERAL([USEMEMMOVE]) m4trace:configure.ac:1319: -2- m4_pattern_allow([^USEMEMMOVE$]) m4trace:configure.ac:1320: -2- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:400: AC_FD_MSG is expanded from... configure.ac:1320: the top level]) m4trace:configure.ac:1320: -2- AC_DEFINE_TRACE_LITERAL([USEMEMMOVE]) m4trace:configure.ac:1320: -2- m4_pattern_allow([^USEMEMMOVE$]) m4trace:configure.ac:1301: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1301: the top level]) m4trace:configure.ac:1340: -2- AC_DEFINE_TRACE_LITERAL([USEMEMCPY]) m4trace:configure.ac:1340: -2- m4_pattern_allow([^USEMEMCPY$]) m4trace:configure.ac:1322: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from... configure.ac:1322: the top level]) m4trace:configure.ac:1342: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_FILE_NAMES]) m4trace:configure.ac:1342: -1- m4_pattern_allow([^HAVE_LONG_FILE_NAMES$]) m4trace:configure.ac:1342: -1- AH_OUTPUT([HAVE_LONG_FILE_NAMES], [/* Define to 1 if you support file names longer than 14 characters. */ @%:@undef HAVE_LONG_FILE_NAMES]) m4trace:configure.ac:1350: -2- AC_DEFINE_TRACE_LITERAL([USEVARARGS]) m4trace:configure.ac:1350: -2- m4_pattern_allow([^USEVARARGS$]) m4trace:configure.ac:1345: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1345: the top level]) m4trace:configure.ac:1352: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ @%:@undef HAVE_DIRENT_H]) m4trace:configure.ac:1352: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ @%:@undef HAVE_SYS_NDIR_H]) m4trace:configure.ac:1352: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ @%:@undef HAVE_SYS_DIR_H]) m4trace:configure.ac:1352: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ @%:@undef HAVE_NDIR_H]) m4trace:configure.ac:1356: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1356: the top level]) m4trace:configure.ac:1363: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1363: the top level]) m4trace:configure.ac:1370: -1- AC_DEFINE_TRACE_LITERAL([USESETENV]) m4trace:configure.ac:1370: -1- m4_pattern_allow([^USESETENV$]) m4trace:configure.ac:1372: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SETENV_3]) m4trace:configure.ac:1372: -1- m4_pattern_allow([^HAVE_SETENV_3$]) m4trace:configure.ac:1374: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SETENV_2]) m4trace:configure.ac:1374: -1- m4_pattern_allow([^HAVE_SETENV_2$]) m4trace:configure.ac:1379: -2- AC_DEFINE_TRACE_LITERAL([NEEDPUTENV]) m4trace:configure.ac:1379: -2- m4_pattern_allow([^NEEDPUTENV$]) m4trace:configure.ac:1379: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1379: the top level]) m4trace:configure.ac:1386: -2- AC_DEFINE_TRACE_LITERAL([HAVE_NL_LANGINFO]) m4trace:configure.ac:1386: -2- m4_pattern_allow([^HAVE_NL_LANGINFO$]) m4trace:configure.ac:1382: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1382: the top level]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_RENAME], [/* Define to 1 if you have the `rename\' function. */ @%:@undef HAVE_RENAME]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_RENAME]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_RENAME$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_FCHMOD], [/* Define to 1 if you have the `fchmod\' function. */ @%:@undef HAVE_FCHMOD]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_FCHMOD]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_FCHMOD$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_FCHOWN], [/* Define to 1 if you have the `fchown\' function. */ @%:@undef HAVE_FCHOWN]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_FCHOWN]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_FCHOWN$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */ @%:@undef HAVE_STRERROR]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRERROR]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_STRERROR$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_LSTAT], [/* Define to 1 if you have the `lstat\' function. */ @%:@undef HAVE_LSTAT]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LSTAT]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_LSTAT$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE__EXIT], [/* Define to 1 if you have the `_exit\' function. */ @%:@undef HAVE__EXIT]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE__EXIT]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE__EXIT$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_UTIMES], [/* Define to 1 if you have the `utimes\' function. */ @%:@undef HAVE_UTIMES]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UTIMES]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_UTIMES$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define to 1 if you have the `vsnprintf\' function. */ @%:@undef HAVE_VSNPRINTF]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VSNPRINTF]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_VSNPRINTF$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_GETCWD], [/* Define to 1 if you have the `getcwd\' function. */ @%:@undef HAVE_GETCWD]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETCWD]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_GETCWD$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_SETLOCALE], [/* Define to 1 if you have the `setlocale\' function. */ @%:@undef HAVE_SETLOCALE]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SETLOCALE]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_SETLOCALE$]) m4trace:configure.ac:1390: -1- AH_OUTPUT([HAVE_STRFTIME], [/* Define to 1 if you have the `strftime\' function. */ @%:@undef HAVE_STRFTIME]) m4trace:configure.ac:1390: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRFTIME]) m4trace:configure.ac:1390: -1- m4_pattern_allow([^HAVE_STRFTIME$]) m4trace:configure.ac:1403: -2- AC_DEFINE_TRACE_LITERAL([USE_PAM]) m4trace:configure.ac:1403: -2- m4_pattern_allow([^USE_PAM$]) m4trace:configure.ac:1397: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from... configure.ac:1397: the top level]) m4trace:configure.ac:1413: -1- AC_DEFINE_TRACE_LITERAL([USE_LOCALE]) m4trace:configure.ac:1413: -1- m4_pattern_allow([^USE_LOCALE$]) m4trace:configure.ac:1417: -1- AC_DEFINE_TRACE_LITERAL([BUILTIN_TELNET]) m4trace:configure.ac:1417: -1- m4_pattern_allow([^BUILTIN_TELNET$]) m4trace:configure.ac:1421: -1- AC_DEFINE_TRACE_LITERAL([COLORS256]) m4trace:configure.ac:1421: -1- m4_pattern_allow([^COLORS256$]) m4trace:configure.ac:1425: -1- AC_DEFINE_TRACE_LITERAL([RXVT_OSC]) m4trace:configure.ac:1425: -1- m4_pattern_allow([^RXVT_OSC$]) m4trace:configure.ac:1442: -1- AC_SUBST([ETCSCREENRC]) m4trace:configure.ac:1442: -1- AC_SUBST_TRACE([ETCSCREENRC]) m4trace:configure.ac:1442: -1- m4_pattern_allow([^ETCSCREENRC$]) m4trace:configure.ac:1444: -1- AC_CONFIG_FILES([Makefile doc/Makefile]) m4trace:configure.ac:1444: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) m4trace:configure.ac:1444: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:1444: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:1444: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:1444: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:1444: -1- AC_SUBST_TRACE([INSTALL]) screen-4.9.1/autom4te.cache/output.00000664000175000017500000071066414467014300015714 0ustar alexalex@%:@! /bin/sh @%:@ From configure.ac Revision. @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71. @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='' PACKAGE_TARNAME='' PACKAGE_VERSION='' PACKAGE_STRING='' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="screen.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='LTLIBOBJS LIB@&t@OBJS ETCSCREENRC XTERMPATH WRITEPATH INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM AWK EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ac_prefix_program VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_socket_dir with_socket_dir with_pty_mode with_pty_group enable_pam enable_use_locale enable_telnet enable_colors256 enable_rxvt_osc with_sys_screenrc ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/PACKAGE@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-socket-dir disable system wide socket-dir and use ~/.screen instead --enable-pam enable PAM support --enable-use-locale use localized month/day names (default: yes) --enable-telnet enable builtin telnet --enable-colors256 enable support for 256 colors --enable-rxvt_osc enable support for rxvt OSC codes Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-socket-dir=path where to put the per-user sockets --with-pty-mode=mode default mode for ptys --with-pty-group=group default group for ptys --with-sys-screenrc=path to the global screenrc file Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_try_cpp LINENO @%:@ ---------------------- @%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_cpp @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_c_try_run LINENO @%:@ ---------------------- @%:@ Try to run conftest.@S|@ac_ext, and return whether this succeeded. Assumes that @%:@ executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_run @%:@ ac_fn_c_check_func LINENO FUNC VAR @%:@ ---------------------------------- @%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_func ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" # Auxiliary files required by this configure script. ac_aux_files="install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" rev=`sed < ${srcdir}/patchlevel.h -n -e '/#define REV/s/#define REV *//p'` vers=`sed < ${srcdir}/patchlevel.h -n -e '/#define VERS/s/#define VERS *//p'` pat=`sed < ${srcdir}/patchlevel.h -n -e '/#define PATCHLEVEL/s/#define PATCHLEVEL *//p'` VERSION="$rev.$vers.$pat" echo "this is screen version $VERSION" 1>&6 if test "x$prefix" = xNONE; then printf %s "checking for prefix by " >&6 # Extract the first word of "screen", so it can be a program name with args. set dummy screen; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_prefix_program+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_prefix_program in [\\/]* | ?:[\\/]*) ac_cv_path_ac_prefix_program="$ac_prefix_program" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_prefix_program="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_prefix_program=$ac_cv_path_ac_prefix_program if test -n "$ac_prefix_program"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prefix_program" >&5 printf "%s\n" "$ac_prefix_program" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$ac_prefix_program"; then prefix=`$as_dirname -- "$ac_prefix_program" || $as_expr X"$ac_prefix_program" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_prefix_program" : 'X\(//\)[^/]' \| \ X"$ac_prefix_program" : 'X\(//\)$' \| \ X"$ac_prefix_program" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_prefix_program" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` prefix=`$as_dirname -- "$prefix" || $as_expr X"$prefix" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$prefix" : 'X\(//\)[^/]' \| \ X"$prefix" : 'X\(//\)$' \| \ X"$prefix" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$prefix" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` fi fi if test "x$prefix" = xNONE; then printf %s "checking for prefix by " >&6 # Extract the first word of "gzip", so it can be a program name with args. set dummy gzip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_prefix_program+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_prefix_program in [\\/]* | ?:[\\/]*) ac_cv_path_ac_prefix_program="$ac_prefix_program" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_prefix_program="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_prefix_program=$ac_cv_path_ac_prefix_program if test -n "$ac_prefix_program"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prefix_program" >&5 printf "%s\n" "$ac_prefix_program" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$ac_prefix_program"; then prefix=`$as_dirname -- "$ac_prefix_program" || $as_expr X"$ac_prefix_program" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_prefix_program" : 'X\(//\)[^/]' \| \ X"$ac_prefix_program" : 'X\(//\)$' \| \ X"$ac_prefix_program" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_prefix_program" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` prefix=`$as_dirname -- "$prefix" || $as_expr X"$prefix" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$prefix" : 'X\(//\)[^/]' \| \ X"$prefix" : 'X\(//\)$' \| \ X"$prefix" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$prefix" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` fi fi old_CFLAGS="$CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 printf %s "checking whether $CC needs -traditional... " >&6; } if test ${ac_cv_prog_gcc_traditional+y} then : printf %s "(cached) " >&6 else $as_nop ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1 then : ac_cv_prog_gcc_traditional=yes else $as_nop ac_cv_prog_gcc_traditional=no fi rm -rf conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1 then : ac_cv_prog_gcc_traditional=yes fi rm -rf conftest* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 printf %s "checking for library containing strerror... " >&6; } if test ${ac_cv_search_strerror+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char strerror (); int main (void) { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_strerror+y} then : break fi done if test ${ac_cv_search_strerror+y} then : else $as_nop ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 printf "%s\n" "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else $as_nop ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "@%:@define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "@%:@define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "@%:@define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "@%:@define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "@%:@define _MINIX 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "@%:@define _POSIX_1_SOURCE 2" >>confdefs.h else $as_nop MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "@%:@define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "@%:@define _XOPEN_SOURCE 500" >>confdefs.h fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -f etc/toolcheck; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for buggy tools..." >&5 printf "%s\n" "$as_me: checking for buggy tools..." >&6;} sh etc/toolcheck 1>&6 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if a system-wide socket dir should be used" >&5 printf %s "checking if a system-wide socket dir should be used... " >&6; } @%:@ Check whether --enable-socket-dir was given. if test ${enable_socket_dir+y} then : enableval=$enable_socket_dir; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no. ~/.screen will be used instead." >&5 printf "%s\n" "no. ~/.screen will be used instead." >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the socket dir" >&5 printf %s "checking for the socket dir... " >&6; } SOCKDIR="(eff_uid ? \"/tmp/uscreens\" : \"/tmp/screens\")" @%:@ Check whether --with-socket-dir was given. if test ${with_socket_dir+y} then : withval=$with_socket_dir; case "${withval}" in *\"*) SOCKDIR="${withval}" ;; *) SOCKDIR="\"${withval}\"" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${SOCKDIR}" >&5 printf "%s\n" "${SOCKDIR}" >&6; } printf "%s\n" "@%:@define SOCKDIR $SOCKDIR" >>confdefs.h fi if test "$cross_compiling" = no && test -n "$ISC" ; then printf "%s\n" "@%:@define ISC 1" >>confdefs.h LIBS="$LIBS -linet" fi if test "$cross_compiling" = no && test -f /sysV68 ; then printf "%s\n" "@%:@define sysV68 1" >>confdefs.h fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MIPS..." >&5 printf "%s\n" "$as_me: checking for MIPS..." >&6;} if test -f /lib/libmld.a || test -f /usr/lib/libmld.a || test -f /usr/lib/cmplrs/cc/libmld.a; then oldlibs="$LIBS" test -f /bin/mx || LIBS="$LIBS -lmld" # for nlist. But not on alpha. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking mld library..." >&5 printf "%s\n" "$as_me: checking mld library..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -r /dev/ptc; then printf "%s\n" "@%:@define MIPS 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait3..." >&5 printf "%s\n" "$as_me: checking wait3..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { wait3(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait2..." >&5 printf "%s\n" "$as_me: checking wait2..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { wait2(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define USE_WAIT2 1" >>confdefs.h LIBS="$LIBS -lbsd" ; CC="$CC -I/usr/include/bsd" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Ultrix..." >&5 printf "%s\n" "$as_me: checking for Ultrix..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(ultrix) || defined(__ultrix) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : ULTRIX=1 fi rm -rf conftest* if test "$cross_compiling" = no && test -f /usr/lib/libpyr.a ; then oldlibs="$LIBS" LIBS="$LIBS -lpyr" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Pyramid OSX..." >&5 printf "%s\n" "$as_me: checking Pyramid OSX..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { open_controlling_pty("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define OSX 1" >>confdefs.h else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for butterfly..." >&5 printf "%s\n" "$as_me: checking for butterfly..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(butterfly) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : butterfly=1 fi rm -rf conftest* if test -z "$butterfly"; then if test -n "$ULTRIX"; then test -z "$GCC" && CC="$CC -YBSD" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for POSIX.1..." >&5 printf "%s\n" "$as_me: checking for POSIX.1..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifdef _POSIX_VERSION YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : echo "- you have a POSIX system" 1>&6 printf "%s\n" "@%:@define POSIX 1" >>confdefs.h posix=1 fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for System V..." >&5 printf "%s\n" "$as_me: checking for System V..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { int x = SIGCHLD | FNDELAY; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop printf "%s\n" "@%:@define SYSV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sequent/ptx..." >&5 printf "%s\n" "$as_me: checking for sequent/ptx..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _SEQUENT_ YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -linet";seqptx=1 fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SVR4..." >&5 printf "%s\n" "$as_me: checking SVR4..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if defined(SVR4) || defined(__SVR4) yes; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : echo "- you have a SVR4 system" 1>&6 printf "%s\n" "@%:@define SVR4 1" >>confdefs.h svr4=1 fi rm -rf conftest* if test -n "$svr4" ; then oldlibs="$LIBS" LIBS="$LIBS -lelf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SVR4..." >&5 printf "%s\n" "$as_me: checking SVR4..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_fn_c_check_header_compile "$LINENO" "dwarf.h" "ac_cv_header_dwarf_h" "$ac_includes_default" if test "x$ac_cv_header_dwarf_h" = xyes then : printf "%s\n" "@%:@define BUGGYGETLOGIN 1" >>confdefs.h else $as_nop ac_fn_c_check_header_compile "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default" if test "x$ac_cv_header_elf_h" = xyes then : printf "%s\n" "@%:@define BUGGYGETLOGIN 1" >>confdefs.h fi fi else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$ac_includes_default" if test "x$ac_cv_header_stropts_h" = xyes then : printf "%s\n" "@%:@define HAVE_STROPTS_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "@%:@define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes then : printf "%s\n" "@%:@define HAVE_STRINGS_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris 2.x..." >&5 printf "%s\n" "$as_me: checking for Solaris 2.x..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(SVR4) && defined(sun) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -lnsl -lkstat" fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking BSD job jontrol..." >&5 printf "%s\n" "$as_me: checking BSD job jontrol..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { #ifdef POSIX tcsetpgrp(0, 0); #else int x = TIOCSPGRP; #ifdef SYSV setpgrp(); #else int y = TIOCNOTTY; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : echo "- you have jobcontrol" 1>&6 printf "%s\n" "@%:@define BSDJOBS 1" >>confdefs.h else $as_nop echo "- you don't have jobcontrol" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking setresuid..." >&5 printf "%s\n" "$as_me: checking setresuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setresuid(0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETRESUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking setreuid..." >&5 printf "%s\n" "$as_me: checking setreuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setreuid(0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETREUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking seteuid..." >&5 printf "%s\n" "$as_me: checking seteuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { #if defined(linux) || defined(NeXT) || defined(_AUX_SOURCE) || defined(AUX) || defined(ultrix) || (defined(sun) && defined(SVR4)) || defined(ISC) || defined(sony_news) int seteuid_is_broken(int); seteuid_is_broken(0); #else seteuid(0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SETEUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking execvpe..." >&5 printf "%s\n" "$as_me: checking execvpe..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { execvpe(0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_EXECVPE 1" >>confdefs.h CFLAGS="$CFLAGS -D_GNU_SOURCE" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking select..." >&5 printf "%s\n" "$as_me: checking select..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$LIBS -lnet -lnsl" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking select with $LIBS..." >&5 printf "%s\n" "$as_me: checking select with $LIBS..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop as_fn_error $? "!!! no select - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking fifos..." >&5 printf "%s\n" "$as_me: checking fifos..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming fifos are usable" 1>&6 fifo=1 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif char *fin = "/tmp/conftest$$"; int main() { struct stat stb; fd_set f; (void)alarm(5); unlink(fin); #ifdef POSIX if (mkfifo(fin, 0777)) #else if (mknod(fin, S_IFIFO|0777, 0)) #endif return 1; if (stat(fin, &stb) || (stb.st_mode & S_IFIFO) != S_IFIFO) return 1; close(0); #ifdef __386BSD__ /* * The next test fails under 386BSD, but screen works using fifos. * Fifos in O_RDWR mode are only used for the BROKEN_PIPE case and for * the select() configuration test. */ return 0; #endif if (open(fin, O_RDONLY | O_NONBLOCK)) return 1; if (fork() == 0) { close(0); if (open(fin, O_WRONLY | O_NONBLOCK)) return 1; close(0); if (open(fin, O_WRONLY | O_NONBLOCK)) return 1; if (write(0, "TEST", 4) == -1) return 1; return 0; } FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your fifos are usable" 1>&6 fifo=1 else $as_nop echo "- your fifos are not usable" 1>&6 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* if test -n "$fifo"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken fifo implementation..." >&5 printf "%s\n" "$as_me: checking for broken fifo implementation..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming fifo implementation is ok" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif char *fin = "/tmp/conftest$$"; int main() { struct timeval tv; fd_set f; #ifdef POSIX if (mkfifo(fin, 0600)) #else if (mknod(fin, S_IFIFO|0600, 0)) #endif return 1; close(0); if (open(fin, O_RDONLY|O_NONBLOCK)) return 1; FD_SET(0, &f); tv.tv_sec = 1; tv.tv_usec = 0; if (select(1, &f, 0, 0, &tv)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your implementation is ok" 1>&6 else $as_nop echo "- you have a broken implementation" 1>&6 printf "%s\n" "@%:@define BROKEN_PIPE 1" >>confdefs.h fifobr=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking sockets..." >&5 printf "%s\n" "$as_me: checking sockets..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming sockets are usable" 1>&6 sock=1 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #include #include #include #include char *son = "/tmp/conftest$$"; int main() { int s1, s2, l; struct sockaddr_un a; fd_set f; (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 1; a.sun_family = AF_UNIX; strcpy(a.sun_path, son); (void) unlink(son); if (bind(s1, (struct sockaddr *) &a, strlen(son)+2) == -1) return 1; if (listen(s1, 2)) return 1; if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(son) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); return 0; } l = sizeof(a); close(0); if (accept(s1, &a, &l)) return 1; FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your sockets are usable" 1>&6 sock=1 else $as_nop echo "- your sockets are not usable" 1>&6 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* if test -n "$sock"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking socket implementation..." >&5 printf "%s\n" "$as_me: checking socket implementation..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming sockets are normal" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #include #include char *son = "/tmp/conftest$$"; int main() { int s; struct stat stb; struct sockaddr_un a; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 0; a.sun_family = AF_UNIX; strcpy(a.sun_path, son); (void) unlink(son); if (bind(s, (struct sockaddr *) &a, strlen(son)+2) == -1) return 0; if (stat(son, &stb)) return 1; close(s); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- you are normal" 1>&6 else $as_nop echo "- unix domain sockets are not kept in the filesystem" 1>&6 printf "%s\n" "@%:@define SOCK_NOT_IN_FS 1" >>confdefs.h socknofs=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* fi if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming select is ok" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include char *nam = "/tmp/conftest$$"; #ifdef NAMEDPIPE #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif int main() { fd_set f; #ifdef __FreeBSD__ /* From Andrew A. Chernov (ache@astral.msk.su): * opening RDWR fifo fails in BSD 4.4, but select return values are * right. */ return 0; #endif (void)alarm(5); #ifdef POSIX if (mkfifo(nam, 0777)) #else if (mknod(nam, S_IFIFO|0777, 0)) #endif return 1; close(0); if (open(nam, O_RDWR | O_NONBLOCK)) return 1; if (write(0, "TEST", 4) == -1) return 1; #else #include #include #include #include #include #include int main() { int s1, s2, l; struct sockaddr_un a; fd_set f; (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 1; a.sun_family = AF_UNIX; strcpy(a.sun_path, nam); (void) unlink(nam); if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) return 1; if (listen(s1, 2)) return 1; if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); return 0; } l = sizeof(a); close(0); if (accept(s1, (struct sockaddr *)&a, &l)) return 1; #endif FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; if (select(1, &f, &f, 0, 0) != 2) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- select is ok" 1>&6 else $as_nop echo "- select can not count" 1>&6 printf "%s\n" "@%:@define SELECT_BROKEN 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent..." >&5 printf "%s\n" "$as_me: checking for tgetent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop olibs="$LIBS" LIBS="-lcurses $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libcurses..." >&5 printf "%s\n" "$as_me: checking libcurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #ifdef __hpux __sorry_hpux_libcurses_is_totally_broken_in_10_10(); #else tgetent((char *)0, (char *)0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltermcap $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtermcap..." >&5 printf "%s\n" "$as_me: checking libtermcap..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltermlib $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtermlib..." >&5 printf "%s\n" "$as_me: checking libtermlib..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-lncursesw $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libncursesw..." >&5 printf "%s\n" "$as_me: checking libncursesw..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltinfow $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtinfow..." >&5 printf "%s\n" "$as_me: checking libtinfow..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-lncurses $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libncurses..." >&5 printf "%s\n" "$as_me: checking libncurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltinfo $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtinfo..." >&5 printf "%s\n" "$as_me: checking libtinfo..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop as_fn_error $? "!!! no tgetent - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming terminfo database is used" 1>&6 printf "%s\n" "@%:@define TERMINFO 1" >>confdefs.h else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { return(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- you use the termcap database" 1>&6 else $as_nop echo "- you use the terminfo database" 1>&6 printf "%s\n" "@%:@define TERMINFO 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ospeed..." >&5 printf "%s\n" "$as_me: checking ospeed..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern short ospeed; int main (void) { ospeed=5; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop printf "%s\n" "@%:@define NEED_OSPEED 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc..." >&5 printf "%s\n" "$as_me: checking for /dev/ptc..." >&6;} if test -r /dev/ptc; then printf "%s\n" "@%:@define HAVE_DEV_PTC 1" >>confdefs.h fi fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SVR4 ptys..." >&5 printf "%s\n" "$as_me: checking for SVR4 ptys..." >&6;} sysvr4ptys= if test -c /dev/ptmx ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { ptsname(0);grantpt(0);unlockpt(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_SVR4_PTYS 1" >>confdefs.h sysvr4ptys=1 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi ac_fn_c_check_func "$LINENO" "getpt" "ac_cv_func_getpt" if test "x$ac_cv_func_getpt" = xyes then : printf "%s\n" "@%:@define HAVE_GETPT 1" >>confdefs.h fi if test -z "$sysvr4ptys"; then for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" if test "x$ac_cv_func_openpty" = xyes then : printf "%s\n" "@%:@define HAVE_OPENPTY 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 printf %s "checking for openpty in -lutil... " >&6; } if test ${ac_cv_lib_util_openpty+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char openpty (); int main (void) { return openpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_util_openpty=yes else $as_nop ac_cv_lib_util_openpty=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 printf "%s\n" "$ac_cv_lib_util_openpty" >&6; } if test "x$ac_cv_lib_util_openpty" = xyes then : printf "%s\n" "@%:@define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" fi fi done fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ptyranges..." >&5 printf "%s\n" "$as_me: checking for ptyranges..." >&6;} if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : ptys=`echo /dev/ptyp??` else $as_nop ptys=`echo $pdir/pty??` fi rm -rf conftest* if test "$ptys" != "$pdir/pty??" ; then p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'` p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'` printf "%s\n" "@%:@define PTYRANGE0 \"$p0\"" >>confdefs.h printf "%s\n" "@%:@define PTYRANGE1 \"$p1\"" >>confdefs.h fi fi @%:@ Check whether --with-pty-mode was given. if test ${with_pty_mode+y} then : withval=$with_pty_mode; ptymode="${withval}" fi @%:@ Check whether --with-pty-group was given. if test ${with_pty_group+y} then : withval=$with_pty_group; ptygrp="${withval}" fi test -n "$ptymode" || ptymode=0620 if test -n "$ptygrp" ; then printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking default tty permissions/group..." >&5 printf "%s\n" "$as_me: checking default tty permissions/group..." >&6;} rm -f conftest_grp if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming ptys are world accessable" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include int main() { struct stat sb; char *x,*ttyname(); int om, m; FILE *fp; if (!(x = ttyname(0))) return 1; if (stat(x, &sb)) return 1; om = sb.st_mode; if (om & 002) return 0; m = system("mesg y"); if (m == -1 || m == 127) return 1; if (stat(x, &sb)) return 1; m = sb.st_mode; if (chmod(x, om)) return 1; if (m & 002) return 0; if (sb.st_gid == getgid()) return 1; if (!(fp=fopen("conftest_grp", "w"))) return 1; fprintf(fp, "%d\n", sb.st_gid); fclose(fp); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : if test -f conftest_grp; then ptygrp=`cat conftest_grp` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else echo "- ptys are world accessable" 1>&6 fi else $as_nop WRITEPATH='' XTERMPATH='' # Extract the first word of "write", so it can be a program name with args. set dummy write; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_WRITEPATH+y} then : printf %s "(cached) " >&6 else $as_nop case $WRITEPATH in [\\/]* | ?:[\\/]*) ac_cv_path_WRITEPATH="$WRITEPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_WRITEPATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi WRITEPATH=$ac_cv_path_WRITEPATH if test -n "$WRITEPATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WRITEPATH" >&5 printf "%s\n" "$WRITEPATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "xterm", so it can be a program name with args. set dummy xterm; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_XTERMPATH+y} then : printf %s "(cached) " >&6 else $as_nop case $XTERMPATH in [\\/]* | ?:[\\/]*) ac_cv_path_XTERMPATH="$XTERMPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_XTERMPATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XTERMPATH=$ac_cv_path_XTERMPATH if test -n "$XTERMPATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XTERMPATH" >&5 printf "%s\n" "$XTERMPATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi found= if test -n "$WRITEPATH$XTERMPATH"; then findfollow= lsfollow= found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null` if test -n "$found"; then findfollow=-follow lsfollow=L fi if test -n "$XTERMPATH"; then ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'` if test tty != "$ptygrpn"; then XTERMPATH= fi fi fi if test -n "$WRITEPATH$XTERMPATH"; then found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` if test -n "$found"; then ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 printf "%s\n" "@%:@define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "@%:@define PTYGROUP $ptygrp" >>confdefs.h else echo "- ptys are world accessable" 1>&6 fi else echo "- can not determine - assume ptys are world accessable" 1>&6 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest_grp fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getutent..." >&5 printf "%s\n" "$as_me: checking getutent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* to get time_t on SCO */ #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif #ifdef __hpux #define pututline _pututline #endif int main (void) { int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETUTENT 1" >>confdefs.h else $as_nop olibs="$LIBS" LIBS="$LIBS -lgen" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getutent with -lgen..." >&5 printf "%s\n" "$as_me: checking getutent with -lgen..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif #ifdef __hpux #define pututline _pututline #endif int main (void) { int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETUTENT 1" >>confdefs.h else $as_nop LIBS="$olibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ut_host..." >&5 printf "%s\n" "$as_me: checking ut_host..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif int main (void) { struct utmp u; u.ut_host[0] = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define UTHOST 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_fn_c_check_header_compile "$LINENO" "utempter.h" "ac_cv_header_utempter_h" "$ac_includes_default" if test "x$ac_cv_header_utempter_h" = xyes then : have_utempter=yes else $as_nop have_utempter=no fi if test "$have_utempter" = yes; then printf "%s\n" "@%:@define HAVE_UTEMPTER 1" >>confdefs.h LIBS="$LIBS -lutempter" fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libutil(s)..." >&5 printf "%s\n" "$as_me: checking for libutil(s)..." >&6;} test -f /usr/lib/libutils.a && LIBS="$LIBS -lutils" test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getloadavg..." >&5 printf "%s\n" "$as_me: checking getloadavg..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getloadavg((double *)0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define LOADAV_GETLOADAVG 1" >>confdefs.h load=1 else $as_nop if test "$cross_compiling" = no && test -f /usr/lib/libkvm.a ; then olibs="$LIBS" LIBS="$LIBS -lkvm" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getloadavg with -lkvm..." >&5 printf "%s\n" "$as_me: checking getloadavg with -lkvm..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getloadavg((double *)0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define LOADAV_GETLOADAVG 1" >>confdefs.h load=1 else $as_nop LIBS="$olibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$load" ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(NeXT) || defined(apollo) || defined(linux) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : load=1 fi rm -rf conftest* fi if test -z "$load" && test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kernelfile..." >&5 printf "%s\n" "$as_me: checking for kernelfile..." >&6;} for core in /unix /vmunix /dynix /hp-ux /xelos /dev/ksyms /kernel/unix /kernel/genunix /unicos /mach /netbsd /386bsd /dgux /bsd /stand/vmunix; do if test -f $core || test -c $core; then break fi done if test ! -f $core && test ! -c $core ; then echo "- no kernelfile found" 1>&6 else echo "- using kernelfile '$core'" 1>&6 if test -r $core ; then printf "%s\n" "@%:@define LOADAV_UNIX \"$core\"" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "nlist.h" "ac_cv_header_nlist_h" "$ac_includes_default" if test "x$ac_cv_header_nlist_h" = xyes then : printf "%s\n" "@%:@define NLIST_STRUCT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking n_un in struct nlist..." >&5 printf "%s\n" "$as_me: checking n_un in struct nlist..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { struct nlist n; n.n_un.n_name = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define NLIST_NAME_UNION 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nlist declaration..." >&5 printf "%s\n" "$as_me: checking for nlist declaration..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef NLIST_STRUCT # include #else # include #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "nlist(( | )( | )*.*\(|\()" >/dev/null 2>&1 then : printf "%s\n" "@%:@define NLIST_DECLARED 1" >>confdefs.h fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for avenrun symbol..." >&5 printf "%s\n" "$as_me: checking for avenrun symbol..." >&6;} nlist64= for av in avenrun _avenrun _Loadavg avenrun _avenrun _Loadavg; do if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef NLIST_STRUCT #include #else #include #endif $nlist64 struct nlist nl[2]; int main() { #if !defined(_AUX_SOURCE) && !defined(AUX) # ifdef NLIST_NAME_UNION nl[0].n_un.n_name = "$av"; # else nl[0].n_name = "$av"; # endif #else strncpy(nl[0].n_name, "$av", sizeof(nl[0].n_name)); #endif nlist(LOADAV_UNIX, nl); if (nl[0].n_value == 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : avensym=$av;break fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$av" = _Loadavg; then nlist64='#define nlist nlist64' fi done if test -z "$avensym" ; then echo "- no avenrun symbol found" 1>&6 else echo "- using avenrun symbol '$avensym'" 1>&6 printf "%s\n" "@%:@define LOADAV_AVENRUN \"$avensym\"" >>confdefs.h if test -n "$nlist64"; then echo "- used nlist64 to find it" 1>&6 printf "%s\n" "@%:@define LOADAV_USE_NLIST64 1" >>confdefs.h fi load=1 fi else echo "Can't configure the load average display feature" 1>&6 echo "because $core is not readable by you." 1>&6 echo "To configure the load average display feature" 1>&6 echo "re-run configure as root if possible." 1>&6 echo "If you are not the system administrator then disregard" 1>&6 echo "this warning. You can still use screen without" 1>&6 echo "the load average display feature." 1>&6 fi fi fi cat > conftest.c < #include _CUT_HERE_ #if !defined(LOADAV_GETLOADAVG) && ((defined(hp300) && !defined(__hpux)) || defined(sun) || (defined(ultrix) && defined(mips)) || defined(_SEQUENT_) || defined(sgi) || (defined(SVR4) && !defined(__hpux)) || defined(sony_news) || (!defined(__osf__) && defined(__alpha)) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) || defined(m88k)) loadtype=long # if defined(apollo) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) loadscale=65536 # else # if defined(FSCALE) && !defined(__osf__) # undef FSCALE loadscale=FSCALE # else # ifdef sgi loadtype=int loadscale=1024 # else # if defined(MIPS) || defined(SVR4) || defined(m88k) loadscale=256 # else /* not MIPS */ loadscale=1000 /* our default value */ # endif /* MIPS */ # endif /* sgi */ # endif /* not FSCALE */ # endif /* not apollo */ #else loadtype=double loadscale=1 #endif #ifdef alliant loadnum=4 #else loadnum=3 #endif EOF eval "$ac_cpp conftest.c 2>&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out" . ./conftest.out rm -f conftest* if test -n "$load" ; then printf "%s\n" "@%:@define LOADAV 1" >>confdefs.h fi if test -n "$loadtype" ; then printf "%s\n" "@%:@define LOADAV_TYPE $loadtype" >>confdefs.h fi if test -n "$loadnum" ; then printf "%s\n" "@%:@define LOADAV_NUM $loadnum" >>confdefs.h fi if test -n "$loadscale" ; then printf "%s\n" "@%:@define LOADAV_SCALE $loadscale" >>confdefs.h fi if test -n "$posix" ; then echo "assuming posix signal definition" 1>&6 printf "%s\n" "@%:@define SIGVOID 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers..." >&5 printf "%s\n" "$as_me: checking return type of signal handlers..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef signal #undef signal #endif extern void (*signal ()) (); int main (void) { int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define SIGVOID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking sigset..." >&5 printf "%s\n" "$as_me: checking sigset..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #ifdef SIGVOID sigset(0, (void (*)())0); #else sigset(0, (int (*)())0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define USESIGSET 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking signal implementation..." >&5 printf "%s\n" "$as_me: checking signal implementation..." >&6;} if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifdef USESIGSET #define signal sigset #endif int got; #ifdef SIGVOID void #endif hand() { got++; } int main() { /* on hpux we use sigvec to get bsd signals */ #ifdef __hpux (void)signal(SIGCLD, hand); kill(getpid(), SIGCLD); kill(getpid(), SIGCLD); if (got < 2) return 1; #endif return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : else $as_nop printf "%s\n" "@%:@define SYSVSIGS 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for crypt and sec libraries..." >&5 printf "%s\n" "$as_me: checking for crypt and sec libraries..." >&6;} if test "$cross_compiling" = no ; then test -f /lib/libcrypt_d.a || test -f /usr/lib/libcrypt_d.a && LIBS="$LIBS -lcrypt_d" fi oldlibs="$LIBS" LIBS="$LIBS -lcrypt" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking crypt..." >&5 printf "%s\n" "$as_me: checking crypt..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = no ; then test -f /lib/libsec.a || test -f /usr/lib/libsec.a && LIBS="$LIBS -lsec" test -f /lib/libshadow.a || test -f /usr/lib/libshadow.a && LIBS="$LIBS -lshadow" fi oldlibs="$LIBS" LIBS="$LIBS -lsun" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking IRIX sun library..." >&5 printf "%s\n" "$as_me: checking IRIX sun library..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking syslog..." >&5 printf "%s\n" "$as_me: checking syslog..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { closelog(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop oldlibs="$LIBS" LIBS="$LIBS -lbsd" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking syslog in libbsd.a..." >&5 printf "%s\n" "$as_me: checking syslog in libbsd.a..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { closelog(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : echo "- found." 1>&6 else $as_nop LIBS="$oldlibs" echo "- bad news: syslog missing." 1>&6 printf "%s\n" "@%:@define NOSYSLOG 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -lcrypt_i" fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait union..." >&5 printf "%s\n" "$as_me: checking wait union..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { union wait x; int y; #ifdef WEXITSTATUS y = WEXITSTATUS(x); #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "@%:@define BSDWAIT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test -z "$butterfly"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for termio or termios..." >&5 printf "%s\n" "$as_me: checking for termio or termios..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : printf "%s\n" "@%:@define TERMIO 1" >>confdefs.h else $as_nop if test -n "$posix"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : printf "%s\n" "@%:@define TERMIO 1" >>confdefs.h fi rm -f conftest.err conftest.i conftest.$ac_ext fi fi rm -f conftest.err conftest.i conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getspnam..." >&5 printf "%s\n" "$as_me: checking getspnam..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getspnam("x"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define SHADOWPW 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getttyent..." >&5 printf "%s\n" "$as_me: checking getttyent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getttyent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define GETTTYENT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking fdwalk..." >&5 printf "%s\n" "$as_me: checking fdwalk..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { fdwalk(NULL, NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "@%:@define HAVE_FDWALK 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether memcpy/memmove/bcopy handles overlapping arguments..." >&5 printf "%s\n" "$as_me: checking whether memcpy/memmove/bcopy handles overlapping arguments..." >&6;} if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEBCOPY 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; use memmove" 1>&6 printf "%s\n" "@%:@define USEMEMMOVE 1" >>confdefs.h else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define bcopy(s,d,l) memmove(d,s,l) int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEMEMMOVE 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define bcopy(s,d,l) memcpy(d,s,l) int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "@%:@define USEMEMCPY 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long file names" >&5 printf %s "checking for long file names... " >&6; } if test ${ac_cv_sys_long_file_names+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: # . the current directory, where building will happen # $prefix/lib where we will be installing things # $exec_prefix/lib likewise # $TMPDIR if set, where it might want to write temporary files # /tmp where it might want to write temporary files # /var/tmp likewise # /usr/tmp likewise for ac_dir in . "$TMPDIR" /tmp /var/tmp /usr/tmp "$prefix/lib" "$exec_prefix/lib"; do # Skip $TMPDIR if it is empty or bogus, and skip $exec_prefix/lib # in the usual case where exec_prefix is '${prefix}'. case $ac_dir in #( . | /* | ?:[\\/]*) ;; #( *) continue;; esac test -w "$ac_dir/." || continue # It is less confusing to not echo anything here. ac_xdir=$ac_dir/cf$$ (umask 077 && mkdir "$ac_xdir" 2>/dev/null) || continue ac_tf1=$ac_xdir/conftest9012345 ac_tf2=$ac_xdir/conftest9012346 touch "$ac_tf1" 2>/dev/null && test -f "$ac_tf1" && test ! -f "$ac_tf2" || ac_cv_sys_long_file_names=no rm -f -r "$ac_xdir" 2>/dev/null test $ac_cv_sys_long_file_names = no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_long_file_names" >&5 printf "%s\n" "$ac_cv_sys_long_file_names" >&6; } if test $ac_cv_sys_long_file_names = yes; then printf "%s\n" "@%:@define HAVE_LONG_FILE_NAMES 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for vsprintf" >&5 printf %s "checking for vsprintf... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { va_list valist; vsprintf(0,0,valist); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define USEVARARGS 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main (void) { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_ac_Header=yes" else $as_nop eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF @%:@define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setenv" >&5 printf %s "checking for setenv... " >&6; } if test -z "$ac_setenv_args"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setenv((char *) 0, (char *) 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_setenv_args=3 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi if test -z "$ac_setenv_args"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setenv((char *) 0, (char *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_setenv_args=2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi if test -n "$ac_setenv_args"; then printf "%s\n" "@%:@define USESETENV 1" >>confdefs.h if test "$ac_setenv_args" = 3; then printf "%s\n" "@%:@define HAVE_SETENV_3 1" >>confdefs.h elif test "$ac_setenv_args" = 2; then printf "%s\n" "@%:@define HAVE_SETENV_2 1" >>confdefs.h fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for putenv" >&5 printf %s "checking for putenv... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { putenv((char *)0);unsetenv((char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; };printf "%s\n" "@%:@define NEEDPUTENV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo(CODESET)" >&5 printf %s "checking for nl_langinfo(CODESET)... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define HAVE_NL_LANGINFO 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gethostname" >&5 printf %s "checking for library containing gethostname... " >&6; } if test ${ac_cv_search_gethostname+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gethostname (); int main (void) { return gethostname (); ; return 0; } _ACEOF for ac_lib in '' nsl do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gethostname=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gethostname+y} then : break fi done if test ${ac_cv_search_gethostname+y} then : else $as_nop ac_cv_search_gethostname=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostname" >&5 printf "%s\n" "$ac_cv_search_gethostname" >&6; } ac_res=$ac_cv_search_gethostname if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename" if test "x$ac_cv_func_rename" = xyes then : printf "%s\n" "@%:@define HAVE_RENAME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod" if test "x$ac_cv_func_fchmod" = xyes then : printf "%s\n" "@%:@define HAVE_FCHMOD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown" if test "x$ac_cv_func_fchown" = xyes then : printf "%s\n" "@%:@define HAVE_FCHOWN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : printf "%s\n" "@%:@define HAVE_STRERROR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" if test "x$ac_cv_func_lstat" = xyes then : printf "%s\n" "@%:@define HAVE_LSTAT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "_exit" "ac_cv_func__exit" if test "x$ac_cv_func__exit" = xyes then : printf "%s\n" "@%:@define HAVE__EXIT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" if test "x$ac_cv_func_utimes" = xyes then : printf "%s\n" "@%:@define HAVE_UTIMES 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = xyes then : printf "%s\n" "@%:@define HAVE_VSNPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" if test "x$ac_cv_func_getcwd" = xyes then : printf "%s\n" "@%:@define HAVE_GETCWD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes then : printf "%s\n" "@%:@define HAVE_SETLOCALE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = xyes then : printf "%s\n" "@%:@define HAVE_STRFTIME 1" >>confdefs.h fi @%:@ Check whether --enable-pam was given. if test ${enable_pam+y} then : enableval=$enable_pam; fi if test "$enable_pam" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PAM support" >&5 printf %s "checking for PAM support... " >&6; } oldlibs="$LIBS" LIBS="$LIBS -lpam" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { pam_start(0, 0, 0, 0); pam_authenticate(0, 0); pam_end(0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "@%:@define USE_PAM 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; };LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi @%:@ Check whether --enable-use-locale was given. if test ${enable_use_locale+y} then : enableval=$enable_use_locale; else $as_nop enable_use_locale=yes fi if test "$enable_use_locale" = "yes"; then printf "%s\n" "@%:@define USE_LOCALE 1" >>confdefs.h fi @%:@ Check whether --enable-telnet was given. if test ${enable_telnet+y} then : enableval=$enable_telnet; fi if test "$enable_telnet" = "yes"; then printf "%s\n" "@%:@define BUILTIN_TELNET 1" >>confdefs.h fi @%:@ Check whether --enable-colors256 was given. if test ${enable_colors256+y} then : enableval=$enable_colors256; fi if test "$enable_colors256" = "yes"; then printf "%s\n" "@%:@define COLORS256 1" >>confdefs.h fi @%:@ Check whether --enable-rxvt_osc was given. if test ${enable_rxvt_osc+y} then : enableval=$enable_rxvt_osc; fi if test "$enable_rxvt_osc" = "yes"; then printf "%s\n" "@%:@define RXVT_OSC 1" >>confdefs.h fi if test -z "$old_CFLAGS"; then if test "x$CFLAGS" = "x-g"; then CFLAGS="-O" fi fi test -n "$seqptx" && LIBS="-ltermcap -lc -lsocket -linet -lnsl -lsec -lseq" ETCSCREENRC= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the global screenrc file" >&5 printf %s "checking for the global screenrc file... " >&6; } @%:@ Check whether --with-sys-screenrc was given. if test ${with_sys_screenrc+y} then : withval=$with_sys_screenrc; ETCSCREENRC="${withval}" fi ac_config_files="$ac_config_files Makefile doc/Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default":C) # a hook for preserving undef directive in config.h mv config.h conftest sed -e 's@^\(.*\)defin.\( .*\) .*/\*\(.*KEEP_UNDEF_HERE\)@\1undef\2 /\*\3@' < conftest > config.h rm -f conftest ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" if test -z "$AWK"; then echo "!!! Since you have no awk you must copy the files 'comm.h.dist'" echo "!!! and 'term.h.dist' to 'comm.h' and 'term.h'." echo "!!! Do _not_ change the user configuration section in config.h!" echo "Please check the pathnames in the Makefile." else echo "Now please check the pathnames in the Makefile and in the user" echo "configuration section in config.h." fi echo "Then type 'make' to make screen. Good luck." echo "" screen-4.9.1/terminfo/0000775000175000017500000000000014467014146013304 5ustar alexalexscreen-4.9.1/terminfo/test.txt0000664000175000017500000011376314467014146015037 0ustar alexalex <(A)0[?4h[?5l lqqqqqqqqqwwwqqqqqqqqqk sssssssssssssssssssssssssssss xMerry Chrxxxmas * Merx \ / xry Christxxx * Merry x pr rp xChristmasxxxMerry Chrx oqrs srqo xistmas * xxxry Christx ooppqqwqwqqppoo tqqqqqqqqqjxmqqqqqqqqqu x x tqqqqqqqqqq`qqqqqqqqqqu x x tqqqqqqqqqkxlqqqqqqqqqu x x xry Christxxx * Merry x x x xChristmasxxxMerry Chrx x x xistmas * xxxry Christx x x xmas * MerxxxChristmasx srqqj mqqrs mqqqqqqqqqvvvqqqqqqqqqj  rqpo opqr  lmxx lqmqx x lqwmqvx xx x lqwqmqvqx x x x lqwqmqvqx x x x lqwqmqvqx x x x lqwqmqvqx x x x lqwqmqvqx x x x lqwqmqvqx x x x lqwqmqvqx x x x // // //  / / //  / /// //  //// //  //// // /  //// / /  // / // // / // / //s/ //  sssssssssss / / //  // / ss  / //  //  // rrrrrrrrrrr / /s //  // qqqqqqqqq //  //  // srqqqqqqqqqrs   //  /// srrs //  //// // rrqqqqrr /  //// / / ppppppp  // / // rrqqrr // / // / rqppppqr //s/ //  rqpppooooooopppqr / / //  // / qppoooooooooooppq  / //  //  // sssssssooo ooo. o f / /s //  //.f ssss .f //  //  // f ssssrrrrqqqqqrrrrsssss s   //  ///. . . sssrrrrqqqqqqqqqrrrrsssf f . f //  //// / f . rrrqqqqpppppppppqqqqrss. . o f /  //// / /f .f qqqppppooooooooopppqrss .f . s// / // f f sssssssssqppoooo oopqrss.o . // / // /f f. . ssrrrrrrrrrsqpooo opqrssf f f . f //s/ // f o o f . ssssssrrrrssssss   f o o .. . o f s/ //  /  . o o ff .f srrrrrrqqqqqqqqqqqqqqrrssrqf o o .  .f . / //  / mqvqqqqqq lqwqqqqqq x x x x . o f rqqqqqqppppppppppppppq mqvqqqqq lqwqqqqq x x x xf .o . o /s /  mqvqqqq lqwqqqq x x x x f f [14;51 qppppppoooooooooooooo mqvqqq lqwqqq x x x xf  .f f . f s /  mqvqq lqwqq x x x x. o f o o f f poooooo  mqvq lqwq x x x x o o of o o . rrrrrrrrrrrrrrrrrrrrrrrrrrrrr   mqv lqw x x x xo  mq lq x  x  . o o of o o .  .f .  m l x x. o o f o . . . o ff f     f o o f . ff .o . o #3 Cheers! #4 Cheers!   . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . #5 #5 f . o . f o ff  .f f . f  f f f . o f o o f f .  /ooooooooooooooo\  o o of o o .. . o f  / sss sss \ o o o . o o ff .f  x (sOs) (sOs) x  . o o of o o .  .f .  x ` x . o o f o . . . o ff f  \ \sssssssss/ / f o o f . ff .o . o  \ /  . o o . o f  f f . . .  \sssssssssss/ f . o . f o ff  .f f . f  ooppqqrrsss  f f f . o f o o f f .  ooppqqrrsss  o o of o o .. . o f  ooppqqrrsss o o o . o o ff .f  ooppqqrrsss  . o o of o o .  .f .  ooppqqrrsss . o o f o . . . o ff f  ooppqqrrsss f o o f . ff .o . o  ooppqqrrsss . o o . o f  f f . . . M x ` x f . o . f o ff  .f f . f M x (sOs) (sOs) x  f f f . o f o o f f . M / sss sss \  o o of o o .. . o f M /ooooooooooooooo\ o o o . o o ff .f M  . o o of o o .  .f . M . o o f o . . . o ff f M f o o f . ff .o . o M  . o o . o f  f f . . .  \ / f . o . f o ff  .f f . f  \sssssssssss/  f f f . o f o o f f .  ooppqqrrsss  o o of o o .. . o f  ooppqqrrsss o o o . o o ff .f  ooppqqrrsss  . o o of o o .  .f .  ooppqqrrsss . o o f o . . . o ff f  ooppqqrrsssf o o f . ff .o . o M / sss sss \  . o o . o f  f f . . . M /ooooooooooooooo\ f . o . f o ff  .f f . f M  f f f . o f o o f f . M  o o of o o .. . o f  ooppqqrrsss o o o . o o ff .f  ooppqqrrsss  . o o of o o .  .f .  ooppqqrrsss . o o f o . . . o ff f  ooppqqrrsssf o o f . ff .o . o M /ooooooooooooooo\  . o o . o f  f f . . . M f . o . f o ff  .f f . f M  f f f . o f o o f f . M  o o of o o .. . o f  \sssssssssss/ o o o . o o ff .f  ooppqqrrsss  . o o of o o .  .f .  ooppqqrrsss . o o f o . . . o ff f f o o f . ff .o . o Jin  . o o . o f  f f . . . gle f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f Bells,  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f Jin  . o o of o o .  .f . gle . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f Bells,  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f Jin  f f f . o f o o f f . gle  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f all f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f . the  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f way, f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f Oh! f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f . What  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f fun f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f . it  o o of o o .. . o f is o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o to  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f ride, o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f On o o o . o o ff .f a  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . one- f . o . f o ff  .f f . f horse  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f op  f f f . o f o o f f . en  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f . sleigh.  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff f  o o of o o  . o o o   f o o     o o o . o o ff f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff f  o o of o o  . o o o   f o o     Merry Christmas  -  o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff f  o o of o o  . o o o   f o o     o o o . o o ff f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff .f  . o o of o o .  .f . . o o f o . . . o ff f f o o f . ff .o . o  . o o . o f  f f . . . f . o . f o ff  .f f . f  f f f . o f o o f f .  o o of o o .. . o f o o o . o o ff f  o o of o o  . o o o   f o o     [?4l screen-4.9.1/terminfo/tetris.c0000664000175000017500000000267414467014146014773 0ustar alexalexlong h[4];t(){h[3]-=h[3]/3000;setitimer(0,h,0);}c,d,l,v[]={(int)t,0,2},w,s,I,K =0,i=276,j,k,q[276],Q[276],*n=q,*m,x=17,f[]={7,-13,-12,1,8,-11,-12,-1,9,-1,1, 12,3,-13,-12,-1,12,-1,11,1,15,-1,13,1,18,-1,1,2,0,-12,-1,11,1,-12,1,13,10,-12, 1,12,11,-12,-1,1,2,-12,-1,12,13,-12,12,13,14,-11,-1,1,4,-13,-12,12,16,-11,-12, 12,17,-13,1,-1,5,-12,12,11,6,-12,12,24};u(){for(i=11;++i<264;)if((k=q[i])-Q[i] ){Q[i]=k;if(i-++I||i%12<1)printf("\033[%d;%dH",(I=i)/12,i%12*2+28);printf( "\033[%dm "+(K-k?0:5),k);K=k;}Q[263]=c=getchar();}G(b){for(i=4;i--;)if(q[i?b+ n[i]:b])return 0;return 1;}g(b){for(i=4;i--;q[i?x+n[i]:x]=b);}main(C,V,a)char* *V,*a;{h[3]=1000000/(l=C>1?atoi(V[1]):2);for(a=C>2?V[2]:"jkl pq";i;i--)*n++=i< 25||i%12<2?7:0;srand(getpid());system("stty cbreak -echo stop u");sigvec(14,v, 0);t();puts("\033[H\033[J");for(n=f+rand()%7*4;;g(7),u(),g(0)){if(c<0){if(G(x+ 12))x+=12;else{g(7);++w;for(j=0;j<252;j=12*(j/12+1))for(;q[++j];)if(j%12==10){ for(;j%12;q[j--]=0);u();for(;--j;q[j+12]=q[j]);u();}n=f+rand()%7*4;G(x=17)||(c =a[5]);}}if(c==*a)G(--x)||++x;if(c==a[1])n=f+4**(m=n),G(x)||(n=m);if(c==a[2])G (++x)||--x;if(c==a[3])for(;G(x+12);++w)x+=12;if(c==a[4]||c==a[5]){s=sigblock( 8192);printf("\033[H\033[J\033[0m%d\n",w);if(c==a[5])break;for(j=264;j--;Q[j]= 0);while(getchar()-a[4]);puts("\033[H\033[J\033[7m");sigsetmask(s);}}d=popen( "stty -cbreak echo stop \023;sort -mnr -o HI - HI;cat HI","w");fprintf(d, "%4d from level %1d by %s\n",w,l,getlogin());pclose(d);} screen-4.9.1/terminfo/screeninfo.src0000664000175000017500000000764414467014146016163 0ustar alexalexscreen|VT 100/ANSI X3.64 virtual terminal, am, km, mir, msgr, xenl, cols#80, it#8, lines#24, colors#8, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, home=\E[H, ht=\t, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n, is2=\E)0, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kend=\E[4~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m, rs2=\Ec, sc=\E7, sgr0=\E[m, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g, smacs=^N, rmacs=^O, flash=\Eg, civis=\E[?25l, cnorm=\E[34h\E[?25h, cvvis=\E[34l, op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++\054\054hhII00, screen-bce|VT 100/ANSI X3.64 virtual terminal with bce, am, bce, km, mir, msgr, xenl, cols#80, it#8, lines#24, colors#8, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, home=\E[H, ht=\t, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n, is2=\E)0, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kend=\E[4~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m, rs2=\Ec, sc=\E7, sgr0=\E[m, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g, smacs=^N, rmacs=^O, flash=\Eg, civis=\E[?25l, cnorm=\E[34h\E[?25h, cvvis=\E[34l, op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++\054\054hhII00, screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line, am, bce, hs, km, mir, msgr, xenl, cols#80, it#8, lines#24, colors#8, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, home=\E[H, ht=\t, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n, is2=\E)0, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kend=\E[4~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m, rs2=\Ec, sc=\E7, sgr0=\E[m, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g, smacs=^N, rmacs=^O, flash=\Eg, tsl=\E_, fsl=\E\\, dsl=\E_\E\\, civis=\E[?25l, cnorm=\E[34h\E[?25h, cvvis=\E[34l, op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++\054\054hhII00, screen-256color|VT 100/ANSI X3.64 virtual terminal, ccc, colors#256, pairs#32767, initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\, setab=\E[48;5;%p1%dm, setaf=\E[38;5;%p1%dm, setb=\E[48;5;%p1%dm, setf=\E[38;5;%p1%dm, use=screen, screen-4.9.1/terminfo/README0000664000175000017500000000110214467014146014156 0ustar alexalex This directory contains various file for termcap/terminfo installation and testing: screencap Termcap entry for screen. Add it to /etc/termcap. On NetBSD, you should run /usr/bin/cap_mkdb afterwards. screeninfo.src Terminfo entry. Use 'tic screeninfo.src' to install (Sun: /usr/5bin/tic). checktc.c Termcap/info test program. Checks margin handling and other things. 8bits Some chars from the ISO 8859-1 charset. test.txt Test file for alternate charset. tetris.c The popular game, by John Tromp. This is one of the winners of the 1989 IOCCC contest. screen-4.9.1/terminfo/checktc.c0000664000175000017500000001055214467014146015057 0ustar alexalex#include char *CL, *CM, *CS, *SR; int CO, LI, AM, XN; char *tgetstr(), *getenv(); void PutStr(), CPutStr(), CCPutStr(), GotoPos(), RETURN(); main() { char *term, *s; char tcbuf[1024]; char tcstr[1024], *tp; if ((term = getenv("TERM")) == 0) { fprintf(stderr, "No $TERM set\n"); exit(1); } switch (tgetent(tcbuf, term)) { case -1: fprintf(stderr, "Could not open termcap file\n"); exit(1); case 0: fprintf(stderr, "I don't know what a '%s' terminal is.\n", term); exit(1); } tp = tcstr; if ((CL = tgetstr("cl", &tp)) == 0) { fprintf(stderr, "cl capability required\n"); exit(1); } if ((CM = tgetstr("cm", &tp)) == 0) { fprintf(stderr, "cm capability required\n"); exit(1); } if ((s = getenv("COLUMNS"))) CO = atoi(s); if ((s = getenv("LINES"))) LI = atoi(s); if (CO == 0) CO = tgetnum("co"); if (LI == 0) LI = tgetnum("li"); if (CO == 0) CO = 80; if (LI == 0) LI = 24; GotoPos(5, 1); printf("******* cl capability does not work !!! *******"); GotoPos(5, 2); PutStr(CL); printf("******* cl capability does not home cursor *******"); GotoPos(0, 0); printf(" "); GotoPos(5, 4); printf("******* cm capability does not work !!! *******"); GotoPos(5, 4); printf(" "); GotoPos(CO/2-12, LI/2); printf("Your terminal size is"); GotoPos(CO/2-3, LI/2+1); printf("%dx%d", CO, LI); GotoPos(CO/2-2, 0); printf("top"); GotoPos(CO/2-3, LI-1); printf("bottom"); GotoPos(0, LI/2-2);printf("l"); GotoPos(0, LI/2-1);printf("e"); GotoPos(0, LI/2+0);printf("f"); GotoPos(0, LI/2+1);printf("t"); GotoPos(CO-1, LI/2-2);printf("r"); GotoPos(CO-1, LI/2-1);printf("i"); GotoPos(CO-1, LI/2+0);printf("g"); GotoPos(CO-1, LI/2+1);printf("h"); GotoPos(CO-1, LI/2+2);printf("t"); GotoPos(CO/2-15, LI/2+3); RETURN(); AM = tgetflag("am"); printf("Termcap: terminal does %sauto-wrap", AM ? "" : "not "); GotoPos(0, 5); if (AM) { printf(" am capability set, but terminal does not wrap"); GotoPos(CO-1, 3); } else { printf(" am capability not set, but terminal does wrap"); GotoPos(CO-1, 4); } printf(" \n "); GotoPos(0, 10); RETURN(); if (AM) { XN = tgetflag("xn"); printf("Termcap: terminal has %smagic margins", XN ? "" : "no "); GotoPos(0, 5); if ((XN = tgetflag("xn"))) { printf(" xn capability set, but terminal has no magic-margins"); GotoPos(CO-1, 4); } else { printf(" xn capability not set, but terminal has magic-margins"); GotoPos(CO-1, 3); } printf(" \n"); printf(" "); GotoPos(0, 10); RETURN(); if (XN) { GotoPos(0, 6); printf(" last col in last row is not usable"); GotoPos(CO-1, LI-1); printf(" "); GotoPos(0, 6); printf(" "); GotoPos(0, 0); printf("testing magic margins in last row"); GotoPos(0, 10); RETURN(); } } if ((CS = tgetstr("cs", &tp))) { printf("Termcap: terminal has scrollregions"); GotoPos(0, 5); printf(" cs capability set, but doesn't work"); CCPutStr(CS, 4, 5); GotoPos(0, 5); printf("\n\n"); CCPutStr(CS, 0, LI-1); GotoPos(0, 10); RETURN(); } if ((SR = tgetstr("sr", &tp))) { GotoPos(0, 5); printf(" sr capability set, but doesn't work"); GotoPos(0, 0); PutStr(SR); GotoPos(0, 6); printf(" "); GotoPos(0, 0); printf("Termcap: terminal can scroll backwards"); GotoPos(0, 10); RETURN(); } } void putcha(c) char c; { putchar(c); } void PutStr(s) char *s; { tputs(s, 1, putcha); fflush(stdout); } void CPutStr(s, c) char *s; int c; { tputs(tgoto(s, 0, c), 1, putcha); fflush(stdout); } void CCPutStr(s, x, y) char *s; int x, y; { tputs(tgoto(s, y, x), 1, putcha); fflush(stdout); } void GotoPos(x,y) int x,y; { tputs(tgoto(CM, x, y), 1, putcha); fflush(stdout); } void RETURN() { printf("Press to continue"); fflush(stdout); while(getchar() != '\n'); PutStr(CL); } screen-4.9.1/terminfo/8bits0000664000175000017500000000132014467014146014254 0ustar alexalex We test some umlauts and other characters coded in the ISO 8859-1 (Latin 1) standard: umlaut A Ä umlaut a ä umlaut O Ö umlaut o ö umlaut U Ü umlaut u ü sharp s ß paragraph § e + / é e + \ è e + ^ ê a + \ à u + \ ù degree ° log. not ¬ + over - ± << « >> » fraction 1/2 ½ fraction 1/4 ¼ power of 2 ² middle dot · --- screen-4.9.1/terminfo/screencap0000664000175000017500000000222314467014146015171 0ustar alexalexSC|screen|VT 100/ANSI X3.64 virtual terminal:\ :am:xn:ms:mi:G0:km:\ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\ :cb=\E[1K:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\ :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\ :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\ :li#24:co#80:us=\E[4m:ue=\E[24m:so=\E[3m:se=\E[23m:\ :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[m:sr=\EM:al=\E[L:\ :AL=\E[%dL:dl=\E[M:DL=\E[%dM:cs=\E[%i%d;%dr:dc=\E[P:\ :DC=\E[%dP:im=\E[4h:ei=\E[4l:IC=\E[%d@:\ :ks=\E[?1h\E=:ke=\E[?1l\E>:vb=\Eg:\ :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:\ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\ :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\ :kh=\E[1~:kI=\E[2~:kD=\E[3~:kH=\E[4~:@7=\E[4~:kP=\E[5~:\ :kN=\E[6~:eA=\E(B\E)0:as=^N:ae=^O:ti=\E[?1049h:te=\E[?1049l:\ :vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\ :Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:\ :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00: SB|screen-bce|VT 100/ANSI X3.64 virtual terminal with bce:\ :ut:tc=screen: SH|screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line:\ :ts=\E_:fs=\E\\:ds=\E_\E\\:tc=screen: screen-4.9.1/help.c0000664000175000017500000005754314467014146012573 0ustar alexalex/* Copyright (c) 2010 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include "config.h" #include "screen.h" #include "extern.h" #include "list_generic.h" char version[60]; /* initialised by main() */ extern struct layer *flayer; extern struct display *display, *displays; extern struct win *windows; extern int maxwin; extern char *noargs[]; extern struct mchar mchar_blank, mchar_so; extern int renditions[]; extern unsigned char *blank; extern struct win **wtab; #ifdef MAPKEYS extern struct term term[]; #endif extern struct LayFuncs ListLf; static void PadStr __P((char *, int, int, int)); extern char *wliststr; extern char *wlisttit; void exit_with_usage(char *myname, char *message, char *arg) { printf("Use: %s [-opts] [cmd [args]]\n", myname); printf(" or: %s -r [host.tty]\n\nOptions:\n", myname); #ifdef BUILTIN_TELNET printf("-4 Resolve hostnames only to IPv4 addresses.\n"); printf("-6 Resolve hostnames only to IPv6 addresses.\n"); #endif printf("-a Force all capabilities into each window's termcap.\n"); printf("-A -[r|R] Adapt all windows to the new display width & height.\n"); printf("-c file Read configuration file instead of '.screenrc'.\n"); #ifdef REMOTE_DETACH printf("-d (-r) Detach the elsewhere running screen (and reattach here).\n"); printf("-dmS name Start as daemon: Screen session in detached mode.\n"); printf("-D (-r) Detach and logout remote (and reattach here).\n"); printf("-D -RR Do whatever is needed to get a screen session.\n"); #endif printf("-e xy Change command characters.\n"); printf("-f Flow control on, -fn = off, -fa = auto.\n"); printf("-h lines Set the size of the scrollback history buffer.\n"); printf("-i Interrupt output sooner when flow control is on.\n"); #if defined(LOGOUTOK) && defined(UTMPOK) printf("-l Login mode on (update %s), -ln = off.\n", UTMPFILE); #endif printf("-ls [match] or\n"); printf("-list Do nothing, just list our SockDir [on possible matches].\n"); printf("-L Turn on output logging.\n"); printf("-Logfile file Set logfile name.\n"); printf("-m ignore $STY variable, do create a new screen session.\n"); printf("-O Choose optimal output rather than exact vt100 emulation.\n"); printf("-p window Preselect the named window if it exists.\n"); printf("-q Quiet startup. Exits with non-zero return code if unsuccessful.\n"); printf("-Q Commands will send the response to the stdout of the querying process.\n"); printf("-r [session] Reattach to a detached screen process.\n"); printf("-R Reattach if possible, otherwise start a new session.\n"); printf("-s shell Shell to execute rather than $SHELL.\n"); printf("-S sockname Name this session .sockname instead of ...\n"); printf("-t title Set title. (window's name).\n"); printf("-T term Use term as $TERM for windows, rather than \"screen\".\n"); #ifdef UTF8 printf("-U Tell screen to use UTF-8 encoding.\n"); #endif printf("-v Print \"Screen version %s\".\n", version); printf("-wipe [match] Do nothing, just clean up SockDir [on possible matches].\n"); #ifdef MULTI printf("-x Attach to a not detached screen. (Multi display mode).\n"); #endif /* MULTI */ printf("-X Execute as a screen command in the specified session.\n"); if (message && *message) { printf("\nError: "); printf(message, arg); printf("\n"); exit(1); } exit(0); } /* Here come the help page routines */ extern struct comm comms[]; extern struct action ktab[]; static void HelpProcess __P((char **, int *)); static void HelpAbort __P((void)); static void HelpRedisplayLine __P((int, int, int, int)); static void add_key_to_buf __P((char *, int)); static void AddAction __P((struct action *, int, int)); static int helppage __P((void)); struct helpdata { char *class; struct action *ktabp; int maxrow, grow, numcols, numrows, num_names; int numskip, numpages; int command_search, command_bindings; int refgrow, refcommand_search; int inter, mcom, mkey; int nact[RC_LAST + 1]; }; #define MAXKLEN 256 static struct LayFuncs HelpLf = { HelpProcess, HelpAbort, HelpRedisplayLine, DefClearLine, DefRewrite, DefResize, DefRestore, 0 }; void display_help(char *class, struct action *ktabp) { int i, n, key, mcom, mkey, l, used[RC_LAST + 1]; struct helpdata *helpdata; if (flayer->l_height < 6) { LMsg(0, "Window height too small for help page"); return; } if (InitOverlayPage(sizeof(*helpdata), &HelpLf, 0)) return; helpdata = (struct helpdata *)flayer->l_data; helpdata->class = class; helpdata->ktabp = ktabp; helpdata->num_names = helpdata->command_bindings = 0; helpdata->command_search = 0; for (n = 0; n <= RC_LAST; n++) used[n] = 0; mcom = 0; mkey = 0; for (key = 0; key < 256 + KMAP_KEYS; key++) { n = ktabp[key].nr; if (n == RC_ILLEGAL) continue; if (ktabp[key].args == noargs) { used[n] += (key <= ' ' || key == 0x7f) ? 3 : (key > 0x7f) ? 5 : 2; } else helpdata->command_bindings++; } for (n = i = 0; n <= RC_LAST; n++) if (used[n]) { l = strlen(comms[n].name); if (l > mcom) mcom = l; if (used[n] > mkey) mkey = used[n]; helpdata->nact[i++] = n; } debug1("help: %d commands bound to keys with no arguments\n", i); debug2("mcom: %d mkey: %d\n", mcom, mkey); helpdata->num_names = i; if (mkey > MAXKLEN) mkey = MAXKLEN; helpdata->numcols = flayer->l_width / (mcom + mkey + 1); if (helpdata->numcols == 0) { HelpAbort(); LMsg(0, "Width too small"); return; } helpdata->inter = (flayer->l_width - (mcom + mkey) * helpdata->numcols) / (helpdata->numcols + 1); if (helpdata->inter <= 0) helpdata->inter = 1; debug1("inter: %d\n", helpdata->inter); helpdata->mcom = mcom; helpdata->mkey = mkey; helpdata->numrows = (helpdata->num_names + helpdata->numcols - 1) / helpdata->numcols; debug1("Numrows: %d\n", helpdata->numrows); helpdata->numskip = flayer->l_height-5 - (2 + helpdata->numrows); while (helpdata->numskip < 0) helpdata->numskip += flayer->l_height-5; helpdata->numskip %= flayer->l_height-5; debug1("Numskip: %d\n", helpdata->numskip); if (helpdata->numskip > flayer->l_height/3 || helpdata->numskip > helpdata->command_bindings) helpdata->numskip = 1; helpdata->maxrow = 2 + helpdata->numrows + helpdata->numskip + helpdata->command_bindings; helpdata->grow = 0; helpdata->numpages = (helpdata->maxrow + flayer->l_height-6) / (flayer->l_height-5); flayer->l_x = 0; flayer->l_y = flayer->l_height - 1; helppage(); } static void HelpProcess(char **ppbuf, int *plen) { int done = 0; while (!done && *plen > 0) { switch (**ppbuf) { case ' ': if (helppage() == 0) break; /* FALLTHROUGH */ case '\r': case '\n': done = 1; break; default: break; } ++*ppbuf; --*plen; } if (done) HelpAbort(); } static void HelpAbort() { LAY_CALL_UP(LRefreshAll(flayer, 0)); ExitOverlayPage(); } static int helppage() { struct helpdata *helpdata; int col, crow, n, key, x; char buf[MAXKLEN], Esc_buf[6], cbuf[MAXKLEN + 50]; struct action *ktabp; helpdata = (struct helpdata *)flayer->l_data; ktabp = helpdata->ktabp; if (helpdata->grow >= helpdata->maxrow) return -1; helpdata->refgrow = helpdata->grow; helpdata->refcommand_search = helpdata->command_search; /* Clear the help screen */ LClearAll(flayer, 0); sprintf(cbuf,"Screen key bindings, page %d of %d.", helpdata->grow / (flayer->l_height-5) + 1, helpdata->numpages); centerline(cbuf, 0); crow = 2; *Esc_buf = '\0'; *buf = '\0'; /* XXX fix escape character */ if (flayer->l_cvlist && flayer->l_cvlist->c_display) { add_key_to_buf(buf, flayer->l_cvlist->c_display->d_user->u_MetaEsc); add_key_to_buf(Esc_buf, flayer->l_cvlist->c_display->d_user->u_Esc); } else { strcpy(Esc_buf, "??"); strcpy(buf, "??"); } for (; crow < flayer->l_height - 3; crow++) { if (helpdata->grow < 1) { if (ktabp == ktab) sprintf(cbuf,"Command key: %s Literal %s: %s", Esc_buf, Esc_buf, buf); else sprintf(cbuf,"Command class: '%.80s'", helpdata->class); centerline(cbuf, crow); helpdata->grow++; } else if (helpdata->grow >= 2 && helpdata->grow-2 < helpdata->numrows) { x = 0; for (col = 0; col < helpdata->numcols && (n = helpdata->numrows * col + (helpdata->grow-2)) < helpdata->num_names; col++) { x += helpdata->inter - !col; n = helpdata->nact[n]; buf[0] = '\0'; for (key = 0; key < 256 + KMAP_KEYS; key++) if (ktabp[key].nr == n && ktabp[key].args == noargs && strlen(buf) < sizeof(buf) - 7) { strcat(buf, " "); add_key_to_buf(buf, key); } PadStr(comms[n].name, helpdata->mcom, x, crow); x += helpdata->mcom; PadStr(buf, helpdata->mkey, x, crow); x += helpdata->mkey; } helpdata->grow++; } else if (helpdata->grow-2-helpdata->numrows >= helpdata->numskip && helpdata->grow-2-helpdata->numrows-helpdata->numskip < helpdata->command_bindings) { while ((n = ktabp[helpdata->command_search].nr) == RC_ILLEGAL || ktabp[helpdata->command_search].args == noargs) { if (++helpdata->command_search >= 256 + KMAP_KEYS) return -1; } buf[0] = '\0'; add_key_to_buf(buf, helpdata->command_search); PadStr(buf, 5, 0, crow); AddAction(&ktabp[helpdata->command_search++], 5, crow); helpdata->grow++; } else helpdata->grow++; } sprintf(cbuf,"[Press Space %s Return to end.]", helpdata->grow < helpdata->maxrow ? "for next page;" : "or"); centerline(cbuf, flayer->l_height - 2); LaySetCursor(); return 0; } static void AddAction(struct action *act, int x, int y) { char buf[256]; int del, l, fr; char *bp, *cp, **pp; int *lp, ll; struct mchar mchar_dol; mchar_dol = mchar_blank; mchar_dol.image = '$'; fr = flayer->l_width - 1 - x; if (fr <= 0) return; l = strlen(comms[act->nr].name); if (l + 1 > fr) l = fr - 1; PadStr(comms[act->nr].name, l, x, y); x += l; fr -= l + 1; LPutChar(flayer, fr ? &mchar_blank : &mchar_dol, x++, y); pp = act->args; lp = act->argl; while (pp && (cp = *pp) != NULL) { del = 0; bp = buf; ll = *lp++; if (!ll || (index(cp, ' ') != NULL)) { if (index(cp, '\'') != NULL) *bp++ = del = '"'; else *bp++ = del = '\''; } while (ll-- && bp < buf + 250) bp += AddXChar(bp, *(unsigned char *)cp++); if (del) *bp++ = del; *bp = 0; if ((fr -= (bp - buf) + 1) < 0) { fr += bp - buf; if (fr > 0) PadStr(buf, fr, x, y); if (fr == 0) LPutChar(flayer, &mchar_dol, x, y); return; } PadStr(buf, strlen(buf), x, y); x += strlen(buf); pp++; if (*pp) LPutChar(flayer, fr ? &mchar_blank : &mchar_dol, x++, y); } } static void add_key_to_buf(char *buf, int key) { buf += strlen(buf); if (key < 0) strcpy(buf, "unset"); else if (key == ' ') strcpy(buf, "sp"); #ifdef MAPKEYS else if (key >= 256) { key = key - 256 + T_CAPS; buf[0] = ':'; buf[1] = term[key].tcname[0]; buf[2] = term[key].tcname[1]; buf[3] = ':'; buf[4] = 0; } #endif else buf[AddXChar(buf, key)] = 0; } static void HelpRedisplayLine(int y, int xs, int xe, int isblank) { if (y < 0) { struct helpdata *helpdata; helpdata = (struct helpdata *)flayer->l_data; helpdata->grow = helpdata->refgrow; helpdata->command_search = helpdata->refcommand_search; helppage(); return; } if (y != 0 && y != flayer->l_height - 1) return; if (!isblank) LClearArea(flayer, xs, y, xe, y, 0, 0); } /* here is all the copyright stuff */ static void CopyrightProcess __P((char **, int *)); static void CopyrightRedisplayLine __P((int, int, int, int)); static void CopyrightAbort __P((void)); static void copypage __P((void)); struct copydata { char *cps, *savedcps; /* position in the message */ char *refcps, *refsavedcps; /* backup for redisplaying */ }; static struct LayFuncs CopyrightLf = { CopyrightProcess, CopyrightAbort, CopyrightRedisplayLine, DefClearLine, DefRewrite, DefResize, DefRestore, 0 }; static const char cpmsg[] = "\ \n\ GNU Screen version %v\n\ \n\ Copyright (c) 2018-2023 Alexander Naumov, Amadeusz Slawinski\n\ Copyright (c) 2015-2017 Juergen Weigert, Alexander Naumov, Amadeusz Slawinski\n\ Copyright (c) 2010-2014 Juergen Weigert, Sadrul Habib Chowdhury\n\ Copyright (c) 2008-2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury\n\ Copyright (c) 1993-2007 Juergen Weigert, Michael Schroeder\n\ Copyright (c) 1987 Oliver Laumann\n\ \n\ This program is free software; you can redistribute it and/or \ modify it under the terms of the GNU General Public License as published \ by the Free Software Foundation; either version 3, or (at your option) \ any later version.\n\ \n\ This program is distributed in the hope that it will be useful, \ but WITHOUT ANY WARRANTY; without even the implied warranty of \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \ GNU General Public License for more details.\n\ \n\ You should have received a copy of the GNU General Public License \ along with this program (see the file COPYING); if not, see \ https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., \ 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA.\n\ \n\ Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to \ screen-devel@gnu.org\n\n\n" "Capabilities:\n" #ifdef COPY_PASTE "+copy " #else "-copy " #endif #ifdef REMOTE_DETACH "+remote-detach " #else "-remote-detach " #endif #ifdef POW_DETACH "+power-detach " #else "-power-detach " #endif #ifdef MULTI "+multi-attach " #else "-multi-attach " #endif #ifdef MULTIUSER "+multi-user " #else "-multi-user " #endif #ifdef FONT "+font " #else "-font " #endif #ifdef COLORS256 "+color-256 " #elif defined(COLORS16) "+color-16 " #elif defined(COLOR) "+color " #else "-color " #endif #ifdef UTF8 "+utf8 " #else "-utf8 " #endif #ifdef RXVT_OSC "+rxvt " #else "-rxvt " #endif #ifdef BUILTIN_TELNET "+builtin-telnet " #else "-builtin-telnet " #endif ; static void CopyrightProcess(char **ppbuf, int *plen) { int done = 0; struct copydata *copydata; copydata = (struct copydata *)flayer->l_data; while (!done && *plen > 0) { switch (**ppbuf) { case ' ': if (*copydata->cps) { copypage(); break; } /* FALLTHROUGH */ case '\r': case '\n': CopyrightAbort(); done = 1; break; default: break; } ++*ppbuf; --*plen; } } static void CopyrightAbort() { LAY_CALL_UP(LRefreshAll(flayer, 0)); ExitOverlayPage(); } void display_copyright() { struct copydata *copydata; if (flayer->l_width < 10 || flayer->l_height < 5) { LMsg(0, "Window size too small for copyright page"); return; } if (InitOverlayPage(sizeof(*copydata), &CopyrightLf, 0)) return; copydata = (struct copydata *)flayer->l_data; copydata->cps = (char *)cpmsg; copydata->savedcps = 0; flayer->l_x = 0; flayer->l_y = flayer->l_height - 1; copypage(); } static void copypage() { register char *cps; char *ws; int x, y, l; char cbuf[80]; struct copydata *copydata; ASSERT(flayer); copydata = (struct copydata *)flayer->l_data; LClearAll(flayer, 0); x = y = 0; cps = copydata->cps; copydata->refcps = cps; copydata->refsavedcps = copydata->savedcps; while (*cps && y < flayer->l_height - 3) { ws = cps; while (*cps == ' ') cps++; if (strncmp(cps, "%v", 2) == 0) { copydata->savedcps = cps + 2; cps = version; continue; } while (*cps && *cps != ' ' && *cps != '\n') cps++; l = cps - ws; cps = ws; if (l > flayer->l_width - 1) l = flayer->l_width - 1; if (x && x + l >= flayer->l_width - 2) { x = 0; y++; continue; } if (x) { LPutChar(flayer, &mchar_blank, x, y); x++; } if (l) LPutStr(flayer, ws, l, &mchar_blank, x, y); x += l; cps += l; if (*cps == 0 && copydata->savedcps) { cps = copydata->savedcps; copydata->savedcps = 0; } if (*cps == '\n') { x = 0; y++; } if (*cps == ' ' || *cps == '\n') cps++; } while (*cps == '\n') cps++; sprintf(cbuf,"[Press Space %s Return to end.]", *cps ? "for next page;" : "or"); centerline(cbuf, flayer->l_height - 2); copydata->cps = cps; LaySetCursor(); } static void CopyrightRedisplayLine(int y, int xs, int xe, int isblank) { ASSERT(flayer); if (y < 0) { struct copydata *copydata; copydata = (struct copydata *)flayer->l_data; copydata->cps = copydata->refcps; copydata->savedcps = copydata->refsavedcps; copypage(); return; } if (y != 0 && y != flayer->l_height - 1) return; if (isblank) return; LClearArea(flayer, xs, y, xe, y, 0, 0); } /* The bindkey help page */ #ifdef MAPKEYS extern struct kmap_ext *kmap_exts; extern int kmap_extn; extern struct action dmtab[]; extern struct action mmtab[]; static void BindkeyProcess __P((char **, int *)); static void BindkeyAbort __P((void)); static void BindkeyRedisplayLine __P((int, int, int, int)); static void bindkeypage __P((void)); struct bindkeydata { char *title; struct action *tab; int pos; int last; int page; int pages; }; static struct LayFuncs BindkeyLf = { BindkeyProcess, BindkeyAbort, BindkeyRedisplayLine, DefClearLine, DefRewrite, DefResize, DefRestore, 0 }; void display_bindkey(char *title, struct action *tab) { struct bindkeydata *bindkeydata; int i, n; if (flayer->l_height < 6) { LMsg(0, "Window height too small for bindkey page"); return; } if (InitOverlayPage(sizeof(*bindkeydata), &BindkeyLf, 0)) return; bindkeydata = (struct bindkeydata *)flayer->l_data; bindkeydata->title = title; bindkeydata->tab = tab; n = 0; for (i = 0; i < KMAP_KEYS+KMAP_AKEYS+kmap_extn; i++) { if (tab[i].nr != RC_ILLEGAL) n++; } bindkeydata->pos = 0; bindkeydata->page = 1; bindkeydata->pages = (n + flayer->l_height - 6) / (flayer->l_height - 5); if (bindkeydata->pages == 0) bindkeydata->pages = 1; flayer->l_x = 0; flayer->l_y = flayer->l_height - 1; bindkeypage(); } static void BindkeyAbort() { LAY_CALL_UP(LRefreshAll(flayer, 0)); ExitOverlayPage(); } static void bindkeypage() { struct bindkeydata *bindkeydata; struct kmap_ext *kme; char tbuf[256]; int del, i, y, sl; struct action *act; char *xch, *s, *p; bindkeydata = (struct bindkeydata *)flayer->l_data; LClearAll(flayer, 0); sprintf(tbuf, "%s key bindings, page %d of %d.", bindkeydata->title, bindkeydata->page, bindkeydata->pages); centerline(tbuf, 0); y = 2; for (i = bindkeydata->pos; i < KMAP_KEYS+KMAP_AKEYS+kmap_extn && y < flayer->l_height - 3; i++) { p = tbuf; xch = " "; if (i < KMAP_KEYS) { act = &bindkeydata->tab[i]; if (act->nr == RC_ILLEGAL) continue; del = *p++ = ':'; s = term[i + T_CAPS].tcname; sl = s ? strlen(s) : 0; } else if (i < KMAP_KEYS+KMAP_AKEYS) { act = &bindkeydata->tab[i]; if (act->nr == RC_ILLEGAL) continue; del = *p++ = ':'; s = term[i + (T_CAPS - T_OCAPS + T_CURSOR)].tcname; sl = s ? strlen(s) : 0; xch = "[A]"; } else { kme = kmap_exts + (i - (KMAP_KEYS+KMAP_AKEYS)); del = 0; s = kme->str; sl = kme->fl & ~KMAP_NOTIMEOUT; if ((kme->fl & KMAP_NOTIMEOUT) != 0) xch = "[T]"; act = bindkeydata->tab == dmtab ? &kme->dm : bindkeydata->tab == mmtab ? &kme->mm : &kme->um; if (act->nr == RC_ILLEGAL) continue; } while (sl-- > 0) p += AddXChar(p, *(unsigned char *)s++); if (del) *p++ = del; *p++ = ' '; while (p < tbuf + 15) *p++ = ' '; sprintf(p, "%s -> ", xch); p += 7; if (p - tbuf > flayer->l_width - 1) { tbuf[flayer->l_width - 2] = '$'; tbuf[flayer->l_width - 1] = 0; } PadStr(tbuf, strlen(tbuf), 0, y); AddAction(act, strlen(tbuf), y); y++; } y++; bindkeydata->last = i; sprintf(tbuf,"[Press Space %s Return to end.]", bindkeydata->page < bindkeydata->pages ? "for next page;" : "or"); centerline(tbuf, flayer->l_height - 2); LaySetCursor(); } static void BindkeyProcess(char **ppbuf, int *plen) { int done = 0; struct bindkeydata *bindkeydata; bindkeydata = (struct bindkeydata *)flayer->l_data; while (!done && *plen > 0) { switch (**ppbuf) { case ' ': if (bindkeydata->page < bindkeydata->pages) { bindkeydata->pos = bindkeydata->last; bindkeydata->page++; bindkeypage(); break; } /* FALLTHROUGH */ case '\r': case '\n': done = 1; break; default: break; } ++*ppbuf; --*plen; } if (done) BindkeyAbort(); } static void BindkeyRedisplayLine(int y, int xs, int xe, int isblank) { if (y < 0) { bindkeypage(); return; } if (y != 0 && y != flayer->l_height - 1) return; if (!isblank) LClearArea(flayer, xs, y, xe, y, 0, 0); } #endif /* MAPKEYS */ /* The zmodem active page */ #ifdef ZMODEM static void ZmodemRedisplayLine __P((int, int, int, int)); static int ZmodemResize __P((int, int)); static struct LayFuncs ZmodemLf = { DefProcess, 0, ZmodemRedisplayLine, DefClearLine, DefRewrite, ZmodemResize, DefRestore, 0 }; /*ARGSUSED*/ static int ZmodemResize(int wi, int he) { flayer->l_width = wi; flayer->l_height = he; flayer->l_x = flayer->l_width > 32 ? 32 : 0; return 0; } static void ZmodemRedisplayLine(int y, int xs, int xe, int isblank) { DefRedisplayLine(y, xs, xe, isblank); if (y == 0 && xs == 0) LPutStr(flayer, "Zmodem active on another display", flayer->l_width > 32 ? 32 : flayer->l_width, &mchar_blank, 0, 0); } void ZmodemPage() { if (InitOverlayPage(1, &ZmodemLf, 1)) return; LRefreshAll(flayer, 0); flayer->l_x = flayer->l_width > 32 ? 32 : 0; flayer->l_y = 0; } #endif static void PadStr(char *str, int n, int x, int y) { int l; l = strlen(str); if (l > n) l = n; LPutStr(flayer, str, l, &mchar_blank, x, y); if (l < n) LPutStr(flayer, (char *)blank, n - l, &mchar_blank, x + l, y); } screen-4.9.1/braille.c0000664000175000017500000004712614467014146013251 0ustar alexalex/* * A braille interface to unix tty terminals * * Authors: Hadi Bargi Rangin bargi@dots.physics.orst.edu * Bill Barry barryb@dots.physics.orst.edu * * Copyright (c) 1995 by Science Access Project, Oregon State University. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include #include #include "config.h" #include "screen.h" #include "extern.h" #include "braille.h" #ifdef HAVE_BRAILLE extern int bd_init_powerbraille_40 __P((void)); extern int bd_init_powerbraille_80 __P((void)); extern int bd_init_navigator_40 __P((void)); extern struct layer *flayer; extern struct display *displays, *display; extern char *rc_name; /* global variables */ struct braille_display bd; struct bd_type { char *name; int (*init) __P((void)); }; static struct bd_type bd_typelist[] = { {"powerbraille_40", bd_init_powerbraille_40}, {"powerbraille_80", bd_init_powerbraille_80}, {"navigator_40" , bd_init_navigator_40} }; static void position_braille_cursor __P((void)); static int initialize_braille_display_type __P((char *)); static int open_braille_device __P(()); static int load_braille_table __P((char *)); static void bd_signal __P((void)); static void bd_bc_left __P((void)); static void bd_bc_right __P((void)); static void bd_bc_up __P((void)); static void bd_bc_down __P((void)); static void bd_upper_left __P((void)); static void bd_upper_right __P((void)); static void bd_lower_left __P((void)); static void bd_lower_right __P((void)); static int bd_do_search __P((int, int, int)); static void bd_normalize __P((int, int)); static void bd_readev_fn __P((struct event *, char *)); static void bd_writeev_fn __P((struct event *, char *)); static void bd_selectev_fn __P((struct event *, char *)); static unsigned char btable_local [] = { 0xC8,0xC1,0xC3,0xC9,0xD9,0xD1,0xCB,0xDB, 0xD3,0xCA,0xDA,0xC5,0xC7,0xCD,0xDD,0xD5, 0xCF,0xDF,0xD7,0xCE,0xDE,0xE5,0xE7,0xFA, 0xED,0xFD,0xF5,0xEA,0xF3,0xFB,0xD8,0xF8, 0x00,0x2E,0x10,0x3C,0x2B,0x29,0x2F,0x04, 0x37,0x3E,0x21,0x2C,0x20,0x24,0x28,0x0C, 0x34,0x02,0x06,0x12,0x32,0x22,0x16,0x36, 0x26,0x14,0x31,0x30,0x23,0x3F,0x1C,0x39, 0x48,0x41,0x43,0x49,0x59,0x51,0x4B,0x5B, 0x53,0x4A,0x5A,0x45,0x47,0x4D,0x5D,0x55, 0x4F,0x5F,0x57,0x4E,0x5E,0x65,0x67,0x7A, 0x6D,0x7D,0x75,0x6A,0x73,0x7B,0x58,0x38, 0x08,0x01,0x03,0x09,0x19,0x11,0x0B,0x1B, 0x13,0x0A,0x1A,0x05,0x07,0x0D,0x1D,0x15, 0x0F,0x1F,0x17,0x0E,0x1E,0x25,0x27,0x3A, 0x2D,0x3D,0x35,0x2A,0x33,0x3B,0x18,0x78, 0x88,0x81,0x83,0x89,0x99,0x91,0x8B,0x9B, 0x93,0x8A,0x9A,0x85,0x87,0x8D,0x9D,0x95, 0x8F,0x9F,0x97,0x8E,0x9E,0xA5,0xA7,0xBA, 0xAD,0xBD,0xB5,0xAA,0xB3,0xBB,0x98,0xB8, 0x40,0x6E,0x50,0x7C,0x6B,0x69,0x6F,0x44, 0x77,0x7E,0x61,0x6C,0x60,0x64,0x68,0x4C, 0x74,0x42,0x46,0x52,0x72,0x62,0x56,0x76, 0x66,0x54,0x71,0x70,0x63,0x7F,0x5C,0x79, 0xC0,0xEE,0xD0,0xFC,0xEB,0xE9,0xEF,0xC4, 0xF7,0xFE,0xE1,0xEC,0xE0,0xE4,0xE8,0xCC, 0xF4,0xC2,0xC6,0xD2,0xF2,0xE2,0xD6,0xF6, 0xE6,0xD4,0xF1,0xF0,0xE3,0xFF,0xDC,0xF9, 0x80,0xAE,0x90,0xBC,0xAB,0xA9,0xAF,0x84, 0xB7,0xBE,0xA1,0xAC,0xA0,0xA4,0xA8,0x8C, 0xB4,0x82,0x86,0x92,0xB2,0xA2,0x96,0xB6, 0xA6,0x94,0xB1,0xB0,0xA3,0xBF,0x9C,0xB9 }; void InitBraille() { bd.bd_start_braille=0; bd.bd_port = 0; bd.bd_braille_table = SaveStr("internal us-braille.tbl"); bd.bd_type = 0; bd.bd_baud = 9600; bd.bd_bell = 1; bd.bd_eightdot = 1; bd.bd_info = 0; bd.bd_link = 1; bd.bd_ncells = 0; bd.bd_width = 0; bd.bd_ncrc = 1; bd.bd_scroll = 1; bd.bd_skip = 0; bd.bd_using_braille = 0; bd.bd_obuflen = 0; bd.bd_fd = -1; bcopy((char *)btable_local, bd.bd_btable, 256); } static int initialize_braille_display_type(s) char *s; { int i; for (i = 0; i < sizeof(bd_typelist)/sizeof(*bd_typelist); i++) if (!strcmp(s, bd_typelist[i].name)) break; if (i == sizeof(bd_typelist)/sizeof(*bd_typelist)) { Msg(0, "No entry for bd_type: %s ", s); return -1; } bd.bd_type = bd_typelist[i].name; if ((*bd_typelist[i].init)()) return -1; if (!bd.bd_width) bd.bd_width = bd.bd_ncells; return 0; } void StartBraille() { bd.bd_dpy = displays; debug("StartBraille called\n"); evdeq(&bd.bd_readev); evdeq(&bd.bd_writeev); evdeq(&bd.bd_selectev); bd.bd_using_braille = 0; if (!bd.bd_start_braille) return; if (bd.bd_type == 0 || bd.bd_port == 0) return; if (bd.bd_fd < 0 && open_braille_device()) { Msg(0, "bd_port turned off"); free(bd.bd_port); bd.bd_port = 0; return; } /* check if braille display is connected and turned on */ if (bd.bd_response_test()) { Msg(0, "Make sure that braille display is connected and turned on. "); Msg(0, "start_braille turned off"); bd.bd_start_braille = 0; } else { bd.bd_using_braille = 1; bd.bd_readev.fd = bd.bd_writeev.fd = bd.bd_fd; bd.bd_readev.type = EV_READ; bd.bd_writeev.type = EV_WRITE; bd.bd_selectev.type = EV_ALWAYS; bd.bd_readev.data = bd.bd_writeev.data = bd.bd_selectev.data = (char *)&bd; bd.bd_readev.handler = bd_readev_fn; bd.bd_writeev.handler = bd_writeev_fn; bd.bd_selectev.handler = bd_selectev_fn; evenq(&bd.bd_readev); bd.bd_writeev.condpos = &bd.bd_obuflen; bd.bd_writeev.condneg = 0; evenq(&bd.bd_writeev); bd.bd_selectev.pri = -20; evenq(&bd.bd_selectev); } } static int load_braille_table(tablename) char *tablename; { int i, j, c, p; FILE *fp; char buffer[80], a[10]; if ((fp = secfopen(tablename, "r")) == 0) { Msg(errno, "Braille table not found: %s ", tablename); return -1; } bzero(bd.bd_btable, 256); /* format: * Dec Hex Braille Description * 7 07 (12-45--8) BEL */ while (fgets(buffer, sizeof(buffer), fp)) { if (buffer[0] == '#') continue; sscanf(buffer,"%d %x %8s", &i, &j, a); if (i < 0 || i > 255) continue; for (j=1, p=1, c=0; j<9; j++, p*=2) if (a[j] == '0' + j) c += p; bd.bd_btable[i] = c; } fclose(fp); return 0; } static int open_braille_device(s) char *s; { char str[256]; sprintf(str, "%d cs8 -istrip ixon ixoff", bd.bd_baud); bd.bd_fd = OpenTTY(bd.bd_port, str); if (bd.bd_fd == -1) { Msg(errno, "open comm port failed: %s ", bd.bd_port); return -1; } fcntl(bd.bd_fd, F_SETFL, FNBLOCK); return 0; } static void position_braille_cursor() { int sx = bd.bd_sx; int bx = BD_FORE->w_bd_x; int eol = BD_FORE->w_width; int w = bd.bd_width; if (bd.bd_scroll) bx = sx - w + bd.bd_ncrc; /* keep rc centered in window */ else bx = w * (int)(sx / w); /* increase bc in integral steps */ if (bx > eol - w) bx = eol - w; if (bx < 0) bx = 0; BD_FORE->w_bd_x = bx; BD_FORE->w_bd_y = bd.bd_sy; } void RefreshBraille() { int i, y, xs, xe; int cursor_pos; if (!bd.bd_using_braille) return; if (!BD_FORE) return; bcopy(bd.bd_line, bd.bd_oline, bd.bd_ncells); bd.bd_refreshing = 1; flayer = bd.bd_dpy->d_forecv->c_layer; bd.bd_sx = flayer->l_x; bd.bd_sy = flayer->l_y; display = bd.bd_dpy; if ((D_obufp != D_obuf) && bd.bd_link) { /* jump to real cursor */ debug("calling position_braille_cursor\n"); position_braille_cursor(); } bclear(bd.bd_line, bd.bd_ncells); y = BD_FORE->w_bd_y; xs = BD_FORE->w_bd_x; if (bd.bd_info & 1) { sprintf(bd.bd_line, "%02d%02d", (BD_FORE->w_bd_x + 1) % 100, (BD_FORE->w_bd_y + 1) % 100); bd.bd_line[4] = ' '; } if (bd.bd_info & 2) { sprintf(bd.bd_line + bd.bd_ncells - 4, "%02d%02d",(bd.bd_sx +1) % 100, (bd.bd_sy +1) % 100); } xe = xs + bd.bd_width - 1; if (xs > flayer->l_width - 1) xs = flayer->l_width - 1; if (xe > flayer->l_width - 1) xe = flayer->l_width - 1; if (D_status) { sprintf(bd.bd_line, "**%-*.*s", bd.bd_ncells - 2, bd.bd_ncells - 2, D_status_lastmsg ? D_status_lastmsg : "unknown msg"); xs = xe = -1; } else if (xs <= xe) { LayRedisplayLine(-1, xs, xe, 1); LayRedisplayLine(y, xs, xe, 1); } debug1("Braille: got >%s<\n", bd.bd_line); bd.bd_refreshing = 0; if (y == bd.bd_sy && xs <= bd.bd_sx && bd.bd_sx <= xe) cursor_pos = bd.bd_sx - xs + (bd.bd_info & 1 ? 4 : 0); else cursor_pos = bd.bd_ncells; for (i = 0; i < bd.bd_ncells; i++) if (bd.bd_line[i] != bd.bd_oline[i]) break; if (bd.bd_cursorpos != cursor_pos || i < bd.bd_ncells) bd.write_line_braille(bd.bd_line, bd.bd_ncells, cursor_pos); bd.bd_cursorpos = cursor_pos; } /********************************************************************** * */ /* * So, why is there a Flush() down below? The reason is simple: the * cursor warp (if bd_link is on) checks the obuf to see if something * happened. If there would be no Flush, screen would warp the * bd cursor if a bd movement command tries to ring the bell. * (In other words: this is a gross hack!) */ static void bd_signal() { if (!bd.bd_bell) return; display = bd.bd_dpy; if (D_obufp != D_obuf) AddCStr(D_BL); else { AddCStr(D_BL); Flush(0); } } static int bd_do_search(y, xs, xe) int y, xs, xe; { int oy = BD_FORE->w_bd_y; if (!bd.bd_skip) /* no skip mode, found it */ { if (xs > xe) return 0; bd.bd_searchmin = xs; bd.bd_searchmax = xe; return 1; } flayer = bd.bd_dpy->d_forecv->c_layer; bd.bd_searchmax = -1; bd.bd_searchmin = flayer->l_width; if (xs <= xe) { BD_FORE->w_bd_y = y; /* stupid hack */ bd.bd_refreshing = bd.bd_searching = 1; bd.bd_searchstart = xs; bd.bd_searchend = xe; LayRedisplayLine(-1, xs, xe, 1); LayRedisplayLine(y, xs, xe, 1); bd.bd_refreshing = bd.bd_searching = 0; BD_FORE->w_bd_y = oy; } return bd.bd_searchmax >= 0; } static void bd_normalize(x, y) int x, y; { if (x > BD_FORE->w_width - bd.bd_width) x = BD_FORE->w_width - bd.bd_width; if (x < 0) x = 0; if (y < 0) { bd_signal(); y = 0; } if (y >= BD_FORE->w_height) { bd_signal(); y = BD_FORE->w_height - 1; } if (x != BD_FORE->w_bd_x || y != BD_FORE->w_bd_y) bd.bd_moved = 1; BD_FORE->w_bd_x = x; BD_FORE->w_bd_y = y; } static void bd_bc_left() { int bx = BD_FORE->w_bd_x, by = BD_FORE->w_bd_y; int ex; ex = bx - 1; bx = 0; for (; by >= 0; by--) { if (bd_do_search(by, 0, ex)) { if (!bd.bd_skip && by != BD_FORE->w_bd_y) bd_signal(); bx = bd.bd_searchmax + 1 - bd.bd_width; break; } ex = BD_FORE->w_width - 1; } bd_normalize(bx, by); } static void bd_bc_right() { int bx = BD_FORE->w_bd_x, by = BD_FORE->w_bd_y; int sx; sx = bx + bd.bd_width; bx = BD_FORE->w_width - bd.bd_width; for (; by < BD_FORE->w_height; by++) { if (bd_do_search(by, sx, BD_FORE->w_width - 1)) { if (!bd.bd_skip && by != BD_FORE->w_bd_y) bd_signal(); bx = bd.bd_searchmin; break; } sx = 0; } bd_normalize(bx, by); } static void bd_bc_up() { int bx = BD_FORE->w_bd_x, by = BD_FORE->w_bd_y; for (by--; by >= 0; by--) if (bd_do_search(by, bx, bx + bd.bd_width - 1)) break; bd_normalize(bx, by); } static void bd_bc_down() { int bx = BD_FORE->w_bd_x, by = BD_FORE->w_bd_y; for (by++; by < BD_FORE->w_height; by++) if (bd_do_search(by, bx, bx + bd.bd_width - 1)) break; bd_normalize(bx, by); } static void bd_upper_left() { bd_normalize(0, 0); } static void bd_upper_right() { bd_normalize(BD_FORE->w_width - bd.bd_width, 0); } static void bd_lower_left() { bd_normalize(0, BD_FORE->w_height - 1); } static void bd_lower_right() { bd_normalize(BD_FORE->w_width - bd.bd_width, BD_FORE->w_height -1); } /********************************************************************** * */ static void bd_check(x, c) int x, c; { if (c == ' ') return; if (x < bd.bd_searchstart || x > bd.bd_searchend) return; if (x > bd.bd_searchmax) bd.bd_searchmax = x; if (x < bd.bd_searchmin) bd.bd_searchmin = x; } /*ARGSUSED*/ void BGotoPos(la, x, y) struct layer *la; int x, y; { } /*ARGSUSED*/ void BCDisplayLine(la, ml, y, xs, xe, isblank) struct layer *la; struct mline *ml; int y, xs, xe; int isblank; { int x; int sx, ex; char *l; if (y != BD_FORE->w_bd_y) return; if (bd.bd_searching) { for (x = xs; x <= xe; x++) bd_check(x, ml->image[x]); return; } l = bd.bd_line; sx = BD_FORE->w_bd_x; ex = sx + bd.bd_width - 1; if (bd.bd_info & 1) l += 4; for (x = xs; x <= xe; x++) if (x >= sx && x <= ex) l[x - sx] = ml->image[x]; } /*ARGSUSED*/ void BPutChar(la, c, x, y) struct layer *la; struct mchar *c; int x, y; { int sx, ex; char *l; if (y != BD_FORE->w_bd_y) return; if (bd.bd_searching) { bd_check(x, c->image); return; } l = bd.bd_line; sx = BD_FORE->w_bd_x; ex = sx + bd.bd_width - 1; if (bd.bd_info & 1) l += 4; if (x >= sx && x <= ex) l[x - sx] = c->image; } /*ARGSUSED*/ void BPutStr(la, s, n, r, x, y) struct layer *la; char *s; int n; struct mchar *r; int x, y; { int sx, ex; char *l; if (y != BD_FORE->w_bd_y) return; if (bd.bd_searching) { for (; n > 0; n--, s++, x++) bd_check(x, *s); return; } l = bd.bd_line; sx = BD_FORE->w_bd_x; ex = sx + bd.bd_width - 1; if (bd.bd_info & 1) l += 4; for (; n > 0; n--, s++, x++) if (x >= sx && x <= ex) l[x - sx] = *s; } /********************************************************************** * */ static char *infonames[] = {"none", "bc", "sc", "bc+sc"}; void DoBrailleAction(act, msgok) struct action *act; int msgok; { int nr, dosig; int n, l, o; char *s, **args; struct stat st; nr = act->nr; args = act->args; dosig = display && !*rc_name; switch(nr) { case RC_BD_BELL: if (ParseSwitch(act, &bd.bd_bell) || !msgok) { bd_signal(); break; } Msg(0, bd.bd_bell ? "bd_bell is on." : "bd_bell is off."); break; case RC_BD_EIGHTDOT: if (ParseSwitch(act, &bd.bd_eightdot) || !msgok) break; Msg(0, "switched to %d-dots system.", bd.bd_eightdot ? 8 : 6); break; case RC_BD_INFO: n = bd.bd_info; if (*args) { if (strlen(*args) == 4) n = args[0][n] - '0'; else if (ParseNum(act, &n)) break; } if (n < 0 || n > 3) { Msg(0, "Out of range; 0 <= bd_info >= 3 "); break; } /* bd_width at the beginning is unknown */ if (bd.bd_width == 0) break; o = (bd.bd_info * 2 + 2) & 12; l = (n * 2 + 2) & 12; if (l >= bd.bd_ncells) { Msg(0, "bd_info is too large for braille display."); break; } if (l >= bd.bd_width + o) { Msg(0, "bd_info is too large for bd_width."); break; } bd.bd_width += o - l; bd.bd_info = n; if (msgok) Msg(0, "bd_info is %s.", infonames[n]); position_braille_cursor(); break; case RC_BD_LINK: if (*args == 0 && bd.bd_moved) bd.bd_link = 0; if (ParseSwitch(act, &bd.bd_link)) break; if (bd.bd_link) { bd.bd_moved = 0; if (dosig) bd_signal(); position_braille_cursor(); } if (msgok) Msg(0, bd.bd_link ? "bd_link is on." : "bd_link is off."); break; case RC_BD_SKIP: if (ParseSwitch(act, &bd.bd_skip)) break; if (bd.bd_skip && dosig) bd_signal(); if (msgok) Msg(0, bd.bd_skip ? "bd_skip is on." : "bd_skip is off."); break; case RC_BD_SCROLL: if (ParseSwitch(act, &bd.bd_scroll) || !msgok) { position_braille_cursor(); break; } Msg(0, bd.bd_scroll ? "bd_scroll is on." : "bd_scroll is off."); break; case RC_BD_NCRC: n = bd.bd_ncrc; if (*args) { if (args[0][0] == '+') n = (n + atoi(*args + 1)) % bd.bd_width + 1; else if (args[0][0] == '-') n = (n - atoi(*args + 1)) % bd.bd_width + 1; else if (ParseNum(act, &n)) break; } if (n < 1 || n > bd.bd_width) { Msg(0, "Out of range; 1 <= bd_ncrc >= %d", bd.bd_width); break; } bd.bd_ncrc = n; if (msgok) Msg(0, "bd_ncrc status is: %d ", bd.bd_ncrc); position_braille_cursor(); break; case RC_BD_BRAILLE_TABLE: s = 0; if (*args) { if (ParseSaveStr(act, &s)) break; if (load_braille_table(s)) { free(s); break; } if (bd.bd_braille_table) free(bd.bd_braille_table); bd.bd_braille_table = s; } if (msgok) Msg(0, "bd_braille_table is: %s ", bd.bd_braille_table); break; case RC_BD_PORT: s = 0; if (*args) { if (ParseSaveStr(act, &s)) break; if (stat(s, &st) || !S_ISCHR(st.st_mode) || access(s, R_OK|W_OK)) { Msg(0, "Cannot access braille device port %s", s); free(s); break; } if (bd.bd_fd >= 0) close(bd.bd_fd); bd.bd_fd = -1; if (bd.bd_port) free(bd.bd_port); bd.bd_port = s; } if (msgok) Msg(0, "bd_port is: %s ", bd.bd_port ? bd.bd_port : "not set"); StartBraille(); break; case RC_BD_TYPE: s = 0; if (*args) if (ParseSaveStr(act, &s) || initialize_braille_display_type(s)) break; if (msgok) Msg(0, "bd_type is: %s ", bd.bd_type ? bd.bd_type : "not set"); StartBraille(); break; case RC_BD_START_BRAILLE: if (ParseSwitch(act, &bd.bd_start_braille)) break; if (msgok) Msg(0, bd.bd_start_braille ? "bd_start_braille is on." : "bd_start_braille is off."); StartBraille(); break; case RC_BD_WIDTH: n = bd.bd_width; if (*args) { if (ParseNum(act, &n)) break; } if (n <= 0) { Msg(0, "Invalid value for bd_width: %d ", n); break; } l = (bd.bd_info * 2 + 2) & 12; if (n > bd.bd_ncells - l || n < l) { Msg(0, "bd_info is too large for bd_width."); break; } bd.bd_width = n; if (msgok) Msg(0, "bd_width is: %d ", bd.bd_width); break; case RC_BD_BC_LEFT: bd_bc_left(); break; case RC_BD_BC_RIGHT: bd_bc_right(); break; case RC_BD_BC_UP: bd_bc_up(); break; case RC_BD_BC_DOWN: bd_bc_down(); break; case RC_BD_UPPER_LEFT: bd_upper_left(); break; case RC_BD_UPPER_RIGHT: bd_upper_right(); break; case RC_BD_LOWER_LEFT: bd_lower_left(); break; case RC_BD_LOWER_RIGHT: bd_lower_right(); break; default: break; } } static void bd_readev_fn(ev, data) struct event *ev; char *data; { bd.buttonpress(); } static void bd_writeev_fn(ev, data) struct event *ev; char *data; { int len; if (bd.bd_obuflen == 0) return; if ((len = write(bd.bd_fd, bd.bd_obuf, bd.bd_obuflen)) < 0) len = bd.bd_obuflen; /* dead braille display */ if ((bd.bd_obuflen -= len)) bcopy(bd.bd_obuf + len, bd.bd_obuf, bd.bd_obuflen); } static void bd_selectev_fn(ev, data) struct event *ev; char *data; { RefreshBraille(); } #endif /* HAVE_BRAILLE */ screen-4.9.1/install.sh0000775000175000017500000000421314467014146013466 0ustar alexalex#! /bin/sh # # install - install a program, script, or datafile # This comes from X11R5; it is not part of GNU. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" instcmd="$mvprog" chmodcmd="" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; *) if [ x"$src" = x ] then src=$1 else dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` fi # Make a temp file name in the proper directory. dstdir=`dirname $dst` dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp # and set any options; do chmod last to preserve setuid bits if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi # Now rename the file to the real destination. $doit $rmcmd $dst $doit $mvcmd $dsttmp $dst exit 0 screen-4.9.1/fileio.c0000664000175000017500000004365014467014146013104 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include #include #include #ifndef SIGINT # include #endif #include "config.h" #include "screen.h" #include "extern.h" extern struct display *display, *displays; extern struct win *fore; extern struct layer *flayer; extern int ServerSocket; extern int real_uid, eff_uid; extern int real_gid, eff_gid; extern char *extra_incap, *extra_outcap; extern char *home, *RcFileName; extern char SockPath[], *SockName; #ifdef COPY_PASTE extern char *BufferFile; #endif extern int hardcopy_append; extern char *hardcopydir; static char *CatExtra __P((char *, char *)); static char *findrcfile __P((char *)); char *rc_name = ""; int rc_recursion = 0; static char * CatExtra(register char *str1, register char *str2) { register char *cp; register int len1, len2, add_colon; len1 = strlen(str1); if (len1 == 0) return str2; add_colon = (str1[len1 - 1] != ':'); if (str2) { len2 = strlen(str2); if ((cp = realloc(str2, (unsigned)len1 + len2 + add_colon + 1)) == NULL) Panic(0, "%s", strnomem); bcopy(cp, cp + len1 + add_colon, len2 + 1); } else { if ((cp = malloc((unsigned)len1 + add_colon + 1)) == NULL) Panic(0, "%s", strnomem); cp[len1 + add_colon] = '\0'; } bcopy(str1, cp, len1); if (add_colon) cp[len1] = ':'; return cp; } static char * findrcfile(char *rcfile) { char buf[256]; char *p; /* Tilde prefix support courtesy , * taken from a Debian patch. */ if (rcfile && *rcfile == '~') { static char rcfilename_tilde_exp[MAXPATHLEN + 1]; char *slash_position = strchr(rcfile, '/'); if (slash_position == rcfile + 1) { char *home = getenv("HOME"); if (!home) { Msg(0, "%s: source: tilde expansion failed", rc_name); return NULL; } snprintf(rcfilename_tilde_exp, MAXPATHLEN, "%s/%s", home, rcfile + 2); } else if (slash_position) { struct passwd *p; *slash_position = 0; p = getpwnam(rcfile + 1); if (!p) { Msg(0, "%s: source: tilde expansion failed for user %s", rc_name, rcfile + 1); return NULL; } snprintf(rcfilename_tilde_exp, MAXPATHLEN, "%s/%s", p->pw_dir, slash_position + 1); } else { Msg(0, "%s: source: illegal tilde expression.", rc_name); return NULL; } rcfile = rcfilename_tilde_exp; } if (rcfile) { char *rcend = rindex(rc_name, '/'); if (*rcfile != '/' && rcend && (rcend - rc_name) + strlen(rcfile) + 2 < sizeof(buf)) { strncpy(buf, rc_name, rcend - rc_name + 1); strcpy(buf + (rcend - rc_name) + 1, rcfile); if (access(buf, R_OK) == 0) return SaveStr(buf); } debug1("findrcfile: you specified '%s'\n", rcfile); return SaveStr(rcfile); } debug("findrcfile: you specified nothing...\n"); if ((p = getenv("SCREENRC")) != NULL && *p != '\0') { debug1(" $SCREENRC has: '%s'\n", p); return SaveStr(p); } else { debug(" ...nothing in $SCREENRC, defaulting $HOME/.screenrc\n"); if (strlen(home) > sizeof(buf) - 12) Panic(0, "Rc: home too large"); sprintf(buf, "%s/.screenrc", home); return SaveStr(buf); } } /* * this will be called twice: * 1) rcfilename = "/etc/screenrc" * 2) rcfilename = RcFileName */ int StartRc(char *rcfilename, int nopanic) { register int argc, len; register char *p, *cp; char buf[2048]; char *args[MAXARGS]; int argl[MAXARGS]; FILE *fp; char *oldrc_name = rc_name; /* always fix termcap/info capabilities */ extra_incap = CatExtra("TF", extra_incap); /* Special settings for vt100 and others */ if (display && (!strncmp(D_termname, "vt", 2) || !strncmp(D_termname, "xterm", 5))) extra_incap = CatExtra("xn:f0=\033Op:f1=\033Oq:f2=\033Or:f3=\033Os:f4=\033Ot:f5=\033Ou:f6=\033Ov:f7=\033Ow:f8=\033Ox:f9=\033Oy:f.=\033On:f,=\033Ol:fe=\033OM:f+=\033Ok:f-=\033Om:f*=\033Oj:f/=\033Oo:fq=\033OX", extra_incap); rc_name = findrcfile(rcfilename); if (rc_name == NULL || (fp = secfopen(rc_name, "r")) == NULL) { const char *rc_nonnull = rc_name ? rc_name : rcfilename; if (!rc_recursion && RcFileName && !strcmp(RcFileName, rc_nonnull)) { /* * User explicitly gave us that name, * this is the only case, where we get angry, if we can't read * the file. */ debug3("StartRc: '%s','%s', '%s'\n", RcFileName, rc_name ? rc_name : "(null)", rcfilename); if (!nopanic) Panic(0, "Unable to open \"%s\".", rc_nonnull); /* possibly NOTREACHED */ } debug1("StartRc: '%s' no good. ignored\n", rc_nonnull); if (rc_name) Free(rc_name); rc_name = oldrc_name; return 1; } while (fgets(buf, sizeof buf, fp) != NULL) { if ((p = rindex(buf, '\n')) != NULL) *p = '\0'; if ((argc = Parse(buf, sizeof buf, args, argl)) == 0) continue; if (strcmp(args[0], "echo") == 0) { if (!display) continue; if (argc < 2 || (argc == 3 && strcmp(args[1], "-n")) || argc > 3) { Msg(0, "%s: 'echo [-n] \"string\"' expected.", rc_name); continue; } AddStr(args[argc - 1]); if (argc != 3) { AddStr("\r\n"); Flush(0); } } else if (strcmp(args[0], "sleep") == 0) { if (!display) continue; debug("sleeeeeeep\n"); if (argc != 2) { Msg(0, "%s: sleep: one numeric argument expected.", rc_name); continue; } DisplaySleep1000(1000 * atoi(args[1]), 1); } #ifdef TERMINFO else if (!strcmp(args[0], "termcapinfo") || !strcmp(args[0], "terminfo")) { #else else if (!strcmp(args[0], "termcapinfo") || !strcmp(args[0], "termcap")) { #endif if (!display) continue; if (argc < 3 || argc > 4) { Msg(0, "%s: %s: incorrect number of arguments.", rc_name, args[0]); continue; } for (p = args[1]; p && *p; p = cp) { if ((cp = index(p, '|')) != 0) *cp++ = '\0'; len = strlen(p); if (p[len - 1] == '*') { if (!(len - 1) || !strncmp(p, D_termname, len - 1)) break; } else if (!strcmp(p, D_termname)) break; } if (!(p && *p)) continue; extra_incap = CatExtra(args[2], extra_incap); if (argc == 4) extra_outcap = CatExtra(args[3], extra_outcap); } else if (!strcmp(args[0], "source")) { if (rc_recursion <= 10) { rc_recursion++; (void)StartRc(args[1], 0); rc_recursion--; } } } fclose(fp); Free(rc_name); rc_name = oldrc_name; return 0; } void FinishRc(char *rcfilename) { char buf[2048]; FILE *fp; char *oldrc_name = rc_name; rc_name = findrcfile(rcfilename); if (rc_name == NULL || (fp = secfopen(rc_name, "r")) == NULL) { const char *rc_nonnull = rc_name ? rc_name : rcfilename; if (rc_recursion) Msg(errno, "%s: source %s", oldrc_name, rc_nonnull); else if (RcFileName && !strcmp(RcFileName, rc_nonnull)) { /* * User explicitly gave us that name, * this is the only case, where we get angry, if we can't read * the file. */ debug3("FinishRc:'%s','%s','%s'\n", RcFileName, rc_name ? rc_name : "(null)", rcfilename); Panic(0, "Unable to open \"%s\".", rc_nonnull); /* NOTREACHED */ } debug1("FinishRc: '%s' no good. ignored\n", rc_nonnull); if (rc_name) Free(rc_name); rc_name = oldrc_name; return; } debug("finishrc is going...\n"); while (fgets(buf, sizeof buf, fp) != NULL) RcLine(buf, sizeof buf); (void)fclose(fp); Free(rc_name); rc_name = oldrc_name; } void do_source(char *rcfilename) { if (rc_recursion > 10) { Msg(0, "%s: source: recursion limit reached", rc_name); return; } rc_recursion++; FinishRc(rcfilename); rc_recursion--; } /* * Running a Command Line in the environment determined by the display. * The fore window is taken from the display as well as the user. * This is bad when we run detached. */ void RcLine(char *ubuf, int ubufl) { char *args[MAXARGS]; int argl[MAXARGS]; #ifdef MULTIUSER extern struct acluser *EffectiveAclUser; /* acl.c */ extern struct acluser *users; /* acl.c */ #endif if (display) { fore = D_fore; flayer = D_forecv->c_layer; } else flayer = fore ? fore->w_savelayer : 0; if (Parse(ubuf, ubufl, args, argl) <= 0) return; #ifdef MULTIUSER if (!display) { /* the session owner does it, when there is no display here */ EffectiveAclUser = users; debug("RcLine: WARNING, no display no user! Session owner executes command\n"); } #endif DoCommand(args, argl); #ifdef MULTIUSER EffectiveAclUser = 0; #endif } /* needs display for copybuffer access and termcap dumping */ void WriteFile(struct acluser *user, char *fn, int dump) { /* dump==0: create .termcap, * dump==1: hardcopy, * #ifdef COPY_PASTE * dump==2: BUFFERFILE * #endif COPY_PASTE * dump==1: scrollback, */ register int i, j, k; register char *p; register FILE *f; char fnbuf[1024]; char *mode = "w"; #ifdef COPY_PASTE int public = 0; # ifdef HAVE_LSTAT struct stat stb, stb2; int fd, exists = 0; # endif #endif switch (dump) { case DUMP_TERMCAP: if (fn == 0) { i = SockName - SockPath; if (i > (int)sizeof(fnbuf) - 9) i = 0; strncpy(fnbuf, SockPath, i); strcpy(fnbuf + i, ".termcap"); fn = fnbuf; } break; case DUMP_HARDCOPY: case DUMP_SCROLLBACK: if (fn == 0) { if (fore == 0) return; if (hardcopydir && *hardcopydir && strlen(hardcopydir) < sizeof(fnbuf) - 21) sprintf(fnbuf, "%s/hardcopy.%d", hardcopydir, fore->w_number); else sprintf(fnbuf, "hardcopy.%d", fore->w_number); fn = fnbuf; } if (hardcopy_append && !access(fn, W_OK)) mode = "a"; break; #ifdef COPY_PASTE case DUMP_EXCHANGE: if (fn == 0) { strncpy(fnbuf, BufferFile, sizeof(fnbuf) - 1); fnbuf[sizeof(fnbuf) - 1] = 0; fn = fnbuf; } public = !strcmp(fn, DEFAULT_BUFFERFILE); # ifdef HAVE_LSTAT exists = !lstat(fn, &stb); if (public && exists && (S_ISLNK(stb.st_mode) || stb.st_nlink > 1)) { Msg(0, "No write to links, please."); return; } # endif break; #endif } debug2("WriteFile(%d) %s\n", dump, fn); if (UserContext() > 0) { debug("Writefile: usercontext\n"); #ifdef COPY_PASTE if (dump == DUMP_EXCHANGE && public) { # ifdef HAVE_LSTAT if (exists) { if ((fd = open(fn, O_WRONLY, 0666)) >= 0) { if (fstat(fd, &stb2) == 0 && stb.st_dev == stb2.st_dev && stb.st_ino == stb2.st_ino) ftruncate(fd, 0); else { close(fd); fd = -1; } } } else fd = open(fn, O_WRONLY|O_CREAT|O_EXCL, 0666); f = fd >= 0 ? fdopen(fd, mode) : 0; # else f = fopen(fn, mode); # endif } else #endif /* COPY_PASTE */ f = fopen(fn, mode); if (f == NULL) { debug2("WriteFile: fopen(%s,\"%s\") failed\n", fn, mode); UserReturn(0); } else { switch (dump) { case DUMP_HARDCOPY: case DUMP_SCROLLBACK: if (!fore) break; if (*mode == 'a') { putc('>', f); for (j = fore->w_width - 2; j > 0; j--) putc('=', f); fputs("<\n", f); } if (dump == DUMP_SCROLLBACK) { #ifdef COPY_PASTE for (i = fore->w_histheight - fore->w_scrollback_height; i < fore->w_histheight; i++) { p = (char *)(WIN(i)->image); for (k = fore->w_width - 1; k >= 0 && p[k] == ' '; k--) ; for (j = 0; j <= k; j++) putc(p[j], f); putc('\n', f); } #endif } for (i = 0; i < fore->w_height; i++) { p = (char *)fore->w_mlines[i].image; for (k = fore->w_width - 1; k >= 0 && p[k] == ' '; k--) ; for (j = 0; j <= k; j++) putc(p[j], f); putc('\n', f); } break; case DUMP_TERMCAP: DumpTermcap(fore->w_aflag, f); break; #ifdef COPY_PASTE case DUMP_EXCHANGE: p = user->u_plop.buf; for (i = user->u_plop.len; i-- > 0; p++) if (*p == '\r' && (i == 0 || p[1] != '\n')) putc('\n', f); else putc(*p, f); break; #endif } (void)fclose(f); UserReturn(1); } } if (UserStatus() <= 0) Msg(0, "Cannot open \"%s\"", fn); else if (display && !*rc_name) { switch (dump) { case DUMP_TERMCAP: Msg(0, "Termcap entry written to \"%s\".", fn); break; case DUMP_HARDCOPY: case DUMP_SCROLLBACK: Msg(0, "Screen image %s to \"%s\".", (*mode == 'a') ? "appended" : "written", fn); break; #ifdef COPY_PASTE case DUMP_EXCHANGE: Msg(0, "Copybuffer written to \"%s\".", fn); #endif } } } #ifdef COPY_PASTE /* * returns an allocated buffer which holds a copy of the file named fn. * lenp (if nonzero) points to a location, where the buffer size should be * stored. */ char * ReadFile(char *fn, int *lenp) { int i, l, size; char c, *bp, *buf; struct stat stb; ASSERT(lenp); debug1("ReadFile(%s)\n", fn); if ((i = secopen(fn, O_RDONLY, 0)) < 0) { Msg(errno, "no %s -- no slurp", fn); return NULL; } if (fstat(i, &stb)) { Msg(errno, "no good %s -- no slurp", fn); close(i); return NULL; } size = stb.st_size; if ((buf = malloc(size)) == NULL) { close(i); Msg(0, "%s", strnomem); return NULL; } errno = 0; if ((l = read(i, buf, size)) != size) { if (l < 0) l = 0; Msg(errno, "Got only %d bytes from %s", l, fn); } else { if (read(i, &c, 1) > 0) Msg(0, "Slurped only %d characters (of %d) into buffer - try again", l, size); else Msg(0, "Slurped %d characters into buffer", l); } close(i); *lenp = l; for (bp = buf; l-- > 0; bp++) if (*bp == '\n' && (bp == buf || bp[-1] != '\r')) *bp = '\r'; return buf; } void KillBuffers() { if (UserContext() > 0) UserReturn(unlink(BufferFile) ? errno : 0); errno = UserStatus(); Msg(errno, "%s %sremoved", BufferFile, errno ? "not " : ""); } #endif /* COPY_PASTE */ /* (Almost) secure open and fopen... */ FILE * secfopen(char *name, char *mode) { FILE *fi; #ifndef USE_SETEUID int flags, fd; #endif debug2("secfopen(%s, %s)\n", name, mode); #ifdef USE_SETEUID xseteuid(real_uid); xsetegid(real_gid); fi = fopen(name, mode); xseteuid(eff_uid); xsetegid(eff_gid); return fi; #else if (eff_uid == real_uid) return fopen(name, mode); if (mode[0] && mode[1] == '+') flags = O_RDWR; else flags = (mode[0] == 'r') ? O_RDONLY : O_WRONLY; if (mode[0] == 'w') flags |= O_CREAT | O_TRUNC; else if (mode[0] == 'a') flags |= O_CREAT | O_APPEND; else if (mode[0] != 'r') { errno = EINVAL; return 0; } if ((fd = secopen(name, flags, 0666)) < 0) return 0; if ((fi = fdopen(fd, mode)) == 0) { close(fd); return 0; } return fi; #endif } int secopen(char *name, int flags, int mode) { int fd; #ifndef USE_SETEUID int q; struct stat stb; #endif debug3("secopen(%s, 0x%x, 0%03o)\n", name, flags, mode); #ifdef USE_SETEUID xseteuid(real_uid); xsetegid(real_gid); fd = open(name, flags, mode); xseteuid(eff_uid); xsetegid(eff_gid); return fd; #else if (eff_uid == real_uid) return open(name, flags, mode); /* Truncation/creation is done in UserContext */ if ((flags & O_TRUNC) || ((flags & O_CREAT) && access(name, F_OK))) { if (UserContext() > 0) { if ((fd = open(name, flags, mode)) >= 0) { close(fd); UserReturn(0); } if (errno == 0) errno = EACCES; UserReturn(errno); } if ((q = UserStatus())) { if (q > 0) errno = q; return -1; } } if (access(name, F_OK)) return -1; if ((fd = open(name, flags & ~(O_TRUNC | O_CREAT), 0)) < 0) return -1; debug("open successful\n"); if (fstat(fd, &stb)) { close(fd); return -1; } debug("fstat successful\n"); if (stb.st_uid != real_uid) { switch (flags & (O_RDONLY | O_WRONLY | O_RDWR)) { case O_RDONLY: q = 0004; break; case O_WRONLY: q = 0002; break; default: q = 0006; break; } if ((stb.st_mode & q) != q) { debug1("secopen: permission denied (%03o)\n", stb.st_mode & 07777); close(fd); errno = EACCES; return -1; } } debug1("secopen ok - returning %d\n", fd); return fd; #endif } int printpipe(struct win *p, char *cmd) { int pi[2]; if (pipe(pi)) { WMsg(p, errno, "printing pipe"); return -1; } switch (fork()) { case -1: WMsg(p, errno, "printing fork"); return -1; case 0: display = p->w_pdisplay; displays = 0; ServerSocket = -1; #ifdef DEBUG if (dfp && dfp != stderr) fclose(dfp); #endif close(0); dup(pi[0]); closeallfiles(0); if (setgid(real_gid) || setuid(real_uid)) Panic(errno, "printpipe setuid"); eff_uid = real_uid; eff_gid = real_gid; #ifdef SIGPIPE signal(SIGPIPE, SIG_DFL); #endif execl("/bin/sh", "sh", "-c", cmd, (char *)0); Panic(errno, "/bin/sh"); default: break; } close(pi[0]); return pi[1]; } int readpipe(char **cmdv) { int pi[2]; if (pipe(pi)) { Msg(errno, "pipe"); return -1; } switch (fork()) { case -1: Msg(errno, "fork"); return -1; case 0: displays = 0; ServerSocket = -1; #ifdef DEBUG if (dfp && dfp != stderr) fclose(dfp); #endif close(1); if (dup(pi[1]) != 1) { close(pi[1]); Panic(0, "dup"); } closeallfiles(1); if (setgid(real_gid) || setuid(real_uid)) { close(1); Panic(errno, "setuid/setgid"); } eff_uid = real_uid; eff_gid = real_gid; #ifdef SIGPIPE signal(SIGPIPE, SIG_DFL); #endif execvp(*cmdv, cmdv); close(1); Panic(errno, "%s", *cmdv); default: break; } close(pi[1]); return pi[0]; } screen-4.9.1/README0000664000175000017500000000647714467014146012357 0ustar alexalex [If you just got the screen package, it pays to read the file INSTALL] [This intro only describes the most common features to get you started] [A full description of all features is contained in the source package] Short introduction to GNU screen. Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to screen-devel@gnu.org Screen provides you with an ANSI/vt100 terminal emulator, which can multiplex up to 10 pseudo-terminals. On startup, it executes $SHELL in window 0. Then it reads $HOME/.screenrc to learn configuration, keybindings, and possibly open more windows. C-a ? (help) Show all keybindings. C-a c (screen) Create new windows. C-a SPACE (next) Advance to next window (with wraparound). C-a C-a (other) Toggle between the current and previously displayed windows. C-a 0 (select n) Switch to window n=0 ... 9. ... C-a 9 C-a w (windows) Show a list of window names in the status line. C-a a (meta) Send a literal C-a/C-s/C-q to the C-a s (xoff) process in the window. C-a q (xon) For instance, emacs uses C-a and C-s. C-a l (redisplay) Redraw this window. C-a W (width) Toggle between 80 & 132 columns mode. C-a L (login) Try to toggle the window's utmp-slot. C-a z (suspend) Suspend the whole screen session. C-a x (lockscreen) Execute /usr/bin/lock, $LOCKCMD or a built-in terminal lock. C-a H (log) Log stdout of window n to screenlog.n. C-a C-[ (copy) Start copy mode. Move cursor with h,j,k,l. Set 2 marks with SPACE or y. Abort with ESC. (C-[ is ESC.) Preceeding second mark with an a appends the text to the copy buffer. C-a C-] (paste) Output copy buffer to current window's stdin. C-a < (readbuf) Read the copy buffer from /tmp/screen-exchange. C-a > (writebuf) Write the copy buffer to /tmp/screen-exchange. C-a d (detach) Detach screen. All processes continue and may spool output to their pty's, but screen disconnects from your terminal. C-a D D (pow_detach) Power detach. Disconnect like C-a d but also kill the parent shell. C-a K (kill) Kill a window and send SIGHUP to its process group. Per default this would be C-a C-k, but it is redefined in the demo .screenrc (think of killing a whole line in emacs). C-a : (colon) Online configuration change. See the man page or TeXinfo manual for many more keybindings and commands. screen -r [pid.tty.host|tty.host] Reattach to a specific detached session. The terminal emulator reconfigures according to your $TERMCAP or $TERM settings. When you have multiple screens detached, you must supply the session name. screen -R reattaches to a detached session or (if none) creates a new session. screen -d [pid.tty.host|tty.host] Detach a screen session remotely. Has the same effect as typing 'C-a d' on the controlling terminal. 'screen -D' will power-detach. screen -list screen -ls screen -wipe Show all available sessions and their status. Use -wipe to remove DEAD sessions. If sockets are missing, you may send a SIGCHLD to its 'SCREEN' process and the process will re-establish the socket (think of someone cleaning /tmp thoroughly). screen -h 200 Starts a new screen session and sets the number of lines in the scrollback buffer to 200. The default is 100 lines. screen-4.9.1/NEWS.3.50000664000175000017500000001053414467014146012467 0ustar alexalex ---------------------------- What's new in screen-3.5 ? ---------------------------- * Texinfo manpage! Thanks to Jason Merrill. * Screen now has a very large 'configure' script. If you have problems with the resulting configuration please send mail to screen@uni-erlangen.de. * Stackable overlay planes. All commands are available even if you work with an overlay. Thus you can be in copy/paste mode on several windows! * Unification of key bindings and screen commands. All keys now generate commands. * Screen now reads/writes only in asynchronous mode. * ANSI parser speedup code resulting in much faster output of text. * Changed the rc file syntax. Commands now directly affect the current window. The default settings are changed with 'def...' commands. The 'set' keyword no longer exists. Please run the 'newsyntax' script on your old screenrc files! * Emacs style isearch added to copy mode. Try ^A ESC ^R screen ^R ^R to locate the last three occurrences of the word 'screen' in the history buffer. * New command 'silence'. Alarms the user whenever there was inactivity for a specified amount of time on a certain window. Useful if you want to wait for a compilation to end. * Much better margin handling: Screen now handles autowrapped lines correctly in the redisplay and copy/paste functions. * New commands for pastebuffer management: 'copy_reg' copies the pastebuffer to a register, 'ins_reg' pastes a register, 'register' fills a register with a string, 'process' stuffs a register into strings input queue. * Autonuke feature. Flush the output buffer if the window gets cleared. Enable this with 'autonuke on'. * Modifications to save memory: Empty attribute and font lines don't get allocated. This is very useful if you have a large scrollback. * Multi display support: You can now attach from more than one terminal to a session with the '-x' option. * New option '-S' to specify socket name. * Experimental multiuser support added: You can start screen in multiuser Mode by prepending the socket name with a '/' (or by the command 'multiuser on'). If another user wants to attach to the screen session, he can do this by prepending the socketname with 'screenuser/'. Of course he must be in the access control list for a successful attach (see the acladd/acldel command). * Extension to the 'screen' command: You can now specify tty lines instead of programs. This can be used for console management. Added the command 'break' to send a break to the tty line. Not really a new feature, but terminal initialisation now works on suns. * Input/output filters added. This has been implemented to allow the user to configure an open tty line, but got soon exended to allow all sorts of filters. For more information read the explanation of the 'exec' command in the man page and check the 'fdpat.ps' document. * Screen can now be started detached (screen -d -m -S sockname). This is useful if you want to start screen in your /etc/rc file (e.g. as a console multiplexer) * Console grabbing added ('console on' command). * Windows can now be selected by akas, too. (Per default bound to the >'< key.) * New terminal capabilitise CS/CE for cursorkey control. * setenv/unsetenv commands added. * Expansion of environment variables ($VAR) and terminal capabilities ($:TC:) in the screenrc files and detach messages. Example: pow_detach_msg "Session of \$LOGNAME \$:cr:\$:nl:ended." * New commands: 'hardcopydir' and 'logdir' to change the output directories, 'partial' and 'allpartial' to make screen only refresh the line containing the cursor if a window is selected (useful for slow modem connections). * Cleanup of the provided termcap/terminfo file. Please install the new one! * The program 'terminfo/checktc.c' does a visual check of a termcap/terminfo entry. Please try it before calling screen and in a screen session. * LOTS of bugfixes and code cleanup. Thanks to all the beta testers who helped porting screen to at least the following platforms: Ultrix, SunOS, Solaris, BSD43, linux, NEWSOS, Irix, OSF/1, Harris CX/UX, hpux, dynix/ptx, AIX. And even more thanks to the brave who attempted to use the 'exec' command features. Donate patches, bugreports, suggestions, money, beer & pizza to screen@uni-erlangen.de screen-4.9.1/attacher.c0000664000175000017500000006400514467014146013425 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "config.h" #include #include #include #include #include #include #include "screen.h" #include "extern.h" #include static int WriteMessage __P((int, struct msg *)); static sigret_t AttacherSigInt __P(SIGPROTOARG); #if defined(SIGWINCH) && defined(TIOCGWINSZ) static sigret_t AttacherWinch __P(SIGPROTOARG); #endif #ifdef LOCK static sigret_t DoLock __P(SIGPROTOARG); static void LockTerminal __P((void)); static sigret_t LockHup __P(SIGPROTOARG); static void screen_builtin_lck __P((void)); #endif #ifdef DEBUG static sigret_t AttacherChld __P(SIGPROTOARG); #endif static sigret_t AttachSigCont __P(SIGPROTOARG); extern int real_uid, real_gid, eff_uid, eff_gid; extern int ServerSocket; extern struct display *displays; extern char *SockName, *SockMatch, SockPath[]; extern char HostName[]; extern struct passwd *ppp; extern char *attach_tty, *attach_term, *LoginName, *preselect; /* Indicator whether the current tty exists in another namespace. */ extern bool attach_tty_is_in_new_ns; /* Content of the tty symlink when attach_tty_is_in_new_ns == true. */ extern char attach_tty_name_in_ns[]; extern int xflag, dflag, rflag, quietflag, adaptflag; extern struct mode attach_Mode; extern struct NewWindow nwin_options; extern int MasterPid, attach_fd; #ifdef MULTIUSER extern char *multi; extern int multiattach, multi_uid, own_uid; extern int tty_mode, tty_oldmode; # ifndef USE_SETEUID static int multipipe[2]; # endif #endif static int ContinuePlease; static sigret_t AttachSigCont SIGDEFARG { debug("SigCont()\n"); ContinuePlease = 1; SIGRETURN; } static int QueryResult; static sigret_t QueryResultSuccess SIGDEFARG { QueryResult = 1; SIGRETURN; } static sigret_t QueryResultFail SIGDEFARG { QueryResult = 2; SIGRETURN; } /* * Send message to a screen backend. * returns 1 if we could attach one, or 0 if none. * Understands MSG_ATTACH, MSG_DETACH, MSG_POW_DETACH * MSG_CONT, MSG_WINCH and nothing else! * * if type == MSG_ATTACH and sockets are used, attaches * tty file descriptor. */ static int WriteMessage(s, m) int s; struct msg *m; { int r, l = sizeof(*m); bool is_socket; is_socket = IsSocket(SockPath); if (is_socket && m->type == MSG_ATTACH) return SendAttachMsg(s, m, attach_fd); while(l > 0) { r = write(s, (char *)m + (sizeof(*m) - l), l); if (r == -1 && errno == EINTR) continue; if (r == -1 || r == 0) return -1; l -= r; } return 0; } int Attach(how) int how; { int n, lasts; struct msg m; struct stat st; char *s; bool is_socket; debug2("Attach: how=%d, tty=%s\n", how, attach_tty); #ifdef MULTIUSER # ifndef USE_SETEUID while ((how == MSG_ATTACH || how == MSG_CONT) && multiattach) { int ret; if (pipe(multipipe)) Panic(errno, "pipe"); if (chmod(attach_tty, 0666)) Panic(errno, "chmod %s", attach_tty); tty_oldmode = tty_mode; eff_uid = -1; /* make UserContext fork */ real_uid = multi_uid; if ((ret = UserContext()) <= 0) { char dummy; eff_uid = 0; real_uid = own_uid; if (ret < 0) Panic(errno, "UserContext"); close(multipipe[1]); read(multipipe[0], &dummy, 1); if (tty_oldmode >= 0) { chmod(attach_tty, tty_oldmode); tty_oldmode = -1; } ret = UserStatus(); #ifdef LOCK if (ret == SIG_LOCK) LockTerminal(); else #endif #ifdef SIGTSTP if (ret == SIG_STOP) kill(getpid(), SIGTSTP); else #endif if (ret == SIG_POWER_BYE) { int ppid; if (setgid(real_gid) || setuid(real_uid)) Panic(errno, "setuid/gid"); if ((ppid = getppid()) > 1) Kill(ppid, SIGHUP); exit(0); } else exit(ret); dflag = 0; #ifdef MULTI xflag = 1; #endif how = MSG_ATTACH; continue; } close(multipipe[0]); eff_uid = real_uid; break; } # else /* USE_SETEUID */ if ((how == MSG_ATTACH || how == MSG_CONT) && multiattach) { real_uid = multi_uid; eff_uid = own_uid; #ifdef HAVE_SETRESUID if (setresuid(multi_uid, own_uid, multi_uid)) Panic(errno, "setresuid"); #else xseteuid(multi_uid); xseteuid(own_uid); #endif if (chmod(attach_tty, 0666)) Panic(errno, "chmod %s", attach_tty); tty_oldmode = tty_mode; } # endif /* USE_SETEUID */ #endif /* MULTIUSER */ bzero((char *) &m, sizeof(m)); m.type = how; m.protocol_revision = MSG_REVISION; strncpy(m.m_tty, attach_tty_is_in_new_ns ? attach_tty_name_in_ns : attach_tty, sizeof(m.m_tty) - 1); m.m_tty[sizeof(m.m_tty) - 1] = 0; is_socket = IsSocket(SockPath); if (how == MSG_WINCH) { if ((lasts = MakeClientSocket(0, is_socket)) >= 0) { WriteMessage(lasts, &m); close(lasts); } return 0; } if (how == MSG_CONT) { if ((lasts = MakeClientSocket(0, is_socket)) < 0) { Panic(0, "Sorry, cannot contact session \"%s\" again.\r\n", SockName); } } else { n = FindSocket(&lasts, (int *)0, (int *)0, SockMatch, &is_socket); switch (n) { case 0: if (rflag && (rflag & 1) == 0) return 0; if (quietflag) eexit(10); if (SockMatch && *SockMatch) { Panic(0, "There is no screen to be %sed matching %s.", xflag ? "attach" : dflag ? "detach" : "resum", SockMatch); } else { Panic(0, "There is no screen to be %sed.", xflag ? "attach" : dflag ? "detach" : "resum"); } /* NOTREACHED */ case 1: break; default: if (rflag < 3) { if (quietflag) eexit(10 + n); Panic(0, "Type \"screen [-d] -r [pid.]tty.host\" to resume one of them."); } /* NOTREACHED */ } } /* * Go in UserContext. Advantage is, you can kill your attacher * when things go wrong. Any disadvantages? jw. * Do this before the attach to prevent races! */ #ifdef MULTIUSER if (!multiattach) #endif { if (setuid(real_uid)) Panic(errno, "setuid"); } #if defined(MULTIUSER) && defined(USE_SETEUID) else { /* This call to xsetuid should also set the saved uid */ xseteuid(real_uid); /* multi_uid, allow backend to send signals */ } #endif eff_uid = real_uid; if (setgid(real_gid)) Panic(errno, "setgid"); eff_gid = real_gid; debug2("Attach: uid %d euid %d\n", (int)getuid(), (int)geteuid()); MasterPid = 0; for (s = SockName; *s; s++) { if (*s > '9' || *s < '0') break; MasterPid = 10 * MasterPid + (*s - '0'); } debug1("Attach decided, it is '%s'\n", SockPath); debug1("Attach found MasterPid == %d\n", MasterPid); if (stat(SockPath, &st) == -1) Panic(errno, "stat %s", SockPath); if ((st.st_mode & 0600) != 0600) Panic(0, "Socket is in wrong mode (%03o)", (int)st.st_mode); /* * Change: if -x or -r ignore failing -d */ if ((xflag || rflag) && dflag && (st.st_mode & 0700) == 0600) dflag = 0; /* * Without -x, the mode must match. * With -x the mode is irrelevant unless -d. */ if ((dflag || !xflag) && (st.st_mode & 0700) != (dflag ? 0700 : 0600)) Panic(0, "That screen is %sdetached.", dflag ? "already " : "not "); #ifdef REMOTE_DETACH if (dflag && (how == MSG_DETACH || how == MSG_POW_DETACH)) { m.m.detach.dpid = getpid(); strncpy(m.m.detach.duser, LoginName, sizeof(m.m.detach.duser) - 1); m.m.detach.duser[sizeof(m.m.detach.duser) - 1] = 0; # ifdef POW_DETACH if (dflag == 2) m.type = MSG_POW_DETACH; else # endif m.type = MSG_DETACH; /* If there is no password for the session, or the user enters the correct * password, then we get a SIGCONT. Otherwise we get a SIG_BYE */ signal(SIGCONT, AttachSigCont); if (WriteMessage(lasts, &m)) Panic(errno, "WriteMessage"); close(lasts); while (!ContinuePlease) pause(); /* wait for SIGCONT */ signal(SIGCONT, SIG_DFL); ContinuePlease = 0; if (how != MSG_ATTACH) return 0; /* we detached it. jw. */ sleep(1); /* we dont want to overrun our poor backend. jw. */ if ((lasts = MakeClientSocket(0, is_socket)) == -1) Panic(0, "Cannot contact screen again. Sigh."); m.type = how; } #endif ASSERT(how == MSG_ATTACH || how == MSG_CONT); strncpy(m.m.attach.envterm, attach_term, MAXTERMLEN); m.m.attach.envterm[MAXTERMLEN] = 0; debug1("attach: sending %d bytes... ", (int)sizeof(m)); strncpy(m.m.attach.auser, LoginName, sizeof(m.m.attach.auser) - 1); m.m.attach.auser[sizeof(m.m.attach.auser) - 1] = 0; m.m.attach.esc = DefaultEsc; m.m.attach.meta_esc = DefaultMetaEsc; strncpy(m.m.attach.preselect, preselect ? preselect : "", sizeof(m.m.attach.preselect) - 1); m.m.attach.preselect[sizeof(m.m.attach.preselect) - 1] = 0; m.m.attach.apid = getpid(); m.m.attach.adaptflag = adaptflag; m.m.attach.lines = m.m.attach.columns = 0; if ((s = getenv("LINES"))) m.m.attach.lines = atoi(s); if ((s = getenv("COLUMNS"))) m.m.attach.columns = atoi(s); m.m.attach.encoding = nwin_options.encoding > 0 ? nwin_options.encoding + 1 : 0; #ifdef REMOTE_DETACH #ifdef POW_DETACH if (dflag == 2) m.m.attach.detachfirst = MSG_POW_DETACH; else #endif if (dflag) m.m.attach.detachfirst = MSG_DETACH; else #endif m.m.attach.detachfirst = MSG_ATTACH; #ifdef MULTIUSER /* setup CONT signal handler to repair the terminal mode */ if (multi && (how == MSG_ATTACH || how == MSG_CONT)) signal(SIGCONT, AttachSigCont); #endif if (WriteMessage(lasts, &m)) Panic(errno, "WriteMessage"); close(lasts); debug1("Attach(%d): sent\n", m.type); #ifdef MULTIUSER if (multi && (how == MSG_ATTACH || how == MSG_CONT)) { while (!ContinuePlease) pause(); /* wait for SIGCONT */ signal(SIGCONT, SIG_DFL); ContinuePlease = 0; # ifndef USE_SETEUID close(multipipe[1]); # else xseteuid(own_uid); if (tty_oldmode >= 0) if (chmod(attach_tty, tty_oldmode)) Panic(errno, "chmod %s", attach_tty); tty_oldmode = -1; xseteuid(real_uid); # endif } #endif rflag = 0; return 1; } static int AttacherPanic = 0; #ifdef DEBUG static sigret_t AttacherChld SIGDEFARG { AttacherPanic = 1; SIGRETURN; } #endif static sigret_t AttacherSigAlarm SIGDEFARG { #ifdef DEBUG static int tick_cnt = 0; if ((tick_cnt = (tick_cnt + 1) % 4) == 0) debug("tick\n"); #endif SIGRETURN; } /* * the frontend's Interrupt handler * we forward SIGINT to the poor backend */ static sigret_t AttacherSigInt SIGDEFARG { signal(SIGINT, AttacherSigInt); Kill(MasterPid, SIGINT); SIGRETURN; } /* * Unfortunately this is also the SIGHUP handler, so we have to * check if the backend is already detached. */ sigret_t AttacherFinit SIGDEFARG { struct stat statb; struct msg m; int s; bool is_socket; debug("AttacherFinit();\n"); signal(SIGHUP, SIG_IGN); /* Check if signal comes from backend */ if (stat(SockPath, &statb) == 0 && (statb.st_mode & 0777) != 0600) { debug("Detaching backend!\n"); bzero((char *) &m, sizeof(m)); strncpy(m.m_tty, attach_tty_is_in_new_ns ? attach_tty_name_in_ns : attach_tty, sizeof(m.m_tty) - 1); m.m_tty[sizeof(m.m_tty) - 1] = 0; debug1("attach_tty is %s\n", attach_tty); m.m.detach.dpid = getpid(); m.type = MSG_HANGUP; m.protocol_revision = MSG_REVISION; is_socket = IsSocket(SockPath); if ((s = MakeClientSocket(0, is_socket)) >= 0) { WriteMessage(s, &m); close(s); } } #ifdef MULTIUSER if (tty_oldmode >= 0) { if (setuid(own_uid)) Panic(errno, "setuid"); chmod(attach_tty, tty_oldmode); } #endif exit(0); SIGRETURN; } #ifdef POW_DETACH static sigret_t AttacherFinitBye SIGDEFARG { int ppid; debug("AttacherFintBye()\n"); #if defined(MULTIUSER) && !defined(USE_SETEUID) if (multiattach) exit(SIG_POWER_BYE); #endif if (setgid(real_gid)) Panic(errno, "setgid"); #ifdef MULTIUSER if (setuid(own_uid)) Panic(errno, "setuid"); #else if (setuid(real_uid)) Panic(errno, "setuid"); #endif /* we don't want to disturb init (even if we were root), eh? jw */ if ((ppid = getppid()) > 1) Kill(ppid, SIGHUP); /* carefully say good bye. jw. */ exit(0); SIGRETURN; } #endif #if defined(DEBUG) && defined(SIG_NODEBUG) static sigret_t AttacherNoDebug SIGDEFARG { debug("AttacherNoDebug()\n"); signal(SIG_NODEBUG, AttacherNoDebug); if (dfp) { debug("debug: closing debug file.\n"); fflush(dfp); fclose(dfp); dfp = NULL; } SIGRETURN; } #endif /* SIG_NODEBUG */ static int SuspendPlease; static sigret_t SigStop SIGDEFARG { debug("SigStop()\n"); SuspendPlease = 1; SIGRETURN; } #ifdef LOCK static int LockPlease; static sigret_t DoLock SIGDEFARG { # ifdef SYSVSIGS signal(SIG_LOCK, DoLock); # endif debug("DoLock()\n"); LockPlease = 1; SIGRETURN; } #endif #if defined(SIGWINCH) && defined(TIOCGWINSZ) static int SigWinchPlease; static sigret_t AttacherWinch SIGDEFARG { debug("AttacherWinch()\n"); SigWinchPlease = 1; SIGRETURN; } #endif /* * Attacher loop - no return */ void Attacher() { signal(SIGHUP, AttacherFinit); signal(SIG_BYE, AttacherFinit); #ifdef POW_DETACH signal(SIG_POWER_BYE, AttacherFinitBye); #endif #if defined(DEBUG) && defined(SIG_NODEBUG) signal(SIG_NODEBUG, AttacherNoDebug); #endif #ifdef LOCK signal(SIG_LOCK, DoLock); #endif signal(SIGINT, AttacherSigInt); #ifdef BSDJOBS signal(SIG_STOP, SigStop); #endif #if defined(SIGWINCH) && defined(TIOCGWINSZ) signal(SIGWINCH, AttacherWinch); #endif #ifdef DEBUG signal(SIGCHLD, AttacherChld); #endif debug("attacher: going for a nap.\n"); dflag = 0; #ifdef MULTI xflag = 1; #endif for (;;) { signal(SIGALRM, AttacherSigAlarm); alarm(15); pause(); alarm(0); if (kill(MasterPid, 0) < 0 && errno != EPERM) { debug1("attacher: Panic! MasterPid %d does not exist.\n", MasterPid); AttacherPanic++; } if (AttacherPanic) { fcntl(0, F_SETFL, 0); SetTTY(0, &attach_Mode); printf("\nError: Cannot find master process to attach to!\n"); eexit(1); } #ifdef BSDJOBS if (SuspendPlease) { SuspendPlease = 0; #if defined(MULTIUSER) && !defined(USE_SETEUID) if (multiattach) exit(SIG_STOP); #endif signal(SIGTSTP, SIG_DFL); debug("attacher: killing myself SIGTSTP\n"); kill(getpid(), SIGTSTP); debug("attacher: continuing from stop\n"); signal(SIG_STOP, SigStop); (void) Attach(MSG_CONT); } #endif #ifdef LOCK if (LockPlease) { LockPlease = 0; #if defined(MULTIUSER) && !defined(USE_SETEUID) if (multiattach) exit(SIG_LOCK); #endif LockTerminal(); # ifdef SYSVSIGS signal(SIG_LOCK, DoLock); # endif (void) Attach(MSG_CONT); } #endif /* LOCK */ #if defined(SIGWINCH) && defined(TIOCGWINSZ) if (SigWinchPlease) { SigWinchPlease = 0; # ifdef SYSVSIGS signal(SIGWINCH, AttacherWinch); # endif (void) Attach(MSG_WINCH); } #endif /* SIGWINCH */ } } #ifdef LOCK /* ADDED by Rainer Pruy 10/15/87 */ /* POLISHED by mls. 03/10/91 */ static char LockEnd[] = "Welcome back to screen !!\n"; static sigret_t LockHup SIGDEFARG { int ppid = getppid(); if (setgid(real_gid)) Panic(errno, "setgid"); #ifdef MULTIUSER if (setuid(own_uid)) Panic(errno, "setuid"); #else if (setuid(real_uid)) Panic(errno, "setuid"); #endif if (ppid > 1) Kill(ppid, SIGHUP); exit(0); } static void LockTerminal() { char *prg; int sig, pid; sigret_t (*sigs[NSIG])__P(SIGPROTOARG); for (sig = 1; sig < NSIG; sig++) sigs[sig] = signal(sig, sig == SIGCHLD ? SIG_DFL : SIG_IGN); signal(SIGHUP, LockHup); printf("\n"); prg = getenv("LOCKPRG"); if (prg && strcmp(prg, "builtin") && !access(prg, X_OK)) { signal(SIGCHLD, SIG_DFL); debug1("lockterminal: '%s' seems executable, execl it!\n", prg); if ((pid = fork()) == 0) { /* Child */ displays = 0; /* beware of Panic() */ ServerSocket = -1; if (setgid(real_gid)) Panic(errno, "setgid"); #ifdef MULTIUSER if (setuid(own_uid)) Panic(errno, "setuid"); #else if (setuid(real_uid)) /* this should be done already */ Panic(errno, "setuid"); #endif closeallfiles(0); /* important: /etc/shadow may be open */ execl(prg, "SCREEN-LOCK", NULL); exit(errno); } if (pid == -1) Msg(errno, "Cannot lock terminal - fork failed"); else { #ifdef BSDWAIT union wait wstat; #else int wstat; #endif int wret; #ifdef hpux signal(SIGCHLD, SIG_DFL); #endif errno = 0; while (((wret = wait(&wstat)) != pid) || ((wret == -1) && (errno == EINTR)) ) errno = 0; if (errno) { Msg(errno, "Lock"); sleep(2); } else if (WTERMSIG(wstat) != 0) { fprintf(stderr, "Lock: %s: Killed by signal: %d%s\n", prg, WTERMSIG(wstat), WIFCORESIG(wstat) ? " (Core dumped)" : ""); sleep(2); } else if (WEXITSTATUS(wstat)) { debug2("Lock: %s: return code %d\n", prg, WEXITSTATUS(wstat)); } else printf("%s", LockEnd); } } else { if (prg) { debug1("lockterminal: '%s' seems NOT executable, we use our builtin\n", prg); } else { debug("lockterminal: using buitin.\n"); } screen_builtin_lck(); } /* reset signals */ for (sig = 1; sig < NSIG; sig++) { if (sigs[sig] != (sigret_t(*)__P(SIGPROTOARG)) -1) signal(sig, sigs[sig]); } } /* LockTerminal */ #ifdef USE_PAM /* * PAM support by Pablo Averbuj */ #include static int PAM_conv __P((int, const struct pam_message **, struct pam_response **, void *)); static int PAM_conv(num_msg, msg, resp, appdata_ptr) int num_msg; const struct pam_message **msg; struct pam_response **resp; void *appdata_ptr; { int replies = 0; struct pam_response *reply = NULL; reply = malloc(sizeof(struct pam_response)*num_msg); if (!reply) return PAM_CONV_ERR; #define COPY_STRING(s) (s) ? strdup(s) : NULL for (replies = 0; replies < num_msg; replies++) { switch (msg[replies]->msg_style) { case PAM_PROMPT_ECHO_OFF: /* wants password */ reply[replies].resp_retcode = PAM_SUCCESS; reply[replies].resp = appdata_ptr ? strdup((char *)appdata_ptr) : 0; break; case PAM_TEXT_INFO: /* ignore the informational mesage */ /* but first clear out any drek left by malloc */ reply[replies].resp = NULL; break; case PAM_PROMPT_ECHO_ON: /* user name given to PAM already */ /* fall through */ default: /* unknown or PAM_ERROR_MSG */ free(reply); return PAM_CONV_ERR; } } *resp = reply; return PAM_SUCCESS; } static struct pam_conv PAM_conversation = { &PAM_conv, NULL }; #endif /* -- original copyright by Luigi Cannelloni 1985 (luigi@faui70.UUCP) -- */ static void screen_builtin_lck() { char fullname[100], *cp1, message[100 + 100]; #ifdef USE_PAM pam_handle_t *pamh = 0; int pam_error; char *tty_name; #endif char *pass = 0, mypass[16 + 1], salt[3]; int using_pam = 1; #ifdef USE_PAM if (!ppp->pw_uid) { #endif using_pam = 0; pass = ppp->pw_passwd; if (pass == 0 || *pass == 0) { if ((pass = getpass("Key: "))) { strncpy(mypass, pass, sizeof(mypass) - 1); mypass[sizeof(mypass) - 1] = 0; if (*mypass == 0) return; if ((pass = getpass("Again: "))) { if (strcmp(mypass, pass)) { fprintf(stderr, "Passwords don't match.\007\n"); sleep(2); return; } } } if (pass == 0) { fprintf(stderr, "Getpass error.\007\n"); sleep(2); return; } salt[0] = 'A' + (int)(time(0) % 26); salt[1] = 'A' + (int)((time(0) >> 6) % 26); salt[2] = 0; pass = crypt(mypass, salt); if (!pass) { fprintf(stderr, "crypt() error.\007\n"); sleep(2); return; } pass = ppp->pw_passwd = SaveStr(pass); } #ifdef USE_PAM } #endif debug("screen_builtin_lck looking in gcos field\n"); strncpy(fullname, ppp->pw_gecos, sizeof(fullname) - 9); fullname[sizeof(fullname) - 9] = 0; if ((cp1 = index(fullname, ',')) != NULL) *cp1 = '\0'; if ((cp1 = index(fullname, '&')) != NULL) { strncpy(cp1, ppp->pw_name, 8); cp1[8] = 0; if (*cp1 >= 'a' && *cp1 <= 'z') *cp1 -= 'a' - 'A'; } sprintf(message, "Screen used by %s%s<%s> on %s.\nPassword:\007", fullname, fullname[0] ? " " : "", ppp->pw_name, HostName); /* loop here to wait for correct password */ for (;;) { debug("screen_builtin_lck awaiting password\n"); errno = 0; if ((cp1 = getpass(message)) == NULL) { AttacherFinit(SIGARG); /* NOTREACHED */ } if (using_pam) { #ifdef USE_PAM PAM_conversation.appdata_ptr = cp1; pam_error = pam_start("screen", ppp->pw_name, &PAM_conversation, &pamh); if (pam_error != PAM_SUCCESS) AttacherFinit(SIGARG); /* goodbye */ if (strncmp(attach_tty, "/dev/", 5) == 0) tty_name = attach_tty + 5; else tty_name = attach_tty; pam_error = pam_set_item(pamh, PAM_TTY, tty_name); if (pam_error != PAM_SUCCESS) AttacherFinit(SIGARG); /* goodbye */ pam_error = pam_authenticate(pamh, 0); pam_end(pamh, pam_error); PAM_conversation.appdata_ptr = 0; if (pam_error == PAM_SUCCESS) break; #endif } else { char *buf = crypt(cp1, pass); if (buf && !strncmp(buf, pass, strlen(pass))) break; } debug("screen_builtin_lck: NO!!!!!\n"); bzero(cp1, strlen(cp1)); } bzero(cp1, strlen(cp1)); debug("password ok.\n"); } #endif /* LOCK */ void SendCmdMessage(sty, match, av, query) char *sty; char *match; char **av; int query; { int i, s; struct msg m; char *p; int len, n; bool is_socket; if (sty == 0) { i = FindSocket(&s, (int *)0, (int *)0, match, &is_socket); if (i == 0) Panic(0, "No screen session found."); if (i != 1) Panic(0, "Use -S to specify a session."); } else { #ifdef NAME_MAX if (strlen(sty) > NAME_MAX) sty[NAME_MAX] = 0; #endif if (strlen(sty) > 2 * MAXSTR - 1) sty[2 * MAXSTR - 1] = 0; sprintf(SockPath + strlen(SockPath), "/%s", sty); is_socket = IsSocket(SockPath); if ((s = MakeClientSocket(1, is_socket)) == -1) exit(1); } bzero((char *)&m, sizeof(m)); m.type = query ? MSG_QUERY : MSG_COMMAND; if (attach_tty) { strncpy(m.m_tty, attach_tty_is_in_new_ns ? attach_tty_name_in_ns : attach_tty, sizeof(m.m_tty) - 1); m.m_tty[sizeof(m.m_tty) - 1] = 0; } p = m.m.command.cmd; n = 0; for (; *av && n < MAXARGS - 1; ++av, ++n) { len = strlen(*av) + 1; if (p + len >= m.m.command.cmd + sizeof(m.m.command.cmd) - 1) break; strcpy(p, *av); p += len; } *p = 0; m.m.command.nargs = n; strncpy(m.m.attach.auser, LoginName, sizeof(m.m.attach.auser) - 1); m.m.command.auser[sizeof(m.m.command.auser) - 1] = 0; m.protocol_revision = MSG_REVISION; strncpy(m.m.command.preselect, preselect ? preselect : "", sizeof(m.m.command.preselect) - 1); m.m.command.preselect[sizeof(m.m.command.preselect) - 1] = 0; m.m.command.apid = getpid(); debug1("SendCommandMsg writing '%s'\n", m.m.command.cmd); if (query) { /* Create a server socket so we can get back the result */ char *sp = SockPath + strlen(SockPath); char query[] = "-queryX"; char c; int r = -1; for (c = 'A'; c <= 'Z'; c++) { query[6] = c; strcpy(sp, query); /* XXX: strncpy? */ if ((r = MakeServerSocket(is_socket)) >= 0) break; } if (r < 0) { for (c = '0'; c <= '9'; c++) { query[6] = c; strcpy(sp, query); if ((r = MakeServerSocket(is_socket)) >= 0) break; } } if (r < 0) Panic(0, "Could not create a listening socket to read the results."); strncpy(m.m.command.writeback, SockPath, sizeof(m.m.command.writeback) - 1); m.m.command.writeback[sizeof(m.m.command.writeback) - 1] = '\0'; /* Send the message, then wait for a response */ signal(SIGCONT, QueryResultSuccess); signal(SIG_BYE, QueryResultFail); if (WriteMessage(s, &m)) Msg(errno, "write"); close(s); while (!QueryResult) pause(); signal(SIGCONT, SIG_DFL); signal(SIG_BYE, SIG_DFL); /* Read the result and spit it out to stdout */ ReceiveRaw(r); unlink(SockPath); if (QueryResult == 2) /* An error happened */ exit(1); } else { if (WriteMessage(s, &m)) Msg(errno, "write"); close(s); } } screen-4.9.1/display.c0000664000175000017500000025365314467014146013310 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include #include #include #ifndef sun # include #endif #include "config.h" #include "screen.h" #include "extern.h" #include "braille.h" #include "canvas.h" /* CSI parsing status */ enum { CSI_PB=0, CSI_PX=1, CSI_PY=2, CSI_DONE=3, CSI_ESC_SEEN, CSI_BEGIN, CSI_INACTIVE, CSI_INVALID }; static int CountChars __P((int)); static int DoAddChar __P((int)); static int BlankResize __P((int, int)); static int CallRewrite __P((int, int, int, int)); static void disp_readev_fn __P((struct event *, char *)); static void disp_processinput __P((struct display *, unsigned char *, int)); static void disp_writeev_fn __P((struct event *, char *)); #ifdef linux static void disp_writeev_eagain __P((struct event *, char *)); #endif static void disp_status_fn __P((struct event *, char *)); static void disp_hstatus_fn __P((struct event *, char *)); static void disp_blocked_fn __P((struct event *, char *)); #ifdef MAPKEYS static void disp_map_fn __P((struct event *, char *)); #endif static void disp_idle_fn __P((struct event *, char *)); #ifdef BLANKER_PRG static void disp_blanker_fn __P((struct event *, char *)); #endif static void WriteLP __P((int, int)); static void INSERTCHAR __P((int)); static void RAW_PUTCHAR __P((int)); #ifdef COLOR static void SetBackColor __P((int)); #endif static void RemoveStatusMinWait __P((void)); extern struct layer *flayer; extern struct win *windows, *fore; extern struct LayFuncs WinLf; extern int use_hardstatus; extern int MsgWait, MsgMinWait; extern const int Z0width, Z1width; extern unsigned char *blank, *null; extern struct mline mline_blank, mline_null, mline_old; extern struct mchar mchar_null, mchar_blank, mchar_so; extern struct NewWindow nwin_default; extern struct action idleaction; /* XXX shouldn't be here */ extern char *hstatusstring; extern char *captionstring; extern int pastefont; extern int idletimo; #ifdef BLANKER_PRG extern int pty_preopen; #if defined(TIOCSWINSZ) || defined(TIOCGWINSZ) extern struct winsize glwz; #endif extern char **NewEnv; extern int real_uid, real_gid; extern int ServerSocket, eff_uid, eff_gid; #endif /* * tputs needs this to calculate the padding */ #ifndef NEED_OSPEED extern #endif /* NEED_OSPEED */ short ospeed; struct display *display, *displays; #ifdef COLOR int attr2color[8][4]; int nattr2color; #endif #ifndef MULTI struct display TheDisplay; #endif /* * The default values */ int defobuflimit = OBUF_MAX; int defnonblock = -1; int defmousetrack = 0; #ifdef AUTO_NUKE int defautonuke = 0; #endif int captionalways; int hardstatusemu = HSTATUS_IGNORE; int focusminwidth, focusminheight; /* * Default layer management */ void DefProcess(bufp, lenp) char **bufp; int *lenp; { *bufp += *lenp; *lenp = 0; } void DefRedisplayLine(y, xs, xe, isblank) int y, xs, xe, isblank; { if (isblank == 0 && y >= 0) DefClearLine(y, xs, xe, 0); } void DefClearLine(y, xs, xe, bce) int y, xs, xe, bce; { LClearLine(flayer, y, xs, xe, bce, (struct mline *)0); } /*ARGSUSED*/ int DefRewrite(y, xs, xe, rend, doit) int y, xs, xe, doit; struct mchar *rend; { return EXPENSIVE; } /*ARGSUSED*/ int DefResize(wi, he) int wi, he; { return -1; } void DefRestore() { LAY_DISPLAYS(flayer, InsertMode(0)); /* ChangeScrollRegion(0, D_height - 1); */ LKeypadMode(flayer, 0); LCursorkeysMode(flayer, 0); LCursorVisibility(flayer, 0); LMouseMode(flayer, 0); LSetRendition(flayer, &mchar_null); LSetFlow(flayer, nwin_default.flowflag & FLOW_NOW); } /* * Blank layer management */ struct LayFuncs BlankLf = { DefProcess, 0, DefRedisplayLine, DefClearLine, DefRewrite, BlankResize, DefRestore, 0 }; /*ARGSUSED*/ static int BlankResize(wi, he) int wi, he; { flayer->l_width = wi; flayer->l_height = he; return 0; } /* * Generate new display, start with a blank layer. * The termcap arrays are not initialised here. * The new display is placed in the displays list. */ struct display * MakeDisplay(uname, utty, term, fd, pid, Mode) char *uname, *utty, *term; int fd, pid; struct mode *Mode; { struct acluser **u; struct baud_values *b; if (!*(u = FindUserPtr(uname)) && UserAdd(uname, (char *)0, u)) return 0; /* could not find or add user */ #ifdef MULTI if ((display = (struct display *)calloc(1, sizeof(*display))) == 0) return 0; #else if (displays) return 0; bzero((char *)&TheDisplay, sizeof(TheDisplay)); display = &TheDisplay; #endif display->d_next = displays; displays = display; D_flow = 1; D_nonblock = defnonblock; D_userfd = fd; D_readev.fd = D_writeev.fd = fd; D_readev.type = EV_READ; D_writeev.type = EV_WRITE; D_readev.data = D_writeev.data = (char *)display; D_readev.handler = disp_readev_fn; D_writeev.handler = disp_writeev_fn; evenq(&D_readev); D_writeev.condpos = &D_obuflen; D_writeev.condneg = &D_obuffree; evenq(&D_writeev); D_statusev.type = EV_TIMEOUT; D_statusev.data = (char *)display; D_statusev.handler = disp_status_fn; D_hstatusev.type = EV_TIMEOUT; D_hstatusev.data = (char *)display; D_hstatusev.handler = disp_hstatus_fn; D_blockedev.type = EV_TIMEOUT; D_blockedev.data = (char *)display; D_blockedev.handler = disp_blocked_fn; D_blockedev.condpos = &D_obuffree; D_blockedev.condneg = &D_obuflenmax; D_hstatusev.handler = disp_hstatus_fn; #ifdef MAPKEYS D_mapev.type = EV_TIMEOUT; D_mapev.data = (char *)display; D_mapev.handler = disp_map_fn; #endif D_idleev.type = EV_TIMEOUT; D_idleev.data = (char *)display; D_idleev.handler = disp_idle_fn; #ifdef BLANKER_PRG D_blankerev.type = EV_READ; D_blankerev.data = (char *)display; D_blankerev.handler = disp_blanker_fn; D_blankerev.fd = -1; #endif D_OldMode = *Mode; D_status_obuffree = -1; Resize_obuf(); /* Allocate memory for buffer */ D_obufmax = defobuflimit; D_obuflenmax = D_obuflen - D_obufmax; #ifdef AUTO_NUKE D_auto_nuke = defautonuke; #endif D_obufp = D_obuf; D_printfd = -1; D_userpid = pid; #ifdef POSIX if ((b = lookup_baud((int)cfgetospeed(&D_OldMode.tio)))) D_dospeed = b->idx; #else # ifdef TERMIO if ((b = lookup_baud(D_OldMode.tio.c_cflag & CBAUD))) D_dospeed = b->idx; # else D_dospeed = (short)D_OldMode.m_ttyb.sg_ospeed; # endif #endif debug1("New displays ospeed = %d\n", D_dospeed); strncpy(D_usertty, utty, sizeof(D_usertty) - 1); D_usertty[sizeof(D_usertty) - 1] = 0; strncpy(D_termname, term, MAXTERMLEN); D_termname[MAXTERMLEN] = 0; D_user = *u; D_processinput = ProcessInput; D_mousetrack = defmousetrack; return display; } void FreeDisplay() { struct win *p; #ifdef MULTI struct display *d, **dp; #endif #ifdef FONT FreeTransTable(); #endif #ifdef BLANKER_PRG KillBlanker(); #endif if (D_userfd >= 0) { Flush(3); if (!display) return; SetTTY(D_userfd, &D_OldMode); fcntl(D_userfd, F_SETFL, 0); } freetty(); if (D_tentry) free(D_tentry); D_tentry = 0; if (D_processinputdata) free(D_processinputdata); D_processinputdata = 0; D_tcinited = 0; evdeq(&D_hstatusev); evdeq(&D_statusev); evdeq(&D_readev); evdeq(&D_writeev); evdeq(&D_blockedev); #ifdef MAPKEYS evdeq(&D_mapev); if (D_kmaps) { free(D_kmaps); D_kmaps = 0; D_aseqs = 0; D_nseqs = 0; D_seqp = 0; D_seql = 0; D_seqh = 0; } #endif evdeq(&D_idleev); #ifdef BLANKER_PRG evdeq(&D_blankerev); #endif #ifdef HAVE_BRAILLE if (bd.bd_dpy == display) { bd.bd_start_braille = 0; StartBraille(); } #endif #ifdef MULTI for (dp = &displays; (d = *dp) ; dp = &d->d_next) if (d == display) break; ASSERT(d); if (D_status_lastmsg) free(D_status_lastmsg); if (D_obuf) free(D_obuf); *dp = display->d_next; #else /* MULTI */ ASSERT(display == displays); ASSERT(display == &TheDisplay); displays = 0; #endif /* MULTI */ while (D_canvas.c_slperp) FreeCanvas(D_canvas.c_slperp); D_cvlist = 0; for (p = windows; p; p = p->w_next) { if (p->w_pdisplay == display) p->w_pdisplay = 0; if (p->w_lastdisp == display) p->w_lastdisp = 0; if (p->w_readev.condneg == &D_status || p->w_readev.condneg == &D_obuflenmax) p->w_readev.condpos = p->w_readev.condneg = 0; } #ifdef ZMODEM for (p = windows; p; p = p->w_next) if (p->w_zdisplay == display) zmodem_abort(p, 0); #endif if (D_mousetrack) { D_mousetrack = 0; MouseMode(0); } #ifdef MULTI free((char *)display); #endif display = 0; } /* * if the adaptflag is on, we keep the size of this display, else * we may try to restore our old window sizes. */ void InitTerm(adapt) int adapt; { ASSERT(display); ASSERT(D_tcinited); D_top = D_bot = -1; AddCStr(D_IS); AddCStr(D_TI); /* Check for toggle */ if (D_IM && strcmp(D_IM, D_EI)) AddCStr(D_EI); D_insert = 0; #ifdef MAPKEYS AddCStr(D_KS); AddCStr(D_CCS); #else /* Check for toggle */ if (D_KS && strcmp(D_KS, D_KE)) AddCStr(D_KE); if (D_CCS && strcmp(D_CCS, D_CCE)) AddCStr(D_CCE); #endif D_keypad = 0; D_cursorkeys = 0; AddCStr(D_ME); AddCStr(D_EA); AddCStr(D_CE0); D_rend = mchar_null; D_atyp = 0; if (adapt == 0) ResizeDisplay(D_defwidth, D_defheight); ChangeScrollRegion(0, D_height - 1); D_x = D_y = 0; Flush(3); ClearAll(); debug1("we %swant to adapt all our windows to the display\n", (adapt) ? "" : "don't "); /* In case the size was changed by a init sequence */ CheckScreenSize((adapt) ? 2 : 0); } void FinitTerm() { ASSERT(display); #ifdef BLANKER_PRG KillBlanker(); #endif if (D_tcinited) { ResizeDisplay(D_defwidth, D_defheight); InsertMode(0); ChangeScrollRegion(0, D_height - 1); KeypadMode(0); CursorkeysMode(0); CursorVisibility(0); if (D_mousetrack) D_mousetrack = 0; MouseMode(0); ExtMouseMode(0); SetRendition(&mchar_null); SetFlow(FLOW_NOW); #ifdef MAPKEYS AddCStr(D_KE); AddCStr(D_CCE); #endif if (D_hstatus) ShowHStatus((char *)0); #ifdef RXVT_OSC ClearAllXtermOSC(); #endif D_x = D_y = -1; GotoPos(0, D_height - 1); AddChar('\r'); AddChar('\n'); AddCStr(D_TE); } Flush(3); } static void INSERTCHAR(c) int c; { ASSERT(display); if (!D_insert && D_x < D_width - 1) { if (D_IC || D_CIC) { if (D_IC) AddCStr(D_IC); else AddCStr2(D_CIC, 1); RAW_PUTCHAR(c); return; } InsertMode(1); if (!D_insert) { RefreshLine(D_y, D_x, D_width-1, 0); return; } } RAW_PUTCHAR(c); } void PUTCHAR(c) int c; { ASSERT(display); if (D_insert && D_x < D_width - 1) InsertMode(0); RAW_PUTCHAR(c); } void PUTCHARLP(c) int c; { if (D_x < D_width - 1) { if (D_insert) InsertMode(0); RAW_PUTCHAR(c); return; } if (D_CLP || D_y != D_bot) { int y = D_y; RAW_PUTCHAR(c); if (D_AM && !D_CLP) GotoPos(D_width - 1, y); return; } debug("PUTCHARLP: lp_missing!\n"); D_lp_missing = 1; D_rend.image = c; D_lpchar = D_rend; #ifdef DW_CHARS /* XXX -> PutChar ? */ if (D_mbcs) { D_lpchar.mbcs = c; D_lpchar.image = D_mbcs; D_mbcs = 0; D_x--; } #endif } /* * RAW_PUTCHAR() is for all text that will be displayed. * NOTE: charset Nr. 0 has a conversion table, but c1, c2, ... don't. */ STATIC void RAW_PUTCHAR(c) int c; { ASSERT(display); #ifdef FONT # ifdef UTF8 if (D_encoding == UTF8) { c = (c & 255) | (unsigned char)D_rend.font << 8 | (unsigned char)D_rend.fontx << 16; # ifdef DW_CHARS if (D_mbcs) { c = D_mbcs; if (D_x == D_width) D_x += D_AM ? 1 : -1; D_mbcs = 0; } else if (utf8_isdouble(c)) { D_mbcs = c; D_x++; return; } # endif if (c < 32) { AddCStr2(D_CS0, '0'); AddChar(c + 0x5f); AddCStr(D_CE0); goto addedutf8; } if (c < 0x80) { if (D_xtable && D_xtable[(int)(unsigned char)D_rend.font] && D_xtable[(int)(unsigned char)D_rend.font][(int)(unsigned char)c]) AddStr(D_xtable[(int)(unsigned char)D_rend.font][(int)(unsigned char)c]); else AddChar(c); } else AddUtf8(c); goto addedutf8; } # endif # ifdef DW_CHARS if (is_dw_font(D_rend.font)) { int t = c; if (D_mbcs == 0) { D_mbcs = c; D_x++; return; } D_x--; if (D_x == D_width - 1) D_x += D_AM ? 1 : -1; c = D_mbcs; D_mbcs = t; } # endif # if defined(ENCODINGS) && defined(DW_CHARS) if (D_encoding) c = PrepareEncodedChar(c); # endif # ifdef DW_CHARS kanjiloop: # endif if (D_xtable && D_xtable[(int)(unsigned char)D_rend.font] && D_xtable[(int)(unsigned char)D_rend.font][(int)(unsigned char)c]) AddStr(D_xtable[(int)(unsigned char)D_rend.font][(int)(unsigned char)c]); else AddChar(D_rend.font != '0' ? c : D_c0_tab[(int)(unsigned char)c]); #else /* FONT */ AddChar(c); #endif /* FONT */ #ifdef UTF8 addedutf8: #endif if (++D_x >= D_width) { if (D_AM == 0) D_x = D_width - 1; else if (!D_CLP || D_x > D_width) { D_x -= D_width; if (D_y < D_height-1 && D_y != D_bot) D_y++; } } #ifdef DW_CHARS if (D_mbcs) { c = D_mbcs; D_mbcs = 0; goto kanjiloop; } #endif } static int DoAddChar(c) int c; { /* this is for ESC-sequences only (AddChar is a macro) */ AddChar(c); return c; } void AddCStr(s) char *s; { if (display && s && *s) { ospeed = D_dospeed; tputs(s, 1, DoAddChar); } } void AddCStr2(s, c) char *s; int c; { if (display && s && *s) { ospeed = D_dospeed; tputs(tgoto(s, 0, c), 1, DoAddChar); } } /* Insert mode is a toggle on some terminals, so we need this hack: */ void InsertMode(on) int on; { if (display && on != D_insert && D_IM) { D_insert = on; if (on) AddCStr(D_IM); else AddCStr(D_EI); } } /* ...and maybe keypad application mode is a toggle, too: */ void KeypadMode(on) int on; { #ifdef MAPKEYS if (display) D_keypad = on; #else if (display && D_keypad != on && D_KS) { D_keypad = on; if (on) AddCStr(D_KS); else AddCStr(D_KE); } #endif } void CursorkeysMode(on) int on; { #ifdef MAPKEYS if (display) D_cursorkeys = on; #else if (display && D_cursorkeys != on && D_CCS) { D_cursorkeys = on; if (on) AddCStr(D_CCS); else AddCStr(D_CCE); } #endif } void ReverseVideo(on) int on; { if (display && D_revvid != on && D_CVR) { D_revvid = on; if (D_revvid) AddCStr(D_CVR); else AddCStr(D_CVN); } } void CursorVisibility(v) int v; { if (display && D_curvis != v) { if (D_curvis) AddCStr(D_VE); /* do this always, just to be safe */ D_curvis = 0; if (v == -1 && D_VI) AddCStr(D_VI); else if (v == 1 && D_VS) AddCStr(D_VS); else return; D_curvis = v; } } void MouseMode(mode) int mode; { if (!display) return; if (mode < D_mousetrack) mode = D_mousetrack; if (D_mouse != mode) { char mousebuf[20]; if (!D_CXT) return; if (D_mouse) { sprintf(mousebuf, "\033[?%dl", D_mouse); AddStr(mousebuf); } if (mode) { sprintf(mousebuf, "\033[?%dh", mode); AddStr(mousebuf); } D_mouse = mode; D_mouse_parse.state = CSI_INACTIVE; } } void ExtMouseMode(mode) int mode; { if (display && D_extmouse != mode) { char mousebuf[20]; if (!D_CXT) return; if (D_extmouse) { sprintf(mousebuf, "\033[?%dl", D_extmouse); AddStr(mousebuf); } if (mode) { sprintf(mousebuf, "\033[?%dh", mode); AddStr(mousebuf); } D_extmouse = mode; D_mouse_parse.state = CSI_INACTIVE; } } static int StrCost; /* ARGSUSED */ static int CountChars(c) int c; { StrCost++; return c; } int CalcCost(s) register char *s; { ASSERT(display); if (s) { StrCost = 0; ospeed = D_dospeed; tputs(s, 1, CountChars); return StrCost; } else return EXPENSIVE; } static int CallRewrite(y, xs, xe, doit) int y, xs, xe, doit; { struct canvas *cv, *cvlist, *cvlnext; struct viewport *vp; struct layer *oldflayer; int cost; debug3("CallRewrite %d %d %d\n", y, xs, xe); ASSERT(display); ASSERT(xe >= xs); vp = 0; for (cv = D_cvlist; cv; cv = cv->c_next) { if (y < cv->c_ys || y > cv->c_ye || xe < cv->c_xs || xs > cv->c_xe) continue; for (vp = cv->c_vplist; vp; vp = vp->v_next) if (y >= vp->v_ys && y <= vp->v_ye && xe >= vp->v_xs && xs <= vp->v_xe) break; if (vp) break; } if (doit) { oldflayer = flayer; flayer = cv->c_layer; cvlist = flayer->l_cvlist; cvlnext = cv->c_lnext; flayer->l_cvlist = cv; cv->c_lnext = 0; LayRewrite(y - vp->v_yoff, xs - vp->v_xoff, xe - vp->v_xoff, &D_rend, 1); flayer->l_cvlist = cvlist; cv->c_lnext = cvlnext; flayer = oldflayer; return 0; } if (cv == 0 || cv->c_layer == 0) return EXPENSIVE; /* not found or nothing on it */ if (xs < vp->v_xs || xe > vp->v_xe) return EXPENSIVE; /* crosses viewport boundaries */ if (y - vp->v_yoff < 0 || y - vp->v_yoff >= cv->c_layer->l_height) return EXPENSIVE; /* line not on layer */ if (xs - vp->v_xoff < 0 || xe - vp->v_xoff >= cv->c_layer->l_width) return EXPENSIVE; /* line not on layer */ #ifdef UTF8 if (D_encoding == UTF8) D_rend.font = 0; #endif oldflayer = flayer; flayer = cv->c_layer; debug3("Calling Rewrite %d %d %d\n", y - vp->v_yoff, xs - vp->v_xoff, xe - vp->v_xoff); cost = LayRewrite(y - vp->v_yoff, xs - vp->v_xoff, xe - vp->v_xoff, &D_rend, 0); flayer = oldflayer; if (D_insert) cost += D_EIcost + D_IMcost; return cost; } void GotoPos(x2, y2) int x2, y2; { register int dy, dx, x1, y1; register int costx, costy; register int m; register char *s; int CMcost; enum move_t xm = M_NONE, ym = M_NONE; if (!display) return; x1 = D_x; y1 = D_y; if (x1 == D_width) { if (D_CLP && D_AM) x1 = -1; /* don't know how the terminal treats this */ else x1--; } if (x2 == D_width) x2--; dx = x2 - x1; dy = y2 - y1; if (dy == 0 && dx == 0) return; debug2("GotoPos (%d,%d)", x1, y1); debug2(" -> (%d,%d)\n", x2, y2); if (!D_MS) /* Safe to move ? */ SetRendition(&mchar_null); if (y1 < 0 /* don't know the y position */ || (y2 > D_bot && y1 <= D_bot) /* have to cross border */ || (y2 < D_top && y1 >= D_top)) /* of scrollregion ? */ { DoCM: if (D_HO && !x2 && !y2) AddCStr(D_HO); else AddCStr(tgoto(D_CM, x2, y2)); D_x = x2; D_y = y2; return; } /* some scrollregion implementations don't allow movements * away from the region. sigh. */ if ((y1 > D_bot && y2 > y1) || (y1 < D_top && y2 < y1)) goto DoCM; /* Calculate CMcost */ if (D_HO && !x2 && !y2) s = D_HO; else s = tgoto(D_CM, x2, y2); CMcost = CalcCost(s); /* Calculate the cost to move the cursor to the right x position */ costx = EXPENSIVE; if (x1 >= 0) /* relative x positioning only if we know where we are */ { if (dx > 0) { if (D_CRI && (dx > 1 || !D_ND)) { costx = CalcCost(tgoto(D_CRI, 0, dx)); xm = M_CRI; } if ((m = D_NDcost * dx) < costx) { costx = m; xm = M_RI; } /* Speedup: dx <= LayRewrite() */ if (dx < costx && (m = CallRewrite(y1, x1, x2 - 1, 0)) < costx) { costx = m; xm = M_RW; } } else if (dx < 0) { if (D_CLE && (dx < -1 || !D_BC)) { costx = CalcCost(tgoto(D_CLE, 0, -dx)); xm = M_CLE; } if ((m = -dx * D_LEcost) < costx) { costx = m; xm = M_LE; } } else costx = 0; } /* Speedup: LayRewrite() >= x2 */ if (x2 + D_CRcost < costx && (m = (x2 ? CallRewrite(y1, 0, x2 - 1, 0) : 0) + D_CRcost) < costx) { costx = m; xm = M_CR; } /* Check if it is already cheaper to do CM */ if (costx >= CMcost) goto DoCM; /* Calculate the cost to move the cursor to the right y position */ costy = EXPENSIVE; if (dy > 0) { if (D_CDO && dy > 1) /* DO & NL are always != 0 */ { costy = CalcCost(tgoto(D_CDO, 0, dy)); ym = M_CDO; } if ((m = dy * ((x2 == 0) ? D_NLcost : D_DOcost)) < costy) { costy = m; ym = M_DO; } } else if (dy < 0) { if (D_CUP && (dy < -1 || !D_UP)) { costy = CalcCost(tgoto(D_CUP, 0, -dy)); ym = M_CUP; } if ((m = -dy * D_UPcost) < costy) { costy = m; ym = M_UP; } } else costy = 0; /* Finally check if it is cheaper to do CM */ if (costx + costy >= CMcost) goto DoCM; switch (xm) { case M_LE: while (dx++ < 0) AddCStr(D_BC); break; case M_CLE: AddCStr2(D_CLE, -dx); break; case M_RI: while (dx-- > 0) AddCStr(D_ND); break; case M_CRI: AddCStr2(D_CRI, dx); break; case M_CR: AddCStr(D_CR); D_x = 0; x1 = 0; /* FALLTHROUGH */ case M_RW: if (x1 < x2) (void) CallRewrite(y1, x1, x2 - 1, 1); break; default: break; } switch (ym) { case M_UP: while (dy++ < 0) AddCStr(D_UP); break; case M_CUP: AddCStr2(D_CUP, -dy); break; case M_DO: s = (x2 == 0) ? D_NL : D_DO; while (dy-- > 0) AddCStr(s); break; case M_CDO: AddCStr2(D_CDO, dy); break; default: break; } D_x = x2; D_y = y2; } void ClearAll() { ASSERT(display); ClearArea(0, 0, 0, D_width - 1, D_width - 1, D_height - 1, 0, 0); } void ClearArea(x1, y1, xs, xe, x2, y2, bce, uselayfn) int x1, y1, xs, xe, x2, y2, bce, uselayfn; { int y, xxe; struct canvas *cv; struct viewport *vp; debug2("Clear %d,%d", x1, y1); debug2(" %d-%d", xs, xe); debug2(" %d,%d", x2, y2); debug2(" uselayfn=%d bce=%d\n", uselayfn, bce); ASSERT(display); if (x1 == D_width) x1--; if (x2 == D_width) x2--; if (xs == -1) xs = x1; if (xe == -1) xe = x2; if (D_UT) /* Safe to erase ? */ SetRendition(&mchar_null); #ifdef COLOR if (D_BE) SetBackColor(bce); #endif if (D_lp_missing && y1 <= D_bot && xe >= D_width - 1) { if (y2 > D_bot || (y2 == D_bot && x2 >= D_width - 1)) D_lp_missing = 0; } if (x2 == D_width - 1 && (xs == 0 || y1 == y2) && xe == D_width - 1 && y2 == D_height - 1 && (!bce || D_BE)) { #ifdef AUTO_NUKE if (x1 == 0 && y1 == 0 && D_auto_nuke) NukePending(); #endif if (x1 == 0 && y1 == 0 && D_CL) { AddCStr(D_CL); D_y = D_x = 0; return; } /* * Workaround a hp700/22 terminal bug. Do not use CD where CE * is also appropriate. */ if (D_CD && (y1 < y2 || !D_CE)) { GotoPos(x1, y1); AddCStr(D_CD); return; } } if (x1 == 0 && xs == 0 && (xe == D_width - 1 || y1 == y2) && y1 == 0 && D_CCD && (!bce || D_BE)) { GotoPos(x1, y1); AddCStr(D_CCD); return; } xxe = xe; for (y = y1; y <= y2; y++, x1 = xs) { if (y == y2) xxe = x2; if (x1 == 0 && D_CB && (xxe != D_width - 1 || (D_x == xxe && D_y == y)) && (!bce || D_BE)) { GotoPos(xxe, y); AddCStr(D_CB); continue; } if (xxe == D_width - 1 && D_CE && (!bce || D_BE)) { GotoPos(x1, y); AddCStr(D_CE); continue; } if (uselayfn) { vp = 0; for (cv = D_cvlist; cv; cv = cv->c_next) { if (y < cv->c_ys || y > cv->c_ye || xxe < cv->c_xs || x1 > cv->c_xe) continue; for (vp = cv->c_vplist; vp; vp = vp->v_next) if (y >= vp->v_ys && y <= vp->v_ye && xxe >= vp->v_xs && x1 <= vp->v_xe) break; if (vp) break; } if (cv && cv->c_layer && x1 >= vp->v_xs && xxe <= vp->v_xe && y - vp->v_yoff >= 0 && y - vp->v_yoff < cv->c_layer->l_height && xxe - vp->v_xoff >= 0 && x1 - vp->v_xoff < cv->c_layer->l_width) { struct layer *oldflayer = flayer; struct canvas *cvlist, *cvlnext; flayer = cv->c_layer; cvlist = flayer->l_cvlist; cvlnext = cv->c_lnext; flayer->l_cvlist = cv; cv->c_lnext = 0; LayClearLine(y - vp->v_yoff, x1 - vp->v_xoff, xxe - vp->v_xoff, bce); flayer->l_cvlist = cvlist; cv->c_lnext = cvlnext; flayer = oldflayer; continue; } } ClearLine((struct mline *)0, y, x1, xxe, bce); } } /* * if cur_only > 0, we only redisplay current line, as a full refresh is * too expensive over a low baud line. */ void Redisplay(cur_only) int cur_only; { ASSERT(display); /* XXX do em all? */ InsertMode(0); ChangeScrollRegion(0, D_height - 1); KeypadMode(0); CursorkeysMode(0); CursorVisibility(0); MouseMode(0); ExtMouseMode(0); SetRendition(&mchar_null); SetFlow(FLOW_NOW); ClearAll(); #ifdef RXVT_OSC RefreshXtermOSC(); #endif if (cur_only > 0 && D_fore) RefreshArea(0, D_fore->w_y, D_width - 1, D_fore->w_y, 1); else RefreshAll(1); RefreshHStatus(); CV_CALL(D_forecv, LayRestore();LaySetCursor()); } void RedisplayDisplays(cur_only) int cur_only; { struct display *olddisplay = display; for (display = displays; display; display = display->d_next) Redisplay(cur_only); display = olddisplay; } /* XXX: use oml! */ void ScrollH(y, xs, xe, n, bce, oml) int y, xs, xe, n, bce; struct mline *oml; { int i; if (n == 0) return; if (xe != D_width - 1) { RefreshLine(y, xs, xe, 0); /* UpdateLine(oml, y, xs, xe); */ return; } GotoPos(xs, y); if (D_UT) SetRendition(&mchar_null); #ifdef COLOR if (D_BE) SetBackColor(bce); #endif if (n > 0) { if (n >= xe - xs + 1) n = xe - xs + 1; if (D_CDC && !(n == 1 && D_DC)) AddCStr2(D_CDC, n); else if (D_DC) { for (i = n; i--; ) AddCStr(D_DC); } else { RefreshLine(y, xs, xe, 0); /* UpdateLine(oml, y, xs, xe); */ return; } } else { if (-n >= xe - xs + 1) n = -(xe - xs + 1); if (!D_insert) { if (D_CIC && !(n == -1 && D_IC)) AddCStr2(D_CIC, -n); else if (D_IC) { for (i = -n; i--; ) AddCStr(D_IC); } else if (D_IM) { InsertMode(1); SetRendition(&mchar_null); #ifdef COLOR SetBackColor(bce); #endif for (i = -n; i--; ) INSERTCHAR(' '); bce = 0; /* all done */ } else { /* UpdateLine(oml, y, xs, xe); */ RefreshLine(y, xs, xe, 0); return; } } else { SetRendition(&mchar_null); #ifdef COLOR SetBackColor(bce); #endif for (i = -n; i--; ) INSERTCHAR(' '); bce = 0; /* all done */ } } if (bce && !D_BE) { if (n > 0) ClearLine((struct mline *)0, y, xe - n + 1, xe, bce); else ClearLine((struct mline *)0, y, xs, xs - n - 1, bce); } if (D_lp_missing && y == D_bot) { if (n > 0) WriteLP(D_width - 1 - n, y); D_lp_missing = 0; } } void ScrollV(xs, ys, xe, ye, n, bce) int xs, ys, xe, ye, n, bce; { int i; int up; int oldbot; int alok, dlok, aldlfaster; int missy = 0; ASSERT(display); if (n == 0) return; if (n >= ye - ys + 1 || -n >= ye - ys + 1) { ClearArea(xs, ys, xs, xe, xe, ye, bce, 0); return; } if (xs > D_vpxmin || xe < D_vpxmax) { RefreshArea(xs, ys, xe, ye, 0); return; } if (D_lp_missing) { if (D_bot > ye || D_bot < ys) missy = D_bot; else { missy = D_bot - n; if (missy > ye || missy < ys) D_lp_missing = 0; } } up = 1; if (n < 0) { up = 0; n = -n; } if (n >= ye - ys + 1) n = ye - ys + 1; oldbot = D_bot; if (ys < D_top || D_bot != ye) ChangeScrollRegion(ys, ye); alok = (D_AL || D_CAL || (ys >= D_top && ye == D_bot && up)); dlok = (D_DL || D_CDL || (ys >= D_top && ye == D_bot && !up)); if (D_top != ys && !(alok && dlok)) ChangeScrollRegion(ys, ye); if (D_lp_missing && (oldbot != D_bot || (oldbot == D_bot && up && D_top == ys && D_bot == ye))) { WriteLP(D_width - 1, oldbot); if (oldbot == D_bot) /* have scrolled */ { if (--n == 0) { /* XXX ChangeScrollRegion(oldtop, oldbot); */ if (bce && !D_BE) ClearLine((struct mline *)0, ye, xs, xe, bce); return; } } } if (D_UT) SetRendition(&mchar_null); #ifdef COLOR if (D_BE) SetBackColor(bce); #endif aldlfaster = (n > 1 && ys >= D_top && ye == D_bot && ((up && D_CDL) || (!up && D_CAL))); if ((up || D_SR) && D_top == ys && D_bot == ye && !aldlfaster) { if (up) { GotoPos(0, ye); for(i = n; i-- > 0; ) AddCStr(D_NL); /* was SF, I think NL is faster */ } else { GotoPos(0, ys); for(i = n; i-- > 0; ) AddCStr(D_SR); } } else if (alok && dlok) { if (up || ye != D_bot) { GotoPos(0, up ? ys : ye+1-n); if (D_CDL && !(n == 1 && D_DL)) AddCStr2(D_CDL, n); else for(i = n; i--; ) AddCStr(D_DL); } if (!up || ye != D_bot) { GotoPos(0, up ? ye+1-n : ys); if (D_CAL && !(n == 1 && D_AL)) AddCStr2(D_CAL, n); else for(i = n; i--; ) AddCStr(D_AL); } } else { RefreshArea(xs, ys, xe, ye, 0); return; } if (bce && !D_BE) { if (up) ClearArea(xs, ye - n + 1, xs, xe, xe, ye, bce, 0); else ClearArea(xs, ys, xs, xe, xe, ys + n - 1, bce, 0); } if (D_lp_missing && missy != D_bot) WriteLP(D_width - 1, missy); /* XXX ChangeScrollRegion(oldtop, oldbot); if (D_lp_missing && missy != D_bot) WriteLP(D_width - 1, missy); */ } void SetAttr(new) register int new; { register int i, j, old, typ; if (!display || (old = D_rend.attr) == new) return; #ifdef COLORS16 D_col16change = (old ^ new) & (A_BFG | A_BBG); new ^= D_col16change; if (old == new) return; #endif #if defined(TERMINFO) && defined(USE_SGR) if (D_SA) { char *tparm(); SetFont(ASCII); ospeed = D_dospeed; tputs(tparm(D_SA, new & A_SO, new & A_US, new & A_RV, new & A_BL, new & A_DI, new & A_BD, 0 , 0 , 0), 1, DoAddChar); D_rend.attr = new; D_atyp = 0; # ifdef COLOR if (D_hascolor) rend_setdefault(&D_rend); # endif return; } #endif D_rend.attr = new; typ = D_atyp; if ((new & old) != old) { if ((typ & ATYP_U)) AddCStr(D_UE); if ((typ & ATYP_S)) AddCStr(D_SE); if ((typ & ATYP_M)) { AddCStr(D_ME); #ifdef COLOR /* ansi attrib handling: \E[m resets color, too */ if (D_hascolor) rend_setdefault(&D_rend); #endif #ifdef FONT if (!D_CG0) { /* D_ME may also reset the alternate charset */ D_rend.font = 0; # ifdef ENCODINGS D_realfont = 0; # endif } #endif } old = 0; typ = 0; } old ^= new; for (i = 0, j = 1; old && i < NATTR; i++, j <<= 1) { if ((old & j) == 0) continue; old ^= j; if (D_attrtab[i]) { AddCStr(D_attrtab[i]); typ |= D_attrtyp[i]; } } D_atyp = typ; } #ifdef FONT void SetFont(new) int new; { int old = D_rend.font; if (!display || old == new) return; D_rend.font = new; #ifdef ENCODINGS if (D_encoding && CanEncodeFont(D_encoding, new)) return; if (new == D_realfont) return; D_realfont = new; #endif if (D_xtable && D_xtable[(int)(unsigned char)new] && D_xtable[(int)(unsigned char)new][256]) { AddCStr(D_xtable[(int)(unsigned char)new][256]); return; } if (!D_CG0 && new != '0') { new = ASCII; if (old == new) return; } if (new == ASCII) AddCStr(D_CE0); #ifdef DW_CHARS else if (new < ' ') { AddStr("\033$"); if (new > 2) AddChar('('); AddChar(new + '@'); } #endif else AddCStr2(D_CS0, new); } #endif #ifdef COLOR int color256to16(jj) int jj; { int min, max; int r, g, b; if (jj >= 232) { jj = (jj - 232) / 6; jj = (jj & 1) << 3 | (jj & 2 ? 7 : 0); } else if (jj >= 16) { jj -= 16; r = jj / 36; g = (jj / 6) % 6; b = jj % 6; min = r < g ? (r < b ? r : b) : (g < b ? g : b); max = r > g ? (r > b ? r : b) : (g > b ? g : b); if (min == max) jj = ((max + 1) & 2) << 2 | ((max + 1) & 4 ? 7 : 0); else jj = (b - min) / (max - min) << 2 | (g - min) / (max - min) << 1 | (r - min) / (max - min) | (max > 3 ? 8 : 0); } return jj; } #ifdef COLORS256 int color256to88(jj) int jj; { int r, g, b; if (jj >= 232) return (jj - 232) / 3 + 80; if (jj >= 16) { jj -= 16; r = jj / 36; g = (jj / 6) % 6; b = jj % 6; return ((r + 1) / 2) * 16 + ((g + 1) / 2) * 4 + ((b + 1) / 2) + 16; } return jj; } #endif void SetColor(f, b) int f, b; { int of, ob; static unsigned char sftrans[8] = {0,4,2,6,1,5,3,7}; if (!display) return; of = rend_getfg(&D_rend); ob = rend_getbg(&D_rend); #ifdef COLORS16 /* intense default not invented yet */ if (f == 0x100) f = 0; if (b == 0x100) b = 0; #endif debug2("SetColor %d %d", coli2e(of), coli2e(ob)); debug2(" -> %d %d\n", coli2e(f), coli2e(b)); debug2("(%d %d", of, ob); debug2(" -> %d %d)\n", f, b); if (!D_CAX && D_hascolor && ((f == 0 && f != of) || (b == 0 && b != ob))) { if (D_OP) AddCStr(D_OP); else { int oattr; oattr = D_rend.attr; AddCStr(D_ME ? D_ME : "\033[m"); #ifdef FONT if (D_ME && !D_CG0) { /* D_ME may also reset the alternate charset */ D_rend.font = 0; # ifdef ENCODINGS D_realfont = 0; # endif } #endif D_atyp = 0; D_rend.attr = 0; SetAttr(oattr); } of = ob = 0; } rend_setfg(&D_rend, f); rend_setbg(&D_rend, b); #ifdef COLORS16 D_col16change = 0; #endif if (!D_hascolor) return; f = f ? coli2e(f) : -1; b = b ? coli2e(b) : -1; of = of ? coli2e(of) : -1; ob = ob ? coli2e(ob) : -1; #ifdef COLORS256 if (f != of && f > 15 && D_CCO != 256) f = D_CCO == 88 && D_CAF ? color256to88(f) : color256to16(f); if (f != of && f > 15 && D_CAF) { AddCStr2(D_CAF, f); of = f; } if (b != ob && b > 15 && D_CCO != 256) b = D_CCO == 88 && D_CAB ? color256to88(b) : color256to16(b); if (b != ob && b > 15 && D_CAB) { AddCStr2(D_CAB, b); ob = b; } #endif if (f != of && f != (of | 8)) { if (f == -1) AddCStr("\033[39m"); /* works because AX is set */ else if (D_CAF) AddCStr2(D_CAF, f & 7); else if (D_CSF) AddCStr2(D_CSF, sftrans[f & 7]); } if (b != ob && b != (ob | 8)) { if (b == -1) AddCStr("\033[49m"); /* works because AX is set */ else if (D_CAB) AddCStr2(D_CAB, b & 7); else if (D_CSB) AddCStr2(D_CSB, sftrans[b & 7]); } #ifdef COLORS16 if (f != of && D_CXT && (f & 8) != 0 && f != -1) { # ifdef TERMINFO AddCStr2("\033[9%p1%dm", f & 7); # else AddCStr2("\033[9%dm", f & 7); # endif } if (b != ob && D_CXT && (b & 8) != 0 && b != -1) { # ifdef TERMINFO AddCStr2("\033[10%p1%dm", b & 7); # else AddCStr2("\033[10%dm", b & 7); # endif } #endif } static void SetBackColor(new) int new; { if (!display) return; SetColor(rend_getfg(&D_rend), new); } #endif /* COLOR */ void SetRendition(mc) struct mchar *mc; { if (!display) return; #ifdef COLOR if (nattr2color && D_hascolor && (mc->attr & nattr2color) != 0) { static struct mchar mmc; int i; mmc = *mc; for (i = 0; i < 8; i++) if (attr2color[i] && (mc->attr & (1 << i)) != 0) { if (mc->color == 0 && attr2color[i][3]) ApplyAttrColor(attr2color[i][3], &mmc); else if ((mc->color & 0x0f) == 0 && attr2color[i][2]) ApplyAttrColor(attr2color[i][2], &mmc); else if ((mc->color & 0xf0) == 0 && attr2color[i][1]) ApplyAttrColor(attr2color[i][1], &mmc); else ApplyAttrColor(attr2color[i][0], &mmc); } mc = &mmc; debug2("SetRendition: mapped to %02x %02x\n", (unsigned char)mc->attr, 0x99 - (unsigned char)mc->color); } # ifdef COLORS16 if (D_hascolor && D_CC8 && (mc->attr & (A_BFG|A_BBG))) { int a = mc->attr; if ((mc->attr & A_BFG) && D_MD) a |= A_BD; if ((mc->attr & A_BBG) && D_MB) a |= A_BL; if (D_rend.attr != a) SetAttr(a); } else # endif /* COLORS16 */ #endif /* COLOR */ if (D_rend.attr != mc->attr) SetAttr(mc->attr); #ifdef COLOR if (D_rend.color != mc->color # ifdef COLORS256 || D_rend.colorx != mc->colorx # endif # ifdef COLORS16 || D_col16change # endif ) SetColor(rend_getfg(mc), rend_getbg(mc)); #endif #ifdef FONT if (D_rend.font != mc->font) SetFont(mc->font); #ifdef UTF8 if (D_encoding == UTF8) D_rend.fontx = mc->fontx; #endif #endif } void SetRenditionMline(ml, x) struct mline *ml; int x; { if (!display) return; #ifdef COLOR if (nattr2color && D_hascolor && (ml->attr[x] & nattr2color) != 0) { struct mchar mc; copy_mline2mchar(&mc, ml, x); SetRendition(&mc); return; } # ifdef COLORS16 if (D_hascolor && D_CC8 && (ml->attr[x] & (A_BFG|A_BBG))) { int a = ml->attr[x]; if ((ml->attr[x] & A_BFG) && D_MD) a |= A_BD; if ((ml->attr[x] & A_BBG) && D_MB) a |= A_BL; if (D_rend.attr != a) SetAttr(a); } else # endif /* COLORS16 */ #endif /* COLOR */ if (D_rend.attr != ml->attr[x]) SetAttr(ml->attr[x]); #ifdef COLOR if (D_rend.color != ml->color[x] # ifdef COLORS256 || D_rend.colorx != ml->colorx[x] # endif # ifdef COLORS16 || D_col16change # endif ) { struct mchar mc; copy_mline2mchar(&mc, ml, x); SetColor(rend_getfg(&mc), rend_getbg(&mc)); } #endif #ifdef FONT if (D_rend.font != ml->font[x]) SetFont(ml->font[x]); #ifdef UTF8 if (D_encoding == UTF8) D_rend.fontx = ml->fontx[x]; #endif #endif } void MakeStatus(msg) char *msg; { register char *s, *t; register int max; if (!display) return; if (D_blocked) return; if (!D_tcinited) { debug("tc not inited, just writing msg\n"); if (D_processinputdata) return; /* XXX: better */ AddStr(msg); AddStr("\r\n"); Flush(0); return; } if (!use_hardstatus || !D_HS) { max = D_width; if (D_CLP == 0) max--; } else max = D_WS > 0 ? D_WS : (D_width - !D_CLP); if (D_status) { /* same message? */ if (strcmp(msg, D_status_lastmsg) == 0) { debug("same message - increase timeout"); if (!D_status_obufpos) SetTimeout(&D_statusev, MsgWait); return; } RemoveStatusMinWait(); } for (s = t = msg; *s && t - msg < max; ++s) if (*s == BELL) AddCStr(D_BL); else if ((unsigned char)*s >= ' ' && *s != 0177) *t++ = *s; *t = '\0'; if (t == msg) return; if (t - msg >= D_status_buflen) { char *buf; if (D_status_lastmsg) buf = realloc(D_status_lastmsg, t - msg + 1); else buf = malloc(t - msg + 1); if (buf) { D_status_lastmsg = buf; D_status_buflen = t - msg + 1; } } if (t - msg < D_status_buflen) strcpy(D_status_lastmsg, msg); D_status_len = t - msg; D_status_lastx = D_x; D_status_lasty = D_y; if (!use_hardstatus || D_has_hstatus == HSTATUS_IGNORE || D_has_hstatus == HSTATUS_MESSAGE) { D_status = STATUS_ON_WIN; debug1("using STATLINE %d\n", STATLINE); GotoPos(0, STATLINE); SetRendition(&mchar_so); InsertMode(0); AddStr(msg); if (D_status_len < max) { /* Wayne Davison: add extra space for readability */ D_status_len++; SetRendition(&mchar_null); AddChar(' '); if (D_status_len < max) { D_status_len++; AddChar(' '); AddChar('\b'); } AddChar('\b'); } D_x = -1; } else { D_status = STATUS_ON_HS; ShowHStatus(msg); } D_status_obufpos = D_obufp - D_obuf; ASSERT(D_status_obufpos > 0); if (D_status == STATUS_ON_WIN) { struct display *olddisplay = display; struct layer *oldflayer = flayer; /* this is copied over from RemoveStatus() */ D_status = 0; GotoPos(0, STATLINE); RefreshLine(STATLINE, 0, D_status_len - 1, 0); GotoPos(D_status_lastx, D_status_lasty); flayer = D_forecv ? D_forecv->c_layer : 0; if (flayer) LaySetCursor(); display = olddisplay; flayer = oldflayer; D_status = STATUS_ON_WIN; } } void RemoveStatus() { struct display *olddisplay; struct layer *oldflayer; int where; if (!display) return; if (!(where = D_status)) return; debug("RemoveStatus\n"); if (D_status_obuffree >= 0) { D_obuflen = D_status_obuflen; D_obuffree = D_status_obuffree; D_status_obuffree = -1; } D_status = 0; D_status_obufpos = 0; D_status_bell = 0; evdeq(&D_statusev); olddisplay = display; oldflayer = flayer; if (where == STATUS_ON_WIN) { if (captionalways || (D_canvas.c_slperp && D_canvas.c_slperp->c_slnext)) { GotoPos(0, STATLINE); RefreshLine(STATLINE, 0, D_status_len - 1, 0); GotoPos(D_status_lastx, D_status_lasty); } } else RefreshHStatus(); flayer = D_forecv ? D_forecv->c_layer : 0; if (flayer) LaySetCursor(); display = olddisplay; flayer = oldflayer; } /* Remove the status but make sure that it is seen for MsgMinWait ms */ static void RemoveStatusMinWait() { /* XXX: should flush output first if D_status_obufpos is set */ if (!D_status_bell && !D_status_obufpos) { struct timeval now; int ti; gettimeofday(&now, NULL); ti = (now.tv_sec - D_status_time.tv_sec) * 1000 + (now.tv_usec - D_status_time.tv_usec) / 1000; if (ti < MsgMinWait) DisplaySleep1000(MsgMinWait - ti, 0); } RemoveStatus(); } #ifdef UTF8 static int strlen_onscreen(unsigned char *c, unsigned char *end) { int len = 0; while (*c && (!end || c < end)) { int v, dec = 0; do { v = FromUtf8(*c++, &dec); if (v == -2) c--; } while (v < 0 && (!end || c < end)); if (!utf8_iscomb(v)) { if (utf8_isdouble(v)) len++; len++; } } return len; } static int PrePutWinMsg(s, start, max) char *s; int start, max; { /* Avoid double-encoding problem for a UTF-8 message on a UTF-8 locale. Ideally, this would not be necessary. But fixing it the Right Way will probably take way more time. So this will have to do for now. */ if (D_encoding == UTF8) { int chars = strlen_onscreen((unsigned char *)(s + start), (unsigned char *)(s + max)); D_encoding = 0; PutWinMsg(s, start, max + ((max - start) - chars)); /* Multibyte count */ D_encoding = UTF8; D_x -= (max - chars); /* Yak! But this is necessary to count for the fact that not every byte represents a character. */ return start + chars; } else { PutWinMsg(s, start, max); return max; } } #else static int PrePutWinMsg(s, start, max) char *s; int start, max; { PutWinMsg(s, start, max); return max; } #endif /* refresh the display's hstatus line */ void ShowHStatus(str) char *str; { int l, ox, oy, max; if (D_status == STATUS_ON_WIN && D_has_hstatus == HSTATUS_LASTLINE && STATLINE == D_height-1) return; /* sorry, in use */ if (D_blocked) return; if (D_HS && D_has_hstatus == HSTATUS_HS) { if (!D_hstatus && (str == 0 || *str == 0)) return; debug("ShowHStatus: using HS\n"); SetRendition(&mchar_null); InsertMode(0); if (D_hstatus) AddCStr(D_DS); D_hstatus = 0; if (str == 0 || *str == 0) return; AddCStr2(D_TS, 0); max = D_WS > 0 ? D_WS : (D_width - !D_CLP); if ((int)strlen(str) > max) AddStrn(str, max); else AddStr(str); AddCStr(D_FS); D_hstatus = 1; } else if (D_has_hstatus == HSTATUS_LASTLINE) { debug("ShowHStatus: using last line\n"); ox = D_x; oy = D_y; str = str ? str : ""; l = strlen(str); if (l > D_width) l = D_width; GotoPos(0, D_height - 1); SetRendition(captionalways || D_cvlist == 0 || D_cvlist->c_next ? &mchar_null: &mchar_so); l = PrePutWinMsg(str, 0, l); if (!captionalways && D_cvlist && !D_cvlist->c_next) while (l++ < D_width) PUTCHARLP(' '); if (l < D_width) ClearArea(l, D_height - 1, l, D_width - 1, D_width - 1, D_height - 1, 0, 0); if (ox != -1 && oy != -1) GotoPos(ox, oy); D_hstatus = *str ? 1 : 0; SetRendition(&mchar_null); } else if (D_has_hstatus == HSTATUS_FIRSTLINE) { debug("ShowHStatus: using first line\n"); ox = D_x; oy = D_y; str = str ? str : ""; l = strlen(str); if (l > D_width) l = D_width; GotoPos(0, 0); SetRendition(captionalways || D_cvlist == 0 || D_cvlist->c_next ? &mchar_null: &mchar_so); l = PrePutWinMsg(str, 0, l); if (!captionalways || (D_cvlist && !D_cvlist->c_next)) while (l++ < D_width) PUTCHARLP(' '); if (l < D_width) ClearArea(l, 0, l, D_width - 1, D_width - 1, 0, 0, 0); if (ox != -1 && oy != -1) GotoPos(ox, oy); D_hstatus = *str ? 1 : 0; SetRendition(&mchar_null); } else if (str && *str && D_has_hstatus == HSTATUS_MESSAGE) { debug("ShowHStatus: using message\n"); Msg(0, "%s", str); } } /* * Refreshes the hardstatus of the fore window. Shouldn't be here... */ void RefreshHStatus() { char *buf; #ifdef UTF8 int extrabytes = strlen(hstatusstring) - strlen_onscreen((unsigned char *)hstatusstring, NULL); #else int extrabytes = 0; #endif evdeq(&D_hstatusev); if (D_status == STATUS_ON_HS) return; buf = MakeWinMsgEv(hstatusstring, D_fore, '%', (D_HS && D_has_hstatus == HSTATUS_HS && D_WS > 0) ? D_WS : D_width - !D_CLP + extrabytes, &D_hstatusev, 0); if (buf && *buf) { ShowHStatus(buf); if (D_has_hstatus != HSTATUS_IGNORE && D_hstatusev.timeout.tv_sec) evenq(&D_hstatusev); } else ShowHStatus((char *)0); } /*********************************************************************/ /* * Here come the routines that refresh an arbitrary part of the screen. */ void RefreshAll(isblank) int isblank; { struct canvas *cv; ASSERT(display); debug("Signalling full refresh!\n"); for (cv = D_cvlist; cv; cv = cv->c_next) { CV_CALL(cv, LayRedisplayLine(-1, -1, -1, isblank)); display = cv->c_display; /* just in case! */ } RefreshArea(0, 0, D_width - 1, D_height - 1, isblank); } void RefreshArea(xs, ys, xe, ye, isblank) int xs, ys, xe, ye, isblank; { int y; ASSERT(display); debug2("Refresh Area: %d,%d", xs, ys); debug3(" - %d,%d (isblank=%d)\n", xe, ye, isblank); if (!isblank && xs == 0 && xe == D_width - 1 && ye == D_height - 1 && (ys == 0 || D_CD)) { ClearArea(xs, ys, xs, xe, xe, ye, 0, 0); isblank = 1; } for (y = ys; y <= ye; y++) RefreshLine(y, xs, xe, isblank); } void RefreshLine(y, from, to, isblank) int y, from, to, isblank; { struct viewport *vp, *lvp; struct canvas *cv, *lcv, *cvlist, *cvlnext; struct layer *oldflayer; int xx, yy, l; char *buf; struct win *p; ASSERT(display); debug2("RefreshLine %d %d", y, from); debug2(" %d %d\n", to, isblank); if (D_status == STATUS_ON_WIN && y == STATLINE) { if (to >= D_status_len) D_status_len = to + 1; return; /* can't refresh status */ } if (isblank == 0 && D_CE && to == D_width - 1 && from < to && D_status != STATUS_ON_HS) { GotoPos(from, y); if (D_UT || D_BE) SetRendition(&mchar_null); AddCStr(D_CE); isblank = 1; } if ((y == D_height - 1 && D_has_hstatus == HSTATUS_LASTLINE) || (y == 0 && D_has_hstatus == HSTATUS_FIRSTLINE) ) { RefreshHStatus(); return; } while (from <= to) { lcv = 0; lvp = 0; for (cv = display->d_cvlist; cv; cv = cv->c_next) { if (y == cv->c_ye + 1 && from >= cv->c_xs && from <= cv->c_xe) { #ifdef UTF8 int extrabytes = strlen(captionstring) - strlen_onscreen((unsigned char *)captionstring, NULL); #else int extrabytes = 0; #endif p = Layer2Window(cv->c_layer); buf = MakeWinMsgEv(captionstring, p, '%', cv->c_xe - cv->c_xs + (cv->c_xe + 1 < D_width || D_CLP) + extrabytes, &cv->c_captev, 0); if (cv->c_captev.timeout.tv_sec) evenq(&cv->c_captev); xx = to > cv->c_xe ? cv->c_xe : to; l = strlen(buf); GotoPos(from, y); SetRendition(&mchar_so); if (l > xx - cv->c_xs + 1) l = xx - cv->c_xs + 1; l = PrePutWinMsg(buf, from - cv->c_xs, l + extrabytes); from = cv->c_xs + l; for (; from <= xx; from++) PUTCHARLP(' '); break; } if (from == cv->c_xe + 1 && y >= cv->c_ys && y <= cv->c_ye + 1) { GotoPos(from, y); SetRendition(&mchar_so); PUTCHARLP(' '); from++; break; } if (y < cv->c_ys || y > cv->c_ye || to < cv->c_xs || from > cv->c_xe) continue; debug2("- canvas hit: %d %d", cv->c_xs, cv->c_ys); debug2(" %d %d\n", cv->c_xe, cv->c_ye); for (vp = cv->c_vplist; vp; vp = vp->v_next) { debug2(" - vp: %d %d", vp->v_xs, vp->v_ys); debug2(" %d %d\n", vp->v_xe, vp->v_ye); /* find leftmost overlapping vp */ if (y >= vp->v_ys && y <= vp->v_ye && from <= vp->v_xe && to >= vp->v_xs && (lvp == 0 || lvp->v_xs > vp->v_xs)) { lcv = cv; lvp = vp; } } } if (cv) continue; /* we advanced from */ if (lvp == 0) break; if (from < lvp->v_xs) { if (!isblank) DisplayLine(&mline_null, &mline_blank, y, from, lvp->v_xs - 1); from = lvp->v_xs; } /* call LayRedisplayLine on canvas lcv viewport lvp */ yy = y - lvp->v_yoff; xx = to < lvp->v_xe ? to : lvp->v_xe; if (lcv->c_layer && lcv->c_xoff + lcv->c_layer->l_width == from) { GotoPos(from, y); SetRendition(&mchar_blank); PUTCHARLP('|'); from++; } if (lcv->c_layer && yy == lcv->c_layer->l_height) { GotoPos(from, y); SetRendition(&mchar_blank); while (from <= lvp->v_xe && from - lvp->v_xoff < lcv->c_layer->l_width) { PUTCHARLP('-'); from++; } if (from >= lvp->v_xe + 1) continue; } if (lcv->c_layer == 0 || yy >= lcv->c_layer->l_height || from - lvp->v_xoff >= lcv->c_layer->l_width) { if (!isblank) DisplayLine(&mline_null, &mline_blank, y, from, lvp->v_xe); from = lvp->v_xe + 1; continue; } if (xx - lvp->v_xoff >= lcv->c_layer->l_width) xx = lcv->c_layer->l_width + lvp->v_xoff - 1; oldflayer = flayer; flayer = lcv->c_layer; cvlist = flayer->l_cvlist; cvlnext = lcv->c_lnext; flayer->l_cvlist = lcv; lcv->c_lnext = 0; LayRedisplayLine(yy, from - lvp->v_xoff, xx - lvp->v_xoff, isblank); flayer->l_cvlist = cvlist; lcv->c_lnext = cvlnext; flayer = oldflayer; from = xx + 1; } if (!isblank && from <= to) DisplayLine(&mline_null, &mline_blank, y, from, to); } /*********************************************************************/ /* clear lp_missing by writing the char on the screen. The * position must be safe. */ static void WriteLP(x2, y2) int x2, y2; { struct mchar oldrend; ASSERT(display); ASSERT(D_lp_missing); oldrend = D_rend; debug2("WriteLP(%d,%d)\n", x2, y2); #ifdef DW_CHARS if (D_lpchar.mbcs) { if (x2 > 0) x2--; else D_lpchar = mchar_blank; } #endif /* Can't use PutChar */ GotoPos(x2, y2); SetRendition(&D_lpchar); PUTCHAR(D_lpchar.image); #ifdef DW_CHARS if (D_lpchar.mbcs) PUTCHAR(D_lpchar.mbcs); #endif D_lp_missing = 0; SetRendition(&oldrend); } void ClearLine(oml, y, from, to, bce) struct mline *oml; int from, to, y, bce; { int x; #ifdef COLOR struct mchar bcechar; #endif debug3("ClearLine %d,%d-%d\n", y, from, to); if (D_UT) /* Safe to erase ? */ SetRendition(&mchar_null); #ifdef COLOR if (D_BE) SetBackColor(bce); #endif if (from == 0 && D_CB && (to != D_width - 1 || (D_x == to && D_y == y)) && (!bce || D_BE)) { GotoPos(to, y); AddCStr(D_CB); return; } if (to == D_width - 1 && D_CE && (!bce || D_BE)) { GotoPos(from, y); AddCStr(D_CE); return; } if (oml == 0) oml = &mline_null; #ifdef COLOR if (!bce) { DisplayLine(oml, &mline_blank, y, from, to); return; } bcechar = mchar_null; rend_setbg(&bcechar, bce); for (x = from; x <= to; x++) copy_mchar2mline(&bcechar, &mline_old, x); DisplayLine(oml, &mline_old, y, from, to); #else DisplayLine(oml, &mline_blank, y, from, to); #endif } void DisplayLine(oml, ml, y, from, to) struct mline *oml, *ml; int from, to, y; { register int x; int last2flag = 0, delete_lp = 0; ASSERT(display); ASSERT(y >= 0 && y < D_height); ASSERT(from >= 0 && from < D_width); ASSERT(to >= 0 && to < D_width); if (!D_CLP && y == D_bot && to == D_width - 1) { if (D_lp_missing || !cmp_mline(oml, ml, to)) { #ifdef DW_CHARS if ((D_IC || D_IM) && from < to && !dw_left(ml, to, D_encoding)) #else if ((D_IC || D_IM) && from < to) #endif { last2flag = 1; D_lp_missing = 0; to--; } else { delete_lp = !cmp_mchar_mline(&mchar_blank, oml, to) && (D_CE || D_DC || D_CDC); D_lp_missing = !cmp_mchar_mline(&mchar_blank, ml, to); copy_mline2mchar(&D_lpchar, ml, to); } } to--; } #ifdef DW_CHARS if (D_mbcs) { /* finish dw-char (can happen after a wrap) */ debug("DisplayLine finishing kanji\n"); SetRenditionMline(ml, from); PUTCHAR(ml->image[from]); from++; } #endif for (x = from; x <= to; x++) { #if 0 /* no longer needed */ if (x || D_x != D_width || D_y != y - 1) #endif { if (ml != NULL && (x < to || x != D_width - 1 || ml->image[x + 1])) if (cmp_mline(oml, ml, x)) continue; GotoPos(x, y); } #ifdef DW_CHARS if (dw_right(ml, x, D_encoding)) { x--; debug1("DisplayLine on right side of dw char- x now %d\n", x); GotoPos(x, y); } if (x == to && dw_left(ml, x, D_encoding)) break; /* don't start new kanji */ #endif SetRenditionMline(ml, x); PUTCHAR(ml->image[x]); #ifdef DW_CHARS if (dw_left(ml, x, D_encoding)) PUTCHAR(ml->image[++x]); #endif } #if 0 /* not needed any longer */ /* compare != 0 because ' ' can happen when clipping occures */ if (to == D_width - 1 && y < D_height - 1 && D_x == D_width && ml->image[to + 1]) GotoPos(0, y + 1); #endif if (last2flag) { GotoPos(x, y); SetRenditionMline(ml, x + 1); PUTCHAR(ml->image[x + 1]); GotoPos(x, y); SetRenditionMline(ml, x); INSERTCHAR(ml->image[x]); } else if (delete_lp) { if (D_UT) SetRendition(&mchar_null); if (D_DC) AddCStr(D_DC); else if (D_CDC) AddCStr2(D_CDC, 1); else if (D_CE) AddCStr(D_CE); } } void PutChar(c, x, y) struct mchar *c; int x, y; { GotoPos(x, y); SetRendition(c); PUTCHARLP(c->image); #ifdef DW_CHARS if (c->mbcs) { # ifdef UTF8 if (D_encoding == UTF8) D_rend.font = 0; # endif PUTCHARLP(c->mbcs); } #endif } void InsChar(c, x, xe, y, oml) struct mchar *c; int x, xe, y; struct mline *oml; { GotoPos(x, y); if (y == D_bot && !D_CLP) { if (x == D_width - 1) { D_lp_missing = 1; D_lpchar = *c; return; } if (xe == D_width - 1) D_lp_missing = 0; } if (x == xe) { SetRendition(c); PUTCHARLP(c->image); return; } if (!(D_IC || D_CIC || D_IM) || xe != D_width - 1) { RefreshLine(y, x, xe, 0); GotoPos(x + 1, y); /* UpdateLine(oml, y, x, xe); */ return; } InsertMode(1); if (!D_insert) { #ifdef DW_CHARS if (c->mbcs && D_IC) AddCStr(D_IC); if (D_IC) AddCStr(D_IC); else AddCStr2(D_CIC, c->mbcs ? 2 : 1); #else if (D_IC) AddCStr(D_IC); else AddCStr2(D_CIC, 1); #endif } SetRendition(c); RAW_PUTCHAR(c->image); #ifdef DW_CHARS if (c->mbcs) { # ifdef UTF8 if (D_encoding == UTF8) D_rend.font = 0; # endif if (D_x == D_width - 1) PUTCHARLP(c->mbcs); else RAW_PUTCHAR(c->mbcs); } #endif } void WrapChar(c, x, y, xs, ys, xe, ye, ins) struct mchar *c; int x, y; int xs, ys, xe, ye; int ins; { int bce; #ifdef COLOR bce = rend_getbg(c); #else bce = 0; #endif debug("WrapChar:"); debug2(" x %d y %d", x, y); debug2(" Dx %d Dy %d", D_x, D_y); debug2(" xs %d ys %d", xs, ys); debug3(" xe %d ye %d ins %d\n", xe, ye, ins); if (xs != 0 || x != D_width || !D_AM) { if (y == ye) ScrollV(xs, ys, xe, ye, 1, bce); else if (y < D_height - 1) y++; if (ins) InsChar(c, xs, xe, y, 0); else PutChar(c, xs, y); return; } if (y == ye) /* we have to scroll */ { debug("- scrolling\n"); ChangeScrollRegion(ys, ye); if (D_bot != y || D_x != D_width || (!bce && !D_BE)) { debug("- have to call ScrollV\n"); ScrollV(xs, ys, xe, ye, 1, bce); y--; } } else if (y == D_bot) /* remove unusable region? */ ChangeScrollRegion(0, D_height - 1); if (D_x != D_width || D_y != y) { if (D_CLP && y >= 0) /* don't even try if !LP */ RefreshLine(y, D_width - 1, D_width - 1, 0); debug2("- refresh last char -> x,y now %d,%d\n", D_x, D_y); if (D_x != D_width || D_y != y) /* sorry, no bonus */ { if (y == ye) ScrollV(xs, ys, xe, ye, 1, bce); GotoPos(xs, y == ye || y == D_height - 1 ? y : y + 1); } } debug("- writeing new char"); if (y != ye && y < D_height - 1) y++; if (ins != D_insert) InsertMode(ins); if (ins && !D_insert) { InsChar(c, 0, xe, y, 0); debug2(" -> done with insert (%d,%d)\n", D_x, D_y); return; } D_y = y; D_x = 0; SetRendition(c); RAW_PUTCHAR(c->image); #ifdef DW_CHARS if (c->mbcs) { # ifdef UTF8 if (D_encoding == UTF8) D_rend.font = 0; # endif RAW_PUTCHAR(c->mbcs); } #endif debug2(" -> done (%d,%d)\n", D_x, D_y); } int ResizeDisplay(wi, he) int wi, he; { ASSERT(display); debug2("ResizeDisplay: to (%d,%d).\n", wi, he); if (D_width == wi && D_height == he) { debug("ResizeDisplay: No change\n"); return 0; } if (D_width != wi && (D_height == he || !D_CWS) && D_CZ0 && (wi == Z0width || wi == Z1width)) { debug("ResizeDisplay: using Z0/Z1\n"); AddCStr(wi == Z0width ? D_CZ0 : D_CZ1); ChangeScreenSize(wi, D_height, 0); return (he == D_height) ? 0 : -1; } if (D_CWS) { debug("ResizeDisplay: using WS\n"); AddCStr(tgoto(D_CWS, wi, he)); ChangeScreenSize(wi, he, 0); return 0; } return -1; } void ChangeScrollRegion(newtop, newbot) int newtop, newbot; { if (display == 0) return; if (newtop == newbot) return; /* xterm etc can't do it */ if (newtop == -1) newtop = 0; if (newbot == -1) newbot = D_height - 1; if (D_CS == 0) { D_top = 0; D_bot = D_height - 1; return; } if (D_top == newtop && D_bot == newbot) return; debug2("ChangeScrollRegion: (%d - %d)\n", newtop, newbot); AddCStr(tgoto(D_CS, newbot, newtop)); D_top = newtop; D_bot = newbot; D_y = D_x = -1; /* Just in case... */ } #ifdef RXVT_OSC #define WT_FLAG "2" /* change to "0" to set both title and icon */ void SetXtermOSC(i, s, t) int i; char *s; char *t; { static char *oscs[][2] = { { WT_FLAG ";", "screen" }, /* set window title */ { "11;", ""}, /* background RGB */ { "20;", "" }, /* background */ { "39;", "black" }, /* default foreground (black?) */ { "49;", "white" } /* default background (white?) */ }; ASSERT(display); if (!D_CXT) return; if (!s) s = ""; if (!D_xtermosc[i] && !*s) return; if (i == 0 && !D_xtermosc[0]) AddStr("\033[22;" WT_FLAG "t"); /* stack titles (xterm patch #251) */ if (!*s) s = oscs[i][1]; D_xtermosc[i] = 1; AddStr("\033]"); AddStr(oscs[i][0]); AddStr(s); AddStr(t); } void ClearAllXtermOSC() { int i; for (i = 4; i >= 0; i--) SetXtermOSC(i, 0, "\a"); if (D_xtermosc[0]) AddStr("\033[23;" WT_FLAG "t"); /* unstack titles (xterm patch #251) */ } #undef WT_FLAG #endif /* * Output buffering routines */ void AddStr(str) char *str; { register char c; ASSERT(display); #ifdef UTF8 if (D_encoding == UTF8) { while ((c = *str++)) AddUtf8((unsigned char)c); return; } #endif while ((c = *str++)) AddChar(c); } void AddStrn(str, n) char *str; int n; { register char c; ASSERT(display); #ifdef UTF8 if (D_encoding == UTF8) { while ((c = *str++) && n-- > 0) AddUtf8((unsigned char)c); } else #endif while ((c = *str++) && n-- > 0) AddChar(c); while (n-- > 0) AddChar(' '); } void Flush(progress) int progress; { register int l; int wr; register char *p; ASSERT(display); l = D_obufp - D_obuf; debug1("Flush(): %d\n", l); if (l == 0) return; ASSERT(l + D_obuffree == D_obuflen); if (D_userfd < 0) { D_obuffree += l; D_obufp = D_obuf; return; } p = D_obuf; if (!progress) { if (fcntl(D_userfd, F_SETFL, 0)) debug1("Warning: BLOCK fcntl failed: %d\n", errno); } while (l) { if (progress) { fd_set w; FD_ZERO(&w); FD_SET(D_userfd, &w); struct timeval t; t.tv_sec = progress; t.tv_usec = 0; wr = select(FD_SETSIZE, (fd_set *)0, &w, (fd_set *)0, &t); if (wr == -1) { if (errno == EINTR) continue; debug1("Warning: select failed: %d\n", errno); break; } if (wr == 0) { /* no progress after 3 seconds. sorry. */ debug1("Warning: no progress after %d seconds\n", progress); break; } } wr = write(D_userfd, p, l); if (wr <= 0) { if (errno == EINTR) continue; debug1("Writing to display: %d\n", errno); break; } D_obuffree += wr; p += wr; l -= wr; } if (l) debug1("Warning: Flush could not write %d bytes\n", l); D_obuffree += l; D_obufp = D_obuf; if (!progress) { if (fcntl(D_userfd, F_SETFL, FNBLOCK)) debug1("Warning: NBLOCK fcntl failed: %d\n", errno); } if (D_blocked == 1) D_blocked = 0; D_blocked_fuzz = 0; } void freetty() { if (D_userfd >= 0) close(D_userfd); debug1("did freetty %d\n", D_userfd); D_userfd = -1; D_obufp = 0; D_obuffree = 0; if (D_obuf) free(D_obuf); D_obuf = 0; D_obuflen = 0; D_obuflenmax = -D_obufmax; D_blocked = 0; D_blocked_fuzz = 0; } /* * Asynchronous output routines by * Tim MacKenzie (tym@dibbler.cs.monash.edu.au) */ void Resize_obuf() { register int ind; ASSERT(display); if (D_status_obuffree >= 0) { ASSERT(D_obuffree == -1); RemoveStatusMinWait(); if (--D_obuffree > 0) /* redo AddChar decrement */ return; } if (D_obuflen && D_obuf) { ind = D_obufp - D_obuf; D_obuflen += GRAIN; D_obuffree += GRAIN; D_obuf = realloc(D_obuf, D_obuflen); } else { ind = 0; D_obuflen = GRAIN; D_obuffree = GRAIN; D_obuf = malloc(D_obuflen); } if (!D_obuf) Panic(0, "Out of memory"); D_obufp = D_obuf + ind; D_obuflenmax = D_obuflen - D_obufmax; debug1("ResizeObuf: resized to %d\n", D_obuflen); } void DisplaySleep1000(n, eat) int n; int eat; { char buf; fd_set r; struct timeval t; if (n <= 0) return; if (!display) { debug("DisplaySleep has no display sigh\n"); sleep1000(n); return; } t.tv_usec = (n % 1000) * 1000; t.tv_sec = n / 1000; FD_ZERO(&r); FD_SET(D_userfd, &r); if (select(FD_SETSIZE, &r, (fd_set *)0, (fd_set *)0, &t) > 0) { debug("display activity stopped sleep\n"); if (eat) read(D_userfd, &buf, 1); } debug2("DisplaySleep(%d) ending, eat was %d\n", n, eat); } #ifdef AUTO_NUKE void NukePending() {/* Nuke pending output in current display, clear screen */ register int len; int oldtop = D_top, oldbot = D_bot; struct mchar oldrend; int oldkeypad = D_keypad, oldcursorkeys = D_cursorkeys; int oldcurvis = D_curvis; int oldmouse = D_mouse; int oldextmouse = D_extmouse; oldrend = D_rend; len = D_obufp - D_obuf; debug1("NukePending: nuking %d chars\n", len); /* Throw away any output that we can... */ # ifdef POSIX tcflush(D_userfd, TCOFLUSH); # else # ifdef TCFLSH (void) ioctl(D_userfd, TCFLSH, (char *) 1); # endif # endif D_obufp = D_obuf; D_obuffree += len; D_top = D_bot = -1; AddCStr(D_IS); AddCStr(D_TI); /* Turn off all attributes. (Tim MacKenzie) */ if (D_ME) AddCStr(D_ME); else { #ifdef COLOR if (D_hascolor) AddStr("\033[m"); /* why is D_ME not set? */ #endif AddCStr(D_SE); AddCStr(D_UE); } /* Check for toggle */ if (D_IM && strcmp(D_IM, D_EI)) AddCStr(D_EI); D_insert = 0; /* Check for toggle */ #ifdef MAPKEYS if (D_KS && strcmp(D_KS, D_KE)) AddCStr(D_KS); if (D_CCS && strcmp(D_CCS, D_CCE)) AddCStr(D_CCS); #else if (D_KS && strcmp(D_KS, D_KE)) AddCStr(D_KE); D_keypad = 0; if (D_CCS && strcmp(D_CCS, D_CCE)) AddCStr(D_CCE); D_cursorkeys = 0; #endif AddCStr(D_CE0); D_rend = mchar_null; D_atyp = 0; AddCStr(D_DS); D_hstatus = 0; AddCStr(D_VE); D_curvis = 0; ChangeScrollRegion(oldtop, oldbot); SetRendition(&oldrend); KeypadMode(oldkeypad); CursorkeysMode(oldcursorkeys); CursorVisibility(oldcurvis); MouseMode(oldmouse); ExtMouseMode(oldextmouse); if (D_CWS) { debug("ResizeDisplay: using WS\n"); AddCStr(tgoto(D_CWS, D_width, D_height)); } else if (D_CZ0 && (D_width == Z0width || D_width == Z1width)) { debug("ResizeDisplay: using Z0/Z1\n"); AddCStr(D_width == Z0width ? D_CZ0 : D_CZ1); } } #endif /* AUTO_NUKE */ #ifdef linux /* linux' select can't handle flow control, so wait 100ms if * we get EAGAIN */ static void disp_writeev_eagain(ev, data) struct event *ev; char *data; { display = (struct display *)data; evdeq(&D_writeev); D_writeev.type = EV_WRITE; D_writeev.handler = disp_writeev_fn; evenq(&D_writeev); } #endif static void disp_writeev_fn(ev, data) struct event *ev; char *data; { int len, size = OUTPUT_BLOCK_SIZE; display = (struct display *)data; len = D_obufp - D_obuf; if (len < size) size = len; if (D_status_obufpos && size > D_status_obufpos) size = D_status_obufpos; ASSERT(len >= 0); size = write(D_userfd, D_obuf, size); if (size >= 0) { len -= size; if (len) { bcopy(D_obuf + size, D_obuf, len); debug2("ASYNC: wrote %d - remaining %d\n", size, len); } D_obufp -= size; D_obuffree += size; if (D_status_obufpos) { D_status_obufpos -= size; if (!D_status_obufpos) { debug("finished writing the status message\n"); /* we're finished displaying the message! */ if (D_status == STATUS_ON_WIN) { /* setup continue trigger */ D_status_obuflen = D_obuflen; D_status_obuffree = D_obuffree; /* setting obbuffree to 0 will make AddChar call * ResizeObuf */ D_obuffree = D_obuflen = 0; } gettimeofday(&D_status_time, NULL); SetTimeout(&D_statusev, MsgWait); evenq(&D_statusev); #ifdef HAVE_BRAILLE RefreshBraille(); /* let user see multiple Msg()s */ #endif } } if (D_blocked_fuzz) { D_blocked_fuzz -= size; if (D_blocked_fuzz < 0) D_blocked_fuzz = 0; } if (D_blockedev.queued) { if (D_obufp - D_obuf > D_obufmax / 2) { debug2("%s: resetting timeout to %g secs\n", D_usertty, D_nonblock/1000.); SetTimeout(&D_blockedev, D_nonblock); } else { debug1("%s: deleting blocked timeout\n", D_usertty); evdeq(&D_blockedev); } } if (D_blocked == 1 && D_obuf == D_obufp) { /* empty again, restart output */ debug1("%s: buffer empty, unblocking\n", D_usertty); D_blocked = 0; Activate(D_fore ? D_fore->w_norefresh : 0); D_blocked_fuzz = D_obufp - D_obuf; } } else { #ifdef linux /* linux flow control is badly broken */ if (errno == EAGAIN) { evdeq(&D_writeev); D_writeev.type = EV_TIMEOUT; D_writeev.handler = disp_writeev_eagain; SetTimeout(&D_writeev, 100); evenq(&D_writeev); } #endif if (errno != EINTR && errno != EAGAIN) #if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN) if (errno != EWOULDBLOCK) #endif Msg(errno, "Error writing output to display"); } } /* maximum mouse sequence length is SGR: ESC [ < b ; x ; y M */ #define MAX_MOUSE_SEQUENCE (3+10+1+10+1+10+1) static void disp_readev_fn(ev, data) struct event *ev; char *data; { /* We have to intercept mouse sequences in order to translate them * properly, and an incoming sequence could be spread over multiple * I/O reads. When this occurs, we buffer intermediate state in * D_mouse_params, and then use the reservation at the front of * bufspace to prepend the completed and translated mouse sequence. */ int size; char bufspace[MAX_MOUSE_SEQUENCE + IOSIZE]; unsigned char *buf = (unsigned char*)bufspace + MAX_MOUSE_SEQUENCE; struct canvas *cv; display = (struct display *)data; /* Hmmmm... a bit ugly... */ if (D_forecv) for (cv = D_forecv->c_layer->l_cvlist; cv; cv = cv->c_lnext) { display = cv->c_display; if (D_status == STATUS_ON_WIN) RemoveStatus(); } display = (struct display *)data; if (D_fore == 0) size = IOSIZE; else { #ifdef PSEUDOS if (W_UWP(D_fore)) size = sizeof(D_fore->w_pwin->p_inbuf) - D_fore->w_pwin->p_inlen; else #endif size = sizeof(D_fore->w_inbuf) - D_fore->w_inlen; } if (size > IOSIZE) size = IOSIZE; if (size <= 0) size = 1; /* Always allow one char for command keys */ size = read(D_userfd, buf, size); if (size < 0) { if (errno == EINTR || errno == EAGAIN) return; #if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN) if (errno == EWOULDBLOCK) return; #endif debug1("Read error: %d - hangup!\n", errno); Hangup(); sleep(1); return; } else if (size == 0) { debug("Found EOF - hangup!\n"); Hangup(); sleep(1); return; } if (D_blocked == 4) { D_blocked = 0; #ifdef BLANKER_PRG KillBlanker(); #endif Activate(D_fore ? D_fore->w_norefresh : 0); ResetIdle(); return; } #ifdef ZMODEM if (D_blocked > 1) /* 2, 3 */ { char *bufp; struct win *p; flayer = 0; for (p = windows; p ; p = p->w_next) if (p->w_zdisplay == display) { flayer = &p->w_layer; bufp = (char *)buf; while (size > 0) LayProcess(&bufp, &size); return; } debug("zmodem window gone, deblocking display"); zmodem_abort(0, display); } #endif if (idletimo > 0) ResetIdle(); if (D_fore) D_fore->w_lastdisp = display; if (D_mouse && D_forecv) { unsigned char *bp = (unsigned char *)buf; unsigned char *end = bp + size; unsigned char *mark = NULL; /* When mouse mode is enabled, buffer up incoming CSI until we * know whether it is a mouse sequence. If not a mouse event, * emit the CSI unchanged; if an invalid mouse event, swallow * it; otherwise, translate the sequence and emit it. * * Supported mouse events take two flavors. * * VT200: CSI M Cb Cx Cy * SGR: CSI < Ps ; Ps ; Ps M|m * * UTF-8 and UXRVT modes are explicitly rejected because they * introduce incompatibilities with other control sequences. * * NOTE: applications wishing to use SGR mode will normally * enable VT200 mode first as a fallback in case the terminal * does not support SGR mode. Thus, we must expect to receive * either mode's sequences when mouse mode is enabled. We will * dutifully translate whatever arrives, without attempting to * convert between modes on behalf of the application. */ switch (D_mouse_parse.state) { case CSI_PY: case CSI_PX: case CSI_PB: /* Partial mouse sequence; do not restore suppressed * characters. We will emit a translated version (if valid) * or swallow them (otherwise). */ break; case CSI_BEGIN: /* Partial CSI; restore suppressed characters in case it * turns out not to be a mouse sequence after all. */ *(--buf) = '['; ++size; /* fall through */ case CSI_ESC_SEEN: /* Escape character; restore it in case this turns out not * to be the start of a mouse sequence after all. */ *(--buf) = '\033'; ++size; break; default: break; }; while (bp != end) { unsigned char c = *(bp++); switch (D_mouse_parse.state) { case CSI_INACTIVE: if (c == '\033') { /* potential escape sequence */ mark = bp-1; D_mouse_parse.state = CSI_ESC_SEEN; } break; case CSI_ESC_SEEN: if (c == '[') { /* continue buffering an escape sequence */ D_mouse_parse.state = CSI_BEGIN; } else D_mouse_parse.state = CSI_INACTIVE; break; case CSI_BEGIN: if (c == 'M') { /* VT200 mouse sequence */ D_mouse_parse.state = CSI_PB; D_mouse_parse.sgrmode = 0; } else if (c == '<') { /* SGR mouse sequence */ D_mouse_parse.state = CSI_PB; D_mouse_parse.params[D_mouse_parse.state] = 0; D_mouse_parse.sgrmode = 1; } else D_mouse_parse.state = CSI_INACTIVE; break; case CSI_PB: case CSI_PX: case CSI_PY: if (D_mouse_parse.sgrmode) { /* SGR mode: parse decimal numbers */ if ('0' <= c && c <= '9') { D_mouse_parse.params[D_mouse_parse.state] *= 10; D_mouse_parse.params[D_mouse_parse.state] += c - '0'; } else if (D_mouse_parse.state == CSI_PY) { if (c == 'M' || c == 'm') D_mouse_parse.state = CSI_DONE; else D_mouse_parse.state = CSI_INVALID; } else if (c == ';') { D_mouse_parse.state++; D_mouse_parse.params[D_mouse_parse.state] = 0; } else D_mouse_parse.state = CSI_INVALID; } else { /* VT200 mode: read raw binary values */ D_mouse_parse.params[D_mouse_parse.state++] = c; } break; default: break; } if (D_mouse_parse.state == CSI_INVALID) { /* swallow invalid sequence, but emit whatever came before */ if (buf < mark) disp_processinput(display, buf, mark-buf); buf = bp; size = end - bp; D_mouse_parse.state = CSI_INACTIVE; } else if (D_mouse_parse.state == CSI_DONE) { /* emit whatever came before this sequence */ if (buf < mark) disp_processinput(display, buf, mark-buf); buf = bp; size = end - bp; int x = D_mouse_parse.params[CSI_PX]; int y = D_mouse_parse.params[CSI_PY]; int bias = D_mouse_parse.sgrmode? 1 : 33; x -= bias; y -= bias; if (x >= D_forecv->c_xs && x <= D_forecv->c_xe && y >= D_forecv->c_ys && y <= D_forecv->c_ye) { if ((D_fore && D_fore->w_mouse) || (D_mousetrack && D_forecv->c_layer->l_mode == 1)) { /* Send clicks only if the window is expecting clicks */ x -= D_forecv->c_xoff; y -= D_forecv->c_yoff; if (x >= 0 && x < D_forecv->c_layer->l_width && y >= 0 && y < D_forecv->c_layer->l_height) { char tmp[MAX_MOUSE_SEQUENCE+1]; int n; x += bias; y += bias; if (D_mouse_parse.sgrmode) { n = snprintf( tmp, MAX_MOUSE_SEQUENCE, "\033[<%d;%d;%d%c", D_mouse_parse.params[CSI_PB], x, y, c); } else { n = snprintf( tmp, MAX_MOUSE_SEQUENCE, "\033[M%c%c%c", D_mouse_parse.params[CSI_PB], x, y); } if (n > MAX_MOUSE_SEQUENCE) n = MAX_MOUSE_SEQUENCE; /* emit sequence */ buf -= n; size += n; memcpy(buf, tmp, n); } } } else if (D_mousetrack) { /* 'focus' to the clicked region, only on mouse up */ int focus = 0; if (D_mouse_parse.sgrmode) focus = (c == 'm'); else focus = (D_mouse_parse.params[CSI_PB] == '#'); struct canvas *cv = FindCanvas(x, y); if (focus && cv) { SetForeCanvas(display, cv); /* XXX: Do we want to reset the input buffer? */ } } D_mouse_parse.state = CSI_INACTIVE; } } if (D_mouse_parse.state != CSI_INACTIVE) { /* suppress partial sequence at end */ size = mark? mark - buf : 0; } } if (size > 0) disp_processinput(display, buf, size); } static void disp_processinput(display, buf, size) struct display* display; unsigned char* buf; int size; { #ifdef ENCODINGS if (D_encoding != (D_forecv ? D_forecv->c_layer->l_encoding : 0)) { int i, j, c, enc; char buf2[IOSIZE * 2 + 10]; enc = D_forecv ? D_forecv->c_layer->l_encoding : 0; for (i = j = 0; i < size; i++) { c = ((unsigned char *)buf)[i]; c = DecodeChar(c, D_encoding, &D_decodestate); if (c == -2) i--; /* try char again */ if (c < 0) continue; if (pastefont) { int font = 0; j += EncodeChar(buf2 + j, c, enc, &font); j += EncodeChar(buf2 + j, -1, enc, &font); } else j += EncodeChar(buf2 + j, c, enc, 0); if (j > (int)sizeof(buf2) - 10) /* just in case... */ break; } (*D_processinput)(buf2, j); return; } #endif (*D_processinput)((char *)buf, size); } static void disp_status_fn(ev, data) struct event *ev; char *data; { display = (struct display *)data; debug1("disp_status_fn for display %lx\n", (long)display); if (D_status) RemoveStatus(); } static void disp_hstatus_fn(ev, data) struct event *ev; char *data; { display = (struct display *)data; if (D_status == STATUS_ON_HS) { SetTimeout(ev, 1); evenq(ev); return; } RefreshHStatus(); } static void disp_blocked_fn(ev, data) struct event *ev; char *data; { struct win *p; display = (struct display *)data; debug1("blocked timeout %s\n", D_usertty); if (D_obufp - D_obuf > D_obufmax + D_blocked_fuzz) { debug("stopping output to display\n"); D_blocked = 1; /* re-enable all windows */ for (p = windows; p; p = p->w_next) if (p->w_readev.condneg == &D_obuflenmax) { debug1("freeing window #%d\n", p->w_number); p->w_readev.condpos = p->w_readev.condneg = 0; } } } #ifdef MAPKEYS static void disp_map_fn(ev, data) struct event *ev; char *data; { char *p; int l, i; unsigned char *q; display = (struct display *)data; debug("Flushing map sequence\n"); if (!(l = D_seql)) return; p = (char *)D_seqp - l; D_seqp = D_kmaps + 3; D_seql = 0; if ((q = D_seqh) != 0) { D_seqh = 0; i = q[0] << 8 | q[1]; i &= ~KMAP_NOTIMEOUT; debug1("Mapping former hit #%d - ", i); debug2("%d(%s) - ", q[2], q + 3); if (StuffKey(i)) ProcessInput2((char *)q + 3, q[2]); if (display == 0) return; l -= q[2]; p += q[2]; } else D_dontmap = 1; ProcessInput(p, l); } #endif static void disp_idle_fn(ev, data) struct event *ev; char *data; { struct display *olddisplay; display = (struct display *)data; debug("idle timeout\n"); if (idletimo <= 0 || idleaction.nr == RC_ILLEGAL) return; olddisplay = display; flayer = D_forecv->c_layer; fore = D_fore; DoAction(&idleaction, -1); if (idleaction.nr == RC_BLANKER) return; for (display = displays; display; display = display->d_next) if (olddisplay == display) break; if (display) ResetIdle(); } void ResetIdle() { if (idletimo > 0) { SetTimeout(&D_idleev, idletimo); if (!D_idleev.queued) evenq(&D_idleev); } else evdeq(&D_idleev); } #ifdef BLANKER_PRG static void disp_blanker_fn(ev, data) struct event *ev; char *data; { char buf[IOSIZE], *b; int size; display = (struct display *)data; size = read(D_blankerev.fd, buf, IOSIZE); if (size <= 0) { evdeq(&D_blankerev); close(D_blankerev.fd); D_blankerev.fd = -1; return; } for (b = buf; size; size--) AddChar(*b++); } void KillBlanker() { int oldtop = D_top, oldbot = D_bot; struct mchar oldrend; if (D_blankerev.fd == -1) return; if (D_blocked == 4) D_blocked = 0; evdeq(&D_blankerev); close(D_blankerev.fd); D_blankerev.fd = -1; Kill(D_blankerpid, SIGHUP); D_top = D_bot = -1; oldrend = D_rend; if (D_ME) { AddCStr(D_ME); AddCStr(D_ME); } else { #ifdef COLOR if (D_hascolor) AddStr("\033[m\033[m"); /* why is D_ME not set? */ #endif AddCStr(D_SE); AddCStr(D_UE); } AddCStr(D_VE); AddCStr(D_CE0); D_rend = mchar_null; D_atyp = 0; D_curvis = 0; D_x = D_y = -1; ChangeScrollRegion(oldtop, oldbot); SetRendition(&oldrend); ClearAll(); } void RunBlanker(cmdv) char **cmdv; { char *m; int pid; int slave = -1; int ptype = 0; char termname[MAXTERMLEN + 6]; #ifndef TIOCSWINSZ char libuf[20], cobuf[20]; #endif char **np; strcpy(termname, "TERM="); strncpy(termname + 5, D_termname, MAXTERMLEN - 6); termname[sizeof(termname) - 1] = 0; KillBlanker(); D_blankerpid = -1; if ((D_blankerev.fd = OpenDevice(cmdv, 0, &ptype, &m)) == -1) { Msg(0, "OpenDevice failed"); return; } #ifdef O_NOCTTY if (pty_preopen) { if ((slave = open(m, O_RDWR|O_NOCTTY)) == -1) { Msg(errno, "%s", m); close(D_blankerev.fd); D_blankerev.fd = -1; return; } } #endif switch (pid = (int)fork()) { case -1: Msg(errno, "fork"); close(D_blankerev.fd); D_blankerev.fd = -1; close(slave); return; case 0: displays = 0; ServerSocket = -1; #ifdef SIGPIPE signal(SIGPIPE, SIG_DFL); #endif if (setgid(real_gid) || setuid(real_uid)) Panic(errno, "setuid/setgid"); eff_uid = real_uid; eff_gid = real_gid; brktty(D_userfd); freetty(); #ifdef DEBUG if (dfp && dfp != stderr) fclose(dfp); #endif if (slave != -1) { close(0); dup(slave); close(slave); closeallfiles(D_blankerev.fd); slave = dup(0); } else closeallfiles(D_blankerev.fd); #ifdef DEBUG if (dfp) { char buf[256]; sprintf(buf, "%s/screen.blanker", DEBUGDIR); if ((dfp = fopen(buf, "a")) == 0) dfp = stderr; else (void) chmod(buf, 0666); } debug1("=== RunBlanker: pid %d\n", (int)getpid()); #endif close(0); close(1); close(2); if (open(m, O_RDWR)) Panic(errno, "Cannot open %s", m); dup(0); dup(0); close(D_blankerev.fd); if (slave != -1) close(slave); InitPTY(0); fgtty(0); SetTTY(0, &D_OldMode); np = NewEnv + 3; *np++ = NewEnv[0]; *np++ = termname; #ifdef TIOCSWINSZ glwz.ws_col = D_width; glwz.ws_row = D_height; (void)ioctl(0, TIOCSWINSZ, (char *)&glwz); #else /* Always turn off nonblocking mode */ (void)fcntl(0, F_SETFL, 0); sprintf(libuf, "LINES=%d", D_height); sprintf(cobuf, "COLUMNS=%d", D_width); *np++ = libuf; *np++ = cobuf; #endif debug1("calling execvpe %s\n", *cmdv); execvpe(*cmdv, cmdv, NewEnv + 3); debug1("exec error: %d\n", errno); Panic(errno, "Cannot exec '%s'", *cmdv); default: break; } D_blankerpid = pid; evenq(&D_blankerev); D_blocked = 4; ClearAll(); close(slave); } #endif /* BLANKER_PRG */ screen-4.9.1/ansi.h0000664000175000017500000001067614467014146012576 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #define NATTR 6 #define ATTR_DI 0 /* Dim mode */ #define ATTR_US 1 /* Underscore mode */ #define ATTR_BD 2 /* Bold mode */ #define ATTR_RV 3 /* Reverse mode */ #define ATTR_SO 4 /* Standout mode */ #define ATTR_BL 5 /* Blinking */ #define A_DI (1<font[(x) + 1] == 0xff && (unsigned char)(ml)->image[(x) + 1] == 0xff : \ ((unsigned char)(ml)->font[x] & 0x1f) != 0 && ((unsigned char)(ml)->font[x] & 0xe0) == 0 \ ) # define dw_right(ml, x, enc) ((enc == UTF8) ? \ (unsigned char)(ml)->font[x] == 0xff && (unsigned char)(ml)->image[x] == 0xff : \ ((unsigned char)(ml)->font[x] & 0xe0) == 0x80 \ ) # else # define dw_left(ml, x, enc) ( \ ((unsigned char)(ml)->font[x] & 0x1f) != 0 && ((unsigned char)(ml)->font[x] & 0xe0) == 0 \ ) # define dw_right(ml, x, enc) ( \ ((unsigned char)(ml)->font[x] & 0xe0) == 0x80 \ ) # endif /* UTF8 */ #else # define dw_left(ml, x, enc) 0 # define dw_right(ml, x, enc) 0 #endif screen-4.9.1/comm.sh0000664000175000017500000000404014467014146012746 0ustar alexalex#! /bin/sh if test -z "$AWK"; then AWK=awk fi if test -z "$CC"; then CC=cc fi if test -z "$srcdir"; then srcdir=. fi LC_ALL=C export LC_ALL rm -f comm.h cat << EOF > comm.h /* * This file is automagically created from comm.c -- DO NOT EDIT */ struct comm { char *name; int flags; #ifdef MULTIUSER AclBits userbits[ACL_BITS_PER_CMD]; #endif }; #define ARGS_MASK (3) #define ARGS_0 (0) #define ARGS_1 (1) #define ARGS_2 (2) #define ARGS_3 (3) #define ARGS_PLUS1 (1<<2) #define ARGS_PLUS2 (1<<3) #define ARGS_PLUS3 (1<<4) #define ARGS_ORMORE (1<<5) #define NEED_FORE (1<<6) /* this command needs a fore window */ #define NEED_DISPLAY (1<<7) /* this command needs a display */ #define NEED_LAYER (1<<8) /* this command needs a layer */ #define CAN_QUERY (1<<9) /* this command can be queried, i.e. used with -Q to get back a result to stdout */ #define ARGS_01 (ARGS_0 | ARGS_PLUS1) #define ARGS_02 (ARGS_0 | ARGS_PLUS2) #define ARGS_12 (ARGS_1 | ARGS_PLUS1) #define ARGS_23 (ARGS_2 | ARGS_PLUS1) #define ARGS_24 (ARGS_2 | ARGS_PLUS2) #define ARGS_34 (ARGS_3 | ARGS_PLUS1) #define ARGS_012 (ARGS_0 | ARGS_PLUS1 | ARGS_PLUS2) #define ARGS_0123 (ARGS_0 | ARGS_PLUS1 | ARGS_PLUS2 | ARGS_PLUS3) #define ARGS_123 (ARGS_1 | ARGS_PLUS1 | ARGS_PLUS2) #define ARGS_124 (ARGS_1 | ARGS_PLUS1 | ARGS_PLUS3) #define ARGS_1234 (ARGS_1 | ARGS_PLUS1 | ARGS_PLUS2 | ARGS_PLUS3) struct action { int nr; char **args; int *argl; int quiet; /* Suppress (currently unused) 0x01 - Error message 0x02 - Normal message */ }; #define RC_ILLEGAL -1 EOF $AWK < ${srcdir}/comm.c >> comm.h ' /^ [{] ".*/ { if (old > $2) { printf("***ERROR: %s <= %s !!!\n\n", $2, old); exit 1; } old = $2; } ' $CC -E -I. -I${srcdir} ${srcdir}/comm.c > comm.cpp sed < comm.cpp \ -n \ -e '/^ *{ "/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e '/^ *{ "/s/^ *{ "\([^"]*\)".*/\1/p' \ | $AWK ' /.*/ { printf "#define RC_%s %d\n",$0,i++; } END { printf "\n#define RC_LAST %d\n",i-1; } ' >> comm.h chmod a-w comm.h rm -f comm.cpp screen-4.9.1/NEWS.3.60000664000175000017500000000327414467014146012473 0ustar alexalex ---------------------------- What's new in screen-3.6 ? ---------------------------- * Input translation! This makes the vt100 emulation complete. As an addition it is now possible to bind any command to any (function-) key. See the man page for more details (bindkey command). * Status line support. Each window can have a different status line. Use the ANSI APC string to set the status line, i.e.: _\ (For convenience the xterm sequence is also accepted.) You may want to add termcap * '' ':hs:ts=\E_:fs=\E\\:ds=\E_\E\\:' terminfo * '' ':hs:ts=\E_:fs=\E\\:ds=\E_\E\\:' to your ~/.screenrc to make screen advertise the hardstatus support. * Zombie feature added. Windows now may generate a message (with a timestamp) if they die and stay around until the user presses a key. * New paste syntax: Paste can now concatenate registers and paste either on screen or in another register. This makes the old "ins_reg", "copy_reg" commands obsolete. * More architectures supported. Screen now runs on AIX3.2.5, Solaris, NeXT and some other exotic platforms. * Kanji support added. Screen understands JIS, EUC and SJIS coding. This is an experimental feature. * GR charset switching (ISO 2022) implemented. Can be enabled with the "gr" command. * C1 sequences implemented (see the "c1" command). * Tek support from Xiaoguang Zhang. Apply tek.patch if you want to make screen pass tek sequences. * List of new commands: bindkey, c1, command, defc1, defgr, defkanji, gr, kanji, mapdefault, mapnotnext, maptimeout, pastefont, printcmd, readreg, stuff, zombie * Lots of other bugs fixed. screen-4.9.1/viewport.c0000664000175000017500000000761314467014146013513 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "config.h" #include "screen.h" #include "extern.h" #include "viewport.h" extern struct display *display; int RethinkDisplayViewports() { struct canvas *cv; struct viewport *vp, *vpn; /* free old viewports */ for (cv = display->d_cvlist; cv; cv = cv->c_next) { for (vp = cv->c_vplist; vp; vp = vpn) { vp->v_canvas = 0; vpn = vp->v_next; bzero((char *)vp, sizeof(*vp)); free(vp); } cv->c_vplist = 0; } display->d_vpxmin = -1; display->d_vpxmax = -1; for (cv = display->d_cvlist; cv; cv = cv->c_next) { if ((vp = (struct viewport *)malloc(sizeof *vp)) == 0) return -1; #ifdef HOLE vp->v_canvas = cv; vp->v_xs = cv->c_xs; vp->v_ys = (cv->c_ys + cv->c_ye) / 2; vp->v_xe = cv->c_xe; vp->v_ye = cv->c_ye; vp->v_xoff = cv->c_xoff; vp->v_yoff = cv->c_yoff; vp->v_next = cv->c_vplist; cv->c_vplist = vp; if ((vp = (struct viewport *)malloc(sizeof *vp)) == 0) return -1; vp->v_canvas = cv; vp->v_xs = (cv->c_xs + cv->c_xe) / 2; vp->v_ys = (3 * cv->c_ys + cv->c_ye) / 4; vp->v_xe = cv->c_xe; vp->v_ye = (cv->c_ys + cv->c_ye) / 2 - 1; vp->v_xoff = cv->c_xoff; vp->v_yoff = cv->c_yoff; vp->v_next = cv->c_vplist; cv->c_vplist = vp; if ((vp = (struct viewport *)malloc(sizeof *vp)) == 0) return -1; vp->v_canvas = cv; vp->v_xs = cv->c_xs; vp->v_ys = (3 * cv->c_ys + cv->c_ye) / 4; vp->v_xe = (3 * cv->c_xs + cv->c_xe) / 4 - 1; vp->v_ye = (cv->c_ys + cv->c_ye) / 2 - 1; vp->v_xoff = cv->c_xoff; vp->v_yoff = cv->c_yoff; vp->v_next = cv->c_vplist; cv->c_vplist = vp; if ((vp = (struct viewport *)malloc(sizeof *vp)) == 0) return -1; vp->v_canvas = cv; vp->v_xs = cv->c_xs; vp->v_ys = cv->c_ys; vp->v_xe = cv->c_xe; vp->v_ye = (3 * cv->c_ys + cv->c_ye) / 4 - 1; vp->v_xoff = cv->c_xoff; vp->v_yoff = cv->c_yoff; vp->v_next = cv->c_vplist; cv->c_vplist = vp; #else vp->v_canvas = cv; vp->v_xs = cv->c_xs; vp->v_ys = cv->c_ys; vp->v_xe = cv->c_xe; vp->v_ye = cv->c_ye; vp->v_xoff = cv->c_xoff; vp->v_yoff = cv->c_yoff; vp->v_next = cv->c_vplist; cv->c_vplist = vp; #endif if (cv->c_xs < display->d_vpxmin || display->d_vpxmin == -1) display->d_vpxmin = cv->c_xs; if (cv->c_xe > display->d_vpxmax || display->d_vpxmax == -1) display->d_vpxmax = cv->c_xe; } return 0; } void RethinkViewportOffsets(struct canvas *cv) { struct viewport *vp; for (vp = cv->c_vplist; vp; vp = vp->v_next) { vp->v_xoff = cv->c_xoff; vp->v_yoff = cv->c_yoff; } } screen-4.9.1/teln.c0000664000175000017500000003066614467014146012602 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include #include #include #include #include "config.h" #ifdef BUILTIN_TELNET #include "screen.h" #include "extern.h" extern struct win *fore; extern struct layer *flayer; extern int visual_bell; extern char screenterm[]; extern int af; static void TelReply __P((struct win *, char *, int)); static void TelDocmd __P((struct win *, int, int)); static void TelDosub __P((struct win *)); // why TEL_DEFPORT has " #define TEL_DEFPORT "23" #define TEL_CONNECTING (-2) #define TC_IAC 255 #define TC_DONT 254 #define TC_DO 253 #define TC_WONT 252 #define TC_WILL 251 #define TC_SB 250 #define TC_BREAK 243 #define TC_SE 240 #define TC_S "S b swWdDc" #define TO_BINARY 0 #define TO_ECHO 1 #define TO_SGA 3 #define TO_TM 6 #define TO_TTYPE 24 #define TO_NAWS 31 #define TO_TSPEED 32 #define TO_LFLOW 33 #define TO_LINEMODE 34 #define TO_XDISPLOC 35 #define TO_NEWENV 39 #define TO_S "be c t wsf xE E" static unsigned char tn_init[] = { TC_IAC, TC_DO, TO_SGA, TC_IAC, TC_WILL, TO_TTYPE, TC_IAC, TC_WILL, TO_NAWS, TC_IAC, TC_WILL, TO_LFLOW, }; static void tel_connev_fn(ev, data) struct event *ev; char *data; { struct win *p = (struct win *)data; if (connect(p->w_ptyfd, (struct sockaddr *)&p->w_telsa, sizeof(p->w_telsa)) && errno != EISCONN) { char buf[1024]; buf[0] = ' '; strncpy(buf + 1, strerror(errno), sizeof(buf) - 2); buf[sizeof(buf) - 1] = 0; WriteString(p, buf, strlen(buf)); WindowDied(p, 0, 0); return; } WriteString(p, "connected.\r\n", 12); evdeq(&p->w_telconnev); p->w_telstate = 0; } int TelOpenAndConnect(struct win *p) { int fd, on = 1; char buf[256]; struct addrinfo hints, *res0, *res; if (!(p->w_cmdargs[1])) { Msg(0, "Usage: screen //telnet host [port]"); return -1; } memset(&hints, 0, sizeof(hints)); hints.ai_family = af; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; if(getaddrinfo(p->w_cmdargs[1], p->w_cmdargs[2] ? p->w_cmdargs[2] : TEL_DEFPORT, &hints, &res0)) { Msg(0, "unknown host: %s", p->w_cmdargs[1]); return -1; } for(res = res0; res; res = res->ai_next) { if((fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1) { if(res->ai_next) continue; else { Msg(errno, "TelOpenAndConnect: socket"); freeaddrinfo(res0); return -1; } } if (setsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on))) Msg(errno, "TelOpenAndConnect: setsockopt SO_OOBINLINE"); if (p->w_cmdargs[2] && strcmp(p->w_cmdargs[2], TEL_DEFPORT)) snprintf(buf, 256, "Trying %s %s...", p->w_cmdargs[1], p->w_cmdargs[2]); else snprintf(buf, 256, "Trying %s...", p->w_cmdargs[1]); WriteString(p, buf, strlen(buf)); if (connect(fd, res->ai_addr, res->ai_addrlen)) { if (errno == EINPROGRESS) { p->w_telstate = TEL_CONNECTING; p->w_telconnev.fd = fd; p->w_telconnev.handler = tel_connev_fn; p->w_telconnev.data = (char *)p; p->w_telconnev.type = EV_WRITE; p->w_telconnev.pri = 1; debug("telnet connect in progress...\n"); evenq(&p->w_telconnev); } else { close(fd); if(res->ai_next) continue; else { Msg(errno, "TelOpenAndConnect: connect"); freeaddrinfo(res0); return -1; } } } else WriteString(p, "connected.\r\n", 12); if (!(p->w_cmdargs[2] && strcmp(p->w_cmdargs[2], TEL_DEFPORT))) TelReply(p, (char *)tn_init, sizeof(tn_init)); p->w_ptyfd = fd; memcpy(&p->w_telsa, &res->ai_addr, sizeof(res->ai_addr)); freeaddrinfo(res0); return 0; } return -1; } int TelIsline(p) struct win *p; { return !fore->w_telropts[TO_SGA]; } void TelProcessLine(bufpp, lenp) char **bufpp; int *lenp; { int echo = !fore->w_telropts[TO_ECHO]; unsigned char c; char *tb; int tl; char *buf = *bufpp; int l = *lenp; while (l--) { c = *(unsigned char *)buf++; if (fore->w_telbufl + 2 >= IOSIZE) { WBell(fore, visual_bell); continue; } if (c == '\r') { if (echo) WriteString(fore, "\r\n", 2); fore->w_telbuf[fore->w_telbufl++] = '\r'; fore->w_telbuf[fore->w_telbufl++] = '\n'; tb = fore->w_telbuf; tl = fore->w_telbufl; LayProcess(&tb, &tl); fore->w_telbufl = 0; continue; } if (c == '\b' && fore->w_telbufl > 0) { if (echo) { WriteString(fore, (char *)&c, 1); WriteString(fore, " ", 1); WriteString(fore, (char *)&c, 1); } fore->w_telbufl--; } if ((c >= 0x20 && c <= 0x7e) || c >= 0xa0) { if (echo) WriteString(fore, (char *)&c, 1); fore->w_telbuf[fore->w_telbufl++] = c; } } *lenp = 0; } int DoTelnet(buf, lenp, f) char *buf; int *lenp; int f; { int echo = !fore->w_telropts[TO_ECHO]; int cmode = fore->w_telropts[TO_SGA]; int bin = fore->w_telropts[TO_BINARY]; char *p = buf, *sbuf; int trunc = 0; int c; int l = *lenp; sbuf = p; while (l-- > 0) { c = *(unsigned char *)p++; if (c == TC_IAC || (c == '\r' && (l ==0 || *p != '\n') && cmode && !bin)) { if (cmode && echo) { WriteString(fore, sbuf, p - sbuf); sbuf = p; } if (f-- <= 0) { trunc++; l--; } if (l < 0) { p--; /* drop char */ break; } if (l) bcopy(p, p + 1, l); if (c == TC_IAC) *p++ = c; else if (c == '\r') *p++ = 0; else if (c == '\n') { p[-1] = '\r'; *p++ = '\n'; } } } *lenp = p - buf; return trunc; } /* modifies data in-place, returns new length */ int TelIn(p, buf, len, free) struct win *p; char *buf; int len; int free; { char *rp, *wp; int c; rp = wp = buf; while (len-- > 0) { c = *(unsigned char *)rp++; if (p->w_telstate >= TC_WILL && p->w_telstate <= TC_DONT) { TelDocmd(p, p->w_telstate, c); p->w_telstate = 0; continue; } if (p->w_telstate == TC_SB || p->w_telstate == TC_SE) { if (p->w_telstate == TC_SE && c == TC_IAC) p->w_telsubidx--; if (p->w_telstate == TC_SE && c == TC_SE) { p->w_telsubidx--; TelDosub(p); p->w_telstate = 0; continue; } if (p->w_telstate == TC_SB && c == TC_IAC) p->w_telstate = TC_SE; else p->w_telstate = TC_SB; p->w_telsubbuf[p->w_telsubidx] = c; if (p->w_telsubidx < sizeof(p->w_telsubbuf) - 1) p->w_telsubidx++; continue; } if (p->w_telstate == TC_IAC) { if ((c >= TC_WILL && c <= TC_DONT) || c == TC_SB) { p->w_telsubidx = 0; p->w_telstate = c; continue; } p->w_telstate = 0; if (c != TC_IAC) continue; } else if (c == TC_IAC) { p->w_telstate = c; continue; } if (p->w_telstate == '\r') { p->w_telstate = 0; if (c == 0) continue; /* suppress trailing \0 */ } else if (c == '\n' && !p->w_telropts[TO_SGA]) { /* oops... simulate terminal line mode: insert \r */ if (wp + 1 == rp) { if (free-- > 0) { if (len) bcopy(rp, rp + 1, len); rp++; *wp++ = '\r'; } } else *wp++ = '\r'; } if (c == '\r') p->w_telstate = c; *wp++ = c; } return wp - buf; } static void TelReply(p, str, len) struct win *p; char *str; int len; { if (len <= 0) return; if (p->w_inlen + len > IOSIZE) { Msg(0, "Warning: telnet protocol overrun!"); return; } bcopy(str, p->w_inbuf + p->w_inlen, len); p->w_inlen += len; } static void TelDocmd(p, cmd, opt) struct win *p; int cmd, opt; { unsigned char b[3]; int repl = 0; if (cmd == TC_WONT) debug2("[<-WONT %c %d]\n", TO_S[opt], opt); if (cmd == TC_WILL) debug2("[<-WILL %c %d]\n", TO_S[opt], opt); if (cmd == TC_DONT) debug2("[<-DONT %c %d]\n", TO_S[opt], opt); if (cmd == TC_DO) debug2("[<-DO %c %d]\n", TO_S[opt], opt); switch(cmd) { case TC_WILL: if (p->w_telropts[opt] || opt == TO_TM) return; repl = TC_DONT; if (opt == TO_ECHO || opt == TO_SGA || opt == TO_BINARY) { p->w_telropts[opt] = 1; /* setcon(); */ repl = TC_DO; } break; case TC_WONT: if (!p->w_telropts[opt] || opt == TO_TM) return; repl = TC_DONT; #if 0 if (opt == TO_ECHO || opt == TO_SGA) setcon(); #endif p->w_telropts[opt] = 0; break; case TC_DO: if (p->w_telmopts[opt]) return; repl = TC_WONT; if (opt == TO_TTYPE || opt == TO_SGA || opt == TO_BINARY || opt == TO_NAWS || opt == TO_TM || opt == TO_LFLOW) { repl = TC_WILL; p->w_telmopts[opt] = 1; } p->w_telmopts[TO_TM] = 0; break; case TC_DONT: if (!p->w_telmopts[opt]) return; repl = TC_WONT; p->w_telmopts[opt] = 0; break; } b[0] = TC_IAC; b[1] = repl; b[2] = opt; if (repl == TC_WONT) debug2("[->WONT %c %d]\n", TO_S[opt], opt); if (repl == TC_WILL) debug2("[->WILL %c %d]\n", TO_S[opt], opt); if (repl == TC_DONT) debug2("[->DONT %c %d]\n", TO_S[opt], opt); if (repl == TC_DO) debug2("[->DO %c %d]\n", TO_S[opt], opt); TelReply(p, (char *)b, 3); if (cmd == TC_DO && opt == TO_NAWS) TelWindowSize(p); } static void TelDosub(p) struct win *p; { char trepl[MAXTERMLEN + 6 + 1]; int l; switch(p->w_telsubbuf[0]) { case TO_TTYPE: if (p->w_telsubidx != 2 || p->w_telsubbuf[1] != 1) return; l = strlen(screenterm); if (l >= MAXTERMLEN) break; sprintf(trepl, "%c%c%c%c%s%c%c", TC_IAC, TC_SB, TO_TTYPE, 0, screenterm, TC_IAC, TC_SE); TelReply(p, trepl, l + 6); break; case TO_LFLOW: if (p->w_telsubidx != 2) return; debug1("[FLOW %d]\r\n", p->w_telsubbuf[1]); break; default: break; } } void TelBreak(p) struct win *p; { static unsigned char tel_break[] = { TC_IAC, TC_BREAK }; TelReply(p, (char *)tel_break, 2); } void TelWindowSize(p) struct win *p; { char s[20], trepl[20], *t; int i; debug2("TelWindowSize %d %d\n", p->w_width, p->w_height); if (p->w_width == 0 || p->w_height == 0 || !p->w_telmopts[TO_NAWS]) return; sprintf(s, "%c%c%c%c%c%c%c%c%c", TC_SB, TC_SB, TO_NAWS, p->w_width / 256, p->w_width & 255, p->w_height / 256, p->w_height & 255, TC_SE, TC_SE); t = trepl; for (i = 0; i < 9; i++) if ((unsigned char)(*t++ = s[i]) == TC_IAC) *t++ = TC_IAC; trepl[0] = TC_IAC; t[-2] = TC_IAC; debug(" - sending"); for (i = 0; trepl + i < t; i++) debug1(" %02x", (unsigned char)trepl[i]); debug("\n"); TelReply(p, trepl, t - trepl); } static char tc_s[] = TC_S; static char to_s[] = TO_S; void TelStatus(p, buf, l) struct win *p; char *buf; int l; { int i; *buf++ = '['; for (i = 0; to_s[i]; i++) { if (to_s[i] == ' ' || p->w_telmopts[i] == 0) continue; *buf++ = to_s[i]; } *buf++ = ':'; for (i = 0; to_s[i]; i++) { if (to_s[i] == ' ' || p->w_telropts[i] == 0) continue; *buf++ = to_s[i]; } if (p->w_telstate == TEL_CONNECTING) buf[-1] = 'C'; else if (p->w_telstate && p->w_telstate != '\r') { *buf++ = ':'; *buf++ = tc_s[p->w_telstate - TC_SE]; } *buf++ = ']'; *buf = 0; return; } #endif /* BUILTIN_TELNET */ screen-4.9.1/COPYING0000664000175000017500000010451314467014146012520 0ustar alexalex GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . screen-4.9.1/term.sh0000664000175000017500000000562314467014146012772 0ustar alexalex#! /bin/sh if test -z "$AWK"; then AWK=awk fi if test -z "$srcdir"; then srcdir=. fi LC_ALL=C export LC_ALL rm -f term.h cat << EOF > term.h /* * This file is automagically created from term.c -- DO NOT EDIT */ #define T_FLG 0 #define T_NUM 1 #define T_STR 2 struct term { char *tcname; int type; }; union tcu { int flg; int num; char *str; }; EOF # # SCO-Unix sufferers may need to use the following lines: # perl -p < ${srcdir}/term.c \ # -e 's/"/"C/ if /"[A-Z]."/;' \ # -e 'y/[a-z]/[A-Z]/ if /"/;' \ # sed < ${srcdir}/term.c \ -e '/"[A-Z]."/s/"/"C/' \ -e '/"/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ | $AWK ' /^ [{] ".*KMAPDEF[(].*$/{ if (min == 0) min = s max = s; } /^ [{] ".*KMAPADEF[(].*$/{ if (amin == 0) amin = s amax = s; } /^ [{] ".*KMAPMDEF[(].*$/{ if (mmin == 0) mmin = s mmax = s; } /^ [{] ".*$/{ a=substr($2,2,length($2)-3); b=substr($3,3,3); if (nolist == 0) { printf "#define d_%s d_tcs[%d].%s\n",a,s,b printf "#define D_%s (D_tcs[%d].%s)\n",a,s,b } s++; } /\/* define/{ printf "#define %s %d\n",$3,s } /\/* nolist/{ nolist = 1; } /\/* list/{ nolist = 0; } END { printf "\n#ifdef MAPKEYS\n" printf "# define KMAPDEFSTART %d\n", min printf "# define NKMAPDEF %d\n", max-min+1 printf "# define KMAPADEFSTART %d\n", amin printf "# define NKMAPADEF %d\n", amax-amin+1 printf "# define KMAPMDEFSTART %d\n", mmin printf "# define NKMAPMDEF %d\n", mmax-mmin+1 printf "#endif\n" } ' | sed -e s/NUM/num/ -e s/STR/str/ -e s/FLG/flg/ \ >> term.h rm -f kmapdef.c cat << EOF > kmapdef.c /* * This file is automagically created from term.c -- DO NOT EDIT */ #include "config.h" #ifdef MAPKEYS EOF $AWK < ${srcdir}/term.c ' /^ [{] ".*KMAP.*$/{ for (i = 0; i < 3; i++) { q = $(5+i) if (substr(q, 1, 5) == "KMAPD") { if (min == 0) min = s max = s arr[s] = substr(q, 9, length(q)-9) } if (substr(q, 1, 5) == "KMAPA") { if (amin == 0) amin = s amax = s anarr[s] = substr(q, 10, length(q)-10) } if (substr(q, 1, 5) == "KMAPM") { if (mmin == 0) mmin = s mmax = s mnarr[s] = substr(q, 10, length(q)-10) } } } /^ [{] ".*$/{ s++; } END { printf "char *kmapdef[] = {\n" for (s = min; s <= max; s++) { if (arr[s]) printf "%s", arr[s] else printf "0" if (s < max) printf ",\n" else printf "\n" } printf "};\n\n" printf "char *kmapadef[] = {\n" for (s = amin; s <= amax; s++) { if (anarr[s]) printf "%s", anarr[s] else printf "0" if (s < amax) printf ",\n" else printf "\n" } printf "};\n\n" printf "char *kmapmdef[] = {\n" for (s = mmin; s <= mmax; s++) { if (mnarr[s]) printf "%s", mnarr[s] else printf "0" if (s < mmax) printf ",\n" else printf "\n" } printf "};\n\n#endif\n" } ' >> kmapdef.c chmod a-w kmapdef.c chmod a-w term.h screen-4.9.1/display.h0000664000175000017500000002761314467014146013310 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #ifndef SCREEN_DISPLAY_H #define SCREEN_DISPLAY_H #include "layout.h" #include "canvas.h" #include "viewport.h" #ifdef MAPKEYS #define KMAP_KEYS (T_OCAPS-T_CAPS) #define KMAP_AKEYS (T_OCAPS-T_CURSOR) #define KMAP_NOTIMEOUT 0x4000 struct kmap_ext { char *str; int fl; struct action um; struct action dm; struct action mm; }; #else #define KMAP_KEYS 0 #endif struct win; /* forward declaration */ struct mouse_parse { char sgrmode; /* non-zero if parsing an SGR sequence */ int state; /* current state of parsing */ int params[3]; /* parsed params: button, x, y */ }; struct display { struct display *d_next; /* linked list */ struct acluser *d_user; /* user who owns that display */ struct canvas d_canvas; /* our canvas slice */ struct canvas *d_cvlist; /* the canvases of this display */ struct canvas *d_forecv; /* current input focus */ struct layout *d_layout; /* layout we're using */ void (*d_processinput) __P((char *, int)); char *d_processinputdata; /* data for processinput */ int d_vpxmin, d_vpxmax; /* min/max used position on display */ struct win *d_fore; /* pointer to fore window */ struct win *d_other; /* pointer to other window */ int d_nonblock; /* -1 don't block if obufmax reached */ /* >0: block after nonblock secs */ char d_termname[MAXTERMLEN + 1]; /* $TERM */ char *d_tentry; /* buffer for tgetstr */ char d_tcinited; /* termcap inited flag */ int d_width, d_height; /* width/height of the screen */ int d_defwidth, d_defheight; /* default width/height of windows */ int d_top, d_bot; /* scrollregion start/end */ int d_x, d_y; /* cursor position */ struct mchar d_rend; /* current rendition */ int d_col16change; /* the 16col bits changed in attr */ char d_atyp; /* current attribute types */ #ifdef DW_CHARS int d_mbcs; /* saved char for multibytes charset */ #endif #ifdef ENCODINGS int d_encoding; /* what encoding type the display is */ int d_decodestate; /* state of our decoder */ int d_realfont; /* real font of terminal */ #endif int d_insert; /* insert mode flag */ int d_keypad; /* application keypad flag */ int d_cursorkeys; /* application cursorkeys flag */ int d_revvid; /* reverse video */ int d_curvis; /* cursor visibility */ int d_has_hstatus; /* display has hardstatus line */ int d_hstatus; /* hardstatus used */ int d_lp_missing; /* last character on bot line missing */ int d_mouse; /* mouse mode */ int d_extmouse; /* extended mouse mode */ struct mouse_parse d_mouse_parse; /* state of mouse code parsing */ int d_mousetrack; /* set when user wants to use mouse even when the window does not */ #ifdef RXVT_OSC int d_xtermosc[5]; /* osc used */ #endif struct mchar d_lpchar; /* missing char */ struct timeval d_status_time; /* time of status display */ int d_status; /* is status displayed? */ char d_status_bell; /* is it only a vbell? */ int d_status_len; /* length of status line */ char *d_status_lastmsg; /* last displayed message */ int d_status_buflen; /* last message buffer len */ int d_status_lastx; /* position of the cursor */ int d_status_lasty; /* before status was displayed */ int d_status_obuflen; /* saved obuflen */ int d_status_obuffree; /* saved obuffree */ int d_status_obufpos; /* end of status position in obuf */ struct event d_statusev; /* timeout event */ struct event d_hstatusev; /* hstatus changed event */ int d_kaablamm; /* display kaablamm msg */ struct action *d_ESCseen; /* Was the last char an ESC (^a) */ int d_userpid; /* pid of attacher */ char d_usertty[MAXPATHLEN]; /* tty we are attached to */ int d_userfd; /* fd of the tty */ struct event d_readev; /* userfd read event */ struct event d_writeev; /* userfd write event */ struct event d_blockedev; /* blocked timeout */ struct mode d_OldMode; /* tty mode when screen was started */ struct mode d_NewMode; /* New tty mode */ int d_flow; /* tty's flow control on/off flag*/ int d_intrc; /* current intr when flow is on */ char *d_obuf; /* output buffer */ int d_obuflen; /* len of buffer */ int d_obufmax; /* len where we are blocking the pty */ int d_obuflenmax; /* len - max */ char *d_obufp; /* pointer in buffer */ int d_obuffree; /* free bytes in buffer */ #ifdef AUTO_NUKE int d_auto_nuke; /* autonuke flag */ #endif #ifdef MAPKEYS int d_nseqs; /* number of valid mappings */ int d_aseqs; /* number of allocated mappings */ unsigned char *d_kmaps; /* keymaps */ unsigned char *d_seqp; /* pointer into keymap array */ int d_seql; /* number of parsed chars */ unsigned char *d_seqh; /* last hit */ struct event d_mapev; /* timeout event */ int d_dontmap; /* do not map next */ int d_mapdefault; /* do map next to default */ #endif union tcu d_tcs[T_N]; /* terminal capabilities */ char *d_attrtab[NATTR]; /* attrib emulation table */ char d_attrtyp[NATTR]; /* attrib group table */ int d_hascolor; /* do we support color */ short d_dospeed; /* baudrate of tty */ #ifdef FONT char d_c0_tab[256]; /* conversion for C0 */ char ***d_xtable; /* char translation table */ #endif int d_UPcost, d_DOcost, d_LEcost, d_NDcost; int d_CRcost, d_IMcost, d_EIcost, d_NLcost; int d_printfd; /* fd for vt100 print sequence */ #ifdef UTMPOK slot_t d_loginslot; /* offset, where utmp_logintty belongs */ struct utmp d_utmp_logintty; /* here the original utmp structure is stored */ int d_loginttymode; # ifdef _SEQUENT_ char d_loginhost[100+1]; # endif /* _SEQUENT_ */ #endif int d_blocked; int d_blocked_fuzz; struct event d_idleev; /* screen blanker */ #ifdef BLANKER_PRG int d_blankerpid; struct event d_blankerev; #endif }; #ifdef MULTI # define DISPLAY(x) display->x #else extern struct display TheDisplay; # define DISPLAY(x) TheDisplay.x #endif #define D_user DISPLAY(d_user) #define D_username (DISPLAY(d_user) ? DISPLAY(d_user)->u_name : 0) #define D_canvas DISPLAY(d_canvas) #define D_cvlist DISPLAY(d_cvlist) #define D_layout DISPLAY(d_layout) #define D_forecv DISPLAY(d_forecv) #define D_processinput DISPLAY(d_processinput) #define D_processinputdata DISPLAY(d_processinputdata) #define D_vpxmin DISPLAY(d_vpxmin) #define D_vpxmax DISPLAY(d_vpxmax) #define D_fore DISPLAY(d_fore) #define D_other DISPLAY(d_other) #define D_nonblock DISPLAY(d_nonblock) #define D_termname DISPLAY(d_termname) #define D_tentry DISPLAY(d_tentry) #define D_tcinited DISPLAY(d_tcinited) #define D_width DISPLAY(d_width) #define D_height DISPLAY(d_height) #define D_defwidth DISPLAY(d_defwidth) #define D_defheight DISPLAY(d_defheight) #define D_top DISPLAY(d_top) #define D_bot DISPLAY(d_bot) #define D_x DISPLAY(d_x) #define D_y DISPLAY(d_y) #define D_rend DISPLAY(d_rend) #define D_col16change DISPLAY(d_col16change) #define D_atyp DISPLAY(d_atyp) #define D_mbcs DISPLAY(d_mbcs) #define D_encoding DISPLAY(d_encoding) #define D_decodestate DISPLAY(d_decodestate) #define D_realfont DISPLAY(d_realfont) #define D_insert DISPLAY(d_insert) #define D_keypad DISPLAY(d_keypad) #define D_cursorkeys DISPLAY(d_cursorkeys) #define D_revvid DISPLAY(d_revvid) #define D_curvis DISPLAY(d_curvis) #define D_has_hstatus DISPLAY(d_has_hstatus) #define D_hstatus DISPLAY(d_hstatus) #define D_lp_missing DISPLAY(d_lp_missing) #define D_mouse DISPLAY(d_mouse) #define D_mouse_parse DISPLAY(d_mouse_parse) #define D_extmouse DISPLAY(d_extmouse) #define D_mousetrack DISPLAY(d_mousetrack) #define D_xtermosc DISPLAY(d_xtermosc) #define D_lpchar DISPLAY(d_lpchar) #define D_status DISPLAY(d_status) #define D_status_time DISPLAY(d_status_time) #define D_status_bell DISPLAY(d_status_bell) #define D_status_len DISPLAY(d_status_len) #define D_status_lastmsg DISPLAY(d_status_lastmsg) #define D_status_buflen DISPLAY(d_status_buflen) #define D_status_lastx DISPLAY(d_status_lastx) #define D_status_lasty DISPLAY(d_status_lasty) #define D_status_obuflen DISPLAY(d_status_obuflen) #define D_status_obuffree DISPLAY(d_status_obuffree) #define D_status_obufpos DISPLAY(d_status_obufpos) #define D_statusev DISPLAY(d_statusev) #define D_hstatusev DISPLAY(d_hstatusev) #define D_kaablamm DISPLAY(d_kaablamm) #define D_ESCseen DISPLAY(d_ESCseen) #define D_userpid DISPLAY(d_userpid) #define D_usertty DISPLAY(d_usertty) #define D_userfd DISPLAY(d_userfd) #define D_OldMode DISPLAY(d_OldMode) #define D_NewMode DISPLAY(d_NewMode) #define D_flow DISPLAY(d_flow) #define D_intr DISPLAY(d_intr) #define D_obuf DISPLAY(d_obuf) #define D_obuflen DISPLAY(d_obuflen) #define D_obufmax DISPLAY(d_obufmax) #define D_obuflenmax DISPLAY(d_obuflenmax) #define D_obufp DISPLAY(d_obufp) #define D_obuffree DISPLAY(d_obuffree) #define D_auto_nuke DISPLAY(d_auto_nuke) #define D_nseqs DISPLAY(d_nseqs) #define D_aseqs DISPLAY(d_aseqs) #define D_seqp DISPLAY(d_seqp) #define D_seql DISPLAY(d_seql) #define D_seqh DISPLAY(d_seqh) #define D_dontmap DISPLAY(d_dontmap) #define D_mapdefault DISPLAY(d_mapdefault) #define D_kmaps DISPLAY(d_kmaps) #define D_tcs DISPLAY(d_tcs) #define D_attrtab DISPLAY(d_attrtab) #define D_attrtyp DISPLAY(d_attrtyp) #define D_hascolor DISPLAY(d_hascolor) #define D_dospeed DISPLAY(d_dospeed) #define D_c0_tab DISPLAY(d_c0_tab) #define D_xtable DISPLAY(d_xtable) #define D_UPcost DISPLAY(d_UPcost) #define D_DOcost DISPLAY(d_DOcost) #define D_LEcost DISPLAY(d_LEcost) #define D_NDcost DISPLAY(d_NDcost) #define D_CRcost DISPLAY(d_CRcost) #define D_IMcost DISPLAY(d_IMcost) #define D_EIcost DISPLAY(d_EIcost) #define D_NLcost DISPLAY(d_NLcost) #define D_printfd DISPLAY(d_printfd) #define D_loginslot DISPLAY(d_loginslot) #define D_utmp_logintty DISPLAY(d_utmp_logintty) #define D_loginttymode DISPLAY(d_loginttymode) #define D_loginhost DISPLAY(d_loginhost) #define D_readev DISPLAY(d_readev) #define D_writeev DISPLAY(d_writeev) #define D_blockedev DISPLAY(d_blockedev) #define D_mapev DISPLAY(d_mapev) #define D_blocked DISPLAY(d_blocked) #define D_blocked_fuzz DISPLAY(d_blocked_fuzz) #define D_idleev DISPLAY(d_idleev) #define D_blankerev DISPLAY(d_blankerev) #define D_blankerpid DISPLAY(d_blankerpid) #define GRAIN 4096 /* Allocation grain size for output buffer */ #define OBUF_MAX 256 /* default for obuflimit */ #define OUTPUT_BLOCK_SIZE 256 /* Block size of output to tty */ #define AddChar(c) \ do \ { \ if (--D_obuffree <= 0) \ Resize_obuf(); \ *D_obufp++ = (c); \ } \ while (0) #define STATUS_OFF 0 #define STATUS_ON_WIN 1 #define STATUS_ON_HS 2 #define HSTATUS_IGNORE 0 #define HSTATUS_LASTLINE 1 #define HSTATUS_MESSAGE 2 #define HSTATUS_HS 3 #define HSTATUS_FIRSTLINE 4 #define HSTATUS_ALWAYS (1<<3) #endif /* SCREEN_DISPLAY_H */ screen-4.9.1/logfile.h0000664000175000017500000000662514467014146013264 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ struct logfile { struct logfile *next; FILE *fp; /* a hopefully uniq filepointer to the log file */ char *name; /* the name. used to reopen, when stat fails. */ int opencount; /* synchronize logfopen() and logfclose() */ int writecount; /* increments at logfwrite(), counts write() and fflush() */ int flushcount; /* increments at logfflush(), zeroed at logfwrite() */ struct stat *st; /* how the file looks like */ }; /* * open a logfile, The second argument must be NULL, when the named file * is already a logfile or must be a appropriatly opened file pointer * otherwise. * example: l = logfopen(name, islogfile(name) : NULL ? fopen(name, "a")); */ struct logfile *logfopen __P((char *name, FILE *fp)); /* * lookup a logfile by name. This is useful, so that we can provide * logfopen with a nonzero second argument, exactly when needed. * islogfile(NULL); returns nonzero if there are any open logfiles at all. */ int islogfile __P((char *name)); /* * logfclose does free() */ int logfclose __P((struct logfile *)); int logfwrite __P((struct logfile *, char *, int)); /* * logfflush should be called periodically. If no argument is passed, * all logfiles are flushed, else the specified file * the number of flushed filepointers is returned */ int logfflush __P((struct logfile *ifany)); /* * a reopen function may be registered here, in case you want to bring your * own (more secure open), it may come along with a private data pointer. * this function is called, whenever logfwrite/logfflush detect that the * file has been (re)moved, truncated or changed by someone else. * if you provide NULL as parameter to logreopen_register, the builtin * reopen function will be reactivated. */ void logreopen_register __P((int (*fn) __P((char *, int, struct logfile *)) )); /* * Your custom reopen function is required to reuse the exact * filedescriptor. * See logfile.c for further specs and an example. * * lf_move_fd may help you here, if you do not have dup2(2). * It closes fd and opens wantfd to access whatever fd accessed. */ int lf_move_fd __P((int fd, int wantfd)); screen-4.9.1/comm.c0000664000175000017500000002265214467014146012567 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * #ifdef HAVE_BRAILLE * Modified by: * Authors: Hadi Bargi Rangin bargi@dots.physics.orst.edu * Bill Barry barryb@dots.physics.orst.edu * * Modifications Copyright (c) 1995 by * Science Access Project, Oregon State University. #endif * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include "config.h" #include "os.h" #include "acls.h" #include "comm.h" #define bcopy :-( /* or include screen.h here */ /* Must be in alpha order ! */ struct comm comms[RC_LAST + 1] = { #ifdef MULTIUSER { "acladd", ARGS_1234 }, { "aclchg", ARGS_23 }, { "acldel", ARGS_1 }, { "aclgrp", ARGS_12 }, { "aclumask", ARGS_1|ARGS_ORMORE }, #endif { "activity", ARGS_1 }, #ifdef MULTIUSER { "addacl", ARGS_1234 }, #endif { "allpartial", NEED_DISPLAY|ARGS_1 }, { "altscreen", ARGS_01 }, { "at", ARGS_2|ARGS_ORMORE }, #ifdef COLOR { "attrcolor", ARGS_12 }, #endif { "autodetach", ARGS_1 }, #ifdef AUTO_NUKE { "autonuke", NEED_DISPLAY|ARGS_1 }, #endif { "backtick", ARGS_1|ARGS_ORMORE }, #ifdef COLOR { "bce", NEED_FORE|ARGS_01 }, #endif #ifdef HAVE_BRAILLE /* keywords for braille display (bd) */ { "bd_bc_down", ARGS_0 }, { "bd_bc_left", ARGS_0 }, { "bd_bc_right", ARGS_0 }, { "bd_bc_up", ARGS_0 }, { "bd_bell", ARGS_01 }, { "bd_braille_table", ARGS_01 }, { "bd_eightdot", ARGS_01 }, { "bd_info", ARGS_01 }, { "bd_link", ARGS_01 }, { "bd_lower_left", ARGS_0 }, { "bd_lower_right", ARGS_0 }, { "bd_ncrc", ARGS_01 }, { "bd_port", ARGS_01 }, { "bd_scroll", ARGS_01 }, { "bd_skip", ARGS_01 }, { "bd_start_braille", ARGS_01 }, { "bd_type", ARGS_01 }, { "bd_upper_left", ARGS_0 }, { "bd_upper_right", ARGS_0 }, { "bd_width", ARGS_01 }, #endif { "bell", ARGS_01 }, { "bell_msg", ARGS_01 }, { "bind", ARGS_1|ARGS_ORMORE }, #ifdef MAPKEYS { "bindkey", ARGS_0|ARGS_ORMORE }, #endif { "blanker", NEED_DISPLAY|ARGS_0}, #ifdef BLANKER_PRG { "blankerprg", ARGS_0|ARGS_ORMORE }, #endif { "break", NEED_FORE|ARGS_01 }, { "breaktype", NEED_FORE|ARGS_01 }, #ifdef COPY_PASTE { "bufferfile", ARGS_01 }, #endif { "bumpleft", NEED_FORE|ARGS_0 }, { "bumpright", NEED_FORE|ARGS_0 }, { "c1", NEED_FORE|ARGS_01 }, { "caption", ARGS_12 }, #ifdef MULTIUSER { "chacl", ARGS_23 }, #endif { "charset", NEED_FORE|ARGS_1 }, { "chdir", ARGS_01 }, #ifdef DW_CHARS { "cjkwidth", ARGS_01 }, #endif { "clear", NEED_FORE|ARGS_0 }, { "collapse", ARGS_0 }, { "colon", NEED_LAYER|ARGS_01 }, { "command", NEED_DISPLAY|ARGS_02 }, #ifdef COPY_PASTE { "compacthist", ARGS_01 }, #endif { "console", NEED_FORE|ARGS_01 }, #ifdef COPY_PASTE { "copy", NEED_FORE|NEED_DISPLAY|ARGS_0 }, { "crlf", ARGS_01 }, #endif { "debug", ARGS_01 }, #ifdef AUTO_NUKE { "defautonuke", ARGS_1 }, #endif #ifdef COLOR { "defbce", ARGS_1 }, #endif { "defbreaktype", ARGS_01 }, { "defc1", ARGS_1 }, { "defcharset", ARGS_01 }, { "defdynamictitle", ARGS_1 }, #ifdef ENCODINGS { "defencoding", ARGS_1 }, #endif { "defescape", ARGS_1 }, { "defflow", ARGS_12 }, { "defgr", ARGS_1 }, { "defhstatus", ARGS_01 }, #ifdef ENCODINGS { "defkanji", ARGS_1 }, #endif { "deflog", ARGS_1 }, #if defined(UTMPOK) && defined(LOGOUTOK) { "deflogin", ARGS_1 }, #endif { "defmode", ARGS_1 }, { "defmonitor", ARGS_1 }, { "defmousetrack", ARGS_1 }, #ifdef MULTI { "defnonblock", ARGS_1 }, #endif { "defobuflimit", ARGS_1 }, #ifdef COPY_PASTE { "defscrollback", ARGS_1 }, #endif { "defshell", ARGS_1 }, { "defsilence", ARGS_1 }, { "defslowpaste", ARGS_1 }, #ifdef UTF8 { "defutf8", ARGS_1 }, #endif { "defwrap", ARGS_1 }, { "defwritelock", ARGS_1 }, #ifdef DETACH { "detach", NEED_DISPLAY|ARGS_01 }, #endif { "digraph", NEED_LAYER|ARGS_012 }, { "dinfo", NEED_DISPLAY|ARGS_0 }, { "displays", NEED_LAYER|ARGS_0 }, { "dumptermcap", NEED_FORE|ARGS_0 }, { "dynamictitle", ARGS_1 }, { "echo", CAN_QUERY|ARGS_12 }, #ifdef ENCODINGS { "encoding", ARGS_12 }, #endif { "escape", ARGS_1 }, { "eval", ARGS_1|ARGS_ORMORE }, #ifdef PSEUDOS { "exec", ARGS_0|ARGS_ORMORE }, #endif { "fit", NEED_DISPLAY|ARGS_0 }, { "flow", NEED_FORE|ARGS_01 }, { "focus", NEED_DISPLAY|ARGS_01 }, { "focusminsize", ARGS_02 }, { "gr", NEED_FORE|ARGS_01 }, { "group", NEED_FORE|ARGS_01 }, { "hardcopy", NEED_FORE|ARGS_012 }, { "hardcopy_append", ARGS_1 }, { "hardcopydir", ARGS_01 }, { "hardstatus", ARGS_012 }, { "height", ARGS_0123 }, { "help", NEED_LAYER|ARGS_02 }, #ifdef COPY_PASTE { "history", NEED_DISPLAY|NEED_FORE|ARGS_0 }, #endif { "hstatus", NEED_FORE|ARGS_1 }, { "idle", ARGS_0|ARGS_ORMORE }, { "ignorecase", ARGS_01 }, { "info", CAN_QUERY|NEED_LAYER|ARGS_0 }, #ifdef ENCODINGS { "kanji", NEED_FORE|ARGS_12 }, #endif { "kill", NEED_FORE|ARGS_0 }, { "lastmsg", CAN_QUERY|NEED_DISPLAY|ARGS_0 }, { "layout", ARGS_1|ARGS_ORMORE}, { "license", NEED_LAYER|ARGS_0 }, #ifdef LOCK { "lockscreen", NEED_DISPLAY|ARGS_0 }, #endif { "log", NEED_FORE|ARGS_01 }, { "logfile", ARGS_012 }, #if defined(UTMPOK) && defined(LOGOUTOK) { "login", NEED_FORE|ARGS_01 }, #endif { "logtstamp", ARGS_012 }, #ifdef MAPKEYS { "mapdefault", NEED_DISPLAY|ARGS_0 }, { "mapnotnext", NEED_DISPLAY|ARGS_0 }, { "maptimeout", ARGS_01 }, #endif #ifdef COPY_PASTE { "markkeys", ARGS_1 }, #endif { "maxwin", ARGS_01 }, { "meta", NEED_LAYER|ARGS_0 }, { "monitor", NEED_FORE|ARGS_01 }, { "mousetrack", NEED_DISPLAY | ARGS_01 }, { "msgminwait", ARGS_1 }, { "msgwait", ARGS_1 }, #ifdef MULTIUSER { "multiuser", ARGS_1 }, #endif { "nethack", ARGS_1 }, { "next", ARGS_0 }, #ifdef MULTI { "nonblock", NEED_DISPLAY|ARGS_01 }, #endif { "number", CAN_QUERY|NEED_FORE|ARGS_01 }, { "obuflimit", NEED_DISPLAY|ARGS_01 }, { "only", NEED_DISPLAY|ARGS_0 }, { "other", ARGS_0 }, { "partial", NEED_FORE|ARGS_01 }, #ifdef PASSWORD { "password", ARGS_01 }, #endif #ifdef COPY_PASTE { "paste", NEED_LAYER|ARGS_012 }, { "pastefont", ARGS_01 }, #endif { "pow_break", NEED_FORE|ARGS_01 }, #if defined(DETACH) && defined(POW_DETACH) { "pow_detach", NEED_DISPLAY|ARGS_0 }, { "pow_detach_msg", ARGS_01 }, #endif { "prev", ARGS_0 }, { "printcmd", ARGS_01 }, { "process", NEED_DISPLAY|ARGS_01 }, { "quit", ARGS_0 }, #ifdef COPY_PASTE { "readbuf", ARGS_0123 }, #endif { "readreg", ARGS_0|ARGS_ORMORE }, { "redisplay", NEED_DISPLAY|ARGS_0 }, { "register", ARGS_24 }, { "remove", NEED_DISPLAY|ARGS_0 }, #ifdef COPY_PASTE { "removebuf", ARGS_0 }, #endif { "rendition", ARGS_23 }, { "reset", NEED_FORE|ARGS_0 }, { "resize", NEED_DISPLAY|ARGS_0|ARGS_ORMORE }, { "screen", ARGS_0|ARGS_ORMORE }, #ifdef COPY_PASTE { "scrollback", NEED_FORE|ARGS_1 }, #endif { "select", CAN_QUERY|ARGS_01 }, { "sessionname", ARGS_01 }, { "setenv", ARGS_012 }, { "setsid", ARGS_1 }, { "shell", ARGS_1 }, { "shelltitle", ARGS_1 }, { "silence", NEED_FORE|ARGS_01 }, { "silencewait", ARGS_1 }, { "sleep", ARGS_1 }, { "slowpaste", NEED_FORE|ARGS_01 }, { "sorendition", ARGS_012 }, { "sort", ARGS_0}, { "source", ARGS_1 }, { "split", NEED_DISPLAY|ARGS_01 }, { "startup_message", ARGS_1 }, { "stuff", NEED_LAYER|ARGS_012 }, #ifdef MULTIUSER { "su", NEED_DISPLAY|ARGS_012 }, #endif #ifdef BSDJOBS { "suspend", NEED_DISPLAY|ARGS_0 }, #endif { "term", ARGS_1 }, { "termcap", ARGS_23 }, { "termcapinfo", ARGS_23 }, { "terminfo", ARGS_23 }, { "time", CAN_QUERY|ARGS_01 }, { "title", CAN_QUERY|NEED_FORE|ARGS_01 }, { "umask", ARGS_1|ARGS_ORMORE }, { "unbindall", ARGS_0 }, { "unsetenv", ARGS_1 }, #ifdef UTF8 { "utf8", NEED_FORE|ARGS_012 }, #endif { "vbell", ARGS_01 }, { "vbell_msg", ARGS_01 }, { "vbellwait", ARGS_1 }, { "verbose", ARGS_01 }, { "version", ARGS_0 }, { "wall", NEED_DISPLAY|ARGS_1}, { "width", ARGS_0123 }, { "windowlist", ARGS_012 }, { "windows", CAN_QUERY|ARGS_01 }, { "wrap", NEED_FORE|ARGS_01 }, #ifdef COPY_PASTE { "writebuf", ARGS_0123 }, #endif { "writelock", NEED_FORE|ARGS_01 }, { "xoff", NEED_LAYER|ARGS_0 }, { "xon", NEED_LAYER|ARGS_0 }, #ifdef ZMODEM { "zmodem", ARGS_012 }, #endif { "zombie", ARGS_012 }, { "zombie_timeout", ARGS_1 } }; screen-4.9.1/input.c0000664000175000017500000003343014467014146012767 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include "config.h" #include "screen.h" #include "extern.h" #define INPUTLINE (flayer->l_height - 1) static void InpProcess __P((char **, int *)); static void InpAbort __P((void)); static void InpRedisplayLine __P((int, int, int, int)); extern struct layer *flayer; extern struct display *display; extern struct mchar mchar_blank, mchar_so; struct inpline { char buf[MAXSTR+1]; /* text buffer */ int len; /* length of the editible string */ int pos; /* cursor position in editable string */ struct inpline *next, *prev; }; /* 'inphist' is used to store the current input when scrolling through history. * inpline->prev == history-prev * inpline->next == history-next */ static struct inpline inphist; struct inpdata { struct inpline inp; int inpmaxlen; /* MAXSTR, or less, if caller has shorter buffer */ char *inpstring; /* the prompt */ int inpstringlen; /* length of the prompt */ int inpmode; /* INP_NOECHO, INP_RAW, INP_EVERY */ void (*inpfinfunc) __P((char *buf, int len, char *priv)); char *priv; /* private data for finfunc */ int privdata; /* private data space */ char *search; /* the search string */ }; static struct LayFuncs InpLf = { InpProcess, InpAbort, InpRedisplayLine, DefClearLine, DefRewrite, DefResize, DefRestore, 0 }; /* ** Here is the input routine */ /* called once, after InitOverlayPage in Input() or Isearch() */ void inp_setprompt(p, s) char *p, *s; { struct inpdata *inpdata; inpdata = (struct inpdata *)flayer->l_data; if (p) { inpdata->inpstringlen = strlen(p); inpdata->inpstring = p; } if (s) { if (s != inpdata->inp.buf) strncpy(inpdata->inp.buf, s, sizeof(inpdata->inp.buf) - 1); inpdata->inp.buf[sizeof(inpdata->inp.buf) - 1] = 0; inpdata->inp.pos = inpdata->inp.len = strlen(inpdata->inp.buf); } InpRedisplayLine(INPUTLINE, 0, flayer->l_width - 1, 0); flayer->l_x = inpdata->inpstringlen + (inpdata->inpmode & INP_NOECHO ? 0 : inpdata->inp.pos); flayer->l_y = INPUTLINE; } /* * We dont use HS status line with Input(). * If we would use it, then we should check e_tgetflag("es") if * we are allowed to use esc sequences there. * * mode is an OR of * INP_NOECHO == suppress echoing of characters. * INP_RAW == raw mode. call finfunc after each character typed. * INP_EVERY == digraph mode. */ void Input(istr, len, mode, finfunc, priv, data) char *istr; int len; int mode; void (*finfunc) __P((char *buf, int len, char *priv)); char *priv; int data; { int maxlen; struct inpdata *inpdata; if (!flayer) return; if (len > MAXSTR) len = MAXSTR; if (!(mode & INP_NOECHO)) { maxlen = flayer->l_width - 1 - strlen(istr); if (len > maxlen) len = maxlen; } if (len < 0) { LMsg(0, "Width %d chars too small", -len); return; } if (InitOverlayPage(sizeof(*inpdata), &InpLf, 1)) return; flayer->l_mode = 1; inpdata = (struct inpdata *)flayer->l_data; inpdata->inpmaxlen = len; inpdata->inpfinfunc = finfunc; inpdata->inp.pos = inpdata->inp.len = 0; inpdata->inp.prev = inphist.prev; inpdata->inpmode = mode; inpdata->privdata = data; if (!priv) priv = (char*)&inpdata->privdata; inpdata->priv = priv; inpdata->inpstringlen = 0; inpdata->inpstring = NULL; inpdata->search = NULL; if (istr) inp_setprompt(istr, (char *)NULL); } static void erase_chars(inpdata, from, to, x, mv) struct inpdata *inpdata; char *from; char *to; int x; int mv; { int chng; ASSERT(from < to); if (inpdata->inp.len > to - inpdata->inp.buf) bcopy(to, from, inpdata->inp.len - (to - inpdata->inp.buf)); chng = to - from; if (mv) { x -= chng; inpdata->inp.pos -= chng; } inpdata->inp.len -= chng; if (!(inpdata->inpmode & INP_NOECHO)) { struct mchar mc; char *s = from < to ? from : to; mc = mchar_so; while (s < inpdata->inp.buf+inpdata->inp.len) { mc.image = *s++; LPutChar(flayer, &mc, x++, INPUTLINE); } while (chng--) LPutChar(flayer, &mchar_blank, x++, INPUTLINE); x = inpdata->inpstringlen + inpdata->inp.pos; LGotoPos(flayer, x, INPUTLINE); } } static void InpProcess(ppbuf, plen) char **ppbuf; int *plen; { int len, x; char *pbuf; char ch; struct inpdata *inpdata; struct display *inpdisplay; int prev, next, search = 0; inpdata = (struct inpdata *)flayer->l_data; inpdisplay = display; #define RESET_SEARCH do { if (inpdata->search) Free(inpdata->search); } while (0) LGotoPos(flayer, inpdata->inpstringlen + (inpdata->inpmode & INP_NOECHO ? 0 : inpdata->inp.pos), INPUTLINE); if (ppbuf == 0) { InpAbort(); return; } x = inpdata->inpstringlen + inpdata->inp.pos; len = *plen; pbuf = *ppbuf; while (len) { char *p = inpdata->inp.buf + inpdata->inp.pos; ch = *pbuf++; len--; if (inpdata->inpmode & INP_EVERY) { inpdata->inp.buf[inpdata->inp.len] = ch; if (ch) { display = inpdisplay; (*inpdata->inpfinfunc)(inpdata->inp.buf, inpdata->inp.len, inpdata->priv); ch = inpdata->inp.buf[inpdata->inp.len]; } } else if (inpdata->inpmode & INP_RAW) { display = inpdisplay; (*inpdata->inpfinfunc)(&ch, 1, inpdata->priv); /* raw */ if (ch) continue; } if (((unsigned char)ch & 0177) >= ' ' && ch != 0177 && inpdata->inp.len < inpdata->inpmaxlen) { if (inpdata->inp.len > inpdata->inp.pos) bcopy(p, p+1, inpdata->inp.len - inpdata->inp.pos); inpdata->inp.buf[inpdata->inp.pos++] = ch; inpdata->inp.len++; if (!(inpdata->inpmode & INP_NOECHO)) { struct mchar mc; mc = mchar_so; mc.image = *p++; LPutChar(flayer, &mc, x, INPUTLINE); x++; if (p < inpdata->inp.buf+inpdata->inp.len) { while (p < inpdata->inp.buf+inpdata->inp.len) { mc.image = *p++; LPutChar(flayer, &mc, x++, INPUTLINE); } x = inpdata->inpstringlen + inpdata->inp.pos; LGotoPos(flayer, x, INPUTLINE); } } RESET_SEARCH; } else if ((ch == '\b' || ch == 0177) && inpdata->inp.pos > 0) { erase_chars(inpdata, p-1, p, x, 1); RESET_SEARCH; } else if (ch == '\025') /* CTRL-U */ { x = inpdata->inpstringlen; if (inpdata->inp.len && !(inpdata->inpmode & INP_NOECHO)) { LClearArea(flayer, x, INPUTLINE, x + inpdata->inp.len - 1, INPUTLINE, 0, 0); LGotoPos(flayer, x, INPUTLINE); } inpdata->inp.len = inpdata->inp.pos = 0; } else if (ch == '\013') /* CTRL-K */ { x = inpdata->inpstringlen + inpdata->inp.pos; if (inpdata->inp.len > inpdata->inp.pos && !(inpdata->inpmode & INP_NOECHO)) { LClearArea(flayer, x, INPUTLINE, x + inpdata->inp.len - inpdata->inp.pos - 1, INPUTLINE, 0, 0); LGotoPos(flayer, x, INPUTLINE); } inpdata->inp.len = inpdata->inp.pos; } else if (ch == '\027' && inpdata->inp.pos > 0) /* CTRL-W */ { char *oldp = p--; while (p > inpdata->inp.buf && *p == ' ') p--; while (p > inpdata->inp.buf && *(p - 1) != ' ') p--; erase_chars(inpdata, p, oldp, x, 1); RESET_SEARCH; } else if (ch == '\004' && inpdata->inp.pos < inpdata->inp.len) /* CTRL-D */ { erase_chars(inpdata, p, p+1, x, 0); RESET_SEARCH; } else if (ch == '\001' || (unsigned char)ch == 0201) /* CTRL-A */ { LGotoPos(flayer, x -= inpdata->inp.pos, INPUTLINE); inpdata->inp.pos = 0; } else if ((ch == '\002' || (unsigned char)ch == 0202) && inpdata->inp.pos > 0) /* CTRL-B */ { LGotoPos(flayer, --x, INPUTLINE); inpdata->inp.pos--; } else if (ch == '\005' || (unsigned char)ch == 0205) /* CTRL-E */ { LGotoPos(flayer, x += inpdata->inp.len - inpdata->inp.pos, INPUTLINE); inpdata->inp.pos = inpdata->inp.len; } else if ((ch == '\006' || (unsigned char)ch == 0206) && inpdata->inp.pos < inpdata->inp.len) /* CTRL-F */ { LGotoPos(flayer, ++x, INPUTLINE); inpdata->inp.pos++; } else if ((prev = ((ch == '\020' || (unsigned char)ch == 0220) && /* CTRL-P */ inpdata->inp.prev)) || (next = ((ch == '\016' || (unsigned char)ch == 0216) && /* CTRL-N */ inpdata->inp.next)) || (search = ((ch == '\022' || (unsigned char)ch == 0222) && inpdata->inp.prev))) { struct mchar mc; struct inpline *sel; int pos = -1; mc = mchar_so; if (prev) sel = inpdata->inp.prev; else if (next) sel = inpdata->inp.next; else { /* search */ inpdata->inp.buf[inpdata->inp.len] = 0; /* Remove the ctrl-r from the end */ if (!inpdata->search) inpdata->search = SaveStr(inpdata->inp.buf); for (sel = inpdata->inp.prev; sel; sel = sel->prev) { char *f; if ((f = strstr(sel->buf, inpdata->search))) { pos = f - sel->buf; break; } } if (!sel) continue; /* Did not find a match. Process the next input. */ } if (inpdata->inp.len && !(inpdata->inpmode & INP_NOECHO)) LClearArea(flayer, inpdata->inpstringlen, INPUTLINE, inpdata->inpstringlen + inpdata->inp.len - 1, INPUTLINE, 0, 0); if ((prev || search) && !inpdata->inp.next) inphist = inpdata->inp; memcpy(&inpdata->inp, sel, sizeof(struct inpline)); if (pos != -1) inpdata->inp.pos = pos; if (inpdata->inp.len > inpdata->inpmaxlen) inpdata->inp.len = inpdata->inpmaxlen; if (inpdata->inp.pos > inpdata->inp.len) inpdata->inp.pos = inpdata->inp.len; x = inpdata->inpstringlen; p = inpdata->inp.buf; if (!(inpdata->inpmode & INP_NOECHO)) { while (p < inpdata->inp.buf+inpdata->inp.len) { mc.image = *p++; LPutChar(flayer, &mc, x++, INPUTLINE); } } x = inpdata->inpstringlen + inpdata->inp.pos; LGotoPos(flayer, x, INPUTLINE); } else if (ch == '\003' || ch == '\007' || ch == '\033' || ch == '\000' || ch == '\n' || ch == '\r') { if (ch != '\n' && ch != '\r') inpdata->inp.len = 0; inpdata->inp.buf[inpdata->inp.len] = 0; if (inpdata->inp.len && !(inpdata->inpmode & (INP_NOECHO | INP_RAW))) { struct inpline *store; /* Look for a duplicate first */ for (store = inphist.prev; store; store = store->prev) { if (strcmp(store->buf, inpdata->inp.buf) == 0) { if (store->next) store->next->prev = store->prev; if (store->prev) store->prev->next = store->next; store->pos = inpdata->inp.pos; break; } } if (!store) { store = malloc(sizeof(struct inpline)); memcpy(store, &inpdata->inp, sizeof(struct inpline)); } store->next = &inphist; store->prev = inphist.prev; if (inphist.prev) inphist.prev->next = store; inphist.prev = store; } flayer->l_data = 0; /* so inpdata does not get freed */ InpAbort(); /* redisplays... */ *ppbuf = pbuf; *plen = len; display = inpdisplay; if ((inpdata->inpmode & INP_RAW) == 0) (*inpdata->inpfinfunc)(inpdata->inp.buf, inpdata->inp.len, inpdata->priv); else (*inpdata->inpfinfunc)(pbuf - 1, 0, inpdata->priv); if (inpdata->search) free(inpdata->search); free(inpdata); return; } else { /* The user was searching, and then pressed some non-control input. So reset * the search string. */ RESET_SEARCH; } } if (!(inpdata->inpmode & INP_RAW)) { flayer->l_x = inpdata->inpstringlen + (inpdata->inpmode & INP_NOECHO ? 0 : inpdata->inp.pos); flayer->l_y = INPUTLINE; } *ppbuf = pbuf; *plen = len; } static void InpAbort() { LAY_CALL_UP(LayRedisplayLine(INPUTLINE, 0, flayer->l_width - 1, 0)); ExitOverlayPage(); } static void InpRedisplayLine(y, xs, xe, isblank) int y, xs, xe, isblank; { int q, r, s, l, v; struct inpdata *inpdata; inpdata = (struct inpdata *)flayer->l_data; if (y != INPUTLINE) { LAY_CALL_UP(LayRedisplayLine(y, xs, xe, isblank)); return; } inpdata->inp.buf[inpdata->inp.len] = 0; q = xs; v = xe - xs + 1; s = 0; r = inpdata->inpstringlen; if (v > 0 && q < r) { l = v; if (l > r - q) l = r - q; LPutStr(flayer, inpdata->inpstring + q - s, l, &mchar_so, q, y); q += l; v -= l; } s = r; r += inpdata->inp.len; if (!(inpdata->inpmode & INP_NOECHO) && v > 0 && q < r) { l = v; if (l > r - q) l = r - q; LPutStr(flayer, inpdata->inp.buf + q - s, l, &mchar_so, q, y); q += l; v -= l; } s = r; r = flayer->l_width; if (!isblank && v > 0 && q < r) { l = v; if (l > r - q) l = r - q; LClearArea(flayer, q, y, q + l - 1, y, 0, 0); q += l; } } screen-4.9.1/utf8encodings/0000775000175000017500000000000014467014146014241 5ustar alexalexscreen-4.9.1/utf8encodings/a10000664000175000017500000000103014467014146014457 0ustar alexalexScreenI2UTF8¡€KOI8-R€%%‚% ƒ%„%…%†%‡%$ˆ%,‰%4Š%<‹%€Œ%„%ˆŽ%Œ%%‘‘%’’%““# ”% • "–"—"H˜"d™"eš ›#!œ°²ž·Ÿ÷ %P¡%Q¢%R£Q¤%S¥%T¦%U§%V¨%W©%Xª%Y«%Z¬%[­%\®%]¯%^°%_±%`²%a³´%bµ%c¶%d·%e¸%f¹%gº%h»%i¼%j½%k¾%l¿©ÀNÁ0Â1ÃFÄ4Å5ÆDÇ3ÈEÉ8Ê9Ë:Ì;Í<Î=Ï>Ð?ÑOÒ@ÓAÔBÕCÖ6×2ØLÙKÚ7ÛHÜMÝIÞGßJà.áâã&äåæ$çè%éêëìíîïðñ/ò ó!ô"õ#ö÷ø,ù+úû(ü-ý)þ'ÿ*screen-4.9.1/utf8encodings/020000664000175000017500000006563614467014146014425 0ustar alexalexScreenI2UTF8ßJIS X 0208 (1990)!!0!"0!#0!$ÿ !%ÿ!&0û!'ÿ!(ÿ!)ÿ!*ÿ!+0›!,0œ!-´!.ÿ@!/¨!0ÿ>!1ÿã!2ÿ?!30ý!40þ!50!60ž!70!8NÝ!90!:0!;0!<0ü!= !> !?ÿ!@\!A0!B !Cÿ\!D &!E %!F !G !H !I !Jÿ!Kÿ !L0!M0!Nÿ;!Oÿ=!Pÿ[!Qÿ]!R0!S0 !T0 !U0 !V0 !W0 !X0!Y0!Z0![0!\ÿ !]"!^±!_×!`÷!aÿ!b"`!cÿ!dÿ!e"f!f"g!g"!h"4!i&B!j&@!k°!l 2!m 3!n!!oÿå!pÿ!q¢!r£!sÿ!tÿ!uÿ!vÿ !wÿ !x§!y&!z&!{%Ë!|%Ï!}%Î!~%Ç"!%Æ""%¡"#% "$%³"%%²"&%½"'%¼"( ;")0"*!’"+!",!‘"-!“".0":"";" "<"†"="‡">"‚"?"ƒ"@"*"A")"J"'"K"("L¬"M!Ò"N!Ô"O""P""\" "]"¥"^#"_""`""a"a"b"R"c"j"d"k"e""f"="g""h"5"i"+"j","r!+"s 0"t&o"u&m"v&j"w "x !"y¶"~%ï#0ÿ#1ÿ#2ÿ#3ÿ#4ÿ#5ÿ#6ÿ#7ÿ#8ÿ#9ÿ#Aÿ!#Bÿ"#Cÿ##Dÿ$#Eÿ%#Fÿ&#Gÿ'#Hÿ(#Iÿ)#Jÿ*#Kÿ+#Lÿ,#Mÿ-#Nÿ.#Oÿ/#Pÿ0#Qÿ1#Rÿ2#Sÿ3#Tÿ4#Uÿ5#Vÿ6#Wÿ7#Xÿ8#Yÿ9#Zÿ:#aÿA#bÿB#cÿC#dÿD#eÿE#fÿF#gÿG#hÿH#iÿI#jÿJ#kÿK#lÿL#mÿM#nÿN#oÿO#pÿP#qÿQ#rÿR#sÿS#tÿT#uÿU#vÿV#wÿW#xÿX#yÿY#zÿZ$!0A$"0B$#0C$$0D$%0E$&0F$'0G$(0H$)0I$*0J$+0K$,0L$-0M$.0N$/0O$00P$10Q$20R$30S$40T$50U$60V$70W$80X$90Y$:0Z$;0[$<0\$=0]$>0^$?0_$@0`$A0a$B0b$C0c$D0d$E0e$F0f$G0g$H0h$I0i$J0j$K0k$L0l$M0m$N0n$O0o$P0p$Q0q$R0r$S0s$T0t$U0u$V0v$W0w$X0x$Y0y$Z0z$[0{$\0|$]0}$^0~$_0$`0€$a0$b0‚$c0ƒ$d0„$e0…$f0†$g0‡$h0ˆ$i0‰$j0Š$k0‹$l0Œ$m0$n0Ž$o0$p0$q0‘$r0’$s0“%!0¡%"0¢%#0£%$0¤%%0¥%&0¦%'0§%(0¨%)0©%*0ª%+0«%,0¬%-0­%.0®%/0¯%00°%10±%20²%30³%40´%50µ%60¶%70·%80¸%90¹%:0º%;0»%<0¼%=0½%>0¾%?0¿%@0À%A0Á%B0Â%C0Ã%D0Ä%E0Å%F0Æ%G0Ç%H0È%I0É%J0Ê%K0Ë%L0Ì%M0Í%N0Î%O0Ï%P0Ð%Q0Ñ%R0Ò%S0Ó%T0Ô%U0Õ%V0Ö%W0×%X0Ø%Y0Ù%Z0Ú%[0Û%\0Ü%]0Ý%^0Þ%_0ß%`0à%a0á%b0â%c0ã%d0ä%e0å%f0æ%g0ç%h0è%i0é%j0ê%k0ë%l0ì%m0í%n0î%o0ï%p0ð%q0ñ%r0ò%s0ó%t0ô%u0õ%v0ö&!‘&"’&#“&$”&%•&&–&'—&(˜&)™&*š&+›&,œ&-&.ž&/Ÿ&0 &1¡&2£&3¤&4¥&5¦&6§&7¨&8©&A±&B²&C³&D´&Eµ&F¶&G·&H¸&I¹&Jº&K»&L¼&M½&N¾&O¿&PÀ&QÁ&RÃ&SÄ&TÅ&UÆ&VÇ&WÈ&XÉ'!'"'#'$'%'&'''(')'*'+','-'.'/'0'1'2 '3!'4"'5#'6$'7%'8&'9'':(';)'<*'=+'>,'?-'@.'A/'Q0'R1'S2'T3'U4'V5'WQ'X6'Y7'Z8'[9'\:'];'^<'_='`>'a?'b@'cA'dB'eC'fD'gE'hF'iG'jH'kI'lJ'mK'nL'oM'pN'qO(!%("%(#% ($%(%%(&%('%((%,()%$(*%4(+%<(,%(-%(.%(/%(0%(1%(2%#(3%3(4%+(5%;(6%K(7% (8%/(9%((:%7(;%?(<%(=%0(>%%(?%8(@%B0!Nœ0"U0#Z0$–?0%TÀ0&a0'c(0(Yö0)"0*„u0+ƒ0,zP0-`ª0.cá0/n%00eí01„f02‚¦03›õ04h“05W'06e¡07bq08[›09YÐ0:†{0;˜ô0<}b0=}¾0>›Ž0?b0@|Ÿ0Aˆ·0B[‰0C^µ0Dc 0Ef—0FhH0G•Ç0H—0IgO0JNå0KO 0LOM0MO0NPI0OVò0PY70QYÔ0RZ0S\ 0T`ß0Ua0Vap0Wf0Xi0Ypº0ZuO0[up0\yû0]}­0^}ï0_€Ã0`„0aˆc0b‹0cU0dz0eS;0fN•0gN¥0hWß0i€²0jÁ0kxï0lN0mXñ0nn¢0o80pz20qƒ(0r‚‹0sœ/0tQA0uSp0vT½0wTá0xVà0yYû0z_0{˜ò0|më0}€ä0~…-1!–b1"–p1#– 1$—û1%T 1&Só1'[‡1(pÏ1)½1*Â1+–è1,So1-\1.zº1/N10x“11ü12n&13V14U15k16…17œ;18Yå19S©1:mf1;tÜ1<•1=VB1>N‘1?K1@–ò1AƒO1B™ 1CSá1DU¶1E[01F_q1Gf 1Hfó1Ih1Jl81Kló1Lm)1Mt[1NvÈ1OzN1P˜41Q‚ñ1Rˆ[1SŠ`1T’í1Um²1Vu«1WvÊ1X™Å1Y`¦1Z‹1[Š1\•²1]iŽ1^S­1_Q†1`W1aX01bYD1c[´1d^ö1e`(1fc©1gcô1hl¿1io1jpŽ1kq1lqY1mqÕ1ns?1o~1p‚v1q‚Ñ1r…—1s`1t’[1u1vXi1we¼1xlZ1yu%1zQù1{Y.1|Ye1}_€1~_Ü2!b¼2"eú2#j*2$k'2%k´2&s‹2'Á2(‰V2),2*2+žÄ2,\¡2-l–2.ƒ{2/Q20\K21a¶22Æ23hv24ra25NY26Oú27Sx28`i29n)2:zO2;—ó2Nî2?OU2@O=2AO¡2BOs2CR 2DSï2EV 2FY2GZÁ2H[¶2I[á2JyÑ2Kf‡2Lgœ2Mg¶2NkL2Ol³2Ppk2QsÂ2Ry2Sy¾2Tz<2U{‡2V‚±2W‚Û2Xƒ2Yƒw2Zƒï2[ƒÓ2\‡f2]в2^V)2_Œ¨2`æ2aN2b—2c†Š2dOÄ2e\è2fb2grY2hu;2iå2j‚½2k†þ2lŒÀ2m–Å2n™2o™Õ2pNË2qO2r‰ã2sVÞ2tXJ2uXÊ2v^û2w_ë2x`*2y`”2z`b2{aÐ2|b2}bÐ2~e93!›A3"ff3#h°3$mw3%pp3&uL3'v†3(}u3)‚¥3*‡ù3+•‹3,–Ž3-Œ3.Qñ3/R¾30Y31T³32[³33]34ah35i‚36m¯37x38„Ë39ˆW3:Šr3;“§3<š¸3=ml3>™¨3?†Ù3@W£3Agÿ3B†Î3C’3DRƒ3EV‡3FT3G^Ó3Hbá3Id¹3Jh<3Kh83Lk»3Msr3Nxº3Ozk3P‰š3Q‰Ò3Rk3S3Tí3U•£3V–”3W—i3X[f3Y\³3Zi}3[˜M3\˜N3]c›3^{ 3_j+3`j3ah¶3bœ 3co_3dRr3eU3f`p3gbì3hm;3in3jnÑ3k„[3l‰3mD3nN3oœ93pSö3qi3rj:3s—„3th*3uQ\3vzÃ3w„²3x‘Ü3y“Œ3zV[3{(3|h"3}ƒ3~„14!|¥4"R4#‚Å4$tæ4%N~4&Oƒ4'Q 4([Ò4)R 4*RØ4+Rç4,]û4-Uš4.X*4/Yæ40[Œ41[˜42[Û43^r44^y45`£46a47ac48a¾49cÛ4:eb4;gÑ4k>4?kS4@lW4Ao"4Bo—4CoE4Dt°4Eu4Fvã4Gw 4Hzÿ4I{¡4J|!4K}é4L64Mð4N€4O‚f4Pƒž4Q‰³4RŠÌ4SŒ«4T„4U”Q4V•“4W•‘4X•¢4Y–e4Z—Ó4[™(4\‚4]N84^T+4_\¸4`]Ì4as©4bvL4cw<4d\©4eë4f 4g–Á4h˜4i˜T4j˜X4kO4lO4mSq4nUœ4oVh4pWú4qYG4r[ 4s[Ä4t\4u^ 4v^~4w_Ì4xcî4yg:4ze×4{eâ4|g4}hË4~hÄ5!j_5"^05#kÅ5$l5%l}5&u5'yH5([c5)z5*}5+_½5,‰5-Š5.Œ´5/w50ŽÌ5152˜â53š54›<55N€56P}57Q58Y“59[œ5:b/5;b€5r 5?u‘5@yG5A©5B‡û5Cм5D‹p5Ec¬5FƒÊ5G— 5HT 5IT5JU«5KhT5LjX5MŠp5Nx'5Ogu5PžÍ5QSt5R[¢5S5T†P5U5VN5WNE5XNÇ5YO5ZSÊ5[T85\[®5]_5^`%5_eQ5`g=5alB5blr5clã5dpx5et5fzv5gz®5h{5i}5j|þ5k}f5leç5mr[5nS»5o\E5p]è5qbÒ5rbà5sc5tn 5u†Z5vŠ15wÝ5x’ø5yo5zy¦5{›Z5|N¨5}N«5~N¬6!O›6"O 6#PÑ6$QG6%zö6&Qq6'Qö6(ST6)S!6*S6+Së6,U¬6-Xƒ6.\á6/_760_J61`/62`P63`m64c65eY66jK67lÁ68rÂ69rí6:wï6;€ø6<6=‚6>…N6?÷6@“á6A—ÿ6B™W6CšZ6DNð6EQÝ6F\-6Gf6Him6I\@6Jfò6Kiu6Ls‰6MhP6N|6OPÅ6PRä6QWG6R]þ6S“&6Te¤6Uk#6Vk=6Wt46Xy6Yy½6Z{K6[}Ê6\‚¹6]ƒÌ6^ˆ6_‰_6`‹96aÑ6b‘Ñ6cT6d’€6eN]6fP66gSå6hS:6ir×6js–6kwé6l‚æ6mޝ6n™Æ6o™È6p™Ò6qQw6ra6s†^6tU°6uzz6vPv6w[Ó6xG6y–…6zN26{jÛ6|‘ç6}\Q6~\H7!c˜7"zŸ7#l“7$—t7%a7&zª7'qŠ7(–ˆ7)|‚7*h7+~p7,hQ7-“l7.Rò7/T70…«71Š72¤73ŽÍ74á75Sf76ˆˆ77yA78OÂ79P¾7:R7;QD7sê7?W‹7@YQ7A_b7B_„7C`u7Dav7Eag7Fa©7Gc²7Hd:7Iel7Jfo7KhB7Ln7Muf7Nz=7O|û7P}L7Q}™7R~K7Sk7Tƒ7UƒJ7V†Í7WŠ7XŠc7Y‹f7ZŽý7[˜7\7]‚¸7^Î7_›è7`R‡7ab7bdƒ7coÀ7d–™7ehA7fP‘7gk 7hlz7ioT7jzt7k}P7lˆ@7mŠ#7ng7oNö7pP97qP&7rPe7sQ|7tR87uRc7vU§7wW7xX7yZÌ7z^ú7{a²7|aø7}bó7~cr8!i8"j)8#r}8$r¬8%s.8&x8'xo8(}y8)w 8*€©8+‰‹8,‹8-Œâ8.ŽÒ8/c80“u81–z82˜U83š84žx85QC86SŸ87S³88^{89_&8:n8;n8}C8?‚78@Š8AŠú8B–P8CNN8DP 8ESä8FT|8GVú8HYÑ8I[d8J]ñ8K^«8L_'8Mb88NeE8Og¯8PnV8QrÐ8R|Ê8Sˆ´8T€¡8U€á8Vƒð8W†N8XЇ8Yè8Z’78[–Ç8\˜g8]Ÿ8^N”8_N’8`O 8aSH8bTI8cT>8dZ/8e_Œ8f_¡8g`Ÿ8hh§8ijŽ8jtZ8kx8lŠž8mФ8n‹w8o‘8pN^8q›É8rN¤8sO|8tO¯8uP8vP8wQI8xQl8yRŸ8zR¹8{Rþ8|Sš8}Sã8~T9!T9"U‰9#WQ9$W¢9%Y}9&[T9'[]9([9)]å9*]ç9+]÷9,^x9-^ƒ9.^š9/^·90_91`R92aL93b—94bØ95c§96e;97f98fC99fô9:gm9;h!9l_9?m*9@mi9An/9Bn9Cu29Dv‡9Exl9Fz?9G|à9H}9I}9J}^9K}±9L€9M€9N€¯9O€±9PT9Q9R‚*9SƒR9TˆL9Uˆa9V‹9WŒ¢9XŒü9YÊ9Z‘u9[’q9\x?9]’ü9^•¤9_–M9`˜9a™™9bšØ9c;9dR[9eR«9fS÷9gT9hXÕ9ib÷9joà9kŒj9l_9mž¹9nQK9oR;9pTJ9qVý9rz@9s‘w9t`9užÒ9vsD9wo 9xp9yu9z_ý9{`Ú9|š¨9}rÛ9~¼:!kd:"˜:#NÊ:$Vð:%Wd:&X¾:'ZZ:(`h:)aÇ:*f:+f:,h9:-h±:.m÷:/uÕ:0}::1‚n:2›B:3N›:4OP:5SÉ:6U:7]o:8]æ:9]î::gû:;l™:ŠP:?“–:@ˆß:AWP:B^§:Cc+:DPµ:EP¬:FQ:Gg:HTÉ:IX^:JY»:K[°:L_i:MbM:Nc¡:Oh=:Pks:Qn:Rp}:S‘Ç:Tr€:Ux:Vx&:Wym:XeŽ:Y}0:ZƒÜ:[ˆÁ:\ :]–›:^Rd:_W(:`gP:aj:bŒ¡:cQ´:dWB:e–*:fX::giŠ:h€´:iT²:j]:kWü:lx•:mú:nO\:oRJ:pT‹:qd>:rf(:sg:tgõ:uz„:v{V:w}":x“/:yh\:z›­:{{9:|S:}QŠ:~R7;![ß;"bö;#d®;$dæ;%g-;&kº;'…©;(–Ñ;)v;*›Ö;+cL;,“;-›«;.v¿;/fR;0N ;1P˜;2SÂ;3\q;4`è;5d’;6ec;7h_;8qæ;9sÊ;:u#;;{—;<~‚;=†•;>‹ƒ;?ŒÛ;@‘x;A™;Be¬;Cf«;Dk‹;ENÕ;FNÔ;GO:;HO;IR:;JSø;KSò;LUã;MVÛ;NXë;OYË;PYÉ;QYÿ;R[P;S\M;T^;U^+;V_×;W`;Xc;Ye/;Z[\;[e¯;\e½;]eè;^g;_kb;`k{;al;bsE;cyI;dyÁ;e|ø;f};g}+;h€¢;i;jó;k‰–;lŠ^;mŠi;nŠf;oŠŒ;pŠî;qŒÇ;rŒÜ;s–Ì;t˜ü;uko;vN‹;wO<;xO;yQP;z[W;{[ú;|aH;}c;~fB<%t½<&uÔ<'xÁ<(y:<)€ <*€3<+ê<,„”<-ž<.lPn_“=?b=@gÔ=AlA=Bn =Csc=D~&=E‘Í=F’ƒ=GSÔ=HY=I[¿=JmÑ=Ky]=L~.=M|›=NX~=OqŸ=PQú=QˆS=Rð=SOÊ=T\û=Uf%=Vw¬=Wzã=X‚=Y™ÿ=ZQÆ=[_ª=\eì=]io=^k‰=_mó=`n–=aod=bvþ=c}=d]á=eu=f‘‡=g˜=hQæ=iR=jb@=kf‘=lfÙ=mn=n^¶=o}Ò=pr=qfø=r…¯=s…÷=tŠø=uR©=vSÙ=wYs=x^=y_=z`U={’ä=|–d=}P·=~Q>!RÝ>"S >#SG>$Sì>%Tè>&UF>'U1>(V>)Yh>*Y¾>+Z<>,[µ>-\>.\>/\>0\>1^„>2^Š>3^à>4_p>5b>6b„>7bÛ>8cŒ>9cw>:f>;f >=fv>>g~>?h¢>@j>Aj5>Bl¼>Cmˆ>Dn >EnX>Fq<>Gq&>Hqg>IuÇ>Jw>Kx]>Ly>Mye>Nyð>Ozà>P{>Q|§>R}9>S€–>TƒÖ>U„‹>V…I>Wˆ]>Xˆó>YŠ>ZŠ<>[ŠT>\Šs>]Œa>^ŒÞ>_‘¤>`’f>a“~>b”>c–œ>d—˜>eN >fN>gN>hNW>iQ—>jRp>kWÎ>lX4>mXÌ>n[">o^8>p`Å>qdþ>rga>sgV>tmD>ur¶>vus>wzc>x„¸>y‹r>z‘¸>{“ >|V1>}Wô>~˜þ?!bí?"i ?#k–?$qí?%~T?&€w?'‚r?(‰æ?)˜ß?*‡U?+±?,\;?-O8?.Oá?/Oµ?0U?1Z ?2[Ý?3[é?4_Ã?5aN?6c/?7e°?8fK?9hî?:i›?;mx?u¹??w?@y^?Ayæ?B}3?Cã?D‚¯?E…ª?F‰ª?GŠ:?HŽ«?I›?J2?K‘Ý?L—?MNº?NNÁ?OR?PXu?QXì?R\ ?Su?T\=?UN?VŠ ?WÅ?X–c?Y—m?Z{%?[ŠÏ?\˜?]‘b?^Vó?_S¨?`?aT9?bW‚?c^%?dc¨?el4?fpŠ?gwa?h|‹?ià?jˆp?kB?l‘T?m“?n“?o–?pt^?qšÄ?r]?s]i?tep?ug¢?v¨?w–Û?xcn?ygI?zi?{ƒÅ?|˜?}–À?~ˆþ@!o„@"dz@#[ø@$N@%p,@&u]@'f/@(QÄ@)R6@*Râ@+YÓ@,_@-`'@.b@/e?@0et@1f@2ft@3hò@4h@5kc@6n@7rr@8u@9vÛ@:|¾@;€V@‰@?Š @@Š“@AŠË@B@C‘’@D—R@E—Y@Fe‰@Gz@H@I–»@J^-@K`Ü@Lb@Me¥@Nf@Og@Pwó@QzM@R|M@S~>@T @UŒ¬@Vd@Wá@XŽ_@Yx©@ZR@[bÙ@\c¥@]dB@^b˜@_Š-@`zƒ@a{À@bЬ@c–ê@d}v@e‚ @f‡I@gNÙ@hQH@iSC@jS`@k[£@l\@m\@n]Ý@ob&@pbG@qd°@rh@sh4@tlÉ@umE@vm@wgÓ@xo\@yqN@zq}@{eË@|z@}{­@~}ÚA!~JA"¨A#zA$‚A%‚9A&…¦A'ŠnA(ŒÎA)õA*xA+wA,’­A-’‘A.•ƒA/›®A0RMA1U„A2o8A3q6A4QhA5y…A6~UA7³A8|ÎA9VLA:XQA;\¨AfýA?iZA@rÙAAuABuŽACyADyVAEyßAF|—AG} AH}DAI†AJŠ4AK–;ALaAMŸ ANPçAORuAPSÌAQSâARP ASUªATXîAUYOAVr=AW[‹AX\dAYSAZ`ãA[`óA\c\A]cƒA^c?A_c»A`dÍAaeéAbfùAc]ãAdiÍAeiýAfoAgqåAhN‰AiuéAjvøAkz“Al|ßAm}ÏAn}œAo€aApƒIAqƒXAr„lAs„¼At…ûAuˆÅAvpAwAxmAy“—Az—A{šA|PÏA}X—A~aŽB!ÓB"…5B#B$ B%OÃB&PtB'RGB(SsB)`oB*cIB+g_B,n,B-³B.B/O×B0\^B1ŒÊB2eÏB3}šB4SRB5ˆ–B6QvB7cÃB8[XB9[kB:\ B;d BNÖB?YB@Y*BAlpBBŠQBCU>BDXBEY¥BF`ðBGbSBHgÁBI‚5BJiUBK–@BL™ÄBMš(BNOSBOXBP[þBQ€BR\±BS^/BT_…BU` BVaKBWb4BXfÿBYlðBZnÞB[€ÎB\B]‚ÔB^ˆ‹B_Œ¸B`Ba.Bb–ŠBcžÛBd›ÛBeNãBfSðBgY'Bh{,Bi‘Bj˜LBkùBlnÝBmp'BnSSBoUDBp[…BqbXBrbžBsbÓBtl¢BuoïBvt"BwŠBx”8ByoÁBzŠþB{ƒ8B|QçB}†øB~SêC!SéC"OFC#TC$°C%YjC&1C']ýC(zêC)¿C*hÚC+Œ7C,røC-œHC.j=C/аC0N9C1SXC2VC3WfC4bÅC5c¢C6eæC7kNC8máC9n[C:p­C;wíC}»C?€=C@€ÆCA†ËCBŠ•CC“[CDVãCEXÇCF_>CGe­CHf–CIj€CJkµCKu7CLŠÇCMP$CNwåCOW0CP_CQ`eCRfzCSl`CTuôCUzCVnCWôCX‡CYECZ™³C[{ÉC\u\C]zùC^{QC_„ÄC`CayéCbz’Ccƒ6CdZáCew@CfN-CgNòCh[™Ci_àCjb½CkfvôD?gD@lˆDAsÍDBŒÃDC“®DD–sDEm%DFXœDGiDHiÌDIýDJ“šDKuÛDLDMXZDNhDOc´DPiûDQOCDRo,DSgØDT»DU…&DV}´DW“TDXi?DYopDZWjD[X÷D\[,D]},D^r*D_T D`‘ãDa´DbN­DcONDdP\DePuDfRCDgŒžDhTHDiX$Dj[šDk^Dl^•Dm^­Dn^÷Do_Dp`ŒDqbµDrc:DscÐDth¯Dul@Dvx‡DwyŽDxz Dy}àDz‚GD{ŠD|ŠæD}ŽDD~E!¸E"‘-E#‘ØE$ŸE%låE&dXE'dâE(euE)nôE*v„E+{E,iE-“ÑE.nºE/TòE0_¹E1d¤E2ME3íE4’DE5QxE6XkE7Y)E8\UE9^—E:mûE;~EŽâE?˜[E@p¹EAOEBk¿ECo±EDu0EE–ûEFQNEGTEHX5EIXWEJY¬EK\`EL_’EMe—ENg\EOn!EPv{EQƒßERŒíESETýEU“MEVx%EWx:EXRªEY^¦EZWE[YtE\`E]PE^QZE_Q¬E`QÍEaREbUEcXTEdXXEeYWEf[•Eg\öEh]‹Ei`¼Ejb•Ekd-ElgqEmhCEnh¼EohßEpv×EqmØErnoEsm›EtpoEuqÈEv_SEwuØExywEy{IEz{TE{{RE||ÖE}}qE~R0F!„cF"…iF#…äF$ŠF%‹F&ŒFF'ŽF(F)F*”F+–vF,˜-F-š0F.•ØF/PÍF0RÕF1T F2XF3\F4a§F5džF6mF7w³F8zåF9€ôF:„F;SF<’…F=\àF>F?S?F@_—FA_³FBmœFCryFDwcFEy¿FF{äFGkÒFHrìFIŠ­FJhFKjaFLQøFMzFNi4FO\JFPœöFQ‚ëFR[ÅFS‘IFTpFUVxFV\oFW`ÇFXefFYlŒFZŒZF[AF\˜F]TQF^fÇF_’ F`YHFa£FbQ…FcNMFdQêFe…™Ff‹FgpXFhczFi“KFjibFk™´Fl~FmuwFnSWFoi`FpŽßFq–ãFrl]FsNŒFt\3G?¿G@²GA‰—GB†¤GC]ôGDbŠGEd­GF‰‡GGgwGHlâGIm>GJt6GKx4GLZFGMuGN‚­GO™¬GPOóGQ^ÃGRbÝGSc’GTeWGUgoGVvÃGWrLGX€ÌGY€ºGZ)G[‘MG\P G]WùG^Z’G_h…G`isGaqdGbrýGcŒ·GdXòGeŒàGf–jGgGh‡GiyäGjwçGk„)GlO/GmReGnSZGobÍGpgÏGqlÊGrv}Gs{”Gt|•Gu‚6Gv…„GwëGxfÝGyo GzrG{~G|ƒ«G}™ÁG~ž¦H!QýH"{±H#xrH${¸H%€‡H&{HH'jèH(^aH)€ŒH*uQH+u`H,QkH-’bH.nŒH/vzH0‘—H1šêH2OH3pH4bœH5{OH6•¥H7œéH8VzH9XYH:†äH;–¼HSJH?SÍH@SÛHA^HBd,HCe‘HDgHEl>HFlNHGrHHHr¯HIsíHJuTHK~AHL‚,HM…éHNŒ©HO{ÄHP‘ÆHQqiHR˜HS˜ïHTc=HUfiHVujHWväHXxÐHY…CHZ†îH[S*H\SQH]T&H^YƒH_^‡H`_|Ha`²HbbIHcbyHdb«HeeHfkÔHglÌHhu²Hiv®Hjx‘HkyØHl}ËHmwHn€¥Hoˆ«HpйHqŒ»HrHs—^Ht˜ÛHuj Hv|8HwP™Hx\>Hy_®Hzg‡H{kØH|t5H}w H~ŽI!Ÿ;I"gÊI#zI$S9I%u‹I&šíI'_fI(I)ƒñI*€˜I+_ŠUI?ŒyI@^ßIAcÏIBuÅICyÒID‚×IE“(IF’òIG„œIH†íIIœ-IJTÁIK_lILeŒIMm\INpIOŒ§IPŒÓIQ˜;IReOIStöITN IUNØIVWàIWY+IXZfIY[ÌIZQ¨I[^I\^œI]`I^bvI_ewI`e§IafnIbmnIcr6Id{&IePIfšIg‚™Ih‹\IiŒ IjŒæIktIl–Im–DInO®Iod«IpkfIq‚Ir„aIs…jItèIu\IviSIw˜¨Ix„zIy…WIzOI{RoI|_©I}^EI~g J!yJ"yJ#‰J$‰†J%mõJ&_J'bUJ(l¸J)NÏJ*riJ+›’J,RJ-T;J.VtJ/X³J0a¤J1bnJ2qJ3YnJ4|‰J5|ÞJ6}J7–ðJ8e‡J9€^J:NJ;OuJ^cJ?^sJ@_ JAgÄJBN&JC…=JD•‰JE–[JF|sJG˜JHPûJIXÁJJvVJKx§JLR%JMw¥JN…JO{†JPPOJQY JRrGJS{ÇJT}èJUºJVÔJWMJXO¿JYRÉJZZ)J[_J\—­J]OÝJ^‚J_’êJ`WJacUJbkiJcu+JdˆÜJeJfzBJgRßJhX“JiaUJjb Jkf®JlkÍJm|?JnƒéJoP#JpOøJqSJrTFJsX1JtYIJu[Jv\ðJw\ïJx])Jy^–Jzb±J{cgJ|e>J}e¹J~g K!lÕK"láK#pùK$x2K%~+K&€ÞK'‚³K(„ K)„ìK*‡K+‰K,Š*K-ŒJK.¦K/’ÒK0˜ýK1œóK2lK3NOK4N¡K5PK6RVK7WJK8Y¨K9^=K:_ØK;_ÙKgK?gÐK@hÒKAQ’KB}!KC€ªKD¨KE‹KFŒŒKGŒ¿KH’~KI–2KJT KK˜,KLSKMPÕKNS\KOX¨KPd²KQg4KRrgKSwfKTzFKU‘æKVRÃKWl¡KXk†KYXKZ^LK[YTK\g,K]ûK^QáK_vÆK`diKaxèKb›TKcž»KdWËKeY¹Kff'KggšKhkÎKiTéKjiÙKk^UKlœKmg•Kn›ªKogþKpœRKqh]KrN¦KsOãKtSÈKub¹Kvg+Kwl«KxÄKyO­Kz~mK{ž¿K|NK}abK~n€L!o+L"…L#TsL$g*L%›EL&]óL'{•L(\¬L)[ÆL*‡L+nJL,„ÑL-zL.L/Y™L0|L1lL2w L3RÙL4Y"L5q!L6r_L7wÛL8—'L9aL:i L;ZLT L?T}L@fLAvßLB÷LC’˜LDœôLEYêLFr]LGnÅLHQMLIhÉLJ}¿LK}ìLL—bLMžºLNdxLOj!LPƒLQY„LR[_LSkÛLTsLUvòLV}²LW€LX„™LYQ2LZg(L[žÙL\vîL]gbL^RÿL_™L`\$Lab;Lb|~LcŒ°LdUOLe`¶Lf} Lg•€LhSLiN_LjQ¶LkYLlr:Lm€6Ln‘ÎLo_%LpwâLqS„Lr_yLs}Lt…¬LuŠ3LvŽLw—VLxgóLy…®Lz”SL{a L|aL}l¹L~vRM!ŠíM"8M#U/M$OQM%Q*M&RÇM'SËM([¥M)^}M*` M+a‚M,cÖM-g M.gÚM/ngM0mŒM1s6M2s7M3u1M4yPM5ˆÕM6Š˜M7JM8‘M9õM:–ÄM;‡MOYM?NM@ЉMA?MB˜MCP­MD^|MEY–MF[¹MG^¸MHcÚMIcúMJdÁMKfÜMLiJMMiØMNm MOn¶MPq”MQu(MRz¯MSŠMT€MU„IMV„ÉMW‰MX‹!MYŽ MZeM[–}M\™ M]a~M^b‘M_k2M`lƒMamtMbÌMcüMdmÀMe…Mf‡ºMgˆøMhgeMiƒ±Mj˜N!N?QÌN@[îNAe™NBhNCm¼NDsNEvBNFw­NGzNH|çNI‚oNJŠÒNK|NL‘ÏNM–uNN˜NOR›NP}ÑNQP+NRS˜NSg—NTmËNUqÐNVt3NWèNX*NY–£NZœWN[žŸN\t`N]XAN^m™N_}/N`˜^NaNäNbO6NcO‹NdQ·NeR±Nf]ºNg`Nhs²NiyN}}ôN~€oO!„îO"#O#“,O$TBO%›oO&jÓO'p‰O(ŒÂO)ïO*—2O+R´O,ZAO-^ÊO._O/gO0i|O1i”O2mjO3oO4rbO5rüO6{íO7€O8€~O9‡KO:ÎO;QmO<ž“O=y„O>€‹O?“2O@ŠÖOAP-OBTŒOCŠqODkjOEŒÄOFOG`ÑOHg OIòOJN™OKN˜OLœOMŠkON…ÁOO…hOPiOQn~ORx—OSUP!_ P"NP#NP$N*P%N1P&N6P'NNÂP?N×P@NÞPANíPBNßPCN÷PDO PEOZPFO0PGO[PHO]PIOWPJOGPKOvPLOˆPMOPNO˜POO{PPOiPQOpPRO‘PSOoPTO†PUO–PVQPWOÔPXOßPYOÎPZOØP[OÛP\OÑP]OÚP^OÐP_OäP`OåPaPPbP(PcPPdP*PeP%PfPPgOPhOöPiP!PjP)PkP,PlOþPmOïPnPPoPPpPCPqPGPrgPsPUPtPPPuPHPvPZPwPVPxPlPyPxPzP€P{PšP|P…P}P´P~P²Q!PÉQ"PÊQ#P³Q$PÂQ%PÖQ&PÞQ'PåQ(PíQ)PãQ*PîQ+PùQ,PõQ-Q Q.QQ/QQ0QQ1QQ2QQ3QQ4Q!Q5Q:Q6Q7Q7QQbQ?zøQ@QiQAQjQBQnQCQ€QDQ‚QEVØQFQŒQGQ‰QHQQIQ‘QJQ“QKQ•QLQ–QMQ¤QNQ¦QOQ¢QPQ©QQQªQRQ«QSQ³QTQ±QUQ²QVQ°QWQµQXQ½QYQÅQZQÉQ[QÛQ\QàQ]†UQ^QéQ_QíQ`QðQaQõQbQþQcRQdR QeRQfRQgR'QhR*QiR.QjR3QkR9QlROQmRDQnRKQoRLQpR^QqRTQrRjQsRtQtRiQuRsQvRQwR}QxRQyR”QzR’Q{RqQ|RˆQ}R‘Q~¨R!§R"R¬R#R­R$R¼R%RµR&RÁR'RÍR(R×R)RÞR*RãR+RæR,˜íR-RàR.RóR/RõR0RøR1RùR2SR3SR4u8R5S R6SR7SR8SR9SR:S#R;S/RS8R?S@R@SFRASERBNRCSIRDSMREQÖRFS^RGSiRHSnRIYRJS{RKSwRLS‚RMS–RNS ROS¦RPS¥RQS®RRS°RSS¶RTSÃRU|RV–ÙRWSßRXfüRYqîRZSîR[SèR\SíR]SúR^TR_T=R`T@RaT,RbT-RcTT¯S?UŠS@UŸSAU{SBU~SCU˜SDUžSEU®SFU|SGUƒSHU©SIU‡SJU¨SKUÚSLUÅSMUßSNUÄSOUÜSPUäSQUÔSRVSSU÷STVSUUþSVUýSWVSXUùSYVNSZVPS[qßS\V4S]V6S^V2S_V8S`VkSaVdSbV/ScVlSdVjSeV†SfV€SgVŠShV SiV”SjVSkV¥SlV®SmV¶SnV´SoVÂSpV¼SqVÁSrVÃSsVÀStVÈSuVÎSvVÑSwVÓSxV×SyVîSzVùS{WS|VÿS}WS~W T!WT"W T#W T$WT%WT&WT'UÇT(WT)W&T*W7T+W8T,WNT-W;T.W@T/WOT0WiT1WÀT2WˆT3WaT4WT5W‰T6W“T7W T8W³T9W¤T:WªT;W°TWÔT?WÒT@WÓTAX TBWÖTCWãTDX TEXTFXTGXrTHX!TIXbTJXKTKXpTLkÀTMXRTNX=TOXyTPX…TQX¹TRXŸTSX«TTXºTUXÞTVX»TWX¸TXX®TYXÅTZXÓT[XÑT\X×T]XÙT^XØT_XåT`XÜTaXäTbXßTcXïTdXúTeXùTfXûTgXüThXýTiYTjY TkYTlYTmh¦TnY%ToY,TpY-TqY2TrY8TsY>TtzÒTuYUTvYPTwYNTxYZTyYXTzYbT{Y`T|YgT}YlT~YiU!YxU"YU#YU$O^U%O«U&Y£U'Y²U(YÆU)YèU*YÜU+YU,YÙU-YÚU.Z%U/ZU0ZU1ZU2Z U3ZU4Z@U5ZlU6ZIU7Z5U8Z6U9ZbU:ZjU;ZšUZËU?ZÂU@Z½UAZãUBZ×UCZæUDZéUEZÖUFZúUGZûUH[ UI[ UJ[UK[2ULZÐUM[*UN[6UO[>UP[CUQ[EUR[@US[QUT[UUU[ZUV[[UW[eUX[iUY[pUZ[sU[[uU\[xU]eˆU^[zU_[€U`[ƒUa[¦Ub[¸Uc[ÃUd[ÇUe[ÉUf[ÔUg[ÐUh[äUi[æUj[âUk[ÞUl[åUm[ëUn[ðUo[öUp[óUq\Ur\Us\Ut\ Uu\Uv\ Uw\"Ux\(Uy\8Uz\9U{\AU|\FU}\NU~\SV!\PV"\OV#[qV$\lV%\nV&NbV'\vV(\yV)\ŒV*\‘V+\”V,Y›V-\«V.\»V/\¶V0\¼V1\·V2\ÅV3\¾V4\ÇV5\ÙV6\éV7\ýV8\úV9\íV:]ŒV;\êV<] V=]V>]V?]\V@]VA]VB]VC]VD]"VE]VF]VG]VH]LVI]RVJ]NVK]KVL]lVM]sVN]vVO]‡VP]„VQ]‚VR]¢VS]VT]¬VU]®VV]½VW]VX]·VY]¼VZ]ÉV[]ÍV\]ÓV]]ÒV^]ÖV_]ÛV`]ëVa]òVb]õVc^ Vd^Ve^Vf^Vg^Vh^6Vi^7Vj^DVk^CVl^@Vm^NVn^WVo^TVp^_Vq^bVr^dVs^GVt^uVu^vVv^zVwž¼Vx^Vy^ Vz^ÁV{^ÂV|^ÈV}^ÐV~^ÏW!^ÖW"^ãW#^ÝW$^ÚW%^ÛW&^âW'^áW(^èW)^éW*^ìW+^ñW,^óW-^ðW.^ôW/^øW0^þW1_W2_ W3_]W4_\W5_ W6_W7_W8_)W9_-W:_8W;_AW<_HW=_LW>_NW?_/W@_QWA_VWB_WWC_YWD_aWE_mWF_sWG_wWH_ƒWI_‚WJ_WK_ŠWL_ˆWM_‘WN_‡WO_žWP_™WQ_˜WR_ WS_¨WT_­WU_¼WV_ÖWW_ûWX_äWY_øWZ_ñW[_ÝW\`³W]_ÿW^`!W_``W``Wa`Wb`)Wc`Wd`1We`Wf`Wg`+Wh`&Wi`Wj`:Wk`ZWl`AWm`jWn`wWo`_Wp`JWq`FWr`MWs`cWt`CWu`dWv`BWw`lWx`kWy`YWz`W{`W|`çW}`ƒW~`šX!`„X"`›X#`–X$`—X%`’X&`§X'`‹X(`áX)`¸X*`àX+`ÓX,`´X-_ðX.`½X/`ÆX0`µX1`ØX2aMX3aX4aX5`öX6`÷X7aX8`ôX9`úX:aX;a!X<`ûX=`ñX>a X?aX@aGXAa>XBa(XCa'XDaJXEa?XFabÆY?dÔY@bÈYAbÜYBbÌYCbÊYDbÂYEbÇYFb›YGbÉYHc YIbîYJbñYKc'YLcYMcYNbïYObõYPcPYQc>YRcMYSdYTcOYUc–YVcŽYWc€YXc«YYcvYZc£Y[cY\c‰Y]cŸY^cµY_ckY`ciYac¾YbcéYccÀYdcÆYecãYfcÉYgcÒYhcöYicÄYjdYkd4YldYmdYnd&Yod6YpeYqdYrd(YsdYtdgYudoYvdvYwdNYxe*Yyd•Yzd“Y{d¥Y|d©Y}dˆY~d¼Z!dÚZ"dÒZ#dÅZ$dÇZ%d»Z&dØZ'dÂZ(dñZ)dçZ*‚ Z+dàZ,dáZ-b¬Z.dãZ/dïZ0e,Z1döZ2dôZ3dòZ4dúZ5eZ6dýZ7eZ8eZ9eZ:e$Z;e#Ze5Z?e7Z@e6ZAe8ZBuKZCeHZDeVZEeUZFeMZGeXZHe^ZIe]ZJerZKexZLe‚ZMeƒZN‹ŠZOe›ZPeŸZQe«ZRe·ZSeÃZTeÆZUeÁZVeÄZWeÌZXeÒZYeÛZZeÙZ[eàZ\eáZ]eñZ^grZ_f Z`fZaeûZbgsZcf5Zdf6Zef4ZffZgfOZhfDZifIZjfAZkf^Zlf]ZmfdZnfgZofhZpf_ZqfbZrfpZsfƒZtfˆZufŽZvf‰Zwf„Zxf˜ZyfZzfÁZ{f¹Z|fÉZ}f¾Z~f¼[!fÄ["f¸[#fÖ[$fÚ[%fà[&f?['fæ[(fé[)fð[*fõ[+f÷[,g[-g[.g[/g&[0g'[1—8[2g.[3g?[4g6[5gA[6g8[7g7[8gF[9g^[:g`[;gY[g‰[?gp[@g©[Ag|[Bgj[CgŒ[Dg‹[Eg¦[Fg¡[Gg…[Hg·[Igï[Jg´[Kgì[Lg³[Mgé[Ng¸[Ogä[PgÞ[QgÝ[Rgâ[Sgî[Tg¹[UgÎ[VgÆ[Wgç[Xjœ[Yh[ZhF[[h)[\h@[]hM[^h2[_hN[`h³[ah+[bhY[chc[dhw[eh[fhŸ[gh[hh­[ih”[jh[kh›[lhƒ[mj®[nh¹[oht[phµ[qh [rhº[si[th[uh~[vi[whÊ[xi[yhØ[zi"[{i&[|há[}i [~hÍ\!hÔ\"hç\#hÕ\$i6\%i\&i\'h×\(hã\)i%\*hù\+hà\,hï\-i(\.i*\/i\0i#\1i!\2hÆ\3iy\4iw\5i\\6ix\7ik\8iT\9i~\:in\;i9\iY\?i0\@ia\Ai^\Bi]\Ci\Dij\Ei²\Fi®\GiÐ\Hi¿\IiÁ\JiÓ\Ki¾\LiÎ\M[è\NiÊ\OiÝ\Pi»\QiÃ\Ri§\Sj.\Ti‘\Ui \Viœ\Wi•\Xi´\YiÞ\Ziè\[j\\j\]iÿ\^k \_iù\`iò\aiç\bj\ci±\dj\eií\fj\gië\hj \ij\jjÁ\kj#\lj\mjD\nj \ojr\pj6\qjx\rjG\sjb\tjY\ujf\vjH\wj8\xj"\yj\zj\{j \|j„\}j¢\~j£]!j—]"†]#j»]$jÃ]%jÂ]&j¸]'j³](j¬])jÞ]*jÑ]+jß],jª]-jÚ].jê]/jû]0k]1†]2jú]3k]4k]5›1]6k]7k8]8k7]9vÜ]:k9];˜î]kI]?kP]@kY]AkT]Bk[]Ck_]Dka]Ekx]Fky]Gk]Hk€]Ik„]Jkƒ]Kk]Lk˜]Mk•]Nkž]Ok¤]Pkª]Qk«]Rk¯]Sk²]Tk±]Uk³]Vk·]Wk¼]XkÆ]YkË]ZkÓ][kß]\kì]]kë]^kó]_kï]`ž¾]al]bl]cl]dl]el$]fl#]gl^]hlU]ilb]jlj]kl‚]ll]mlš]nl]ol›]pl~]qlh]rls]sl’]tl]ulÄ]vlñ]wlÓ]xl½]yl×]zlÅ]{lÝ]|l®]}l±]~l¾^!lº^"lÛ^#lï^$lÙ^%lê^&m^'ˆM^(m6^)m+^*m=^+m8^,m^-m5^.m3^/m^0m ^1mc^2m“^3md^4mZ^5my^6mY^7mŽ^8m•^9oä^:m…^;mù^mµ^?mÇ^@mæ^Am¸^BmÆ^Cmì^DmÞ^EmÌ^Fmè^GmÒ^HmÅ^Imú^JmÙ^Kmä^LmÕ^Mmê^Nmî^On-^Pnn^Qn.^Rn^Snr^Tn_^Un>^Vn#^Wnk^Xn+^Ynv^ZnM^[n^\nC^]n:^^nN^_n$^`nÿ^an^bn8^cn‚^dnª^en˜^fnÉ^gn·^hnÓ^in½^jn¯^knÄ^ln²^mnÔ^nnÕ^on^pn¥^qnÂ^rnŸ^soA^to^upL^vnì^wnø^xnþ^yo?^znò^{o1^|nï^}o2^~nÌ_!o>_"o_#n÷_$o†_%oz_&ox_'o_(o€_)oo_*o[_+oó_,om_-o‚_.o|_/oX_0oŽ_1o‘_2oÂ_3of_4o³_5o£_6o¡_7o¤_8o¹_9oÆ_:oª_;oß_oÔ_?oØ_@oñ_Aoî_BoÛ_Cp _Dp _Eoú_Fp_Gp_Hp_Ioþ_Jp_Kp_Lot_Mp_Np_Op_Pp0_Qp>_Rp2_SpQ_Tpc_Up™_Vp’_Wp¯_Xpñ_Yp¬_Zp¸_[p³_\p®_]pß_^pË__pÝ_`pÙ_aq _bpý_cq_dq_eqe_fqU_gqˆ_hqf_iqb_jqL_kqV_lql_mq_nqû_oq„_pq•_qq¨_rq¬_sq×_tq¹_uq¾_vqÒ_wqÉ_xqÔ_yqÎ_zqà_{qì_|qç_}qõ_~qü`!qù`"qÿ`#r `$r`%r`&r(`'r-`(r,`)r0`*r2`+r;`,r<`-r?`.r@`/rF`0rK`1rX`2rt`3r~`4r‚`5r`6r‡`7r’`8r–`9r¢`:r§`;r¹`rÆ`?rÄ`@rÎ`ArÒ`Brâ`Crà`Drá`Erù`Fr÷`GP`Hs`Is `Js`Ks`Ls`Ms4`Ns/`Os)`Ps%`Qs>`RsN`SsO`TžØ`UsW`Vsj`Wsh`Xsp`Ysx`Zsu`[s{`\sz`]sÈ`^s³`_sÎ``s»`asÀ`bså`csî`dsÞ`et¢`ft`gto`ht%`isø`jt2`kt:`ltU`mt?`nt_`otY`ptA`qt\`rti`stp`ttc`utj`vtv`wt~`xt‹`ytž`zt§`{tÊ`|tÏ`}tÔ`~sña!tàa"tãa#tça$téa%tîa&tòa'tða(tña)tøa*t÷a+ua,ua-ua.u a/ua0u a1ua2ua3ua4u&a5u,a6uuia?uda@ugaAukaBumaCuxaDuvaEu†aFu‡aGutaHuŠaIu‰aJu‚aKu”aLušaMuaNu¥aOu£aPuÂaQu³aRuÃaSuµaTu½aUu¸aVu¼aWu±aXuÍaYuÊaZuÒa[uÙa\uãa]uÞa^uþa_uÿa`uüaavabuðacuúaduòaeuóafv agv ahv aivajv'akv alv!amv"anv$aov4apv0aqv;arvGasvHatvFauv\avvXawvaaxvbayvhazvia{vja|vga}vla~vpb!vrb"vvb#vxb$v|b%v€b&vƒb'vˆb(v‹b)vŽb*v–b+v“b,v™b-všb.v°b/v´b0v¸b1v¹b2vºb3vÂb4vÍb5vÖb6vÒb7vÞb8váb9våb:vçb;vêb<†/b=vûb>wb?wb@wbAw)bBw$bCwbDw%bEw&bFwbGw7bHw8bIwGbJwZbKwhbLwkbMw[bNwebOwbPw~bQwybRwŽbSw‹bTw‘bUw bVwžbWw°bXw¶bYw¹bZw¿b[w¼b\w½b]w»b^wÇb_wÍb`w×bawÚbbwÜbcwãbdwîbewübfx bgxbhy&bix bjy*bkxEblxŽbmxtbnx†box|bpxšbqxŒbrx£bsxµbtxªbux¯bvxÑbwxÆbxxËbyxÔbzx¾b{x¼b|xÅb}xÊb~xìc!xçc"xÚc#xýc$xôc%yc&yc'yc(yc)y,c*y+c+y@c,y`c-yWc.y_c/yZc0yUc1ySc2yzc3yc4yŠc5yc6y§c7ŸKc8yªc9y®c:y³c;y¹cyÕc?yçc@yìcAyácByãcCzcDz cEzcFzcGz cHzcIy€cJz1cKz;cLz>cMz7cNzCcOzWcPzIcQzacRzbcSzicTŸcUzpcVzycWz}cXzˆcYz—cZz•c[z˜c\z–c]z©c^zÈc_z°c`z¶cazÅcbzÄccz¿cdƒcezÇcfzÊcgzÍchzÏcizÕcjzÓckzÙclzÚcmzÝcnzácozâcpzæcqzícrzðcs{ct{cu{ cv{cw{3cx{cy{cz{c{{5c|{(c}{6c~{Pd!{zd"{d#{Md${ d%{Ld&{Ed'{ud({ed){td*{gd+{pd,{qd-{ld.{nd/{d0{˜d1{Ÿd2{d3{œd4{šd5{‹d6{’d7{d8{]d9{™d:{Ëd;{Ád<{Ìd={Ïd>{´d?{Æd@{ÝdA{édB|dC|dD{ædE{ådF|`dG|dH|dI|dJ{ódK{÷dL|dM| dN{ödO|#dP|'dQ|*dR|dS|7dT|+dU|=dV|LdW|CdX|TdY|OdZ|@d[|Pd\|Xd]|_d^|dd_|Vd`|eda|ldb|udc|ƒdd|de|¤df|­dg|¢dh|«di|¡dj|¨dk|³dl|²dm|±dn|®do|¹dp|½dq|Àdr|Åds|Âdt|Ødu|Òdv|Üdw|âdx›;dy|ïdz|òd{|ôd||öd}|úd~}e!}e"}e#}e$} e%}Ee&}Ke'}.e(}2e)}?e*}5e+}Fe,}se-}Ve.}Ne/}re0}he1}ne2}Oe3}ce4}“e5}‰e6}[e7}e8}}e9}›e:}ºe;}®e<}£e=}µe>}Çe?}½e@}«eA~=eB}¢eC}¯eD}ÜeE}¸eF}ŸeG}°eH}ØeI}ÝeJ}äeK}ÞeL}ûeM}òeN}áeO~eP~ eQ~#eR~!eS~eT~1eU~eV~ eW~ eX~"eY~FeZ~fe[~;e\~5e]~9e^~Ce_~7e`~2ea~:eb~gec~]ed~Vee~^ef~Yeg~Zeh~yei~jej~iek~|el~{em~ƒen}Õeo~}ep®eq~er~ˆes~‰et~Œeu~’ev~ew~“ex~”ey~–ez~Že{~›e|~œe}8e~:f!Ef"Lf#Mf$Nf%Pf&Qf'Uf(Tf)Xf*_f+`f,hf-if.gf/xf0‚f1†f2ƒf3ˆf4‡f5Œf6”f7žf8f9šf:£f;¯f<²f=¹f>®f?¶f@¸fA‹qfBÅfCÆfDÊfEÕfFÔfGáfHæfIéfJófKùfL˜ÜfM€fN€fO€ fP€fQ€fR€fS€fT€!fU€(fV€?fW€;fX€JfY€FfZ€Rf[€Xf\€Zf]€_f^€bf_€hf`€sfa€rfb€pfc€vfd€yfe€}ff€fg€„fh€†fi€…fj€›fk€“fl€šfm€­fnQfo€¬fp€Ûfq€åfr€Ùfs€Ýft€Äfu€Úfv€Öfw fx€ïfy€ñfzf{)f|#f}/f~Kg!–‹g"Fg#>g$Sg%Qg&€üg'qg(ng)eg*fg+tg,ƒg-ˆg.Šg/€g0‚g1 g2•g3¤g4£g5_g6“g7©g8°g9µg:¾g;¸g<½g=Àg>Âg?ºg@ÉgAÍgBÑgCÙgDØgEÈgFÚgGßgHàgIçgJúgKûgLþgM‚gN‚gO‚gP‚gQ‚ gR‚ gS‚gT‚gU‚)gV‚+gW‚8gX‚3gY‚@gZ‚Yg[‚Xg\‚]g]‚Zg^‚_g_‚dg`‚bga‚hgb‚jgc‚kgd‚.ge‚qgf‚wgg‚xgh‚~gi‚gj‚’gk‚«gl‚Ÿgm‚»gn‚¬go‚ágp‚ãgq‚ßgr‚Ògs‚ôgt‚ógu‚úgvƒ“gwƒgx‚ûgy‚ùgz‚Þg{ƒg|‚Üg}ƒ g~‚Ùh!ƒ5h"ƒ4h#ƒh$ƒ2h%ƒ1h&ƒ@h'ƒ9h(ƒPh)ƒEh*ƒ/h+ƒ+h,ƒh-ƒh.ƒ…h/ƒšh0ƒªh1ƒŸh2ƒ¢h3ƒ–h4ƒ#h5ƒŽh6ƒ‡h7ƒŠh8ƒ|h9ƒµh:ƒsh;ƒuh<ƒ h=ƒ‰h>ƒ¨h?ƒôh@„hAƒëhBƒÎhCƒýhD„hEƒØhF„ hGƒÁhHƒ÷hI„hJƒàhKƒòhL„ hM„"hN„ hOƒ½hP„8hQ…hRƒûhS„mhT„*hU„† i?†i@† iA…þiB…úiC†iD†"iE†iF†0iG†?iH†MiINUiJ†TiK†_iL†giM†qiN†“iO†£iP†©iQ†ªiR†‹iS†ŒiT†¶iU†¯iV†ÄiW†ÆiX†°iY†ÉiZˆ#i[†«i\†Ôi]†Þi^†éi_†ìi`†ßia†Ûib†ïic‡id‡ie‡if‡ig‡ih†ûii‡ij‡ ik‡ il†ùim‡ in‡4io‡?ip‡7iq‡;ir‡%is‡)it‡iu‡`iv‡_iw‡xix‡Liy‡Niz‡ti{‡Wi|‡hi}‡ni~‡Yj!‡Sj"‡cj#‡jj$ˆj%‡¢j&‡Ÿj'‡‚j(‡¯j)‡Ëj*‡½j+‡Àj,‡Ðj-–Öj.‡«j/‡Äj0‡³j1‡Çj2‡Æj3‡»j4‡ïj5‡òj6‡àj7ˆj8ˆ j9‡þj:‡öj;‡÷j<ˆj=‡Òj>ˆj?ˆj@ˆjAˆ"jBˆ!jCˆ1jDˆ6jEˆ9jFˆ'jGˆ;jHˆDjIˆBjJˆRjKˆYjLˆ^jMˆbjNˆkjOˆjPˆ~jQˆžjRˆujSˆ}jTˆµjUˆrjVˆ‚jWˆ—jXˆ’jYˆ®jZˆ™j[ˆ¢j\ˆj]ˆ¤j^ˆ°j_ˆ¿j`ˆ±jaˆÃjbˆÄjcˆÔjdˆØjeˆÙjfˆÝjgˆùjh‰jiˆüjjˆôjkˆèjlˆòjm‰jn‰ jo‰ jp‰jq‰Cjr‰js‰%jt‰*ju‰+jv‰Ajw‰Djx‰;jy‰6jz‰8j{‰Lj|‰j}‰`j~‰^k!‰fk"‰dk#‰mk$‰jk%‰ok&‰tk'‰wk(‰~k)‰ƒk*‰ˆk+‰Šk,‰“k-‰˜k.‰¡k/‰©k0‰¦k1‰¬k2‰¯k3‰²k4‰ºk5‰½k6‰¿k7‰Àk8‰Úk9‰Ük:‰Ýk;‰çk<‰ôk=‰øk>Šk?Šk@ŠkAŠ kBŠkCŠkDŠ%kEŠ6kFŠAkGŠ[kHŠRkIŠFkJŠHkKŠ|kLŠmkMŠlkNŠbkOŠ…kPŠ‚kQŠ„kRЍkSŠ¡kTŠ‘kUŠ¥kVЦkWŠškXŠ£kYŠÄkZŠÍk[ŠÂk\ŠÚk]Šëk^Šók_Šçk`ŠäkaŠñkb‹kcŠàkdŠâkeŠ÷kfŠÞkgŠÛkh‹ ki‹kj‹kkŠákl‹km‹kn‹ko‹ kp‹3kq—«kr‹&ks‹+kt‹>ku‹(kv‹Akw‹Lkx‹Oky‹Nkz‹Ik{‹Vk|‹[k}‹Zk~‹kl!‹_l"‹ll#‹ol$‹tl%‹}l&‹€l'‹Œl(‹Žl)‹’l*‹“l+‹–l,‹™l-‹šl.Œ:l/ŒAl0Œ?l1ŒHl2ŒLl3ŒNl4ŒPl5ŒUl6Œbl7Œll8Œxl9Œzl:Œ‚l;Œ‰l<Œ…l=ŒŠl>Œl?ŒŽl@Œ”lAŒ|lBŒ˜lCblDŒ­lEŒªlFŒ½lGŒ²lHŒ³lIŒ®lJŒ¶lKŒÈlLŒÁlMŒälNŒãlOŒÚlPŒýlQŒúlRŒûlSlTlU lVlWlX lYlZŸNl[l\ŒÍl]l^l_gl`mlaqlbslcld™leÂlf¾lgºlhÏliÚljÖlkÌllÛlmËlnêloëlpßlqãlrülsŽltŽ luÿlvŽlwŽlxŽlyŽlzŽBl{Ž5l|Ž0l}Ž4l~ŽJm!ŽGm"ŽIm#ŽLm$ŽPm%ŽHm&ŽYm'Ždm(Ž`m)Ž*m*Žcm+ŽUm,Žvm-Žrm.Ž|m/Žm0އm1Ž…m2Ž„m3Ž‹m4ŽŠm5Ž“m6Ž‘m7Ž”m8Ž™m9Žªm:Ž¡m;ެm<ްm=ŽÆm>ޱm?޾m@ŽÅmAŽÈmBŽËmCŽÛmDŽãmEŽümFŽûmGŽëmHŽþmI mJmKmLmMmNmOmPmQmR mS&mT3mU;mV9mWEmXBmY>mZLm[Im\Fm]Nm^Wm_\m`bmacmbdmcœmdŸme£mf­mg¯mh·miÚmjåmkâmlêmmïmn‡moômpmqùmrúmsmtmu!mv mwmxmy mz'm{6m|5m}9m~øn!On"Pn#Qn$Rn%n&In'>n(Vn)Xn*^n+hn,on-vn.–¨n/rn0‚n1}n2n3€n4Šn5‰n6n7¨n8¯n9±n:µn;ân<än=bHn>Ûn?‘n@‘nA‘nB‘2nC‘0nD‘JnE‘VnF‘XnG‘cnH‘enI‘inJ‘snK‘rnL‘‹nM‘‰nN‘‚nO‘¢nP‘«nQ‘¯nR‘ªnS‘µnT‘´nU‘ºnV‘ÀnW‘ÁnX‘ÉnY‘ËnZ‘Ðn[‘Ön\‘ßn]‘án^‘Ûn_‘ün`‘õna‘önb’nc‘ÿnd’ne’,nf’ng’nh’^ni’Wnj’Enk’Inl’dnm’Hnn’•no’?np’Knq’Pnr’œns’–nt’“nu’›nv’Znw’Ïnx’¹ny’·nz’én{“n|’ún}“Dn~“.o!“o"“"o#“o$“#o%“:o&“5o'“;o(“\o)“`o*“|o+“no,“Vo-“°o.“¬o/“­o0“”o1“¹o2“Öo3“×o4“èo5“åo6“Øo7“Ão8“Ýo9“Ðo:“Èo;“äo<”o=”o>”o?”o@”oA”oB”6oC”+oD”5oE”!oF”:oG”AoH”RoI”DoJ”[oK”`oL”boM”^oN”joO’)oP”poQ”uoR”woS”}oT”ZoU”|oV”~oW”oX”oY•‚oZ•‡o[•Šo\•”o]•–o^•˜o_•™o`• oa•¨ob•§oc•­od•¼oe•»of•¹og•¾oh•Êoioöoj•Ãok•Íol•Ìom•Õon•Ôoo•Öop•Üoq•áor•åos•âot–!ou–(ov–.ow–/ox–Boy–Loz–Oo{–Ko|–wo}–\o~–^p!–]p"–_p#–fp$–rp%–lp&–p'–˜p(–•p)–—p*–ªp+–§p,–±p-–²p.–°p/–´p0–¶p1–¸p2–¹p3–Îp4–Ëp5–Ép6–Íp7‰Mp8–Üp9— p:–Õp;–ùp<—p=—p>—p?—p@—pA—pB—pC—pD—pE—$pF—*pG—0pH—9pI—=pJ—>pK—DpL—FpM—HpN—BpO—IpP—\pQ—`pR—dpS—fpT—hpURÒpV—kpW—qpX—ypY—…pZ—|p[—p\—zp]—†p^—‹p_—p`—pa—œpb—¨pc—¦pd—£pe—³pf—´pg—Ãph—Æpi—Èpj—Ëpk—Üpl—ípmŸOpn—òpozßpp—öpq—õpr˜ps˜ pt˜8pu˜$pv˜!pw˜7px˜=py˜Fpz˜Op{˜Kp|˜kp}˜op~˜pq!˜qq"˜tq#˜sq$˜ªq%˜¯q&˜±q'˜¶q(˜Äq)˜Ãq*˜Æq+˜éq,˜ëq-™q.™ q/™q0™q1™q2™!q3™q4™q5™$q6™ q7™,q8™.q9™=q:™>q;™Bq<™Iq=™Eq>™Pq?™Kq@™QqA™RqB™LqC™UqD™—qE™˜qF™¥qG™­qH™®qI™¼qJ™ßqK™ÛqL™ÝqM™ØqN™ÑqO™íqP™îqQ™ñqR™òqS™ûqT™øqUšqVšqWšqX™âqYšqZš+q[š7q\šEq]šBq^š@q_šCq`š>qašUqbšMqcš[qdšWqeš_qfšbqgšeqhšdqišiqjškqkšjqlš­qmš°qnš¼qošÀqpšÏqqšÑqršÓqsšÔqtšÞqušßqvšâqwšãqxšæqyšïqzšëq{šîq|šôq}šñq~š÷r!šûr"›r#›r$›r%›r&›"r'›#r(›%r)›'r*›(r+›)r,›*r-›.r.›/r/›2r0›Dr1›Cr2›Or3›Mr4›Nr5›Qr6›Xr7›tr8›“r9›ƒr:›‘r;›–r<›—r=›Ÿr>› r?›¨r@›´rA›ÀrB›ÊrC›¹rD›ÆrE›ÏrF›ÑrG›ÒrH›ãrI›ârJ›ärK›ÔrL›árMœ:rN›òrO›ñrP›ðrQœrRœrSœ rTœrUœ rVœrWœrXœrYœ rZœr[œ.r\œr]œ%r^œ$r_œ!r`œ0raœGrbœ2rcœFrdœ>reœZrfœ`rgœgrhœvriœxrjœçrkœìrlœðrm rnroœërprqrr*rs&rt¯ru#rvrwDrxryrzAr{?r|>r}Fr~Hs!]s"^s#ds$Qs%Ps&Ys'rs(‰s)‡s*«s+os,zs-šs.¤s/©s0²s1Äs2Ás3»s4¸s5ºs6Æs7Ïs8Âs9Ùs:Ós;øs<æs=ís>ïs?ýs@žsAžsBžsCžusDžysEž}sFžsGžˆsHž‹sIžŒsJž’sKž•sLž‘sMžsNž¥sOž©sPž¸sQžªsRž­sS—asTžÌsUžÎsVžÏsWžÐsXžÔsYžÜsZžÞs[žÝs\žàs]žås^žès_žïs`žôsažösbž÷scžùsdžûsežüsfžýsgŸshŸsiv·sjŸskŸ!slŸ,smŸ>snŸJsoŸRspŸTsqŸcsrŸ_ssŸ`stŸasuŸfsvŸgswŸlsxŸjsyŸwszŸrs{Ÿvs|Ÿ•s}Ÿœs~Ÿ t!X/t"iÇt#Yt$tdt%QÜt&q™screen-4.9.1/utf8encodings/c30000664000175000017500000000021414467014146014466 0ustar alexalexScreenI2UTF8ÃISO-8859-3¡&¢ئ$©0ª^«¬4¯{±'¶%¹1º_»¼5¿|Å ÆÕ ØÝlÞ\å æ õ!øýmþ]ÿÙscreen-4.9.1/utf8encodings/c80000664000175000017500000000005014467014146014471 0ustar alexalexScreenI2UTF8ÈISO-8859-8ß àЀúêscreen-4.9.1/utf8encodings/040000664000175000017500000005735614467014146014427 0ustar alexalexScreenI2UTF8³JIS X 0212 (1990)"/Ø"0Ç"1¸"2Ù"3Ý"4¯"5Û"6Ú"7~"8„"9…"B¡"C¦"D¿"kº"lª"m©"n®"o!""p¤"q!&a†&bˆ&c‰&dŠ&eª&gŒ&iŽ&j«&l&q¬&r­&s®&t¯&uÊ&v&wÌ&xÂ&yÍ&zË&{°&|Î'B'C'D'E'F'G'H'I 'J 'K 'L 'M'N'rR'sS'tT'uU'vV'wW'xX'yY'zZ'{['|\'}^'~_)!Æ)")$&)&2)(A))?)+J),Ø)-R)/f)0Þ)Aæ)B)Cð)D')E1)F3)G8)HB)I@)JI)KK)Lø)MS)Nß)Og)Pþ*!Á*"À*#Ä*$Â*%*&Í*'*(*)Å**Ã*+*,*- *.Ç*/ *0*1É*2È*3Ë*4Ê*5*6*7*8*:*;*<"*= *>$*?Í*@Ì*AÏ*BÎ*CÏ*D0*E**F.*G(*H4*I6*J9*K=*L;*MC*NG*OE*PÑ*QÓ*RÒ*SÖ*TÔ*UÑ*VP*WL*XÕ*YT*ZX*[V*\Z*]\*^`*_^*`d*ab*bÚ*cÙ*dÜ*eÛ*fl*gÓ*hp*ij*jr*kn*lh*m×*nÛ*oÙ*pÕ*qt*rÝ*sx*tv*uy*v}*w{+!á+"à+#ä+$â+%+&Î+'+(+)å+*ã+++, +- +.ç+/ +0+1é+2è+3ë+4ê+5+6+7+8+9õ+:+;+=!+>%+?í+@ì+Aï+Bî+CÐ+E++F/+G)+H5+I7+J:+K>+L<+MD+NH+OF+Pñ+Qó+Rò+Sö+Tô+UÒ+VQ+WM+Xõ+YU+ZY+[W+\[+]]+^a+__+`e+ac+bú+cù+dü+eû+fm+gÔ+hq+ik+js+ko+li+mØ+nÜ+oÚ+pÖ+qu+rý+sÿ+tw+uz+v~+w|0!N0"N0#N0$N 0%N0&N0'N#0(N$0)N(0*N+0+N.0,N/0-N00.N50/N@00NA01ND02NG03NQ04NZ05N\06Nc07Nh08Ni09Nt0:Nu0;Ny0N–0?N—0@N0AN¯0BN¹0CNÃ0DNÐ0ENÚ0FNÛ0GNà0HNá0INâ0JNè0KNï0LNñ0MNó0NNõ0ONý0PNþ0QNÿ0RO0SO0TO0UO0VO 0WO 0XO0YO0ZO0[O0\O0]O.0^O10_O`0`O30aO50bO70cO90dO;0eO>0fO@0gOB0hOH0iOI0jOK0kOL0lOR0mOT0nOV0oOX0pO_0qOc0rOj0sOl0tOn0uOq0vOw0wOx0xOy0yOz0zO}0{O~0|O0}O‚0~O„1!O…1"O‰1#OŠ1$OŒ1%OŽ1&O1'O’1(O“1)O”1*O—1+O™1,Oš1-Ož1.OŸ1/O²10O·11O¹12O»13O¼14O½15O¾16OÀ17OÁ18OÅ19OÆ1:OÈ1;OÉ1OÍ1?OÏ1@OÒ1AOÜ1BOà1COâ1DOð1EOò1FOü1GOý1HOÿ1IP1JP1KP1LP1MP 1NP 1OP1PP1QP1RP1SP1TP1UP1VP1WP1XP"1YP'1ZP.1[P01\P21]P31^P51_P@1`PA1aPB1bPE1cPF1dPJ1ePL1fPN1gPQ1hPR1iPS1jPW1kPY1lP_1mP`1nPb1oPc1pPf1qPg1rPj1sPm1tPp1uPq1vP;1wP1xPƒ1yP„1zP†1{PŠ1|PŽ1}P1~P2!P’2"P“2#P”2$P–2%P›2&Pœ2'Pž2(PŸ2)P 2*P¡2+P¢2,Pª2-P¯2.P°2/P¹20Pº21P½22PÀ23PÃ24PÄ25PÇ26PÌ27PÎ28PÐ29PÓ2:PÔ2;PØ2Pß2?Pâ2@Pä2APæ2BPè2CPé2DPï2EPñ2FPö2GPú2HPþ2IQ2JQ2KQ2LQ2MQ 2NQ 2OQ 2PQ2QPò2RQ2SQ2TQ2UQ2VQ2WQ2XQ2YQ#2ZQ'2[Q(2\Q,2]Q-2^Q/2_Q12`Q32aQ42bQ52cQ82dQ92eQB2fQJ2gQO2hQS2iQU2jQW2kQX2lQ_2mQd2nQf2oQ~2pQƒ2qQ„2rQ‹2sQŽ2tQ˜2uQ2vQ¡2wQ£2xQ­2yQ¸2zQº2{Q¼2|Q¾2}Q¿2~QÂ3!QÈ3"QÏ3#QÑ3$QÒ3%QÓ3&QÕ3'QØ3(QÞ3)Qâ3*Qå3+Qî3,Qò3-Qó3.Qô3/Q÷30R31R32R33R34R35R36R37R38R"39R(3:R13;R23RE3?RI3@RU3ARW3BRX3CRZ3DR\3ER_3FR`3GRa3HRf3IRn3JRw3KRx3LRy3MR€3NR‚3OR…3PRŠ3QRŒ3RR“3SR•3TR–3UR—3VR˜3WRš3XRœ3YR¤3ZR¥3[R¦3\R§3]R¯3^R°3_R¶3`R·3aR¸3bRº3cR»3dR½3eRÀ3fRÄ3gRÆ3hRÈ3iRÌ3jRÏ3kRÑ3lRÔ3mRÖ3nRÛ3oRÜ3pRá3qRå3rRè3sRé3tRê3uRì3vRð3wRñ3xRô3yRö3zR÷3{S3|S3}S 3~S 4!S 4"S4#S4$S4%S4&S4'S4(S4)S%4*S'4+S(4,S)4-S+4.S,4/S-40S041S242S543S<44S=45S>46SB47SL48SK49SY4:S[4;Sa4Sl4?Sm4@Sr4ASy4BS~4CSƒ4DS‡4ESˆ4FSŽ4GS“4HS”4IS™4JS4KS¡4LS¤4MSª4NS«4OS¯4PS²4QS´4RSµ4SS·4TS¸4USº4VS½4WSÀ4XSÅ4YSÏ4ZSÒ4[SÓ4\SÕ4]SÚ4^SÝ4_SÞ4`Sà4aSæ4bSç4cSõ4dT4eT4fT4gT!4hT'4iT(4jT*4kT/4lT14mT44nT54oTC4pTD4qTG4rTM4sTO4tT^4uTb4vTd4wTf4xTg4yTi4zTk4{Tm4|Tn4}Tt4~T5!T5"Tƒ5#T…5$Tˆ5%T‰5&T5'T‘5(T•5)T–5*Tœ5+TŸ5,T¡5-T¦5.T§5/T©50Tª51T­52T®53T±54T·55T¹56Tº57T»58T¿59TÆ5:TÊ5;TÍ5Tê5?Tì5@Tï5ATö5BTü5CTþ5DTÿ5EU5FU5GU5HU5IU 5JU 5KU 5LU5MU5NU*5OU+5PU25QU55RU65SU;5TU<5UU=5VUA5WUG5XUI5YUJ5ZUM5[UP5\UQ5]UX5^UZ5_U[5`U^5aU`5bUa5cUd5dUf5eU5fU5gU‚5hU†5iUˆ5jUŽ5kU5lU‘5mU’5nU“5oU”5pU—5qU£5rU¤5sU­5tU²5uU¿5vUÁ5wUÃ5xUÆ5yUÉ5zUË5{UÌ5|UÎ5}UÑ5~UÒ6!UÓ6"U×6#UØ6$UÛ6%UÞ6&Uâ6'Ué6(Uö6)Uÿ6*V6+V6,V 6-V 6.V6/V60V61V62V63V64V,65V066V367V568V769V96:V;6;V<6V@6?VA6@VC6AVD6BVF6CVI6DVK6EVM6FVO6GVT6HV^6IV`6JVa6KVb6LVc6MVf6NVi6OVm6PVo6QVq6RVr6SVu6TV„6UV…6VVˆ6WV‹6XVŒ6YV•6ZV™6[Vš6\V6]Vž6^VŸ6_V¦6`V§6aV¨6bV©6cV«6dV¬6eV­6fV±6gV³6hV·6iV¾6jVÅ6kVÉ6lVÊ6mVË6nVÏ6oVÐ6pVÌ6qVÍ6rVÙ6sVÜ6tVÝ6uVß6vVá6wVä6xVå6yVæ6zVç6{Vè6|Vñ6}Vë6~Ví7!Vö7"V÷7#W7$W7%W7&W 7'W 7(W7)W7*W7+W7,W7-W 7.W"7/W#70W$71W%72W)73W*74W,75W.76W/77W378W479W=7:W>7;W?7WL7?WM7@WR7AWb7BWe7CWg7DWh7EWk7FWm7GWn7HWo7IWp7JWq7KWs7LWt7MWu7NWw7OWy7PWz7QW{7RW|7SW~7TW7UWƒ7VWŒ7WW”7XW—7YW™7ZWš7[Wœ7\W7]Wž7^WŸ7_W¡7`W•7aW§7bW¨7cW©7dW¬7eW¸7fW½7gWÇ7hWÈ7iWÌ7jWÏ7kWÕ7lWÝ7mWÞ7nWä7oWæ7pWç7qWé7rWí7sWð7tWõ7uWö7vWø7wWý7xWþ7yWÿ7zX7{X7|X7}X 7~Wá8!X 8"X 8#X8$X8%X8&X 8'X&8(X'8)X-8*X28+X98,X?8-XI8.XL8/XM80XO81XP82XU83X_84Xa85Xd86Xg87Xh88Xx89X|8:X8;X€8Xˆ8?X‰8@XŠ8AXŒ8BX8CX8DX8EX”8FX–8GX8HX 8IX¡8JX¢8KX¦8LX©8MX±8NX²8OXÄ8PX¼8QXÂ8RXÈ8SXÍ8TXÎ8UXÐ8VXÒ8WXÔ8XXÖ8YXÚ8ZXÝ8[Xá8\Xâ8]Xé8^Xó8_Y8`Y8aY 8bY 8cY8dY8eY8f†A8gY8hY!8iY#8jY$8kY(8lY/8mY08nY38oY58pY68qY?8rYC8sYF8tYR8uYS8vYY8wY[8xY]8yY^8zY_8{Ya8|Yc8}Yk8~Ym9!Yo9"Yr9#Yu9$Yv9%Yy9&Y{9'Y|9(Y‹9)YŒ9*YŽ9+Y’9,Y•9-Y—9.YŸ9/Y¤90Y§91Y­92Y®93Y¯94Y°95Y³96Y·97Yº98Y¼99YÁ9:YÃ9;YÄ9YÍ9?YÒ9@YÝ9AYÞ9BYß9CYã9DYä9EYç9FYî9GYï9HYñ9IYò9JYô9KY÷9LZ9MZ9NZ 9OZ 9PZ9QZ9RZ9SZ9TZ#9UZ$9VZ'9WZ(9XZ*9YZ-9ZZ09[ZD9\ZE9]ZG9^ZH9_ZL9`ZP9aZU9bZ^9cZc9dZe9eZg9fZm9gZw9hZz9iZ{9jZ~9kZ‹9lZ9mZ“9nZ–9oZ™9pZœ9qZž9rZŸ9sZ 9tZ¢9uZ§9vZ¬9wZ±9xZ²9yZ³9zZµ9{Z¸9|Zº9}Z»9~Z¿:!ZÄ:"ZÆ:#ZÈ:$ZÏ:%ZÚ:&ZÜ:'Zà:(Zå:)Zê:*Zî:+Zõ:,Zö:-Zý:.[:/[:0[:1[:2[4:3[:4[:5[:6[!:7[%:8[-:9[8::[A:;[K:<[L:=[R:>[V:?[^:@[h:A[n:B[o:C[|:D[}:E[~:F[:G[:H[„:I[†:J[Š:K[Ž:L[:M[‘:N[“:O[”:P[–:Q[¨:R[©:S[¬:T[­:U[¯:V[±:W[²:X[·:Y[º:Z[¼:[[À:\[Á:][Í:^[Ï:_[Ö:`[×:a[Ø:b[Ù:c[Ú:d[à:e[ï:f[ñ:g[ô:h[ý:i\ :j\:k\:l\:m\#:n\&:o\):p\+:q\,:r\.:s\0:t\2:u\5:v\6:w\Y:x\Z:y\\:z\b:{\c:|\g:}\h:~\i;!\m;"\p;#\t;$\u;%\z;&\{;'\|;(\};)\‡;*\ˆ;+\Š;,\;-\’;.\;/\Ÿ;0\ ;1\¢;2\£;3\¦;4\ª;5\²;6\´;7\µ;8\º;9\É;:\Ë;;\Ò;<\Ý;=\×;>\î;?\ñ;@\ò;A\ô;B];C];D] ;E];F]+;G]#;H]$;I]&;J]';K]1;L]4;M]9;N]=;O]?;P]B;Q]C;R]F;S]H;T]U;U]Q;V]Y;W]J;X]_;Y]`;Z]a;[]b;\]d;]]j;^]m;_]p;`]y;a]z;b]~;c];d];e]ƒ;f]ˆ;g]Š;h]’;i]“;j]”;k]•;l]™;m]›;n]Ÿ;o] ;p]§;q]«;r]°;s]´;t]¸;u]¹;v]Ã;w]Ç;x]Ë;y]Ð;z]Î;{]Ø;|]Ù;}]à;~]ä<2^K<3^P<4^I<5^Q<6^V<7^X<8^[<9^\<:^^<;^h<<^j<=^k<>^l_Ñ=?_Ò=@_Ó=A_Ô=B_Þ=C_á=D_â=E_è=F_é=G_ê=H_ì=I_í=J_î=K_ï=L_ò=M_ó=N_ö=O_ú=P_ü=Q`=R` =S` =T`=U`=V`=W`=X`=Y`=Z`$=[`-=\`3=]`5=^`@=_`G=``H=a`I=b`L=c`Q=d`T=e`V=f`W=g`]=h`a=i`g=j`q=k`~=l`=m`‚=n`†=o`ˆ=p`Š=q`Ž=r`‘=s`“=t`•=u`˜=v`=w`ž=x`¢=y`¤=z`¥={`¨=|`°=}`±=~`·>!`»>"`¾>#`Â>$`Ä>%`È>&`É>'`Ê>(`Ë>)`Î>*`Ï>+`Ô>,`Õ>-`Ù>.`Û>/`Ý>0`Þ>1`â>2`å>3`ò>4`õ>5`ø>6`ü>7`ý>8a>9a>:a >;a >=a>>a>?a>@a>Aa>Ba>Ca>Da>Ea>Fa">Ga*>Ha+>Ia0>Ja1>Ka5>La6>Ma7>Na9>OaA>PaE>QaF>RaI>Sa^>Ta`>Ual>Var>Wax>Xa{>Ya|>Za>[a€>\a>]aƒ>^a„>_a‹>`a>aa’>ba“>ca—>da˜>eaœ>fa>gaŸ>ha >ia¥>ja¨>kaª>la­>ma¸>na¹>oa¼>paÀ>qaÁ>raÂ>saÎ>taÏ>uaÕ>vaÜ>waÝ>xaÞ>yaß>zaá>{aâ>|aç>}aé>~aå?!aì?"aí?#aï?$b?%b?&b?'b?(b?)b?*b?+b ?,b"?-b#?.b'?/b)?0b+?1b9?2b=?3bB?4bC?5bD?6bF?7bL?8bP?9bQ?:bR?;bT?b\??bd?@bm?Abo?Bbs?Cbz?Db}?Eb?FbŽ?Gb?Hb?Ib¦?Jb¨?Kb³?Lb¶?Mb·?Nbº?Ob¾?Pb¿?QbÄ?RbÎ?SbÕ?TbÖ?UbÚ?Vbê?Wbò?Xbô?Ybü?Zbý?[c?\c?]c ?^c ?_c ?`c?ac?bc?cc?dc)?ec*?fc-?gc5?hc6?ic9?jccà@?cå@@cê@Acì@Bcò@Ccó@Dcõ@Ecø@Fcù@Gd @Hd @Id@Jd@Kd@Ld@Md@Nd @Od"@Pd$@Qd%@Rd)@Sd*@Td/@Ud0@Vd5@Wd=@Xd?@YdK@ZdO@[dQ@\dR@]dS@^dT@_dZ@`d[@ad\@bd]@cd_@dd`@eda@fdc@gdm@hds@idt@jd{@kd}@ld…@md‡@nd@od@pd‘@qd˜@rd™@sd›@td@udŸ@vd¡@wd£@xd¦@yd¨@zd¬@{d³@|d½@}d¾@~d¿A!dÄA"dÉA#dÊA$dËA%dÌA&dÎA'dÐA(dÑA)dÕA*d×A+däA,dåA-déA.dêA/díA0dðA1dõA2d÷A3dûA4dÿA5eA6eA7eA8e A9e A:eA;eAeA?eA@eAAeABe"ACe&ADe)AEe.AFe1AGe:AHefaB?fûB@fjBAfkBBflBCf~BDfsBEfuBFfBGfwBHfxBIfyBJf{BKf€BLf|BMf‹BNfŒBOfBPfBQf’BRf™BSfšBTf›BUfœBVfŸBWf BXf¤BYf­BZf±B[f²B\fµB]f»B^f¿B_fÀB`fÂBafÃBbfÈBcfÌBdfÎBefÏBffÔBgfÛBhfßBifèBjfëBkfìBlfîBmfúBngBogBpgBqgBrgBsgBtg Bug"Bvg3Bwg>BxgEBygGBzgHB{gLB|gTB}gUB~g]C!gfC"glC#gnC$gtC%gvC&g{C'gC(g„C)gŽC*gC+g‘C,g“C-g–C.g˜C/g™C0g›C1g°C2g±C3g²C4gµC5g»C6g¼C7g½C8gùC9gÀC:gÂC;gÃCgÉC?gÒC@g×CAgÙCBgÜCCgáCDgæCEgðCFgòCGgöCHg÷CIhRCJhCKhCLhCMhCNh(COh'CPh,CQh-CRh/CSh0CTh1CUh3CVh;CWh?CXhDCYhECZhJC[hLC\hUC]hWC^hXC_h[C`hkCahnCbhoCchpCdhqCehrCfhuCghyChhzCih{Cjh|Ckh‚Clh„Cmh†CnhˆCoh–Cph˜CqhšCrhœCsh¡Cth£Cuh¥Cvh©CwhªCxh®Cyh²Czh»C{hÅC|hÈC}hÌC~hÏD!hÐD"hÑD#hÓD$hÖD%hÙD&hÜD'hÝD(håD)hèD*hêD+hëD,hìD-híD.hðD/hñD0hõD1höD2hûD3hüD4hýD5iD6i D7i D8iD9iD:iD;iDi3D?i5D@i8DAi;DBiBDCiEDDiIDEiNDFiWDGi[DHicDIidDJieDKifDLihDMiiDNilDOipDPiqDQirDRizDSi{DTiDUi€DViDWi’DXi–DYi˜DZi¡D[i¥D\i¦D]i¨D^i«D_i­D`i¯Dai·Dbi¸DciºDdi¼DeiÅDfiÈDgiÑDhiÖDii×DjiâDkiåDliîDmiïDniñDoióDpiõDqiþDrjDsjDtjDujDvjDwjDxjDyjDzj D{j$D|j(D}j0D~j2E!j4E"j7E#j;E$j>E%j?E&jEE'jFE(jIE)jJE*jNE+jPE,jQE-jRE.jUE/jVE0j[E1jdE2jgE3jjE4jqE5jsE6j~E7jE8jƒE9j†E:j‡E;j‰Ej›E?jE@jžEAjŸEBj¥ECj«EDj¯EEj°EFj±EGj´EHj½EIj¾EJj¿EKjÆELjÉEMjÈENjÌEOjÐEPjÔEQjÕERjÖESjÜETjÝEUjäEVjçEWjìEXjðEYjñEZjòE[jüE\jýE]kE^kE_kE`kEak EbkEckEdkEekEfkEgkEhk$Eik(Ejk+Ekk,Elk/Emk5Enk6Eok;Epk?EqkFErkJEskMEtkREukVEvkXEwk]Exk`EykgEzkkE{knE|kpE}kuE~k}F!k~F"k‚F#k…F$k—F%k›F&kŸF'k F(k¢F)k£F*k¨F+k©F,k¬F-k­F.k®F/k°F0k¸F1k¹F2k½F3k¾F4kÃF5kÄF6kÉF7kÌF8kÖF9kÚF:káF;kãFkîF?kñF@k÷FAkùFBkÿFClFDlFElFFl FGl FHlFIlFJlFKlFLlFMl&FNl'FOl(FPl,FQl.FRl3FSl5FTl6FUl:FVl;FWl?FXlJFYlKFZlMF[lOF\lRF]lTF^lYF_l[F`l\FalkFblmFcloFdltFelvFflxFglyFhl{Fil…Fjl†Fkl‡Fll‰Fml”Fnl•Fol—Fpl˜FqlœFrlŸFsl°Ftl²Ful´FvlÂFwlÆFxlÍFylÏFzlÐF{lÑF|lÒF}lÔF~lÖG!lÚG"lÜG#làG$lçG%léG&lëG'lìG(lîG)lòG*lôG+mG,mG-m G.mG/mG0mG1mG2mG3m&G4m'G5m(G6lgG7m.G8m/G9m1G:m9G;mm^G?m_G@maGAmeGBmgGCmoGDmpGEm|GFm‚GGm‡GHm‘GIm’GJm”GKm–GLm—GMm˜GNmªGOm¬GPm´GQm·GRm¹GSm½GTm¿GUmÄGVmÈGWmÊGXmÎGYmÏGZmÖG[mÛG\mÝG]mßG^màG_mâG`måGaméGbmïGcmðGdmôGemöGfmüGgnGhnGinGjn"Gkn'Gln2Gmn6Gnn9Gon;GpnnùH?nûH@nýHAoHBoHCo HDo HEo HFoHGoHHoHIoHJo&HKo)HLo*HMo/HNo0HOo3HPo6HQo;HRopUI?p]I@p^IApNIBpdICpeIDplIEpnIFpuIGpvIHp~IIpIJp…IKp†ILp”IMp•INp–IOp—IPp˜IQp›IRp¤ISp«ITp°IUp±IVp´IWp·IXpÊIYpÑIZpÓI[pÔI\pÕI]pÖI^pØI_pÜI`päIapúIbqIcqIdqIeqIfqIgq Ihq IiqIjqIkq Ilq+Imq-Inq/Ioq0Ipq1Iqq8IrqAIsqEItqFIuqGIvqJIwqKIxqPIyqRIzqWI{qZI|q\I}q^I~q`J!qhJ"qyJ#q€J$q…J%q‡J&qŒJ'q’J(qšJ)q›J*q J+q¢J,q¯J-q°J.q²J/q³J0qºJ1q¿J2qÀJ3qÁJ4qÄJ5qËJ6qÌJ7qÓJ8qÖJ9qÙJ:qÚJ;qÜJrJ?rJ@rJAr JBrJCrJDrJErJFrJGr$JHr+JIr/JJr4JKr8JLr9JMrAJNrBJOrCJPrEJQrNJRrOJSrPJTrSJUrUJVrVJWrZJXr\JYr^JZr`J[rcJ\rhJ]rkJ^rnJ_roJ`rqJarwJbrxJcr{Jdr|JerJfr„Jgr‰JhrJirŽJjr“Jkr›Jlr¨Jmr­Jnr®Jor±Jpr´Jqr¾JrrÁJsrÇJtrÉJurÌJvrÕJwrÖJxrØJyrßJzråJ{róJ|rôJ}rúJ~rûK!rþK"sK#sK$sK%sK&s K's K(sK)sK*sK+sK,sK-s"K.s$K/s'K0s(K1s,K2s1K3s2K4s5K5s:K6s;K7s=K8sCK9sMK:sPK;sRKs]K?s^K@s_KAs`KBsfKCsgKDsiKEskKFslKGsnKHsoKIsqKJswKKsyKLs|KMs€KNsKOsƒKPs…KQs†KRsŽKSsKTs“KUs•KVs—KWs˜KXsœKYsžKZsŸK[s K\s¢K]s¥K^s¦K_sªK`s«Kas­KbsµKcs·Kds¹Kes¼Kfs½Kgs¿KhsÅKisÆKjsÉKksËKlsÌKmsÏKnsÒKosÓKpsÖKqsÙKrsÝKssáKtsãKusæKvsçKwséKxsôKysõKzs÷K{sùK|súK}sûK~sýL!sÿL"tL#tL$tL%tL&t L'tL(tL)tL*t$L+t&L,t(L-t)L.t*L/t+L0t,L1t-L2t.L3t/L4t0L5t1L6t9L7t@L8tCL9tDL:tFL;tGLtQL?tRL@tWLAt]LBtbLCtfLDtgLEthLFtkLGtmLHtnLItqLJtrLKt€LLtLMt…LNt†LOt‡LPt‰LQtLRtLSt‘LTt’LUt˜LVt™LWtšLXtœLYtŸLZt L[t¡L\t£L]t¦L^t¨L_t©L`tªLat«Lbt®Lct¯Ldt±Let²LftµLgt¹Lht»Lit¿LjtÈLktÉLltÌLmtÐLntÓLotØLptÚLqtÛLrtÞLstßLttäLutèLvtêLwtëLxtïLytôLztúL{tûL|tüL}tÿL~uM!uM"uM#uM$u M%u!M&u$M'u'M(u)M)u*M*u/M+u6M,u9M-u=M.u>M/u?M0u@M1uCM2uGM3uHM4uNM5uPM6uRM7uWM8u^M9u_M:uaM;uoMuzM?u{M@u|MAu}MBu~MCuMDu…MEuMFu’MGu“MHu•MIu™MJuœMKu¢MLu¤MMu´MNuºMOu¿MPuÀMQuÁMRuÄMSuÆMTuÌMUuÎMVuÏMWu×MXuÜMYußMZuàM[uáM\uäM]uçM^uìM_uîM`uïMauñMbuùMcvMdvMevMfvMgvMhvMiv Mjv MkvMlvMmvMnvMovMpvMqvMrvMsvMtvMuv#Mvv%Mwv&Mxv)Myv-Mzv2M{v3M|v5M}v8M~v9N!v:N"vv N?v¢N@v£NAv¤NBv¥NCv¦NDv§NEv¨NFvªNGv­NHv½NIvÁNJvÅNKvÉNLvËNMvÌNNvÎNOvÔNPvÙNQvàNRvæNSvèNTvìNUvðNVvñNWvöNXvùNYvüNZwN[wN\w N]wN^wN_wN`wNawNbwNcwNdwNew"Nfw(Ngw-Nhw.Niw/Njw4Nkw5Nlw6Nmw9Nnw=Now>NpwBNqwENrwFNswJNtwMNuwNNvwONwwRNxwVNywWNzw\N{w^N|w_N}w`N~wbO!wdO"wgO#wjO$wlO%wpO&wrO'wsO(wtO)wzO*w}O+w€O,w„O-wŒO.wO/w”O0w•O1w–O2wšO3wŸO4w¢O5w§O6wªO7w®O8w¯O9w±O:wµO;w¾OwÑO?wÒO@wÕOAwÙOBwÞOCwßODwàOEwäOFwæOGwêOHwìOIwðOJwñOKwôOLwøOMwûONxOOxOPx OQx ORxOSxOTxOUx!OVx"OWx#OXx-OYx.OZx0O[x5O\x7O]xCO^xDO_xGO`xHOaxLObxNOcxROdx\Oex^Ofx`OgxaOhxcOixdOjxhOkxjOlxnOmxzOnx~OoxŠOpxOqx”Orx˜Osx¡OtxOuxžOvxŸOwx¤Oxx¨Oyx¬Ozx­O{x°O|x±O}x²O~x³P!x»P"x½P#x¿P$xÇP%xÈP&xÉP'xÌP(xÎP)xÒP*xÓP+xÕP,xÖP-xäP.xÛP/xßP0xàP1xáP2xæP3xêP4xòP5xóP6yP7xöP8x÷P9xúP:xûP;xÿPyP?yP@yPAyPByPCy PDy%PEy'PFy)PGy-PHy1PIy4PJy5PKy;PLy=PMy?PNyDPOyEPPyFPQyJPRyKPSyOPTyQPUyTPVyXPWy[PXy\PYygPZyiP[ykP\yrP]yyP^y{P_y|P`y~Pay‹PbyŒPcy‘Pdy“Pey”Pfy•Pgy–Phy˜Piy›PjyœPky¡Ply¨Pmy©Pny«Poy¯Ppy±Pqy´Pry¸Psy»PtyÂPuyÄPvyÇPwyÈPxyÊPyyÏPzyÔP{yÖP|yÚP}yÝP~yÞQ!yàQ"yâQ#yåQ$yêQ%yëQ&yíQ'yñQ(yøQ)yüQ*zQ+zQ,zQ-z Q.z Q/z Q0zQ1zQ2zQ3zQ4z!Q5z'Q6z+Q7z-Q8z/Q9z0Q:z4Q;z5Qz:Q?zDQ@zEQAzGQBzHQCzLQDzUQEzVQFzYQGz\QHz]QIz_QJz`QKzeQLzgQMzjQNzmQOzuQPzxQQz~QRz€QSz‚QTz…QUz†QVzŠQWz‹QXzQYz‘QZz”Q[zžQ\z Q]z£Q^z¬Q_z³Q`zµQaz¹Qbz»Qcz¼QdzÆQezÉQfzÌQgzÎQhzÑQizÛQjzèQkzéQlzëQmzìQnzñQozôQpzûQqzýQrzþQs{Qt{Qu{Qv{#Qw{'Qx{)Qy{*Qz{+Q{{-Q|{.Q}{/Q~{0R!{1R"{4R#{=R${?R%{@R&{AR'{GR({NR){UR*{`R+{dR,{fR-{iR.{jR/{mR0{oR1{rR2{sR3{wR4{„R5{‰R6{ŽR7{R8{‘R9{–R:{›R;{žR<{ R={¥R>{¬R?{¯R@{°RA{²RB{µRC{¶RD{ºRE{»RF{¼RG{½RH{ÂRI{ÅRJ{ÈRK{ÊRL{ÔRM{ÖRN{×RO{ÙRP{ÚRQ{ÛRR{èRS{êRT{òRU{ôRV{õRW{øRX{ùRY{úRZ{üR[{þR\|R]|R^|R_|R`|Ra| Rb| Rc| Rd|Re|Rf|Rg|Rh| Ri|%Rj|&Rk|(Rl|,Rm|1Rn|3Ro|4Rp|6Rq|9Rr|:Rs|FRt|JRu|URv|QRw|RRx|SRy|YRz|ZR{|[R||\R}|]R~|^S!|aS"|cS#|gS$|iS%|mS&|nS'|pS(|rS)|yS*||S+|}S,|†S-|‡S.|S/|”S0|žS1| S2|¦S3|°S4|¶S5|·S6|ºS7|»S8|¼S9|¿S:|ÄS;|ÇS<|ÈS=|ÉS>|ÍS?|ÏS@|ÓSA|ÔSB|ÕSC|×SD|ÙSE|ÚSF|ÝSG|æSH|éSI|ëSJ|õSK}SL}SM}SN} SO}SP}SQ}SR}SS}ST}SU}SV}#SW}&SX}*SY}-SZ}1S[}S^}@S_}AS`}GSa}HSb}MSc}QSd}SSe}WSf}YSg}ZSh}\Si}]Sj}eSk}gSl}jSm}pSn}xSo}zSp}{Sq}Sr}Ss}‚St}ƒSu}…Sv}†Sw}ˆSx}‹Sy}ŒSz}S{}‘S|}–S}}—S~}T!}žT"}¦T#}§T$}ªT%}³T&}¶T'}·T(}¹T)}ÂT*}ÃT+}ÄT,}ÅT-}ÆT.}ÌT/}ÍT0}ÎT1}×T2}ÙT3~T4}âT5}åT6}æT7}êT8}ëT9}íT:}ñT;}õT<}öT=}ùT>}úT?~T@~TA~TB~TC~TD~TE~TF~ TG~'TH~(TI~,TJ~-TK~/TL~3TM~6TN~?TO~DTP~ETQ~GTR~NTS~PTT~RTU~XTV~_TW~aTX~bTY~eTZ~kT[~nT\~oT]~sT^~xT_~~T`~Ta~†Tb~‡Tc~ŠTd~Te~‘Tf~•Tg~˜Th~šTi~Tj~žTkTo?TpCTqDTrGTsOTtRTuSTv[Tw\Tx]TyaTzcT{dT|eT}fT~mU!qU"}U#~U$U%€U&‹U'U(U)U*‘U+–U,—U-œU.¡U/¢U0¦U1ªU2­U3´U4¼U5¿U6ÀU7ÃU8ÈU9ÎU:ÏU;ÛU<ßU=ãU>åU?èU@ìUAîUBïUCòUDúUEýUFþUGÿUH€UI€UJ€ UK€ UL€UM€UN€UO€UP€UQ€UR€US€UT€UU€ UV€$UW€&UX€,UY€.UZ€0U[€4U\€5U]€7U^€9U_€:U`€Ub€@Uc€DUd€`Ue€dUf€fUg€mUh€qUi€uUj€Uk€ˆUl€ŽUm€œUn€žUo€¦Up€§Uq€«Ur€¸Us€¹Ut€ÈUu€ÍUv€ÏUw€ÒUx€ÔUy€ÕUz€×U{€ØU|€àU}€íU~€îV!€ðV"€òV#€óV$€öV%€ùV&€úV'€þV(V) V*V+V,V-V.V/ V0$V1'V2,V30V45V5:V6aV?gV@hVAiVBmVCoVDwVEVFVG„VH…VI†VJ‹VKŽVL–VM˜VN›VOžVP¢VQ®VR²VS´VT»VUËVVÃVWÅVXÊVYÎVZÏV[ÕV\×V]ÛV^ÝV_ÞV`áVaäVbëVcìVdðVeñVfòVgõVhöViøVjùVkýVlÿVm‚Vn‚Vo‚Vp‚Vq‚Vr‚Vs‚Vt‚Vu‚!Vv‚"Vw‚(Vx‚2Vy‚4Vz‚:V{‚CV|‚DV}‚EV~‚FW!‚KW"‚NW#‚OW$‚QW%‚VW&‚\W'‚`W(‚cW)‚gW*‚mW+‚tW,‚{W-‚}W.‚W/‚€W0‚W1‚ƒW2‚„W3‚‡W4‚‰W5‚ŠW6‚ŽW7‚‘W8‚”W9‚–W:‚˜W;‚šW<‚›W=‚ W>‚¡W?‚£W@‚¤WA‚§WB‚¨WC‚©WD‚ªWE‚®WF‚°WG‚²WH‚´WI‚·WJ‚ºWK‚¼WL‚¾WM‚¿WN‚ÆWO‚ÐWP‚ÕWQ‚ÚWR‚àWS‚âWT‚äWU‚èWV‚êWW‚íWX‚ïWY‚öWZ‚÷W[‚ýW\‚þW]ƒW^ƒW_ƒW`ƒWaƒ Wbƒ WcƒTWdƒWeƒWfƒWgƒWhƒ!Wiƒ"Wjƒ,Wkƒ-Wlƒ.Wmƒ0Wnƒ3Woƒ7Wpƒ:WqƒƒSX?ƒèX@ƒêXAƒöXBƒøXCƒùXDƒüXE„XF„XG„ XH„XI„XJ„XK„XLƒ­XM„/XN„9XO„EXP„GXQ„HXR„JXS„MXT„OXU„QXV„RXW„VXX„XXY„YXZ„ZX[„\X\„`X]„dX^„eX_„gX`„jXa„pXb„sXc„tXd„vXe„xXf„|Xg„}Xh„Xi„…Xj„’Xk„“Xl„•Xm„žXn„¦Xo„¨Xp„©Xq„ªXr„¯Xs„±Xt„´Xu„ºXv„½Xw„¾Xx„ÀXy„ÂXz„ÇX{„ÈX|„ÌX}„ÏX~„ÓY!„ÜY"„çY#„êY$„ïY%„ðY&„ñY'„òY(„÷Y)…2Y*„úY+„ûY,„ýY-…Y.…Y/…Y0… Y1…Y2…Y3…Y4…Y5…"Y6…#Y7…$Y8…%Y9…'Y:…*Y;…+Y<…/Y=…3Y>…4Y?…6Y@…?YA…FYB…OYC…PYD…QYE…RYF…SYG…VYH…YYI…\YJ…]YK…^YL…_YM…`YN…aYO…bYP…dYQ…kYR…oYS…yYT…zYU…{YV…}YW…YX…YY……YZ…†Y[…‰Y\…‹Y]…ŒY^…Y_…“Y`…˜Ya…Yb…ŸYc… Yd…¢Ye…¥Yf…§Yg…´Yh…¶Yi…·Yj…¸Yk…¼Yl…½Ym…¾Yn…¿Yo…ÂYp…ÇYq…ÊYr…ËYs…ÎYt…­Yu…ØYv…ÚYw…ßYx…àYy…æYz…èY{…íY|…óY}…öY~…üZ!…ÿZ"†Z#†Z$†Z%† Z&†Z'†Z(†Z)†Z*†Z+†Z,†Z-†Z.†!Z/†'Z0†)Z1†6Z2†8Z3†:Z4††YZ?†]Z@†`ZA†aZB†bZC†cZD†dZE†iZF†lZG†oZH†uZI†vZJ†wZK†zZL†ZM†‘ZN†–ZO†˜ZP†šZQ†œZR†¡ZS†¦ZT†§ZU†¨ZV†­ZW†±ZX†³ZY†´ZZ†µZ[†·Z\†¸Z]†¹Z^†¿Z_†ÀZ`†ÁZa†ÃZb†ÅZc†ÑZd†ÒZe†ÕZf†×Zg†ÚZh†ÜZi†àZj†ãZk†åZl†çZm†ˆZn†úZo†üZp†ýZq‡Zr‡Zs‡Zt‡ Zu‡Zv‡Zw‡Zx‡Zy‡Zz‡Z{‡Z|‡Z}‡!Z~‡#[!‡(["‡.[#‡/[$‡1[%‡2[&‡9['‡:[(‡<[)‡=[*‡>[+‡@[,‡C[-‡E[.‡M[/‡X[0‡][1‡a[2‡d[3‡e[4‡o[5‡q[6‡r[7‡{[8‡ƒ[9‡„[:‡…[;‡†[<‡‡[=‡ˆ[>‡‰[?‡‹[@‡Œ[A‡[B‡“[C‡•[D‡—[E‡˜[F‡™[G‡ž[H‡ [I‡£[J‡§[K‡¬[L‡­[M‡®[N‡±[O‡µ[P‡¾[Q‡¿[R‡Á[S‡È[T‡É[U‡Ê[V‡Î[W‡Õ[X‡Ö[Y‡Ù[Z‡Ú[[‡Ü[\‡ß[]‡â[^‡ã[_‡ä[`‡ê[a‡ë[b‡í[c‡ñ[d‡ó[e‡ø[f‡ú[g‡ÿ[hˆ[iˆ[jˆ[kˆ [lˆ [mˆ [nˆ[oˆ[pˆ[qˆ[rˆ[sˆ[tˆ[uˆˆ[wˆ[xˆ[yˆ([zˆ-[{ˆ.[|ˆ0[}ˆ2[~ˆ5\!ˆ:\"ˆ<\#ˆA\$ˆC\%ˆE\&ˆH\'ˆI\(ˆJ\)ˆK\*ˆN\+ˆQ\,ˆU\-ˆV\.ˆX\/ˆZ\0ˆ\\1ˆ_\2ˆ`\3ˆd\4ˆi\5ˆq\6ˆy\7ˆ{\8ˆ€\9ˆ˜\:ˆš\;ˆ›\<ˆœ\=ˆŸ\>ˆ \?ˆ¨\@ˆª\Aˆº\Bˆ½\Cˆ¾\DˆÀ\EˆÊ\FˆË\GˆÌ\HˆÍ\IˆÎ\JˆÑ\KˆÒ\LˆÓ\MˆÛ\NˆÞ\Oˆç\Pˆï\Qˆð\Rˆñ\Sˆõ\Tˆ÷\U‰\V‰\W‰ \X‰\Y‰\Z‰\[‰\\‰\]‰\^‰\_‰\`‰ \a‰&\b‰'\c‰(\d‰0\e‰1\f‰2\g‰5\h‰9\i‰:\j‰>\k‰@\l‰B\m‰E\n‰F\o‰I\p‰O\q‰R\r‰W\s‰Z\t‰[\u‰\\v‰a\w‰b\x‰c\y‰k\z‰n\{‰p\|‰s\}‰u\~‰z]!‰{]"‰|]#‰}]$‰‰]%‰]&‰]'‰”](‰•])‰›]*‰œ]+‰Ÿ],‰ ]-‰¥].‰°]/‰´]0‰µ]1‰¶]2‰·]3‰¼]4‰Ô]5‰Õ]6‰Ö]7‰×]8‰Ø]9‰å]:‰é];‰ë]<‰í]=‰ñ]>‰ó]?‰ö]@‰ù]A‰ý]B‰ÿ]CŠ]DŠ]EŠ]FŠ]GŠ]HŠ]IŠ]JŠ]KŠ]LŠ ]MŠ"]NŠ$]OŠ&]PŠ+]QŠ,]RŠ/]SŠ5]TŠ7]UŠ=]VŠ>]WŠ@]XŠC]YŠE]ZŠG][ŠI]\ŠM]]ŠN]^ŠS]_ŠV]`ŠW]aŠX]bŠ\]cŠ]]dŠa]eŠe]fŠg]gŠu]hŠv]iŠw]jŠy]kŠz]lŠ{]mŠ~]nŠ]oŠ€]pŠƒ]qІ]rŠ‹]sŠ]tŠ]uŠ’]vŠ–]wŠ—]xŠ™]yŠŸ]zЧ]{Š©]|Š®]}Н]~г^!ж^"Š·^#Š»^$о^%ŠÃ^&ŠÆ^'ŠÈ^(ŠÉ^)ŠÊ^*ŠÑ^+ŠÓ^,ŠÔ^-ŠÕ^.Š×^/ŠÝ^0Šß^1Šì^2Šð^3Šô^4Šõ^5Šö^6Šü^7Šÿ^8‹^9‹^:‹ ^;‹^<‹^=‹^>‹^?‹ ^@‹-^A‹0^B‹7^C‹<^D‹B^E‹C^F‹D^G‹E^H‹F^I‹H^J‹R^K‹S^L‹T^M‹Y^N‹M^O‹^^P‹c^Q‹m^R‹v^S‹x^T‹y^U‹|^V‹~^W‹^X‹„^Y‹…^Z‹‹^[‹^\‹^]‹”^^‹•^_‹œ^`‹ž^a‹Ÿ^bŒ8^cŒ9^dŒ=^eŒ>^fŒE^gŒG^hŒI^iŒK^jŒO^kŒQ^lŒS^mŒT^nŒW^oŒX^pŒ[^qŒ]^rŒY^sŒc^tŒd^uŒf^vŒh^wŒi^xŒm^yŒs^zŒu^{Œv^|Œ{^}Œ~^~Œ†_!Œ‡_"Œ‹_#Œ_$Œ’_%Œ“_&Œ™_'Œ›_(Œœ_)Œ¤_*Œ¹_+Œº_,ŒÅ_-ŒÆ_.ŒÉ_/ŒË_0ŒÏ_1ŒÖ_2ŒÕ_3ŒÙ_4ŒÝ_5Œá_6Œè_7Œì_8Œï_9Œð_:Œò_;Œõ_<Œ÷_=Œø_>Œþ_?Œÿ_@_A_B _C_D_E_Fe_Gi_Hl_In_J_K‚_L„_Mˆ_N_O_P‘_Q•_Rž_SŸ_T _U¦_V«_W¬_X¯_Y²_Zµ_[·_\¹_]»_^À__Å_`Æ_aÇ_bÈ_cÊ_dÎ_eÑ_fÔ_gÕ_h×_iÙ_jä_kå_lç_mì_nð_o¼_pñ_qò_rô_sý_tŽ_uŽ_vŽ_wŽ_xŽ _yŽ_zŽ_{Ž_|Ž _}Ž!_~Ž"`!Ž#`"Ž&`#Ž'`$Ž1`%Ž3`&Ž6`'Ž7`(Ž8`)Ž9`*Ž=`+Ž@`,ŽA`-ŽK`.ŽM`/ŽN`0ŽO`1ŽT`2Ž[`3Ž\`4Ž]`5Ž^`6Ža`7Žb`8Ži`9Žl`:Žm`;Žo`<Žp`=Žq`>Žy`?Žz`@Ž{`AŽ‚`BŽƒ`Cމ`DŽ`EŽ’`FŽ•`GŽš`HŽ›`IŽ`JŽž`KŽ¢`Lާ`MŽ©`NŽ­`OŽ®`P޳`Q޵`RŽº`SŽ»`TŽÀ`UŽÁ`VŽÃ`WŽÄ`XŽÇ`YŽÏ`ZŽÑ`[ŽÔ`\ŽÜ`]Žè`^Žî`_Žð``Žñ`aŽ÷`bŽù`cŽú`dŽí`e`f`g`h`i`j`k`l`m`n`o `p!`q#`r%`s'`t(`u,`v-`w.`x4`y5`z6`{7`|:`}@`~Aa!Ca"Ga#Oa$Qa%Ra&Sa'Ta(Ua)Xa*]a+^a,ea-a. a/¡a0¤a1¥a2¦a3µa4¶a5¸a6¾a7Àa8Áa9Æa:Êa;Ëa<Ía=Ða>Òa?Óa@ÕaAàaBãaCäaDèaEîaFñaGõaHöaIûaJþaKaLaMaN aOaPaQ(aR)aS/aT*aU,aV-aW3aX4aY7aZ?a[Ca\Da]La^[a_]a`baafabgacladpaetafyag…ahˆai‹ajŒakŽalam•an—ao˜ap™aq›ar as¡at¢au¥av°aw²ax³ay´az¶a{½a|Ìa}¾a~Ãb!Äb"Åb#Çb$Èb%Õb&×b'Øb(Ùb)Üb*Ýb+ßb,åb-Òb.öb/ëb0ïb1ðb2ôb3þb4ÿb5‘b6‘b7‘b8‘b9‘b:‘ b;‘b<‘b=‘b>‘b?‘b@‘bA‘bB‘bC‘ bD‘%bE‘"bF‘#bG‘'bH‘)bI‘.bJ‘/bK‘1bL‘4bM‘6bN‘7bO‘9bP‘:bQ‘’ c?’ c@’ cA’cB’cC’cD’cE’cF’cG’cH’#cI’$cJ’%cK’&cL’(cM’.cN’/cO’0cP’3cQ’5cR’6cS’8cT’9cU’:cV’cX’@cY’BcZ’Cc[’Fc\’Gc]’Jc^’Mc_’Nc`’Oca’Qcb’Xcc’Ycd’\ce’]cf’`cg’ach’eci’gcj’hck’icl’ncm’ocn’pco’ucp’vcq’wcr’xcs’yct’{cu’|cv’}cw’cx’ˆcy’‰cz’Šc{’c|’Žc}’’c~’—d!’™d"’Ÿd#’ d$’¤d%’¥d&’§d'’¨d(’«d)’¯d*’²d+’¶d,’¸d-’ºd.’»d/’¼d0’½d1’¿d2’Àd3’Ád4’Âd5’Ãd6’Åd7’Æd8’Çd9’Èd:’Ëd;’Ìd<’Íd=’Îd>’Ðd?’Ód@’ÕdA’×dB’ØdC’ÙdD’ÜdE’ÝdF’ßdG’àdH’ádI’ãdJ’ådK’çdL’èdM’ìdN’îdO’ðdP’ùdQ’ûdR’ÿdS“dT“dU“dV“ dW“dX“dY“dZ“d[“d\“d]“d^“!d_“$d`“%da“'db“)dc“*dd“3de“4df“6dg“7dh“Gdi“Hdj“Idk“Pdl“Qdm“Rdn“Udo“Wdp“Xdq“Zdr“^ds“ddt“edu“gdv“idw“jdx“mdy“odz“pd{“qd|“sd}“td~“ve!“ze"“}e#“e$“€e%“e&“‚e'“ˆe(“Še)“‹e*“e+“e,“’e-“•e.“˜e/“›e0“že1“¡e2“£e3“¤e4“¦e5“¨e6“«e7“´e8“µe9“¶e:“ºe;“©e<“Áe=“Äe>“Åe?“Æe@“ÇeA“ÉeB“ÊeC“ËeD“ÌeE“ÍeF“ÓeG“ÙeH“ÜeI“ÞeJ“ßeK“âeL“æeM“çeN“ùeO“÷eP“øeQ“úeR“ûeS“ýeT”eU”eV”eW”eX” eY” eZ”e[”e\”e]”e^”e_”e`”.ea”/eb”1ec”2ed”3ee”4ef”;eg”?eh”=ei”Cej”Eek”Hel”Jem”Len”Ueo”Yep”\eq”_er”aes”cet”heu”kev”mew”nex”oey”qez”re{”„e|”ƒe}•xe~•yf!•~f"•„f#•ˆf$•Œf%•f&•Žf'•f(•žf)•Ÿf*•¡f+•¦f,•©f-•«f.•¬f/•´f0•¶f1•ºf2•½f3•¿f4•Æf5•Èf6•Éf7•Ëf8•Ðf9•Ñf:•Òf;•Óf<•Ùf=•Úf>•Ýf?•Þf@•ßfA•àfB•äfC•æfD–fE–fF–"fG–$fH–%fI–&fJ–,fK–1fL–3fM–7fN–8fO–9fP–:fQ–—xg?—{g@—}gA—gB—€gC—‰gD—•gE—–gF——gG—™gH—šgI—žgJ—ŸgK—¢gL—¬gM—®gN—±gO—²gP—µgQ—¶gR—¸gS—¹gT—ºgU—¼gV—¾gW—¿gX—ÁgY—ÄgZ—Åg[—Çg\—Ég]—Êg^—Ìg_—Íg`—Îga—Ðgb—Ñgc—Ôgd—×ge—Øgf—Ùgg—Ýgh—Þgi—àgj—Ûgk—ágl—ägm—ïgn—ñgo—ôgp—÷gq—øgr—úgs˜gt˜ gu˜gv˜ gw˜gx˜gy˜gz˜g{˜g|˜ g}˜#g~˜&h!˜+h"˜.h#˜/h$˜0h%˜2h&˜3h'˜5h(˜%h)˜>h*˜Dh+˜Gh,˜Jh-˜Qh.˜Rh/˜Sh0˜Vh1˜Wh2˜Yh3˜Zh4˜bh5˜ch6˜eh7˜fh8˜jh9˜lh:˜«h;˜­h<˜®h=˜°h>˜´h?˜·h@˜¸hA˜ºhB˜»hC˜¿hD˜ÂhE˜ÅhF˜ÈhG˜ÌhH˜áhI˜ãhJ˜åhK˜æhL˜çhM˜êhN˜óhO˜öhP™hQ™hR™hS™hT™hU™hV™hW™hX™hY™hZ™h[™"h\™&h]™'h^™+h_™1h`™2ha™3hb™4hc™5hd™9he™:hf™;hg™ši?ši@š iAš"iBš#iCš$iDš'iEš-iFš.iGš3iHš5iIš6iJš8iKšGiLšAiMšDiNšJiOšKiPšLiQšNiRšQiSšTiTšViUš]iVšªiWš¬iXš®iYš¯iZš²i[š´i\šµi]š¶i^š¹i_š»i`š¾iaš¿ibšÁicšÃidšÆiešÈifšÎigšÐihšÒiišÕijšÖikš×ilšÛimšÜinšàiošäipšåiqšçiršéisšìitšòiušóivšõiwšùixšúiyšýizšÿi{›i|›i}›i~›j!›j"›j#›j$› j%› j&› j'› j(›j)›j*›j+›j,›j-›j.›j/› j0›&j1›+j2›-j3›3j4›4j5›5j6›7j7›9j8›:j9›=j:›Hj;›Kj<›Lj=›Uj>›Vj?›Wj@›[jA›^jB›ajC›cjD›ejE›fjF›hjG›jjH›kjI›ljJ›mjK›njL›sjM›ujN›wjO›xjP›yjQ›jR›€jS›„jT›…jU›†jV›‡jW›‰jX›ŠjY›‹jZ›j[›j\›j]›”j^›šj_›j`›žja›¦jb›§jc›©jd›¬je›°jf›±jg›²jh›·ji›¸jj›»jk›¼jl›¾jm›¿jn›Ájo›Çjp›Èjq›Îjr›Ðjs›×jt›Øju›Ýjv›ßjw›åjx›çjy›êjz›ëj{›ïj|›ój}›÷j~›øk!›ùk"›úk#›ýk$›ÿk%œk&œk'œ k(œk)œk*œk+œk,œk-œk.œk/œk0œ"k1œ#k2œ&k3œ'k4œ(k5œ)k6œ*k7œ1k8œ5k9œ6k:œ7k;œ=k<œAk=œCk>œDk?œEk@œIkAœJkBœNkCœOkDœPkEœSkFœTkGœVkHœXkIœ[kJœ]kKœ^kLœ_kMœckNœikOœjkPœ\kQœkkRœhkSœnkTœpkUœrkVœukWœwkXœ{kYœækZœòk[œ÷k\œùk] k^k_k`kakbkckdke/kf0kg2kh3ki4kj:kkÖl?×l@ÚlAÞlBßlCàlDålEçlFélGëlHîlIðlJólKôlLþlMž lNžlOžlPžlQžlRžlSžlTžlUžlVžlWžlXžlYžzlZž{l[ž|l\ž€l]ž‚l^žƒl_ž„l`ž…laž‡lbžŽlcžldž–lež˜lfž›lgžžlhž¤liž¨ljž¬lkž®llž¯lmž°lnž³lož´lpžµlqžÆlržÈlsžËltžÕlužßlvžälwžçlxžìlyžílzžîl{žðl|žñl}žòl~žõm!žøm"žÿm#Ÿm$Ÿm%Ÿ m&Ÿm'Ÿm(Ÿm)Ÿm*Ÿm+Ÿm,Ÿm-Ÿm.Ÿm/Ÿm0Ÿm1Ÿ"m2Ÿ&m3Ÿ*m4Ÿ+m5Ÿ/m6Ÿ1m7Ÿ2m8Ÿ4m9Ÿ7m:Ÿ9m;Ÿ:m<ŸŸ?m?ŸAm@ŸCmAŸDmBŸEmCŸFmDŸGmEŸSmFŸUmGŸVmHŸWmIŸXmJŸZmKŸ]mLŸ^mMŸhmNŸimOŸmmPŸnmQŸomRŸpmSŸqmTŸsmUŸumVŸzmWŸ}mXŸmYŸmZŸ‘m[Ÿ’m\Ÿ”m]Ÿ–m^Ÿ—m_Ÿžm`Ÿ¡maŸ¢mbŸ£mcŸ¥screen-4.9.1/utf8encodings/030000664000175000017500000010023614467014146014410 0ustar alexalexScreenI2UTF8 KSC 5601-1992!!0!"0!#0!$·!% %!& &!'¨!(0!)­!* !+"%!,ÿ±!?×!@÷!A"`!B"d!C"e!D"!E"4!F°!G 2!H 3!I!!J!+!Kÿà!Lÿá!Mÿå!N&B!O&@!P" !Q"¥!R#!S"!T"!U"a!V"R!W§!X ;!Y&!Z&![%Ë!\%Ï!]%Î!^%Ç!_%Æ!`%¡!a% !b%³!c%²!d%½!e%¼!f!’!g!!h!‘!i!“!j!”!k0!l"j!m"k!n"!o"=!p"!q"5!r"+!s",!t"!u" !v"†!w"‡!x"‚!y"ƒ!z"*!{")!|"'!}"(!~ÿâ"!!Ò""!Ô"#""$""%´"&ÿ^"'Ç"(Ø")Ý"*Ú"+Ù",¸"-Û".¡"/¿"0Ð"1"."2""3""4¤"5! "6 0"7%Á"8%À"9%·":%¶";&d"<&`"=&a">&e"?&g"@&c"A"™"B%È"C%£"D%Ð"E%Ñ"F%’"G%¤"H%¥"I%¨"J%§"K%¦"L%©"M&h"N&"O&"P&"Q&"R¶"S "T !"U!•"V!—"W!™"X!–"Y!˜"Z&m"[&i"\&j"]&l"^2"_2"`!"a3Ç"b!""c3Â"d3Ø"e!!#!ÿ#"ÿ##ÿ#$ÿ#%ÿ#&ÿ#'ÿ#(ÿ#)ÿ #*ÿ #+ÿ #,ÿ #-ÿ #.ÿ#/ÿ#0ÿ#1ÿ#2ÿ#3ÿ#4ÿ#5ÿ#6ÿ#7ÿ#8ÿ#9ÿ#:ÿ#;ÿ#<ÿ#=ÿ#>ÿ#?ÿ#@ÿ #Aÿ!#Bÿ"#Cÿ##Dÿ$#Eÿ%#Fÿ&#Gÿ'#Hÿ(#Iÿ)#Jÿ*#Kÿ+#Lÿ,#Mÿ-#Nÿ.#Oÿ/#Pÿ0#Qÿ1#Rÿ2#Sÿ3#Tÿ4#Uÿ5#Vÿ6#Wÿ7#Xÿ8#Yÿ9#Zÿ:#[ÿ;#\ÿæ#]ÿ=#^ÿ>#_ÿ?#`ÿ@#aÿA#bÿB#cÿC#dÿD#eÿE#fÿF#gÿG#hÿH#iÿI#jÿJ#kÿK#lÿL#mÿM#nÿN#oÿO#pÿP#qÿQ#rÿR#sÿS#tÿT#uÿU#vÿV#wÿW#xÿX#yÿY#zÿZ#{ÿ[#|ÿ\#}ÿ]#~ÿã$!11$"12$#13$$14$%15$&16$'17$(18$)19$*1:$+1;$,1<$-1=$.1>$/1?$01@$11A$21B$31C$41D$51E$61F$71G$81H$91I$:1J$;1K$<1L$=1M$>1N$?1O$@1P$A1Q$B1R$C1S$D1T$E1U$F1V$G1W$H1X$I1Y$J1Z$K1[$L1\$M1]$N1^$O1_$P1`$Q1a$R1b$S1c$T1d$U1e$V1f$W1g$X1h$Y1i$Z1j$[1k$\1l$]1m$^1n$_1o$`1p$a1q$b1r$c1s$d1t$e1u$f1v$g1w$h1x$i1y$j1z$k1{$l1|$m1}$n1~$o1$p1€$q1$r1‚$s1ƒ$t1„$u1…$v1†$w1‡$x1ˆ$y1‰$z1Š${1‹$|1Œ$}1$~1Ž%!!p%"!q%#!r%$!s%%!t%&!u%'!v%(!w%)!x%*!y%0!`%1!a%2!b%3!c%4!d%5!e%6!f%7!g%8!h%9!i%A‘%B’%C“%D”%E•%F–%G—%H˜%I™%Jš%K›%Lœ%M%Nž%OŸ%P %Q¡%R£%S¤%T¥%U¦%V§%W¨%X©%a±%b²%c³%d´%eµ%f¶%g·%h¸%i¹%jº%k»%l¼%m½%n¾%o¿%pÀ%qÁ%rÃ%sÄ%tÅ%uÆ%vÇ%wÈ%xÉ&!%&"%&#% &$%&%%&&%&'%&(%,&)%$&*%4&+%<&,%&-%&.%&/%&0%&1%&2%#&3%3&4%+&5%;&6%K&7% &8%/&9%(&:%7&;%?&<%&=%0&>%%&?%8&@%B&A%&B%&C%&D%&E%&F%&G%&H% &I%&J%&K%!&L%"&M%&&N%'&O%)&P%*&Q%-&R%.&S%1&T%2&U%5&V%6&W%9&X%:&Y%=&Z%>&[%@&\%A&]%C&^%D&_%E&`%F&a%G&b%H&c%I&d%J'!3•'"3–'#3—'$!'%3˜'&3Ä''3£'(3¤')3¥'*3¦'+3™',3š'-3›'.3œ'/3'03ž'13Ÿ'23 '33¡'43¢'53Ê'63'73Ž'83'93Ï':3ˆ';3‰'<3È'=3§'>3¨'?3°'@3±'A3²'B3³'C3´'D3µ'E3¶'F3·'G3¸'H3¹'I3€'J3'K3‚'L3ƒ'M3„'N3º'O3»'P3¼'Q3½'R3¾'S3¿'T3'U3‘'V3’'W3“'X3”'Y!&'Z3À'[3Á'\3Š']3‹'^3Œ'_3Ö'`3Å'a3­'b3®'c3¯'d3Û'e3©'f3ª'g3«'h3¬'i3Ý'j3Ð'k3Ó'l3Ã'm3É'n3Ü'o3Æ(!Æ("Ð(#ª($&(&2((?()A(*Ø(+R(,º(-Þ(.f(/J(12`(22a(32b(42c(52d(62e(72f(82g(92h(:2i(;2j(<2k(=2l(>2m(?2n(@2o(A2p(B2q(C2r(D2s(E2t(F2u(G2v(H2w(I2x(J2y(K2z(L2{(M$Ð(N$Ñ(O$Ò(P$Ó(Q$Ô(R$Õ(S$Ö(T$×(U$Ø(V$Ù(W$Ú(X$Û(Y$Ü(Z$Ý([$Þ(\$ß(]$à(^$á(_$â(`$ã(a$ä(b$å(c$æ(d$ç(e$è(f$é(g$`(h$a(i$b(j$c(k$d(l$e(m$f(n$g(o$h(p$i(q$j(r$k(s$l(t$m(u$n(v½(w!S(x!T(y¼(z¾({![(|!\(}!](~!^)!æ)")#ð)$')%1)&3)'8)(@))B)*ø)+S),ß)-þ).g)/K)0I)12)22)32)42)52)62)72)82)92):2 );2 )<2 )=2 )>2 )?2)@2)A2)B2)C2)D2)E2)F2)G2)H2)I2)J2)K2)L2)M$œ)N$)O$ž)P$Ÿ)Q$ )R$¡)S$¢)T$£)U$¤)V$¥)W$¦)X$§)Y$¨)Z$©)[$ª)\$«)]$¬)^$­)_$®)`$¯)a$°)b$±)c$²)d$³)e$´)f$µ)g$t)h$u)i$v)j$w)k$x)l$y)m$z)n${)o$|)p$})q$~)r$)s$€)t$)u$‚)v¹)w²)x³)y t)z ){ )| ‚)} ƒ)~ „*!0A*"0B*#0C*$0D*%0E*&0F*'0G*(0H*)0I**0J*+0K*,0L*-0M*.0N*/0O*00P*10Q*20R*30S*40T*50U*60V*70W*80X*90Y*:0Z*;0[*<0\*=0]*>0^*?0_*@0`*A0a*B0b*C0c*D0d*E0e*F0f*G0g*H0h*I0i*J0j*K0k*L0l*M0m*N0n*O0o*P0p*Q0q*R0r*S0s*T0t*U0u*V0v*W0w*X0x*Y0y*Z0z*[0{*\0|*]0}*^0~*_0*`0€*a0*b0‚*c0ƒ*d0„*e0…*f0†*g0‡*h0ˆ*i0‰*j0Š*k0‹*l0Œ*m0*n0Ž*o0*p0*q0‘*r0’*s0“+!0¡+"0¢+#0£+$0¤+%0¥+&0¦+'0§+(0¨+)0©+*0ª++0«+,0¬+-0­+.0®+/0¯+00°+10±+20²+30³+40´+50µ+60¶+70·+80¸+90¹+:0º+;0»+<0¼+=0½+>0¾+?0¿+@0À+A0Á+B0Â+C0Ã+D0Ä+E0Å+F0Æ+G0Ç+H0È+I0É+J0Ê+K0Ë+L0Ì+M0Í+N0Î+O0Ï+P0Ð+Q0Ñ+R0Ò+S0Ó+T0Ô+U0Õ+V0Ö+W0×+X0Ø+Y0Ù+Z0Ú+[0Û+\0Ü+]0Ý+^0Þ+_0ß+`0à+a0á+b0â+c0ã+d0ä+e0å+f0æ+g0ç+h0è+i0é+j0ê+k0ë+l0ì+m0í+n0î+o0ï+p0ð+q0ñ+r0ò+s0ó+t0ô+u0õ+v0ö,!,",#,$,%,&,',(,),*,+,,,-,.,/,0,1,2 ,3!,4",5#,6$,7%,8&,9',:(,;),<*,=+,>,,?-,@.,A/,Q0,R1,S2,T3,U4,V5,WQ,X6,Y7,Z8,[9,\:,];,^<,_=,`>,a?,b@,cA,dB,eC,fD,gE,hF,iG,jH,kI,lJ,mK,nL,oM,pN,qO0!¬0"¬0#¬0$¬0%¬0&¬ 0'¬ 0(¬0)¬0*¬0+¬0,¬0-¬0.¬0/¬00¬01¬02¬03¬04¬05¬ 06¬$07¬,08¬-09¬/0:¬00;¬10<¬80=¬90>¬<0?¬@0@¬K0A¬M0B¬T0C¬X0D¬\0E¬p0F¬q0G¬t0H¬w0I¬x0J¬z0K¬€0L¬0M¬ƒ0N¬„0O¬…0P¬†0Q¬‰0R¬Š0S¬‹0T¬Œ0U¬0V¬”0W¬œ0X¬0Y¬Ÿ0Z¬ 0[¬¡0\¬¨0]¬©0^¬ª0_¬¬0`¬¯0a¬°0b¬¸0c¬¹0d¬»0e¬¼0f¬½0g¬Á0h¬Ä0i¬È0j¬Ì0k¬Õ0l¬×0m¬à0n¬á0o¬ä0p¬ç0q¬è0r¬ê0s¬ì0t¬ï0u¬ð0v¬ñ0w¬ó0x¬õ0y¬ö0z¬ü0{¬ý0|­0}­0~­1!­ 1"­ 1#­1$­1%­1&­1'­ 1(­)1)­,1*­-1+­41,­51-­81.­<1/­D10­E11­G12­I13­P14­T15­X16­a17­c18­l19­m1:­p1;­s1<­t1=­u1>­v1?­{1@­|1A­}1B­1C­1D­‚1E­ˆ1F­‰1G­Œ1H­1I­œ1J­1K­¤1L­·1M­À1N­Á1O­Ä1P­È1Q­Ð1R­Ñ1S­Ó1T­Ü1U­à1V­ä1W­ø1X­ù1Y­ü1Z­ÿ1[®1\®1]®1^® 1_® 1`® 1a®1b®01c®11d®41e®71f®81g®:1h®@1i®A1j®C1k®E1l®F1m®J1n®L1o®M1p®N1q®P1r®T1s®V1t®\1u®]1v®_1w®`1x®a1y®e1z®h1{®i1|®l1}®p1~®x2!®y2"®{2#®|2$®}2%®„2&®…2'®Œ2(®¼2)®½2*®¾2+®À2,®Ä2-®Ì2.®Í2/®Ï20®Ð21®Ñ22®Ø23®Ù24®Ü25®è26®ë27®í28®ô29®ø2:®ü2;¯2<¯2=¯ 2>¯2?¯,2@¯-2A¯02B¯22C¯42D¯<2E¯=2F¯?2G¯A2H¯B2I¯C2J¯H2K¯I2L¯P2M¯\2N¯]2O¯d2P¯e2Q¯y2R¯€2S¯„2T¯ˆ2U¯2V¯‘2W¯•2X¯œ2Y¯¸2Z¯¹2[¯¼2\¯À2]¯Ç2^¯È2_¯É2`¯Ë2a¯Í2b¯Î2c¯Ô2d¯Ü2e¯è2f¯é2g¯ð2h¯ñ2i¯ô2j¯ø2k°2l°2m°2n° 2o°2p°2q°2r°2s°(2t°D2u°E2v°H2w°J2x°L2y°N2z°S2{°T2|°U2}°W2~°Y3!°]3"°|3#°}3$°€3%°„3&°Œ3'°3(°3)°‘3*°˜3+°™3,°š3-°œ3.°Ÿ3/° 30°¡31°¢32°¨33°©34°«35°¬36°­37°®38°¯39°±3:°³3;°´3<°µ3=°¸3>°¼3?°Ä3@°Å3A°Ç3B°È3C°É3D°Ð3E°Ñ3F°Ô3G°Ø3H°à3I°å3J±3K± 3L± 3M± 3N±3O±3P±3Q±3R±3S±3T±3U±3V±#3W±$3X±%3Y±(3Z±,3[±43\±53]±73^±83_±93`±@3a±A3b±D3c±H3d±P3e±Q3f±T3g±U3h±X3i±\3j±`3k±x3l±y3m±|3n±€3o±‚3p±ˆ3q±‰3r±‹3s±3t±’3u±“3v±”3w±˜3x±œ3y±¨3z±Ì3{±Ð3|±Ô3}±Ü3~±Ý4!±ß4"±è4#±é4$±ì4%±ð4&±ù4'±û4(±ý4)²4*²4+²4,² 4-² 4.²4/²40²41²42² 43²444²<45²X46²\47²`48²h49²i4:²t4;²u4<²|4=²„4>²…4?²‰4@²4A²‘4B²”4C²˜4D²™4E²š4F² 4G²¡4H²£4I²¥4J²¦4K²ª4L²¬4M²°4N²´4O²È4P²É4Q²Ì4R²Ð4S²Ò4T²Ø4U²Ù4V²Û4W²Ý4X²â4Y²ä4Z²å4[²æ4\²è4]²ë4^²ì4_²í4`²î4a²ï4b²ó4c²ô4d²õ4e²÷4f²ø4g²ù4h²ú4i²û4j²ÿ4k³4l³4m³4n³4o³4p³4q³4r³4s³4t³4u³T4v³U4w³V4x³X4y³[4z³\4{³^4|³_4}³d4~³e5!³g5"³i5#³k5$³n5%³p5&³q5'³t5(³x5)³€5*³5+³ƒ5,³„5-³…5.³Œ5/³50³”51³ 52³¡53³¨54³¬55³Ä56³Å57³È58³Ë59³Ì5:³Î5;³Ð5<³Ô5=³Õ5>³×5?³Ù5@³Û5A³Ý5B³à5C³ä5D³è5E³ü5F´5G´5H´5I´ 5J´(5K´)5L´+5M´45N´P5O´Q5P´T5Q´X5R´`5S´a5T´c5U´e5V´l5W´€5X´ˆ5Y´5Z´¤5[´¨5\´¬5]´µ5^´·5_´¹5`´À5a´Ä5b´È5c´Ð5d´Õ5e´Ü5f´Ý5g´à5h´ã5i´ä5j´æ5k´ì5l´í5m´ï5n´ñ5o´ø5pµ5qµ5rµ5sµ5tµ5uµ$5vµ%5wµ'5xµ(5yµ)5zµ*5{µ05|µ15}µ45~µ86!µ@6"µA6#µC6$µD6%µE6&µK6'µL6(µM6)µP6*µT6+µ\6,µ]6-µ_6.µ`6/µa60µ 61µ¡62µ¤63µ¨64µª65µ«66µ°67µ±68µ³69µ´6:µµ6;µ»6<µ¼6=µ½6>µÀ6?µÄ6@µÌ6AµÍ6BµÏ6CµÐ6DµÑ6EµØ6Fµì6G¶6H¶6I¶6J¶6K¶%6L¶,6M¶46N¶H6O¶d6P¶h6Q¶œ6R¶6S¶ 6T¶¤6U¶«6V¶¬6W¶±6X¶Ô6Y¶ð6Z¶ô6[¶ø6\·6]·6^·6_·(6`·)6a·,6b·/6c·06d·86e·96f·;6g·D6h·H6i·L6j·T6k·U6l·`6m·d6n·h6o·p6p·q6q·s6r·u6s·|6t·}6u·€6v·„6w·Œ6x·6y·6z·6{·‘6|·’6}·–6~·—7!·˜7"·™7#·œ7$· 7%·¨7&·©7'·«7(·¬7)·­7*·´7+·µ7,·¸7-·Ç7.·É7/·ì70·í71·ð72·ô73·ü74·ý75·ÿ76¸77¸78¸79¸7:¸ 7;¸ 7<¸7=¸7>¸7?¸7@¸7A¸$7B¸%7C¸(7D¸,7E¸47F¸57G¸77H¸87I¸97J¸@7K¸D7L¸Q7M¸S7N¸\7O¸]7P¸`7Q¸d7R¸l7S¸m7T¸o7U¸q7V¸x7W¸|7X¸7Y¸¨7Z¸°7[¸´7\¸¸7]¸À7^¸Á7_¸Ã7`¸Å7a¸Ì7b¸Ð7c¸Ô7d¸Ý7e¸ß7f¸á7g¸è7h¸é7i¸ì7j¸ð7k¸ø7l¸ù7m¸û7n¸ý7o¹7p¹7q¹ 7r¹<7s¹=7t¹@7u¹D7v¹L7w¹O7x¹Q7y¹X7z¹Y7{¹\7|¹`7}¹h7~¹i8!¹k8"¹m8#¹t8$¹u8%¹x8&¹|8'¹„8(¹…8)¹‡8*¹‰8+¹Š8,¹8-¹Ž8.¹¬8/¹­80¹°81¹´82¹¼83¹½84¹¿85¹Á86¹È87¹É88¹Ì89¹Î8:¹Ï8;¹Ð8<¹Ñ8=¹Ò8>¹Ø8?¹Ù8@¹Û8A¹Ý8B¹Þ8C¹á8D¹ã8E¹ä8F¹å8G¹è8H¹ì8I¹ô8J¹õ8K¹÷8L¹ø8M¹ù8N¹ú8Oº8Pº8Qº8Rº8Sº88Tº98Uº<8Vº@8WºB8XºH8YºI8ZºK8[ºM8\ºN8]ºS8^ºT8_ºU8`ºX8aº\8bºd8cºe8dºg8eºh8fºi8gºp8hºq8iºt8jºx8kºƒ8lº„8mº…8nº‡8oºŒ8pº¨8qº©8rº«8sº¬8tº°8uº²8vº¸8wº¹8xº»8yº½8zºÄ8{ºÈ8|ºØ8}ºÙ8~ºü9!»9"»9#» 9$»9%»9&»9'»9(» 9)»)9*»+9+»49,»59-»69.»89/»;90»<91»=92»>93»D94»E95»G96»I97»M98»O99»P9:»T9;»X9<»a9=»c9>»l9?»ˆ9@»Œ9A»9B»¤9C»¨9D»¬9E»´9F»·9G»À9H»Ä9I»È9J»Ð9K»Ó9L»ø9M»ù9N»ü9O»ÿ9P¼9Q¼9R¼9S¼ 9T¼ 9U¼ 9V¼ 9W¼9X¼9Y¼9Z¼9[¼9\¼9]¼9^¼9_¼9`¼9a¼9b¼9c¼$9d¼%9e¼'9f¼)9g¼-9h¼09i¼19j¼49k¼89l¼@9m¼A9n¼C9o¼D9p¼E9q¼I9r¼L9s¼M9t¼P9u¼]9v¼„9w¼…9x¼ˆ9y¼‹9z¼Œ9{¼Ž9|¼”9}¼•9~¼—:!¼™:"¼š:#¼ :$¼¡:%¼¤:&¼§:'¼¨:(¼°:)¼±:*¼³:+¼´:,¼µ:-¼¼:.¼½:/¼À:0¼Ä:1¼Í:2¼Ï:3¼Ð:4¼Ñ:5¼Õ:6¼Ø:7¼Ü:8¼ô:9¼õ::¼ö:;¼ø:<¼ü:=½:>½:?½:@½ :A½:B½:C½$:D½,:E½@:F½H:G½I:H½L:I½P:J½X:K½Y:L½d:M½h:N½€:O½:P½„:Q½‡:R½ˆ:S½‰:T½Š:U½:V½‘:W½“:X½•:Y½™:Z½š:[½œ:\½¤:]½°:^½¸:_½Ô:`½Õ:a½Ø:b½Ü:c½é:d½ð:e½ô:f½ø:g¾:h¾:i¾:j¾ :k¾ :l¾:m¾:n¾:o¾:p¾:q¾D:r¾E:s¾H:t¾L:u¾N:v¾T:w¾U:x¾W:y¾Y:z¾Z:{¾[:|¾`:}¾a:~¾d;!¾h;"¾j;#¾p;$¾q;%¾s;&¾t;'¾u;(¾{;)¾|;*¾};+¾€;,¾„;-¾Œ;.¾;/¾;0¾;1¾‘;2¾˜;3¾™;4¾¨;5¾Ð;6¾Ñ;7¾Ô;8¾×;9¾Ø;:¾à;;¾ã;<¾ä;=¾å;>¾ì;?¿;@¿;A¿ ;B¿;C¿;D¿;E¿;F¿;G¿@;H¿A;I¿D;J¿H;K¿P;L¿Q;M¿U;N¿”;O¿°;P¿Å;Q¿Ì;R¿Í;S¿Ð;T¿Ô;U¿Ü;V¿ß;W¿á;XÀ<;YÀQ;ZÀX;[À\;\À`;]Àh;^Ài;_À;`À‘;aÀ”;bÀ˜;cÀ ;dÀ¡;eÀ£;fÀ¥;gÀ¬;hÀ­;iÀ¯;jÀ°;kÀ³;lÀ´;mÀµ;nÀ¶;oÀ¼;pÀ½;qÀ¿;rÀÀ;sÀÁ;tÀÅ;uÀÈ;vÀÉ;wÀÌ;xÀÐ;yÀØ;zÀÙ;{ÀÛ;|ÀÜ;}ÀÝ;~ÀäÁ<­=?´=@µ=A·=B¹=CÂÜ=DÂÝ=EÂà=FÂã=GÂä=HÂë=IÂì=JÂí=KÂï=LÂñ=MÂö=NÂø=OÂù=PÂû=QÂü=RÃ=SÃ=Tà =Uà =Và =WÃ=XÃ=YÃ=ZÃ=[Ã=\Ã$=]Ã%=^Ã(=_Ã)=`ÃE=aÃh=bÃi=cÃl=dÃp=eÃr=fÃx=gÃy=hÃ|=iÃ}=jÄ=kÈ=lÃŒ=mÃÀ=nÃØ=oÃÙ=pÃÜ=qÃß=rÃà=sÃâ=tÃè=uÃé=vÃí=wÃô=xÃõ=yÃø=zÄ={Ä=|Ä$=}Ä,=~Ä0>!Ä4>"Ä<>#Ä=>$ÄH>%Äd>&Äe>'Äh>(Äl>)Ät>*Äu>+Äy>,Ä€>-Ä”>.Äœ>/ĸ>0ļ>1Äé>2Äð>3Äñ>4Äô>5Äø>6Äú>7Äÿ>8Å>9Å>:Å >;Å><Å>=Å>>Å(>?Å)>@Å,>AÅ0>BÅ8>CÅ9>DÅ;>EÅ=>FÅD>GÅE>HÅH>IÅI>JÅJ>KÅL>LÅM>MÅN>NÅS>OÅT>PÅU>QÅW>RÅX>SÅY>TÅ]>UÅ^>VÅ`>WÅa>XÅd>YÅh>ZÅp>[Åq>\Ås>]Åt>^Åu>_Å|>`Å}>aÅ€>bÅ„>cŇ>dÅŒ>eÅ>fÅ>gÅ‘>hÅ•>iÅ—>jŘ>kÅœ>lÅ >mÅ©>nÅ´>oŵ>pŸ>qŹ>rÅ»>sż>tŽ>už>vÅÄ>wÅÅ>xÅÆ>yÅÇ>zÅÈ>{ÅÉ>|ÅÊ>}ÅÌ>~ÅÎ?!ÅÐ?"ÅÑ?#ÅÔ?$ÅØ?%Åà?&Åá?'Åã?(Åå?)Åì?*Åí?+Åî?,Åð?-Åô?.Åö?/Å÷?0Åü?1Åý?2Åþ?3Åÿ?4Æ?5Æ?6Æ?7Æ?8Æ?9Æ?:Æ ?;Æ?<Æ?=Æ?>Æ??Æ?@Æ$?AÆ%?BÆ(?CÆ,?DÆ-?EÆ.?FÆ0?GÆ3?HÆ4?IÆ5?JÆ7?KÆ9?LÆ;?MÆ@?NÆA?OÆD?PÆH?QÆP?RÆQ?SÆS?TÆT?UÆU?VÆ\?WÆ]?XÆ`?YÆl?ZÆo?[Æq?\Æx?]Æy?^Æ|?_Æ€?`ƈ?aƉ?bÆ‹?cÆ?dÆ”?eÆ•?fƘ?gÆœ?hƤ?iÆ¥?jƧ?kÆ©?lư?mƱ?nÆ´?oƸ?pƹ?qƺ?rÆÀ?sÆÁ?tÆÃ?uÆÅ?vÆÌ?wÆÍ?xÆÐ?yÆÔ?zÆÜ?{ÆÝ?|Æà?}Æá?~Æè@!Æé@"Æì@#Æð@$Æø@%Æù@&Æý@'Ç@(Ç@)Ç@*Ç @+Ç@,Ç@-Ç@.Ç@/Ç @0Ç!@1Ç$@2Ç(@3Ç0@4Ç1@5Ç3@6Ç5@7Ç7@8Ç<@9Ç=@:Ç@@;ÇD@<ÇJ@=ÇL@>ÇM@?ÇO@@ÇQ@AÇR@BÇS@CÇT@DÇU@EÇV@FÇW@GÇX@HÇ\@IÇ`@JÇh@KÇk@LÇt@MÇu@NÇx@OÇ|@PÇ}@QÇ~@Rǃ@SÇ„@TÇ…@ULJ@VLj@Wlj@XÇŠ@YÇŽ@ZÇ@[Ç‘@\Ç”@]Ç–@^Ç—@_ǘ@`Çš@aÇ @bÇ¡@cÇ£@dǤ@eÇ¥@fǦ@gǬ@hÇ­@iǰ@jÇ´@kǼ@lǽ@mÇ¿@nÇÀ@oÇÁ@pÇÈ@qÇÉ@rÇÌ@sÇÎ@tÇÐ@uÇØ@vÇÝ@wÇä@xÇè@yÇì@zÈ@{È@|È@}È@~È A!ÈA"ÈA#ÈA$ÈA%ÈA&ÈA'ÈA(È A)È$A*È,A+È-A,È/A-È1A.È8A/ÈÈ…A?ȆA@ȇAAÈ‹ABÈŒACÈADÈ”AEÈAFÈŸAGÈ¡AHȨAIȼAJȽAKÈÄALÈÈAMÈÌANÈÔAOÈÕAPÈ×AQÈÙARÈàASÈáATÈäAUÈõAVÈüAWÈýAXÉAYÉAZÉA[ÉA\É A]É A^ÉA_ÉA`ÉAaÉ,AbÉ4AcÉPAdÉQAeÉTAfÉXAgÉ`AhÉaAiÉcAjÉlAkÉpAlÉtAmÉ|AnɈAoɉApÉŒAqÉArɘAsÉ™AtÉ›AuÉAvÉÀAwÉÁAxÉÄAyÉÇAzÉÈA{ÉÊA|ÉÐA}ÉÑA~ÉÓB!ÉÕB"ÉÖB#ÉÙB$ÉÚB%ÉÜB&ÉÝB'ÉàB(ÉâB)ÉäB*ÉçB+ÉìB,ÉíB-ÉïB.ÉðB/ÉñB0ÉøB1ÉùB2ÉüB3ÊB4ÊB5Ê B6Ê B7Ê B8Ê B9ÊB:ÊB;Ê)B<ÊLB=ÊMB>ÊPB?ÊTB@Ê\BAÊ]BBÊ_BCÊ`BDÊaBEÊhBFÊ}BGÊ„BHʘBIʼBJʽBKÊÀBLÊÄBMÊÌBNÊÍBOÊÏBPÊÑBQÊÓBRÊØBSÊÙBTÊàBUÊìBVÊôBWËBXËBYËBZËB[Ë B\Ë!B]ËAB^ËHB_ËIB`ËLBaËPBbËXBcËYBdË]BeËdBfËxBgËyBhËœBi˸BjËÔBkËäBlËçBmËéBnÌ BoÌ BpÌBqÌBrÌBsÌBtÌ!BuÌ"BvÌ'BwÌ(BxÌ)ByÌ,BzÌ.B{Ì0B|Ì8B}Ì9B~Ì;C!ÌC$ÌDC%ÌEC&ÌHC'ÌLC(ÌTC)ÌUC*ÌWC+ÌXC,ÌYC-Ì`C.ÌdC/ÌfC0ÌhC1ÌpC2ÌuC3̘C4Ì™C5ÌœC6Ì C7̨C8Ì©C9Ì«C:̬C;Ì­C<Ì´C=̵C≯C?̼C@ÌÄCAÌÅCBÌÇCCÌÉCDÌÐCEÌÔCFÌäCGÌìCHÌðCIÍCJÍCKÍ CLÍ CMÍCNÍCOÍCPÍCQÍCRÍ$CSÍ(CTÍ,CUÍ9CVÍ\CWÍ`CXÍdCYÍlCZÍmC[ÍoC\ÍqC]ÍxC^͈C_Í”C`Í•Ca͘CbÍœCcͤCdÍ¥CeͧCfÍ©CgͰChÍÄCiÍÌCjÍÐCkÍèClÍìCmÍðCnÍøCoÍùCpÍûCqÍýCrÎCsÎCtÎ CuÎCvÎCwÎ CxÎ!CyÎ$CzÎ(C{Î0C|Î1C}Î3C~Î5D!ÎXD"ÎYD#Î\D$Î_D%Î`D&ÎaD'ÎhD(ÎiD)ÎkD*ÎmD+ÎtD,ÎuD-ÎxD.Î|D/΄D0Î…D1·D2ΉD3ÎD4ΑD5ΔD6ΘD7ΠD8ΡD9ΣD:ΤD;Î¥D<άD=έD>ÎÁD?ÎäD@ÎåDAÎèDBÎëDCÎìDDÎôDEÎõDFÎ÷DGÎøDHÎùDIÏDJÏDKÏDLÏDMÏDNÏDOÏDPÏDQÏDRÏ DSÏ$DTÏ,DUÏ-DVÏ/DWÏ0DXÏ1DYÏ8DZÏTD[ÏUD\ÏXD]Ï\D^ÏdD_ÏeD`ÏgDaÏiDbÏpDcÏqDdÏtDeÏxDfÏ€DgÏ…DhÏŒDiÏ¡DjϨDkϰDlÏÄDmÏàDnÏáDoÏäDpÏèDqÏðDrÏñDsÏóDtÏõDuÏüDvÐDwÐDxÐDyÐDzÐ-D{Ð4D|Ð5D}Ð8D~ÐÐÑE?ÐÓE@ÐÔEAÐÕEBÐÜECÐÝEDÐàEEÐäEFÐìEGÐíEHÐïEIÐðEJÐñEKÐøELÑ EMÑ0ENÑ1EOÑ4EPÑ8EQÑ:ERÑ@ESÑAETÑCEUÑDEVÑEEWÑLEXÑMEYÑPEZÑTE[Ñ\E\Ñ]E]Ñ_E^ÑaE_ÑhE`ÑlEaÑ|EbÑ„EcшEdÑ EeÑ¡EfѤEgѨEhѰEiѱEjѳEkѵElѺEmѼEnÑÀEoÑØEpÑôEqÑøErÒEsÒ EtÒEuÒ,EvÒ-EwÒ0ExÒ4EyÒÒôF?ÒøF@ÓFAÓFBÓFCÓFDÓ FEÓ FFÓFGÓFHÓFIÓFJÓFKÓFLÓFMÓ FNÓ!FOÓ%FPÓ(FQÓ)FRÓ,FSÓ0FTÓ8FUÓ9FVÓ;FWÓÔøG?ÔûG@ÔýGAÕGBÕGCÕ GDÕGEÕGFÕGGÕÖ¡H?Ö¨H@Ö¬HAÖ°HBÖ¹HCÖ»HDÖÄHEÖÅHFÖÈHGÖÌHHÖÑHIÖÔHJÖ×HKÖÙHLÖàHMÖäHNÖèHOÖðHPÖõHQÖüHRÖýHS×HT×HU×HV×HW×HX×HY× HZ×(H[×)H\×+H]×-H^×4H_×5H`×8Ha×R;J?StJ@TJA`jJBadJCk¼JDsÏJEJF‰ºJG‰ÒJH•£JIOƒJJR JKX¾JLYxJMYæJN^rJO^yJPaÇJQcÀJRgFJSgìJThJUo—JVvNJWw JXxõJYzJZzÿJ[|!J\€J]‚nJ^‚qJ_ŠëJ`•“JaNkJbUJcf÷Jdn4Jex£JfzíJg„[Jh‰Ji‡NJj—¨JkRØJlWNJmX*Jn]LJoaJpa¾Jqb!JrebJsgÑJtjDJunJvuJwu³JxvãJyw°Jz}:J{¯J|”QJ}”RJ~Ÿ•K!S#K"\¬K#u2K$€ÛK%’@K&•˜K'R[K(XK)YÜK*\¡K+]K,^·K-_:K._JK/awK0l_K1uzK2u†K3|àK4}sK5}±K6ŒK7TK8‚!K9…‘K:‰AK;‹K<’üK=–MK>œGK?NËK@N÷KAP KBQñKCXOKDa7KEa>KFahKGe9KHiêKIoKJu¥KKv†KLvÖKM{‡KN‚¥KO„ËKPùKQ“§KR•‹KSU€KT[¢KUWQKVùKW|³KX¹KY‘µKZP(K[S»K\\EK]]èK^bÒK_cnK`dÚKadçKbn Kcp¬Kdy[KeÝKfŽKgùKh}Ki’EKj’øKkN~KlNöKmPeKn]þKo^úKpaKqiWKrqKs†TKtŽGKu“uKvš+KwN^KxP‘KygpKzh@K{Q K|RK}R’K~j¢L!w¼L"’L#žÔL$R«L%`/L&òL'PHL(a©L)cíL*dÊL+hoTL?}PL@:LAŠ#LBQ|LCaJLD{LE‹LF’WLG“ŒLHN¬LIOÓLJPLKP¾LLQLMRÁLNRÍLOSLPWpLQXƒLR^šLS_‘LTavLUa¬LVdÎLWelLXfoLYf»LZfôL[h—L\m‡L]p…L^pñL_tŸL`t¥LatÊLbuÙLcxlLdxìLezßLfzöLg}ELh}“Li€Lj€?LkLlƒ–Lm‹fLnLoLp“áLq˜Lr˜8LsšZLt›èLuOÂLvUSLwX:LxYQLy[cLz\FL{`¸L|bL}hBL~h°M!hèM"nªM#uLM$vxM%xÎM&z=M'|ûM(~kM)~|M*ŠM+Š¡M,Œ?M-–ŽM.ÄM/SäM0SéM1TJM2TqM3VúM4YÑM5[dM6\;M7^«M8b÷M9e7M:eEM;erMiÁM?l½M@uüMAvMBw~MCz?MD”ME€MF€¡MGMH‚æMI‚ýMJƒðMK…ÁMLˆ1MMˆ´MNŠ¥MOùMPœMQ“.MR–ÇMS˜gMTšØMUŸMVTíMWe›MXfòMYhMZz@M[Œ7M\`M]VðM^WdM_]M`fMah±MbhÍMcnþMdt(MeˆžMf›äMglhMhùMiš¨MjO›MkQlMlQqMmRŸMn[TMo]åMp`PMq`mMrbñMsc§Mte;MusÙMvzzMw†£MxŒ¢My—MzN2M{[áM|bM}gœM~tÜN!yÑN"ƒÓN#ЇN$вN%èN&NN'“KN(˜FN)^ÓN*ièN+…ÿN,íN-ùN.Q N/[˜N0[ìN1acN2húN3k>N4pLN5t/N6tØN7{¡N8PN9ƒÅN:‰ÀN;Œ«N<•ÜN=™(N>R.N?`]N@bìNANBOŠNCQINDS!NEXÙNF^ãNGfàNHm8NIpšNJrÂNKsÖNL{PNM€ñNN”[NOSfNPc›NQkNRNVNSP€NTXJNUXÞNV`*NWa'NXbÐNYiÐNZ›AN[[N\}N]€±N^_N_N¤N`PÑNaT¬NbU¬Nc[ Nd] Ne]çNfe*NgeNNhh!NijKNjráNkvŽNlwïNm}^NnùNo Np…NNq†ßNrNsNNtÊNu™NvšUNw›«NxNNyNENzN]N{NÇN|OñN}QwN~RþO!S@O"SãO#SåO$TŽO%VO&WuO'W¢O([ÇO)]‡O*^ÐO+aüO,bØO-eQO.g¸O/géO0iËO1kPO2kÆO3kìO4lBO5nO6pxO7r×O8s–O9tO:w¿O;wéO€ O?üO@‚OA‚ OB‚ßOCˆbOD‹3OEŒüOFŽÀOGOH±OI’dOJ’¶OK™ÒOLšEOMœéON×OOŸœOPW OQ\@ORƒÊOS— OT—«OUž´OVTOWz˜OX¤OYˆÙOZŽÍO[áO\XO]\HO^c˜O_zŸO`[®Oa_ObzyOcz®Od‚ŽOeެOfP&OgR8OhRøOiSwOjWOkbóOlcrOmk OnmÃOow7OpS¥OqsWOr…hOsŽvOt•ÕOug:OvjÃOwopOxŠmOyŽÌOz™KO{ùO|fwO}kxO~Œ´P!›hØP?iuP@–™PAPÅPBR¤PCRäPDaÃPEe¤PFh9PGiÿPHt~PI{KPJ‚¹PKƒëPL‰²PM‹9PNÑPO™IPPù PQNÊPRY—PSdÒPTfPUjŽPVt4PWyPXy½PY‚©PZˆ~P[ˆP\‰_P]ù P^“&P_O P`SÊPa`%PbbqPclrPd}Pe}fPfN˜PgQbPhwÜPi€¯PjOPkOPlQvPmQ€PnUÜPoVhPpW;PqWúPrWüPsYPtYGPuY“Pv[ÄPw\Px]Py]ñPz^~P{_ÌP|b€P}e×P~eãQ!gQ"gQ#g^Q$hËQ%hÄQ&j_Q'k:Q(l#Q)l}Q*l‚Q+mÇQ,s˜Q-t&Q.t*Q/t‚Q0t£Q1uxQ2uQ3xQ4xïQ5yAQ6yGQ7yHQ8yzQ9{•Q:}Q;}ºQ<ˆQ=€Q>€-Q?€ŒQ@ŠQA‹OQBŒHQCwQD“!QE“$QF˜âQG™QQHšQIšQJšeQKž’QL}ÊQMOvQNT QObîQPhTQQ‘ÑQRU«QSQ:QTù QUù QVZQWaæQXù QYbÏQZbÿQ[ùQ\ùQ]ùQ^ùQ_ùQ`ùQa£QbùQcùQdùQeùQfùQgŠþQhùQiùQjùQkùQlf–QmùQnqVQoùQpùQq–ãQrù QscOQtczQuSWQvù!QwgQxi`QynsQzù"Q{u7Q|ù#Q}ù$Q~ù%R!} R"ù&R#ù'R$ˆrR%VÊR&ZR'ù(R(ù)R)ù*R*ù+R+ù,R,NCR-ù-R.QgR/YHR0gðR1€R2ù.R3YsR4^tR5dšR6yÊR7_õR8`lR9bÈR:c{R;[çR<[×R=RªR>ù/R?YtR@_)RA`RBù0RCù1RDù2REtYRFù3RGù4RHù5RIù6RJù7RKù8RL™ÑRMù9RNù:ROù;RPùRSù?RTù@RUùARVùBRWùCRXoÃRYùDRZùER[¿R\²R]`ñR^ùFR_ùGR`fRaùHRbùIRc\?RdùJReùKRfùLRgùMRhùNRiùORjùPRkùQRlZéRmŠ%Rng{Ro}RpùRRqùSRrùTRsùURtùVRuùWRv€ýRwùXRxùYRy\fÇS?máS@n[SAomSBo¹SCuðSD€CSE½SF…ASG‰ƒSHŠÇSI‹ZSJ“SKl“SLuSSM{TSNŽSO]SPUSQXSRXXSS^bSTbSUdžSVhàSWuvSX|ÖSY‡³SZžèS[NãS\WˆS]WnS^Y'S_\ S`\±Sa^6Sb_…Scb4SddáSes³SfúSgˆ‹ShŒ¸Si–ŠSjžÛSk[…Sl_·Sm`³SnPSoRSpR0SqWSrX5SsXWSt\Su\`Sv\öSw]‹Sx^¦Sy_’Sz`¼S{cS|c‰S}dS~hCT!hùT"jÂT#mØT$n!T%nÔT&oäT'qþT(vÜT)wyT*y±T+z;T,„T-‰©T.ŒíT/óT0ŽHT1T2T3ST4ýT5“MT6–vT7—ÜT8kÒT9pT:rXT;r¢Ty¿T?{äT@~›TA‹€TBX©TC`ÇTDefTEeýTFf¾TGlŒTHqTIqÉTJŒZTK˜TLNmTMzTNNÝTOQ¬TPQÍTQRÕTRT TSa§TTgqTUhPTVhßTWmTXo|TYu¼TZw³T[zåT\€ôT]„cT^’…T_Q\T`e—Tag\Tbg“TcuØTdzÇTeƒsTfùZTgŒFThTi˜-Tj\oTkÀTl‚šTmATnoTo’ Tp_—Tq]TrjYTsqÈTtv{Tu{ITv…äTw‹Tx‘'Tyš0TzU‡T{aöT|ù[T}viT~…U!†?U"‡ºU#ˆøU$U%ù\U&mU'pÙU(sÞU)}aU*„=U+ù]U,‘jU-™ñU.ù^U/N‚U0SuU1kU2kU3p>U4rU5†-U6žU7RLU8£U9]PU:dåU;e,U|CU?~œU@…ÍUA‰dUB‰½UCbÉUDØUEˆUF^ÊUGgUHmjUIrüUJtUKtoUL‡‚UMÞUNO†UO] UP_ UQ„ URQ·USc UTueUUN®UVPUWQiUXQÉUYhUZjU[|®U\|±U]|çU^‚oU_ŠÒU`Ua‘ÏUbO¶UcQ7UdRõUeTBUf^ìUganUhb>UieÅUjjÚUkoþUly*Um…ÜUnˆ#Uo•­UpšbUqšjUrž—UsžÎUtR›UufÆUvkwUwpUxy+UybUz—BU{aU|bU}e#U~o#V!qIV"t‰V#}ôV$€oV%„îV&&V'#V(“JV)Q½V*RV+R£V,m V-pÈV.ˆÂV/^ÉV0e‚V1k®V2oÂV3|>V4suV5NäV6O6V7VùV8ù_V9\ºV:]ºV;`VšV?ÎV@€FVAVB’4VC–öVD—HVE˜VFŸaVGO‹VHo§VIy®VJ‘´VK–·VLRÞVMù`VNdˆVOdÄVPjÓVQo^VRpVSrVTvçVU€VV†VW†\VXïVYVZ—2V[›oV\úV]žuV^xŒV_yV`} VaƒÉVb“VcžVdž“VeŠÖVfXßVg_Vhg'Vip'VjtÏVk|`Vl€~VmQ!Vnp(VorbVpxÊVqŒÂVrŒÚVsŒôVt–÷VuN†VvPÚVw[îVx^ÖVye™VzqÎV{vBV|w­V}€JV~„üW!|W"›'W#ŸW$XØW%ZAW&\bW'jW(mÚW)oW*v;W+}/W,~7W-…W.‰8W/“äW0–KW1R‰W2eÒW3góW4i´W5mAW6nœW7pW8t W9t`W:uYW;v$W˜^W?QmW@b.WA–xWBO–WCP+WD]WEmêWF}¸WG*WH_‹WIaDWJhWKùaWL–†WMRÒWN€‹WOQÜWPQÌWQi^WRzWS}¾WTƒñWU–uWVOÚWWR)WXS˜WYTWZUW[\eW\`§W]gNW^h¨W_mlW`rWarøWbtWctƒWdùbWeuâWf|lWgyWh¸Wiƒ‰WjˆÏWkˆáWl‘ÌWm‘ÐWn–âWo›ÉWpTWqo~WrqÐWst˜Wt…úWuŽªWv–£WwœWWxžŸWyg—WzmËW{t3W|èW}—W~x,X!zËX"{ X#|’X$diX%tjX&uòX'x¼X(xèX)™¬X*›TX+ž»X,[ÞX-^UX.o X/œX0ƒ«X1ˆX2NX3SMX4Z)X5]ÒX6_NX7abX8c=X9fiX:füX;nÿXwžX?„,X@…XAˆ;XBXC™EXDœ;XEUXFb¹XGg+XHl«XIƒ XJ‰jXK—zXLN¡XMY„XN_ØXO_ÙXPgXQ}²XRTXS‚’XTƒ+XUƒ½XVXW™XXWËXYY¹XZZ’X[[ÐX\f'X]gšX^h…X_kÏX`qdXauXbŒ·XcŒãXdXe›EXfXgŒŠXh–LXiš@Xjž¥Xk[_XllXmsXnvòXovßXp„ XqQªXr‰“XsQMXtQ•XuRÉXvhÉXwl”XxwXyw Xz}¿X{}ìX|—bX}žµX~nÅY!…Y"Q¥Y#T Y$T}Y%fY&fY'i'Y(nŸY)v¿Y*w‘Y+ƒY,„ÂY-‡ŸY.‘iY/’˜Y0œôY1ˆ‚Y2O®Y3Q’Y4RßY5YÆY6^=Y7aUY8dxY9dyY:f®Y;gÐYkÛY?r_Y@raYAtAYBw8YCwÛYD€YE‚¼YFƒYG‹YH‹(YIŒŒYJg(YKlYLrgYMvîYNwfYOzFYP©YQkYRl’YSY"YTg&YU„™YVSoYWX“YXY™YY^ßYZcÏY[f4Y\gsY]n:Y^s+Y_z×Y`‚×Ya“(YbRÙYc]ëYda®YeaËYfb YgbÇYhd«YieàYjiYYkkfYlkËYmq!Yns÷You]Yp~FYq‚YrƒYs…jYtŠ£YuŒ¿Yv—'YwaYxX¨YyžØYzPY{RY|T;Y}UOY~e‡Z!lvZ"} Z#} Z$€^Z%†ŠZ&•€Z'–ïZ(RÿZ)l•Z*riZ+TsZ,ZšZ-\>Z.]KZ/_LZ0_®Z1g*Z2h¶Z3icZ4n\·Z?`¶Z@a ZAa«ZBeOZCeûZDeüZElZFlïZGsŸZHsÉZI}áZJ•”ZK[ÆZL‡ZM‹ZNR]ZOSZZPbÍZQdZRd²ZSg4ZTj8ZUlÊZVsÀZWtžZX{”ZY|•ZZ~Z[ŠZ\‚6Z]…„Z^ëZ_–ùZ`™ÁZaO4ZbSJZcSÍZdSÛZebÌZfd,ZgeZhe‘ZiiÃZjlîZkoXZlsíZmuTZnv"ZoväZpvüZqxÐZrxûZsy,Zt}FZu‚,Zv‡àZwÔZx˜Zy˜ïZzRÃZ{bÔZ|d¥Z}n$Z~oQ[!v|["Ë[#‘±[$’b[%šî[&›C['P#[(P[)WJ[*Y¨[+\([,^G[-_w[.b?[/e>[0e¹[1eÁ[2f [3g‹[4iœ[5nÂ[6xÅ[7}![8€ª[9€[:‚+[;‚³[<„¡[=†Œ[>Š*[?‹[@¦[A–2[BŸ[CP [DOó[Eùc[FWù[G_˜[HbÜ[Ic’[Jgo[KnC[Lq[MvÃ[N€Ì[O€Ú[Pˆô[Qˆõ[R‰[SŒà[T)[U‘M[V–j[WO/[XOp[Y^gÏ[[h"[\v}[]v~[^›D[_^a[`j [aqi[bqÔ[cuj[dùd[e~A[f…C[g…é[h˜Ü[iO[j{O[kp[l•¥[mQá[n^[ohµ[pl>[qlN[rlÛ[sr¯[t{Ä[uƒ[vlÕ[wt:[xPû[yRˆ[zXÁ[{dØ[|j—[}t§[~vV\!x§\"†\#•â\$—9\%ùe\&S^\'_\(‹Š\)¨\*¯\+Š\,R%\-w¥\.œI\/Ÿ\0N\1P\2Qu\3\[\4^w\5f\6f:\7gÄ\8hÅ\9p³\:u\;uÅ\'\?™ \@š\AOÝ\BX!\CX1\D[ö\Efn\Fke\Gm\Hnz\Io}\Jsä\Ku+\Lƒé\MˆÜ\N‰\O‹\\P\QO\RPÕ\SS\TS\\U[“\V_©\Wg \Xy\Yy\Zƒ/\[…\\‰\]‰†\^9\_;\`™¥\aœ\bg,\cNv\dOø\eYI\f\\g\ï\h\ð\icg\jhÒ\kpý\lq¢\mt+\n~+\o„ì\p‡\q"\r’Ò\sœó\tN \uNØ\vOï\wP…\xRV\yRo\zT&\{T\|Wà\}Y+\~Zf]![Z]"[u]#[Ì]$^œ]%ùf]&bv]'ew](e§])mn]*n¥]+r6],{&]-|?].6]/P]0Q]1š]2‚@]3‚™]4ƒ©]5Š]6Œ ]7Œæ]8Œû]9t]:º];è]<‘Ü]=–]>–D]?™Ù]@œç]AS]BR]CT)]DVt]EX³]FYT]GYn]H_ÿ]Ia¤]Jbn]Kf]Ll~]Mq]NvÆ]O|‰]P|Þ]Q}]R‚¬]SŒÁ]T–ð]Uùg]VO[]W_]X_]YbÂ]Z])][g ]\hÚ]]x|]^~C]_l]`N]aP™]bS]cS*]dSQ]eYƒ]fZb]g^‡]h`²]iaŠ]jbI]kby]le]mg‡]ni§]okÔ]pkÖ]qk×]rkØ]sl¸]tùh]ut5]vuú]wx]xx‘]yyÕ]zyØ]{|ƒ]|}Ë]}á]~€¥^!>^"Â^#ƒò^$‡^%ˆè^&й^'‹l^(Œ»^)‘^*—^^+˜Û^,Ÿ;^-V¬^.[*^/_l^0eŒ^1j³^2k¯^3m\^4oñ^5p^6r]^7s­^8Œ§^9ŒÓ^:˜;^;a‘^š^?NM^@N‹^AN›^BNÕ^CO:^DO<^EO^FOß^GPÿ^HSò^ISø^JU^KUã^LVÛ^MXë^NYb^OZ^P[ë^Q[ú^R\^S]ó^T^+^U_™^V`^Wch^Xeœ^Ye¯^Zgö^[gû^\h­^]k{^^l™^_l×^`n#^ap ^bsE^cx^dy>^ey@^fy`^gyÁ^h{é^i}^j}r^k€†^l‚ ^mƒŽ^n„Ñ^o†Ç^pˆß^qŠP^rŠ^^s‹^tŒÜ^uf^v­^wª^x˜ü^y™ß^zž^{RJ^|ùi^}g^~ùj_!P˜_"R*_#\q_$ec_%lU_&sÊ_'u#_(u_){—_*„œ_+‘x_,—0_-Nw_.d’_/kº_0q^_1…©_2N _3ùk_4gI_5hî_6n_7‚Ÿ_8…_9ˆk_:c÷_;o_<’_=˜¯_>N _?P·_@PÏ_AQ_BUF_CUª_DV_E[@_F\_G\à_H^8_I^Š_J^ _K^Â_L`ó_MhQ_Nja_OnX_Pr=_Qr@_RrÀ_Svø_Tye_U{±_VÔ_Wˆó_X‰ô_YŠs_ZŒa_[ŒÞ_\—_]X^_^t½__Œý_`UÇ_aùl_bza_c}"_d‚r_err_fu_gu%_hùm_i{_jX…_kXû_l]¼_m^_n^¶_o__p`U_qb’_rc_seM_tf‘_ufÙ_vfø_wh_xhò_yr€_zt^_{{n_|}n_}}Ö_~r`!€å`"‚`#…¯`$‰`%Š“`&`'’ä`(žÍ`)Ÿ `*Y`+Ym`,^-`-`Ü`.f`/fs`0g`1lP`2mÅ`3o_`4wó`5x©`6„Æ`7‘Ë`8“+`9NÙ`:PÊ`;QH`[£`?bG`@e~`AeË`Bn2`Cq}`Dt`EtD`Ft‡`Gt¿`Hvl`Iyª`J}Ú`K~U`L¨`Mz`N³`O‚9`P†`Q‡ì`RŠu`Sã`Tx`U’‘`V”%`W™M`X›®`YSh`Z\Q`[iT`\lÄ`]m)`^n+`_‚ ``…›`a‰;`bŠ-`cŠª`d–ê`eŸg`fRa`gf¹`hk²`i~–`j‡þ`k `l•ƒ`m–]`ne`om‰`pqî`qùn`rWÎ`sYÓ`t[¬`u`'`v`ú`wb`xf`yf_`zs)`{sù`|vÛ`}w`~{la!€Va"€ra#ea$Š a%‘’a&Na'Râa(kra)ma*za+{9a,}0a-ùoa.Œ°a/Sìa0V/a1XQa2[µa3\a4\a5]âa6b@a7cƒa8da9f-a:h³a;l¼apa?p¤a@qÒaAu&aBuaCuŽaDvaE{aF{àaG|+aH} aI}9aJ…,aK…maL†aMŠ4aN aOaaPµaQ’·aR—öaSš7aTO×aU\laVg_aWm‘aX|ŸaY~ŒaZ‹a[a\a][ka^]ýa_d a`„Àaa\ab˜áacs‡ad[‹ae`šafg~agmÞahŠaiЦajak˜ alR7amùpanpQaoxŽap“–aqˆpar‘×asOîatS×auUýavVÚawW‚axXýayZÂaz[ˆa{\«a|\Àa}^%a~ab!b b"bKb#cˆb$db%e6b&exb'j9b(kŠb)l4b*mb+o1b,qçb-réb.sxb/tb0t²b1v&b2wab3yÀb4zWb5zêb6|¹b7}b8}¬b9~ab:žb;)b<ƒ1b=„b>„Úb?…êb@ˆ–bAаbB‹bC8bDBbEƒbF‘lbG’–bH’¹bI–‹bJ–§bK–¨bL–ÖbM—bN˜bO™–bPšÓbQ›bRSÔbSX~bTYbU[pbV[¿bWmÑbXoZbYqŸbZt!b[t¹b\€…b]ƒýb^]áb__‡b`_ªba`BbbeìbchbdiobejSbfk‰bgm5bhmóbisãbjvþbkw¬bl{Mbm}bn#bo‚bpƒ@bq„ôbr…cbsŠbbtŠÄbu‘‡bv“bw˜bx™´byb bzˆSb{ðb|’eb}]b~]'c!]ic"t_c#c$‡hc%oÕc&bþc'Òc(‰6c)‰rc*Nc+NXc,Pçc-RÝc.SGc/bc0fc1~ic2ˆc3–^c4Oc5Sc6V6c7YËc8Z¤c9\8c:\Nc;\Mc<^c=_c>`Cc?e½c@f/cAfBcBg¾cCgôcDscEwâcFy:cGÅcH„”cI„ÍcJ‰–cKŠfcLŠicMŠácNŒUcOŒzcPWôcQ[ÔcR_cS`ocTbícUi cVk–cWn\cXq„cY{ÒcZ‡Uc[‹Xc\Žþc]˜ßc^˜þc_O8c`OcaOácbT{ccZ cd[¸ceaX d?\³d@]½dA^DdB`ádCadDcádEjdFn%dG‘dH“TdI˜NdJœdKŸwdL[‰dM\¸dNc dOfOdPhHdQw[Ce?`Ye@cÚeAeeBemeCf˜eDùzeEiJeFj#eGm eHpeIqleJuÒeKv eLy³eMzpeNù{eOŠePù|eQ‰DeRù}eS‹“eT‘ÀeU–}eVù~eW™ eXWeY_¡eZe¼e[oe\ve]y¦e^Šže_™­e`›ZeaŸlebQeca¶edb‘eejefÆegPCehX0ei_fejq ekŠelŠúem[|en†eoOúepQš[f?V¥f@X'fAYøfBZfC[´fDùŽfE^öfFùfGùfHcPfIc;fJù‘fKi=fLl‡fMl¿fNmŽfOm“fPmõfQofRù’fSpßfTq6fUqYfVù“fWqÃfXqÕfYù”fZxOf[xof\ù•f]{uf^}ãf_ù–f`~/faù—fbˆMfcŽßfdù˜feù™ffùšfg’[fhù›fiœöfjùœfkùflùžfm`…fnm…foùŸfpq±fqù frù¡fs•±ftS­fuù¢fvù£fwù¤fxgÓfyù¥fzpŽf{q0f|t0f}‚vf~‚Òg!ù¦g"•»g#šåg$ž}g%fÄg&ù§g'qÁg(„Ig)ù¨g*ù©g+XKg,ùªg-ù«g.]¸g/_qg0ù¬g1f g2fŽg3iyg4i®g5l8g6lóg7n6g8oAg9oÚg:pg;p/gspg?ù­g@t[gAù®gBtÔgCvÈgDzNgE~“gFù¯gGù°gH‚ñgIŠ`gJÎgKù±gL“HgMù²gN—gOù³gPù´gQNBgRP*gSùµgTRgUSágVfógWlmgXoÊgYs gZwg[zbg\‚®g]…Ýg^†g_ù¶g`ˆÔgaŠcgb‹}gcŒkgdù·ge’³gfù¸gg—gh˜giN”gjO gkOÉglP²gmSHgnT>goT3gpUÚgqXbgrXºgsYggtZgu[ägv`Ÿgwù¹gxaÊgyeVgzeÿg{fdg|h§g}lZg~o³h!pÏh"q¬h#sRh${}h%‡h&Фh'œ2h(Ÿh)\Kh*lƒh+sDh,s‰h-’:h.n«h/teh0vh1zih2~h3† h4Q@h5XÅh6dÁh7tîh8uh9vph:Áh;•h<–Íh=™Th>n&h?tæh@z©hAzªhBåhC†ÙhD‡xhEŠhFZIhG[ŒhH[›hIh¡hJihKmchLs©hMthNt,hOx—hP}éhQëhRhSUhTƒžhUŒLhV–.hW˜hXfðhY_€hZeúh[g‰h\ljh]s‹h^P-h_Zh`kjhawîhbYhc]lhd]Íhes%hfuOhgùºhhù»hiPåhjQùhkX/hlY-hmY–hnYÚho[åhpù¼hqù½hr]¢hsb×htdhud“hvdþhwù¾hxfÜhyù¿hzjHh{ùÀh|qÿh}tdh~ùÁi!zˆi"z¯i#~Gi$~^i%€i&pi'ùÂi(‡ïi)‰i*‹ i+Yi,ùÃi-€i.™Ri/a~i0k2i1mti2~i3‰%i4±i5OÑi6P­i7Q—i8RÇi9WÇi:X‰i;[¹i<^¸i=aBi>i•i?mŒi@ngiAn¶iBq”iCtbiDu(iEu,iF€siGƒ8iH„ÉiIŽ iJ“”iK“ÞiLùÄiMNŽiNOQiOPviPQ*iQSÈiRSËiSSóiT[‡iU[ÓiV\$iWaiXa‚iYeôiZr[i[s—i\t@i]vÂi^yPi_y‘i`y¹ia}ib½ic‚‹id…Õie†^ifÂigGihõii‘êij–…ik–èil–éimRÖin_gioeíipf1iqh/irq\isz6itÁiu˜ ivN‘iwùÅixjRiykžizoi{q‰i|€i}‚¸i~…Sj!Kj"–•j#–òj$—ûj%…j&›1j'Nj(qŠj)–Äj*QCj+SŸj,Táj-Wj.Wj/W£j0Z›j1ZÄj2[Ãj3`(j4a?j5côj6l…j7m9j8nrj9nj:r0j;s?jˆj?Ej@`jAùÆjB–bjC˜XjDjEgjFŠjG’^jHOMjIPIjJPÞjKSqjLW jMYÔjNZjO\ jPapjQfjRn-jSr2jTtKjU}ïjV€ÃjW„jX„fjY…?jZ‡_j[ˆ[j\‰j]‹j^Uj_—Ëj`›OjaNsjbO‘jcQjdQjjeùÇjfU/jgU©jh[zji[¥jj^|jk^}jl^¾jm` jn`ßjoajpa jqcÄjre8jsg jtùÈjugÔjvgÚjwùÉjxiajyibjzl¹j{m'j|ùÊj}n8j~ùËk!oák"s6k#s7k$ùÌk%t\k&u1k'ùÍk(vRk)ùÎk*ùÏk+}­k,þk-„8k.ˆÕk/Š˜k0ŠÛk1Šík2Ž0k3ŽBk4Jk5>k6zk7‘Ik8‘Ék9“nk:ùÐk;ùÑkkÓk?€‰k@€²kAùÓkBùÔkCQAkDYkkE\9kFùÕkGùÖkHodkIs§kJ€äkKkLù×kM’kN•kOùØkPùÙkQùÚkRùÛkS€kTbkUpkV}hkW‡kXùÜkYW kZ`ik[aGk\k·k]оk^’€k_–±k`NYkaTkbmëkc…-kd–pke—ókf˜îkgcÖkhlãki‘kjQÝkkaÉklºkmùknOkoPkpQkq[œkraksaÿktdìkuikvkÅkwu‘kxwãky©kz‚dk{…k|‡ûk}ˆck~мl!‹pl"‘«l#NŒl$Nål%O l&ùÝl'ùÞl(Y7l)Yèl*ùßl+]òl,_l-_[l.`!l/ùàl0ùál1ùâl2ùãl3r>l4sål5ùäl6upl7uÍl8ùål9yûl:ùæl;€ l<€3l=€„l>‚ál?ƒQl@ùçlAùèlBŒ½lCŒ³lD‡lEùélFùêlG˜ôlH™ lIùëlJùìlKp7lLvÊlMÊlNÌlOülP‹lQNºlRNÁlSRlTSplUùílVT½lWVàlXYûlY[ÅlZ_l[_Íl\nnl]ùîl^ùïl_}jl`ƒ5laùðlb†“lcŠldùñle—mlf—wlgùòlhùóliNljOZlkO~llXùlmeålnn¢lo8lp“°lq™¹lrNûlsXìltYŠluYÙlv`Alwùôlxùõlyzlzùöl{ƒOl|ŒÃl}Qel~SDm!ù÷m"ùøm#ùùm$NÍm%Rim&[Um'‚¿m(NÔm)R:m*T¨m+YÉm,Yÿm-[Pm.[Wm/[\m0`cm1aHm2nËm3p™m4qnm5s†m6t÷m7uµm8xÁm9}+m:€m;êm<ƒ(m=…m>…Ém?Šîm@ŒÇmA–ÌmBO\mCRúmDV¼mEe«mFf(mGp|mHp¸mIr5mJ}½mK‚mL‘LmM–ÀmNrmO[qmPhçmQk˜mRozmSvÞmT\‘mUf«mVo[mW{´mX|*mYˆ6mZ–Üm[Nm\N×m]S m^X4m_X»m`XïmaYlmb\mc^3md^„me_5mfcŒmgf²mhgVmijmjj£mkk mlo?mmrFmnùúmosPmpt‹mqzàmr|§msxmtßmuçmvƒŠmw„lmx…#my…”mz…Ïm{ˆÝm|m}‘¬m~•wn!–œn"Qn#TÉn$W(n%[°n&bMn'gPn(h=n)h“n*n=n+nÓn,p}n-~!n.ˆÁn/Œ¡n0 n1ŸKn2ŸNn3r-n4{n5ŠÍn6“n7OGn8ONn9Q2n:T€n;YÐn<^•n=bµn>gun?inn@jnAl®nBnnCrÙnDs*nEu½nF{¸nG}5nH‚çnIƒùnJ„WnK…÷nLŠ[nMŒ¯nNއnOnP¸nQ–ÎnRŸ_nSRãnTT nUZánV[ÂnWdXnXeunYnônZrÄn[ùûn\v„n]zMn^{n_|Mn`~>naßnbƒ{nc‹+ndŒÊnednfángŽ_nhêniùnjink“ÑnlOCnmOznnP³noQhnpQxnqRMnrRjnsXantX|nuY`nv\nw\Unx^Ûny`›nzb0n{hn|k¿n}ln~o±o!qNo"t o#u0o$u8o%uQo&vro'{Lo({‹o){­o*{Æo+~o,Šno->o.Io/’?o0’“o1“"o2”+o3–ûo4˜Zo5˜ko6™o7Ro8b*o9b˜o:mYo;vdo}vo?S`o@\¾oA^—oBo8oCp¹oD|˜oE—oF›ŽoGžÞoHc¥oIdzoJ‡voKNoLN•oMN­oNP\oOPuoPTHoQYÃoR[šoS^@oT^­oU^÷oV_oW`ÅoXc:oYe?oZeto[eÌo\fvo]fxo^gþo_iho`j‰oakcobl@ocmÀodmèoenofn^ogpohp¡oisŽojsýoku:olw[omx‡onyŽooz opz}oq|¾or}Žos‚GotŠouŠêovŒžow‘-ox‘Joy‘Øoz’fo{’Ìo|“ o}—o~—Vp!—\p"˜p#Ÿp$R6p%R‘p&U|p'X$p(^p)_p*`Œp+cÐp,h¯p-oßp.ymp/{,p0Íp1…ºp2ˆýp3Šøp4ŽDp5‘p6–dp7–›p8—=p9˜Lp:ŸJp;OÎpR©p?V2p@_pA_kpBcªpCdÍpDeépEfApFfúpGfùpHgpIhpJh×pKiýpLopMonpNqgpOqåpPr*pQtªpRw:pSyVpTyZpUyßpVz pWz•pX|—pY|ßpZ}Dp[~pp\€‡p]…ûp^†¤p_ŠTp`Š¿pa™pbŽpc pdmpe‘ãpf–;pg–ÕphœåpieÏpj|pk³pl“Ãpm[Xpn\ poSRppbÙpqsprP'ps[—pt_žpu`°pvakpwhÕpxmÙpyt.pzz.p{}Bp|}œp}~1p~kq!Ž*q"Ž5q#“~q$”q%OPq&WPq']æq(^§q)c+q*jq+N;q,OOq-Oq.PZq/YÝq0€Äq1Tjq2Thq3Uþq4YOq5[™q6]Þq7^Úq8f]q9g1q:gñq;h*qnJq?oq@p·qAsàqBu‡qC|LqD}qE},qF}¢qG‚qH†ÛqIŠ;qJŠ…qKpqLŽŠqM3qN1qO‘NqP‘RqQ”DqR™ÐqSzùqT|¥qUOÊqVQqWQÆqXWÈqY[ïqZ\ûq[fYq\j=q]mZq^n–q_oìq`q qauoqbzãqcˆ"qd!qeuqf–Ëqg™ÿqhƒqiN-qjNòqkˆFql‘ÍqmS}qnjÛqoikqplAqq„zqrXžqsaŽqtfþqubïqvpÝqwuqxuÇqy~Rqz„¸q{‹Iq|q}NKq~Sêr!T«r"W0r#W@r$_×r%cr&cr'dor(e/r)eèr*fzr+gr,g³r-kbr.l`r/lšr0o,r1wår2x%r3yIr4yWr5}r6€¢r7r8ór9‚r:‚·r;‡r<ŠŒr=ùür>r?¾r@rrAvôrBzrCz7rD~TrE€wrFUrGUÔrHXurIc/rJd"rKfIrLfKrMhmrNi›rOk„rPm%rQn±rRsÍrSthrTt¡rUu[rVu¹rWvárXwrYw‹rZyær[~ r\~r]ûr^…/r_ˆ—r`Š:raŒÑrbŽërc°rd2re“­rf–crg–srh—riO„rjSñrkYêrlZÉrm^rnhNrotÆrpu¾rqyérrz’rs£rt†íruŒêrvÌrwírxeŸrygrzùýr{W÷r|oWr}}Ýr~/s!“ös"–Æs#_µs$aòs%o„s&Ns'O˜s(Ps)SÉs*Ußs+]os,]îs-k!s.kds/xËs0{šs1ùþs2ŽIs3ŽÊs4ns5cIs6d>s7w@s8z„s9“/s:”s;Ÿjsqæs?t¨s@tÚsAzÄsB|sC~‚sD|²sE~˜sF‹šsG sH”}sI™sJ™LsKR9sL[ßsMdæsNg-sO}.sPPísQSÃsRXysSaXsTaYsUaúsVe¬sWzÙsX‹’sY‹–sZP s[P!s\Rus]U1s^Zzt?‚t@…¦tAŒätBŽtCwtD‘çtE•átF–!tG—ÆtHQøtITòtJU†tK_¹tLd¤tMoˆtN}´tOtPMtQ”5tRPÉtS\tTl¾tUmûtVutWw»tX|=tY|dtZŠyt[ŠÂt\Xt]Y¾t^^t_cwt`rRtauŠtbwktcŠÜtdŒ¼tetf^ótgftthmøti€}tjƒÁtkŠËtl—Qtm›ÖtnútoRCtpfÿtqm•trnïts}àttŠætu.tv^twšÔtxRtyRtzTèt{a”t|b„t}bÛt~h¢u!iu"iZu#j5u$p’u%q&u&x]u'yu(yu)yÒu*z u+€–u,‚xu-‚Õu.ƒIu/…Iu0Œ‚u1…u2‘bu3‘‹u4‘®u5OÃu6VÑu7qíu8w×u9‡u:‰øu;[øu<_Öu=gQu>¨u?Sâu@XZuA[õuB`¤uCauDd`uE~=uF€puG…%uH’ƒuId®uJP¬uK]uLguMXœuNb½uOc¨uPiuQixuRjuSnkuTvºuUyËuV‚»uW„)uXŠÏuY¨uZýu[‘u\‘Ku]‘œu^“u_“u`“šua–Ûubš6ucœ udNueu\ufy]ugzúuh{Qui{Éuj~.uk„ÄulŽYumŽtunŽøuoupf%uqi?urtCusQúutg.uužÜuvQEuw_àuxl–uy‡òuzˆ]u{ˆwu|`´u}µu~„v!v"SÖv#T9v$V4v%Z6v&\1v'pŠv(àv)€Zv*v+ív,£v-‘‰v.š_v/òv0Ptv1NÄv2S v3`ûv4n,v5\dv6Oˆv7P$v8Uäv9\Ùv:^_v;`evmÄv?q¾v@uÔvAuôvBvavCzvDzIvE}ÇvF}ûvGnvHôvI†©vJvK–ÉvL™³vMŸRvNRGvORÅvP˜ívQ‰ªvRNvSgÒvTovUOµvV[âvWg•vXlˆvYmxvZtv[x'v\‘Ýv]“|v^‡Äv_yäv`z1va_ëvbNÖvcT¤vdU>veX®vfY¥vg`ðvhbSvibÖvjg6vkiUvl‚5vm–@vn™±vo™ÝvpP,vqSSvrUDvsW|vtúvubXvvúvwdâvxfkvygÝvzoÁv{oïv|t"v}t8v~Šw!”8w"TQw#Vw$Wfw%_Hw&ašw'kNw(pXw)p­w*}»w+Š•w,Yjw-+w.c¢w/ww0€=w1Œªw2XTw3d-w4i»w5[•w6^w7now8úw9…iw:QLw;SðwaKw?k†w@lpwAlðwB{wC€ÎwD‚ÔwEÆwF°wG˜±wHúwIdÇwJo¤wKd‘wLewMQNwNTwOWwPŠwQa_wRhvwSúwTuÛwU{RwV}qwWwXXwYiÌwZw[‰*w\w]˜9w^Pxw_YWw`Y¬wab•wbwc›*wda]werywf•ÖwgWawhZFwi]ôwjbŠwkd­wldúwmgwwnlâwom>wpr,wqt6wrx4wswwt‚­wuÛwv˜wwR$wxWBwygwzrHw{tãw|Œ©w}¦w~’x!–*x"Qkx#Síx$cLx%Oix&Ux'`–x(eWx)l›x*mx+rLx,rýx-zx.‰‡x/Œx0_mx1oŽx2pùx3¨x4ax5O¿x6POx7bAx8rGx9{Çx:}èx;éxšx?Œ¶x@WjxA^sxBg°xC„ xDŠUxET xF[xG^cxH^âxI_ xJeƒxK€ºxL…=xM•‰xN–[xOOHxPSxQS xRSxST†xTTúxUWxV^xW`xXb›xYb±xZcUx[úx\láx]mfx^u±x_x2x`€Þxa/xb‚Þxc„axd„²xeˆxf‰xg xh’êxi˜ýxj›‘xk^Exlf´xmfÝxnpxorxpúxqOõxrR}xs_jxtaSxugSxvjxwoxxtâxyyhxzˆhx{Œyx|˜Çx}˜Äx~šCy!TÁy"zy#iSy$Š÷y%ŒJy&˜¨y'™®y(_|y)b«y*u²y+v®y,ˆ«y-y.–By/S9y0_Yy?^Èy@f0yAl³yBtUyCƒwyD‡fyEŒÀyFPyG—yHœyIXÑyJ[xyK†PyL‹yM´yN[ÒyO`hyP`yQeñyRlWySo"yTo£yUpyVUyWðyX•‘yY•’yZ–Py[—Óy\Rry]Dy^Qýy_T+y`T¸yaUcybUŠycj»ydmµye}Øyf‚fyg’œyh–wyižyyjTykTÈylvÒym†äyn•¤yo•Ôyp–\yqN¢yrO ysYîytZæyu]÷yv`Rywb—yxgmyyhAyzl†y{n/y|8y}€›y~‚*z!úz"ú z#˜z$N¥z%PUz&T³z'W“z(YZz)[iz*[³z+aÈz,iwz-mwz.p#z/‡ùz0‰ãz1Šrz2Šçz3‚z4™íz5š¸z6R¾z7h8z8Pz9^xz:gOz;ƒGz<ˆLz=N«z>Tz?V®z@sæzA‘zB—ÿzC™ zD™WzE™™zFVSzGXŸzH†[zIŠ1zJa²zKjözLs{zMŽÒzNkGzO–ªzPšWzQYUzRrzSkzT—izUOÔzV\ôzW_&zXaøzYf[zZlëz[p«z\s„z]s¹z^sþz_w)z`wMza}Czb}bzc~#zd‚7zeˆRzfú zgŒâzh’Izi˜ozj[Qzkztzlˆ@zm˜znZÌzoOàzpSTzqY>zr\ýzsc>ztmyzurùzvzwzxƒ¢zy’Ïzz˜0z{N¨z|QDz}Rz~W‹{!_b{"lÂ{#nÎ{$p{%pP{&p¯{'q’{(sé{)ti{*ƒJ{+‡¢{,ˆa{-{.¢{/“£{0™¨{1Qn{2_W{3`à{4ag{5f³{6…Y{7ŽJ{8‘¯{9—‹{:NN{;N’{Xú{?Y}{@\µ{A_'{Bb6{CbH{Df {Efg{Fkë{Gmi{HmÏ{InV{Jnø{Ko”{Loà{Moé{Np]{OrÐ{Pt%{QtZ{Rtà{Sv“{Ty\{U|Ê{V~{W€á{X‚¦{Y„k{Z„¿{[†N{\†_{]‡t{^‹w{_Œj{`“¬{a˜{b˜e{c`Ñ{db{e‘w{fZZ{gf{hm÷{in>{jt?{k›B{l_ý{m`Ú{n{{oTÄ{p_{ql^{rlÓ{sm*{tpØ{u}{v†y{wŠ {x;{yS{zTŒ{{[{|j:{}pk{~uu|!y|"y¾|#‚±|$ƒï|%Šq|&‹A|'Œ¨|(—t|)ú |*dô|+e+|,xº|-x»|.zk|/N8|0Uš|1YP|2[¦|3^{|4`£|5cÛ|6ka|7fe|8hS|9n|:qe|;t°|<}|=„|>ši|?œ%|@m;|AnÑ|Bs>|CŒA|D•Ê|EQð|F^L|G_¨|H`M|I`ö|Ja0|KaL|LfC|MfD|Ni¥|OlÁ|Pn_|QnÉ|Rob|SqL|Ttœ|Uv‡|V{Á|W|'|XƒR|Y‡W|ZQ|[–|\žÃ|]S/|^VÞ|_^û|`_Š|a`b|b`”|ca÷|dff|eg|fjœ|gmî|ho®|ipp|jsj|k~j|l¾|mƒ4|n†Ô|oЍ|pŒÄ|qRƒ|rsr|s[–|tjk|u”|vTî|wV†|x[]|yeH|ze…|{fÉ||hŸ|}m|~mÆ}!r;}"€´}#‘u}$šM}%O¯}&P}'Sš}(T})T<}*U‰}+UÅ},^?}-_Œ}.g=}/qf}0sÝ}1}2RÛ}3Ró}4Xd}5XÎ}6q}7q}8qû}9…°}:Š};fˆ}<…¨}=U§}>f„}?qJ}@„1}ASI}BU™}CkÁ}D_Y}E_½}Fcî}Gf‰}HqG}IŠñ}J}Kž¾}LO}Md:}NpË}Ouf}P†g}Q`d}R‹N}Sø}TQG}UQö}VS}Wm6}X€ø}YžÑ}Zf}[k#}\p˜}]uÕ}^T}_\y}`}}aŠ}bk }ck=}dkF}eT8}f`p}gm=}hÕ}i‚}jPÖ}kQÞ}lUœ}mVk}nVÍ}oYì}p[ }q^ }ra™}sa˜}tb1}uf^}vfæ}wq™}xq¹}yqº}zr§}{y§}|z}}²}~Špscreen-4.9.1/utf8encodings/d60000664000175000017500000000032414467014146014474 0ustar alexalexScreenI2UTF8Ö.ISO-8859-10¡¢£"¤*¥(¦6¨;©ª`«f¬}®j¯J±²³#´+µ)¶7¸<¹ºa»g¼~½ ¾k¿KÀÇ.È ÊÌÑEÒL×hÙràç/è êìñFòM÷iùsÿ8screen-4.9.1/utf8encodings/c70000664000175000017500000000006414467014146014475 0ustar alexalexScreenI2UTF8ÇISO-8859-6¬ »¿€Ú:à@€òRscreen-4.9.1/utf8encodings/c60000664000175000017500000000010414467014146014467 0ustar alexalexScreenI2UTF8Æ ISO-8859-7¡½¢¼¯ ´„€¶†¸ˆ€ºмŒ¾Ž€ÿÏscreen-4.9.1/utf8encodings/c20000664000175000017500000000040014467014146014462 0ustar alexalexScreenI2UTF8Â9ISO-8859-2¡¢Ø£A¥=¦Z©`ª^«d¬y®}¯{±²Û³Bµ>¶[·ǹaº_»e¼z½ݾ~¿|ÀTÃÅ9ÆÈ ÊÌÏÐÑCÒGÕPØXÙnÛpÞbàUãå:æè êìïðñDòHõQøYùoûqþcÿÙscreen-4.9.1/utf8encodings/190000664000175000017500000027304014467014146014423 0ustar alexalexScreenI2UTF8]ƒGBK@NANBNCNDNENFNGNHN IN!JN#KN&LN)MN.NN/ON1PN3QN5RN7SN<TN@UNAVNBWNDXNFYNJZNQ[NU\NW]NZ^N[_Nb`NcaNdbNecNgdNheNjfNkgNlhNmiNnjNokNrlNtmNunNvoNwpNxqNyrNzsN{tN|uN}vNwN€xNyN‚zNƒ{N„|N…}N‡~NŠ€NN–‚N—ƒN™„Nœ…N†Nž‡N£ˆNª‰N¯ŠN°‹N±ŒN´N¶ŽN·N¸N¹‘N¼’N½“N¾”NÈ•NÌ–NÏ—NИNÒ™NÚšNÛ›NÜœNàNâžNæŸNç Né¡Ní¢Nî£Nï¤Nñ¥Nô¦Nø§Nù¨Nú©NüªNþ«O¬O­O®O¯O°O±O²O³O ´O µO¶O·O¸O¹OºO»O¼O!½O#¾O(¿O)ÀO,ÁO-ÂO.ÃO1ÄO3ÅO5ÆO7ÇO9ÈO;ÉO>ÊO?ËO@ÌOAÍOBÎODÏOEÐOGÑOHÒOIÓOJÔOKÕOLÖOR×OTØOVÙOaÚObÛOfÜOhÝOjÞOkßOmàOnáOqâOrãOuäOwåOxæOyçOzèO}éO€êOëO‚ìO…íO†îO‡ïOŠðOŒñOŽòOóO’ôO“õO•öO–÷O˜øO™ùOšúOœûOžüOŸýO¡þO¢@O¤AO«BO­CO°DO±EO²FO³GO´HO¶IO·JO¸KO¹LOºMO»NO¼OO½PO¾QOÀROÁSOÂTOÆUOÇVOÈWOÉXOËYOÌZOÍ[OÒ\OÓ]OÔ^OÕ_OÖ`OÙaOÛbOàcOâdOäeOåfOçgOëhOìiOðjOòkOôlOõmOönO÷oOùpOûqOürOýsOÿtPuPvPwPxPyPzP{P|P}P ~P €P P‚PƒP„P…P†P‡PˆP‰PŠP‹P ŒP"P#ŽP$P'P+‘P/’P0“P1”P2•P3–P4—P5˜P6™P7šP8›P9œP;P=žP?ŸP@ PA¡PB¢PD£PE¤PF¥PI¦PJ§PK¨PM©PPªPQ«PR¬PS­PT®PV¯PW°PX±PY²P[³P]´P^µP_¶P`·Pa¸Pb¹PcºPd»Pf¼Pg½Ph¾Pi¿PjÀPkÁPmÂPnÃPoÄPpÅPqÆPrÇPsÈPtÉPuÊPxËPyÌPzÍP|ÎP}ÏPÐP‚ÑPƒÒP„ÓP†ÔP‡ÕP‰ÖPŠ×P‹ØPŒÙPŽÚPÛPÜP‘ÝP’ÞP“ßP”àP•áP–âP—ãP˜äP™åPšæP›çPœèPéPžêPŸëP ìP¡íP¢îP¤ïP¦ðPªñP«òP­óP®ôP¯õP°öP±÷P³øP´ùPµúP¶ûP·üP¸ýP¹þP¼@P½AP¾BP¿CPÀDPÁEPÂFPÃGPÄHPÅIPÆJPÇKPÈLPÉMPÊNPËOPÌPPÍQPÎRPÐSPÑTPÒUPÓVPÔWPÕXP×YPØZPÙ[PÛ\PÜ]PÝ^PÞ_Pß`PàaPábPâcPãdPäePåfPègPéhPêiPëjPïkPðlPñmPònPôoPöpP÷qPørPùsPútPüuPývPþwPÿxQyQzQ{Q|Q}Q~Q€Q Q ‚Q ƒQ „Q…Q†Q‡QˆQ‰QŠQ‹QŒQQŽQQQ‘Q’Q“Q”Q•Q –Q"—Q#˜Q$™Q%šQ&›Q'œQ(Q)žQ*ŸQ+ Q,¡Q-¢Q.£Q/¤Q0¥Q1¦Q2§Q3¨Q4©Q5ªQ6«Q7¬Q8­Q9®Q:¯Q;°Q<±Q=²Q>³QB´QGµQJ¶QL·QN¸QO¹QPºQR»QS¼QW½QX¾QY¿Q[ÀQ]ÁQ^ÂQ_ÃQ`ÄQaÅQcÆQdÇQfÈQgÉQiÊQjËQoÌQrÍQzÎQ~ÏQÐQƒÑQ„ÒQ†ÓQ‡ÔQŠÕQ‹ÖQŽ×QØQÙQ‘ÚQ“ÛQ”ÜQ˜ÝQšÞQßQžàQŸáQ¡âQ£ãQ¦äQ§åQ¨æQ©çQªèQ­éQ®êQ´ëQ¸ìQ¹íQºîQ¾ïQ¿ðQÁñQÂòQÃóQÅôQÈõQÊöQÍ÷QÎøQÐùQÒúQÓûQÔüQÕýQÖþQ×@QØAQÙBQÚCQÜDQÞEQßFQâGQãHQåIQæJQçKQèLQéMQêNQìOQîPQñQQòRQôSQ÷TQþURVRWR XR YR ZR[R\R]R^R_R`RaRbR!cR"dR#eR%fR&gR'hR*iR,jR/kR1lR2mR4nR5oR<pR>qRDrREsRFtRGuRHvRIwRKxRNyROzRR{RS|RU}RW~RX€RYRZ‚R[ƒR]„R_…R`†Rb‡RcˆRd‰RfŠRh‹RkŒRlRmŽRnRpRq‘Rs’Rt“Ru”Rv•Rw–Rx—Ry˜Rz™R{šR|›R~œR€RƒžR„ŸR… R†¡R‡¢R‰£RФR‹¥RŒ¦R§RލR©R‘ªR’«R”¬R•­R–®R—¯R˜°R™±Rš²Rœ³R¤´R¥µR¦¶R§·R®¸R¯¹R°ºR´»Rµ¼R¶½R·¾R¸¿R¹ÀRºÁR»ÂR¼ÃR½ÄRÀÅRÁÆRÂÇRÄÈRÅÉRÆÊRÈËRÊÌRÌÍRÍÎRÎÏRÏÐRÑÑRÓÒRÔÓRÕÔR×ÕRÙÖRÚ×RÛØRÜÙRÝÚRÞÛRàÜRáÝRâÞRãßRåàRæáRçâRèãRéäRêåRëæRìçRíèRîéRïêRñëRòìRóíRôîRõïRöðR÷ñRøòRûóRüôRýõSöS÷SøSùSúS ûS üS ýS þS@SASBSCSDSESFSGSHSIS"JS$KS%LS'MS(NS)OS+PS,QS-RS/SS0TS1US2VS3WS4XS5YS6ZS7[S8\S<]S=^S@_SB`SDaSFbSKcSLdSMeSPfSTgSXhSYiS[jS]kSelShmSjnSloSmpSrqSvrSysS{tS|uS}vS~wS€xSySƒzS‡{Sˆ|SŠ}SŽ~S€SS‘‚S’ƒS“„S”…S–†S—‡S™ˆS›‰SœŠSž‹S ŒS¡S¤ŽS§SªS«‘S¬’S­“S¯”S°•S±–S²—S³˜S´™SµšS·›S¸œS¹SºžS¼ŸS½ S¾¡SÀ¢SãSĤSÅ¥SƦSǧSΨSÏ©SЪSÒ«SÓ¬SÕ­SÚ®SܯSݰSÞ±Sá²Sâ³Sç´SôµSú¶Sþ·Sÿ¸T¹TºT»T¼T ½T¾T¿TÀTÁTÂT"ÃT$ÄT%ÅT*ÆT0ÇT3ÈT6ÉT7ÊT:ËT=ÌT?ÍTAÎTBÏTDÐTEÑTGÒTIÓTLÔTMÕTNÖTO×TQØTZÙT]ÚT^ÛT_ÜT`ÝTaÞTcßTeàTgáTiâTjãTkäTlåTmæTnçToèTpéTtêTyëTzìT~íTîTïTƒðT…ñT‡òTˆóT‰ôTŠõTöT‘÷T“øT—ùT˜úTœûTžüTŸýT þT¡@T¢AT¥BT®CT°DT²ETµFT¶GT·HT¹ITºJT¼KT¾LTÃMTÅNTÊOTËPTÖQTØRTÛSTàTTáUTâVTãWTäXTëYTìZTï[Tð\Tñ]Tô^Tõ_Tö`T÷aTøbTùcTûdTþeUfUgUhUiUjUkU lU mU nU oUpUqUrUsUtUuUvUwUxUyUzU{U|U!}U%~U&€U(U)‚U+ƒU-„U2…U4†U5‡U6ˆU8‰U9ŠU:‹U;ŒU=U@ŽUBUEUG‘UH’UK“UL”UM•UN–UO—UQ˜UR™USšUT›UWœUXUYžUZŸU[ U]¡U^¢U_£U`¤Ub¥Uc¦Uh§Ui¨Uk©UoªUp«Uq¬Ur­Us®Ut¯Uy°Uz±U}²U³U…´U†µUŒ¶U·UޏU¹U’ºU“»U•¼U–½U—¾Uš¿U›ÀUžÁU ÂU¡ÃU¢ÄU£ÅU¤ÆU¥ÇU¦ÈU¨ÉU©ÊUªËU«ÌU¬ÍU­ÎU®ÏU¯ÐU°ÑU²ÒU´ÓU¶ÔU¸ÕUºÖU¼×U¿ØUÀÙUÁÚUÂÛUÃÜUÆÝUÇÞUÈßUÊàUËáUÎâUÏãUÐäUÕåU׿UØçUÙèUÚéUÛêUÞëUàìUâíUçîUéïUíðUîñUðòUñóUôôUöõUøöUù÷UúøUûùUüúUÿûVüVýVþV@VAVBV CV DV EVFVGVHVIVJVKVLVMVNVOVPVQV RV!SV"TV%UV&VV(WV)XV*YV+ZV.[V/\V0]V3^V5_V7`V8aV:bV<cV=dV>eV@fVAgVBhVCiVDjVEkVFlVGmVHnVIoVJpVKqVOrVPsVQtVRuVSvVUwVVxVZyV[zV]{V^|V_}V`~Va€VcVe‚VfƒVg„Vm…Vn†Vo‡VpˆVr‰VsŠVt‹VuŒVwVxŽVyVzV}‘V~’V“V€”V•V‚–Vƒ—V„˜V‡™VˆšV‰›VŠœV‹VŒžVŸV V‘¡V’¢V”£V•¤V–¥V—¦V˜§V™¨Vš©V›ªVœ«V¬Vž­VŸ®V ¯V¡°V¢±V¤²V¥³V¦´V§µV¨¶V©·Vª¸V«¹V¬ºV­»V®¼V°½V±¾V²¿V³ÀV´ÁVµÂV¶ÃV¸ÄV¹ÅVºÆV»ÇV½ÈV¾ÉV¿ÊVÀËVÁÌVÂÍVÃÎVÄÏVÅÐVÆÑVÇÒVÈÓVÉÔVËÕVÌÖVÍ×VÎØVÏÙVÐÚVÑÛVÒÜVÓÝVÕÞVÖßVØàVÙáVÜâVããVåäVæåVçæVèçVéèVêéVìêVîëVïìVòíVóîVöïV÷ðVøñVûòVüóWôWõWöW÷WøW ùW úW ûWüWýWþW@WAWBWCWDWEWFWGWHWIWJWKWLW MW!NW"OW$PW%QW&RW'SW+TW1UW2VW4WW5XW6YW7ZW8[W<\W=]W?^WA_WC`WDaWEbWFcWHdWIeWKfWRgWShWTiWUjWVkWXlWYmWbnWcoWepWgqWlrWnsWptWquWrvWtwWuxWxyWyzWz{W}|W~}W~W€€WW‡‚WˆƒW‰„WŠ…W†WއWˆW‰W‘ŠW”‹W•ŒW–W—ŽW˜W™Wš‘Wœ’W“Wž”WŸ•W¥–W¨—Wª˜W¬™W¯šW°›W±œW³WµžW¶ŸW· W¹¡Wº¢W»£W¼¤W½¥W¾¦W¿§WÀ¨WÁ©WĪWÅ«WƬWÇ­WÈ®WɯWʰW̱WͲWгWÑ´WÓµWÖ¶W×·WÛ¸WܹWÞºWá»Wâ¼Wã½Wå¾Wæ¿WçÀWèÁWéÂWêÃWëÄWìÅWîÆWðÇWñÈWòÉWóÊWõËWöÌW÷ÍWûÎWüÏWþÐWÿÑXÒXÓXÔXÕXÖX ×X ØX ÙXÚXÛXÜXÝXÞXßXàXáXâXãXäXåXæXçX"èX#éX%êX&ëX'ìX(íX)îX+ïX,ðX-ñX.òX/óX1ôX2õX3öX4÷X6øX7ùX8úX9ûX:üX;ýX<þX= @X> AX? BX@ CXA DXB EXC FXE GXF HXG IXH JXI KXJ LXK MXN NXO OXP PXR QXS RXU SXV TXW UXY VXZ WX[ XX\ YX] ZX_ [X` \Xa ]Xb ^Xc _Xd `Xf aXg bXh cXi dXj eXm fXn gXo hXp iXq jXr kXs lXt mXu nXv oXw pXx qXy rXz sX{ tX| uX} vX wX‚ xX„ yX† zX‡ {Xˆ |XŠ }X‹ ~XŒ €X XŽ ‚X ƒX „X‘ …X” †X• ‡X– ˆX— ‰X˜ ŠX› ‹Xœ ŒX X  ŽX¡ X¢ X£ ‘X¤ ’X¥ “X¦ ”X§ •Xª –X« —X¬ ˜X­ ™X® šX¯ ›X° œX± X² žX³ ŸX´  Xµ ¡X¶ ¢X· £X¸ ¤X¹ ¥Xº ¦X» §X½ ¨X¾ ©X¿ ªXÀ «X ¬Xà ­XÄ ®XÆ ¯XÇ °XÈ ±XÉ ²XÊ ³XË ´XÌ µXÍ ¶XÎ ·XÏ ¸XÐ ¹XÒ ºXÓ »XÔ ¼XÖ ½X× ¾XØ ¿XÙ ÀXÚ ÁXÛ ÂXÜ ÃXÝ ÄXÞ ÅXß ÆXà ÇXá ÈXâ ÉXã ÊXå ËXæ ÌXç ÍXè ÎXé ÏXê ÐXí ÑXï ÒXñ ÓXò ÔXô ÕXõ ÖX÷ ×Xø ØXú ÙXû ÚXü ÛXý ÜXþ ÝXÿ ÞY ßY àY áY âY ãY äY åY æY çY èY éY êY ëY ìY íY îY ïY ðY ñY òY óY! ôY" õY# öY& ÷Y( øY, ùY0 úY2 ûY3 üY5 ýY6 þY; @Y= AY> BY? CY@ DYC EYE FYF GYJ HYL IYM JYP KYR LYS MYY NY[ OY\ PY] QY^ RY_ SYa TYc UYd VYf WYg XYh YYi ZYj [Yk \Yl ]Ym ^Yn _Yo `Yp aYq bYr cYu dYw eYz fY{ gY| hY~ iY jY€ kY… lY‰ mY‹ nYŒ oYŽ pY qY rY‘ sY” tY• uY˜ vYš wY› xYœ yY zYŸ {Y  |Y¡ }Y¢ ~Y¦ €Y§ Y¬ ‚Y­ ƒY° „Y± …Y³ †Y´ ‡Yµ ˆY¶ ‰Y· ŠY¸ ‹Yº ŒY¼ Y½ ŽY¿ YÀ YÁ ‘Y ’Yà “YÄ ”YÅ •YÇ –YÈ —YÉ ˜YÌ ™YÍ šYÎ ›YÏ œYÕ YÖ žYÙ ŸYÛ  YÞ ¡Yß ¢Yà £Yá ¤Yâ ¥Yä ¦Yæ §Yç ¨Yé ©Yê ªYë «Yí ¬Yî ­Yï ®Yð ¯Yñ °Yò ±Yó ²Yô ³Yõ ´Yö µY÷ ¶Yø ·Yú ¸Yü ¹Yý ºYþ »Z ¼Z ½Z ¾Z ¿Z ÀZ ÁZ ÂZ ÃZ ÄZ ÅZ ÆZ ÇZ ÈZ ÉZ ÊZ ËZ ÌZ ÍZ! ÎZ" ÏZ$ ÐZ& ÑZ' ÒZ( ÓZ* ÔZ+ ÕZ, ÖZ- ×Z. ØZ/ ÙZ0 ÚZ3 ÛZ5 ÜZ7 ÝZ8 ÞZ9 ßZ: àZ; áZ= âZ> ãZ? äZA åZB æZC çZD èZE éZG êZH ëZK ìZL íZM îZN ïZO ðZP ñZQ òZR óZS ôZT õZV öZW ÷ZX øZY ùZ[ úZ\ ûZ] üZ^ ýZ_ þZ` @Za AZc BZd CZe DZf EZh FZi GZk HZl IZm JZn KZo LZp MZq NZr OZs PZx QZy RZ{ SZ| TZ} UZ~ VZ€ WZ XZ‚ YZƒ ZZ„ [Z… \Z† ]Z‡ ^Zˆ _Z‰ `ZŠ aZ‹ bZŒ cZ dZŽ eZ fZ gZ‘ hZ“ iZ” jZ• kZ– lZ— mZ˜ nZ™ oZœ pZ qZž rZŸ sZ  tZ¡ uZ¢ vZ£ wZ¤ xZ¥ yZ¦ zZ§ {Z¨ |Z© }Z« ~Z¬ €Z­ Z® ‚Z¯ ƒZ° „Z± …Z´ †Z¶ ‡Z· ˆZ¹ ‰Zº ŠZ» ‹Z¼ ŒZ½ Z¿ ŽZÀ Zà ZÄ ‘ZÅ ’ZÆ “ZÇ ”ZÈ •ZÊ –ZË —ZÍ ˜ZÎ ™ZÏ šZÐ ›ZÑ œZÓ ZÕ žZ× ŸZÙ  ZÚ ¡ZÛ ¢ZÝ £ZÞ ¤Zß ¥Zâ ¦Zä §Zå ¨Zç ©Zè ªZê «Zì ¬Zí ­Zî ®Zï ¯Zð °Zò ±Zó ²Zô ³Zõ ´Zö µZ÷ ¶Zø ·Zù ¸Zú ¹Zû ºZü »Zý ¼Zþ ½Zÿ ¾[ ¿[ À[ Á[ Â[ Ã[ Ä[ Å[ Æ[ Ç[ È[ É[ Ê[ Ë[ Ì[ Í[ Î[ Ï[ Ð[ Ñ[ Ò[ Ó[ Ô[ Õ[ Ö[ ×[ Ø[ Ù[ Ú[ Û[ Ü[! Ý[" Þ[# ß[$ à[% á[& â[' ã[( ä[) å[* æ[+ ç[, è[- é[. ê[/ ë[0 ì[1 í[3 î[5 ï[6 ð[8 ñ[9 ò[: ó[; ô[< õ[= ö[> ÷[? ø[A ù[B ú[C û[D ü[E ý[F þ[G @[H A[I B[J C[K D[L E[M F[N G[O H[R I[V J[^ K[` L[a M[g N[h O[k P[m Q[n R[o S[r T[t U[v V[w W[x X[y Y[{ Z[| [[~ \[ ][‚ ^[† _[Š `[ a[Ž b[ c[‘ d[’ e[” f[– g[Ÿ h[§ i[¨ j[© k[¬ l[­ m[® n[¯ o[± p[² q[· r[º s[» t[¼ u[À v[Á w[à x[È y[É z[Ê {[Ë |[Í }[Î ~[Ï €[Ñ [Ô ‚[Õ ƒ[Ö „[× …[Ø †[Ù ‡[Ú ˆ[Û ‰[Ü Š[à ‹[â Œ[ã [æ Ž[ç [é [ê ‘[ë ’[ì “[í ”[ï •[ñ –[ò —[ó ˜[ô ™[õ š[ö ›[÷ œ[ý [þ ž\ Ÿ\  \ ¡\ ¢\ £\ ¤\ ¥\ ¦\ §\ ¨\ ©\ ª\ «\ ¬\ ­\ ®\ ¯\ °\ ±\! ²\# ³\& ´\( µ\) ¶\* ·\+ ¸\- ¹\. º\/ »\0 ¼\2 ½\3 ¾\5 ¿\6 À\7 Á\C Â\D Ã\F Ä\G Å\L Æ\M Ç\R È\S É\T Ê\V Ë\W Ì\X Í\Z Î\[ Ï\\ Ð\] Ñ\_ Ò\b Ó\d Ô\g Õ\h Ö\i ×\j Ø\k Ù\l Ú\m Û\p Ü\r Ý\s Þ\t ß\u à\v á\w â\x ã\{ ä\| å\} æ\~ ç\€ è\ƒ é\„ ê\… ë\† ì\‡ í\‰ î\Š ï\‹ ð\Ž ñ\ ò\’ ó\“ ô\• õ\ ö\ž ÷\Ÿ ø\  ù\¡ ú\¤ û\¥ ü\¦ ý\§ þ\¨ @\ª A\® B\¯ C\° D\² E\´ F\¶ G\¹ H\º I\» J\¼ K\¾ L\À M\ N\à O\Å P\Æ Q\Ç R\È S\É T\Ê U\Ì V\Í W\Î X\Ï Y\Ð Z\Ñ [\Ó \\Ô ]\Õ ^\Ö _\× `\Ø a\Ú b\Û c\Ü d\Ý e\Þ f\ß g\à h\â i\ã j\ç k\é l\ë m\ì n\î o\ï p\ñ q\ò r\ó s\ô t\õ u\ö v\÷ w\ø x\ù y\ú z\ü {\ý |\þ }\ÿ ~] €] ] ‚] ƒ] „] …] †] ‡] ˆ] ‰] Š] ‹] Œ] ] Ž] ] ] ‘] ’] “] ”] •] –] —]! ˜]" ™]# š]% ›]( œ]* ]+ ž], Ÿ]/  ]0 ¡]1 ¢]2 £]3 ¤]5 ¥]6 ¦]7 §]8 ¨]9 ©]: ª]; «]< ¬]? ­]@ ®]A ¯]B °]C ±]D ²]E ³]F ´]H µ]I ¶]M ·]N ¸]O ¹]P º]Q »]R ¼]S ½]T ¾]U ¿]V À]W Á]Y Â]Z Ã]\ Ä]^ Å]_ Æ]` Ç]a È]b É]c Ê]d Ë]e Ì]f Í]g Î]h Ï]j Ð]m Ñ]n Ò]p Ó]q Ô]r Õ]s Ö]u ×]v Ø]w Ù]x Ú]y Û]z Ü]{ Ý]| Þ]} ß]~ à] á]€ â] ã]ƒ ä]„ å]… æ]† ç]‡ è]ˆ é]‰ ê]Š ë]‹ ì]Œ í] î]Ž ï] ð] ñ]‘ ò]’ ó]“ ô]” õ]• ö]– ÷]— ø]˜ ù]š ú]› û]œ ü]ž ý]Ÿ þ] @]¡A]¢B]£C]¤D]¥E]¦F]§G]¨H]©I]ªJ]«K]¬L]­M]®N]¯O]°P]±Q]²R]³S]´T]µU]¶V]¸W]¹X]ºY]»Z]¼[]½\]¾]]¿^]À_]Á`]Âa]Ãb]Äc]Æd]Çe]Èf]Ég]Êh]Ëi]Ìj]Îk]Ïl]Ðm]Ñn]Òo]Óp]Ôq]Õr]Ös]×t]Øu]Ùv]Úw]Üx]ßy]àz]ã{]ä|]ê}]ì~]í€]ð]õ‚]öƒ]ø„]ù…]ú†]û‡]üˆ]ÿ‰^Š^‹^Œ^ ^ Ž^ ^ ^‘^’^“^”^•^–^ —^!˜^"™^#š^$›^%œ^(^)ž^*Ÿ^+ ^,¡^/¢^0£^2¤^3¥^4¦^5§^6¨^9©^:ª^>«^?¬^@­^A®^C¯^F°^G±^H²^I³^J´^Kµ^M¶^N·^O¸^P¹^Qº^R»^S¼^V½^W¾^X¿^YÀ^ZÁ^\Â^]Ã^_Ä^`Å^cÆ^dÇ^eÈ^fÉ^gÊ^hË^iÌ^jÍ^kÎ^lÏ^mÐ^nÑ^oÒ^pÓ^qÔ^uÕ^wÖ^y×^~Ø^Ù^‚Ú^ƒÛ^…Ü^ˆÝ^‰Þ^Œß^à^Žá^’â^˜ã^›ä^å^¡æ^¢ç^£è^¤é^¨ê^©ë^ªì^«í^¬î^®ï^¯ð^°ñ^±ò^²ó^´ô^ºõ^»ö^¼÷^½ø^¿ù^Àú^Áû^Âü^Ãý^Äþ^Å@^ÆA^ÇB^ÈC^ËD^ÌE^ÍF^ÎG^ÏH^ÐI^ÔJ^ÕK^×L^ØM^ÙN^ÚO^ÜP^ÝQ^ÞR^ßS^àT^áU^âV^ãW^äX^åY^æZ^ç[^é\^ë]^ì^^í_^î`^ïa^ðb^ñc^òd^óe^õf^øg^ùh^ûi^üj^ýk_l_m_n_ o_ p_ q_r_s_t_u_v_w_x_y_z_{_!|_"}_#~_$€_(_+‚_,ƒ_.„_0…_2†_3‡_4ˆ_5‰_6Š_7‹_8Œ_;_=Ž_>_?_A‘_B’_C“_D”_E•_F–_G—_H˜_I™_Jš_K›_Lœ_M_Nž_OŸ_Q _T¡_Y¢_Z£_[¤_\¥_^¦__§_`¨_c©_eª_g«_h¬_k­_n®_o¯_r°_t±_u²_v³_x´_zµ_}¶_~·_¸_ƒ¹_†º_»_޼_½_‘¾_“¿_”À_–Á_šÂ_›Ã_Ä_žÅ_ŸÆ_ Ç_¢È_£É_¤Ê_¥Ë_¦Ì_§Í_©Î_«Ï_¬Ð_¯Ñ_°Ò_±Ó_²Ô_³Õ_´Ö_¶×_¸Ø_¹Ù_ºÚ_»Û_¾Ü_¿Ý_ÀÞ_Áß_Âà_Çá_Èâ_Êã_Ëä_Îå_Óæ_Ôç_Õè_Úé_Ûê_Üë_Þì_ßí_âî_ãï_åð_æñ_èò_éó_ìô_ïõ_ðö_ò÷_óø_ôù_öú_÷û_ùü_úý_üþ`@`A` B` C` D`E`F`G`H`I`J`K`L`"M`#N`$O`,P`-Q`.R`0S`1T`2U`3V`4W`6X`7Y`8Z`9[`:\`=]`>^`@_`D``Ea`Fb`Gc`Hd`Ie`Jf`Lg`Nh`Oi`Qj`Sk`Tl`Vm`Wn`Xo`[p`\q`^r`_s``t`au`ev`fw`nx`qy`rz`t{`u|`w}`~~`€€``‚‚`…ƒ`†„`‡…`ˆ†`Ї`‹ˆ`މ`Š`‹`‘Œ`“`•Ž`—`˜`™‘`œ’`ž“`¡”`¢•`¤–`¥—`§˜`©™`ªš`®›`°œ`³`µž`¶Ÿ`· `¹¡`º¢`½£`¾¤`¿¥`À¦`Á§`¨`é`Ī`Ç«`Ȭ`É­`Ì®`ͯ`ΰ`ϱ`в`Ò³`Ó´`Ôµ`Ö¶`×·`Ù¸`Û¹`Þº`á»`â¼`ã½`ä¾`å¿`êÀ`ñÁ`òÂ`õÃ`÷Ä`øÅ`ûÆ`üÇ`ýÈ`þÉ`ÿÊaËaÌaÍaÎaÏa Ða Ña ÒaÓaÔaÕaÖa×aØaÙaÚaÛaÜaÝaÞaßa!àa"áa%âa(ãa)äa*åa,æa-ça.èa/éa0êa1ëa2ìa3ía4îa5ïa6ða7ña8òa9óa:ôa;õa<öa=÷a>øa@ùaAúaBûaCüaDýaEþaF@aGAaIBaKCaMDaOEaPFaRGaSHaTIaVJaWKaXLaYMaZNa[Oa\Pa^Qa_Ra`SaaTacUadVaeWafXaiYajZak[al\am]an^ao_aq`araasbatcavdaxeayfazga{ha|ia}ja~kala€mana‚oaƒpa„qa…ra†sa‡taˆua‰vaŠwaŒxayaza{a‘|a’}a“~a•€a–a—‚a˜ƒa™„aš…a›†aœ‡ažˆaŸ‰a Ša¡‹a¢Œa£a¤Ža¥a¦aª‘a«’a­“a®”a¯•a°–a±—a²˜a³™a´šaµ›a¶œa¸a¹žaºŸa» a¼¡a½¢a¿£aÀ¤aÁ¥aæaħaŨaÆ©aǪaÉ«a̬aÍ­aήaϯaаaÓ±aÕ²aÖ³a×´aصaÙ¶aÚ·aÛ¸aܹaݺaÞ»aß¼aà½aá¾aâ¿aãÀaäÁaåÂaçÃaèÄaéÅaêÆaëÇaìÈaíÉaîÊaïËaðÌañÍaòÎaóÏaôÐaöÑa÷ÒaøÓaùÔaúÕaûÖaü×aýØaþÙbÚbÛbÜbÝbÞbßbàb ábâbãbäbåbæbçb èb#éb&êb'ëb(ìb)íb+îb-ïb/ðb0ñb1òb2ób5ôb6õb8öb9÷b:øb;ùb<úbBûbDübEýbFþbJ@bOAbPBbUCbVDbWEbYFbZGb\Hb]Ib^Jb_Kb`LbaMbbNbdObePbhQbqRbrSbtTbuUbwVbxWbzXb{Yb}Zb[b‚\bƒ]b…^b†_b‡`bˆab‹bbŒcbdbŽebfbgb”hb™ibœjbkbžlb£mb¦nb§ob©pbªqb­rb®sb¯tb°ub²vb³wb´xb¶yb·zb¸{bº|b¾}bÀ~bÁ€bÃbË‚bσbÑ„bÕ…b݆bÞ‡bàˆbá‰bäŠbê‹bëŒbðbòŽbõbøbù‘bú’bû“c”c•c–c—c˜c ™c šc ›c œccžcŸc c¡c¢c£c¤c¥c¦c&§c'¨c)©c,ªc-«c.¬c0­c1®c3¯c4°c5±c6²c7³c8´c;µc<¶c>·c?¸c@¹cAºcD»cG¼cH½cJ¾cQ¿cRÀcSÁcTÂcVÃcWÄcXÅcYÆcZÇc[Èc\Éc]Êc`ËcdÌceÍcfÎchÏcjÐckÑclÒcoÓcpÔcrÕcsÖct×cuØcxÙcyÚc|Ûc}Üc~ÝcÞcßcƒàc„ác…âc†ãc‹äcåc‘æc“çc”èc•éc—êc™ëcšìc›ícœîcïcžðcŸñc¡òc¤óc¦ôc«õc¯öc±÷c²øcµùc¶úc¹ûc»üc½ýc¿þcÀ@cÁAcÂBcÃCcÅDcÇEcÈFcÊGcËHcÌIcÑJcÓKcÔLcÕMc×NcØOcÙPcÚQcÛRcÜScÝTcßUcâVcäWcåXcæYcçZcè[cë\cì]cî^cï_cð`cñacóbcõcc÷dcùecúfcûgcühcþidjdkdldmdnd od pd qdrdsdtdudvdwdxdydzd{d|d"}d#~d$€d%d'‚d(ƒd)„d+…d.†d/‡d0ˆd1‰d2Šd3‹d5Œd6d7Žd8d9d;‘d<’d>“d@”dB•dC–dI—dK˜dL™dMšdN›dOœdPdQždSŸdU dV¡dW¢dY£dZ¤d[¥d\¦d]§d_¨d`©daªdb«dc¬dd­de®df¯dh°dj±dk²dl³dn´doµdp¶dq·dr¸ds¹dtºdu»dv¼dw½d{¾d|¿d}Àd~ÁdÂd€ÃdÄdƒÅd†ÆdˆÇd‰ÈdŠÉd‹ÊdŒËdÌdŽÍdÎdÏd“Ðd”Ñd—Òd˜ÓdšÔd›ÕdœÖd×dŸØd Ùd¡Úd¢Ûd£Üd¥Ýd¦Þd§ßd¨àdªád«âd¯ãd±äd²åd³æd´çd¶èd¹éd»êd½ëd¾ìd¿ídÁîdÃïdÄðdÆñdÇòdÈódÉôdÊõdËödÌ÷dÏødÑùdÓúdÔûdÕüdÖýdÙþdÚ@dÛAdÜBdÝCdßDdàEdáFdãGdåHdçIdèJdéKdêLdëMdìNdíOdîPdïQdðRdñSdòTdóUdôVdõWdöXd÷YdøZdù[dú\dû]dü^dý_dþ`dÿaebecedeeefegeheie je ke le meneoepeqereseteuevewexeyeze{e|e}e ~e!€e"e#‚e$ƒe&„e'…e(†e)‡e*ˆe,‰e-Še0‹e1Œe2e3Že7e:e<‘e=’e@“eA”eB•eC–eD—eF˜eG™eJšeK›eMœeNePžeRŸeS eT¡eW¢eX£eZ¤e\¥e_¦e`§ea¨ed©eeªeg«eh¬ei­ej®em¯en°eo±eq²es³eu´evµex¶ey·ez¸e{¹e|ºe}»e~¼e½e€¾e¿e‚ÀeƒÁe„Âe…Ãe†ÄeˆÅe‰ÆeŠÇeÈeŽÉeÊe’Ëe”Ìe•Íe–Îe˜ÏešÐeÑežÒe Óe¢Ôe£Õe¦Öe¨×eªØe¬Ùe®Úe±Ûe²Üe³Ýe´Þeµße¶àe·áe¸âeºãe»äe¾åe¿æeÀçeÂèeÇéeÈêeÉëeÊìeÍíeÐîeÑïeÓðeÔñeÕòeØóeÙôeÚõeÛöeÜ÷eÝøeÞùeßúeáûeãüeäýeêþeë@eòAeóBeôCeõDeøEeùFeûGeüHeýIeþJeÿKfLfMfNfOfPf Qf Rf SfTfUfVfWfXfYfZf[f\f]f!^f"_f#`f$af&bf)cf*df+ef,ff.gf0hf2if3jf7kf8lf9mf:nf;of=pf?qf@rfBsfDtfEufFvfGwfHxfIyfJzfM{fN|fP}fQ~fX€fYf[‚f\ƒf]„f^…f`†fb‡fcˆfe‰fgŠfi‹fjŒfkflŽfmfqfr‘fs’fu“fx”fy•f{–f|—f}˜f™f€šf›fƒœf…f†žfˆŸf‰ fŠ¡f‹¢f£fޤf¥f¦f’§f“¨f”©f•ªf˜«f™¬fš­f›®fœ¯fž°fŸ±f ²f¡³f¢´f£µf¤¶f¥·f¦¸f©¹fªºf«»f¬¼f­½f¯¾f°¿f±Àf²Áf³ÂfµÃf¶Äf·Åf¸ÆfºÇf»Èf¼Éf½Êf¿ËfÀÌfÁÍfÂÎfÃÏfÄÐfÅÑfÆÒfÇÓfÈÔfÉÕfÊÖfË×fÌØfÍÙfÎÚfÏÛfÐÜfÑÝfÒÞfÓßfÔàfÕáfÖâf×ãfØäfÚåfÞæfßçfàèfáéfâêfãëfäìfåífçîfèïfêðfëñfìòfíófîôfïõfñöfõ÷föøføùfúúfûûfýügýgþg@gAgBgCgDg EgFgGgHgIgJgKgLgMgNgOgPg Qg!Rg"Sg#Tg$Ug%Vg'Wg)Xg.Yg0Zg2[g3\g6]g7^g8_g9`g;ag<bg>cg?dgAegDfgEggGhgJigKjgMkgRlgTmgUngWogXpgYqgZrg[sg]tgbugcvgdwgfxggygkzgl{gn|gq}gt~gv€gxgy‚gzƒg{„g}…g€†g‚‡gƒˆg…‰g†Šgˆ‹gŠŒgŒgŽgŽgg‘‘g’’g““g””g–•g™–g›—gŸ˜g ™g¡šg¤›g¦œg©g¬žg®Ÿg± g²¡g´¢g¹£gº¤g»¥g¼¦g½§g¾¨g¿©gÀªg«gŬgÆ­gÇ®gȯgɰgʱg˲g̳gÍ´gεgÕ¶gÖ·g׸gÛ¹gߺgá»gã¼gä½gæ¾gç¿gèÀgêÁgëÂgíÃgîÄgòÅgõÆgöÇg÷ÈgøÉgùÊgúËgûÌgüÍgþÎhÏhÐhÑhÒhÓh ÔhÕhÖh×hØhÙhÚhÛhÜhÝhÞhßh àh"áh#âh$ãh%äh&åh'æh(çh+èh,éh-êh.ëh/ìh0íh1îh4ïh5ðh6ñh:òh;óh?ôhGõhKöhM÷hOøhRùhVúhWûhXühYýhZþh[@h\Ah]Bh^Ch_DhjEhlFhmGhnHhoIhpJhqKhrLhsMhuNhxOhyPhzQh{Rh|Sh}Th~UhVh€Wh‚Xh„Yh‡Zhˆ[h‰\hŠ]h‹^hŒ_h`hŽahbh‘ch’dh”eh•fh–gh˜hh™ihšjh›khœlhmhžnhŸoh ph¡qh£rh¤sh¥th©uhªvh«wh¬xh®yh±zh²{h´|h¶}h·~h¸€h¹hº‚h»ƒh¼„h½…h¾†h¿‡hÁˆhÉhÄŠhÅ‹hÆŒhÇhÈŽhÊhÌhΑhÏ’hГhÑ”hÓ•hÔ–hÖ—hטhÙ™hÛšhÜ›hÝœhÞhßžháŸhâ hä¡hå¢hæ£hç¤hè¥hé¦hê§hë¨hì©híªhï«hò¬hó­hô®hö¯h÷°hø±hû²hý³hþ´hÿµi¶i·i¸i¹iºi»i¼i ½i ¾i ¿iÀiÁiÂiÃiÄiÅiÆiÇiÈiÉiÊiËiÌiÍi!Îi"Ïi#Ði%Ñi&Òi'Ói(Ôi)Õi*Öi+×i,Øi.Ùi/Úi1Ûi2Üi3Ýi5Þi6ßi7ài8ái:âi;ãi<äi>åi@æiAçiCèiDéiEêiFëiGìiHíiIîiJïiKðiLñiMòiNóiOôiPõiQöiR÷iSøiUùiVúiXûiYüi[ýi\þi_@iaAibBidCieDigEihFiiGijHilIimJioKipLirMisNitOiuPivQizRi{Si}Ti~UiViWiƒXi…YiŠZi‹[iŒ\iŽ]i^i_i‘`i’ai“bi–ci—di™eišfigižhiŸii ji¡ki¢li£mi¤ni¥oi¦pi©qiªri¬si®ti¯ui°vi²wi³xiµyi¶zi¸{i¹|iº}i¼~i½€i¾i¿‚iÀƒi„iÃ…iĆiŇiƈiljiÈŠiÉ‹iËŒiÍiÏŽiÑiÒiÓ‘iÕ’iÖ“i×”iØ•iÙ–iÚ—iܘiÝ™iÞšiá›iâœiãiäžiåŸiæ iç¡iè¢ié£iê¤ië¥iì¦iî§iï¨ið©iñªió«iô¬iõ­iö®i÷¯iø°iù±iú²iû³iü´iþµj¶j·j¸j¹jºj»j¼j½j¾j ¿j Àj Áj ÂjÃjÄjÅjÆjÇjÈjÉjÊjËjÌjÍjÎjÏjÐjÑj Òj"Ój#Ôj$Õj%Öj&×j'Øj)Ùj+Új,Ûj-Üj.Ýj0Þj2ßj3àj4áj6âj7ãj8äj9åj:æj;çj<èj?éj@êjAëjBìjCíjEîjFïjHðjIñjJòjKójLôjMõjNöjO÷jQøjRùjSújTûjUüjVýjWþjZ@j\Aj]Bj^Cj_Dj`EjbFjcGjdHjfIjgJjhKjiLjjMjkNjlOjmPjnQjoRjpSjrTjsUjtVjuWjvXjwYjxZjz[j{\j}]j~^j_j`j‚ajƒbj…cj†dj‡ejˆfj‰gjŠhj‹ijŒjjkjlj’mj“nj”oj•pj–qj˜rj™sjštj›ujœvjwjžxjŸyj¡zj¢{j£|j¤}j¥~j¦€j§j¨‚jªƒj­„j®…j¯†j°‡j±ˆj²‰j³Šj´‹jµŒj¶j·Žj¸j¹jº‘j»’j¼“j½”j¾•j¿–jÀ—jÁ˜j™jÚjÄ›jÅœjÆjÇžjÈŸjÉ jÊ¡jË¢jÌ£jͤjÎ¥jϦjЧjѨjÒ©jÓªjÔ«jÕ¬jÖ­j×®jدjÙ°jÚ±jÛ²jܳjÝ´jÞµjß¶jà·já¸jâ¹jãºjä»jå¼jæ½jç¾jè¿jéÀjêÁjëÂjìÃjíÄjîÅjïÆjðÇjñÈjòÉjóÊjôËjõÌjöÍj÷ÎjøÏjùÐjúÑjûÒjüÓjýÔjþÕjÿÖk×kØkÙkÚkÛkÜkÝkÞkßk àk ák âk ãk äkåkækçkèkékêkëkìkíkîkïkðkñkòkókôkõkök%÷k&øk(ùk)úk*ûk+ük,ýk-þk.@k/Ak0Bk1Ck3Dk4Ek5Fk6Gk8Hk;Ik<Jk=Kk?Lk@MkANkBOkDPkEQkHRkJSkKTkMUkNVkOWkPXkQYkRZkS[kT\kU]kV^kW_kX`kZak[bk\ck]dk^ek_fk`gkahkhikijkkkkllkmmknnkookppkqqkrrksskttkuukvvkwwkxxkzyk}zk~{k|k€}k…~kˆ€kŒkŽ‚kƒk„k‘…k”†k•‡k—ˆk˜‰k™Škœ‹kŒkžkŸŽk k¢k£‘k¤’k¥“k¦”k§•k¨–k©—k«˜k¬™k­šk®›k¯œk°k±žk²Ÿk¶ k¸¡k¹¢kº£k»¤k¼¥k½¦k¾§kÀ¨kékĪkÆ«kǬkÈ­kÉ®kʯk̰kαkвkѳkØ´kÚµkܶkÝ·kÞ¸kß¹kàºkâ»kã¼kä½kå¾kæ¿kçÀkèÁkéÂkìÃkíÄkîÅkðÆkñÇkòÈkôÉköÊk÷ËkøÌkúÍkûÎküÏkþÐkÿÑlÒlÓlÔlÕlÖl×l Øl Ùl Úl ÛlÜlÝlÞlßlàlál âl#ãl%äl+ål,æl-çl1èl3él6êl7ël9ìl:íl;îl<ïl>ðl?ñlCòlDólEôlHõlKölL÷lMølNùlOúlQûlRülSýlVþlX@lYAlZBlbClcDleElfFlgGlkHllIlmJlnKloLlqMlsNluOlwPlxQlzRl{Sl|TlUl€Vl„Wl‡XlŠYl‹ZlŽ\l‘]l’^l•_l–`l—al˜blšclœdlelžfl gl¢hl¨il¬jl¯kl°ll´mlµnl¶ol·plºqlÀrlÁslÂtlÃulÆvlÇwlÈxlËylÍzlÎ{lÏ|lÑ}lÒ~lØ€lÙlÚ‚l܃lÝ„lß…lä†læ‡lçˆlé‰lìŠlí‹lòŒlôlùŽlÿmm‘m’m“m”m•m –m —m ˜m™mšm›mœmmžmŸm m¡m¢m£m ¤m!¥m"¦m#§m$¨m&©m(ªm)«m,¬m-­m/®m0¯m4°m6±m7²m8³m:´m?µm@¶mB·mD¸mI¹mLºmP»mU¼mV½mW¾mX¿m[Àm]Ám_ÂmaÃmbÄmdÅmeÆmgÇmhÈmkÉmlÊmmËmpÌmqÍmrÎmsÏmuÐmvÑmyÒmzÓm{Ôm}Õm~Öm×m€ØmÙmƒÚm„Ûm†Üm‡ÝmŠÞm‹ßmàmámâm’ãm–äm—åm˜æm™çmšèmœém¢êm¥ëm¬ìm­ím°îm±ïm³ðm´ñm¶òm·óm¹ômºõm»öm¼÷m½øm¾ùmÁúmÂûmÃümÈýmÉþmÊ@mÍAmÎBmÏCmÐDmÒEmÓFmÔGmÕHm×ImÚJmÛKmÜLmßMmâNmãOmåPmçQmèRméSmêTmíUmïVmðWmòXmôYmõZmö[mø\mú]mý^mþ_mÿ`nanbncndnenfngnhn in jnknlnmnnnonpnqnrnsntn"un&vn'wn(xn*yn,zn.{n0|n1}n3~n5€n6n7‚n9ƒn;„n<…n=†n>‡n?ˆn@‰nAŠnB‹nEŒnFnGŽnHnInJ‘nK’nL“nO”nP•nQ–nR—nU˜nW™nYšnZ›n\œn]n^žn`Ÿna nb¡nc¢nd£ne¤nf¥ng¦nh§ni¨nj©nlªnm«no¬np­nq®nr¯ns°nt±nu²nv³nw´nxµny¶nz·n{¸n|¹n}ºn€»n¼n‚½n„¾n‡¿nˆÀnŠÁn‹ÂnŒÃnÄnŽÅn‘Æn’Çn“Èn”Én•Ên–Ën—Ìn™ÍnšÎn›ÏnÐnžÑn Òn¡Ón£Ôn¤Õn¦Ön¨×n©Øn«Ùn¬Ún­Ûn®Ün°Ýn³Þnµßn¸àn¹án¼ân¾ãn¿änÀånÃænÄçnÅènÆénÈênÉënÊìnÌínÍînÎïnÐðnÒñnÖònØónÙônÛõnÜönÝ÷nãønçùnêúnëûnìüníýnîþnï@nðAnñBnòCnóDnõEnöFn÷GnøHnúInûJnüKnýLnþMnÿNoOoPoQoRoSoToUo Vo Wo Xo YoZo[o\o]o^o_o`oaobocodoeofogo!ho"io#jo%ko&lo'mo(no,oo.po0qo2ro4so5to7uo8vo9wo:xo;yo<zo={o?|o@}oA~oB€oCoD‚oEƒoH„oI…oJ†oL‡oNˆoO‰oPŠoQ‹oRŒoSoTŽoUoVoW‘oY’oZ“o[”o]•o_–o`—oa˜oc™odšoe›ogœohoižojŸok ol¡oo¢op£oq¤os¥ou¦ov§ow¨oy©o{ªo}«o~¬o­o€®o¯o‚°oƒ±o…²o†³o‡´oеo‹¶o·o¸o‘¹o’ºo“»o”¼o•½o–¾o—¿o˜Ào™ÁošÂo›ÃoÄožÅoŸÆo Ço¢Èo£Éo¤Êo¥Ëo¦Ìo¨Ío©ÎoªÏo«Ðo¬Ño­Òo®Óo¯Ôo°Õo±Öo²×o´ØoµÙo·Úo¸ÛoºÜo»Ýo¼Þo½ßo¾ào¿áoÁâoÃãoÄäoÅåoÆæoÇçoÈèoÊéoËêoÌëoÍìoÎíoÏîoÐïoÓðoÔñoÕòoÖóo×ôoØõoÙöoÚ÷oÛøoÜùoÝúoßûoâüoãýoäþoå@oæAoçBoèCoéDoêEoëFoìGoíHoðIoñJoòKoóLoôMoõNoöOo÷PoøQoùRoúSoûToüUoýVoþWoÿXpYpZp[p\p]p^p_p`pap bp cp dp ep fpgphpipjpkplpmpnpopppqprpsptpup vp!wp"xp$yp%zp&{p'|p(}p)~p*€p+p,‚p-ƒp.„p/…p0†p1‡p2ˆp3‰p4Šp6‹p7Œp8p:Žp;p<p=‘p>’p?“p@”pA•pB–pC—pD˜pE™pFšpG›pHœpIpJžpKŸpM pN¡pP¢pQ£pR¤pS¥pT¦pU§pV¨pW©pXªpY«pZ¬p[­p\®p]¯p_°p`±pa²pb³pc´pdµpe¶pf·pg¸ph¹piºpj»pn¼pq½pr¾ps¿ptÀpwÁpyÂpzÃp{Äp}ÅpÆp‚ÇpƒÈp„Ép†Êp‡ËpˆÌp‹ÍpŒÎpÏpÐpÑp‘Òp“Óp—Ôp˜ÕpšÖp›×pžØpŸÙp Úp¡Ûp¢Üp£Ýp¤Þp¥ßp¦àp§áp¨âp©ãpªäp°åp²æp´çpµèp¶épºêp¾ëp¿ìpÄípÅîpÆïpÇðpÉñpËòpÌópÍôpÎõpÏöpÐ÷pÑøpÒùpÓúpÔûpÕüpÖýp×þpÚ@pÜApÝBpÞCpàDpáEpâFpãGpåHpêIpîJpðKpñLpòMpóNpôOpõPpöQpøRpúSpûTpüUpþVpÿWqXqYqZq[q\q]q^q_q`q aq bq cqdqeqfqgqhqiqjqkqlqmqnq oq!pq"qq#rq$sq%tq'uq(vq)wq*xq+yq,zq-{q.|q2}q3~q4€q5q7‚q8ƒq9„q:…q;†q<‡q=ˆq>‰q?Šq@‹qAŒqBqCŽqDqFqG‘qH’qI“qK”qM•qO–qP—qQ˜qR™qSšqT›qUœqVqWžqXŸqY qZ¡q[¢q]£q_¤q`¥qa¦qb§qc¨qe©qiªqj«qk¬ql­qm®qo¯qp°qq±qt²qu³qv´qwµqy¶q{·q|¸q~¹qºq€»q¼q‚½qƒ¾q…¿q†Àq‡ÁqˆÂq‰Ãq‹ÄqŒÅqÆqŽÇqÈq‘Éq’Êq“Ëq•Ìq–Íq—ÎqšÏq›ÐqœÑqÒqžÓq¡Ôq¢Õq£Öq¤×q¥Øq¦Ùq§Úq©ÛqªÜq«Ýq­Þq®ßq¯àq°áq±âq²ãq´äq¶åq·æq¸çqºèq»éq¼êq½ëq¾ìq¿íqÀîqÁïqÂðqÄñqÅòqÆóqÇôqÈõqÉöqÊ÷qËøqÌùqÍúqÏûqÐüqÑýqÒþqÓ @qÖ Aq× BqØ CqÙ DqÚ EqÛ FqÜ GqÝ HqÞ Iqß Jqá Kqâ Lqã Mqä Nqæ Oqè Pqé Qqê Rqë Sqì Tqí Uqï Vqð Wqñ Xqò Yqó Zqô [qõ \qö ]q÷ ^qø _qú `qû aqü bqý cqþ dqÿ er fr gr hr ir jr kr lr mr nr or pr qr rr sr tr ur vr wr xr yr zr {r |r }r ~r €r r ‚r ƒr „r …r! †r" ‡r# ˆr$ ‰r% Šr& ‹r' Œr) r+ Žr- r. r/ ‘r2 ’r3 “r4 ”r: •r< –r> —r@ ˜rA ™rB šrC ›rD œrE rF žrI ŸrJ  rK ¡rN ¢rO £rP ¤rQ ¥rS ¦rT §rU ¨rW ©rX ªrZ «r\ ¬r^ ­r` ®rc ¯rd °re ±rh ²rj ³rk ´rl µrm ¶rp ·rq ¸rs ¹rt ºrv »rw ¼rx ½r{ ¾r| ¿r} Àr‚ Árƒ Âr… Ãr† Är‡ Årˆ Ær‰ ÇrŒ ÈrŽ Ér Êr‘ Ër“ Ìr” Ír• Îr– Ïr— Ðr˜ Ñr™ Òrš Ór› Ôrœ Õr Örž ×r  Ør¡ Ùr¢ Úr£ Ûr¤ Ür¥ Ýr¦ Þr§ ßr¨ àr© árª âr« ãr® är± år² ær³ çrµ èrº ér» êr¼ ër½ ìr¾ ír¿ îrÀ ïrÅ ðrÆ ñrÇ òrÉ órÊ ôrË õrÌ örÏ ÷rÑ ørÓ ùrÔ úrÕ ûrÖ ürØ ýrÚ þrÛ!@äÆ!AäÇ!BäÈ!CäÉ!DäÊ!EäË!FäÌ!GäÍ!HäÎ!IäÏ!JäÐ!KäÑ!LäÒ!MäÓ!NäÔ!OäÕ!PäÖ!Qä×!RäØ!SäÙ!TäÚ!UäÛ!VäÜ!WäÝ!XäÞ!Yäß!Zäà![äá!\äâ!]äã!^ää!_äå!`äæ!aäç!bäè!cäé!däê!eäë!fäì!gäí!häî!iäï!jäð!käñ!läò!mäó!näô!oäõ!päö!qä÷!räø!säù!täú!uäû!väü!wäý!xäþ!yäÿ!zå!{å!|å!}å!~å!€å!å!‚å!ƒå!„å !…å !†å !‡å !ˆå !‰å!Šå!‹å!Œå!å!Žå!å!å!‘å!’å!“å!”å!•å!–å!—å!˜å!™å!šå!›å !œå!!å"!žå#!Ÿå$! å%!¡0!¢0!£0!¤·!¥É!¦Ç!§¨!¨0!©0!ª !«ÿ^!¬ !­ &!® !¯ !° !± !²0!³0!´0!µ0 !¶0 !·0 !¸0 !¹0 !º0!»0!¼0!½0!¾0!¿0!À±!Á×!Â÷!Ã"6!Ä"'!Å"(!Æ"!Ç"!È"*!É")!Ê"!Ë"7!Ì"!Í"¥!Î"%!Ï" !Ð#!Ñ"™!Ò"+!Ó".!Ô"a!Õ"L!Ö"H!×"=!Ø"!Ù"`!Ú"n!Û"o!Ü"d!Ý"e!Þ"!ß"5!à"4!á&B!â&@!ã°!ä 2!å 3!æ!!çÿ!è¤!éÿà!êÿá!ë 0!ì§!í!!î&!ï&!ð%Ë!ñ%Ï!ò%Î!ó%Ç!ô%Æ!õ%¡!ö% !÷%³!ø%²!ù ;!ú!’!û!!ü!‘!ý!“!þ0"@å&"Aå'"Bå("Cå)"Då*"Eå+"Få,"Gå-"Hå."Iå/"Jå0"Kå1"Lå2"Må3"Nå4"Oå5"På6"Qå7"Rå8"Så9"Tå:"Uå;"Vå<"Wå="Xå>"Yå?"Zå@"[åA"\åB"]åC"^åD"_åE"`åF"aåG"båH"cåI"dåJ"eåK"fåL"gåM"håN"iåO"jåP"kåQ"låR"måS"nåT"oåU"påV"qåW"råX"såY"tåZ"uå["vå\"wå]"xå^"yå_"zå`"{åa"|åb"}åc"~åd"€åe"åf"‚åg"ƒåh"„åi"…åj"†åk"‡ål"ˆåm"‰ån"Šåo"‹åp"Œåq"år"Žås"åt"åu"‘åv"’åw"“åx"”åy"•åz"–å{"—å|"˜å}"™å~"šå"›å€"œå"å‚"žåƒ"Ÿå„" å…"¡!p"¢!q"£!r"¤!s"¥!t"¦!u"§!v"¨!w"©!x"ª!y"«å†"¬å‡"­åˆ"®å‰"¯åŠ"°å‹"±$ˆ"²$‰"³$Š"´$‹"µ$Œ"¶$"·$Ž"¸$"¹$"º$‘"»$’"¼$“"½$”"¾$•"¿$–"À$—"Á$˜"Â$™"Ã$š"Ä$›"Å$t"Æ$u"Ç$v"È$w"É$x"Ê$y"Ë$z"Ì${"Í$|"Î$}"Ï$~"Ð$"Ñ$€"Ò$"Ó$‚"Ô$ƒ"Õ$„"Ö$…"×$†"Ø$‡"Ù$`"Ú$a"Û$b"Ü$c"Ý$d"Þ$e"ß$f"à$g"á$h"â$i"ãåŒ"äå"å2 "æ2!"ç2""è2#"é2$"ê2%"ë2&"ì2'"í2("î2)"ïåŽ"ðå"ñ!`"ò!a"ó!b"ô!c"õ!d"ö!e"÷!f"ø!g"ù!h"ú!i"û!j"ü!k"ýå"þå‘#@å’#Aå“#Bå”#Cå•#Då–#Eå—#Få˜#Gå™#Håš#Iå›#Jåœ#Kå#Låž#MåŸ#Nå #Oå¡#På¢#Qå£#Rå¤#Så¥#Tå¦#Uå§#Vå¨#Wå©#Xåª#Yå«#Zå¬#[å­#\å®#]å¯#^å°#_å±#`å²#aå³#bå´#cåµ#då¶#eå·#få¸#gå¹#håº#iå»#jå¼#kå½#lå¾#må¿#nåÀ#oåÁ#påÂ#qåÃ#råÄ#såÅ#tåÆ#uåÇ#våÈ#wåÉ#xåÊ#yåË#zåÌ#{åÍ#|åÎ#}åÏ#~åÐ#€åÑ#åÒ#‚åÓ#ƒåÔ#„åÕ#…åÖ#†å×#‡åØ#ˆåÙ#‰åÚ#ŠåÛ#‹åÜ#ŒåÝ#åÞ#Žåß#åà#åá#‘åâ#’åã#“åä#”åå#•åæ#–åç#—åè#˜åé#™åê#šåë#›åì#œåí#åî#žåï#Ÿåð# åñ#¡ÿ#¢ÿ#£ÿ#¤ÿå#¥ÿ#¦ÿ#§ÿ#¨ÿ#©ÿ #ªÿ #«ÿ #¬ÿ #­ÿ #®ÿ#¯ÿ#°ÿ#±ÿ#²ÿ#³ÿ#´ÿ#µÿ#¶ÿ#·ÿ#¸ÿ#¹ÿ#ºÿ#»ÿ#¼ÿ#½ÿ#¾ÿ#¿ÿ#Àÿ #Áÿ!#Âÿ"#Ãÿ##Äÿ$#Åÿ%#Æÿ&#Çÿ'#Èÿ(#Éÿ)#Êÿ*#Ëÿ+#Ìÿ,#Íÿ-#Îÿ.#Ïÿ/#Ðÿ0#Ñÿ1#Òÿ2#Óÿ3#Ôÿ4#Õÿ5#Öÿ6#×ÿ7#Øÿ8#Ùÿ9#Úÿ:#Ûÿ;#Üÿ<#Ýÿ=#Þÿ>#ßÿ?#àÿ@#áÿA#âÿB#ãÿC#äÿD#åÿE#æÿF#çÿG#èÿH#éÿI#êÿJ#ëÿK#ìÿL#íÿM#îÿN#ïÿO#ðÿP#ñÿQ#òÿR#óÿS#ôÿT#õÿU#öÿV#÷ÿW#øÿX#ùÿY#úÿZ#ûÿ[#üÿ\#ýÿ]#þÿã$@åò$Aåó$Båô$Cåõ$Dåö$Eå÷$Fåø$Gåù$Håú$Iåû$Jåü$Kåý$Låþ$Måÿ$Næ$Oæ$Pæ$Qæ$Ræ$Sæ$Tæ$Uæ$Væ$Wæ $Xæ $Yæ $Zæ $[æ $\æ$]æ$^æ$_æ$`æ$aæ$bæ$cæ$dæ$eæ$fæ$gæ$hæ$iæ$jæ$kæ$læ$mæ$næ $oæ!$pæ"$qæ#$ræ$$sæ%$tæ&$uæ'$væ($wæ)$xæ*$yæ+$zæ,${æ-$|æ.$}æ/$~æ0$€æ1$æ2$‚æ3$ƒæ4$„æ5$…æ6$†æ7$‡æ8$ˆæ9$‰æ:$Šæ;$‹æ<$Œæ=$æ>$Žæ?$æ@$æA$‘æB$’æC$“æD$”æE$•æF$–æG$—æH$˜æI$™æJ$šæK$›æL$œæM$æN$žæO$ŸæP$ æQ$¡0A$¢0B$£0C$¤0D$¥0E$¦0F$§0G$¨0H$©0I$ª0J$«0K$¬0L$­0M$®0N$¯0O$°0P$±0Q$²0R$³0S$´0T$µ0U$¶0V$·0W$¸0X$¹0Y$º0Z$»0[$¼0\$½0]$¾0^$¿0_$À0`$Á0a$Â0b$Ã0c$Ä0d$Å0e$Æ0f$Ç0g$È0h$É0i$Ê0j$Ë0k$Ì0l$Í0m$Î0n$Ï0o$Ð0p$Ñ0q$Ò0r$Ó0s$Ô0t$Õ0u$Ö0v$×0w$Ø0x$Ù0y$Ú0z$Û0{$Ü0|$Ý0}$Þ0~$ß0$à0€$á0$â0‚$ã0ƒ$ä0„$å0…$æ0†$ç0‡$è0ˆ$é0‰$ê0Š$ë0‹$ì0Œ$í0$î0Ž$ï0$ð0$ñ0‘$ò0’$ó0“$ôæR$õæS$öæT$÷æU$øæV$ùæW$úæX$ûæY$üæZ$ýæ[$þæ\%@æ]%Aæ^%Bæ_%Cæ`%Dæa%Eæb%Fæc%Gæd%Hæe%Iæf%Jæg%Kæh%Læi%Mæj%Næk%Oæl%Pæm%Qæn%Ræo%Sæp%Tæq%Uær%Væs%Wæt%Xæu%Yæv%Zæw%[æx%\æy%]æz%^æ{%_æ|%`æ}%aæ~%bæ%cæ€%dæ%eæ‚%fæƒ%gæ„%hæ…%iæ†%jæ‡%kæˆ%læ‰%mæŠ%næ‹%oæŒ%pæ%qæŽ%ræ%sæ%tæ‘%uæ’%væ“%wæ”%xæ•%yæ–%zæ—%{æ˜%|æ™%}æš%~æ›%€æœ%æ%‚æž%ƒæŸ%„æ %…æ¡%†æ¢%‡æ£%ˆæ¤%‰æ¥%Šæ¦%‹æ§%Œæ¨%æ©%Žæª%æ«%æ¬%‘æ­%’æ®%“æ¯%”æ°%•æ±%–æ²%—æ³%˜æ´%™æµ%šæ¶%›æ·%œæ¸%æ¹%žæº%Ÿæ»% æ¼%¡0¡%¢0¢%£0£%¤0¤%¥0¥%¦0¦%§0§%¨0¨%©0©%ª0ª%«0«%¬0¬%­0­%®0®%¯0¯%°0°%±0±%²0²%³0³%´0´%µ0µ%¶0¶%·0·%¸0¸%¹0¹%º0º%»0»%¼0¼%½0½%¾0¾%¿0¿%À0À%Á0Á%Â0Â%Ã0Ã%Ä0Ä%Å0Å%Æ0Æ%Ç0Ç%È0È%É0É%Ê0Ê%Ë0Ë%Ì0Ì%Í0Í%Î0Î%Ï0Ï%Ð0Ð%Ñ0Ñ%Ò0Ò%Ó0Ó%Ô0Ô%Õ0Õ%Ö0Ö%×0×%Ø0Ø%Ù0Ù%Ú0Ú%Û0Û%Ü0Ü%Ý0Ý%Þ0Þ%ß0ß%à0à%á0á%â0â%ã0ã%ä0ä%å0å%æ0æ%ç0ç%è0è%é0é%ê0ê%ë0ë%ì0ì%í0í%î0î%ï0ï%ð0ð%ñ0ñ%ò0ò%ó0ó%ô0ô%õ0õ%ö0ö%÷æ½%øæ¾%ùæ¿%úæÀ%ûæÁ%üæÂ%ýæÃ%þæÄ&@æÅ&AæÆ&BæÇ&CæÈ&DæÉ&EæÊ&FæË&GæÌ&HæÍ&IæÎ&JæÏ&KæÐ&LæÑ&MæÒ&NæÓ&OæÔ&PæÕ&QæÖ&Ræ×&SæØ&TæÙ&UæÚ&VæÛ&WæÜ&XæÝ&YæÞ&Zæß&[æà&\æá&]æâ&^æã&_æä&`æå&aææ&bæç&cæè&dæé&eæê&fæë&gæì&hæí&iæî&jæï&kæð&læñ&mæò&næó&oæô&pæõ&qæö&ræ÷&sæø&tæù&uæú&væû&wæü&xæý&yæþ&zæÿ&{ç&|ç&}ç&~ç&€ç&ç&‚ç&ƒç&„ç&…ç &†ç &‡ç &ˆç &‰ç &Šç&‹ç&Œç&ç&Žç&ç&ç&‘ç&’ç&“ç&”ç&•ç&–ç&—ç&˜ç&™ç&šç&›ç&œç &ç!&žç"&Ÿç#& ç$&¡‘&¢’&£“&¤”&¥•&¦–&§—&¨˜&©™&ªš&«›&¬œ&­&®ž&¯Ÿ&° &±¡&²£&³¤&´¥&µ¦&¶§&·¨&¸©&¹ç%&ºç&&»ç'&¼ç(&½ç)&¾ç*&¿ç+&Àç,&Á±&²&ó&Ä´&ŵ&ƶ&Ç·&ȸ&ɹ&ʺ&Ë»&̼&ͽ&ξ&Ï¿&ÐÀ&ÑÁ&ÒÃ&ÓÄ&ÔÅ&ÕÆ&ÖÇ&×È&ØÉ&Ùç-&Úç.&Ûç/&Üç0&Ýç1&Þç2&ßç3&àþ5&áþ6&âþ9&ãþ:&äþ?&åþ@&æþ=&çþ>&èþA&éþB&êþC&ëþD&ìç4&íç5&îþ;&ïþ<&ðþ7&ñþ8&òþ1&óç6&ôþ3&õþ4&öç7&÷ç8&øç9&ùç:&úç;&ûç<&üç=&ýç>&þç?'@ç@'AçA'BçB'CçC'DçD'EçE'FçF'GçG'HçH'IçI'JçJ'KçK'LçL'MçM'NçN'OçO'PçP'QçQ'RçR'SçS'TçT'UçU'VçV'WçW'XçX'YçY'ZçZ'[ç['\ç\']ç]'^ç^'_ç_'`ç`'aça'bçb'cçc'dçd'eçe'fçf'gçg'hçh'içi'jçj'kçk'lçl'mçm'nçn'oço'pçp'qçq'rçr'sçs'tçt'uçu'vçv'wçw'xçx'yçy'zçz'{ç{'|ç|'}ç}'~ç~'€ç'ç€'‚ç'ƒç‚'„çƒ'…ç„'†ç…'‡ç†'ˆç‡'‰çˆ'Šç‰'‹çŠ'Œç‹'çŒ'Žç'çŽ'ç'‘ç'’ç‘'“ç’'”ç“'•ç”'–ç•'—ç–'˜ç—'™ç˜'šç™'›çš'œç›'çœ'žç'Ÿçž' çŸ'¡'¢'£'¤'¥'¦'§'¨'©'ª'«'¬'­'®'¯'°'±'² '³!'´"'µ#'¶$'·%'¸&'¹''º('»)'¼*'½+'¾,'¿-'À.'Á/'Âç 'Ãç¡'Äç¢'Åç£'Æç¤'Çç¥'Èç¦'Éç§'Êç¨'Ëç©'Ìçª'Íç«'Îç¬'Ïç­'Ðç®'Ñ0'Ò1'Ó2'Ô3'Õ4'Ö5'×Q'Ø6'Ù7'Ú8'Û9'Ü:'Ý;'Þ<'ß='à>'á?'â@'ãA'äB'åC'æD'çE'èF'éG'êH'ëI'ìJ'íK'îL'ïM'ðN'ñO'òç¯'óç°'ôç±'õç²'öç³'÷ç´'øçµ'ùç¶'úç·'ûç¸'üç¹'ýçº'þç»(@Ê(AË(BÙ(C (D (E %(F 5(G!(H! (I!–(J!—(K!˜(L!™(M"(N"(O"#(P"R(Q"f(R"g(S"¿(T%P(U%Q(V%R(W%S(X%T(Y%U(Z%V([%W(\%X(]%Y(^%Z(_%[(`%\(a%](b%^(c%_(d%`(e%a(f%b(g%c(h%d(i%e(j%f(k%g(l%h(m%i(n%j(o%k(p%l(q%m(r%n(s%o(t%p(u%q(v%r(w%s(x%(y%‚(z%ƒ({%„(|%…(}%†(~%‡(€%ˆ(%‰(‚%Š(ƒ%‹(„%Œ(…%(†%Ž(‡%(ˆ%“(‰%”(Š%•(‹%¼(Œ%½(%â(Ž%ã(%ä(%å(‘& (“0(”0(•0(–ç¼(—ç½(˜ç¾(™ç¿(šçÀ(›çÁ(œçÂ(çÃ(žçÄ(ŸçÅ( çÆ(¡(¢á(£Î(¤à(¥(¦é(§(¨è(©+(ªí(«Ð(¬ì(­M(®ó(¯Ò(°ò(±k(²ú(³Ô(´ù(µÖ(¶Ø(·Ú(¸Ü(¹ü(ºê(»Q(¼çÇ(½D(¾H(¿çÈ(Àa(ÁçÉ(ÂçÊ(ÃçË(ÄçÌ(Å1(Æ1(Ç1(È1(É1 (Ê1 (Ë1 (Ì1 (Í1 (Î1(Ï1(Ð1(Ñ1(Ò1(Ó1(Ô1(Õ1(Ö1(×1(Ø1(Ù1(Ú1(Û1(Ü1(Ý1(Þ1(ß1(à1 (á1!(â1"(ã1#(ä1$(å1%(æ1&(ç1'(è1((é1)(êçÍ(ëçÎ(ìçÏ(íçÐ(îçÑ(ïçÒ(ðçÓ(ñçÔ(òçÕ(óçÖ(ôç×(õçØ(öçÙ(÷çÚ(øçÛ(ùçÜ(úçÝ(ûçÞ(üçß(ýçà(þçá)@0!)A0")B0#)C0$)D0%)E0&)F0')G0()H0))I2£)J3Ž)K3)L3œ)M3)N3ž)O3¡)P3Ä)Q3Î)R3Ñ)S3Ò)T3Õ)Uþ0)Vÿâ)Wÿä)Xçâ)Y!!)Z21)[çã)\ )]çä)^çå)_çæ)`0ü)a0›)b0œ)c0ý)d0þ)e0)f0)g0ž)hþI)iþJ)jþK)kþL)lþM)mþN)nþO)oþP)pþQ)qþR)rþT)sþU)tþV)uþW)vþY)wþZ)xþ[)yþ\)zþ]){þ^)|þ_)}þ`)~þa)€þb)þc)‚þd)ƒþe)„þf)…þh)†þi)‡þj)ˆþk)‰çç)Šçè)‹çé)Œçê)çë)Žçì)çí)çî)‘çï)’çð)“çñ)”çò)•çó)–0)—çô)˜çõ)™çö)šç÷)›çø)œçù)çú)žçû)Ÿçü) çý)¡çþ)¢çÿ)£è)¤%)¥%)¦%)§%)¨%)©%)ª%)«%)¬%)­% )®% )¯% )°% )±% )²%)³%)´%)µ%)¶%)·%)¸%)¹%)º%)»%)¼%)½%)¾%)¿%)À%)Á%)Â%)Ã%)Ä% )Å%!)Æ%")Ç%#)È%$)É%%)Ê%&)Ë%')Ì%()Í%))Î%*)Ï%+)Ð%,)Ñ%-)Ò%.)Ó%/)Ô%0)Õ%1)Ö%2)×%3)Ø%4)Ù%5)Ú%6)Û%7)Ü%8)Ý%9)Þ%:)ß%;)à%<)á%=)â%>)ã%?)ä%@)å%A)æ%B)ç%C)è%D)é%E)ê%F)ë%G)ì%H)í%I)î%J)ï%K)ðè)ñè)òè)óè)ôè)õè)öè)÷è)øè )ùè )úè )ûè )üè )ýè)þè*@rÜ*ArÝ*Brß*Crâ*Drã*Erä*Frå*Græ*Hrç*Irê*Jrë*Krõ*Lrö*Mrù*Nrý*Orþ*Prÿ*Qs*Rs*Ss*Ts*Us*Vs*Ws*Xs *Ys *Zs *[s *\s*]s*^s*_s*`s*as*bs*cs*ds*es *fs#*gs$*hs&*is'*js(*ks-*ls/*ms0*ns2*os3*ps5*qs6*rs:*ss;*ts<*us=*vs@*wsA*xsB*ysC*zsD*{sE*|sF*}sG*~sH*€sI*sJ*‚sK*ƒsL*„sN*…sO*†sQ*‡sS*ˆsT*‰sU*ŠsV*‹sX*ŒsY*sZ*Žs[*s\*s]*‘s^*’s_*“sa*”sb*•sc*–sd*—se*˜sf*™sg*šsh*›si*œsj*sk*žsn*Ÿsp* sq*¡à*¢à*£à*¤à*¥à*¦à*§à*¨à*©à*ªà *«à *¬à *­à *®à *¯à*°à*±à*²à*³à*´à*µà*¶à*·à*¸à*¹à*ºà*»à*¼à*½à*¾à*¿à*Àà*Áà *Âà!*Ãà"*Äà#*Åà$*Æà%*Çà&*Èà'*Éà(*Êà)*Ëà**Ìà+*Íà,*Îà-*Ïà.*Ðà/*Ñà0*Òà1*Óà2*Ôà3*Õà4*Öà5*×à6*Øà7*Ùà8*Úà9*Ûà:*Üà;*Ýà<*Þà=*ßà>*àà?*áà@*âàA*ãàB*äàC*åàD*æàE*çàF*èàG*éàH*êàI*ëàJ*ìàK*íàL*îàM*ïàN*ðàO*ñàP*òàQ*óàR*ôàS*õàT*öàU*÷àV*øàW*ùàX*úàY*ûàZ*üà[*ýà\*þà]+@sr+Ass+Bst+Csu+Dsv+Esw+Fsx+Gsy+Hsz+Is{+Js|+Ks}+Ls+Ms€+Ns+Os‚+Psƒ+Qs…+Rs†+Ssˆ+TsŠ+UsŒ+Vs+Ws+Xs+Ys’+Zs“+[s”+\s•+]s—+^s˜+_s™+`sš+asœ+bs+csž+ds +es¡+fs£+gs¤+hs¥+is¦+js§+ks¨+lsª+ms¬+ns­+os±+ps´+qsµ+rs¶+ss¸+ts¹+us¼+vs½+ws¾+xs¿+ysÁ+zsÃ+{sÄ+|sÅ+}sÆ+~sÇ+€sË+sÌ+‚sÎ+ƒsÒ+„sÓ+…sÔ+†sÕ+‡sÖ+ˆs×+‰sØ+ŠsÚ+‹sÛ+ŒsÜ+sÝ+Žsß+sá+sâ+‘sã+’sä+“sæ+”sè+•sê+–së+—sì+˜sî+™sï+šsð+›sñ+œsó+sô+žsõ+Ÿsö+ s÷+¡à^+¢à_+£à`+¤àa+¥àb+¦àc+§àd+¨àe+©àf+ªàg+«àh+¬ài+­àj+®àk+¯àl+°àm+±àn+²ào+³àp+´àq+µàr+¶às+·àt+¸àu+¹àv+ºàw+»àx+¼ày+½àz+¾à{+¿à|+Àà}+Áà~+Âà+Ãà€+Äà+Åà‚+Æàƒ+Çà„+Èà…+Éà†+Êà‡+Ëàˆ+Ìà‰+ÍàŠ+Îà‹+ÏàŒ+Ðà+ÑàŽ+Òà+Óà+Ôà‘+Õà’+Öà“+×à”+Øà•+Ùà–+Úà—+Ûà˜+Üà™+Ýàš+Þà›+ßàœ+àà+áàž+âàŸ+ãà +äà¡+åà¢+æà£+çà¤+èà¥+éà¦+êà§+ëà¨+ìà©+íàª+îà«+ïà¬+ðà­+ñà®+òà¯+óà°+ôà±+õà²+öà³+÷à´+øàµ+ùà¶+úà·+ûà¸+üà¹+ýàº+þà»,@sø,Asù,Bsú,Csû,Dsü,Esý,Fsþ,Gsÿ,Ht,It,Jt,Kt,Lt,Mt,Nt ,Ot ,Pt ,Qt,Rt,St,Tt,Ut,Vt,Wt,Xt,Yt,Zt,[t,\t,]t,^t,_t ,`t!,at#,bt$,ct',dt),et+,ft-,gt/,ht1,it2,jt7,kt8,lt9,mt:,nt;,ot=,pt>,qt?,rt@,stB,ttC,utD,vtE,wtF,xtG,ytH,ztI,{tJ,|tK,}tL,~tM,€tN,tO,‚tP,ƒtQ,„tR,…tS,†tT,‡tV,ˆtX,‰t],Št`,‹ta,Œtb,tc,Žtd,te,tf,‘tg,’th,“ti,”tj,•tk,–tl,—tn,˜to,™tq,štr,›ts,œtt,tu,žtx,Ÿty, tz,¡à¼,¢à½,£à¾,¤à¿,¥àÀ,¦àÁ,§àÂ,¨àÃ,©àÄ,ªàÅ,«àÆ,¬àÇ,­àÈ,®àÉ,¯àÊ,°àË,±àÌ,²àÍ,³àÎ,´àÏ,µàÐ,¶àÑ,·àÒ,¸àÓ,¹àÔ,ºàÕ,»àÖ,¼à×,½àØ,¾àÙ,¿àÚ,ÀàÛ,ÁàÜ,ÂàÝ,ÃàÞ,Äàß,Åàà,Æàá,Çàâ,Èàã,Éàä,Êàå,Ëàæ,Ìàç,Íàè,Îàé,Ïàê,Ðàë,Ñàì,Òàí,Óàî,Ôàï,Õàð,Öàñ,×àò,Øàó,Ùàô,Úàõ,Ûàö,Üà÷,Ýàø,Þàù,ßàú,ààû,áàü,âàý,ãàþ,äàÿ,åá,æá,çá,èá,éá,êá,ëá,ìá,íá,îá ,ïá ,ðá ,ñá ,òá ,óá,ôá,õá,öá,÷á,øá,ùá,úá,ûá,üá,ýá,þá-@t{-At|-Bt}-Ct-Dt‚-Et„-Ft…-Gt†-Htˆ-It‰-JtŠ-KtŒ-Lt-Mt-Nt‘-Ot’-Pt“-Qt”-Rt•-St–-Tt—-Ut˜-Vt™-Wtš-Xt›-Yt-ZtŸ-[t -\t¡-]t¢-^t£-_t¤-`t¥-at¦-btª-ct«-dt¬-et­-ft®-gt¯-ht°-it±-jt²-kt³-lt´-mtµ-nt¶-ot·-pt¸-qt¹-rt»-st¼-tt½-ut¾-vt¿-wtÀ-xtÁ-ytÂ-ztÃ-{tÄ-|tÅ-}tÆ-~tÇ-€tÈ-tÉ-‚tÊ-ƒtË-„tÌ-…tÍ-†tÎ-‡tÏ-ˆtÐ-‰tÑ-ŠtÓ-‹tÔ-ŒtÕ-tÖ-Žt×-tØ-tÙ-‘tÚ-’tÛ-“tÝ-”tß-•tá-–tå-—tç-˜tè-™té-štê-›të-œtì-tí-žtð-Ÿtñ- tò-¡á-¢á-£á-¤á-¥á-¦á-§á -¨á!-©á"-ªá#-«á$-¬á%-­á&-®á'-¯á(-°á)-±á*-²á+-³á,-´á--µá.-¶á/-·á0-¸á1-¹á2-ºá3-»á4-¼á5-½á6-¾á7-¿á8-Àá9-Áá:-Âá;-Ãá<-Äá=-Åá>-Æá?-Çá@-ÈáA-ÉáB-ÊáC-ËáD-ÌáE-ÍáF-ÎáG-ÏáH-ÐáI-ÑáJ-ÒáK-ÓáL-ÔáM-ÕáN-ÖáO-×áP-ØáQ-ÙáR-ÚáS-ÛáT-ÜáU-ÝáV-ÞáW-ßáX-àáY-ááZ-âá[-ãá\-äá]-åá^-æá_-çá`-èáa-éáb-êác-ëád-ìáe-íáf-îág-ïáh-ðái-ñáj-òák-óál-ôám-õán-öáo-÷áp-øáq-ùár-úás-ûát-üáu-ýáv-þáw.@tó.Atõ.Btø.Ctù.Dtú.Etû.Ftü.Gtý.Htþ.Iu.Ju.Ku.Lu.Mu.Nu.Ou.Pu.Qu .Ru .Su .Tu .Uu.Vu.Wu.Xu.Yu.Zu.[u.\u.]u.^u._u .`u!.au".bu#.cu$.du&.eu'.fu*.gu..hu4.iu6.ju9.ku<.lu=.mu?.nuA.ouB.puC.quD.ruF.suG.tuI.uuJ.vuM.wuP.xuQ.yuR.zuS.{uU.|uV.}uW.~uX.€u].u^.‚u_.ƒu`.„ua.…ub.†uc.‡ud.ˆug.‰uh.Šui.‹uk.Œul.um.Žun.uo.up.‘uq.’us.“uu.”uv.•uw.–uz.—u{.˜u|.™u}.šu~.›u€.œu.u‚.žu„.Ÿu…. u‡.¡áx.¢áy.£áz.¤á{.¥á|.¦á}.§á~.¨á.©á€.ªá.«á‚.¬áƒ.­á„.®á….¯á†.°á‡.±áˆ.²á‰.³áŠ.´á‹.µáŒ.¶á.·áŽ.¸á.¹á.ºá‘.»á’.¼á“.½á”.¾á•.¿á–.Àá—.Áá˜.Âá™.Ãáš.Äá›.Åáœ.Æá.Çáž.ÈáŸ.Éá .Êá¡.Ëá¢.Ìá£.Íá¤.Îá¥.Ïá¦.Ðá§.Ñá¨.Òá©.Óáª.Ôá«.Õá¬.Öá­.×á®.Øá¯.Ùá°.Úá±.Ûá².Üá³.Ýá´.Þáµ.ßá¶.àá·.áá¸.âá¹.ãáº.äá».åá¼.æá½.çá¾.èá¿.éáÀ.êáÁ.ëáÂ.ìáÃ.íáÄ.îáÅ.ïáÆ.ðáÇ.ñáÈ.òáÉ.óáÊ.ôáË.õáÌ.öáÍ.÷áÎ.øáÏ.ùáÐ.úáÑ.ûáÒ.üáÓ.ýáÔ.þáÕ/@uˆ/Au‰/BuŠ/CuŒ/Du/EuŽ/Fu/Gu“/Hu•/Iu˜/Ju›/Kuœ/Luž/Mu¢/Nu¦/Ou§/Pu¨/Qu©/Ruª/Su­/Tu¶/Uu·/Vuº/Wu»/Xu¿/YuÀ/ZuÁ/[uÆ/\uË/]uÌ/^uÎ/_uÏ/`uÐ/auÑ/buÓ/cu×/duÙ/euÚ/fuÜ/guÝ/huß/iuà/juá/kuå/lué/muì/nuí/ouî/puï/quò/ruó/suõ/tuö/uu÷/vuø/wuú/xuû/yuý/zuþ/{v/|v/}v/~v/€v/v /‚v /ƒv /„v/…v/†v/‡v/ˆv/‰v/Šv/‹v/Œv/v/Žv/v!/v#/‘v'/’v(/“v,/”v./•v//–v1/—v2/˜v6/™v7/šv9/›v:/œv;/v=/žvA/ŸvB/ vD/¡áÖ/¢á×/£áØ/¤áÙ/¥áÚ/¦áÛ/§áÜ/¨áÝ/©áÞ/ªáß/«áà/¬áá/­áâ/®áã/¯áä/°áå/±áæ/²áç/³áè/´áé/µáê/¶áë/·áì/¸áí/¹áî/ºáï/»áð/¼áñ/½áò/¾áó/¿áô/Àáõ/Ááö/Âá÷/Ãáø/Äáù/Åáú/Æáû/Çáü/Èáý/Éáþ/Êáÿ/Ëâ/Ìâ/Íâ/Îâ/Ïâ/Ðâ/Ñâ/Òâ/Óâ/Ôâ /Õâ /Öâ /×â /Øâ /Ùâ/Úâ/Ûâ/Üâ/Ýâ/Þâ/ßâ/àâ/áâ/ââ/ãâ/äâ/åâ/æâ/çâ/èâ/éâ/êâ/ëâ /ìâ!/íâ"/îâ#/ïâ$/ðâ%/ñâ&/òâ'/óâ(/ôâ)/õâ*/öâ+/÷â,/øâ-/ùâ./úâ//ûâ0/üâ1/ýâ2/þâ30@vE0AvF0BvG0CvH0DvI0EvJ0FvK0GvN0HvO0IvP0JvQ0KvR0LvS0MvU0NvW0OvX0PvY0QvZ0Rv[0Sv]0Tv_0Uv`0Vva0Wvb0Xvd0Yve0Zvf0[vg0\vh0]vi0^vj0_vl0`vm0avn0bvp0cvq0dvr0evs0fvt0gvu0hvv0ivw0jvy0kvz0lv|0mv0nv€0ov0pvƒ0qv…0rv‰0svŠ0tvŒ0uv0vv0wv0xv’0yv”0zv•0{v—0|v˜0}vš0~v›0€vœ0v0‚vž0ƒvŸ0„v 0…v¡0†v¢0‡v£0ˆv¥0‰v¦0Šv§0‹v¨0Œv©0vª0Žv«0v¬0v­0‘v¯0’v°0“v³0”vµ0•v¶0–v·0—v¸0˜v¹0™vº0šv»0›v¼0œv½0v¾0žvÀ0ŸvÁ0 vÃ0¡UJ0¢–?0£WÃ0¤c(0¥TÎ0¦U 0§TÀ0¨v‘0©vL0ª…<0«wî0¬‚~0­x0®r10¯–˜0°—0±l(0²[‰0³Oú0´c 0µf—0¶\¸0·€ú0¸hH0¹€®0ºf0»vÎ0¼Qù0½eV0¾q¬0¿ñ0Àˆ„0ÁP²0ÂYe0ÃaÊ0Äo³0Å‚­0ÆcL0ÇbR0ÈSí0ÉT'0Ê{0ËQk0Ìu¤0Í]ô0ÎbÔ0ÏË0Зv0ÑbŠ0Ò€0ÓW]0Ô—80Õb0Ör80×v}0ØgÏ0Ùv~0ÚdF0ÛOp0Ü%0ÝbÜ0Þz0ße‘0àsí0ád,0âbs0ã‚,0ä˜0åg0ærH0çbn0èbÌ0éO40êtã0ëSJ0ìRž0í~Ê0î¦0ï^.0ðh†0ñiœ0ò€0ó~Ñ0ôhÒ0õxÅ0ö†Œ0÷•Q0øP0ùŒ$0ú‚Þ0û€Þ0üS0ý‰0þRe1@vÄ1AvÇ1BvÉ1CvË1DvÌ1EvÓ1FvÕ1GvÙ1HvÚ1IvÜ1JvÝ1KvÞ1Lvà1Mvá1Nvâ1Ovã1Pvä1Qvæ1Rvç1Svè1Tvé1Uvê1Vvë1Wvì1Xví1Yvð1Zvó1[võ1\vö1]v÷1^vú1_vû1`vý1avÿ1bw1cw1dw1ew1fw1gw 1hw 1iw1jw1kw1lw1mw1nw1ow1pw1qw1rw1sw1tw1uw1vw1ww1xw!1yw#1zw$1{w%1|w'1}w*1~w+1€w,1w.1‚w01ƒw11„w21…w31†w41‡w91ˆw;1‰w=1Šw>1‹w?1ŒwB1wD1ŽwE1wF1wH1‘wI1’wJ1“wK1”wL1•wM1–wN1—wO1˜wR1™wS1šwT1›wU1œwV1wW1žwX1ŸwY1 w\1¡…„1¢–ù1£OÝ1¤X!1¥™q1¦[1§b±1¨b¥1©f´1ªŒy1«œ1¬r1­go1®x‘1¯`²1°SQ1±S1²ˆ1³€Ì1´1µ”¡1¶P 1·rÈ1¸Y1¹`ë1ºq1»ˆ«1¼YT1½‚ï1¾g,1¿{(1À])1Á~÷1Âu-1Ãlõ1ÄŽf1Åø1Æ<1ÇŸ;1ÈkÔ1É‘1Ê{1Ë_|1Ìx§1Í„Ö1Î…=1ÏkÕ1ÐkÙ1ÑkÖ1Ò^1Ó^‡1Ôuù1Õ•í1Öe]1×_ 1Ø_Å1ÙŸ1ÚXÁ1ÛÂ1Ü1Ý–[1Þ—­1ß¹1à1á,1âbA1ãO¿1äSØ1åS^1æ¨1ç©1è«1éM1êh1ë_j1ì˜1íˆh1îœÖ1ïa‹1ðR+1ñv*1ò_l1óeŒ1ôoÒ1õnè1ö[¾1÷dH1øQu1ùQ°1úgÄ1ûN1üyÉ1ý™|1þp³2@w]2Aw^2Bw_2Cw`2Dwd2Ewg2Fwi2Gwj2Hwm2Iwn2Jwo2Kwp2Lwq2Mwr2Nws2Owt2Pwu2Qwv2Rww2Swx2Twz2Uw{2Vw|2Ww2Xw‚2Ywƒ2Zw†2[w‡2\wˆ2]w‰2^wŠ2_w‹2`w2aw2bw“2cw”2dw•2ew–2fw—2gw˜2hw™2iwš2jw›2kwœ2lw2mwž2nw¡2ow£2pw¤2qw¦2rw¨2sw«2tw­2uw®2vw¯2ww±2xw²2yw´2zw¶2{w·2|w¸2}w¹2~wº2€w¼2w¾2‚wÀ2ƒwÁ2„wÂ2…wÃ2†wÄ2‡wÅ2ˆwÆ2‰wÇ2ŠwÈ2‹wÉ2ŒwÊ2wË2ŽwÌ2wÎ2wÏ2‘wÐ2’wÑ2“wÒ2”wÓ2•wÔ2–wÕ2—wÖ2˜wØ2™wÙ2šwÚ2›wÝ2œwÞ2wß2žwà2Ÿwá2 wä2¡uÅ2¢^v2£s»2¤ƒà2¥d­2¦bè2§”µ2¨lâ2©SZ2ªRÃ2«d2¬”Â2­{”2®O/2¯^2°‚62±2²Š2³n$2´lÊ2µšs2¶cU2·S\2¸Tú2¹ˆe2ºWà2»N 2¼^2½ke2¾|?2¿è2À`2Ádæ2Âs2ÈÁ2ÄgP2ÅbM2Æ"2Çwl2ÈŽ)2É‘Ç2Ê_i2˃Ü2Ì…!2Í™2ÎSÂ2φ•2Ðk‹2Ñ`í2Ò`è2Óp2Ô‚Í2Õ‚12ÖNÓ2×l§2Ø…Ï2ÙdÍ2Ú|Ù2Ûiý2Üfù2݃I2ÞS•2ß{V2àO§2áQŒ2âmK2ã\B2äŽm2åcÒ2æSÉ2çƒ,2èƒ62égå2êx´2ëd=2ì[ß2í\”2î]î2ï‹ç2ðbÆ2ñgô2òŒz2ód2ôcº2õ‡I2ö™‹2÷Œ2ø 2ù”ò2úN§2û–2ü˜¤2ýf 2þs3@wæ3Awè3Bwê3Cwï3Dwð3Ewñ3Fwò3Gwô3Hwõ3Iw÷3Jwù3Kwú3Lwû3Mwü3Nx3Ox3Px3Qx3Rx3Sx3Tx 3Ux 3Vx3Wx3Xx3Yx3Zx3[x3\x3]x3^x 3_x!3`x"3ax$3bx(3cx*3dx+3ex.3fx/3gx13hx23ix33jx53kx63lx=3mx?3nxA3oxB3pxC3qxD3rxF3sxH3txI3uxJ3vxK3wxM3xxO3yxQ3zxS3{xT3|xX3}xY3~xZ3€x[3x\3‚x^3ƒx_3„x`3…xa3†xb3‡xc3ˆxd3‰xe3Šxf3‹xg3Œxh3xi3Žxo3xp3xq3‘xr3’xs3“xt3”xu3•xv3–xx3—xy3˜xz3™x{3šx}3›x~3œx3x€3žx3Ÿx‚3 xƒ3¡W:3¢\3£^83¤•3¥P3¦€ 3§S‚3¨e^3©uE3ªU13«P!3¬…3­b„3®”ž3¯g3°V23±on3²]â3³T53´p’3µf3¶bo3·d¤3¸c£3¹_{3ºoˆ3»ô3¼ã3½°3¾\3¿fh3À_ñ3Ál‰3–H3Ã3Ĉl3Åd‘3Æyð3ÇWÎ3ÈjY3Éb3ÊTH3ËNX3Ìz 3Í`é3Îo„3Ï‹Ú3Ðb3Ñ3Òš‹3Óyä3ÔT3Õuô3Öc3×S3Øl`3Ùß3Ú_3Ûšp3Ü€;3ÝŸ3ÞOˆ3ß\:3àd3áÅ3âe¥3ãp½3äQE3åQ²3æ†k3ç]3è[ 3éb½3ê‘l3ëut3ìŽ 3íz 3îa3ï{y3ðNÇ3ñ~ø3òw…3óN3ôí3õR3öQú3÷jq3øS¨3ùއ3ú•3û–Ï3ünÁ3ý–d3þiZ4@x„4Ax…4Bx†4Cxˆ4DxŠ4Ex‹4Fx4Gx4Hx’4Ix”4Jx•4Kx–4Lx™4Mx4Nxž4Ox 4Px¢4Qx¤4Rx¦4Sx¨4Tx©4Uxª4Vx«4Wx¬4Xx­4Yx®4Zx¯4[xµ4\x¶4]x·4^x¸4_xº4`x»4ax¼4bx½4cx¿4dxÀ4exÂ4fxÃ4gxÄ4hxÆ4ixÇ4jxÈ4kxÌ4lxÍ4mxÎ4nxÏ4oxÑ4pxÒ4qxÓ4rxÖ4sx×4txØ4uxÚ4vxÛ4wxÜ4xxÝ4yxÞ4zxß4{xà4|xá4}xâ4~xã4€xä4xå4‚xæ4ƒxç4„xé4…xê4†xë4‡xí4ˆxî4‰xï4Šxð4‹xñ4Œxó4xõ4Žxö4xø4xù4‘xû4’xü4“xý4”xþ4•xÿ4–y4—y4˜y4™y4šy4›y4œy4y 4žy 4Ÿy 4 y 4¡x@4¢P¨4£w×4¤d4¥‰æ4¦Y4§cã4¨]Ý4©z4ªi=4«O 4¬‚94­U˜4®N24¯u®4°z—4±^b4²^Š4³•ï4´R4µT94¶pŠ4·cv4¸•$4¹W‚4ºf%4»i?4¼‘‡4½U4¾mó4¿~¯4Àˆ"4Áb34Â~ð4Ãuµ4ă(4ÅxÁ4Æ–Ì4Çž4ÈaH4Ét÷4Ê‹Í4Ëkd4ÌR:4ÍP4Îk!4Ï€j4Єq4ÑVñ4ÒS4ÓNÎ4ÔN4ÕQÑ4Ö|—4ב‹4Ø|4ÙOÃ4ÚŽ4Û{á4Üzœ4Ýdg4Þ]4ßP¬4à4áv4â|¹4ãmì4äà4ågQ4æ[X4ç[ø4èxË4éd®4êd4ëcª4ìc+4í•4îd-4ï¾4ð{T4ñv)4òbS4óY'4ôTF4õky4öP£4÷b44ø^&4ùk†4úNã4û74üˆ‹4ý_…4þ.5@y 5Ay5By5Cy5Dy5Ey5Fy5Gy5Hy5Iy5Jy5Ky5Ly5My5Ny5Oy5Py5Qy 5Ry!5Sy"5Ty#5Uy%5Vy&5Wy'5Xy(5Yy)5Zy*5[y+5\y,5]y-5^y.5_y/5`y05ay15by25cy35dy55ey65fy75gy85hy95iy=5jy?5kyB5lyC5myD5nyE5oyG5pyJ5qyK5ryL5syM5tyN5uyO5vyP5wyQ5xyR5yyT5zyU5{yX5|yY5}ya5~yc5€yd5yf5‚yi5ƒyj5„yk5…yl5†yn5‡yp5ˆyq5‰yr5Šys5‹yt5Œyu5yv5Žyy5y{5y|5‘y}5’y~5“y5”y‚5•yƒ5–y†5—y‡5˜yˆ5™y‰5šy‹5›yŒ5œy5yŽ5žy5Ÿy‘5 y’5¡` 5¢€=5£bÅ5¤N95¥SU5¦ø5§c¸5¨€Æ5©eæ5ªl.5«OF5¬`î5­má5®‹Þ5¯_95°†Ë5±_S5²c!5³QZ5´ƒa5µhc5¶R5·cc5¸ŽH5¹P5º\›5»yw5¼[ü5½R05¾z;5¿`¼5ÀS5Áv×5Â_·5Ã_—5Äv„5ÅŽl5Æpo5Çv{5È{I5Éwª5ÊQó5Ë“5ÌX$5ÍON5Înô5Ïê5ÐeL5Ñ{5ÒrÄ5Óm¤5Ôß5ÕZá5Öbµ5×^•5ØW05Ù„‚5Ú{,5Û^5Ü_5Ý5Þ5ߘ 5àc‚5ánÇ5âx˜5ãp¹5äQx5å—[5æW«5çu55èOC5éu85ê^—5ë`æ5ìY`5ímÀ5îk¿5ïx‰5ðSü5ñ–Õ5òQË5óR5ôc‰5õT 5ö”“5÷Œ5øÌ5ùr95úxŸ5û‡v5üí5ýŒ 5þSà6@y“6Ay”6By•6Cy–6Dy—6Ey˜6Fy™6Gy›6Hyœ6Iy6Jyž6KyŸ6Ly 6My¡6Ny¢6Oy£6Py¤6Qy¥6Ry¦6Sy¨6Ty©6Uyª6Vy«6Wy¬6Xy­6Yy®6Zy¯6[y°6\y±6]y²6^y´6_yµ6`y¶6ay·6by¸6cy¼6dy¿6eyÂ6fyÄ6gyÅ6hyÇ6iyÈ6jyÊ6kyÌ6lyÎ6myÏ6nyÐ6oyÓ6pyÔ6qyÖ6ry×6syÙ6tyÚ6uyÛ6vyÜ6wyÝ6xyÞ6yyà6zyá6{yâ6|yå6}yè6~yê6€yì6yî6‚yñ6ƒyò6„yó6…yô6†yõ6‡yö6ˆy÷6‰yù6Šyú6‹yü6Œyþ6yÿ6Žz6z6z6‘z6’z6“z 6”z 6•z 6–z6—z6˜z6™z6šz6›z6œz6z6žz6Ÿz6 z6¡N6¢vï6£Sî6¤”‰6¥˜v6¦Ÿ6§•-6¨[š6©‹¢6ªN"6«N6¬Q¬6­„c6®aÂ6¯R¨6°h 6±O—6²`k6³Q»6´m6µQ\6¶b–6·e—6¸–a6¹ŒF6º6»uØ6¼ý6½wc6¾kÒ6¿rŠ6Àrì6Á‹û6ÂX56Ãwy6ÄL6Åg\6Æ•@6Ç€š6È^¦6Én!6ÊY’6Ëzï6Ìwí6Í•;6Îkµ6Ïe­6Ð6ÑX6ÒQQ6Ó–6Ô[ù6ÕX©6ÖT(6׎r6Øef6Ù˜6ÚVä6Û”6Üvþ6ÝA6Þc‡6ßTÆ6àY6áY:6âW›6㎲6äg56åú6æ‚56çRA6è`ð6éX6ê†þ6ë\è6ìžE6íOÄ6î˜66ðZ%6ñ`v6òS„6ób|6ôO6õ‘6ö™6÷`i6ø€ 6ùQ?6ú€36û\6ü™u6ým16þNŒ7@z7Az7Bz!7Cz"7Dz$7Ez%7Fz&7Gz'7Hz(7Iz)7Jz*7Kz+7Lz,7Mz-7Nz.7Oz/7Pz07Qz17Rz27Sz47Tz57Uz67Vz87Wz:7Xz>7Yz@7ZzA7[zB7\zC7]zD7^zE7_zG7`zH7azI7bzJ7czK7dzL7ezM7fzN7gzO7hzP7izR7jzS7kzT7lzU7mzV7nzX7ozY7pzZ7qz[7rz\7sz]7tz^7uz_7vz`7wza7xzb7yzc7zzd7{ze7|zf7}zg7~zh7€zi7zj7‚zk7ƒzl7„zm7…zn7†zo7‡zq7ˆzr7‰zs7Šzu7‹z{7Œz|7z}7Žz~7z‚7z…7‘z‡7’z‰7“zŠ7”z‹7•zŒ7–zŽ7—z7˜z7™z“7šz”7›z™7œzš7z›7žzž7Ÿz¡7 z¢7¡07¢SÑ7£Z7¤{O7¥O7¦NO7§–7¨lÕ7©sÐ7ª…é7«^7¬uj7­û7®j 7¯wþ7°”’7±~A7²Qá7³pæ7´SÍ7µÔ7¶ƒ7·)7¸r¯7¹™m7ºlÛ7»WJ7¼‚³7½e¹7¾€ª7¿b?7À–27ÁY¨7ÂNÿ7Ë¿7Ä~º7Åe>7ƃò7Ç—^7ÈUa7ɘÞ7Ê€¥7ËS*7Ì‹ý7ÍT 7΀º7Ï^Ÿ7Ðl¸7Ñ97Ò‚¬7Ó‘Z7ÔT)7Õl7ÖR7×~·7ØW_7Ùq7Úl~7Û|‰7ÜYK7ÝNý7Þ_ÿ7ßa$7à|ª7áN07â\7ãg«7ä‡7å\ð7æ• 7ç˜Î7èu¯7épý7ê"7ëQ¯7ì7틽7îYI7ïQä7ðO[7ñT&7òY+7óew7ô€¤7õ[u7öbv7÷bÂ7ø7ù^E7úl7û{&7üO7ýOØ7þg 8@z£8Az¤8Bz§8Cz©8Dzª8Ez«8Fz®8Gz¯8Hz°8Iz±8Jz²8Kz´8Lzµ8Mz¶8Nz·8Oz¸8Pz¹8Qzº8Rz»8Sz¼8Tz½8Uz¾8VzÀ8WzÁ8XzÂ8YzÃ8ZzÄ8[zÅ8\zÆ8]zÇ8^zÈ8_zÉ8`zÊ8azÌ8bzÍ8czÎ8dzÏ8ezÐ8fzÑ8gzÒ8hzÓ8izÔ8jzÕ8kz×8lzØ8mzÚ8nzÛ8ozÜ8pzÝ8qzá8rzâ8szä8tzç8uzè8vzé8wzê8xzë8yzì8zzî8{zð8|zñ8}zò8~zó8€zô8zõ8‚zö8ƒz÷8„zø8…zû8†zü8‡zþ8ˆ{8‰{8Š{8‹{8Œ{8{ 8Ž{ 8{ 8{8‘{8’{8“{8”{8•{8–{8—{8˜{8™{8š{8›{!8œ{"8{#8ž{'8Ÿ{)8 {-8¡mn8¢mª8£y8¤ˆ±8¥_8¦u+8§bš8¨…8©Oï8ª‘Ü8«e§8¬/8­Q8®^œ8¯P8°t8±Ro8²‰†8³K8´Y 8µP…8¶NØ8·–8¸r68¹y8º8»[Ì8¼‹£8½–D8¾Y‡8¿8ÀT8ÁVv8ÂV8Ëå8Äe98Åi‚8Æ”™8ÇvÖ8Èn‰8É^r8Êu8ËgF8ÌgÑ8Ízÿ8΀8Ïv8Ða8ÑyÆ8Òeb8Óc8ÔQˆ8ÕR8Ö”¢8×88Ø€›8Ù~²8Ú\—8Ûn/8Üg`8Ý{Ù8Þv‹8ßšØ8à8á”8â|Õ8ãd8ä•P8åz?8æTJ8çTå8èkL8éd8êb8ëž=8ì€ó8íu™8îRr8ï—i8ð„[8ñh<8ò†ä8ó–8ô–”8õ”ì8öN*8÷T8ø~Ù8ùh98úß8û€8üfô8ý^š8þ¹9@{/9A{09B{29C{49D{59E{69F{79G{99H{;9I{=9J{?9K{@9L{A9M{B9N{C9O{D9P{F9Q{H9R{J9S{M9T{N9U{S9V{U9W{W9X{Y9Y{\9Z{^9[{_9\{a9]{c9^{d9_{e9`{f9a{g9b{h9c{i9d{j9e{k9f{l9g{m9h{o9i{p9j{s9k{t9l{v9m{x9n{z9o{|9p{}9q{9r{9s{‚9t{ƒ9u{„9v{†9w{‡9x{ˆ9y{‰9z{Š9{{‹9|{Œ9}{Ž9~{9€{‘9{’9‚{“9ƒ{–9„{˜9…{™9†{š9‡{›9ˆ{ž9‰{Ÿ9Š{ 9‹{£9Œ{¤9{¥9Ž{®9{¯9{°9‘{²9’{³9“{µ9”{¶9•{·9–{¹9—{º9˜{»9™{¼9š{½9›{¾9œ{¿9{À9ž{Â9Ÿ{Ã9 {Ä9¡WÂ9¢€?9£h—9¤]å9¥e;9¦RŸ9§`m9¨Ÿš9©O›9ªŽ¬9«Ql9¬[«9­_9®]é9¯l^9°bñ9±!9²Qq9³”©9´Rþ9µlŸ9¶‚ß9·r×9¸W¢9¹g„9º-9»Y9¼œ9½ƒÇ9¾T•9¿{9ÀO09Ál½9Â[d9ÃYÑ9ÄŸ9ÅSä9ƆÊ9Çš¨9ÈŒ79É€¡9ÊeE9˘~9ÌVú9Í–Ç9ÎR.9ÏtÜ9ÐRP9Ñ[á9Òc9Ó‰9ÔNV9ÕbÐ9Ö`*9×hú9ØQs9Ù[˜9ÚQ 9Û‰Â9Ü{¡9Ý™†9ÞP9ß`ï9àpL9á/9âQI9ã^9ä9åtp9æ‰Ä9çW-9èxE9é_R9꟟9ë•ú9ìh9í›<9î‹á9ïvx9ðhB9ñgÜ9òê9ó59ôR=9õŠ9önÚ9÷hÍ9ø•9ùí9úVý9ûgœ9üˆù9ýÇ9þTÈ:@{Å:A{È:B{É:C{Ê:D{Ë:E{Í:F{Î:G{Ï:H{Ð:I{Ò:J{Ô:K{Õ:L{Ö:M{×:N{Ø:O{Û:P{Ü:Q{Þ:R{ß:S{à:T{â:U{ã:V{ä:W{ç:X{è:Y{é:Z{ë:[{ì:\{í:]{ï:^{ð:_{ò:`{ó:a{ô:b{õ:c{ö:d{ø:e{ù:f{ú:g{û:h{ý:i{ÿ:j|:k|:l|:m|:n|:o|:p|:q|:r| :s| :t| :u|:v|:w|:x|:y|:z|:{|:||:}|:~|:€|:|:‚|:ƒ|:„|:…| :†|!:‡|":ˆ|#:‰|$:Š|%:‹|(:Œ|):|+:Ž|,:|-:|.:‘|/:’|0:“|1:”|2:•|3:–|4:—|5:˜|6:™|7:š|9:›|::œ|;:|<:ž|=:Ÿ|>: |B:¡š¸:¢[i:£mw:¤l&:¥N¥:¦[³:§š‡:¨‘c:©a¨:ª¯:«—é:¬T+:­mµ:®[Ò:¯Qý:°UŠ:±U:²ð:³d¼:´cM:µeñ:¶a¾:·`:¸q :¹lW:ºlI:»Y/:¼gm:½‚*:¾XÕ:¿VŽ:ÀŒj:Ákë:ÂÝ:ÃY}:Ä€:ÅS÷:Æmi:ÇTu:ÈU:Ƀw:ʃÏ:Ëh8:Ìy¾:ÍTŒ:ÎOU:ÏT:ÐvÒ:ÑŒ‰:Ò–:Ól³:Ôm¸:Õk:Ö‰:מd:Ø::ÙV?:ÚžÑ:ÛuÕ:Ü_ˆ:Ýrà:Þ`h:ßTü:àN¨:áj*:âˆa:ã`R:äp:åTÄ:æpØ:ç†y:èž?:ém*:ê[:ë_:ì~¢:íU‰:îO¯:ïs4:ðT<:ñSš:òP:óT:ôT|:õNN:ö_ý:÷tZ:øXö:ù„k:ú€á:û‡t:ürÐ:ý|Ê:þnV;@|C;A|D;B|E;C|F;D|G;E|H;F|I;G|J;H|K;I|L;J|N;K|O;L|P;M|Q;N|R;O|S;P|T;Q|U;R|V;S|W;T|X;U|Y;V|Z;W|[;X|\;Y|];Z|^;[|_;\|`;]|a;^|b;_|c;`|d;a|e;b|f;c|g;d|h;e|i;f|j;g|k;h|l;i|m;j|n;k|o;l|p;m|q;n|r;o|u;p|v;q|w;r|x;s|y;t|z;u|~;v|;w|€;x|;y|‚;z|ƒ;{|„;||…;}|†;~|‡;€|ˆ;|Š;‚|‹;ƒ|Œ;„|;…|Ž;†|;‡|;ˆ|“;‰|”;Š|–;‹|™;Œ|š;|›;Ž| ;|¡;|£;‘|¦;’|§;“|¨;”|©;•|«;–|¬;—|­;˜|¯;™|°;š|´;›|µ;œ|¶;|·;ž|¸;Ÿ|º; |»;¡_';¢†N;£U,;¤b¤;¥N’;¦lª;§b7;¨‚±;©T×;ªSN;«s>;¬nÑ;­u;;®R;¯S;°‹Ý;±iÐ;²_Š;³`;´mî;µWO;¶k";·s¯;¸hS;¹Ø;º;»cb;¼`£;½U$;¾uê;¿Œb;Àq;Ám£;Â[¦;Ã^{;ăR;ÅaL;ÆžÄ;Çxú;ȇW;É|';Êv‡;ËQð;Ì`ö;ÍqL;ÎfC;Ï^L;Ð`M;ÑŒ;Òpp;Óc%;Ô‰;Õ_½;Ö`b;׆Ô;ØVÞ;ÙkÁ;Ú`”;Ûag;ÜSI;Ý`à;Þff;ß?;àyý;áO;âpé;ãlG;䋳;å‹ò;æ~Ø;çƒd;èf;éZZ;ê›B;ëmQ;ìm÷;íŒA;îm;;ïO;ðpk;ñƒ·;òb;ó`Ñ;ô— ;õ';öyx;÷Qû;øW>;ùWú;úg:;ûux;üz=;ýyï;þ{•<@|¿<×u2<Ø”¾<ÙPG<Úz<<ÛN÷<Üg¶<Ýš~<ÞZÁ<ßk|<àvÑ<áWZ<â\<ã{:<ä•ô<åqN<æQ|<瀩<è‚p<éYx<ê<ëƒ'<ìhÀ<ígì<îx±<ïxw<ðbã<ñca<ò{€<óOí<ôRj<õQÏ<öƒP<÷iÛ<ø’t<ùõ<ú1<û‰Á<ü•.<ý{­<þNö=@}7=A}8=B}9=C}:=D};=E}<=F}==G}>=H}?=I}@=J}A=K}B=L}C=M}D=N}E=O}F=P}G=Q}H=R}I=S}J=T}K=U}L=V}M=W}N=X}O=Y}P=Z}Q=[}R=\}S=]}T=^}U=_}V=`}W=a}X=b}Y=c}Z=d}[=e}\=f}]=g}^=h}_=i}`=j}a=k}b=l}c=m}d=n}e=o}f=p}g=q}h=r}i=s}j=t}k=u}l=v}m=w}o=x}p=y}q=z}r={}s=|}t=}}u=~}v=€}x=}y=‚}z=ƒ}{=„}|=…}}=†}~=‡}=ˆ}€=‰}=Š}‚=‹}ƒ=Œ}„=}…=Ž}†=}‡=}ˆ=‘}‰=’}Š=“}‹=”}Œ=•}=–}Ž=—}=˜}=™}‘=š}’=›}“=œ}”=}•=ž}–=Ÿ}—= }˜=¡Pe=¢‚0=£RQ=¤™o=¥n=¦n…=§m§=¨^ú=©Põ=ªYÜ=«\=¬mF=­l_=®u†=¯„‹=°hh=±YV=²‹²=³S =´‘q=µ–M=¶…I=·i=¸y=¹q&=º€ö=»N¤=¼Ê=½mG=¾š„=¿Z=ÀV¼=Ád=”ð=Ãwë=ÄO¥=Å=Ærá=ljÒ=È™z=É4=Ê~Þ=ËR=ÌeY=Í‘u=Î=σ=ÐSë=Ñz–=Òcí=Óc¥=Ôv†=Õyø=ÖˆW=×–6=Øb*=ÙR«=Ú‚‚=ÛhT=Ügp=Ýcw=Þwk=ßzí=àm=á~Ó=â‰ã=ãYÐ=äb=å…É=æ‚¥=çuL=èP=éNË=êu¥=ë‹ë=ì\J=í]þ=î{K=ïe¤=ð‘Ñ=ñNÊ=òm%=ó‰_=ô}'=õ•&=öNÅ=÷Œ(=øÛ=ù—s=úfK=ûy=üÑ=ýpì=þmx>@}™>A}š>B}›>C}œ>D}>E}ž>F}Ÿ>G} >H}¡>I}¢>J}£>K}¤>L}¥>M}§>N}¨>O}©>P}ª>Q}«>R}¬>S}­>T}¯>U}°>V}±>W}²>X}³>Y}´>Z}µ>[}¶>\}·>]}¸>^}¹>_}º>`}»>a}¼>b}½>c}¾>d}¿>e}À>f}Á>g}Â>h}Ã>i}Ä>j}Å>k}Æ>l}Ç>m}È>n}É>o}Ê>p}Ë>q}Ì>r}Í>s}Î>t}Ï>u}Ð>v}Ñ>w}Ò>x}Ó>y}Ô>z}Õ>{}Ö>|}×>}}Ø>~}Ù>€}Ú>}Û>‚}Ü>ƒ}Ý>„}Þ>…}ß>†}à>‡}á>ˆ}â>‰}ã>Š}ä>‹}å>Œ}æ>}ç>Ž}è>}é>}ê>‘}ë>’}ì>“}í>”}î>•}ï>–}ð>—}ñ>˜}ò>™}ó>š}ô>›}õ>œ}ö>}÷>ž}ø>Ÿ}ù> }ú>¡\=>¢R²>£ƒF>¤Qb>¥ƒ>¦w[>§fv>¨œ¸>©N¬>ª`Ê>«|¾>¬|³>­~Ï>®N•>¯‹f>°fo>±˜ˆ>²—Y>³Xƒ>´el>µ•\>¶_„>·uÉ>¸—V>¹zß>ºzÞ>»QÀ>¼p¯>½z˜>¾cê>¿zv>À~ >Ás–>—í>ÃNE>Äpx>ÅN]>Æ‘R>ÇS©>ÈeQ>Éeç>Êü>Ë‚>ÌTŽ>Í\1>Îuš>Ï— >ÐbØ>ÑrÙ>Òu½>Ó\E>Ôšy>ÕƒÊ>Ö\@>×T€>Øwé>ÙN>>Úl®>Û€Z>ÜbÒ>Ýcn>Þ]è>ßQw>àÝ>áŽ>â•/>ãOñ>äSå>å`ç>æp¬>çRg>ècP>éžC>êZ>ëP&>ìw7>íSw>î~â>ïd…>ðe+>ñb‰>òc˜>óP>ôr5>õ‰É>öQ³>÷‹À>ø~Ý>ùWG>úƒÌ>û”§>üQ›>ýT>þ\û?@}û?A}ü?B}ý?C}þ?D}ÿ?E~?F~?G~?H~?I~?J~?K~?L~?M~?N~ ?O~ ?P~ ?Q~ ?R~ ?S~?T~?U~?V~?W~?X~?Y~?Z~?[~?\~?]~?^~?_~?`~?a~?b~?c~?d~?e~ ?f~!?g~"?h~#?i~$?j~%?k~&?l~'?m~(?n~)?o~*?p~+?q~,?r~-?s~.?t~/?u~0?v~1?w~2?x~3?y~4?z~5?{~6?|~7?}~8?~~9?€~:?~?„~??…~@?†~B?‡~C?ˆ~D?‰~E?Š~F?‹~H?Œ~I?~J?Ž~K?~L?~M?‘~N?’~O?“~P?”~Q?•~R?–~S?—~T?˜~U?™~V?š~W?›~X?œ~Y?~Z?ž~[?Ÿ~\? ~]?¡OÊ?¢zã?£mZ?¤á?¥š?¦U€?§T–?¨Sa?©T¯?ª_?«cé?¬iw?­Qï?®ah?¯R ?°X*?±RØ?²WN?³x ?´w ?µ^·?¶aw?·|à?¸b[?¹b—?ºN¢?»p•?¼€?½b÷?¾pä?¿—`?ÀWw?Á‚Û?Âgï?Ãhõ?ÄxÕ?Ř—?ÆyÑ?ÇXó?ÈT³?ÉSï?Ên4?ËQK?ÌR;?Í[¢?΋þ?Ï€¯?ÐUC?ÑW¦?Ò`s?ÓWQ?ÔT-?Õzz?Ö`P?×[T?Øc§?Ùb ?ÚSã?Ûbc?Ü[Ç?Ýg¯?ÞTí?ßzŸ?à‚æ?á‘w?â^“?ãˆä?äY8?åW®?æc?çè?è€ï?éWW?ê{w?ëO©?ì_ë?í[½?îk>?ïS!?ð{P?ñrÂ?òhF?ówÿ?ôw6?õe÷?öQµ?÷N?øvÔ?ù\¿?úz¥?û„u?üYN?ý›A?þP€@@~^@A~_@B~`@C~a@D~b@E~c@F~d@G~e@H~f@I~g@J~h@K~i@L~j@M~k@N~l@O~m@P~n@Q~o@R~p@S~q@T~r@U~s@V~t@W~u@X~v@Y~w@Z~x@[~y@\~z@]~{@^~|@_~}@`~~@a~@b~€@c~@d~ƒ@e~„@f~…@g~†@h~‡@i~ˆ@j~‰@k~Š@l~‹@m~Œ@n~@o~Ž@p~@q~@r~‘@s~’@t~“@u~”@v~•@w~–@x~—@y~˜@z~™@{~š@|~œ@}~@~~ž@€~®@~´@‚~»@ƒ~¼@„~Ö@…~ä@†~ì@‡~ù@ˆ @‰@Š@‹7@Œ9@;@Ž<@=@>@‘?@’@@“A@”C@•F@–G@—H@˜I@™J@šK@›L@œM@N@žO@ŸR@ S@¡™ˆ@¢a'@£nƒ@¤Wd@¥f@¦cF@§Vð@¨bì@©bi@ª^Ó@«–@¬Wƒ@­bÉ@®U‡@¯‡!@°J@±£@²Uf@³ƒ±@´ge@µV@¶„Ý@·Zj@¸h@¹bæ@º{î@»–@¼Qp@½oœ@¾Œ0@¿cý@À‰È@ÁaÒ@Â@ÃpÂ@Änå@Åt@Æi”@Çrü@È^Ê@ÉÎ@Êg@Ëmj@Ìc^@ÍR³@Îrb@Ï€@ÐOl@ÑYå@Ò‘j@ÓpÙ@Ôm@ÕRÒ@ÖNP@×–÷@Ø•m@Ù…~@ÚxÊ@Û}/@ÜQ!@ÝW’@ÞdÂ@߀‹@à|{@álê@âhñ@ãi^@äQ·@åS˜@æh¨@çr@èžÎ@é{ñ@êrø@ëy»@ìo@ít@îgN@ï‘Ì@ðœ¤@ñy<@òƒ‰@óƒT@ôT@õh@öN=@÷S‰@øR±@ùx>@úS†@ûR)@üPˆ@ýO‹@þOÐA@VAAYAB[AC\AD]AE^AF`AGcAHdAIeAJfAKgALkAMlANmAOoAPpAQsARuASvATwAUxAVzAW{AX|AY}AZA[€A\‚A]ƒA^„A_…A`†Aa‡AbˆAc‰Ad‹AeAfAgAh‘Ai’Aj“Ak•Al–Am—An˜Ao™Ap›AqœAr As¢At£Au¥Av¦Aw¨Ax©AyªAz«A{¬A|­A}®A~±A€³A´A‚µAƒ¶A„·A…ºA†»A‡¾AˆÀA‰ÂAŠÃA‹ÄAŒÆAÇAŽÈAÉAËA‘ÍA’ÏA“ÐA”ÑA•ÒA–ÓA—ÖA˜×A™ÙAšÚA›ÛAœÜAÝAžÞAŸâA ãA¡uâA¢zËA£|’A¤l¥A¥–¶A¦R›A§tƒA¨TéA©OéAª€TA«ƒ²A¬ÞA­•pA®^ÉA¯`A°mŸA±^A²e[A³8A´”þAµ`KA¶p¼A·~ÃA¸|®A¹QÉAºhA»|±A¼‚oA½N$A¾†A¿‘ÏAÀf~AÁN®AÂŒAÃd©AÄ€JAÅPÚAÆu—AÇqÎAÈ[åAɽAÊofAËN†AÌd‚AÍ•cAÎ^ÖAÏe™AÐRAшÂAÒpÈAÓR£AÔsAÕt3AÖg—A×x÷AØ—AÙN4AÚ»AÛœÞAÜmËAÝQÛAÞAAßTAàbÎAás²AâƒñAã–öA䟄Aå”ÃAæO6AçšAèQÌAépuAê–uAë\­A옆AíSæAîNäAïnœAðt Añi´AòxkAó™AôuYAõRAöv$A÷mAAøgóAùQmAúŸ™Aû€KAüT™Aý{Bp€@Bq€ABr€DBs€EBt€GBu€HBv€IBw€NBx€OBy€PBz€QB{€SB|€UB}€VB~€WB€€YB€[B‚€\Bƒ€]B„€^B…€_B†€`B‡€aBˆ€bB‰€cBŠ€dB‹€eBŒ€fB€gBŽ€hB€kB€lB‘€mB’€nB“€oB”€pB•€rB–€sB—€tB˜€uB™€vBš€wB›€xBœ€yB€zBž€{BŸ€|B €}B¡–†B¢W„B£bâB¤–GB¥i|B¦ZB§dB¨{ÓB©oBª–KB«‚¦B¬SbB­˜…B®^B¯p‰B°c³B±SdB²†OB³œB´ž“BµxŒB¶—2B·ïB¸BB¹žBºo^B»y„B¼_UB½–FB¾b.B¿štBÀTBÁ”ÝBÂO£BÃeÅBÄ\eBÅ\aBÆBdžQBÈl/BÉ_‹BÊs‡BËnäBÌ~ÿBÍ\æBÎcBÏ[jBÐnæBÑSuBÒNqBÓc BÔueBÕb¡BÖnB×O&BØNÑBÙl¦BÚ~¶BÛ‹ºBÜ„B݇ºBÞWBß;Bà•#Bá{©Bâš¡BãˆøBä„=BåmB暆Bç~ÜBèYˆBéž»Bês›BëxB솂BíšlBîš‚BïVBðTBñWËBòNpBóž¦BôSVBõÈBö B÷w’Bø™’Bù†îBúnáBû…BüfüBýabBþo+C@€~CA€CB€‚CC€…CD€ˆCE€ŠCF€CG€ŽCH€CI€CJ€‘CK€’CL€”CM€•CN€—CO€™CP€žCQ€£CR€¦CS€§CT€¨CU€¬CV€°CW€³CX€µCY€¶CZ€¸C[€¹C\€»C]€ÅC^€ÇC_€ÈC`€ÉCa€ÊCb€ËCc€ÏCd€ÐCe€ÑCf€ÒCg€ÓCh€ÔCi€ÕCj€ØCk€ßCl€àCm€âCn€ãCo€æCp€îCq€õCr€÷Cs€ùCt€ûCu€þCv€ÿCwCxCyCzC{C|C}C~ C€ CC‚CƒC„C…C†C‡Cˆ C‰!CŠ"C‹#CŒ$C%CŽ&C'C(C‘)C’*C“+C”-C•.C–0C—3C˜4C™5Cš7C›9Cœ:C;CžEÊeEËoXEÌvØEÍxÐEÎvüEÏuTEÐR$EÑSÛEÒNSEÓ^žEÔeÁEÕ€*EÖ€ÖE×b›EØT†EÙR(EÚp®EÛˆEÜÑEÝláEÞTxE߀ÚEàWùEáˆôEâTEã–jEä‘MEåOiEæl›EçU·EèvÆEéx0Eêb¨EëpùEìoŽEí_mEî„ìEïhÚEðx|Eñ{÷Eò¨Eóg EôžOEõcgEöx°E÷WoEøxEù—9EúbyEûb«EüRˆEýt5Eþk×F@‚jFA‚kFB‚lFC‚mFD‚qFE‚uFF‚vFG‚wFH‚xFI‚{FJ‚|FK‚€FL‚FM‚ƒFN‚…FO‚†FP‚‡FQ‚‰FR‚ŒFS‚FT‚“FU‚”FV‚•FW‚–FX‚šFY‚›FZ‚žF[‚ F\‚¢F]‚£F^‚§F_‚²F`‚µFa‚¶Fb‚ºFc‚»Fd‚¼Fe‚¿Ff‚ÀFg‚ÂFh‚ÃFi‚ÅFj‚ÆFk‚ÉFl‚ÐFm‚ÖFn‚ÙFo‚ÚFp‚ÝFq‚âFr‚çFs‚èFt‚éFu‚êFv‚ìFw‚íFx‚îFy‚ðFz‚òF{‚óF|‚õF}‚öF~‚øF€‚úF‚üF‚‚ýFƒ‚þF„‚ÿF…ƒF†ƒ F‡ƒ Fˆƒ F‰ƒFŠƒF‹ƒFŒƒFƒFŽƒFƒFƒF‘ƒF’ƒ F“ƒ!F”ƒ"F•ƒ#F–ƒ$F—ƒ%F˜ƒ&F™ƒ)Fšƒ*F›ƒ.Fœƒ0Fƒ2Fžƒ7FŸƒ;F ƒ=F¡UdF¢>F£u²F¤v®F¥S9F¦uÞF§PûF¨\AF©‹lFª{ÇF«POF¬rGF­š—F®˜ØF¯oF°tâF±yhF²d‡F³w¥F´büFµ˜‘F¶+F·TÁF¸€XF¹NRFºWjF»‚ùF¼„ F½^sF¾QíF¿töFÀ‹ÄFÁ\OFÂWaFÃlüFʇFÅZFFÆx4FÇ›DFÈëFÉ|•FÊRVFËbQFÌ”úFÍNÆF΃†FÏ„aFЃéFÑ„²FÒWÔFÓg4FÔWFÕfnFÖmfF׌1FØfÝFÙpFÚgFÛk:FÜhFÝbFÞY»FßNFàQÄFáoFâgÒFãlFäQvFåhËFæYGFçkgFèufFé]FêFëŸPFìe×FíyHFîyAFïš‘FðwFñ\‚FòN^FóOFôT/FõYQFöx F÷VhFølFùÄFú_Fûl}FülãFý‹«FþcG@ƒ>GAƒ?GBƒAGCƒBGDƒDGEƒEGFƒHGGƒJGHƒKGIƒLGJƒMGKƒNGLƒSGMƒUGNƒVGOƒWGPƒXGQƒYGRƒ]GSƒbGTƒpGUƒqGVƒrGWƒsGXƒtGYƒuGZƒvG[ƒyG\ƒzG]ƒ~G^ƒG_ƒ€G`ƒGaƒ‚GbƒƒGcƒ„Gdƒ‡GeƒˆGfƒŠGgƒ‹GhƒŒGiƒGjƒGkƒGlƒ‘Gmƒ”Gnƒ•Goƒ–Gpƒ—Gqƒ™GrƒšGsƒGtƒŸGuƒ¡Gvƒ¢Gwƒ£Gxƒ¤Gyƒ¥Gzƒ¦G{ƒ§G|ƒ¬G}ƒ­G~ƒ®G€ƒ¯GƒµG‚ƒ»Gƒƒ¾G„ƒ¿G…ƒÂG†ƒÃG‡ƒÄGˆƒÆG‰ƒÈGŠƒÉG‹ƒËGŒƒÍGƒÎGŽƒÐGƒÑGƒÒG‘ƒÓG’ƒÕG“ƒ×G”ƒÙG•ƒÚG–ƒÛG—ƒÞG˜ƒâG™ƒãGšƒäG›ƒæGœƒçGƒèGžƒëGŸƒìG ƒíG¡`pG¢m=G£ruG¤bfG¥”ŽG¦”ÅG§SCG¨ÁG©{~GªNßG«Œ&G¬N~G­žÔG®”±G¯”³G°RMG±o\G²cG³mEG´Œ4GµXG¶]LG·k G¸kIG¹gªGºT[G»TG¼ŒG½X™G¾…7G¿_:GÀb¢GÁjGG•9GÃerGÄ`„GÅheGÆw§GÇNTGÈO¨GÉ]çGÊ—˜GËd¬GÌØGÍ\íGÎOÏGÏzGÐRGуGÒNGÓ`/GÔzƒGÕ”¦GÖOµG×N²GØyæGÙt4GÚRäGÛ‚¹GÜdÒGÝy½GÞ[ÝGßlGà—RGá{Gâl"GãP>GäSGånGædÎGçftGèl0Gé`ÅGê˜wGë‹÷Gì^†GítHu„?Hv„@Hw„AHx„BHy„CHz„DH{„EH|„GH}„HH~„IH€„JH„KH‚„LHƒ„MH„„NH…„OH†„PH‡„RHˆ„SH‰„THŠ„UH‹„VHŒ„XH„]HŽ„^H„_H„`H‘„bH’„dH“„eH”„fH•„gH–„hH—„jH˜„nH™„oHš„pH›„rHœ„tH„wHž„yHŸ„{H „|H¡SÖH¢Z6H£Ÿ‹H¤£H¥S»H¦WH§˜§H¨gCH©‘›HªlÉH«QhH¬uÊH­bóH®r¬H¯R8H°RH±:H²p”H³v8H´StHµžJH¶i·H·xnH¸–ÀH¹ˆÙHº¤H»q6H¼qÃH½Q‰H¾gÓH¿täHÀXäHÁeHÂV·HË©HÄ™vHÅbpHÆ~ÕHÇ`ùHÈpíHÉXìHÊNÁHËNºHÌ_ÍHÍ—çHÎNûHÏ‹¤HÐRHÑYŠHÒ~«HÓbTHÔNÍHÕeåHÖbH׃8HØ„ÉHÙƒcHÚ‡HÛq”HÜn¶HÝ[¹HÞ~ÒHßQ—HàcÉHágÔH Hãƒ9HäˆHåQHæ[zHçY‚Hè±HéNsHêl]HëQeHì‰%HíoHî–.Hï…JHðt^Hñ•Hò•ðHóm¦Hô‚åHõ_1Höd’H÷mHø„(HùnHúœÃHûX^Hü[HýN HþSÁI@„}IA„~IB„IC„€ID„IE„ƒIF„„IG„…IH„†II„ŠIJ„IK„IL„IM„‘IN„’IO„“IP„”IQ„•IR„–IS„˜IT„šIU„›IV„IW„žIX„ŸIY„ IZ„¢I[„£I\„¤I]„¥I^„¦I_„§I`„¨Ia„©Ib„ªIc„«Id„¬Ie„­If„®Ig„°Ih„±Ii„³Ij„µIk„¶Il„·Im„»In„¼Io„¾Ip„ÀIq„ÂIr„ÃIs„ÅIt„ÆIu„ÇIv„ÈIw„ËIx„ÌIy„ÎIz„ÏI{„ÒI|„ÔI}„ÕI~„×I€„ØI„ÙI‚„ÚIƒ„ÛI„„ÜI…„ÞI†„áI‡„âIˆ„äI‰„çIŠ„èI‹„éIŒ„êI„ëIŽ„íI„îI„ïI‘„ñI’„òI“„óI”„ôI•„õI–„öI—„÷I˜„øI™„ùIš„úI›„ûIœ„ýI„þIž…IŸ…I …I¡OI¢ecI£hQI¤UÓI¥N'I¦dI§ššI¨bkI©ZÂIªt_I«‚rI¬m©I­hîI®PçI¯ƒŽI°xI±g@I²R9I³l™I´~±IµP»I¶UeI·q^I¸{[I¹fRIºsÊI»‚ëI¼gII½\qI¾R I¿q}IÀˆkIÁ•êI–UIÃdÅIÄaIųIÆU„IÇlUIÈbGIÉ.IÊX’IËO$IÌUFIÍOIÎfLIÏN IÐ\IшóIÒh¢IÓcNIÔz IÕpçIÖ‚I×RúIØ—öIÙ\IÚTèIÛµIÜ~ÍIÝYbIÞJI߆ÇIà‚ Iá‚ IâfIãdDIä\IåaQIæm‰Içy>I苾Iéx7Iêu3IëT{IìO8I펫IîmñIïZ Ið~ÅIñy^IòlˆIó[¡IôZvIõuIö€¾I÷aNIønIùXðIúuIûu%IürrIýSGIþ~óJ@…JA…JB…JC…JD…JE…JF… JG… JH… JI… JJ…JK…JL…JM…JN…JO…JP…JQ…JR…JS…JT…JU…JV…JW… JX…"JY…#JZ…$J[…%J\…&J]…'J^…(J_…)J`…*Ja…-Jb….Jc…/Jd…0Je…1Jf…2Jg…3Jh…4Ji…5Jj…6Jk…>Jl…?Jm…@Jn…AJo…BJp…DJq…EJr…FJs…GJt…KJu…LJv…MJw…NJx…OJy…PJz…QJ{…RJ|…SJ}…TJ~…UJ€…WJ…XJ‚…ZJƒ…[J„…\J……]J†…_J‡…`Jˆ…aJ‰…bJŠ…cJ‹…eJŒ…fJ…gJŽ…iJ…jJ…kJ‘…lJ’…mJ“…nJ”…oJ•…pJ–…qJ—…sJ˜…uJ™…vJš…wJ›…xJœ…|J…}Jž…JŸ…€J …J¡wJ¢vÛJ£RiJ¤€ÜJ¥W#J¦^J§Y1J¨rîJ©e½JªnJ«‹×J¬\8J­†qJ®SAJ¯wóJ°bþJ±eöJ²NÀJ³˜ßJ´†€Jµ[žJ¶‹ÆJ·SòJ¸wâJ¹OJº\NJ»švJ¼YËJ½_J¾y:J¿XëJÀNJÁgÿJÂN‹JÃbíJÄŠ“JÅJÆR¿JÇf/JÈUÜJÉVlJÊJËNÕJÌOJÍ‘ÊJΙpJÏlJÐ^JÑ`CJÒ[¤JÓ‰ÆJÔ‹ÕJÕe6JÖbKJ×™–JØ[ˆJÙ[ÿJÚcˆJÛU.JÜS×JÝv&JÞQ}Jß…,Jàg¢Jáh³JâkŠJãb’Jä“JåSÔJæ‚JçmÑJèuJéNfJêNJë[pJìqŸJí…¯Jîf‘JïfÙJðrJñ‡JòžÍJóŸ Jô\^Jõg/JöðJ÷hJøg_Jùb JúzÖJûX…Jü^¶JýepJþo1K@…‚KA…ƒKB…†KC…ˆKD…‰KE…ŠKF…‹KG…ŒKH…KI…ŽKJ…KK…‘KL…’KM…“KN…”KO…•KP…–KQ…—KR…˜KS…™KT…šKU…KV…žKW…ŸKX… KY…¡KZ…¢K[…£K\…¥K]…¦K^…§K_…©K`…«Ka…¬Kb…­Kc…±Kd…²Ke…³Kf…´Kg…µKh…¶Ki…¸Kj…ºKk…»Kl…¼Km…½Kn…¾Ko…¿Kp…ÀKq…ÂKr…ÃKs…ÄKt…ÅKu…ÆKv…ÇKw…ÈKx…ÊKy…ËKz…ÌK{…ÍK|…ÎK}…ÑK~…ÒK€…ÔK…ÖK‚…×Kƒ…ØK„…ÙK……ÚK†…ÛK‡…ÝKˆ…ÞK‰…ßKŠ…àK‹…áKŒ…âK…ãKŽ…åK…æK…çK‘…èK’…êK“…ëK”…ìK•…íK–…îK—…ïK˜…ðK™…ñKš…òK›…óKœ…ôK…õKž…öKŸ…÷K …øK¡`UK¢R7K£€ K¤dTK¥ˆpK¦u)K§^K¨hK©bôKª—K«SÌK¬r=K­ŒK®l4K¯waK°zK±T.K²w¬K³˜zK´‚Kµ‹ôK¶xUK·gK¸pÁK¹e¯Kºd•K»V6K¼`K½yÁK¾SøK¿NKÀk{KÁ€†KÂ[úKÃUãKÄVÛKÅO:KÆOL}†?L~†@L€†AL†BL‚†CLƒ†DL„†EL…†FL††GL‡†HLˆ†IL‰†JLІKL‹†LLŒ†RL†SLކUL†VL†WL‘†XL’†YL“†[L”†\L•†]L–†_L—†`L˜†aL™†cLš†dL›†eLœ†fL†gLž†hLŸ†iL †jL¡smL¢cL£ŽKL¤ŽL¥€ÎL¦‚ÔL§b¬L¨SðL©lðLª‘^L«Y*L¬`L­lpL®WML¯dJL°*L±v+L²néL³W[L´j€LµuðL¶omL·Œ-L¸ŒL¹WfLºkïL»ˆ’L¼x³L½c¢L¾SùL¿p­LÀldLÁXXLÂd*LÃXLÄhàLÅ›LÆULÇ|ÖLÈPLÉŽºLÊmÌLËŸLÌpëLÍcLÎm›LÏnÔLÐ~æLÑ„LÒhCLÓLÔmØLÕ–vLÖ‹¨L×YWLØryLÙ…äLÚ~LÛu¼LÜŠŠLÝh¯LÞRTLߎ"Là•LácÐL☘LãŽDLäU|LåOSLæfÿLçVLè`ÕLém•LêRCLë\ILìY)LímûLîXkLïu0LðuLñ`lLò‚LóFLôcLõgaLöâL÷w:LøóLù4Lú”ÁLû^LüS…LýT,LþpÃM@†mMA†oMB†pMC†rMD†sME†tMF†uMG†vMH†wMI†xMJ†ƒMK†„ML†…MM††MN†‡MO†ˆMP†‰MQ†ŽMR†MS†MT†‘MU†’MV†”MW†–MX†—MY†˜MZ†™M[†šM\†›M]†žM^†ŸM_† M`†¡Ma†¢Mb†¥Mc†¦Md†«Me†­Mf†®Mg†²Mh†³Mi†·Mj†¸Mk†¹Ml†»Mm†¼Mn†½Mo†¾Mp†¿Mq†ÁMr†ÂMs†ÃMt†ÅMu†ÈMv†ÌMw†ÍMx†ÒMy†ÓMz†ÕM{†ÖM|†×M}†ÚM~†ÜM€†ÝM†àM‚†áMƒ†âM„†ãM…†åM††æM‡†çMˆ†èM‰†êMІëM‹†ìMŒ†ïM†õMކöM†÷M†úM‘†ûM’†üM“†ýM”†ÿM•‡M–‡M—‡M˜‡M™‡ Mš‡ M›‡Mœ‡M‡Mž‡MŸ‡M ‡M¡l@M¢^÷M£P\M¤N­M¥^­M¦c:M§‚GM¨M©hPMª‘nM«w³M¬T M­”ÜM®_dM¯zåM°hvM±cEM²{RM³~ßM´uÛMµPwM¶b•M·Y4M¸M¹QøMºyÃM»zM¼VþM½_’M¾M¿m‚MÀ\`MÁWMÂTMÃQTMÄnMMÅVâMÆc¨Mǘ“MÈMɇMʉ*MËMÌTMÍ\oMÎÀMÏbÖMÐbXMÑ1MÒž5MÓ–@MÔšnMÕš|MÖi-M×Y¥MØbÓMÙU>MÚcMÛTÇM܆ÙMÝmN³~¬N´g*Nµ…N¶TsN·uON¸€ÃN¹U‚Nº›ON»OMN¼n-N½ŒN¾\ N¿apNÀSkNÁvNÂn)NÆŠNÄe‡NÅ•ûNÆ~¹NÇT;NÈz3NÉ} NÊ•îNËUáNÌÁNÍtîNÎcNχNÐm¡NÑzNÒbNÓe¡NÔSgNÕcáNÖlƒN×]ëNØT\NÙ”¨NÚNLNÛlaNÜ‹ìNÝ\KNÞeàNß‚œNàh§NáT>NâT4NãkËNäkfNåN”NæcBNçSHNè‚NéO NêO®NëW^Nìb Ní–þNîfdNïriNðRÿNñR¡Nò`ŸNó‹ïNôfNõq™NögN÷‰NøxRNùwýNúfpNûV;NüT8Ný•!NþrzO@‡¥OA‡¦OB‡§OC‡©OD‡ªOE‡®OF‡°OG‡±OH‡²OI‡´OJ‡¶OK‡·OL‡¸OM‡¹ON‡»OO‡¼OP‡¾OQ‡¿OR‡ÁOS‡ÂOT‡ÃOU‡ÄOV‡ÅOW‡ÇOX‡ÈOY‡ÉOZ‡ÌO[‡ÍO\‡ÎO]‡ÏO^‡ÐO_‡ÔO`‡ÕOa‡ÖOb‡×Oc‡ØOd‡ÙOe‡ÚOf‡ÜOg‡ÝOh‡ÞOi‡ßOj‡áOk‡âOl‡ãOm‡äOn‡æOo‡çOp‡èOq‡éOr‡ëOs‡ìOt‡íOu‡ïOv‡ðOw‡ñOx‡òOy‡óOz‡ôO{‡õO|‡öO}‡÷O~‡øO€‡úO‡ûO‚‡üOƒ‡ýO„‡ÿO…ˆO†ˆO‡ˆOˆˆO‰ˆOŠˆO‹ˆOŒˆOˆ OŽˆ Oˆ Oˆ O‘ˆO’ˆO“ˆO”ˆO•ˆO–ˆO—ˆO˜ˆO™ˆOšˆO›ˆOœˆOˆOžˆOŸˆ O ˆ#O¡zO¢`oO£^ O¤`‰O¥O¦YO§`ÜO¨q„O©pïOªnªO«lPO¬r€O­j„O®ˆ­O¯^-O°N`O±Z³O²UœO³”ãO´mOµ|ûO¶–™O·bO¸~ÆO¹wŽOº†~O»S#O¼—O½–O¾f‡O¿\áOÀO OÁríOÂN OÃS¦OÄYOÅTOÆc€OÇ•(OÈQHOÉNÙOÊœœOË~¤OÌT¸OÍ$OΈTOÏ‚7OЕòOÑmŽOÒ_&OÓZÌOÔf>OÕ–iOÖs°O×s.OØS¿OÙzOÚ™…OÛ¡OÜ[ªOÝ–wOÞ–POß~¿OàvøOáS¢Oâ•vOã™™Oä{±Oå‰DOænXOçNaOèÔOéyeOê‹æOë`óOìTÍOíN«Oî˜yOï]÷OðjaOñPÏOòTOóŒaOô„'Oõx]Oö—O÷RJOøTîOùV£Oú•OûmˆOü[µOýmÆOþfSP@ˆ$PAˆ%PBˆ&PCˆ'PDˆ(PEˆ)PFˆ*PGˆ+PHˆ,PIˆ-PJˆ.PKˆ/PLˆ0PMˆ1PNˆ3POˆ4PPˆ5PQˆ6PRˆ7PSˆ8PTˆ:PUˆ;PVˆ=PWˆ>PXˆ?PYˆAPZˆBP[ˆCP\ˆFP]ˆGP^ˆHP_ˆIP`ˆJPaˆKPbˆNPcˆOPdˆPPeˆQPfˆRPgˆSPhˆUPiˆVPjˆXPkˆZPlˆ[Pmˆ\Pnˆ]Poˆ^Ppˆ_Pqˆ`PrˆfPsˆgPtˆjPuˆmPvˆoPwˆqPxˆsPyˆtPzˆuP{ˆvP|ˆxP}ˆyP~ˆzP€ˆ{Pˆ|P‚ˆ€PƒˆƒP„ˆ†P…ˆ‡P†ˆ‰P‡ˆŠPˆˆŒP‰ˆŽPŠˆP‹ˆPŒˆ‘Pˆ“PŽˆ”Pˆ•Pˆ—P‘ˆ˜P’ˆ™P“ˆšP”ˆ›P•ˆP–ˆžP—ˆŸP˜ˆ P™ˆ¡Pšˆ£P›ˆ¥Pœˆ¦Pˆ§Pžˆ¨PŸˆ©P ˆªP¡\P¢[]P£h!P¤€–P¥UxP¦{P§eHP¨iTP©N›PªkGP«‡NP¬—‹P­SOP®cP¯d:P°ªP±eœP²€ÁP³ŒP´Q™Pµh°P¶SxP·‡ùP¸aÈP¹lÄPºlûP»Œ"P¼\QP½…ªP¾‚¯P¿• PÀk#PÁ›PÂe°PÃ_ûPÄ_ÃPÅOáPƈEPÇfPÈePÉs)PÊ`úPËQtPÌRPÍW‹PÎ_bPÏ¢PЈLPÑ‘’PÒ^xPÓgOPÔ`'PÕYÓPÖQDP×QöPØ€øPÙSPÚlyPÛ–ÄPÜqŠPÝOPÞOîPßžPàg=PáUÅPâ•PãyÀP䈖På~ãPæXŸPçb Pè—Pé†ZPêVPë˜{Pì_P틸Pî„ÄPï‘WPðSÙPñeíPò^Póu\Pô`dPõ}nPöZP÷~êPø~íPùiPúU§Pû[£Pü`¬PýeËPþs„Q@ˆ¬QAˆ®QBˆ¯QCˆ°QDˆ²QEˆ³QFˆ´QGˆµQHˆ¶QIˆ¸QJˆ¹QKˆºQLˆ»QMˆ½QNˆ¾QOˆ¿QPˆÀQQˆÃQRˆÄQSˆÇQTˆÈQUˆÊQVˆËQWˆÌQXˆÍQYˆÏQZˆÐQ[ˆÑQ\ˆÓQ]ˆÖQ^ˆ×Q_ˆÚQ`ˆÛQaˆÜQbˆÝQcˆÞQdˆàQeˆáQfˆæQgˆçQhˆéQiˆêQjˆëQkˆìQlˆíQmˆîQnˆïQoˆòQpˆõQqˆöQrˆ÷QsˆúQtˆûQuˆýQvˆÿQw‰Qx‰Qy‰Qz‰Q{‰Q|‰Q}‰Q~‰Q€‰ Q‰ Q‚‰ Qƒ‰ Q„‰Q…‰Q†‰Q‡‰Qˆ‰Q‰‰QЉQ‹‰QŒ‰Q‰QމQ‰Q‰ Q‘‰"Q’‰#Q“‰$Q”‰&Q•‰'Q–‰(Q—‰)Q˜‰,Q™‰-Qš‰.Q›‰/Qœ‰1Q‰2Qž‰3QŸ‰5Q ‰7Q¡ Q¢vcQ£w)Q¤~ÚQ¥—tQ¦…›Q§[fQ¨ztQ©–êQªˆ@Q«RËQ¬qQ­_ªQ®eìQ¯‹âQ°[ûQ±šoQ²]áQ³k‰Q´l[Qµ‹­Q¶‹¯Q· Q¸ÅQ¹S‹Qºb¼Q»ž&Q¼ž-Q½T@Q¾N+Q¿‚½QÀrYQÁ†œQÂ]QÈYQÄm¯QÅ–ÅQÆTÑQÇNšQÈ‹¶QÉq QÊT½QË– QÌpßQÍmùQÎvÐQÏN%QÐxQчQÒ\©QÓ^öQÔŠQÕ˜œQÖ–Q×pŽQØl¿QÙYDQÚc©QÛwQû€QüpQýY–QþtvR@‰8RA‰9RB‰:RC‰;RD‰RG‰?RH‰@RI‰BRJ‰CRK‰ERL‰FRM‰GRN‰HRO‰IRP‰JRQ‰KRR‰LRS‰MRT‰NRU‰ORV‰PRW‰QRX‰RRY‰SRZ‰TR[‰UR\‰VR]‰WR^‰XR_‰YR`‰ZRa‰[Rb‰\Rc‰]Rd‰`Re‰aRf‰bRg‰cRh‰dRi‰eRj‰gRk‰hRl‰iRm‰jRn‰kRo‰lRp‰mRq‰nRr‰oRs‰pRt‰qRu‰rRv‰sRw‰tRx‰uRy‰vRz‰wR{‰xR|‰yR}‰zR~‰|R€‰}R‰~R‚‰€Rƒ‰‚R„‰„R…‰…R†‰‡R‡‰ˆRˆ‰‰R‰‰ŠRЉ‹R‹‰ŒRŒ‰R‰ŽRމR‰R‰‘R‘‰’R’‰“R“‰”R”‰•R•‰–R–‰—R—‰˜R˜‰™R™‰šRš‰›R›‰œRœ‰R‰žRž‰ŸRŸ‰ R ‰¡R¡dGR¢\'R£eR¤z‘R¥Œ#R¦YÚR§T¬R¨‚R©ƒoRª‰R«€R¬i0R­VNR®€6R¯r7R°‘ÎR±Q¶R²N_R³˜uR´c–RµNR¶SöR·fóR¸KR¹YRºm²R»NR¼XùR½S;R¾cÖR¿”ñRÀORÁO RˆcRØRÄY7RÅWRÆyûRÇNêRÈ€ðRÉu‘RÊl‚RË[œRÌYèRÍ_]RÎiRφRÐPRÑ]òRÒNYRÓwãRÔNåRÕ‚zRÖb‘R×fRØ‘RÙ\yRÚN¿RÛ_yRÜÆRÝ8RÞ€„Rßu«RàN¦RáˆÔRâaRãkÅRä_ÆRåNIRævÊRçn¢Rè‹ãRé‹®RêŒ Rë‹ÑRì_RíüRîÌRï~ÎRðƒ5RñƒkRòVàRók·Rô—óRõ–4RöYûR÷TRø”öRùmëRú[ÅRû™nRü\9Rý_Rþ–S@‰¢SA‰£SB‰¤SC‰¥SD‰¦SE‰§SF‰¨SG‰©SH‰ªSI‰«SJ‰¬SK‰­SL‰®SM‰¯SN‰°SO‰±SP‰²SQ‰³SR‰´SS‰µST‰¶SU‰·SV‰¸SW‰¹SX‰ºSY‰»SZ‰¼S[‰½S\‰¾S]‰¿S^‰ÀS_‰ÃS`‰ÍSa‰ÓSb‰ÔSc‰ÕSd‰×Se‰ØSf‰ÙSg‰ÛSh‰ÝSi‰ßSj‰àSk‰áSl‰âSm‰äSn‰çSo‰èSp‰éSq‰êSr‰ìSs‰íSt‰îSu‰ðSv‰ñSw‰òSx‰ôSy‰õSz‰öS{‰÷S|‰øS}‰ùS~‰úS€‰ûS‰üS‚‰ýSƒ‰þS„‰ÿS…ŠS†ŠS‡ŠSˆŠS‰ŠSŠŠS‹ŠSŒŠ SŠ SŽŠ SŠ SŠ S‘ŠS’ŠS“ŠS”ŠS•ŠS–ŠS—ŠS˜ŠS™ŠSšŠS›ŠSœŠSŠSžŠSŸŠS ŠS¡SpS¢‚ñS£j1S¤ZtS¥žpS¦^”S§(S¨ƒ¹S©„$Sª„%S«ƒgS¬‡GS­ÎS®bS¯vÈS°_qS±˜–S²xlS³f S´TßSµbåS¶OcS·ÃS¸uÈS¹^¸Sº–ÍS»Ž S¼†ùS½TS¾lóS¿mŒSÀl8SÁ`SÂRÇSÃu(SÄ^}SÅOSÆ` SÇ_çSÈ\$SÉu1SÊ®SË”ÀSÌr¹SÍl¹SÎn8SÏ‘ISÐg SÑSËSÒSóSÓOQSÔ‘ÉSÕ‹ñSÖSÈS×^|SØÂSÙmäSÚNŽSÛvÂSÜi†S݆^SÞaSß‚SàOYSáOÞSâ>Sãœ|Säa SånSænSç–…SèNˆSéZ1Sê–èSëNSì\Síy¹Sî[‡Sï‹íSð½Sñs‰SòWßSó‚‹SôÁSõTSöGS÷U»Sø\êSù_¡SúaSûk2SürñSý€²SþЉT@ŠTAŠTBŠ TCŠ!TDŠ"TEŠ#TFŠ$TGŠ%THŠ&TIŠ'TJŠ(TKŠ)TLŠ*TMŠ+TNŠ,TOŠ-TPŠ.TQŠ/TRŠ0TSŠ1TTŠ2TUŠ3TVŠ4TWŠ5TXŠ6TYŠ7TZŠ8T[Š9T\Š:T]Š;T^ŠVš‹?V›‹@Vœ‹AV‹BVž‹CVŸ‹DV ‹EV¡^'V¢uÇV£ÑV¤‹ÁV¥‚V¦gV§e/V¨T1V©‡VªwåV«€¢V¬V­lAV®NKV¯~ÇV°€LV±vôV²i V³k–V´bgVµPXGŒ?XHŒ@XIŒBXJŒCXKŒDXLŒEXMŒHXNŒJXOŒKXPŒMXQŒNXRŒOXSŒPXTŒQXUŒRXVŒSXWŒTXXŒVXYŒWXZŒXX[ŒYX\Œ[X]Œ\X^Œ]X_Œ^X`Œ_XaŒ`XbŒcXcŒdXdŒeXeŒfXfŒgXgŒhXhŒiXiŒlXjŒmXkŒnXlŒoXmŒpXnŒqXoŒrXpŒtXqŒuXrŒvXsŒwXtŒ{XuŒ|XvŒ}XwŒ~XxŒXyŒ€XzŒX{ŒƒX|Œ„X}Œ†X~Œ‡X€ŒˆXŒ‹X‚ŒXƒŒŽX„ŒX…ŒX†Œ‘X‡Œ’XˆŒ“X‰Œ•XŠŒ–X‹Œ—XŒŒ™XŒšXŽŒ›XŒœXŒX‘ŒžX’ŒŸX“Œ X”Œ¡X•Œ¢X–Œ£X—Œ¤X˜Œ¥X™Œ¦XšŒ§X›Œ¨XœŒ©XŒªXžŒ«XŸŒ¬X Œ­X¡NX¢N X£Q@X¤NX¥^ÿX¦SEX§NX¨N˜X©NXª›2X«[lX¬ViX­N(X®yºX¯N?X°SX±NGX²Y-X³r;X´SnXµlX¶VßX·€äX¸™—X¹kÓXºw~X»ŸX¼N6X½NŸX¾ŸX¿N\XÀNiXÁN“X‚ˆXÃ[[XÄUlXÅVXÆNÄXÇSXÈSXÉS£XÊS¥XËS®XÌ—eXÍ]XÎSXÏSõXÐS&XÑS.XÒS>XÓ\XÔSfXÕScXÖRX×RXØRXÙR-XÚR3XÛR?XÜR@XÝRLXÞR^XßRaXàR\XᄯXâR}XãR‚XäRXåRXæR“XçQ‚XèTXéN»XêNÃXëNÉXìNÂXíNèXîNáXïNëXðNÞXñOXòNóXóO"XôOdXõNõXöO%X÷O'XøO XùO+XúO^XûOgXüe8XýOZXþO]Y@Œ®YAŒ¯YBŒ°YCŒ±YDŒ²YEŒ³YFŒ´YGŒµYHŒ¶YIŒ·YJŒ¸YKŒ¹YLŒºYMŒ»YNŒ¼YOŒ½YPŒ¾YQŒ¿YRŒÀYSŒÁYTŒÂYUŒÃYVŒÄYWŒÅYXŒÆYYŒÇYZŒÈY[ŒÉY\ŒÊY]ŒËY^ŒÌY_ŒÍY`ŒÎYaŒÏYbŒÐYcŒÑYdŒÒYeŒÓYfŒÔYgŒÕYhŒÖYiŒ×YjŒØYkŒÙYlŒÚYmŒÛYnŒÜYoŒÝYpŒÞYqŒßYrŒàYsŒáYtŒâYuŒãYvŒäYwŒåYxŒæYyŒçYzŒèY{ŒéY|ŒêY}ŒëY~ŒìY€ŒíYŒîY‚ŒïYƒŒðY„ŒñY…ŒòY†ŒóY‡ŒôYˆŒõY‰ŒöYŠŒ÷Y‹ŒøYŒŒùYŒúYŽŒûYŒüYŒýY‘ŒþY’ŒÿY“Y”Y•Y–Y—Y˜Y™YšY›Yœ Y Yž YŸ Y  Y¡O_Y¢OWY£O2Y¤O=Y¥OvY¦OtY§O‘Y¨O‰Y©OƒYªOY«O~Y¬O{Y­OªY®O|Y¯O¬Y°O”Y±OæY²OèY³OêY´OÅYµOÚY¶OãY·OÜY¸OÑY¹OßYºOøY»P)Y¼PLY½OóY¾P,Y¿PYÀP.YÁP-YÂOþYÃPYÄP YÅP%YÆP(YÇP~YÈPCYÉPUYÊPHYËPNYÌPlYÍP{YÎP¥YÏP§YÐP©YÑPºYÒPÖYÓQYÔPíYÕPìYÖPæY×PîYØQYÙQ YÚNÝYÛl=YÜOXYÝOeYÞOÎYߟ YàlFYá|tYâQnYã]ýYäžÉY噘YæQYçYYèRùYéS YêŠYëSYìQëYíYYîQUYïN YðQVYñN³YòˆnYóˆ¤YôNµYõYöˆÒY÷y€Yø[4YùˆYú¸YûQ«YüQ±YýQ½YþQ¼Z@ZAZBZCZDZEZFZGZHZIZJZKZLZMZNZO ZPQZQRZRWZS_ZTeZUhZViZWjZXlZYnZZoZ[qZ\rZ]xZ^yZ_zZ`{Za|Zb}Zc~ZdZe€Zf‚ZgƒZh†Zi‡ZjˆZk‰ZlŒZmZnŽZoZpZq’Zr“Zs•Zt–Zu—Zv˜Zw™ZxšZy›ZzœZ{Z|žZ} Z~¡Z€¢Z¤Z‚¥Zƒ¦Z„§Z…¨Z†©Z‡ªZˆ«Z‰¬ZŠ­Z‹®ZŒ¯Z°Z޲Z¶Z·Z‘¹Z’»Z“½Z”ÀZ•ÁZ–ÂZ—ÅZ˜ÇZ™ÈZšÉZ›ÊZœÍZÐZžÒZŸÓZ ÔZ¡QÇZ¢Q–Z£Q¢Z¤Q¥Z¥‹ Z¦‹¦Z§‹§Z¨‹ªZ©‹´Zª‹µZ«‹·Z¬‹ÂZ­‹ÃZ®‹ËZ¯‹ÏZ°‹ÎZ±‹ÒZ²‹ÓZ³‹ÔZ´‹ÖZµ‹ØZ¶‹ÙZ·‹ÜZ¸‹ßZ¹‹àZº‹äZ»‹èZ¼‹éZ½‹îZ¾‹ðZ¿‹óZÀ‹öZÁ‹ùZ‹üZËÿZÄŒZÅŒZÆŒZÇŒZÈŒ ZÉŒZÊŒZËŒZÌŒZÍŒZÎŒZÏŒZÐŒZÑŒZÒŒZÓŒZÔŒ ZÕŒ!ZÖŒ%Z׌'ZØŒ*ZÙŒ+ZÚŒ.ZÛŒ/ZÜŒ2ZÝŒ3ZÞŒ5Zߌ6ZàSiZáSzZâ–Zã–"Zä–!Zå–1Zæ–*Zç–=Zè–[€Ž?[ŽC[‚ŽE[ƒŽF[„ŽL[…ŽM[†ŽN[‡ŽO[ˆŽP[‰ŽS[ŠŽT[‹ŽU[ŒŽV[ŽW[ŽŽX[ŽZ[Ž[[‘Ž\[’Ž][“Ž^[”Ž_[•Ž`[–Ža[—Žb[˜Žc[™Žd[šŽe[›Žg[œŽh[Žj[žŽk[ŸŽn[ Žq[¡¸[¢°[£Ï[¤Å[¥¾[¦Ð[§Ä[¨Ç[©Ó[ªæ[«â[¬Ü[­×[®Û[¯ë[°ï[±þ[²‘[³‘"[´‘[µ‘#[¶‘1[·‘/[¸‘9[¹‘C[º‘F[»R [¼YB[½R¢[¾R¬[¿R­[ÀR¾[ÁTÿ[ÂRÐ[ÃRÖ[ÄRð[ÅSß[Æqî[ÇwÍ[È^ô[ÉQõ[ÊQü[Ë›/[ÌS¶[Í_[ÎuZ[Ï]ï[ÐWL[ÑW©[ÒW¡[ÓX~[ÔX¼[ÕXÅ[ÖXÑ[×W)[ØW,[ÙW*[ÚW3[ÛW9[ÜW.[ÝW/[ÞW\[ßW;[àWB[áWi[âW…[ãWk[äW†[åW|[æW{[çWh[èWm[éWv[êWs[ëW­[ìW¤[íWŒ[îW²[ïWÏ[ðW§[ñW´[òW“[óW [ôWÕ[õWØ[öWÚ[÷WÙ[øWÒ[ùW¸[úWô[ûWï[üWø[ýWä[þWÝ\@Žs\AŽu\BŽw\CŽx\DŽy\EŽz\FŽ{\GŽ}\HŽ~\IŽ€\JŽ‚\KŽƒ\LŽ„\Mކ\NŽˆ\Oމ\PŽŠ\QŽ‹\RŽŒ\SŽ\TŽŽ\UŽ‘\VŽ’\WŽ“\XŽ•\YŽ–\ZŽ—\[Ž˜\\Ž™\]Žš\^Ž›\_Ž\`ŽŸ\aŽ \bŽ¡\cŽ¢\dŽ£\eޤ\fŽ¥\gަ\hާ\iލ\jŽ©\kŽª\lŽ­\mŽ®\nް\oޱ\p޳\qŽ´\r޵\s޶\tŽ·\uޏ\v޹\wŽ»\x޼\y޽\z޾\{Ž¿\|ŽÀ\}ŽÁ\~ŽÂ\€ŽÃ\ŽÄ\‚ŽÅ\ƒŽÆ\„ŽÇ\…ŽÈ\†ŽÉ\‡ŽÊ\ˆŽË\‰ŽÌ\ŠŽÍ\‹ŽÏ\ŒŽÐ\ŽÑ\ŽŽÒ\ŽÓ\ŽÔ\‘ŽÕ\’ŽÖ\“Ž×\”ŽØ\•ŽÙ\–ŽÚ\—ŽÛ\˜ŽÜ\™ŽÝ\šŽÞ\›Žß\œŽà\Žá\žŽâ\ŸŽã\ Žä\¡X \¢X \£Wý\¤Wí\¥X\¦X\§X\¨XD\©X \ªXe\«Xl\¬X\­X‰\®Xš\¯X€\°™¨\±Ÿ\²aÿ\³‚y\´‚}\µ‚\¶‚\·‚Š\¸‚¨\¹‚„\º‚Ž\»‚‘\¼‚—\½‚™\¾‚«\¿‚¸\À‚¾\Á‚°\‚È\ÂÊ\Ä‚ã\Å‚˜\Æ‚·\Ç‚®\È‚Ë\É‚Ì\Ê‚Á\Ë‚©\Ì‚´\Í‚¡\΂ª\Ï‚Ÿ\ЂÄ\Ñ‚Î\Ò‚¤\Ó‚á\Ôƒ \Õ‚÷\Ö‚ä\׃\؃\Ù‚Ü\Ú‚ô\Û‚Ò\Ü‚Ø\݃ \Þ‚û\ß‚Ó\àƒ\áƒ\âƒ\ãƒ\äƒ\å‚à\æ‚Õ\çƒ\èƒQ\éƒ[\êƒ\\ëƒ\샒\íƒ<\îƒ4\ïƒ1\ðƒ›\ñƒ^\òƒ/\óƒO\ôƒG\õƒC\öƒ_\÷ƒ@\øƒ\ùƒ`\úƒ-\ûƒ:\üƒ3\ýƒf\þƒe]@Žå]AŽæ]BŽç]CŽè]DŽé]EŽê]FŽë]GŽì]HŽí]IŽî]JŽï]KŽð]LŽñ]MŽò]NŽó]OŽô]PŽõ]QŽö]RŽ÷]SŽø]TŽù]UŽú]VŽû]WŽü]XŽý]YŽþ]ZŽÿ][]\]]]^]_]`]a]b]c]d ]e ]f ]g ]h ]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]z]{ ]|!]}"]~#]€$]%]‚&]ƒ']„(]…)]†*]‡+]ˆ,]‰-]Š.]‹/]Œ0]1]Ž2]3]4]‘5]’6]“7]”8]•9]–:]—;]˜<]™=]š>]›?]œ@]A]žB]ŸC] D]¡ƒh]¢ƒ]£ƒi]¤ƒl]¥ƒj]¦ƒm]§ƒn]¨ƒ°]©ƒx]ªƒ³]«ƒ´]¬ƒ ]­ƒª]®ƒ“]¯ƒœ]°ƒ…]±ƒ|]²ƒ¶]³ƒ©]´ƒ}]µƒ¸]¶ƒ{]·ƒ˜]¸ƒž]¹ƒ¨]ºƒº]»ƒ¼]¼ƒÁ]½„]¾ƒå]¿ƒØ]ÀX]Á„]„ ]ÃÝ]ăý]ŃÖ]Æ„]Ç„8]È„]É„]ʃÔ]˃ß]Ì„]Í„]΃ø]σù]Ѓê]уÅ]ÒƒÀ]Ó„&]Ôƒð]Õƒá]Ö„\]ׄQ]Ø„Z]Ù„Y]Ú„s]Û„‡]Ü„ˆ]Ý„z]Þ„‰]ß„x]à„<]á„F]â„i]ã„v]䄌]儎]æ„1]ç„m]è„Á]é„Í]ê„Ð]ë„æ]섽]í„Ó]î„Ê]ï„¿]ð„º]ñ„à]ò„¡]ó„¹]ô„´]õ„—]ö„å]÷„ã]ø… ]ùu ]ú…8]û„ð]ü…9]ý…]þ…:^@E^AF^BG^CH^DI^EJ^FK^GL^HM^IN^JO^KP^LQ^MR^NS^OT^PU^QV^RW^SX^TY^UZ^V[^W\^X]^Y^^Z_^[`^\a^]b^^c^_d^`e^aj^b€^cŒ^d’^e^f ^g¡^h¢^i¤^j¥^k¦^l§^mª^n¬^o­^p®^q¯^r²^s³^t´^uµ^v·^w¸^xº^y»^z¼^{¿^|À^}Ã^~Æ^€É^Ê^‚Ë^ƒÌ^„Í^…Ï^†Ò^‡Ö^ˆ×^‰Ú^Šà^‹á^Œã^ç^Žì^ï^ñ^‘ò^’ô^“õ^”ö^•ú^–û^—ü^˜þ^™ÿ^š^›^œ ^^ž^Ÿ^ ^¡…V^¢…;^£„ÿ^¤„ü^¥…Y^¦…H^§…h^¨…d^©…^^ª…z^«w¢^¬…C^­…r^®…{^¯…¤^°…¨^±…‡^²…^³…y^´…®^µ…œ^¶……^·…¹^¸…·^¹…°^º…Ó^»…Á^¼…Ü^½…ÿ^¾†'^¿†^À†)^Á†^†<^Ã^þ^Ä_^ÅY<^ÆYA^Ç€7^ÈYU^ÉYZ^ÊYX^ËS^Ì\"^Í\%^Î\,^Ï\4^ÐbL^Ñbj^ÒbŸ^Ób»^ÔbÊ^ÕbÚ^Öb×^×bî^Øc"^Ùbö^Úc9^ÛcK^ÜcC^Ýc­^Þcö^ßcq^àcz^ácŽ^âc´^ãcm^äc¬^åcŠ^æci^çc®^èc¼^écò^êcø^ëcà^ìcÿ^ícÄ^îcÞ^ïcÎ^ðdR^ñcÆ^òc¾^ódE^ôdA^õd ^öd^÷d ^ød ^ùd&^úd!^ûd^^üd„^ýdm^þd–_@_A_B#_C$_D%_E'_F(_G)_H*_I+_J,_K0_L1_M2_N3_O4_P7_Q9_R:_S=_T?_U@_VC_WE_XF_YH_ZI_[J_\K_]L_^N__T_`U_aV_bY_cZ_d\_e]_f^_g__h`_ia_jd_kf_lg_mi_nj_ok_pl_qo_rp_sq_tr_us_vv_ww_xx_yy_zz_{{_||_}~_~_€„_…_‚†_ƒ‡_„‰_…Š_†Œ_‡_ˆŽ_‰_Š_‹’_Œ”_–_Ž˜_š_œ_‘ž_’Ÿ_“ _”¤_•¥_–§_—¨_˜©_™«_š­_›²_œ·_¼_ž½_Ÿ¿_ À_¡dz_¢d·_£d¸_¤d™_¥dº_¦dÀ_§dÐ_¨d×_©dä_ªdâ_«e _¬e%_­e._®_ _¯_Ò_°u_±__²S__³Sñ_´Sý_µSé_¶Sè_·Sû_¸T_¹T_ºT_»TK_¼TR_½TS_¾TT_¿TV_ÀTC_ÁT!_ÂTW_ÃTY_ÄT#_ÅT2_ÆT‚_ÇT”_ÈTw_ÉTq_ÊTd_ËTš_ÌT›_ÍT„_ÎTv_ÏTf_ÐT_ÑTÐ_ÒT­_ÓTÂ_ÔT´_ÕTÒ_ÖT§_×T¦_ØTÓ_ÙTÔ_ÚTr_ÛT£_ÜTÕ_ÝT»_ÞT¿_ßTÌ_àTÙ_áTÚ_âTÜ_ãT©_äTª_åT¤_æTÝ_çTÏ_èTÞ_éU_êTç_ëU _ìTý_íU_îTó_ïU"_ðU#_ñU_òU_óU'_ôU*_õUg_öU_÷Uµ_øUI_ùUm_úUA_ûUU_üU?_ýUP_þU<`@Â`AÃ`BÆ`CÈ`DÉ`EË`FÌ`GÍ`HÒ`IÔ`JÕ`KÖ`LØ`MÙ`NÚ`OÞ`Pß`Qà`Rã`Sä`Tå`Ué`Vê`Wì`Xî`Yð`Zñ`[ò`\ó`]õ`^ö`_÷``ù`aú`bû`cü`dÿ`e‘`f‘`g‘`h‘`i‘`j‘`k‘`l‘ `m‘ `n‘ `o‘ `p‘ `q‘`r‘`s‘`t‘`u‘`v‘`w‘`x‘`y‘`z‘`{‘`|‘`}‘`~‘`€‘`‘`‚‘ `ƒ‘!`„‘$`…‘%`†‘&`‡‘'`ˆ‘(`‰‘)`Š‘*`‹‘+`Œ‘,`‘-`Ž‘.`‘0`‘2`‘‘3`’‘4`“‘5`”‘6`•‘7`–‘8`—‘:`˜‘;`™‘<`š‘=`›‘>`œ‘?`‘@`ž‘A`Ÿ‘B` ‘D`¡U7`¢UV`£Uu`¤Uv`¥Uw`¦U3`§U0`¨U\`©U‹`ªUÒ`«Uƒ`¬U±`­U¹`®Uˆ`¯U`°UŸ`±U~`²UÖ`³U‘`´U{`µUß`¶U½`·U¾`¸U”`¹U™`ºUê`»U÷`¼UÉ`½V`¾UÑ`¿Uë`ÀUì`ÁUÔ`ÂUæ`ÃUÝ`ÄUÄ`ÅUï`ÆUå`ÇUò`ÈUó`ÉUÌ`ÊUÍ`ËUè`ÌUõ`ÍUä`Δ`ÏV`ÐV`ÑV `ÒV`ÓV$`ÔV#`ÕUþ`ÖV`×V'`ØV-`ÙVX`ÚV9`ÛVW`ÜV,`ÝVM`ÞVb`ßVY`àV\`áVL`âVT`ãV†`äVd`åVq`æVk`çV{`èV|`éV…`êV“`ëV¯`ìVÔ`íV×`îVÝ`ïVá`ðVõ`ñVë`òVù`óVÿ`ôW`õW `öW `÷W`ø^`ù^`ú^`û^`ü^1`ý^;`þ^aË]4aÌ]=aÍ]laÎ][aÏ]oaÐ]]aÑ]kaÒ]KaÓ]JaÔ]iaÕ]taÖ]‚a×]™aØ]aÙŒsaÚ]·aÛ]ÅaÜ_saÝ_waÞ_‚aß_‡aà_‰aá_Œaâ_•aã_™aä_œaå_¨aæ_­aç_µaè_¼aéˆbaê_aaër­aìr°aír´aîr·aïr¸aðrÃañrÁaòrÎaórÍaôrÒaõrèaörïa÷réaøròaùrôaúr÷aûsaüróaýsaþrúb@‘æbA‘çbB‘èbC‘ébD‘êbE‘ëbF‘ìbG‘íbH‘îbI‘ïbJ‘ðbK‘ñbL‘òbM‘óbN‘ôbO‘õbP‘öbQ‘÷bR‘øbS‘ùbT‘úbU‘ûbV‘übW‘ýbX‘þbY‘ÿbZ’b[’b\’b]’b^’b_’b`’ba’bb’bc’ bd’ be’ bf’ bg’ bh’bi’bj’bk’bl’bm’bn’bo’bp’bq’br’bs’bt’bu’bv’bw’bx’by’bz’ b{’!b|’"b}’#b~’$b€’%b’&b‚’'bƒ’(b„’)b…’*b†’+b‡’,bˆ’-b‰’.bŠ’/b‹’0bŒ’1b’2bŽ’3b’4b’5b‘’6b’’7b“’8b”’9b•’:b–’;b—’bš’?b›’@bœ’Ab’Bbž’CbŸ’Db ’Eb¡rûb¢sb£sb¤s!b¥s b¦sb§sb¨sb©s"bªs9b«s%b¬s,b­s8b®s1b¯sPb°sMb±sWb²s`b³slb´sobµs~b¶‚b·Y%b¸˜çb¹Y$bºYb»™cb¼™gb½™hb¾™ib¿™jbÀ™kbÁ™lb™tbÙwbÄ™}bÅ™€bÆ™„bÇ™‡bÈ™ŠbÉ™bÊ™bË™‘bÌ™“bÍ™”bΙ•bÏ^€bÐ^‘bÑ^‹bÒ^–bÓ^¥bÔ^ bÕ^¹bÖ^µb×^¾bØ^³bÙSbÚ^ÒbÛ^ÑbÜ^ÛbÝ^èbÞ^êbߺbà_Äbá_Ébâ_Öbã_Ïbä`bå_îbæ`bç_ábè_äbé_þbê`bë`bì_êbí_íbî_øbï`bð`5bñ`&bò`bó`bô` bõ`)bö`+b÷` bø`?bù`!bú`xbû`ybü`{bý`zbþ`Bc@’FcA’GcB’HcC’IcD’JcE’KcF’LcG’McH’NcI’OcJ’PcK’QcL’RcM’ScN’TcO’UcP’VcQ’WcR’XcS’YcT’ZcU’[cV’\cW’]cX’^cY’_cZ’`c[’ac\’bc]’cc^’dc_’ec`’fca’gcb’hcc’icd’jce’kcf’lcg’mch’nci’ocj’pck’qcl’rcm’scn’uco’vcp’wcq’xcr’ycs’zct’{cu’|cv’}cw’~cx’cy’€cz’c{’‚c|’ƒc}’„c~’…c€’†c’‡c‚’ˆcƒ’‰c„’Šc…’‹c†’Œc‡’cˆ’c‰’cŠ’‘c‹’’cŒ’“c’”cŽ’•c’–c’—c‘’˜c’’™c“’šc”’›c•’œc–’c—’žc˜’Ÿc™’ cš’¡c›’¢cœ’£c’¤cž’¥cŸ’¦c ’§c¡`jc¢`}c£`–c¤`šc¥`­c¦`c§`ƒc¨`’c©`Œcª`›c«`ìc¬`»c­`±c®`Ýc¯`Øc°`Æc±`Úc²`´c³a c´a&cµac¶a#c·`ôc¸ac¹acºa+c»aJc¼auc½a¬c¾a”c¿a§cÀa·cÁaÔcÂaõcÃ_ÝcÄ–³cÅ•écÆ•ëcÇ•ñcÈ•ócÉ•õcÊ•öcË•ücÌ•þcÍ–cΖcÏ–cЖcÑ– cÒ– cÓ– cÔ– cÕ–cÖ–c×–cØ–cÙ–cÚ–cÛ–cÜN,cÝr?cÞbcßl5càlTcál\câlJcãl£cäl…cålcæl”cçlŒcèlhcélicêltcëlvcìl†cíl©cîlÐcïlÔcðl­cñl÷còløcólñcôl×cõl²cölàc÷lÖcølúcùlëcúlîcûl±cülÓcýlïcþlþd@’¨dA’©dB’ªdC’«dD’¬dE’­dF’¯dG’°dH’±dI’²dJ’³dK’´dL’µdM’¶dN’·dO’¸dP’¹dQ’ºdR’»dS’¼dT’½dU’¾dV’¿dW’ÀdX’ÁdY’ÂdZ’Ãd[’Äd\’Åd]’Æd^’Çd_’Éd`’Êda’Ëdb’Ìdc’Ídd’Îde’Ïdf’Ðdg’Ñdh’Òdi’Ódj’Ôdk’Õdl’Ödm’×dn’Ødo’Ùdp’Údq’Ûdr’Üds’Ýdt’Þdu’ßdv’àdw’ádx’âdy’ãdz’äd{’åd|’æd}’çd~’èd€’éd’êd‚’ëdƒ’ìd„’íd…’îd†’ïd‡’ðdˆ’ñd‰’òdŠ’ód‹’ôdŒ’õd’ödŽ’÷d’ød’ùd‘’úd’’ûd“’üd”’ýd•’þd–’ÿd—“d˜“d™“dš“d›“dœ“d“dž“dŸ“d “ d¡m9d¢m'd£m d¤mCd¥mHd¦md§md¨md©mdªm+d«mMd¬m.d­m5d®md¯mOd°mRd±mTd²m3d³m‘d´modµmžd¶m d·m^d¸m“d¹m”dºm\d»m`d¼m|d½mcd¾nd¿mÇdÀmÅdÁmÞdÂndÃm¿dÄmàdÅndÆmædÇmÝdÈmÙdÉndÊm«dËn dÌm®dÍn+dÎnndÏnNdÐnkdÑn²dÒn_dÓn†dÔnSdÕnTdÖn2d×n%dØnDdÙnßdÚn±dÛn˜dÜnàdÝo-dÞnâdßn¥dàn§dán½dân»dãn·dän×dån´dænÏdçndènÂdénŸdêobdëoFdìoGdío$dîodïnùdðo/dño6dòoKdóotdôo*dõo döo)d÷o‰døodùoŒdúoxdûordüo|dýozdþoÑe@“ eA“ eB“ eC“ eD“eE“eF“eG“eH“eI“eJ“eK“eL“eM“eN“eO“eP“eQ“eR“eS“eT“eU“eV“ eW“!eX“"eY“#eZ“$e[“%e\“&e]“'e^“(e_“)e`“*ea“+eb“,ec“-ed“.ee“/ef“0eg“1eh“2ei“3ej“4ek“5el“6em“7en“8eo“9ep“:eq“;er“gß•gàsŽgás‘gâs®gãs¢gäsŸgåsÏgæsÂgçsÑgès·gés³gêsÀgësÉgìsÈgísågîsÙgï˜|gðt gñségòsçgósÞgôsºgõsògötg÷t*gøt[gùt&gút%gût(güt0gýt.gþt,h@”/hA”0hB”1hC”2hD”3hE”4hF”5hG”6hH”7hI”8hJ”9hK”:hL”;hM”hðhJhñhIhòh)hóhµhôhhõhthöhwh÷h“høhkhùhÂhúinhûhühüihýi hþhùi@•'iA•3iB•=iC•CiD•HiE•KiF•UiG•ZiH•`iI•niJ•tiK•uiL•wiM•xiN•yiO•ziP•{iQ•|iR•}iS•~iT•€iU•iV•‚iW•ƒiX•„iY•…iZ•†i[•‡i\•ˆi]•‰i^•Ši_•‹i`•Œia•ib•Žic•id•ie•‘if•’ig•“ih•”ii••ij•–ik•—il•˜im•™in•šio•›ip•œiq•ir•žis•Ÿit• iu•¡iv•¢iw•£ix•¤iy•¥iz•¦i{•§i|•¨i}•©i~•ªi€•«i•¬i‚•­iƒ•®i„•¯i…•°i†•±i‡•²iˆ•³i‰•´iŠ•µi‹•¶iŒ•·i•¸iŽ•¹i•ºi•»i‘•¼i’•½i“•¾i”•¿i••Ài–•Ái—•Âi˜•Ãi™•Äiš•Åi›•Æiœ•Çi•Èiž•ÉiŸ•Êi •Ëi¡i$i¢hði£i i¤ii¥iWi¦hãi§ii¨iqi©i9iªi`i«iBi¬i]i­i„i®iki¯i€i°i˜i±ixi²i4i³iÌi´i‡iµiˆi¶iÎi·i‰i¸ifi¹iciºiyi»i›i¼i§i½i»i¾i«i¿i­iÀiÔiÁi±iÂiÁiÃiÊiÄißiÅi•iÆiàiÇiiÈiÿiÉj/iÊiíiËjiÌjiÍjeiÎiòiÏjDiÐj>iÑj iÒjPiÓj[iÔj5iÕjŽiÖjyi×j=iØj(iÙjXiÚj|iÛj‘iÜjiÝj©iÞj—ißj«iàs7iásRiâkiãk‚iäk‡iåk„iæk’içk“ièkiékšiêk›iëk¡iìkªiíkiîmiïqiðriñsiòuióviôxiõwiöyi÷ziø|iù~iúiû‚iü„iý‡iþ‹j@•ÌjA•ÍjB•ÎjC•ÏjD•ÐjE•ÑjF•ÒjG•ÓjH•ÔjI•ÕjJ•ÖjK•×jL•ØjM•ÙjN•ÚjO•ÛjP•ÜjQ•ÝjR•ÞjS•ßjT•àjU•ájV•âjW•ãjX•äjY•åjZ•æj[•çj\•ìj]•ÿj^–j_–j`–ja–jb–jc– jd–#je–$jf–%jg–&jh–'ji–(jj–)jk–+jl–,jm–-jn–/jo–0jp–7jq–8jr–9js–:jt–>ju–Ajv–Cjw–Jjx–Njy–Ojz–Qj{–Rj|–Sj}–Vj~–Wj€–Xj–Yj‚–Zjƒ–\j„–]j…–^j†–`j‡–cjˆ–ej‰–fjŠ–kj‹–mjŒ–nj–ojŽ–pj–qj–sj‘–xj’–yj“–zj”–{j•–|j––}j—–~j˜–j™–€jš–j›–‚jœ–ƒj–„jž–‡jŸ–‰j –Šj¡j¢Žj£j¤˜j¥šj¦ŽÎj§b j¨bj©bjªbj«b"j¬b!j­b%j®b$j¯b,j°çj±tïj²tôj³tÿj´ujµuj¶uj·e4j¸eîj¹eïjºeðj»f j¼fj½grj¾fj¿fjÀfjÁp…jÂf÷jÃfjÄf4jÅf1jÆf6jÇf5jÈ€jÉf_jÊfTjËfAjÌfOjÍfVjÎfajÏfWjÐfwjÑf„jÒfŒjÓf§jÔfjÕf¾jÖfÛj×fÜjØfæjÙféjÚ2jÛ3jÜ6jÝ;jÞ=jß@jàEjáFjâHjãIjäGjåMjæUjçYjè‰Çjé‰Êjê‰Ëjë‰Ìjì‰Îjí‰Ïjî‰Ðjï‰ÑjðrnjñrŸjòr]jórfjôrojõr~jörj÷r„jør‹jùrjúrjûr’jücjýc2jþc°k@–ŒkA–ŽkB–‘kC–’kD–“kE–•kF––kG–škH–›kI–kJ–žkK–ŸkL– kM–¡kN–¢kO–£kP–¤kQ–¥kR–¦kS–¨kT–©kU–ªkV–«kW–¬kX–­kY–®kZ–¯k[–±k\–²k]–´k^–µk_–·k`–¸ka–ºkb–»kc–¿kd–Âke–Ãkf–Èkg–Êkh–Ëki–Ðkj–Ñkk–Ókl–Ôkm–Ökn–×ko–Økp–Ùkq–Úkr–Ûks–Ükt–Ýku–Þkv–ßkw–ákx–âky–ãkz–äk{–åk|–æk}–çk~–ëk€–ìk–ík‚–îkƒ–ðk„–ñk…–òk†–ôk‡–õkˆ–øk‰–úkŠ–ûk‹–ükŒ–ýk–ÿkŽ—k—k—k‘— k’— k“— k”—k•—k–—k——k˜—k™—kš—k›—kœ—k—kž—kŸ—k — k¡d?k¢dØk£€k¤kêk¥kók¦kýk§kõk¨kùk©lkªlk«lk¬l k­lk®lk¯lk°lk±l!k²l)k³l$k´l*kµl2k¶e5k·eUk¸ekk¹rMkºrRk»rVk¼r0k½†bk¾Rk¿€ŸkÀ€œkÁ€“k€¼kÃg kÄ€½kÅ€±kÆ€«kÇ€­kÈ€´kÉ€·kÊ€çkË€èkÌ€ékÍ€êk΀ÛkÏ€ÂkЀÄkÑ€ÙkÒ€ÍkÓ€×kÔgkÕ€ÝkÖ€ëk×€ñkØ€ôkÙ€íkÚ kÛkÜ€òkÝ€ükÞgkßkàŒZká6kâkã,käkå2kæHkçLkèSkétkêYkëZkìqkí`kîikï|kð}kñmkògkóXMkôZµkõˆkö‚k÷‘kønÕkù£kúªkûÌküg&kýÊkþ»l@—!lA—"lB—#lC—$lD—%lE—&lF—'lG—(lH—)lI—+lJ—,lK—.lL—/lM—1lN—3lO—4lP—5lQ—6lR—7lS—:lT—;lU—læb=lçbClèbHlébIlêy;lëy@lìyFlíyIlîy[lïy\lðySlñyZlòyblóyWlôy`lõyolöygl÷yzløy…lùyŠlúyšlûy§lüy³lý_Ñlþ_Ðm@—žmA—ŸmB—¡mC—¢mD—¤mE—¥mF—¦mG—§mH—¨mI—©mJ—ªmK—¬mL—®mM—°mN—±mO—³mP—µmQ—¶mR—·mS—¸mT—¹mU—ºmV—»mW—¼mX—½mY—¾mZ—¿m[—Àm\—Ám]—Âm^—Ãm_—Äm`—Åma—Æmb—Çmc—Èmd—Éme—Êmf—Ëmg—Ìmh—Ími—Îmj—Ïmk—Ðml—Ñmm—Òmn—Ómo—Ômp—Õmq—Ömr—×ms—Ømt—Ùmu—Úmv—Ûmw—Ümx—Ýmy—Þmz—ßm{—àm|—ám}—âm~—ãm€—äm—åm‚—èmƒ—îm„—ïm…—ðm†—ñm‡—òmˆ—ôm‰—÷mŠ—øm‹—ùmŒ—úm—ûmŽ—üm—ým—þm‘—ÿm’˜m“˜m”˜m•˜m–˜m—˜m˜˜m™˜mš˜m›˜ mœ˜ m˜ mž˜ mŸ˜ m ˜m¡`np˜?nq˜@nr˜Ans˜Bnt˜Cnu˜Dnv˜Enw˜Fnx˜Gny˜Hnz˜In{˜Jn|˜Kn}˜Ln~˜Mn€˜Nn˜On‚˜Pnƒ˜Qn„˜Rn…˜Sn†˜Tn‡˜Unˆ˜Vn‰˜WnŠ˜Xn‹˜YnŒ˜Zn˜[nŽ˜\n˜]n˜^n‘˜_n’˜`n“˜an”˜bn•˜cn–˜dn—˜en˜˜fn™˜gnš˜hn›˜inœ˜jn˜knž˜lnŸ˜mn ˜nn¡wbn¢wen£wn¤wn¥w}n¦w€n§wŒn¨w‘n©wŸnªw n«w°n¬wµn­w½n®u:n¯u@n°uNn±uKn²uHn³u[n´urnµuyn¶uƒn·Xn¸an¹_nºŠHn»hn¼tn½qn¾yn¿nÀ~nÁvÍnÂvånÈ2nÄ”…nÅ”†nÆ”‡nÇ”‹nÈ”ŠnÉ”ŒnÊ”nË”nÌ”nÍ””nΔ—nÏ”•nДšnÑ”›nÒ”œnÓ”£nÔ”¤nÕ”«nÖ”ªn×”­nØ”¬nÙ”¯nÚ”°nÛ”²nÜ”´nÝ”¶nÞ”·nß”¸nà”¹nᔺn┼n㔽n䔿nå”Änæ”Ènç”Énè”Êné”Ënê”Ìnë”Ínì”Îní”Ðnî”Ñnï”Ònð”Õnñ”Önò”×nó”Ùnô”Ønõ”Ûnö”Þn÷”ßnø”ànù”ânú”änû”ånü”çný”ènþ”êo@˜ooA˜poB˜qoC˜roD˜soE˜toF˜‹oG˜ŽoH˜’oI˜•oJ˜™oK˜£oL˜¨oM˜©oN˜ªoO˜«oP˜¬oQ˜­oR˜®oS˜¯oT˜°oU˜±oV˜²oW˜³oX˜´oY˜µoZ˜¶o[˜·o\˜¸o]˜¹o^˜ºo_˜»o`˜¼oa˜½ob˜¾oc˜¿od˜Àoe˜Áof˜Âog˜Ãoh˜Äoi˜Åoj˜Æok˜Çol˜Èom˜Éon˜Êoo˜Ëop˜Ìoq˜Íor˜Ïos˜Ðot˜Ôou˜Öov˜×ow˜Ûox˜Üoy˜Ýoz˜ào{˜áo|˜âo}˜ão~˜äo€˜åo˜æo‚˜éoƒ˜êo„˜ëo…˜ìo†˜ío‡˜îoˆ˜ïo‰˜ðoŠ˜ño‹˜òoŒ˜óo˜ôoŽ˜õo˜öo˜÷o‘˜øo’˜ùo“˜úo”˜ûo•˜üo–˜ýo—˜þo˜˜ÿo™™oš™o›™oœ™o™ož™oŸ™o ™o¡”éo¢”ëo£”îo¤”ïo¥”óo¦”ôo§”õo¨”÷o©”ùoª”üo«”ýo¬”ÿo­•o®•o¯•o°•o±• o²• o³• o´•oµ•o¶•o·•o¸•o¹•oº•o»•o¼•o½•o¾•o¿•oÀ•"oÁ•*o•+oÕ)oÄ•,oÅ•1oÆ•2oÇ•4oÈ•6oÉ•7oÊ•8oË•oÍ•?oΕBoÏ•5oЕDoÑ•EoÒ•FoÓ•IoÔ•LoÕ•NoÖ•OoוRoØ•SoÙ•ToÚ•VoÛ•WoÜ•XoÝ•YoÞ•[oß•^oà•_oá•]oâ•aoã•boä•doå•eoæ•foç•goè•hoé•ioê•joë•koì•loí•ooî•qoï•roð•soñ•:oòwçoówìoô–ÉoõyÕoöyío÷yãoøyëoùzoú]Goûzoüzoýzoþzp@™pA™ pB™ pC™ pD™ pE™pF™pG™pH™pI™pJ™pK™pL™pM™pN™pO™pP™pQ™pR™pS™pT™pU™pV™ pW™!pX™"pY™#pZ™$p[™%p\™&p]™'p^™(p_™)p`™*pa™+pb™,pc™-pd™/pe™0pf™1pg™2ph™3pi™4pj™5pk™6pl™7pm™8pn™9po™:pp™;pq™pt™?pu™@pv™Apw™Bpx™Cpy™Dpz™Ep{™Fp|™Gp}™Hp~™Ip€™Jp™Kp‚™Lpƒ™Mp„™Np…™Op†™Pp‡™Qpˆ™Rp‰™SpŠ™Vp‹™WpŒ™Xp™YpŽ™Zp™[p™\p‘™]p’™^p“™_p”™`p•™ap–™bp—™dp˜™fp™™spš™xp›™ypœ™{p™~pž™‚pŸ™ƒp ™‰p¡z9p¢z7p£zQp¤žÏp¥™¥p¦zpp§vˆp¨vŽp©v“pªv™p«v¤p¬tÞp­tàp®u,p¯ž p°ž"p±ž(p²ž)p³ž*p´ž+pµž,p¶ž2p·ž1p¸ž6p¹ž8pºž7p»ž9p¼ž:p½ž>p¾žAp¿žBpÀžDpÁžFpžGpÞHpÄžIpÅžKpÆžLpÇžNpÈžQpÉžUpÊžWpËžZpÌž[pÍž\pΞ^pÏžcpОfpÑžgpÒžhpÓžipÔžjpÕžkpÖžlpמqpØžmpÙžspÚu’pÛu”pÜu–pÝu pÞupßu¬pàu£páu³pâu´pãu¸päuÄpåu±pæu°pçuÃpèuÂpéuÖpêuÍpëuãpìuèpíuæpîuäpïuëpðuçpñvpòuñpóuüpôuÿpõvpövp÷vpøv pùvpúv pûv%püvpývpþvq@™ŒqA™ŽqB™šqC™›qD™œqE™qF™žqG™ŸqH™ qI™¡qJ™¢qK™£qL™¤qM™¦qN™§qO™©qP™ªqQ™«qR™¬qS™­qT™®qU™¯qV™°qW™±qX™²qY™³qZ™´q[™µq\™¶q]™·q^™¸q_™¹q`™ºqa™»qb™¼qc™½qd™¾qe™¿qf™Àqg™Áqh™Âqi™Ãqj™Äqk™Åql™Æqm™Çqn™Èqo™Éqp™Êqq™Ëqr™Ìqs™Íqt™Îqu™Ïqv™Ðqw™Ñqx™Òqy™Óqz™Ôq{™Õq|™Öq}™×q~™Øq€™Ùq™Úq‚™Ûqƒ™Üq„™Ýq…™Þq†™ßq‡™àqˆ™áq‰™âqŠ™ãq‹™äqŒ™åq™æqŽ™çq™èq™éq‘™êq’™ëq“™ìq”™íq•™îq–™ïq—™ðq˜™ñq™™òqš™óq›™ôqœ™õq™öqž™÷qŸ™øq ™ùq¡vq¢vq¬v3q­vMq®v^q¯vTq°v\q±vVq²vkq³voq´Êqµzæq¶zxq·zyq¸z€q¹z†qºzˆq»z•q¼z¦q½z q¾z¬q¿z¨qÀz­qÁz³qˆdqÈiqĈrqň}qƈqLj‚qȈ¢qɈÆqʈ·qˈ¼q̈Éq͈âqΈÎqψãqЈåqшñqÒ‰qÓˆüqÔˆèqÕˆþqÖˆðq׉!q؉qÙ‰qÚ‰qÛ‰ q܉4q݉+qÞ‰6q߉Aqà‰fqá‰{qâu‹qã€åqäv²qåv´qæwÜqç€qè€qé€qê€që€ qì€"qí€%qî€&qï€'qð€)qñ€(qò€1qó€ qô€5qõ€Cqö€Fq÷€Mqø€Rqù€iqú€qqû‰ƒqü˜xqý˜€qþ˜ƒr@™úrA™ûrB™ürC™ýrD™þrE™ÿrFšrGšrHšrIšrJšrKšrLšrMšrNšrOš rPš rQš rRš rSš rTšrUšrVšrWšrXšrYšrZšr[šr\šr]šr^šr_šr`šrašrbšrcšrdšrešrfš rgš!rhš"riš#rjš$rkš%rlš&rmš'rnš(roš)rpš*rqš+rrš,rsš-rtš.ruš/rvš0rwš1rxš2ryš3rzš4r{š5r|š6r}š7r~š8r€š9rš:r‚š;rƒšr†š?r‡š@rˆšAr‰šBrŠšCr‹šDrŒšEršFrŽšGršHršIr‘šJr’šKr“šLr”šMr•šNr–šOr—šPr˜šQr™šRrššSr›šTrœšUršVržšWrŸšXr šYr¡˜‰r¢˜Œr£˜r¤˜r¥˜”r¦˜šr§˜›r¨˜žr©˜Ÿrª˜¡r«˜¢r¬˜¥r­˜¦r®†Mr¯†Tr°†lr±†nr²†r³†zr´†|rµ†{r¶†¨r·†r¸†‹r¹†¬rº†r»†§r¼†£r½†ªr¾†“r¿†©rÀ†¶rÁ†Är†µrÆÎrưrņºrƆ±rdž¯rȆÉrɆÏrʆ´rˆér̆ñr͆òrΆírφórІÐrчrÒ†ÞrÓ†ôrÔ†ßrÕ†ØrÖ†Ñrׇr؇rÙ†ørÚ‡rÛ‡ r܇ r݇ rÞ‡#r߇;rà‡rá‡%râ‡.rã‡rä‡>rå‡Hræ‡4rç‡1rè‡)ré‡7rê‡?r뇂rì‡"rí‡}rî‡~rï‡{rð‡`rñ‡prò‡Lró‡nrô‡‹rõ‡Srö‡cr÷‡|rø‡drù‡Yrú‡erû‡“rü‡¯rý‡¨rþ‡Òs@šZsAš[sBš\sCš]sDš^sEš_sFš`sGšasHšbsIšcsJšdsKšesLšfsMšgsNšhsOšisPšjsQšksRšrsSšƒsTš‰sUšsVšŽsWš”sXš•sYš™sZš¦s[š©s\šªs]š«s^š¬s_š­s`š®saš¯sbš²scš³sdš´sešµsfš¹sgš»shš½siš¾sjš¿skšÃslšÄsmšÆsnšÇsošÈspšÉsqšÊsršÍssšÎstšÏsušÐsvšÒswšÔsxšÕsyšÖszš×s{šÙs|šÚs}šÛs~šÜs€šÝsšÞs‚šàsƒšâs„šãs…šäs†šås‡šçsˆšès‰šésŠšês‹šìsŒšîsšðsŽšñsšòsšós‘šôs’šõs“šös”š÷s•šøs–šús—šüs˜šýs™šþsššÿs››sœ›s›sž›sŸ›s ›s¡‡Æs¢‡ˆs£‡…s¤‡­s¥‡—s¦‡ƒs§‡«s¨‡ås©‡¬sª‡µs«‡³s¬‡Ës­‡Ós®‡½s¯‡Ñs°‡Às±‡Ês²‡Ûs³‡ês´‡àsµ‡îs¶ˆs·ˆs¸‡þs¹ˆ sºˆs»ˆ!s¼ˆ9s½ˆs×{sØ{XsÙ{ZsÚ{EsÛ{usÜ{LsÝ{]sÞ{`sß{nsà{{sá{bsâ{rsã{qsä{så{¦sæ{§sç{¸sè{¬sé{sê{¨së{…sì{ªsí{œsî{¢sï{«sð{´sñ{Ñsò{Ásó{Ìsô{Ýsõ{Úsö{ås÷{æsø{êsù| sú{þsû{üsü|sý|sþ| t@›tA› tB› tC› tD› tE› tF›tG›tH›tI›tJ›tK›tL›tM›tN›tO›tP›tQ›tR›tS›tT›tU› tV›!tW›"tX›$tY›%tZ›&t[›'t\›(t]›)t^›*t_›+t`›,ta›-tb›.tc›0td›1te›3tf›4tg›5th›6ti›7tj›8tk›9tl›:tm›=tn›>to›?tp›@tq›Ftr›Jts›Ktt›Ltu›Ntv›Ptw›Rtx›Sty›Utz›Vt{›Wt|›Xt}›Yt~›Zt€›[t›\t‚›]tƒ›^t„›_t…›`t†›at‡›btˆ›ct‰›dtŠ›et‹›ftŒ›gt›htŽ›it›jt›kt‘›lt’›mt“›nt”›ot•›pt–›qt—›rt˜›st™›ttš›ut››vtœ›wt›xtž›ytŸ›zt ›{t¡|t¢|*t£|&t¤|8t¥|At¦|@t§þt¨‚t©‚tª‚t«ìt¬ˆDt­‚!t®‚"t¯‚#t°‚-t±‚/t²‚(t³‚+t´‚8tµ‚;t¶‚3t·‚4t¸‚>t¹‚Dtº‚It»‚Kt¼‚Ot½‚Zt¾‚_t¿‚htÀˆ~tÁˆ…tˆˆtÈØtĈßtʼn^tÆtÇŸtȧtɯtʰt˲tÌ||tÍeItÎ|‘tÏ|tÐ|œtÑ|žtÒ|¢tÓ|²tÔ|¼tÕ|½tÖ|Át×|ÇtØ|ÌtÙ|ÍtÚ|ÈtÛ|ÅtÜ|×tÝ|ètÞ‚ntßf¨tà¿táÎtâÕtãåtäátåætæétçîtèóté|øtê}wtë}¦tì}®tí~Gtî~›ttðž´tñstò„tó”tô‘tõ±tögt÷mtøŒGtùŒItú‘Jtû‘Ptü‘Ntý‘Otþ‘du@›|uA›}uB›~uC›uD›€uE›uF›‚uG›ƒuH›„uI›…uJ›†uK›‡uL›ˆuM›‰uN›ŠuO›‹uP›ŒuQ›uR›ŽuS›uT›uU›‘uV›’uW›“uX›”uY›•uZ›–u[›—u\›˜u]›™u^›šu_››u`›œua›ub›žuc›Ÿud› ue›¡uf›¢ug›£uh›¤ui›¥uj›¦uk›§ul›¨um›©un›ªuo›«up›¬uq›­ur›®us›¯ut›°uu›±uv›²uw›³ux›´uy›µuz›¶u{›·u|›¸u}›¹u~›ºu€›»u›¼u‚›½uƒ›¾u„›¿u…›Àu†›Áu‡›Âuˆ›Ãu‰›ÄuŠ›Åu‹›ÆuŒ›Çu›ÈuŽ›Éu›Êu›Ëu‘›Ìu’›Íu“›Îu”›Ïu•›Ðu–›Ñu—›Òu˜›Óu™›Ôuš›Õu››Öuœ›×u›Øuž›ÙuŸ›Úu ›Ûu¡‘bu¢‘au£‘pu¤‘iu¥‘ou¦‘}u§‘~u¨‘ru©‘tuª‘yu«‘Œu¬‘…u­‘u®‘u¯‘‘u°‘¢u±‘£u²‘ªu³‘­u´‘®uµ‘¯u¶‘µu·‘´u¸‘ºu¹ŒUuºž~u»¸u¼ëu½Žu¾ŽYu¿ŽiuÀµuÁ¿u¼uúuÄÄuÅÖuÆ×uÇÚuÈÞuÉÎuÊÏuËÛuÌÆuÍìuÎ÷uÏøuÐãuÑùuÒûuÓäuÔŽ uÕýuÖŽu׎uØŽuÙŽ,uÚŽ.uÛŽ#uÜŽ/uÝŽ:uÞŽ@uߎ9uàŽ5uáŽ=uâŽ1uãŽIuäŽAuåŽBuæŽQuçŽRuèŽJuéŽpuêŽvuëŽ|uìŽouíŽtuuïŽuðŽ”uñŽuòŽœuóŽžuôŒxuõŒ‚uöŒŠu÷Œ…uøŒ˜uùŒ”uúe›uû‰Öuü‰Þuý‰Úuþ‰Üv@›ÜvA›ÝvB›ÞvC›ßvD›àvE›ávF›âvG›ãvH›ävI›åvJ›ævK›çvL›èvM›évN›êvO›ëvP›ìvQ›ívR›îvS›ïvT›ðvU›ñvV›òvW›óvX›ôvY›õvZ›öv[›÷v\›øv]›ùv^›úv_›ûv`›üva›ývb›þvc›ÿvdœveœvfœvgœvhœviœvjœvkœvlœvmœ vnœ voœ vpœ vqœ vrœvsœvtœvuœvvœvwœvxœvyœvzœv{œv|œv}œv~œv€œvœv‚œvƒœv„œv…œ v†œ!v‡œ"vˆœ#v‰œ$vŠœ%v‹œ&vŒœ'vœ(vŽœ)vœ*vœ+v‘œ,v’œ-v“œ.v”œ/v•œ0v–œ1v—œ2v˜œ3v™œ4všœ5v›œ6vœœ7vœ8vžœ9vŸœ:v œ;v¡‰åv¢‰ëv£‰ïv¤Š>v¥‹&v¦—Sv§–év¨–óv©–ïvª—v«—v¬—v­—v®—v¯—*v°—-v±—0v²—>v³Ÿ€v´ŸƒvµŸ…v¶Ÿ†v·Ÿ‡v¸Ÿˆv¹Ÿ‰vºŸŠv»ŸŒv¼žþv½Ÿ v¾Ÿ v¿–¹vÀ–¼vÁ–½v–ÎvÖÒvÄw¿vÅ–àvÆ’ŽvÇ’®vÈ’ÈvÉ“>vÊ“jvË“ÊvÌ“vÍ”>vΔkvÏœvМ‚vÑœ…vÒœ†vÓœ‡vÔœˆvÕz#vÖœ‹vלŽvØœvÙœ‘vÚœ’vÛœ”vÜœ•vÝœšvÞœ›vßœžvàœŸvᜠv✡v㜢v䜣v圥v朦v眧v蜨v霩vꜫv뜭v윮v휰vvvðœ³vñœ´vòœµvóœ¶vôœ·võœºvöœ»v÷œ¼vøœ½vùœÄvúœÅvûœÆvüœÇvýœÊvþœËw@œwCœ?wDœ@wEœAwFœBwGœCwHœDwIœEwJœFwKœGwLœHwMœIwNœJwOœKwPœLwQœMwRœNwSœOwTœPwUœQwVœRwWœSwXœTwYœUwZœVw[œWw\œXw]œYw^œZw_œ[w`œ\waœ]wbœ^wcœ_wdœ`weœawfœbwgœcwhœdwiœewjœfwkœgwlœhwmœiwnœjwoœkwpœlwqœmwrœnwsœowtœpwuœqwvœrwwœswxœtwyœuwzœvw{œww|œxw}œyw~œzw€œ{wœ}w‚œ~wƒœ€w„œƒw…œ„w†œ‰w‡œŠwˆœŒw‰œwŠœ“w‹œ–wŒœ—wœ˜wŽœ™wœwœªw‘œ¬w’œ¯w“œ¹w”œ¾w•œ¿w–œÀw—œÁw˜œÂw™œÈwšœÉw›œÑwœœÒwœÚwžœÛwŸœàw œáw¡œÌw¢œÍw£œÎw¤œÏw¥œÐw¦œÓw§œÔw¨œÕw©œ×wªœØw«œÙw¬œÜw­œÝw®œßw¯œâw°—|w±—…w²—‘w³—’w´—”wµ—¯w¶—«w·—£w¸—²w¹—´wºš±w»š°w¼š·w½žXw¾š¶w¿šºwÀš¼wÁšÁwšÀwÚÅwÄšÂwÅšËwÆšÌwÇšÑwÈ›EwÉ›CwÊ›GwË›IwÌ›HwÍ›MwΛQwϘèwЙ wÑ™.wÒ™UwÓ™TwÔšßwÕšáwÖšæwךïwØšëwÙšûwÚšíwÛšùwÜ›wÝ›wÞ›wß›wà›#wáž½wâž¾wã~;wäž‚w垇w枈wçž‹wèž’wé“Öwêžw랟wìžÛwížÜwîžÝwïžàwðžßwñžâwòžéwóžçwôžåwõžêwöžïw÷Ÿ"wøŸ,wùŸ/wúŸ9wûŸ7wüŸ=wýŸ>wþŸDx@œãxAœäxBœåxCœæxDœçxEœèxFœéxGœêxHœëxIœìxJœíxKœîxLœïxMœðxNœñxOœòxPœóxQœôxRœõxSœöxTœ÷xUœøxVœùxWœúxXœûxYœüxZœýx[œþx\œÿx]x^x_x`xaxbxcxdxexf xg xh xi xj xkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzx{x|x} x~!x€"x#x‚$xƒ%x„&x…'x†(x‡)xˆ*x‰+xŠ,x‹-xŒ.x/xŽ0x1x2x‘3x’4x“5x”6x•7x–8x—9x˜:x™;xšx?xž@xŸAx Bx¡â4x¢â5x£â6x¤â7x¥â8x¦â9x§â:x¨â;x©âx¬â?x­â@x®âAx¯âBx°âCx±âDx²âEx³âFx´âGxµâHx¶âIx·âJx¸âKx¹âLxºâMx»âNx¼âOx½âPx¾âQx¿âRxÀâSxÁâTxÂâUxÃâVxÄâWxÅâXxÆâYxÇâZxÈâ[xÉâ\xÊâ]xËâ^xÌâ_xÍâ`xÎâaxÏâbxÐâcxÑâdxÒâexÓâfxÔâgxÕâhxÖâix×âjxØâkxÙâlxÚâmxÛânxÜâoxÝâpxÞâqxßârxàâsxáâtxââuxãâvxäâwxåâxxæâyxçâzxèâ{xéâ|xêâ}xëâ~xìâxíâ€xîâxïâ‚xðâƒxñâ„xòâ…xóâ†xôâ‡xõâˆxöâ‰x÷âŠxøâ‹xùâŒxúâxûâŽxüâxýâxþâ‘y@CyADyBEyCFyDGyEHyFIyGJyHKyILyJMyKNyLOyMPyNQyORyPSyQTyRUySVyTWyUXyVYyWZyX[yY\yZ]y[^y\_y]`y^ay_by`cyadybeycfydgyehyfiygjyhkyilyjmyknyloympynqyorypsyqtyruysvytwyuxyvyywzyx{yy|yz}y{~y|y}€y~y€‚yƒy‚„yƒ…y„†y…‡y†ˆy‡‰yˆŠy‰‹yŠŒy‹yŒŽyyŽy‘y’y‘“y’”y“•y”–y•—y–˜y—™y˜šy™›yšœy›yœžyŸyž yŸ¡y ¢y¡â’y¢â“y£â”y¤â•y¥â–y¦â—y§â˜y¨â™y©âšyªâ›y«âœy¬ây­âžy®âŸy¯â y°â¡y±â¢y²â£y³â¤y´â¥yµâ¦y¶â§y·â¨y¸â©y¹âªyºâ«y»â¬y¼â­y½â®y¾â¯y¿â°yÀâ±yÁâ²yÂâ³yÃâ´yÄâµyÅâ¶yÆâ·yÇâ¸yÈâ¹yÉâºyÊâ»yËâ¼yÌâ½yÍâ¾yÎâ¿yÏâÀyÐâÁyÑâÂyÒâÃyÓâÄyÔâÅyÕâÆyÖâÇy×âÈyØâÉyÙâÊyÚâËyÛâÌyÜâÍyÝâÎyÞâÏyßâÐyàâÑyáâÒyââÓyãâÔyäâÕyåâÖyæâ×yçâØyèâÙyéâÚyêâÛyëâÜyìâÝyíâÞyîâßyïâàyðâáyñââyòâãyóâäyôâåyõâæyöâçy÷âèyøâéyùâêyúâëyûâìyüâíyýâîyþâïz@£zA¤zB¥zC¦zD§zE¨zF©zGªzH«zI¬zJ­zK®zL¯zM°zN±zO²zP³zQ´zRµzS¶zT·zU¸zV¹zWºzX»zY¼zZ½z[¾z\¿z]Àz^Áz_Âz`ÃzaÄzbÅzcÆzdÇzeÈzfÉzgÊzhËziÌzjÍzkÎzlÏzmÐznÑzoÒzpÓzqÔzrÕzsÖzt×zuØzvÙzwÚzxÛzyÜzzÝz{Þz|ßz}àz~áz€âzãz‚äzƒåz„æz…çz†èz‡ézˆêz‰ëzŠìz‹ízŒîzïzŽðzñzòz‘óz’ôz“õz”öz•÷z–øz—ùz˜úz™ûzšüz›ýzœþzÿzžžzŸžz žz¡âðz¢âñz£âòz¤âóz¥âôz¦âõz§âöz¨â÷z©âøzªâùz«âúz¬âûz­âüz®âýz¯âþz°âÿz±ãz²ãz³ãz´ãzµãz¶ãz·ãz¸ãz¹ãzºã z»ã z¼ã z½ã z¾ã z¿ãzÀãzÁãzÂãzÃãzÄãzÅãzÆãzÇãzÈãzÉãzÊãzËãzÌãzÍãzÎãzÏãzÐãzÑã zÒã!zÓã"zÔã#zÕã$zÖã%z×ã&zØã'zÙã(zÚã)zÛã*zÜã+zÝã,zÞã-zßã.zàã/záã0zâã1zãã2zäã3zåã4zæã5zçã6zèã7zéã8zêã9zëã:zìã;zíãzðã?zñã@zòãAzóãBzôãCzõãDzöãEz÷ãFzøãGzùãHzúãIzûãJzüãKzýãLzþãM{@ž{Až{Bž{Cž{Dž{Ež{Fž {Gž {Hž {Iž {Jž {Kž{Lž{Mž{Nž{Ož{Pž{Qž{Rž{Sž{Tž{Už{Vž{Wž{Xž{Yž{Zž{[ž{\ž${]ž'{^ž.{_ž0{`ž4{až;{bž<{cž@{džM{ežP{fžR{gžS{hžT{ižV{jžY{kž]{lž_{mž`{nža{ožb{pže{qžn{ržo{sžr{tžt{užu{vžv{wžw{xžx{yžy{zžz{{ž{{|ž|{}ž}{~ž€{€ž{žƒ{‚ž„{ƒž…{„ž†{…ž‰{†žŠ{‡žŒ{ˆž{‰žŽ{Šž{‹ž{Œž‘{ž”{Žž•{ž–{ž—{‘ž˜{’ž™{“žš{”ž›{•žœ{–žž{—ž {˜ž¡{™ž¢{šž£{›ž¤{œž¥{ž§{žž¨{Ÿž©{ žª{¡ãN{¢ãO{£ãP{¤ãQ{¥ãR{¦ãS{§ãT{¨ãU{©ãV{ªãW{«ãX{¬ãY{­ãZ{®ã[{¯ã\{°ã]{±ã^{²ã_{³ã`{´ãa{µãb{¶ãc{·ãd{¸ãe{¹ãf{ºãg{»ãh{¼ãi{½ãj{¾ãk{¿ãl{Àãm{Áãn{Âão{Ããp{Äãq{Åãr{Æãs{Çãt{Èãu{Éãv{Êãw{Ëãx{Ìãy{Íãz{Îã{{Ïã|{Ðã}{Ñã~{Òã{Óã€{Ôã{Õã‚{Öãƒ{×ã„{Øã…{Ùã†{Úã‡{Ûãˆ{Üã‰{ÝãŠ{Þã‹{ßãŒ{àã{áãŽ{âã{ãã{äã‘{åã’{æã“{çã”{èã•{éã–{êã—{ëã˜{ìã™{íãš{îã›{ïãœ{ðã{ñãž{òãŸ{óã {ôã¡{õã¢{öã£{÷ã¤{øã¥{ùã¦{úã§{ûã¨{üã©{ýãª{þã«|@ž«|Až¬|Bž­|Cž®|Dž¯|Ež°|Fž±|Gž²|Hž³|Ižµ|Jž¶|Kž·|Lž¹|Mžº|Nž¼|Ož¿|PžÀ|QžÁ|RžÂ|SžÃ|TžÅ|UžÆ|VžÇ|WžÈ|XžÊ|YžË|ZžÌ|[žÐ|\žÒ|]žÓ|^žÕ|_žÖ|`ž×|ažÙ|bžÚ|cžÞ|džá|ežã|fžä|gžæ|hžè|ižë|jžì|kží|lžî|mžð|nžñ|ožò|pžó|qžô|ržõ|sžö|tž÷|užø|vžú|wžý|xžÿ|yŸ|zŸ|{Ÿ||Ÿ|}Ÿ|~Ÿ|€Ÿ|Ÿ|‚Ÿ|ƒŸ |„Ÿ |…Ÿ |†Ÿ|‡Ÿ|ˆŸ|‰Ÿ|ŠŸ|‹Ÿ|ŒŸ|Ÿ|ŽŸ|Ÿ|Ÿ|‘Ÿ|’Ÿ|“Ÿ!|”Ÿ#|•Ÿ$|–Ÿ%|—Ÿ&|˜Ÿ'|™Ÿ(|šŸ)|›Ÿ*|œŸ+|Ÿ-|žŸ.|ŸŸ0| Ÿ1|¡ã¬|¢ã­|£ã®|¤ã¯|¥ã°|¦ã±|§ã²|¨ã³|©ã´|ªãµ|«ã¶|¬ã·|­ã¸|®ã¹|¯ãº|°ã»|±ã¼|²ã½|³ã¾|´ã¿|µãÀ|¶ãÁ|·ãÂ|¸ãÃ|¹ãÄ|ºãÅ|»ãÆ|¼ãÇ|½ãÈ|¾ãÉ|¿ãÊ|ÀãË|ÁãÌ|ÂãÍ|ÃãÎ|ÄãÏ|ÅãÐ|ÆãÑ|ÇãÒ|ÈãÓ|ÉãÔ|ÊãÕ|ËãÖ|Ìã×|ÍãØ|ÎãÙ|ÏãÚ|ÐãÛ|ÑãÜ|ÒãÝ|ÓãÞ|Ôãß|Õãà|Öãá|×ãâ|Øãã|Ùãä|Úãå|Ûãæ|Üãç|Ýãè|Þãé|ßãê|àãë|áãì|âãí|ããî|äãï|åãð|æãñ|çãò|èãó|éãô|êãõ|ëãö|ìã÷|íãø|îãù|ïãú|ðãû|ñãü|òãý|óãþ|ôãÿ|õä|öä|÷ä|øä|ùä|úä|ûä|üä|ýä|þä }@Ÿ2}AŸ3}BŸ4}CŸ5}DŸ6}EŸ8}FŸ:}GŸ<}HŸ?}IŸ@}JŸA}KŸB}LŸC}MŸE}NŸF}OŸG}PŸH}QŸI}RŸJ}SŸK}TŸL}UŸM}VŸN}WŸO}XŸR}YŸS}ZŸT}[ŸU}\ŸV}]ŸW}^ŸX}_ŸY}`ŸZ}aŸ[}bŸ\}cŸ]}dŸ^}eŸ_}fŸ`}gŸa}hŸb}iŸc}jŸd}kŸe}lŸf}mŸg}nŸh}oŸi}pŸj}qŸk}rŸl}sŸm}tŸn}uŸo}vŸp}wŸq}xŸr}yŸs}zŸt}{Ÿu}|Ÿv}}Ÿw}~Ÿx}€Ÿy}Ÿz}‚Ÿ{}ƒŸ|}„Ÿ}}…Ÿ~}†Ÿ}‡Ÿ‚}ˆŸ}‰ŸŽ}ŠŸ}‹Ÿ}ŒŸ‘}Ÿ’}ŽŸ“}Ÿ”}Ÿ•}‘Ÿ–}’Ÿ—}“Ÿ˜}”Ÿœ}•Ÿ}–Ÿž}—Ÿ¡}˜Ÿ¢}™Ÿ£}šŸ¤}›Ÿ¥}œù,}ùy}žù•}Ÿùç} ùñ}¡ä }¢ä }£ä }¤ä }¥ä}¦ä}§ä}¨ä}©ä}ªä}«ä}¬ä}­ä}®ä}¯ä}°ä}±ä}²ä}³ä}´ä}µä}¶ä}·ä }¸ä!}¹ä"}ºä#}»ä$}¼ä%}½ä&}¾ä'}¿ä(}Àä)}Áä*}Âä+}Ãä,}Ää-}Åä.}Æä/}Çä0}Èä1}Éä2}Êä3}Ëä4}Ìä5}Íä6}Îä7}Ïä8}Ðä9}Ñä:}Òä;}Óä<}Ôä=}Õä>}Öä?}×ä@}ØäA}ÙäB}ÚäC}ÛäD}ÜäE}ÝäF}ÞäG}ßäH}àäI}áäJ}âäK}ãäL}ääM}åäN}æäO}çäP}èäQ}éäR}êäS}ëäT}ìäU}íäV}îäW}ïäX}ðäY}ñäZ}òä[}óä\}ôä]}õä^}öä_}÷ä`}øäa}ùäb}úäc}ûäd}üäe}ýäf}þäg~@ú ~Aú ~Bú~Cú~Dú~Eú~Fú~Gú~Hú~Iú ~Jú!~Kú#~Lú$~Mú'~Nú(~Oú)~Pè~Qè~Rè~Sè~Tè~Uè~Vè~Wè~Xè~Yè~Zè~[è ~\è!~]è"~^è#~_è$~`è%~aè&~bè'~cè(~dè)~eè*~fè+~gè,~hè-~iè.~jè/~kè0~lè1~mè2~nè3~oè4~pè5~qè6~rè7~sè8~tè9~uè:~vè;~wè<~xè=~yè>~zè?~{è@~|èA~}èB~~èC~€èD~èE~‚èF~ƒèG~„èH~…èI~†èJ~‡èK~ˆèL~‰èM~ŠèN~‹èO~ŒèP~èQ~ŽèR~èS~èT~‘èU~’èV~“èW~”èX~•èY~–èZ~—è[~˜è\~™è]~šè^~›è_~œè`~èa~žèb~Ÿèc~ èd~¡äh~¢äi~£äj~¤äk~¥äl~¦äm~§än~¨äo~©äp~ªäq~«är~¬äs~­ät~®äu~¯äv~°äw~±äx~²äy~³äz~´ä{~µä|~¶ä}~·ä~~¸ä~¹ä€~ºä~»ä‚~¼äƒ~½ä„~¾ä…~¿ä†~Àä‡~Áäˆ~Âä‰~ÃäŠ~Ää‹~ÅäŒ~Æä~ÇäŽ~Èä~Éä~Êä‘~Ëä’~Ìä“~Íä”~Îä•~Ïä–~Ðä—~Ñä˜~Òä™~Óäš~Ôä›~Õäœ~Öä~×äž~ØäŸ~Ùä ~Úä¡~Ûä¢~Üä£~Ýä¤~Þä¥~ßä¦~àä§~áä¨~âä©~ãäª~ää«~åä¬~æä­~çä®~èä¯~éä°~êä±~ëä²~ìä³~íä´~îäµ~ïä¶~ðä·~ñä¸~òä¹~óäº~ôä»~õä¼~öä½~÷ä¾~øä¿~ùäÀ~úäÁ~ûäÂ~üäÃ~ýäÄ~þäÅscreen-4.9.1/utf8encodings/cc0000664000175000017500000000010414467014146014544 0ustar alexalexScreenI2UTF8Ì ISO-8859-5¡€¬ ®€ïOð!ñQ€ü\ý§þ^ÿ_screen-4.9.1/utf8encodings/c40000664000175000017500000000034414467014146014473 0ustar alexalexScreenI2UTF8Ä2ISO-8859-4¡¢8£V¥(¦;©`ª«"¬f®}±²Û³Wµ)¶<·ǹaº»#¼g½J¾~¿KÀÇ.È ÊÌÏ*ÐÑEÒLÓ6ÙrÝhÞjàç/è êìï+ðñFòMó7ùsýiþkÿÙscreen-4.9.1/utf8encodings/010000664000175000017500000007216014467014146014412 0ustar alexalexScreenI2UTF8GB 2312-80!!0!"0!#0!$0û!%É!&Ç!'¨!(0!)0!* !+ÿ^!, !- &!. !/ !0 !1 !20!30!40!50 !60 !70 !80 !90 !:0!;0!<0!=0!>0!?0!@±!A×!B÷!C"6!D"'!E"(!F"!G"!H"*!I")!J"!K"7!L"!M"¥!N"%!O" !P#!Q"™!R"+!S".!T"a!U"L!V"H!W"=!X"!Y"`!Z"n!["o!\"d!]"e!^"!_"5!`"4!a&B!b&@!c°!d 2!e 3!f!!gÿ!h¤!iÿà!jÿá!k 0!l§!m!!n&!o&!p%Ë!q%Ï!r%Î!s%Ç!t%Æ!u%¡!v% !w%³!x%²!y ;!z!’!{!!|!‘!}!“!~0"1$ˆ"2$‰"3$Š"4$‹"5$Œ"6$"7$Ž"8$"9$":$‘";$’"<$“"=$”">$•"?$–"@$—"A$˜"B$™"C$š"D$›"E$t"F$u"G$v"H$w"I$x"J$y"K$z"L${"M$|"N$}"O$~"P$"Q$€"R$"S$‚"T$ƒ"U$„"V$…"W$†"X$‡"Y$`"Z$a"[$b"\$c"]$d"^$e"_$f"`$g"a$h"b$i"e2 "f2!"g2""h2#"i2$"j2%"k2&"l2'"m2("n2)"q!`"r!a"s!b"t!c"u!d"v!e"w!f"x!g"y!h"z!i"{!j"|!k#!ÿ#"ÿ##ÿ#$ÿå#%ÿ#&ÿ#'ÿ#(ÿ#)ÿ #*ÿ #+ÿ #,ÿ #-ÿ #.ÿ#/ÿ#0ÿ#1ÿ#2ÿ#3ÿ#4ÿ#5ÿ#6ÿ#7ÿ#8ÿ#9ÿ#:ÿ#;ÿ#<ÿ#=ÿ#>ÿ#?ÿ#@ÿ #Aÿ!#Bÿ"#Cÿ##Dÿ$#Eÿ%#Fÿ&#Gÿ'#Hÿ(#Iÿ)#Jÿ*#Kÿ+#Lÿ,#Mÿ-#Nÿ.#Oÿ/#Pÿ0#Qÿ1#Rÿ2#Sÿ3#Tÿ4#Uÿ5#Vÿ6#Wÿ7#Xÿ8#Yÿ9#Zÿ:#[ÿ;#\ÿ<#]ÿ=#^ÿ>#_ÿ?#`ÿ@#aÿA#bÿB#cÿC#dÿD#eÿE#fÿF#gÿG#hÿH#iÿI#jÿJ#kÿK#lÿL#mÿM#nÿN#oÿO#pÿP#qÿQ#rÿR#sÿS#tÿT#uÿU#vÿV#wÿW#xÿX#yÿY#zÿZ#{ÿ[#|ÿ\#}ÿ]#~ÿã$!0A$"0B$#0C$$0D$%0E$&0F$'0G$(0H$)0I$*0J$+0K$,0L$-0M$.0N$/0O$00P$10Q$20R$30S$40T$50U$60V$70W$80X$90Y$:0Z$;0[$<0\$=0]$>0^$?0_$@0`$A0a$B0b$C0c$D0d$E0e$F0f$G0g$H0h$I0i$J0j$K0k$L0l$M0m$N0n$O0o$P0p$Q0q$R0r$S0s$T0t$U0u$V0v$W0w$X0x$Y0y$Z0z$[0{$\0|$]0}$^0~$_0$`0€$a0$b0‚$c0ƒ$d0„$e0…$f0†$g0‡$h0ˆ$i0‰$j0Š$k0‹$l0Œ$m0$n0Ž$o0$p0$q0‘$r0’$s0“%!0¡%"0¢%#0£%$0¤%%0¥%&0¦%'0§%(0¨%)0©%*0ª%+0«%,0¬%-0­%.0®%/0¯%00°%10±%20²%30³%40´%50µ%60¶%70·%80¸%90¹%:0º%;0»%<0¼%=0½%>0¾%?0¿%@0À%A0Á%B0Â%C0Ã%D0Ä%E0Å%F0Æ%G0Ç%H0È%I0É%J0Ê%K0Ë%L0Ì%M0Í%N0Î%O0Ï%P0Ð%Q0Ñ%R0Ò%S0Ó%T0Ô%U0Õ%V0Ö%W0×%X0Ø%Y0Ù%Z0Ú%[0Û%\0Ü%]0Ý%^0Þ%_0ß%`0à%a0á%b0â%c0ã%d0ä%e0å%f0æ%g0ç%h0è%i0é%j0ê%k0ë%l0ì%m0í%n0î%o0ï%p0ð%q0ñ%r0ò%s0ó%t0ô%u0õ%v0ö&!‘&"’&#“&$”&%•&&–&'—&(˜&)™&*š&+›&,œ&-&.ž&/Ÿ&0 &1¡&2£&3¤&4¥&5¦&6§&7¨&8©&A±&B²&C³&D´&Eµ&F¶&G·&H¸&I¹&Jº&K»&L¼&M½&N¾&O¿&PÀ&QÁ&RÃ&SÄ&TÅ&UÆ&VÇ&WÈ&XÉ'!'"'#'$'%'&'''(')'*'+','-'.'/'0'1'2 '3!'4"'5#'6$'7%'8&'9'':(';)'<*'=+'>,'?-'@.'A/'Q0'R1'S2'T3'U4'V5'WQ'X6'Y7'Z8'[9'\:'];'^<'_='`>'a?'b@'cA'dB'eC'fD'gE'hF'iG'jH'kI'lJ'mK'nL'oM'pN'qO(!("á(#Î($à(%(&é('((è()+(*í(+Ð(,ì(-M(.ó(/Ò(0ò(1k(2ú(3Ô(4ù(5Ö(6Ø(7Ú(8Ü(9ü(:ê(E1(F1(G1(H1(I1 (J1 (K1 (L1 (M1 (N1(O1(P1(Q1(R1(S1(T1(U1(V1(W1(X1(Y1(Z1([1(\1(]1(^1(_1(`1 (a1!(b1"(c1#(d1$(e1%(f1&(g1'(h1((i1))$%)%%)&%)'%)(%))%)*%)+%),%)-% ).% )/% )0% )1% )2%)3%)4%)5%)6%)7%)8%)9%):%);%)<%)=%)>%)?%)@%)A%)B%)C%)D% )E%!)F%")G%#)H%$)I%%)J%&)K%')L%()M%))N%*)O%+)P%,)Q%-)R%.)S%/)T%0)U%1)V%2)W%3)X%4)Y%5)Z%6)[%7)\%8)]%9)^%:)_%;)`%<)a%=)b%>)c%?)d%@)e%A)f%B)g%C)h%D)i%E)j%F)k%G)l%H)m%I)n%J)o%K0!UJ0"–?0#WÃ0$c(0%TÎ0&U 0'TÀ0(v‘0)vL0*…<0+wî0,‚~0-x0.r10/–˜00—01l(02[‰03Oú04c 05f—06\¸07€ú08hH09€®0:f0;vÎ0q¬0?ñ0@ˆ„0AP²0BYe0CaÊ0Do³0E‚­0FcL0GbR0HSí0IT'0J{0KQk0Lu¤0M]ô0NbÔ0OË0P—v0QbŠ0R€0SW]0T—80Ub0Vr80Wv}0XgÏ0Yv~0ZdF0[Op0\%0]bÜ0^z0_e‘0`sí0ad,0bbs0c‚,0d˜0eg0frH0gbn0hbÌ0iO40jtã0kSJ0lRž0m~Ê0n¦0o^.0ph†0qiœ0r€0s~Ñ0thÒ0uxÅ0v†Œ0w•Q0xP0yŒ$0z‚Þ0{€Þ0|S0}‰0~Re1!…„1"–ù1#OÝ1$X!1%™q1&[1'b±1(b¥1)f´1*Œy1+œ1,r1-go1.x‘1/`²10SQ11S12ˆ13€Ì1415”¡16P 17rÈ18Y19`ë1:q1;ˆ«1g,1?{(1@])1A~÷1Bu-1Clõ1DŽf1Eø1F<1GŸ;1HkÔ1I‘1J{1K_|1Lx§1M„Ö1N…=1OkÕ1PkÙ1QkÖ1R^1S^‡1Tuù1U•í1Ve]1W_ 1X_Å1YŸ1ZXÁ1[Â1\1]–[1^—­1_¹1`1a,1bbA1cO¿1dSØ1eS^1f¨1g©1h«1iM1jh1k_j1l˜1mˆh1nœÖ1oa‹1pR+1qv*1r_l1seŒ1toÒ1unè1v[¾1wdH1xQu1yQ°1zgÄ1{N1|yÉ1}™|1~p³2!uÅ2"^v2#s»2$ƒà2%d­2&bè2'”µ2(lâ2)SZ2*RÃ2+d2,”Â2-{”2.O/2/^20‚62122Š23n$24lÊ25šs26cU27S\28Tú29ˆe2:Wà2;N 2<^2=ke2>|?2?è2@`2Adæ2Bs2CˆÁ2DgP2EbM2F"2Gwl2HŽ)2I‘Ç2J_i2KƒÜ2L…!2M™2NSÂ2O†•2Pk‹2Q`í2R`è2Sp2T‚Í2U‚12VNÓ2Wl§2X…Ï2YdÍ2Z|Ù2[iý2\fù2]ƒI2^S•2_{V2`O§2aQŒ2bmK2c\B2dŽm2ecÒ2fSÉ2gƒ,2hƒ62igå2jx´2kd=2l[ß2m\”2n]î2o‹ç2pbÆ2qgô2rŒz2sd2tcº2u‡I2v™‹2wŒ2x 2y”ò2zN§2{–2|˜¤2}f 2~s3!W:3"\3#^83$•3%P3&€ 3'S‚3(e^3)uE3*U13+P!3,…3-b„3.”ž3/g30V231on32]â33T534p’35f36bo37d¤38c£39_{3:oˆ3;ô3<ã3=°3>\3?fh3@_ñ3Al‰3B–H3C3Dˆl3Ed‘3Fyð3GWÎ3HjY3Ib3JTH3KNX3Lz 3M`é3No„3O‹Ú3Pb3Q3Rš‹3Syä3TT3Uuô3Vc3WS3Xl`3Yß3Z_3[šp3\€;3]Ÿ3^Oˆ3_\:3`d3aÅ3be¥3cp½3dQE3eQ²3f†k3g]3h[ 3ib½3j‘l3kut3lŽ 3mz 3na3o{y3pNÇ3q~ø3rw…3sN3tí3uR3vQú3wjq3xS¨3yއ3z•3{–Ï3|nÁ3}–d3~iZ4!x@4"P¨4#w×4$d4%‰æ4&Y4'cã4(]Ý4)z4*i=4+O 4,‚94-U˜4.N24/u®40z—41^b42^Š43•ï44R45T946pŠ47cv48•$49W‚4:f%4;i?4<‘‡4=U4>mó4?~¯4@ˆ"4Ab34B~ð4Cuµ4Dƒ(4ExÁ4F–Ì4Gž4HaH4It÷4J‹Í4Kkd4LR:4MP4Nk!4O€j4P„q4QVñ4RS4SNÎ4TN4UQÑ4V|—4W‘‹4X|4YOÃ4ZŽ4[{á4\zœ4]dg4^]4_P¬4`4av4b|¹4cmì4dà4egQ4f[X4g[ø4hxË4id®4jd4kcª4lc+4m•4nd-4o¾4p{T4qv)4rbS4sY'4tTF4uky4vP£4wb44x^&4yk†4zNã4{74|ˆ‹4}_…4~.5!` 5"€=5#bÅ5$N95%SU5&ø5'c¸5(€Æ5)eæ5*l.5+OF5,`î5-má5.‹Þ5/_950†Ë51_S52c!53QZ54ƒa55hc56R57cc58ŽH59P5:\›5;yw5<[ü5=R05>z;5?`¼5@S5Av×5B_·5C_—5Dv„5EŽl5Fpo5Gv{5H{I5Iwª5JQó5K“5LX$5MON5Nnô5Oê5PeL5Q{5RrÄ5Sm¤5Tß5UZá5Vbµ5W^•5XW05Y„‚5Z{,5[^5\_5]5^5_˜ 5`c‚5anÇ5bx˜5cp¹5dQx5e—[5fW«5gu55hOC5iu85j^—5k`æ5lY`5mmÀ5nk¿5ox‰5pSü5q–Õ5rQË5sR5tc‰5uT 5v”“5wŒ5xÌ5yr95zxŸ5{‡v5|í5}Œ 5~Sà6!N6"vï6#Sî6$”‰6%˜v6&Ÿ6'•-6([š6)‹¢6*N"6+N6,Q¬6-„c6.aÂ6/R¨60h 61O—62`k63Q»64m65Q\66b–67e—68–a69ŒF6:6;uØ6<ý6=wc6>kÒ6?rŠ6@rì6A‹û6BX56Cwy6DL6Eg\6F•@6G€š6H^¦6In!6JY’6Kzï6Lwí6M•;6Nkµ6Oe­6P6QX6RQQ6S–6T[ù6UX©6VT(6WŽr6Xef6Y˜6ZVä6[”6\vþ6]A6^c‡6_TÆ6`Y6aY:6bW›6c޲6dg56eú6f‚56gRA6h`ð6iX6j†þ6k\è6lžE6mOÄ6n˜6o‹¹6pZ%6q`v6rS„6sb|6tO6u‘6v™6w`i6x€ 6yQ?6z€36{\6|™u6}m16~NŒ7!07"SÑ7#Z7${O7%O7&NO7'–7(lÕ7)sÐ7*…é7+^7,uj7-û7.j 7/wþ70”’71~A72Qá73pæ74SÍ75Ô76ƒ77)78r¯79™m7:lÛ7;WJ7<‚³7=e¹7>€ª7?b?7@–27AY¨7BNÿ7C‹¿7D~º7Ee>7Fƒò7G—^7HUa7I˜Þ7J€¥7KS*7L‹ý7MT 7N€º7O^Ÿ7Pl¸7Q97R‚¬7S‘Z7TT)7Ul7VR7W~·7XW_7Yq7Zl~7[|‰7\YK7]Ný7^_ÿ7_a$7`|ª7aN07b\7cg«7d‡7e\ð7f• 7g˜Î7hu¯7ipý7j"7kQ¯7l7m‹½7nYI7oQä7pO[7qT&7rY+7sew7t€¤7u[u7vbv7wbÂ7x7y^E7zl7{{&7|O7}OØ7~g 8!mn8"mª8#y8$ˆ±8%_8&u+8'bš8(…8)Oï8*‘Ü8+e§8,/8-Q8.^œ8/P80t81Ro82‰†83K84Y 85P…86NØ87–88r689y8:8;[Ì8<‹£8=–D8>Y‡8?8@T8AVv8BV8C‹å8De98Ei‚8F”™8GvÖ8Hn‰8I^r8Ju8KgF8LgÑ8Mzÿ8N€8Ov8Pa8QyÆ8Reb8Sc8TQˆ8UR8V”¢8W88X€›8Y~²8Z\—8[n/8\g`8]{Ù8^v‹8_šØ8`8a”8b|Õ8cd8d•P8ez?8fTJ8gTå8hkL8id8jb8kž=8l€ó8mu™8nRr8o—i8p„[8qh<8r†ä8s–8t–”8u”ì8vN*8wT8x~Ù8yh98zß8{€8|fô8}^š8~¹9!WÂ9"€?9#h—9$]å9%e;9&RŸ9'`m9(Ÿš9)O›9*ެ9+Ql9,[«9-_9.]é9/l^90bñ91!92Qq93”©94Rþ95lŸ96‚ß97r×98W¢99g„9:-9;Y9<œ9=ƒÇ9>T•9?{9@O09Al½9B[d9CYÑ9DŸ9ESä9F†Ê9Gš¨9HŒ79I€¡9JeE9K˜~9LVú9M–Ç9NR.9OtÜ9PRP9Q[á9Rc9S‰9TNV9UbÐ9V`*9Whú9XQs9Y[˜9ZQ 9[‰Â9\{¡9]™†9^P9_`ï9`pL9a/9bQI9c^9d9etp9f‰Ä9gW-9hxE9i_R9jŸŸ9k•ú9lh9m›<9n‹á9ovx9phB9qgÜ9rê9s59tR=9uŠ9vnÚ9whÍ9x•9yí9zVý9{gœ9|ˆù9}Ç9~TÈ:!š¸:"[i:#mw:$l&:%N¥:&[³:'š‡:(‘c:)a¨:*¯:+—é:,T+:-mµ:.[Ò:/Qý:0UŠ:1U:2ð:3d¼:4cM:5eñ:6a¾:7`:8q :9lW::lI:;Y/:XÕ:?VŽ:@Œj:Akë:BÝ:CY}:D€:ES÷:Fmi:GTu:HU:Iƒw:JƒÏ:Kh8:Ly¾:MTŒ:NOU:OT:PvÒ:QŒ‰:R–:Sl³:Tm¸:Uk:V‰:Wžd:X::YV?:ZžÑ:[uÕ:\_ˆ:]rà:^`h:_Tü:`N¨:aj*:bˆa:c`R:dp:eTÄ:fpØ:g†y:hž?:im*:j[:k_:l~¢:mU‰:nO¯:os4:pT<:qSš:rP:sT:tT|:uNN:v_ý:wtZ:xXö:y„k:z€á:{‡t:|rÐ:}|Ê:~nV;!_';"†N;#U,;$b¤;%N’;&lª;'b7;(‚±;)T×;*SN;+s>;,nÑ;-u;;.R;/S;0‹Ý;1iÐ;2_Š;3`;4mî;5WO;6k";7s¯;8hS;9Ø;:;;cb;<`£;=U$;>uê;?Œb;@q;Am£;B[¦;C^{;DƒR;EaL;FžÄ;Gxú;H‡W;I|';Jv‡;KQð;L`ö;MqL;NfC;O^L;P`M;QŒ;Rpp;Sc%;T‰;U_½;V`b;W†Ô;XVÞ;YkÁ;Z`”;[ag;\SI;]`à;^ff;_?;`yý;aO;bpé;clG;d‹³;e‹ò;f~Ø;gƒd;hf;iZZ;j›B;kmQ;lm÷;mŒA;nm;;oO;ppk;qƒ·;rb;s`Ñ;t— ;u';vyx;wQû;xW>;yWú;zg:;{ux;|z=;}yï;~{•[cš„=?Z=@V¼=Ad=B”ð=Cwë=DO¥=E=Frá=G‰Ò=H™z=I4=J~Þ=KR=LeY=M‘u=N=Oƒ=PSë=Qz–=Rcí=Sc¥=Tv†=Uyø=VˆW=W–6=Xb*=YR«=Z‚‚=[hT=\gp=]cw=^wk=_zí=`m=a~Ó=b‰ã=cYÐ=db=e…É=f‚¥=guL=hP=iNË=ju¥=k‹ë=l\J=m]þ=n{K=oe¤=p‘Ñ=qNÊ=rm%=s‰_=t}'=u•&=vNÅ=wŒ(=xÛ=y—s=zfK={y=|Ñ=}pì=~mx>!\=>"R²>#ƒF>$Qb>%ƒ>&w[>'fv>(œ¸>)N¬>*`Ê>+|¾>,|³>-~Ï>.N•>/‹f>0fo>1˜ˆ>2—Y>3Xƒ>4el>5•\>6_„>7uÉ>8—V>9zß>:zÞ>;QÀ>=z˜>>cê>?zv>@~ >As–>B—í>CNE>Dpx>EN]>F‘R>GS©>HeQ>Ieç>Jü>K‚>LTŽ>M\1>Nuš>O— >PbØ>QrÙ>Ru½>S\E>Tšy>UƒÊ>V\@>WT€>Xwé>YN>>Zl®>[€Z>\bÒ>]cn>^]è>_Qw>`Ý>aŽ>b•/>cOñ>dSå>e`ç>fp¬>gRg>hcP>ižC>jZ>kP&>lw7>mSw>n~â>od…>pe+>qb‰>rc˜>sP>tr5>u‰É>vQ³>w‹À>x~Ý>yWG>zƒÌ>{”§>|Q›>}T>~\û?!OÊ?"zã?#mZ?$á?%š?&U€?'T–?(Sa?)T¯?*_?+cé?,iw?-Qï?.ah?/R ?0X*?1RØ?2WN?3x ?4w ?5^·?6aw?7|à?8b[?9b—?:N¢?;p•?<€?=b÷?>pä??—`?@Ww?A‚Û?Bgï?Chõ?DxÕ?E˜—?FyÑ?GXó?HT³?ISï?Jn4?KQK?LR;?M[¢?N‹þ?O€¯?PUC?QW¦?R`s?SWQ?TT-?Uzz?V`P?W[T?Xc§?Yb ?ZSã?[bc?\[Ç?]g¯?^Tí?_zŸ?`‚æ?a‘w?b^“?cˆä?dY8?eW®?fc?gè?h€ï?iWW?j{w?kO©?l_ë?m[½?nk>?oS!?p{P?qrÂ?rhF?swÿ?tw6?ue÷?vQµ?wN?xvÔ?y\¿?zz¥?{„u?|YN?}›A?~P€@!™ˆ@"a'@#nƒ@$Wd@%f@&cF@'Vð@(bì@)bi@*^Ó@+–@,Wƒ@-bÉ@.U‡@/‡!@0J@1£@2Uf@3ƒ±@4ge@5V@6„Ý@7Zj@8h@9bæ@:{î@;–@Œ0@?cý@@‰È@AaÒ@B@CpÂ@Dnå@Et@Fi”@Grü@H^Ê@IÎ@Jg@Kmj@Lc^@MR³@Nrb@O€@POl@QYå@R‘j@SpÙ@Tm@URÒ@VNP@W–÷@X•m@Y…~@ZxÊ@[}/@\Q!@]W’@^dÂ@_€‹@`|{@alê@bhñ@ci^@dQ·@eS˜@fh¨@gr@hžÎ@i{ñ@jrø@ky»@lo@mt@ngN@o‘Ì@pœ¤@qy<@rƒ‰@sƒT@tT@uh@vN=@wS‰@xR±@yx>@zS†@{R)@|Pˆ@}O‹@~OÐA!uâA"zËA#|’A$l¥A%–¶A&R›A'tƒA(TéA)OéA*€TA+ƒ²A,ÞA-•pA.^ÉA/`A0mŸA1^A2e[A38A4”þA5`KA6p¼A7~ÃA8|®A9QÉA:hA;|±A<‚oA=N$A>†A?‘ÏA@f~AAN®ABŒACd©AD€JAEPÚAFu—AGqÎAH[åAI½AJofAKN†ALd‚AM•cAN^ÖAOe™APRAQˆÂARpÈASR£ATsAUt3AVg—AWx÷AX—AYN4AZ»A[œÞA\mËA]QÛA^AA_TA`bÎAas²AbƒñAc–öAdŸ„Ae”ÃAfO6AgšAhQÌAipuAj–uAk\­Al˜†AmSæAnNäAonœApt Aqi´ArxkAs™AtuYAuRAvv$AwmAAxgóAyQmAzŸ™A{€KA|T™A}{b.B?štB@TBA”ÝBBO£BCeÅBD\eBE\aBFBG†QBHl/BI_‹BJs‡BKnäBL~ÿBM\æBNcBO[jBPnæBQSuBRNqBSc BTueBUb¡BVnBWO&BXNÑBYl¦BZ~¶B[‹ºB\„B]‡ºB^WB_;B`•#Ba{©Bbš¡BcˆøBd„=BemBfš†Bg~ÜBhYˆBiž»Bjs›BkxBl†‚BmšlBnš‚BoVBpTBqWËBrNpBsž¦BtSVBuÈBv Bww’Bx™’By†îBznáB{…B|füB}abB~o+C!Œ)C"‚’C#ƒ+C$vòC%lC&_ÙC'ƒ½C(s+C)ƒC*•C+kÛC,wÛC-”ÆC.SoC/ƒC0Q’C1^=C2ŒŒC38C4NHC5s«C6gšC7h…C8‘vC9— C:qdC;l¡C•AC?kÏC@ŽCAf'CB[ÐCCY¹CDZšCE•èCF•÷CGNìCH„ CI„™CJj¬CKvßCL•0CMsCNh¦CO[_CPw/CQ‘šCR—aCS|ÜCT÷CUŒCV_%CW|sCXyØCY‰ÅCZlÌC[‡C\[ÆC]^BC^hÉC_w C`~õCaQ•CbQMCcRÉCdZ)CeCf—bCg‚×ChcÏCiw„Cj…ÐCkyÒCln:Cm^™CnY™Co…CppmCqlCrb¿Csv¿CteOCu`¯Cv•ýCwfCx‡ŸCyž#Cz”íC{T C|T}C}Œ,C~dxD!dyD"†D#j!D$œD%xèD&diD'›TD(b¹D)g+D*ƒ«D+X¨D,žØD-l«D.o D/[ÞD0–LD1Œ D2r_D3gÐD4bÇD5raD6N©D7YÆD8kÍD9X“D:f®D;^UDg(D?vîD@wfDArgDBzFDCbÿDDTêDETPDF” DG£DHZDI~³DJlDKNCDLYvDM€DNYHDOSWDPu7DQ–¾DRVÊDSc DTDU`|DV•ùDWmÖDXTbDY™DZQ…D[ZéD\€ýD]Y®D^—D_P*D`låDa\UjE?´E@r,EA^EB`ECt6EDbÍEEc’EFrLEG_˜EHnCEIm>EJeEKoXELvØEMxÐENvüEOuTEPR$EQSÛERNSES^žETeÁEU€*EV€ÖEWb›EXT†EYR(EZp®E[ˆE\ÑE]láE^TxE_€ÚE`WùEaˆôEbTEc–jEd‘MEeOiEfl›EgU·EhvÆEix0Ejb¨EkpùEloŽEm_mEn„ìEohÚEpx|Eq{÷Er¨Esg EtžOEucgEvx°EwWoExxEy—9EzbyE{b«E|RˆE}t5E~k×F!UdF">F#u²F$v®F%S9F&uÞF'PûF(\AF)‹lF*{ÇF+POF,rGF-š—F.˜ØF/oF0tâF1yhF2d‡F3w¥F4büF5˜‘F6+F7TÁF8€XF9NRF:WjF;‚ùF<„ F=^sF>QíF?töF@‹ÄFA\OFBWaFClüFD˜‡FEZFFFx4FG›DFHëFI|•FJRVFKbQFL”úFMNÆFNƒ†FO„aFPƒéFQ„²FRWÔFSg4FTWFUfnFVmfFWŒ1FXfÝFYpFZgF[k:F\hF]bF^Y»F_NF`QÄFaoFbgÒFclFdQvFehËFfYGFgkgFhufFi]FjFkŸPFle×FmyHFnyAFoš‘FpwFq\‚FrN^FsOFtT/FuYQFvx FwVhFxlFyÄFz_F{l}F|lãF}‹«F~cG!`pG"m=G#ruG$bfG%”ŽG&”ÅG'SCG(ÁG){~G*NßG+Œ&G,N~G-žÔG.”±G/”³G0RMG1o\G2cG3mEG4Œ4G5XG6]LG7k G8kIG9gªG:T[G;TG<ŒG=X™G>…7G?_:G@b¢GAjGGB•9GCerGD`„GEheGFw§GGNTGHO¨GI]çGJ—˜GKd¬GLØGM\íGNOÏGOzGPRGQƒGRNGS`/GTzƒGU”¦GVOµGWN²GXyæGYt4GZRäG[‚¹G\dÒG]y½G^[ÝG_lG`—RGa{Gbl"GcP>GdSGenGfdÎGgftGhl0Gi`ÅGj˜wGk‹÷Gl^†GmtgÓH?täH@XäHAeHBV·HC‹©HD™vHEbpHF~ÕHG`ùHHpíHIXìHJNÁHKNºHL_ÍHM—çHNNûHO‹¤HPRHQYŠHR~«HSbTHTNÍHUeåHVbHWƒ8HX„ÉHYƒcHZ‡H[q”H\n¶H][¹H^~ÒH_Q—H`cÉHagÔHb€‰Hcƒ9HdˆHeQHf[zHgY‚Hh±HiNsHjl]HkQeHl‰%HmoHn–.Ho…JHpt^Hq•Hr•ðHsm¦Ht‚åHu_1Hvd’HwmHx„(HynHzœÃH{X^H|[H}N H~SÁI!OI"ecI#hQI$UÓI%N'I&dI'ššI(bkI)ZÂI*t_I+‚rI,m©I-hîI.PçI/ƒŽI0xI1g@I2R9I3l™I4~±I5P»I6UeI7q^I8{[I9fRI:sÊI;‚ëIR I?q}I@ˆkIA•êIB–UICdÅIDaIE³IFU„IGlUIHbGII.IJX’IKO$ILUFIMOINfLION IP\IQˆóIRh¢IScNITz IUpçIV‚IWRúIX—öIY\IZTèI[µI\~ÍI]YbI^JI_†ÇI`‚ Ia‚ IbfIcdDId\IeaQIfm‰Igy>Ih‹¾Iix7Iju3IkT{IlO8ImŽ«InmñIoZ Ip~ÅIqy^IrlˆIs[¡ItZvIuuIv€¾IwaNIxnIyXðIzuI{u%I|rrI}SGI~~óJ!wJ"vÛJ#RiJ$€ÜJ%W#J&^J'Y1J(rîJ)e½J*nJ+‹×J,\8J-†qJ.SAJ/wóJ0bþJ1eöJ2NÀJ3˜ßJ4†€J5[žJ6‹ÆJ7SòJ8wâJ9OJ:\NJ;švJy:J?XëJ@NJAgÿJBN‹JCbíJDŠ“JEJFR¿JGf/JHUÜJIVlJJJKNÕJLOJM‘ÊJN™pJOlJP^JQ`CJR[¤JS‰ÆJT‹ÕJUe6JVbKJW™–JX[ˆJY[ÿJZcˆJ[U.J\S×J]v&J^Q}J_…,J`g¢Jah³JbkŠJcb’Jd“JeSÔJf‚JgmÑJhuJiNfJjNJk[pJlqŸJm…¯Jnf‘JofÙJprJq‡JržÍJsŸ Jt\^Jug/JvðJwhJxg_Jyb JzzÖJ{X…J|^¶J}epJ~o1K!`UK"R7K#€ K$dTK%ˆpK&u)K'^K(hK)bôK*—K+SÌK,r=K-ŒK.l4K/waK0zK1T.K2w¬K3˜zK4‚K5‹ôK6xUK7gK8pÁK9e¯K:d•K;V6K<`K=yÁK>SøK?NK@k{KA€†KB[úKCUãKDVÛKEO:KFOSùL?p­L@ldLAXXLBd*LCXLDhàLE›LFULG|ÖLHPLIŽºLJmÌLKŸLLpëLMcLNm›LOnÔLP~æLQ„LRhCLSLTmØLU–vLV‹¨LWYWLXryLY…äLZ~L[u¼L\ŠŠL]h¯L^RTL_Ž"L`•LacÐLb˜˜LcŽDLdU|LeOSLffÿLgVLh`ÕLim•LjRCLk\ILlY)LmmûLnXkLou0LpuLq`lLr‚LsFLtcLugaLvâLww:LxóLy4Lz”ÁL{^L|S…L}T,L~pÃM!l@M"^÷M#P\M$N­M%^­M&c:M'‚GM(M)hPM*‘nM+w³M,T M-”ÜM._dM/zåM0hvM1cEM2{RM3~ßM4uÛM5PwM6b•M7Y4M8M9QøM:yÃM;zMM?m‚M@\`MAWMBTMCQTMDnMMEVâMFc¨MG˜“MHMI‡MJ‰*MKMLTMM\oMNÀMObÖMPbXMQ1MRž5MS–@MTšnMUš|MVi-MWY¥MXbÓMYU>MZcM[TÇM\†ÙM]mN3~¬N4g*N5…N6TsN7uON8€ÃN9U‚N:›ON;OMN\ N?apN@SkNAvNBn)NC†ŠNDe‡NE•ûNF~¹NGT;NHz3NI} NJ•îNKUáNLÁNMtîNNcNO‡NPm¡NQzNRbNSe¡NTSgNUcáNVlƒNW]ëNXT\NY”¨NZNLN[laN\‹ìN]\KN^eàN_‚œN`h§NaT>NbT4NckËNdkfNeN”NfcBNgSHNh‚NiO NjO®NkW^Nlb Nm–þNnfdNoriNpRÿNqR¡Nr`ŸNs‹ïNtfNuq™NvgNw‰NxxRNywýNzfpN{V;N|T8N}•!N~rzO!zO"`oO#^ O$`‰O%O&YO'`ÜO(q„O)pïO*nªO+lPO,r€O-j„O.ˆ­O/^-O0N`O1Z³O2UœO3”ãO4mO5|ûO6–™O7bO8~ÆO9wŽO:†~O;S#O<—O=–O>f‡O?\áO@O OAríOBN OCS¦ODYOETOFc€OG•(OHQHOINÙOJœœOK~¤OLT¸OM$ONˆTOO‚7OP•òOQmŽOR_&OSZÌOTf>OU–iOVs°OWs.OXS¿OYzOZ™…O[¡O\[ªO]–wO^–PO_~¿O`vøOaS¢Ob•vOc™™Od{±Oe‰DOfnXOgNaOhÔOiyeOj‹æOk`óOlTÍOmN«On˜yOo]÷OpjaOqPÏOrTOsŒaOt„'Oux]Ov—OwRJOxTîOyV£Oz•O{mˆO|[µO}mÆO~fSP!\P"[]P#h!P$€–P%UxP&{P'eHP(iTP)N›P*kGP+‡NP,—‹P-SOP.cP/d:P0ªP1eœP2€ÁP3ŒP4Q™P5h°P6SxP7‡ùP8aÈP9lÄP:lûP;Œ"P<\QP=…ªP>‚¯P?• P@k#PA›PBe°PC_ûPD_ÃPEOáPFˆEPGfPHePIs)PJ`úPKQtPLRPMW‹PN_bPO¢PPˆLPQ‘’PR^xPSgOPT`'PUYÓPVQDPWQöPX€øPYSPZlyP[–ÄP\qŠP]OP^OîP_žP`g=PaUÅPb•PcyÀPdˆ–Pe~ãPfXŸPgb Ph—Pi†ZPjVPk˜{Pl_Pm‹¸Pn„ÄPo‘WPpSÙPqeíPr^Psu\Pt`dPu}nPvZPw~êPx~íPyiPzU§P{[£P|`¬P}eËP~s„Q! Q"vcQ#w)Q$~ÚQ%—tQ&…›Q'[fQ(ztQ)–êQ*ˆ@Q+RËQ,qQ-_ªQ.eìQ/‹âQ0[ûQ1šoQ2]áQ3k‰Q4l[Q5‹­Q6‹¯Q7 Q8ÅQ9S‹Q:b¼Q;ž&Q<ž-Q=T@Q>N+Q?‚½Q@rYQA†œQB]QCˆYQDm¯QE–ÅQFTÑQGNšQH‹¶QIq QJT½QK– QLpßQMmùQNvÐQON%QPxQQ‡QR\©QS^öQTŠQU˜œQV–QWpŽQXl¿QYYDQZc©Q[wQ{€Q|pQ}Y–Q~tvR!dGR"\'R#eR$z‘R%Œ#R&YÚR'T¬R(‚R)ƒoR*‰R+€R,i0R-VNR.€6R/r7R0‘ÎR1Q¶R2N_R3˜uR4c–R5NR6SöR7fóR8KR9YR:m²R;NRcÖR?”ñR@ORAO RBˆcRC˜RDY7REWRFyûRGNêRH€ðRIu‘RJl‚RK[œRLYèRM_]RNiRO†RPPRQ]òRRNYRSwãRTNåRU‚zRVb‘RWfRX‘RY\yRZN¿R[_yR\ÆR]8R^€„R_u«R`N¦RaˆÔRbaRckÅRd_ÆReNIRfvÊRgn¢Rh‹ãRi‹®RjŒ Rk‹ÑRl_RmüRnÌRo~ÎRpƒ5RqƒkRrVàRsk·Rt—óRu–4RvYûRwTRx”öRymëRz[ÅR{™nR|\9R}_R~–S!SpS"‚ñS#j1S$ZtS%žpS&^”S'(S(ƒ¹S)„$S*„%S+ƒgS,‡GS-ÎS.bS/vÈS0_qS1˜–S2xlS3f S4TßS5båS6OcS7ÃS8uÈS9^¸S:–ÍS;Ž S<†ùS=TS>lóS?mŒS@l8SA`SBRÇSCu(SD^}SEOSF` SG_çSH\$SIu1SJ®SK”ÀSLr¹SMl¹SNn8SO‘ISPg SQSËSRSóSSOQST‘ÉSU‹ñSVSÈSW^|SXÂSYmäSZNŽS[vÂS\i†S]†^S^aS_‚S`OYSaOÞSb>Scœ|Sda SenSfnSg–…ShNˆSiZ1Sj–èSkNSl\Smy¹Sn[‡So‹íSp½Sqs‰SrWßSs‚‹StÁSuTSvGSwU»Sx\êSy_¡SzaS{k2S|rñS}€²S~ЉT!mtT"[ÓT#ˆÕT$˜„T%ŒkT&šmT'ž3T(n T)Q¤T*QCT+W£T,ˆT-SŸT.côT/•T0VíT1TXT2WT3s?T4nT5T6ÜT7‚ÑT8a?T9`(T:–bT;fðT<~¦T=ŠT>ÃT?”¥T@\³TA|¤TBgTC`¦TD–TE€TFN‘TGçTHSTI–hTJQATKÐTL…tTM‘]TNfUTO—õTP[UTQSTRx8TSgBTTh=TUTÉTVp~TW[°TX}TYQTZW(T[T±T\eT]f‚T^^T_CT`Ta„lTbmTc|ßTdQÿTe…ûTfg£TgeéTho¡Ti†¤TjŽTkVjTl Tmv‚TnpvToqåTp#TqbéTrRTslýTtzÙU?n[U@~ýUAjUBzàUC_pUDo3UE_ UFcŒUGm¨UHgVUINUJ^UK&ULN×UM€ÀUNv4UO–œUPbÛUQf-URb~USl¼UTuUUqgUViUWQFUX€‡UYSìUZnU[b˜U\TòU]†ðU^™U_€U`•Ua…UbÙUcmYUdsÍUeeŸUfwUguUhx'UiûUjUk”ˆUlO¦Umg•Unu¹Uo‹ÊUp—Uqc/Ur•GUs–5Ut„¸Uuc#UvwAUw_UxrðUyN‰Uz`U{etU|bïU}kcU~e?V!^'V"uÇV#ÑV$‹ÁV%‚V&gV'e/V(T1V)‡V*wåV+€¢V,V-lAV.NKV/~ÇV0€LV1vôV2i V3k–V4bgV5P_×V?cV@c·VAóVBôVCnVD^VE\ÙVFR6VGfzVHyéVIzVJ(VKp™VLuÔVMnÞVNl»VOz’VPN-VQvÅVR_àVS”ŸVTˆwVU~ÈVVyÍVW€¿VX‘ÍVYNòVZOV[‚V\ThV]]ÞV^m2V_‹ÌV`|¥VatVb€˜Vc^VdT’Vev±Vf[™VgfbÙW?SSW@hLWAt"WBƒWC‘LWDUDWEw@WFp|WGmJWHQyWIT¨WJDWKYÿWLnËWMmÄWN[\WO}+WPNÔWQ|}WRnÓWS[PWTêWUn WV[WWW›WXhÕWYŽ*WZ[—W[~üW\`;W]~µW^¹W_pW`YOWacÍWbyßWc³WdSRWeeÏWfyVWg‹ÅWh–;Wi~ÄWj”»Wk~‚WlV4Wm‘‰WngWojWp\ WquWrf(Ws]æWtOPWugÞWvPZWwO\WxWPWy^§X!NX"N X#Q@X$NX%^ÿX&SEX'NX(N˜X)NX*›2X+[lX,ViX-N(X.yºX/N?X0SX1NGX2Y-X3r;X4SnX5lX6VßX7€äX8™—X9kÓX:w~X;ŸXŸX?N\X@NiXAN“XB‚ˆXC[[XDUlXEVXFNÄXGSXHSXIS£XJS¥XKS®XL—eXM]XNSXOSõXPS&XQS.XRS>XS\XTSfXUScXVRXWRXXRXYR-XZR3X[R?X\R@X]RLX^R^X_RaX`R\Xa„¯XbR}XcR‚XdRXeRXfR“XgQ‚XhTXiN»XjNÃXkNÉXlNÂXmNèXnNáXoNëXpNÞXqOXrNóXsO"XtOdXuNõXvO%XwO'XxO XyO+XzO^X{OgX|e8X}OZX~O]Y!O_Y"OWY#O2Y$O=Y%OvY&OtY'O‘Y(O‰Y)OƒY*OY+O~Y,O{Y-OªY.O|Y/O¬Y0O”Y1OæY2OèY3OêY4OÅY5OÚY6OãY7OÜY8OÑY9OßY:OøY;P)YP,Y?PY@P.YAP-YBOþYCPYDP YEP%YFP(YGP~YHPCYIPUYJPHYKPNYLPlYMP{YNP¥YOP§YPP©YQPºYRPÖYSQYTPíYUPìYVPæYWPîYXQYYQ YZNÝY[l=Y\OXY]OeY^OÎY_Ÿ Y`lFYa|tYbQnYc]ýYdžÉYe™˜YfQYgYYhRùYiS YjŠYkSYlQëYmYYnQUYoN YpQVYqN³YrˆnYsˆ¤YtNµYuYvˆÒYwy€Yx[4YyˆYz¸Y{Q«Y|Q±Y}Q½Y~Q¼Z!QÇZ"Q–Z#Q¢Z$Q¥Z%‹ Z&‹¦Z'‹§Z(‹ªZ)‹´Z*‹µZ+‹·Z,‹ÂZ-‹ÃZ.‹ËZ/‹ÏZ0‹ÎZ1‹ÒZ2‹ÓZ3‹ÔZ4‹ÖZ5‹ØZ6‹ÙZ7‹ÜZ8‹ßZ9‹àZ:‹äZ;‹èZ<‹éZ=‹îZ>‹ðZ?‹óZ@‹öZA‹ùZB‹üZC‹ÿZDŒZEŒZFŒZGŒZHŒ ZIŒZJŒZKŒZLŒZMŒZNŒZOŒZPŒZQŒZRŒZSŒZTŒ ZUŒ!ZVŒ%ZWŒ'ZXŒ*ZYŒ+ZZŒ.Z[Œ/Z\Œ2Z]Œ3Z^Œ5Z_Œ6Z`SiZaSzZb–Zc–"Zd–!Ze–1Zf–*Zg–=Zh–R¬[?R­[@R¾[ATÿ[BRÐ[CRÖ[DRð[ESß[Fqî[GwÍ[H^ô[IQõ[JQü[K›/[LS¶[M_[NuZ[O]ï[PWL[QW©[RW¡[SX~[TX¼[UXÅ[VXÑ[WW)[XW,[YW*[ZW3[[W9[\W.[]W/[^W\[_W;[`WB[aWi[bW…[cWk[dW†[eW|[fW{[gWh[hWm[iWv[jWs[kW­[lW¤[mWŒ[nW²[oWÏ[pW§[qW´[rW“[sW [tWÕ[uWØ[vWÚ[wWÙ[xWÒ[yW¸[zWô[{Wï[|Wø[}Wä[~WÝ\!X \"X \#Wý\$Wí\%X\&X\'X\(XD\)X \*Xe\+Xl\,X\-X‰\.Xš\/X€\0™¨\1Ÿ\2aÿ\3‚y\4‚}\5‚\6‚\7‚Š\8‚¨\9‚„\:‚Ž\;‚‘\<‚—\=‚™\>‚«\?‚¸\@‚¾\A‚°\B‚È\C‚Ê\D‚ã\E‚˜\F‚·\G‚®\H‚Ë\I‚Ì\J‚Á\K‚©\L‚´\M‚¡\N‚ª\O‚Ÿ\P‚Ä\Q‚Î\R‚¤\S‚á\Tƒ \U‚÷\V‚ä\Wƒ\Xƒ\Y‚Ü\Z‚ô\[‚Ò\\‚Ø\]ƒ \^‚û\_‚Ó\`ƒ\aƒ\bƒ\cƒ\dƒ\e‚à\f‚Õ\gƒ\hƒQ\iƒ[\jƒ\\kƒ\lƒ’\mƒ<\nƒ4\oƒ1\pƒ›\qƒ^\rƒ/\sƒO\tƒG\uƒC\vƒ_\wƒ@\xƒ\yƒ`\zƒ-\{ƒ:\|ƒ3\}ƒf\~ƒe]!ƒh]"ƒ]#ƒi]$ƒl]%ƒj]&ƒm]'ƒn](ƒ°])ƒx]*ƒ³]+ƒ´],ƒ ]-ƒª].ƒ“]/ƒœ]0ƒ…]1ƒ|]2ƒ¶]3ƒ©]4ƒ}]5ƒ¸]6ƒ{]7ƒ˜]8ƒž]9ƒ¨]:ƒº];ƒ¼]<ƒÁ]=„]>ƒå]?ƒØ]@X]A„]B„ ]CƒÝ]Dƒý]EƒÖ]F„]G„8]H„]I„]JƒÔ]Kƒß]L„]M„]Nƒø]Oƒù]Pƒê]QƒÅ]RƒÀ]S„&]Tƒð]Uƒá]V„\]W„Q]X„Z]Y„Y]Z„s][„‡]\„ˆ]]„z]^„‰]_„x]`„<]a„F]b„i]c„v]d„Œ]e„Ž]f„1]g„m]h„Á]i„Í]j„Ð]k„æ]l„½]m„Ó]n„Ê]o„¿]p„º]q„à]r„¡]s„¹]t„´]u„—]v„å]w„ã]x… ]yu ]z…8]{„ð]|…9]}…]~…:^!…V^"…;^#„ÿ^$„ü^%…Y^&…H^'…h^(…d^)…^^*…z^+w¢^,…C^-…r^.…{^/…¤^0…¨^1…‡^2…^3…y^4…®^5…œ^6……^7…¹^8…·^9…°^:…Ó^;…Á^<…Ü^=…ÿ^>†'^?†^@†)^A†^B†<^C^þ^D_^EY<^FYA^G€7^HYU^IYZ^JYX^KS^L\"^M\%^N\,^O\4^PbL^Qbj^RbŸ^Sb»^TbÊ^UbÚ^Vb×^Wbî^Xc"^Ybö^Zc9^[cK^\cC^]c­^^cö^_cq^`cz^acŽ^bc´^ccm^dc¬^ecŠ^fci^gc®^hc¼^icò^jcø^kcà^lcÿ^mcÄ^ncÞ^ocÎ^pdR^qcÆ^rc¾^sdE^tdA^ud ^vd^wd ^xd ^yd&^zd!^{d^^|d„^}dm^~d–_!dz_"d·_#d¸_$d™_%dº_&dÀ_'dÐ_(d×_)dä_*dâ_+e _,e%_-e._._ _/_Ò_0u_1__2S__3Sñ_4Sý_5Sé_6Sè_7Sû_8T_9T_:T_;TK_TT_?TV_@TC_AT!_BTW_CTY_DT#_ET2_FT‚_GT”_HTw_ITq_JTd_KTš_LT›_MT„_NTv_OTf_PT_QTÐ_RT­_STÂ_TT´_UTÒ_VT§_WT¦_XTÓ_YTÔ_ZTr_[T£_\TÕ_]T»_^T¿__TÌ_`TÙ_aTÚ_bTÜ_cT©_dTª_eT¤_fTÝ_gTÏ_hTÞ_iU_jTç_kU _lTý_mU_nTó_oU"_pU#_qU_rU_sU'_tU*_uUg_vU_wUµ_xUI_yUm_zUA_{UU_|U?_}UP_~U<`!U7`"UV`#Uu`$Uv`%Uw`&U3`'U0`(U\`)U‹`*UÒ`+Uƒ`,U±`-U¹`.Uˆ`/U`0UŸ`1U~`2UÖ`3U‘`4U{`5Uß`6U½`7U¾`8U”`9U™`:Uê`;U÷`UÑ`?Uë`@Uì`AUÔ`BUæ`CUÝ`DUÄ`EUï`FUå`GUò`HUó`IUÌ`JUÍ`KUè`LUõ`MUä`N”`OV`PV`QV `RV`SV$`TV#`UUþ`VV`WV'`XV-`YVX`ZV9`[VW`\V,`]VM`^Vb`_VY``V\`aVL`bVT`cV†`dVd`eVq`fVk`gV{`hV|`iV…`jV“`kV¯`lVÔ`mV×`nVÝ`oVá`pVõ`qVë`rVù`sVÿ`tW`uW `vW `wW`x^`y^`z^`{^`|^1`}^;`~^\Ëa?\åa@]aA]aB]'aC]&aD].aE]$aF]aG]aH]aI]XaJ]>aK]4aL]=aM]laN][aO]oaP]]aQ]kaR]KaS]JaT]iaU]taV]‚aW]™aX]aYŒsaZ]·a[]Åa\_sa]_wa^_‚a__‡a`_‰aa_Œab_•ac_™ad_œae_¨af_­ag_µah_¼aiˆbaj_aakr­alr°amr´anr·aor¸aprÃaqrÁarrÎasrÍatrÒaurèavrïawréaxròayrôazr÷a{sa|róa}sa~rúb!rûb"sb#sb$s!b%s b&sb'sb(sb)s"b*s9b+s%b,s,b-s8b.s1b/sPb0sMb1sWb2s`b3slb4sob5s~b6‚b7Y%b8˜çb9Y$b:Yb;™cb<™gb=™hb>™ib?™jb@™kbA™lbB™tbC™wbD™}bE™€bF™„bG™‡bH™ŠbI™bJ™bK™‘bL™“bM™”bN™•bO^€bP^‘bQ^‹bR^–bS^¥bT^ bU^¹bV^µbW^¾bX^³bYSbZ^Òb[^Ñb\^Ûb]^èb^^êb_ºb`_Äba_Ébb_Öbc_Ïbd`be_îbf`bg_ábh_äbi_þbj`bk`bl_êbm_íbn_øbo`bp`5bq`&br`bs`bt` bu`)bv`+bw` bx`?by`!bz`xb{`yb|`{b}`zb~`Bc!`jc"`}c#`–c$`šc%`­c&`c'`ƒc(`’c)`Œc*`›c+`ìc,`»c-`±c.`Ýc/`Øc0`Æc1`Úc2`´c3a c4a&c5ac6a#c7`ôc8ac9ac:a+c;aJca”c?a§c@a·cAaÔcBaõcC_ÝcD–³cE•écF•ëcG•ñcH•ócI•õcJ•öcK•ücL•þcM–cN–cO–cP–cQ– cR– cS– cT– cU–cV–cW–cX–cY–cZ–c[–c\N,c]r?c^bc_l5c`lTcal\cblJccl£cdl…celcfl”cglŒchlhcilicjltcklvcll†cml©cnlÐcolÔcpl­cql÷crløcslñctl×cul²cvlàcwlÖcxlúcylëczlîc{l±c|lÓc}lïc~lþd!m9d"m'd#m d$mCd%mHd&md'md(md)md*m+d+mMd,m.d-m5d.md/mOd0mRd1mTd2m3d3m‘d4mod5mžd6m d7m^d8m“d9m”d:m\d;m`dnd?mÇd@mÅdAmÞdBndCm¿dDmàdEndFmædGmÝdHmÙdIndJm«dKn dLm®dMn+dNnndOnNdPnkdQn²dRn_dSn†dTnSdUnTdVn2dWn%dXnDdYnßdZn±d[n˜d\nàd]o-d^nâd_n¥d`n§dan½dbn»dcn·ddn×den´dfnÏdgndhnÂdinŸdjobdkoFdloGdmo$dnodonùdpo/dqo6droKdsotdto*duo dvo)dwo‰dxodyoŒdzoxd{ord|o|d}ozd~oÑe!oÉe"o§e#o¹e$o¶e%oÂe&oáe'oîe(oÞe)oàe*oïe+pe,p#e-pe.p9e/p5e0pOe1p^e2[€e3[„e4[•e5[“e6[¥e7[¸e8u/e9šže:d4e;[äe<[îe=‰0e>[ðe?ŽGe@‹eA¶eBÓeCÕeDåeEîeFäeGéeHæeIóeJèeKeLeM eN&eOeP eQeR!eS5eT6eU-eV/eWDeXQeYReZPe[he\Xe]be^[e_f¹e`tea}eb‚ecˆedƒee‹ef_Peg_Weh_Vei_Xej\;ekT«el\Pem\Yen[qeo\cep\feq¼er_*es_)et_-eu‚tev_Zbf?Zuf@€ìfAZªfBZ›fCZwfDZzfEZ¾fFZëfGZ²fHZÒfIZÔfJZ¸fKZàfLZãfMZñfNZÖfOZæfPZØfQZÜfR[ fS[fT[fU[2fV[7fW[@fX\fY\fZ[Zf[[ef\[sf][Qf^[Sf_[bf`šufašwfbšxfcšzfdšfeš}ffš€fgšfhš…fišˆfjšŠfkšflš’fmš“fnš–foš˜fpš›fqšœfršfsšŸftš fuš¢fvš£fwš¥fxš§fy~Ÿfz~¡f{~£f|~¥f}~¨f~~©g!~­g"~°g#~¾g$~Àg%~Ág&~Âg'~Ég(~Ëg)~Ìg*~Ðg+~Ôg,~×g-~Ûg.~àg/~ág0~èg1~ëg2~îg3~ïg4~ñg5~òg6 g7~ög8~úg9~ûg:~þg;g<g=g>g?g@ gA gBgCgDgEgFgGgHgIgJ!gK"gL#gM$gN%gO&gP'gQ*gR+gS,gT-gU/gV0gW1gX2gY3gZ5g[^zg\ug]]Ûg^u>g_•g`sŽgas‘gbs®gcs¢gdsŸgesÏgfsÂggsÑghs·gis³gjsÀgksÉglsÈgmsågnsÙgo˜|gpt gqségrsçgssÞgtsºgusògvtgwt*gxt[gyt&gzt%g{t(g|t0g}t.g~t,h!th"th#tAh$t\h%tWh&tUh'tYh(twh)tmh*t~h+tœh,tŽh-t€h.th/t‡h0t‹h1tžh2t¨h3t©h4th5t§h6tÒh7tºh8—êh9—ëh:—ìh;gLhgHh?gih@g¥hAg‡hBgjhCgshDg˜hEg§hFguhGg¨hHgžhIg­hJg‹hKgwhLg|hMgðhNh hOgØhPh hQgéhRg°hSh hTgÙhUgµhVgÚhWg³hXgÝhYhhZgÃh[g¸h\gâh]hh^gÁh_gýh`h2hah3hbh`hchahdhNhehbhfhDhghdhhhƒhihhjhUhkhfhlhAhmhghnh@hoh>hphJhqhIhrh)hshµhthhuhthvhwhwh“hxhkhyhÂhzinh{hüh|ih}i h~hùi!i$i"hði#i i$ii%iWi&hãi'ii(iqi)i9i*i`i+iBi,i]i-i„i.iki/i€i0i˜i1ixi2i4i3iÌi4i‡i5iˆi6iÎi7i‰i8ifi9ici:iyi;i›ii«i?i­i@iÔiAi±iBiÁiCiÊiDißiEi•iFiàiGiiHiÿiIj/iJiíiKjiLjiMjeiNiòiOjDiPj>iQj iRjPiSj[iTj5iUjŽiVjyiWj=iXj(iYjXiZj|i[j‘i\ji]j©i^j—i_j«i`s7iasRibkick‚idk‡iek„ifk’igk“ihkiikšijk›ikk¡ilkªimkinmioqipriqsiruisvitxiuwivyiwzix|iy~izi{‚i|„i}‡i~‹j!j"Žj#j$˜j%šj&ŽÎj'b j(bj)bj*bj+b"j,b!j-b%j.b$j/b,j0çj1tïj2tôj3tÿj4uj5uj6uj7e4j8eîj9eïj:eðj;f jfj?fj@fjAp…jBf÷jCfjDf4jEf1jFf6jGf5jH€jIf_jJfTjKfAjLfOjMfVjNfajOfWjPfwjQf„jRfŒjSf§jTfjUf¾jVfÛjWfÜjXfæjYféjZ2j[3j\6j];j^=j_@j`EjaFjbHjcIjdGjeMjfUjgYjh‰Çji‰Êjj‰Ëjk‰Ìjl‰Îjm‰Ïjn‰Ðjo‰ÑjprnjqrŸjrr]jsrfjtrojur~jvrjwr„jxr‹jyrjzrj{r’j|cj}c2j~c°k!d?k"dØk#€k$kêk%kók&kýk'kõk(kùk)lk*lk+lk,l k-lk.lk/lk0lk1l!k2l)k3l$k4l*k5l2k6e5k7eUk8ekk9rMk:rRk;rVkRk?€Ÿk@€œkA€“kB€¼kCg kD€½kE€±kF€«kG€­kH€´kI€·kJ€çkK€èkL€ékM€êkN€ÛkO€ÂkP€ÄkQ€ÙkR€ÍkS€×kTgkU€ÝkV€ëkW€ñkX€ôkY€íkZ k[k\€òk]€ük^gk_k`ŒZka6kbkc,kdke2kfHkgLkhSkitkjYkkZklqkm`kniko|kp}kqmkrgksXMktZµkuˆkv‚kw‘kxnÕky£kzªk{Ìk|g&k}Êk~»l!Ál"¦l#k$l$k7l%k9l&kCl'kFl(kYl)˜Ñl*˜Òl+˜Ól,˜Õl-˜Ùl.˜Úl/k³l0_@l1kÂl2‰ól3el4ŸQl5e“l6e¼l7eÆl8eÄl9eÃl:eÌl;eÎlp€l?pœl@p–lAplBp»lCpÀlDp·lEp«lFp±lGpèlHpÊlIqlJqlKqlLq/lMq1lNqslOq\lPqhlQqElRqrlSqJlTqxlUqzlVq˜lWq³lXqµlYq¨lZq l[qàl\qÔl]qçl^qùl_rl`r(lapllbqlcqfldq¹leb>lfb=lgbClhbHlibIljy;lky@llyFlmyIlny[loy\lpySlqyZlryblsyWlty`luyolvyglwyzlxy…lyyŠlzyšl{y§l|y³l}_Ñl~_Ðm!`x-m?xm@xmAx9mBx:mCx;mDxmExyn?n@~nAvÍnBvånCˆ2nD”…nE”†nF”‡nG”‹nH”ŠnI”ŒnJ”nK”nL”nM””nN”—nO”•nP”šnQ”›nR”œnS”£nT”¤nU”«nV”ªnW”­nX”¬nY”¯nZ”°n[”²n\”´n]”¶n^”·n_”¸n`”¹na”ºnb”¼nc”½nd”¿ne”Änf”Èng”Énh”Êni”Ënj”Ìnk”Ínl”Înm”Ðnn”Ñno”Ònp”Õnq”Önr”×ns”Ùnt”Ønu”Ûnv”Þnw”ßnx”àny”ânz”än{”ån|”çn}”èn~”êo!”éo"”ëo#”îo$”ïo%”óo&”ôo'”õo(”÷o)”ùo*”üo+”ýo,”ÿo-•o.•o/•o0•o1• o2• o3• o4•o5•o6•o7•o8•o9•o:•o;•o<•o=•o>•o?•o@•"oA•*oB•+oC•)oD•,oE•1oF•2oG•4oH•6oI•7oJ•8oK•oM•?oN•BoO•5oP•DoQ•EoR•FoS•IoT•LoU•NoV•OoW•RoX•SoY•ToZ•Vo[•Wo\•Xo]•Yo^•[o_•^o`•_oa•]ob•aoc•bod•doe•eof•fog•goh•hoi•ioj•jok•kol•lom•oon•qoo•rop•soq•:orwçoswìot–ÉouyÕovyíowyãoxyëoyzoz]Go{zo|zo}zo~zp!z9p"z7p#zQp$žÏp%™¥p&zpp'vˆp(vŽp)v“p*v™p+v¤p,tÞp-tàp.u,p/ž p0ž"p1ž(p2ž)p3ž*p4ž+p5ž,p6ž2p7ž1p8ž6p9ž8p:ž7p;ž9p<ž:p=ž>p>žAp?žBp@žDpAžFpBžGpCžHpDžIpEžKpFžLpGžNpHžQpIžUpJžWpKžZpLž[pMž\pNž^pOžcpPžfpQžgpRžhpSžipTžjpUžkpVžlpWžqpXžmpYžspZu’p[u”p\u–p]u p^up_u¬p`u£pau³pbu´pcu¸pduÄpeu±pfu°pguÃphuÂpiuÖpjuÍpkuãpluèpmuæpnuäpouëppuçpqvpruñpsuüptuÿpuvpvvpwvpxv pyvpzv p{v%p|vp}vp~vq!vq"vq,v3q-vMq.v^q/vTq0v\q1vVq2vkq3voq4Êq5zæq6zxq7zyq8z€q9z†q:zˆq;z•qz¬q?z¨q@z­qAz³qBˆdqCˆiqDˆrqEˆ}qFˆqGˆ‚qHˆ¢qIˆÆqJˆ·qKˆ¼qLˆÉqMˆâqNˆÎqOˆãqPˆåqQˆñqR‰qSˆüqTˆèqUˆþqVˆðqW‰!qX‰qY‰qZ‰q[‰ q\‰4q]‰+q^‰6q_‰Aq`‰fqa‰{qbu‹qc€åqdv²qev´qfwÜqg€qh€qi€qj€qk€ ql€"qm€%qn€&qo€'qp€)qq€(qr€1qs€ qt€5qu€Cqv€Fqw€Mqx€Rqy€iqz€qq{‰ƒq|˜xq}˜€q~˜ƒr!˜‰r"˜Œr#˜r$˜r%˜”r&˜šr'˜›r(˜žr)˜Ÿr*˜¡r+˜¢r,˜¥r-˜¦r.†Mr/†Tr0†lr1†nr2†r3†zr4†|r5†{r6†¨r7†r8†‹r9†¬r:†r;†§r<†£r=†ªr>†“r?†©r@†¶rA†ÄrB†µrC†ÎrD†°rE†ºrF†±rG†¯rH†ÉrI†ÏrJ†´rK†érL†ñrM†òrN†írO†órP†ÐrQ‡rR†ÞrS†ôrT†ßrU†ØrV†ÑrW‡rX‡rY†ørZ‡r[‡ r\‡ r]‡ r^‡#r_‡;r`‡ra‡%rb‡.rc‡rd‡>re‡Hrf‡4rg‡1rh‡)ri‡7rj‡?rk‡‚rl‡"rm‡}rn‡~ro‡{rp‡`rq‡prr‡Lrs‡nrt‡‹ru‡Srv‡crw‡|rx‡dry‡Yrz‡er{‡“r|‡¯r}‡¨r~‡Òs!‡Æs"‡ˆs#‡…s$‡­s%‡—s&‡ƒs'‡«s(‡ås)‡¬s*‡µs+‡³s,‡Ës-‡Ós.‡½s/‡Ñs0‡Às1‡Ês2‡Ûs3‡ês4‡às5‡îs6ˆs7ˆs8‡þs9ˆ s:ˆs;ˆ!s<ˆ9s=ˆ6s?Bs@DsAEsB‚sCzúsDzýsE{sF{sG{sH{sI{ sJ{+sK{sL{GsM{8sN{*sO{sP{.sQ{1sR{ sS{%sT{$sU{3sV{>sW{sX{XsY{ZsZ{Es[{us\{Ls]{]s^{`s_{ns`{{sa{bsb{rsc{qsd{se{¦sf{§sg{¸sh{¬si{sj{¨sk{…sl{ªsm{œsn{¢so{«sp{´sq{Ñsr{Áss{Ìst{Ýsu{Úsv{åsw{æsx{êsy| sz{þs{{üs||s}|s~| t!|t"|*t#|&t$|8t%|At&|@t'þt(‚t)‚t*‚t+ìt,ˆDt-‚!t.‚"t/‚#t0‚-t1‚/t2‚(t3‚+t4‚8t5‚;t6‚3t7‚4t8‚>t9‚Dt:‚It;‚Kt<‚Ot=‚Zt>‚_t?‚ht@ˆ~tAˆ…tBˆˆtCˆØtDˆßtE‰^tFtGŸtH§tI¯tJ°tK²tL||tMeItN|‘tO|tP|œtQ|žtR|¢tS|²tT|¼tU|½tV|ÁtW|ÇtX|ÌtY|ÍtZ|Èt[|Åt\|×t]|èt^‚nt_f¨t`¿taÎtbÕtcåtdáteætfétgîthóti|øtj}wtk}¦tl}®tm~Gtn~›tož¸tpž´tqstr„ts”tt‘tu±tvgtwmtxŒGtyŒItz‘Jt{‘Pt|‘Nt}‘Ot~‘du!‘bu"‘au#‘pu$‘iu%‘ou&‘}u'‘~u(‘ru)‘tu*‘yu+‘Œu,‘…u-‘u.‘u/‘‘u0‘¢u1‘£u2‘ªu3‘­u4‘®u5‘¯u6‘µu7‘´u8‘ºu9ŒUu:ž~u;¸u<ëu=Žu>ŽYu?Žiu@µuA¿uB¼uCºuDÄuEÖuF×uGÚuHÞuIÎuJÏuKÛuLÆuMìuN÷uOøuPãuQùuRûuSäuTŽ uUýuVŽuWŽuXŽuYŽ,uZŽ.u[Ž#u\Ž/u]Ž:u^Ž@u_Ž9u`Ž5uaŽ=ubŽ1ucŽIudŽAueŽBufŽQugŽRuhŽJuiŽpujŽvukŽ|ulŽoumŽtunŽ…uoŽupŽ”uqŽurŽœusŽžutŒxuuŒ‚uvŒŠuwŒ…uxŒ˜uyŒ”uze›u{‰Öu|‰Þu}‰Úu~‰Üv!‰åv"‰ëv#‰ïv$Š>v%‹&v&—Sv'–év(–óv)–ïv*—v+—v,—v-—v.—v/—*v0—-v1—0v2—>v3Ÿ€v4Ÿƒv5Ÿ…v6Ÿ†v7Ÿ‡v8Ÿˆv9Ÿ‰v:ŸŠv;ŸŒv<žþv=Ÿ v>Ÿ v?–¹v@–¼vA–½vB–ÎvC–ÒvDw¿vE–àvF’ŽvG’®vH’ÈvI“>vJ“jvK“ÊvL“vM”>vN”kvOœvPœ‚vQœ…vRœ†vSœ‡vTœˆvUz#vVœ‹vWœŽvXœvYœ‘vZœ’v[œ”v\œ•v]œšv^œ›v_œžv`œŸvaœ vbœ¡vcœ¢vdœ£veœ¥vfœ¦vgœ§vhœ¨viœ©vjœ«vkœ­vlœ®vmœ°vnœ±voœ²vpœ³vqœ´vrœµvsœ¶vtœ·vuœºvvœ»vwœ¼vxœ½vyœÄvzœÅv{œÆv|œÇv}œÊv~œËw!œÌw"œÍw#œÎw$œÏw%œÐw&œÓw'œÔw(œÕw)œ×w*œØw+œÙw,œÜw-œÝw.œßw/œâw0—|w1—…w2—‘w3—’w4—”w5—¯w6—«w7—£w8—²w9—´w:š±w;š°w<š·w=žXw>š¶w?šºw@š¼wAšÁwBšÀwCšÅwDšÂwEšËwFšÌwGšÑwH›EwI›CwJ›GwK›IwL›HwM›MwN›QwO˜èwP™ wQ™.wR™UwS™TwTšßwUšáwVšæwWšïwXšëwYšûwZšíw[šùw\›w]›w^›w_›w`›#waž½wbž¾wc~;wdž‚wež‡wfžˆwgž‹whž’wi“ÖwjžwkžŸwlžÛwmžÜwnžÝwožàwpžßwqžâwržéwsžçwtžåwužêwvžïwwŸ"wxŸ,wyŸ/wzŸ9w{Ÿ7w|Ÿ=w}Ÿ>w~ŸDscreen-4.9.1/utf8encodings/180000664000175000017500000015311614467014146014423 0ustar alexalexScreenI2UTF85ŽBIG 5!@0!Aÿ !B0!C0!Dÿ!E "!Fÿ!Gÿ!Hÿ!Iÿ!Jþ0!K &!L %!MþP!Nÿd!OþR!P·!QþT!RþU!SþV!TþW!Uÿ\!V !Wþ1!X !Yþ3!Zÿý![þ4!\þO!]ÿ!^ÿ !_þ5!`þ6!aÿ[!bÿ]!cþ7!dþ8!e0!f0!gþ9!hþ:!i0!j0!kþ;!lþ!q0!r0 !sþ?!tþ@!u0 !v0 !wþA!xþB!y0!z0!{þC!|þD!}þY!~þZ!¡þ[!¢þ\!£þ]!¤þ^!¥ !¦ !§ !¨ !©0!ª0!« 5!¬ 2!­ÿ!®ÿ!¯ÿ !° ;!±§!²0!³%Ë!´%Ï!µ%³!¶%²!·%Î!¸&!¹&!º%Ç!»%Æ!¼%¡!½% !¾%½!¿%¼!À2£!Á!! >!Ãÿý!Äÿ?!Åÿý!ÆþI!ÇþJ!ÈþM!ÉþN!ÊþK!ËþL!Ìþ_!Íþ`!Îþa!Ïÿ !Ðÿ !Ñ×!Ò÷!Ó±!Ô"!Õÿ!Öÿ!×ÿ!Ø"f!Ù"g!Ú"`!Û"!Ü"R!Ý"a!Þþb!ßþc!àþd!áþe!âþf!ã"%Çr¯%Ès„%És‰%ÊtÜ%Ëtæ%Ìu%Íu%Îu(%Ïu)%Ðu0%Ñu1%Òu2%Óu3%Ôu‹%Õv}%Öv®%×v¿%Øvî%ÙwÛ%Úwâ%Ûwó%Üy:%Ýy¾%Þzt%ßzË%àN%áN%âNR%ãNS%äNi%åN™%æN¤%çN¦%èN¥%éNÿ%êO %ëO%ìO %íO%îO %ïO%ðO%ñO%òNò%óNö%ôNû%õNð%öNó%÷Ný%øO%ùO %úQI%ûQG%üQF%ýQH%þQh&@Qq&AQ&BQ°&CR&DR&ER&FR&GR&HR£&IS&JS!&KS &LSp&MSq&NT &OT&PT &QT &RT&ST&TT &UT&VT&WT &XT&YT&ZT&[T&\T&]Và&^VÞ&_VÝ&`W3&aW0&bW(&cW-&dW,&eW/&fW)&gY&hY&iY7&jY8&kY„&lYx&mYƒ&nY}&oYy&pY‚&qY&r[W&s[X&t[‡&u[ˆ&v[…&w[‰&x[ú&y\&z\y&{]Þ&|^&}^v&~^t&¡_&¢_&£_Ù&¤_Ö&¥b&¦b &§b &¨b&©bc&ªb[&«bX&¬e6&­eé&®eè&¯eì&°eí&±fò&²fó&³g &´g=&µg4&¶g1&·g5&¸k!&¹kd&ºk{&»l&¼l]&½lW&¾lY&¿l_&Àl`&ÁlP&ÂlU&Ãla&Äl[&ÅlM&ÆlN&Çpp&Èr_&Ér]&Êv~&Ëzù&Ì|s&Í|ø&Î6&ÏŠ&н&Ñ€&Ò€&Ó€ &Ô€&Õ€3&Ö€&×€‰&Ø€‹&Ù€Œ&Úã&Ûê&Üó&Ýü&Þ‚ &ß‚&à‚&á‚n&â‚r&ã‚~&ä†k&åˆ@&æˆL&çˆc&è‰&é–!&êN2&ëN¨&ìOM&íOO&îOG&ïOW&ðO^&ñO4&òO[&óOU&ôO0&õOP&öOQ&÷O=&øO:&ùO8&úOC&ûOT&üO<&ýOF&þOc'@O\'AO`'BO/'CON'DO6'EOY'FO]'GOH'HOZ'IQL'JQK'KQM'LQu'MQ¶'NQ·'OR%'PR$'QR)'RR*'SR('TR«'UR©'VRª'WR¬'XS#'YSs'ZSu'[T'\T-']T'^T>'_T&'`TN'aT''bTF'cTC'dT3'eTH'fTB'gT'hT)'iTJ'jT9'kT;'lT8'mT.'nT5'oT6'pT 'qT<'rT@'sT1'tT+'uT'vT,'wVê'xVð'yVä'zVë'{WJ'|WQ'}W@'~WM'¡WG'¢WN'£W>'¤WP'¥WO'¦W;'§Xï'¨Y>'©Y'ªY’'«Y¨'¬Yž'­Y£'®Y™'¯Y–'°Y'±Y¤'²Y“'³YŠ'´Y¥'µ[]'¶[\'·[Z'¸[['¹[Œ'º[‹'»['¼\,'½\@'¾\A'¿\?'À\>'Á\'Â\‘'Ã\”'Ä\Œ'Å]ë'Æ^ 'Ç^'È^‡'É^Š'Ê^÷'Ë_'Ì_'Í_d'Î_b'Ï_w'Ð_y'Ñ_Ø'Ò_Ì'Ó_×'Ô_Í'Õ_ñ'Ö_ë'×_ø'Ø_ê'Ùb'Úb'Ûb„'Üb—'Ýb–'Þb€'ßbv'àb‰'ábm'âbŠ'ãb|'äb~'åby'æbs'çb’'èbo'éb˜'êbn'ëb•'ìb“'íb‘'îb†'ïe9'ðe;'ñe8'òeñ'ófô'ôg_'õgN'ögO'÷gP'øgQ'ùg\'úgV'ûg^'ügI'ýgF'þg`(@gS(AgW(Bke(CkÏ(DlB(El^(Fl™(Gl(Hlˆ(Il‰(Jl…(Kl›(Llj(Mlz(Nl(Olp(PlŒ(Qlh(Rl–(Sl’(Tl}(Ulƒ(Vlr(Wl~(Xlt(Yl†(Zlv([l(\l”(]l˜(^l‚(_pv(`p|(ap}(bpx(crb(dra(er`(frÄ(grÂ(hs–(iu,(ju+(ku7(lu8(mv‚(nvï(owã(pyÁ(qyÀ(ry¿(szv(t|û(uU(v€–(w€“(x€(y€˜(z€›({€š(|€²(}‚o(~‚’(¡‚‹(¢‚(£‰‹(¤‰Ò(¥Š(¦Œ7(§ŒF(¨ŒU(©Œ(ªd(«p(¬³(­Ž«(®ŽÊ(¯›(°°(±Â(²Æ(³Å(´Ä(µ]á(¶‘(·¢(¸ª(¹¦(º£(»‘I(¼‘Æ(½‘Ì(¾–2(¿–.(À–1(Á–*(–,(ÃN&(ÄNV(ÅNs(ÆN‹(ÇN›(ÈNž(ÉN«(ÊN¬(ËOo(ÌO(ÍO(ÎOs(ÏO(ÐOl(ÑO›(ÒO‹(ÓO†(ÔOƒ(ÕOp(ÖOu(×Oˆ(ØOi(ÙO{(ÚO–(ÛO~(ÜO(ÝO‘(ÞOz(ßQT(àQR(áQU(âQi(ãQw(äQv(åQx(æQ½(çQý(èR;(éR8(êR7(ëR:(ìR0(íR.(îR6(ïRA(ðR¾(ñR»(òSR(óST(ôSS(õSQ(öSf(÷Sw(øSx(ùSy(úSÖ(ûSÔ(üS×(ýTs(þTu)@T–)ATx)BT•)CT€)DT{)ETw)FT„)GT’)HT†)IT|)JT)KTq)LTv)MTŒ)NTš)OTb)PTh)QT‹)RT})STŽ)TVú)UWƒ)VWw)WWj)XWi)YWa)ZWf)[Wd)\W|)]Y)^YI)_YG)`YH)aYD)bYT)cY¾)dY»)eYÔ)fY¹)gY®)hYÑ)iYÆ)jYÐ)kYÍ)lYË)mYÓ)nYÊ)oY¯)pY³)qYÒ)rYÅ)s[_)t[d)u[c)v[—)w[š)x[˜)y[œ)z[™){[›)|\)}\H)~\E)¡\F)¢\·)£\¡)¤\¸)¥\©)¦\«)§\±)¨\³)©^)ª^)«^)¬^)­^)®^)¯^x)°^š)±^—)²^œ)³^•)´^–)µ^ö)¶_&)·_')¸_))¹_€)º_)»_)¼_|)½_Ý)¾_à)¿_ý)À_õ)Á_ÿ)Â`)Ã`)Ä`/)Å`5)Æ`)Ç`*)È`)É`!)Ê`')Ë`))Ì`+)Í`)Îb)Ïb)Ðb?)Ñb>)Òb@)Ób)ÔbÉ)ÕbÌ)ÖbÄ)×b¿)ØbÂ)Ùb¹)ÚbÒ)ÛbÛ)Üb«)ÝbÓ)ÞbÔ)ßbË)àbÈ)áb¨)âb½)ãb¼)äbÐ)åbÙ)æbÇ)çbÍ)èbµ)ébÚ)êb±)ëbØ)ìbÖ)íb×)îbÆ)ïb¬)ðbÎ)ñe>)òe§)óe¼)ôeú)õf)öf)÷f )øf)ùf)úf)ûf)üf)ýf)þf *@f*Ag *Bg *Cgm*Dg‹*Eg•*Fgq*Ggœ*Hgs*Igw*Jg‡*Kg*Lg—*Mgo*Ngp*Og*Pg‰*Qg~*Rg*Sgu*Tgš*Ug“*Vg|*Wgj*Xgr*Yk#*Zkf*[kg*\k*]l*^l*_lã*`lè*aló*bl±*clÌ*dlå*el³*fl½*gl¾*hl¼*ilâ*jl«*klÕ*llÓ*ml¸*nlÄ*ol¹*plÁ*ql®*rl×*slÅ*tlñ*ul¿*vl»*wlá*xlÛ*ylÊ*zl¬*{lï*|lÜ*}lÖ*~là*¡p•*¢pŽ*£p’*¤pŠ*¥p™*¦r,*§r-*¨r8*©rH*ªrg*«ri*¬rÀ*­rÎ*®rÙ*¯r×*°rÐ*±s©*²s¨*³sŸ*´s«*µs¥*¶u=*·u*¸u™*¹uš*ºv„*»vÂ*¼vò*½vô*¾wå*¿wý*Ày>*Áy@*ÂyA*ÃyÉ*ÄyÈ*Åzz*Æzy*Çzú*È|þ*ÉT*ÊŒ*Ë‹*Ì€*Í€º*΀¥*Ï€¢*Ѐ±*Ñ€¡*Ò€«*Ó€©*Ô€´*Õ€ª*Ö€¯*×å*Øþ*Ù‚ *Ú‚³*Û‚*Ü‚™*Ý‚­*Þ‚½*ß‚Ÿ*à‚¹*Ⴑ*€*ã‚¥*䂯*傸*æ‚£*ç‚°*肾*é‚·*ê†N*ë†q*ìR*íˆh*îŽË*ïÎ*ðÔ*ñÑ*òµ*ó¸*ô±*õ¶*ö‘Ç*÷‘Ñ*ø•w*ù•€*ú–*û–@*ü–?*ý–;*þ–D+@–B+A–¹+B–è+C—R+D—^+ENŸ+FN­+GN®+HOá+IOµ+JO¯+KO¿+LOà+MOÑ+NOÏ+OOÝ+POÃ+QO¶+ROØ+SOß+TOÊ+UO×+VO®+WOÐ+XOÄ+YOÂ+ZOÚ+[OÎ+\OÞ+]O·+^QW+_Q’+`Q‘+aQ +bRN+cRC+dRJ+eRM+fRL+gRK+hRG+iRÇ+jRÉ+kRÃ+lRÁ+mS +nSW+oS{+pSš+qSÛ+rT¬+sTÀ+tT¨+uTÎ+vTÉ+wT¸+xT¦+yT³+zTÇ+{TÂ+|T½+}Tª+~TÁ+¡TÄ+¢TÈ+£T¯+¤T«+¥T±+¦T»+§T©+¨T§+©T¿+ªVÿ+«W‚+¬W‹+­W +®W£+¯W¢+°WÎ+±W®+²W“+³YU+´YQ+µYO+¶YN+·YP+¸YÜ+¹YØ+ºYÿ+»Yã+¼Yè+½Z+¾Yå+¿Yê+ÀYÚ+ÁYæ+ÂZ+ÃYû+Ä[i+Å[£+Æ[¦+Ç[¤+È[¢+É[¥+Ê\+Ë\N+Ì\O+Í\M+Î\K+Ï\Ù+Ð\Ò+Ñ]÷+Ò^+Ó^%+Ô^+Õ^}+Ö^ +×^¦+Ø^ú+Ù_+Ú_-+Û_e+Ü_ˆ+Ý_…+Þ_Š+ß_‹+à_‡+á_Œ+â_‰+ã`+ä`+å` +æ`%+ç`+è`(+é`M+ê`p+ë`h+ì`b+í`F+î`C+ï`l+ð`k+ñ`j+ò`d+óbA+ôbÜ+õc+öc +÷bü+øbí+ùc+úbî+ûbý+üc+ýbñ+þb÷,@bï,Abì,Bbþ,Cbô,Dc,Ec,Fe?,GeE,He«,Ie½,Jeâ,Kf%,Lf-,Mf ,Nf',Of/,Pf,Qf(,Rf1,Sf$,Tf÷,Ugÿ,VgÓ,Wgñ,XgÔ,YgÐ,Zgì,[g¶,\g¯,]gõ,^gé,_gï,`gÄ,agÑ,bg´,cgÚ,dgå,eg¸,fgÏ,ggÞ,hgó,ig°,jgÙ,kgâ,lgÝ,mgÒ,nkj,okƒ,pk†,qkµ,rkÒ,sk×,tl,ulÉ,vm ,wm2,xm*,ymA,zm%,{m ,|m1,}m,~m,¡m;,¢m=,£m>,¤m6,¥m,¦lõ,§m9,¨m',©m8,ªm),«m.,¬m5,­m,®m+,¯p«,°pº,±p³,²p¬,³p¯,´p­,µp¸,¶p®,·p¤,¸r0,¹rr,ºro,»rt,¼ré,½rà,¾rá,¿s·,ÀsÊ,Ás»,Âs²,ÃsÍ,ÄsÀ,Ås³,Æu,Çu-,ÈuO,ÉuL,ÊuN,ËuK,Ìu«,Íu¤,Îu¥,Ïu¢,Ðu£,Ñvx,Òv†,Óv‡,Ôvˆ,ÕvÈ,ÖvÆ,×vÃ,ØvÅ,Ùw,Úvù,Ûvø,Üw ,Ýw ,Þvþ,ßvü,àw,áwÜ,âx,ãx,äx ,åx ,æyF,çyI,èyH,éyG,êy¹,ëyº,ìyÑ,íyÒ,îyË,ïz,ðz,ñzÿ,òzý,ó|},ô},õ},ö},÷} ,ø},ù},ú},û8,üŽ,ý¿,þ€-@€-A€ -B€-C€6-D€Ö-E€å-F€Ú-G€Ã-H€Ä-I€Ì-J€á-K€Û-L€Î-M€Þ-N€ä-O€Ý-Pô-Q‚"-R‚ç-Sƒ-Tƒ-U‚ã-V‚Û-W‚æ-Xƒ-Y‚å-Zƒ-[ƒ -\‚Ò-]‚×-^‚ñ-_ƒ-`‚Ü-a‚Ô-b‚Ñ-c‚Þ-d‚Ó-e‚ß-f‚ï-gƒ-h†P-i†y-j†{-k†z-lˆM-mˆk-n‰-o‰Ô-pŠ-qŠ-rŠ-sŒž-tŒ -ut-vs-w´-xŽÍ-yŽÌ-zð-{æ-|â-}ê-~å-¡í-¢ë-£ä-¤è-¥Ê-¦Î-§Á-¨Ã-©‘K-ª‘J-«‘Í-¬•‚-­–P-®–K-¯–L-°–M-±—b-²—i-³—Ë-´—í-µ—ó-¶˜-·˜¨-¸˜Û-¹˜ß-º™–-»™™-¼NX-½N³-¾P -¿P -ÀP#-ÁOï-ÂP&-ÃP%-ÄOø-ÅP)-ÆP-ÇP-ÈP<-ÉP-ÊP-ËP-ÌP-ÍOú-ÎP-ÏP-ÐP(-ÑOñ-ÒP!-ÓP -ÔP-ÕP-ÖOó-×Oî-ØP--ÙP*-ÚOþ-ÛP+-ÜP -ÝQ|-ÞQ¤-ßQ¥-àQ¢-áQÍ-âQÌ-ãQÆ-äQË-åRV-æR\-çRT-èR[-éR]-êS*-ëS-ìSŸ-íS-îSß-ïTè-ðU-ñU-òU7-óTü-ôTå-õTò-öU-÷Tú-øU-ùTé-úTí-ûTá-üU -ýTî-þTê.@Tæ.AU'.BU.CTý.DU.EW.FW.GWÂ.HWÔ.IWË.JWÃ.KX .LY.MYW.NYX.OYZ.PZ.QZ.RZ.SZ.TZ.UZ.VYì.WZ .XZ#.YZ).ZZ%.[Z .\Z .][k.^\X._[°.`[³.a[¶.b[´.c[®.d[µ.e[¹.f[¸.g\.h\Q.i\U.j\P.k\í.l\ý.m\û.n\ê.o\è.p\ð.q\ö.r].s\ô.t]î.u^-.v^+.w^«.x^­.y^§.z_1.{_’.|_‘.}_.~`Y.¡`c.¢`e.£`P.¤`U.¥`m.¦`i.§`o.¨`„.©`Ÿ.ª`š.«`.¬`”.­`Œ.®`….¯`–.°bG.±bó.²c.³bÿ.´cN.µc>.¶c/.·cU.¸cB.¹cF.ºcO.»cI.¼c:.½cP.¾c=.¿c*.Àc+.Ác(.ÂcM.ÃcL.ÄeH.ÅeI.Æe™.ÇeÁ.ÈeÅ.ÉfB.ÊfI.ËfO.ÌfC.ÍfR.ÎfL.ÏfE.ÐfA.Ñfø.Òg.Óg.Ôg.Õh!.Öh8.×hH.ØhF.ÙhS.Úh9.ÛhB.ÜhT.Ýh).Þh³.ßh.àhL.áhQ.âh=.ãgô.ähP.åh@.æh<.çhC.èh*.éhE.êh.ëh.ìhA.íkŠ.îk‰.ïk·.ðl#.ñl'.òl(.ól&.ôl$.õlð.ömj.÷m•.ømˆ.ùm‡.úmf.ûmx.ümw.ýmY.þm“/@ml/Am‰/Bmn/CmZ/Dmt/Emi/FmŒ/GmŠ/Hmy/Im…/Jme/Km”/LpÊ/MpØ/Npä/OpÙ/PpÈ/QpÏ/Rr9/Sry/Trü/Urù/Vrý/Wrø/Xr÷/Ys†/Zsí/[t /\sî/]sà/^sê/_sÞ/`uT/au]/bu\/cuZ/duY/eu¾/fuÅ/guÇ/hu²/iu³/ju½/ku¼/lu¹/muÂ/nu¸/ov‹/pv°/qvÊ/rvÍ/svÎ/tw)/uw/vw /ww(/xwé/yx0/zx'/{x8/|x/}x4/~x7/¡x%/¢x-/£x /¤x/¥x2/¦yU/§yP/¨y`/©y_/ªyV/«y^/¬y]/­yW/®yZ/¯yä/°yã/±yç/²yß/³yæ/´yé/µyØ/¶z„/·zˆ/¸zÙ/¹{/º{/»|‰/¼}!/½}/¾} /¿} /À} /Á}"/Â}/Ã}/Ä}/Å}/Æ}/Ç} /È}/É}/Ê:/Ë_/Ì”/ÍÅ/ÎÁ/Ï€/Ѐ/Ñ€/Ò€/Ó€/Ô€=/Õ€?/Ö€ñ/×/Ø€ð/Ù/Ú€í/Û€ô/Ü/Ý€ø/Þ€ó/ß/à€ý/á /â€ü/ã€ï/äí/åì/æ‚/ç‚/è‚*/é‚+/ê‚(/ë‚,/ì‚»/íƒ+/îƒR/ïƒT/ðƒJ/ñƒ8/òƒP/óƒI/ôƒ5/õƒ4/öƒO/÷ƒ2/øƒ9/ùƒ6/úƒ/ûƒ@/üƒ1/ýƒ(/þƒC0@†T0A†Š0B†ª0C†“0D†¤0E†©0F†Œ0G†£0H†œ0Iˆp0Jˆw0Kˆ0Lˆ‚0Mˆ}0Nˆy0OŠ0PŠ0QŠ0RŠ 0SŠ0TŠ 0UŠ0VŠ0WŠ0XŠ0YŠ0ZŒH0[Œz0\Œy0]Œ¡0^Œ¢0_w0`ެ0aŽÒ0bŽÔ0cŽÏ0d±0e0f0g÷0h0iú0jô0k0lý0m0nø0o•0pá0qÝ0râ0s‘R0t‘M0u‘L0v‘Ø0w‘Ý0x‘×0y‘Ü0z‘Ù0{•ƒ0|–b0}–c0~–a0¡–[0¢–]0£–d0¤–X0¥–^0¦–»0§˜â0¨™¬0©š¨0ªšØ0«›%0¬›20­›<0®N~0¯Pz0°P}0±P\0²PG0³PC0´PL0µPZ0¶PI0·Pe0¸Pv0¹PN0ºPU0»Pu0¼Pt0½Pw0¾PO0¿P0ÀPo0ÁPm0ÂQ\0ÃQ•0ÄQð0ÅRj0ÆRo0ÇRÒ0ÈRÙ0ÉRØ0ÊRÕ0ËS0ÌS0ÍS0ÎS?0ÏS@0ÐS>0ÑSÃ0Òfü0ÓUF0ÔUj0ÕUf0ÖUD0×U^0ØUa0ÙUC0ÚUJ0ÛU10ÜUV0ÝUO0ÞUU0ßU/0àUd0áU80âU.0ãU\0äU,0åUc0æU30çUA0èUW0éW0êW 0ëW 0ìWß0íX0îX 0ïX0ðWà0ñWä0òWú0óX0ôX50õW÷0öWù0÷Y 0øYb0ùZ60úZA0ûZI0üZf0ýZj0þZ@1@Z<1AZb1BZZ1CZF1DZJ1E[p1F[Ç1G[Å1H[Ä1I[Â1J[¿1K[Æ1L\ 1M\1N\1O\`1P\\1Q\]1R]1S]1T]1U]1V]1W]"1X]1Y])1Z]1[]1\]$1]]'1^]1_]â1`^81a^61b^31c^71d^·1e^¸1f^¶1g^µ1h^¾1i_51j_71k_W1l_l1m_i1n_k1o_—1p_™1q_ž1r_˜1s_¡1t_ 1u_œ1v`1w`£1x`‰1y` 1z`¨1{`Ë1|`´1}`æ1~`½1¡`Å1¢`»1£`µ1¤`Ü1¥`¼1¦`Ø1§`Õ1¨`Æ1©`ß1ª`¸1«`Ú1¬`Ç1­b1®b1¯bH1°c 1±c§1²cr1³c–1´c¢1µc¥1¶cw1·cg1¸c˜1¹cª1ºcq1»c©1¼c‰1½cƒ1¾c›1¿ck1Àc¨1Ác„1Âcˆ1Ãc™1Äc¡1Åc¬1Æc’1Çc1Èc€1Éc{1Êci1Ëch1Ìcz1Íe]1ÎeV1ÏeQ1ÐeY1ÑeW1ÒU_1ÓeO1ÔeX1ÕeU1ÖeT1×eœ1Øe›1Ùe¬1ÚeÏ1ÛeË1ÜeÌ1ÝeÎ1Þf]1ßfZ1àfd1áfh1âff1ãf^1äfù1åR×1æg1çh1èh¯1éh¢1êh“1ëhµ1ìh1íhv1îh±1ïh§1ðh—1ñh°1òhƒ1óhÄ1ôh­1õh†1öh…1÷h”1øh1ùh¨1úhŸ1ûh¡1üh‚1ýk21þkº2@kë2Akì2Bl+2CmŽ2Dm¼2Emó2FmÙ2Gm²2Hmá2ImÌ2Jmä2Kmû2Lmú2Mn2NmÇ2OmË2Pm¯2QmÑ2Rm®2SmÞ2Tmù2Um¸2Vm÷2Wmõ2XmÅ2YmÒ2Zn2[mµ2\mÚ2]më2^mØ2_mê2`mñ2amî2bmè2cmÆ2dmÄ2emª2fmì2gm¿2hmæ2ipù2jq 2kq 2lpý2mpï2nr=2or}2pr2qs2rs2ss2ts2us2vs‡2wt2xt 2yt2zt2{sþ2|t 2}tà2~tö2¡t÷2¢u2£u"2¤ue2¥uf2¦ub2§up2¨u2©uÔ2ªuÕ2«uµ2¬uÊ2­uÍ2®vŽ2¯vÔ2°vÒ2±vÛ2²w72³w>2´w<2µw62¶w82·w:2¸xk2¹xC2ºxN2»ye2¼yh2½ym2¾yû2¿z’2Àz•2Á{ 2Â{(2Ã{2Ä{,2Å{&2Æ{2Ç{2È{.2É|’2Ê|—2Ë|•2Ì}F2Í}C2Î}q2Ï}.2Ð}92Ñ}<2Ò}@2Ó}02Ô}32Õ}D2Ö}/2×}B2Ø}22Ù}12Ú=2Ûž2Üš2ÝÌ2ÞÎ2ßÒ2à€2á€J2â€F2ã/2ä2å#2æ+2ç)2è02é$2ê‚2ë‚52ì‚72í‚62î‚922ðƒž2ñƒ˜2òƒx2óƒ¢2ôƒ–2õƒ½2öƒ«2÷ƒ’2øƒŠ2ùƒ“2úƒ‰2ûƒ 2üƒw2ýƒ{2þƒ|3@ƒ†3Aƒ§3B†U3C_j3D†Ç3E†À3F†¶3G†Ä3H†µ3I†Æ3J†Ë3K†±3L†¯3M†É3NˆS3Oˆž3Pˆˆ3Qˆ«3Rˆ’3Sˆ–3Tˆ3Uˆ‹3V‰“3W‰3XŠ*3YŠ3ZŠ#3[Š%3\Š13]Š-3^Š3_Š3`Š"3aŒI3bŒZ3cŒ©3dŒ¬3eŒ«3fŒ¨3gŒª3hŒ§3ig3jf3k¾3lº3mŽÛ3nŽß3o3p 3q3r3s#3t3u3v3w3x3y 3z3{"3|3}3~3¡è3¢í3£ý3¤‘W3¥‘Î3¦‘õ3§‘æ3¨‘ã3©‘ç3ª‘í3«‘é3¬•‰3­–j3®–u3¯–s3°–x3±–p3²–t3³–v3´–w3µ–l3¶–À3·–ê3¸–é3¹zà3ºzß3»˜3¼˜3½›Z3¾œå3¿žu3Àž3Áž¥3ž»3ÃP¢3ÄP3ÅP…3ÆP™3ÇP‘3ÈP€3ÉP–3ÊP˜3ËPš3Ìg3ÍQñ3ÎRr3ÏRt3ÐRu3ÑRi3ÒRÞ3ÓRÝ3ÔRÛ3ÕSZ3ÖS¥3×U{3ØU€3ÙU§3ÚU|3ÛUŠ3ÜU3ÝU˜3ÞU‚3ßUœ3àUª3áU”3âU‡3ãU‹3äUƒ3åU³3æU®3çUŸ3èU>3éU²3êUš3ëU»3ìU¬3íU±3îU~3ïU‰3ðU«3ñU™3òW 3óX/3ôX*3õX43öX$3÷X03øX13ùX!3úX3ûX 3üXù3ýXú3þY`4@Zw4AZš4BZ4CZ’4DZ›4EZ§4F[s4G[q4H[Ò4I[Ì4J[Ó4K[Ð4L\ 4M\ 4N\14O]L4P]P4Q]44R]G4S]ý4T^E4U^=4V^@4W^C4X^~4Y^Ê4Z^Á4[^Â4\^Ä4]_<4^_m4__©4`_ª4a_¨4b`Ñ4c`á4d`²4e`¶4f`à4ga4ha#4i`ú4ja4k`ð4l`û4m`ô4nah4o`ñ4pa4q`ö4ra 4sa4ta4ub4vbI4wc£4xcŒ4ycÏ4zcÀ4{cé4|cÉ4}cÆ4~cÍ4¡cÒ4¢cã4£cÐ4¤cá4¥cÖ4¦cí4§cî4¨cv4©cô4ªcê4«cÛ4¬dR4­cÚ4®cù4¯e^4°ef4±eb4²ec4³e‘4´e4µe¯4¶fn4·fp4¸ft4¹fv4ºfo4»f‘4¼fz4½f~4¾fw4¿fþ4Àfÿ4Ág4Âg4Ãhú4ÄhÕ4Åhà4ÆhØ4Çh×4Èi4Éhß4Êhõ4Ëhî4Ìhç4Íhù4ÎhÒ4Ïhò4Ðhã4ÑhË4ÒhÍ4Ói 4Ôi4Õi4ÖhÉ4×hÚ4Øin4Ùhû4Úk>4Ûk:4Ük=4Ýk˜4Þk–4ßk¼4àkï4ál.4âl/4ãl,4än/4ån84ænT4çn!4èn24éng4ênJ4ën 4ìn%4ín#4în4ïn[4ðnX4ñn$4ònV4ónn4ôn-4õn&4öno4÷n44ønM4ùn:4ún,4ûnC4ün4ýn>4þnË5@n‰5An5BnN5Cnc5DnD5Enr5Fni5Gn_5Hq5Iq5Jq&5Kq05Lq!5Mq65Nqn5Oq5PrL5Qr„5Rr€5Ss65Ts%5Us45Vs)5Wt:5Xt*5Yt35Zt"5[t%5\t55]t65^t45_t/5`t5at&5bt(5cu%5du&5euk5fuj5guâ5huÛ5iuã5juÙ5kuØ5luÞ5muà5nv{5ov|5pv–5qv“5rv´5svÜ5twO5uwí5vx]5wxl5xxo5yz 5zz5{z 5|z5}z5~z˜5¡z—5¢z–5£zå5¤zã5¥{I5¦{V5§{F5¨{P5©{R5ª{T5«{M5¬{K5­{O5®{Q5¯|Ÿ5°|¥5±}^5²}P5³}h5´}U5µ}+5¶}n5·}r5¸}a5¹}f5º}b5»}p5¼}s5½U„5¾Ô5¿Õ5À€ 5Á€R5€…5ÃU5ÄT5ÅK5ÆQ5ÇN5È95ÉF5Ê>5ËL5ÌS5Ít5΂5Ï‚5Ѓé5Ñ„5Òƒø5Ó„ 5Ôƒà5ÕƒÅ5Ö„ 5׃Á5؃ï5Ùƒñ5Úƒô5Û„W5Ü„ 5݃ð5Þ„ 5߃Ì5àƒý5áƒò5âƒÊ5ã„85ä„5å„5æƒÜ5ç„5èƒÔ5éƒß5ê†[5ë†ß5ì†Ù5í†í5î†Ô5ï†Û5ð†ä5ñ†Ð5ò†Þ5óˆW5ôˆÁ5õˆÂ5öˆ±5÷‰ƒ5ø‰–5ùŠ;5úŠ`5ûŠU5üŠ^5ýŠ<5þŠA6@ŠT6AŠ[6BŠP6CŠF6DŠ46EŠ:6FŠ66GŠV6HŒa6IŒ‚6JŒ¯6KŒ¼6LŒ³6MŒ½6NŒÁ6OŒ»6PŒÀ6QŒ´6RŒ·6SŒ¶6TŒ¿6UŒ¸6VŠ6W…6X6YÎ6ZÝ6[Ë6\Ú6]Ñ6^Ì6_Û6`Æ6aŽû6bŽø6cŽü6dœ6e.6f56g16h86i26j66k‘6lõ6m‘ 6nþ6o‘c6p‘e6q‘Ï6r’6s’6t’#6u’ 6v’6w’ 6x’6y’6z’6{•”6|•6}•‹6~•‘6¡•“6¢•’6£•Ž6¤–Š6¥–Ž6¦–‹6§–}6¨–…6©–†6ª–6«–r6¬–„6­–Á6®–Å6¯–Ä6°–Æ6±–Ç6²–ï6³–ò6´—Ì6µ˜6¶˜6·˜6¸˜ç6¹˜ê6º˜ï6»˜é6¼˜ò6½˜í6¾™®6¿™­6ÀžÃ6ÁžÍ6žÑ6ÃN‚6ÄP­6ÅPµ6ÆP²6ÇP³6ÈPÅ6ÉP¾6ÊP¬6ËP·6ÌP»6ÍP¯6ÎPÇ6ÏR6ÐRw6ÑR}6ÒRß6ÓRæ6ÔRä6ÕRâ6ÖRã6×S/6ØUß6ÙUè6ÚUÓ6ÛUæ6ÜUÎ6ÝUÜ6ÞUÇ6ßUÑ6àUã6áUä6âUï6ãUÚ6äUá6åUÅ6æUÆ6çUå6èUÉ6éW6êW6ëX^6ìXQ6íXX6îXW6ïXZ6ðXT6ñXk6òXL6óXm6ôXJ6õXb6öXR6÷XK6øYg6ùZÁ6úZÉ6ûZÌ6üZ¾6ýZ½6þZ¼7@Z³7AZÂ7BZ²7C]i7D]o7E^L7F^y7G^É7H^È7I_7J_Y7K_¬7L_®7Ma7Na7OaH7Pa7Q`ó7Ra7S`ù7Ta7Ua7VaN7WaL7XaD7YaM7Za>7[a47\a'7]a 7^a7_a77`b!7ab"7bd7cd>7dd7ed*7fd-7gd=7hd,7id7jd7kd7ld 7md67nd7od7pd7qel7reŸ7se°7tf—7uf‰7vf‡7wfˆ7xf–7yf„7zf˜7{f7|g7}i”7~im7¡iZ7¢iw7£i`7¤iT7¥iu7¦i07§i‚7¨iJ7©ih7ªik7«i^7¬iS7­iy7®i†7¯i]7°ic7±i[7²kG7³kr7´kÀ7µk¿7¶kÓ7·ký7¸n¢7¹n¯7ºnÓ7»n¶7¼nÂ7½n7¾n7¿nÇ7ÀnÅ7Án¥7Ân˜7Ãn¼7Änº7Ån«7ÆnÑ7Çn–7Ènœ7ÉnÄ7ÊnÔ7Ënª7Ìn§7Ín´7ÎqN7ÏqY7Ðqi7Ñqd7ÒqI7Óqg7Ôq\7Õql7Öqf7×qL7Øqe7Ùq^7ÚqF7Ûqh7ÜqV7Ýr:7ÞrR7ßs77àsE7ás?7âs>7ãto7ätZ7åtU7æt_7çt^7ètA7ét?7êtY7ët[7ìt\7íuv7îux7ïv7ðuð7ñv7òuò7óuñ7ôuú7õuÿ7öuô7÷uó7øvÞ7ùvß7úw[7ûwk7üwf7ýw^7þwc8@wy8Awj8Bwl8Cw\8Dwe8Ewh8Fwb8Gwî8HxŽ8Ix°8Jx—8Kx˜8LxŒ8Mx‰8Nx|8Ox‘8Px“8Qx8Ryz8Sy8Ty8U„,8Vy½8Wz8Xz8Yz 8Zz8[z8\z8]zŸ8^z 8_{w8`{À8a{`8b{n8c{g8d|±8e|³8f|µ8g}“8h}y8i}‘8j}8k}8l}[8mn8ni8oj8pr8q©8r¨8s¤8t€V8u€X8v€†8w€„8xq8yp8zx8{e8|n8}s8~k8¡y8¢z8£f8¤‚8¥‚G8¦„‚8§„w8¨„=8©„18ª„u8«„f8¬„k8­„I8®„l8¯„[8°„<8±„58²„a8³„c8´„i8µ„m8¶„F8·†^8¸†\8¹†_8º†ù8»‡8¼‡8½‡8¾‡8¿†þ8À†û8Á‡8‡8Ç8ć 8ňY8ƈß8LjÔ8ȈÙ8ɈÜ8ʈØ8ˈÝ8̈á8͈Ê8ΈÕ8ψÒ8Љœ8щã8ÒŠk8ÓŠr8ÔŠs8ÕŠf8ÖŠi8׊p8ØŠ‡8ÙŠ|8ÚŠc8ÛŠ 8ÜŠq8ÝŠ…8ÞŠm8ߊb8àŠn8áŠl8âŠy8ãŠ{8äŠ>8åŠh8æŒb8猊8茉8éŒÊ8êŒÇ8ëŒÈ8ìŒÄ8팲8îŒÃ8ïŒÂ8ðŒÅ8ñá8òß8óè8ôï8õó8öú8÷ê8øä8ùæ8ú޲8û8ü 8ýŽþ8þ 9@Ÿ9A²9BK9CJ9DS9EB9FT9G<9HU9IP9JG9KO9LN9MM9NQ9O>9PA9Q‘9R‘9S‘l9T‘j9U‘i9V‘É9W’79X’W9Y’89Z’=9[’@9\’>9]’[9^’K9_’d9`’Q9a’49b’I9c’M9d’E9e’99f’?9g’Z9h•˜9i–˜9j–”9k–•9l–Í9m–Ë9n–É9o–Ê9p–÷9q–û9r–ù9s–ö9t—V9u—t9v—v9w˜9x˜9y˜9z˜ 9{˜9|˜ 9}˜ü9~˜ô9¡˜ý9¢˜þ9£™³9¤™±9¥™´9¦šá9§œé9¨ž‚9©Ÿ9ªŸ9«Ÿ 9¬Pç9­Pî9®På9¯PÖ9°Pí9±PÚ9²PÕ9³PÏ9´PÑ9µPñ9¶PÎ9·Pé9¸Qb9¹Qó9ºRƒ9»R‚9¼S19½S­9¾Uþ9¿V9ÀV9ÁV9ÂUý9ÃV9ÄV9ÅV 9ÆV 9ÇV9ÈU÷9ÉV9ÊV9ËV9ÌV9ÍUö9ÎW9ÏW9ÐXu9ÑX~9ÒXƒ9ÓX“9ÔXŠ9ÕXy9ÖX…9×X}9ØXý9ÙY%9ÚY"9ÛY$9ÜYj9ÝYi9ÞZá9ßZæ9àZé9áZ×9âZÖ9ãZØ9äZã9å[u9æ[Þ9ç[ç9è[á9é[å9ê[æ9ë[è9ì[â9í[ä9î[ß9ï\ 9ð\b9ñ]„9ò]‡9ó^[9ô^c9õ^U9ö^W9÷^T9ø^Ó9ù^Ö9ú_ 9û_F9ü_p9ý_¹9þaG:@a?:AaK:Baw:Cab:Dac:Ea_:FaZ:GaX:Hau:Ib*:Jd‡:KdX:LdT:Md¤:Ndx:Od_:Pdz:QdQ:Rdg:Sd4:Tdm:Ud{:Ver:We¡:Xe×:YeÖ:Zf¢:[f¨:\f:]iœ:^i¨:_i•:`iÁ:ai®:biÓ:ciË:di›:ei·:fi»:gi«:hi´:iiÐ:jiÍ:ki­:liÌ:mi¦:niÃ:oi£:pkI:qkL:rl3:so3:to:unþ:vo:wnô:xo):yo>:zo :{o,:|o:}o:~o":¡nÿ:¢nï:£o:¤o1:¥o8:¦o2:§o#:¨o:©o+:ªo/:«oˆ:¬o*:­nì:®o:¯nò:°nÌ:±n÷:²q”:³q™:´q}:µqŠ:¶q„:·q’:¸r>:¹r’:ºr–:»sD:¼sP:½td:¾tc:¿tj:Àtp:Átm:Âu:Ãu‘:Äv':Åv :Æv :Çv :Èv:Évá:Êvã:Ëw„:Ìw}:Íw:Îwa:ÏxÁ:ÐxŸ:Ñx§:Òx³:Óx©:Ôx£:ÕyŽ:Öy:×y:Øz.:Ùz1:Úzª:Ûz©:Üzí:Ýzï:Þ{¡:ß{•:à{‹:á{u:â{—:ã{:ä{”:å{:æ{¸:ç{‡:è{„:é|¹:ê|½:ë|¾:ì}»:í}°:î}œ:ï}½:ð}¾:ñ} :ò}Ê:ó}´:ô}²:õ}±:ö}º:÷}¢:ø}¿:ù}µ:ú}¸:û}­:ü}Ò:ý}Ç:þ}¬;@p;Aà;Bá;Cß;D€^;E€Z;F€‡;GP;H€;I;Jˆ;KŠ;L;M‚;Nç;Oú;P‚;Q‚;R‚;S‚K;T„É;U„¿;V„Æ;W„Ä;X„™;Y„ž;Z„²;[„œ;\„Ë;]„¸;^„À;_„Ó;`„;a„¼;b„Ñ;c„Ê;d‡?;e‡;f‡;;g‡";h‡%;i‡4;j‡;k‡U;l‡7;m‡);nˆó;o‰;pˆô;qˆù;rˆø;sˆý;tˆè;u‰;vˆï;wЦ;xŠŒ;yŠž;zŠ£;{Š;|Š¡;}Š“;~Ф;¡Šª;¢Š¥;£Š¨;¤Š˜;¥Š‘;¦Šš;§Š§;¨Œj;©Œ;ªŒŒ;«ŒÓ;¬ŒÑ;­ŒÒ;®k;¯™;°•;±ü;²;³;´;µ;¶£;·`;¸X;¹\;ºc;»Y;¼^;½b;¾];¿[;À‘;Á‘;‘;Ñu;Ä‘x;Å‘w;Æ‘t;Ç’x;È’€;É’…;Ê’˜;Ë’–;Ì’{;Í’“;Î’œ;Ï’¨;Ð’|;Ñ’‘;Ò•¡;Ó•¨;Ô•©;Õ•£;Ö•¥;ו¤;Ø–™;Ù–œ;Ú–›;Û–Ì;Ü–Ò;Ý—;Þ—|;ß—…;à—ö;á˜;â˜;㘯;䘱;å™;æ™;ç™ ;è™ ;é™Á;ꚯ;ëš°;ìšæ;í›A;î›B;ïœô;ðœö;ñœó;òž¼;óŸ;;ôŸJ;õQ;öQ;÷Pû;øPõ;ùPù;úQ;ûQ;üQ ;ýQ;þQÜ<@R‡@%>Ai>Bn>Ch>Dm>Ew>F‘0>G‘->H‘'>I‘1>J‘‡>K‘‰>L‘‹>M‘ƒ>N’Å>O’»>P’·>Q’ê>R’¬>S’ä>T’Á>U’³>V’¼>W’Ò>X’Ç>Y’ð>Z’²>[•­>\•±>]—>^—>_—>`— >a—`>b—>c—‹>d—>e˜!>f˜+>g˜>h˜³>i™ >j™>k™>l™>m™Ý>n™Ð>o™ß>p™Û>q™Ñ>r™Õ>s™Ò>t™Ù>uš·>všî>wšï>x›'>y›E>z›D>{›w>|›o>}>~ >¡>¢ž©>£ž¾>¤žÎ>¥X¨>¦ŸR>§Q>¨Q>©Q>ªQ>«Q>¬Q€>­Qª>®QÝ>¯R‘>°R“>±Ró>²VY>³Vk>´Vy>µVi>¶Vd>·Vx>¸Vj>¹Vh>ºVe>»Vq>¼Vo>½Vl>¾Vb>¿Vv>ÀXÁ>ÁX¾>ÂXÇ>ÃXÅ>ÄYn>Å[>Æ[4>Ç[x>È[ð>É\>Ê_J>Ëa²>Ìa‘>Ía©>ÎaŠ>ÏaÍ>Ða¶>Ña¾>ÒaÊ>ÓaÈ>Ôb0>ÕdÅ>ÖdÁ>×dË>Ød»>Ùd¼>ÚdÚ>ÛdÄ>ÜdÇ>ÝdÂ>ÞdÍ>ßd¿>àdÒ>ádÔ>âd¾>ãet>äfÆ>åfÉ>æf¹>çfÄ>èfÇ>éf¸>êj=>ëj8>ìj:>íjY>îjk>ïjX>ðj9>ñjD>òjb>ója>ôjK>õjG>öj5>÷j_>øjH>ùkY>úkw>ûl>üoÂ>ýo±>þo¡?@oÃ?Ao¤?BoÁ?Co§?Do³?EoÀ?Fo¹?Go¶?Ho¦?Io ?Jo´?Kq¾?LqÉ?MqÐ?NqÒ?OqÈ?PqÕ?Qq¹?RqÎ?SqÙ?TqÜ?UqÃ?VqÄ?Wsh?Xtœ?Yt£?Zt˜?[tŸ?\tž?]tâ?^u ?_u ?`v4?av8?bv:?cvç?dvå?ew ?fwž?gwŸ?hw¥?ixè?jxÚ?kxì?lxç?my¦?nzM?ozN?pzF?qzL?rzK?szº?t{Ù?u|?v{É?w{ä?x{Û?y{á?z{é?{{æ?||Õ?}|Ö?~~ ?¡~?¢~?£~?¤~#?¥~?¦~?§~ ?¨~?©y?ª²?«ð?¬ñ?­î?®€(?¯³?°©?±¨?²û?³‚?´‚X?µ‚Y?¶…J?·…Y?¸…H?¹…h?º…i?»…C?¼…I?½…m?¾…j?¿…^?À‡ƒ?Á‡Ÿ?‡ž?Ç¢?ć?ňa?Ɖ*?lj2?ȉ%?ɉ+?ʉ!?ˉª?̉¦?ÍŠæ?Ίú?ÏŠë?Њñ?Ñ‹?ÒŠÜ?ÓŠç?ÔŠî?ÕŠþ?Ö‹?׋?ØŠ÷?ÙŠí?ÚŠó?ÛŠö?ÜŠü?ÝŒk?ÞŒm?ߌ“?àŒô?áŽD?âŽ1?ãŽ4?äŽB?åŽ9?æŽ5?ç;?è/?é8?ê3?ë¨?ì¦?íu?ît?ïx?ðr?ñ|?òz?ó‘4?ô‘’?õ“ ?ö“6?÷’ø?ø“3?ù“/?ú“"?û’ü?ü“+?ý“?þ“@@“@A“&@B“!@C“@D“.@E“@F•»@G–§@H–¨@I–ª@J–Õ@K—@L—@M—@N— @O—@P—@Q—[@R—\@S—f@T—˜@U˜0@V˜8@W˜;@X˜7@Y˜-@Z˜9@[˜$@\™@]™(@^™@_™@`™!@a™@b™í@c™â@d™ñ@eš¸@fš¼@gšû@hší@i›(@j›‘@k@l#@m&@n(@o@p@qžØ@ržÔ@sŸ@tŸœ@uQ*@vQ@wQ!@xQ2@yRõ@zVŽ@{V€@|V@}V…@~V‡@¡V@¢XÕ@£XÓ@¤XÑ@¥XÎ@¦[0@§[*@¨[$@©[z@ª\7@«\h@¬]¼@­]º@®]½@¯]¸@°^k@±_L@²_½@³aÉ@´aÂ@µaÇ@¶aæ@·aË@¸b2@¹b4@ºdÎ@»dÊ@¼dØ@½dà@¾dð@¿dæ@Àdì@Ádñ@Âdâ@Ãdí@Äe‚@Åeƒ@ÆfÙ@ÇfÖ@Èj€@Éj”@Êj„@Ëj¢@Ìjœ@ÍjÛ@Îj£@Ïj~@Ðj—@Ñj@Òj @Ók\@Ôk®@ÕkÚ@Öl@×oØ@Øoñ@Ùoß@Úoà@ÛoÛ@Üoä@Ýoë@Þoï@ßo€@àoì@áoá@âoé@ãoÕ@äoî@åoð@æqç@çqß@èqî@éqæ@êqå@ëqí@ìqì@íqô@îqà@ïr5@ðrF@ñsp@òsr@ót©@ôt°@õt¦@öt¨@÷vF@øvB@ùvL@úvê@ûw³@üwª@ýw°@þw¬A@w§AAw­ABwïACx÷ADxúAExôAFxïAGyAHy§AIyªAJzWAKz¿AL|AM| AN{þAO{÷AP| AQ{àAR|àAS|ÜAT|ÞAU|âAV|ßAW|ÙAX|ÝAY~.AZ~>A[~FA\~7A]~2A^~CA_~+A`~=Aa~1Ab~EAc~AAd~4Ae~9Af~HAg~5Ah~?Ai~/AjDAkóAlüAm€qAn€rAo€pAp€oAq€sArÆAsÃAtºAuÂAvÀAw¿Ax½AyÉAz¾A{èA|‚ A}‚qA~…ªA¡…„A¢…~A£…œA¤…‘A¥…”A¦…¯A§…›A¨…‡A©…¨Aª…ŠA«†gA¬‡ÀA­‡ÑA®‡³A¯‡ÒA°‡ÆA±‡«A²‡»A³‡ºA´‡ÈAµ‡ËA¶‰;A·‰6A¸‰DA¹‰8Aº‰=A»‰¬A¼‹A½‹A¾‹A¿‹AÀ‹ AÁ‹ A‹AËAÄ‹AÅŒAAÆŒ?AÇŒsAÈŒúAÉŒýAÊŒüAËŒøAÌŒûAͨAÎŽIAÏŽKAÐŽHAÑŽJAÒDAÓ>AÔBAÕEAÖ?A×AØ}AÙ„AÚAÛ‚AÜ€AÝ‘9AÞ‘£Aß‘žAà‘œAá“MAâ“‚Aã“(Aä“uAå“JAæ“eAç“KAè“Aé“~Aê“lAë“[Aì“pAí“ZAî“TAï•ÊAð•ËAñ•ÌAò•ÈAó•ÆAô–±Aõ–¸Aö–ÖA÷—Aø—Aù— Aú—ÓAû˜FAü˜¶Aý™5AþšB@™ÿBA›®BB›«BC›ªBD›­BE;BF?BGž‹BHžÏBIžÞBJžÜBKžÝBLžÛBMŸ>BNŸKBOSâBPV•BQV®BRXÙBSXØBT[8BU_]BVaãBWb3BXdôBYdòBZdþB[eB\dúB]dûB^d÷B_e·B`fÜBag&Bbj³Bcj¬BdjÃBej»Bfj¸BgjÂBhj®Bij¯Bjk_BkkxBlk¯Bmp Bnp BooþBppBqoúBrpBspBtqûBuqüBvqþBwqøBxswBysuBzt§B{t¿B|uB}vVB~vXB¡vRB¢w½B£w¿B¤w»B¥w¼B¦yB§y®B¨zaB©zbBªz`B«zÄB¬zÅB­|+B®|'B¯|*B°|B±|#B²|!B³|çB´~TBµ~UB¶~^B·~ZB¸~aB¹~RBº~YB»HB¼ùB½ûB¾€wB¿€vBÀÍBÁÏB‚ BÃ…ÏBÄ…©BÅ…ÍBÆ…ÐBÇ…ÉBÈ…°BÉ…ºBÊ…¹BË…¦ḂïB͇ìB·òBχàBЉ†Bщ²BÒ‰ôBÓ‹(BÔ‹9BÕ‹,BÖ‹+B׌PBØBÙŽYBÚŽcBÛŽfBÜŽdBÝŽ_BÞŽUBߎÀBàIBáMBâ‡BãƒBäˆBå‘«B摬Bç‘ÐBè“”B铊Bê“–Bë“¢B쓳Bí“®BBï“°Bð“˜Bñ“šBò“—Bó•ÔBô•ÖBõ•ÐBö•ÕB÷–âBø–ÜBù–ÙBú–ÛBû–ÞBü—$Bý—£Bþ—¦C@—­CA—ùCB˜MCC˜OCD˜LCE˜NCF˜SCG˜ºCH™>CI™?CJ™=CK™.CL™¥CMšCNšÁCO›CP›CQ›OCR›NCS›MCT›ÊCU›ÉCV›ýCW›ÈCX›ÀCYQCZ]C[`C\žàC]ŸC^Ÿ,C_Q3C`V¥CaXÞCbXßCcXâCd[õCeŸCf^ìCgaòCha÷CiaöCjaõCkeCleCmfàCnfÝCojåCpjÝCqjÚCrjÓCspCtpCup(CvpCwpCxpCypCzrC{r C|rXC}r¢C~sxC¡szC¢t½C£tÊC¤tãC¥u‡C¦u†C§v_C¨vaC©wÇCªyC«y±C¬zkC­ziC®|>C¯|?C°|8C±|=C²|7C³|@C´~kCµ~mC¶~yC·~iC¸~jC¹…Cº~sC»¶C¼¹C½¸C¾ØC¿…éCÀ…ÝCÁ…êCÂ…ÕCÃ…äCÄ…åCÅ…÷CƇûCLjCȈ CɇùCʇþCˉ`C̉_C͉VCΉ^CÏ‹ACЋ\CÑ‹XCÒ‹ICÓ‹ZCÔ‹NCÕ‹OCÖ‹FC׋YCØCÙ CÚŽ|CÛŽrCÜŽ‡CÝŽvCÞŽlCߎzCàŽtCáTCâNCã­CäŠCå‹C摱Cç‘®Cè“áCé“ÑCê“ßCë“ÃCì“ÈCí“ÜCî“ÝCï“ÖCð“âCñ“ÍCò“ØCó“äCô“×Cõ“èCö•ÜC÷–´Cø–ãCù—*Cú—'Cû—aCü—ÜCý—ûCþ˜^D@˜XDA˜[DB˜¼DC™EDD™IDEšDFšDG› DH›èDI›çDJ›ÖDK›ÛDL‰DMaDNrDOjDPlDQž’DRž—DSž“DTž´DURøDVV¨DWV·DXV¶DYV´DZV¼D[XäD\[@D][CD^[}D_[öD`]ÉDaaøDbaúDceDdeDeeDffæDgg'DhjìDip>Djp0Dkp2DlrDms{DntÏDovbDpveDqy&Dry*Dsy,Dty+DuzÇDvzöDw|LDx|CDy|MDz|ïD{|ðD|®D}~}D~~|D¡~‚D¢LD£€D¤ÚD¥‚fD¦…ûD§…ùD¨†D©…úDª†D«† D¬†D­† D®ˆD¯ˆD°‰dD±‰ºD²‰øD³‹pD´‹lDµ‹fD¶‹oD·‹_D¸‹kD¹Dº D»Ž‰D¼ŽD½Ž…D¾Ž‚D¿‘´DÀ‘ËDÁ”D”DÓýDÄ•áDÅ—0DƘÄDÇ™RDÈ™QDÉ™¨DÊš+DËš0DÌš7DÍš5DΜDÏœ DОyDÑžµDÒžèDÓŸ/DÔŸ_DÕŸcDÖŸaD×Q7DØQ8DÙVÁDÚVÀDÛVÂDÜYDÝ\lDÞ]ÍDßaüDàaþDáeDâeDãe•DäféDåjûDækDçjúDèk²DépLDêrDër§DìtÖDítÔDîviDïwÓDð|PDñ~Dò~ŒDó¼Dô†Dõ†-Dö†D÷ˆ#Døˆ"Dùˆ!DúˆDû‰jDü‰lDý‰½Dþ‹tE@‹wEA‹}EBECŽŠEDŽEEŽ‹EF_EG¯EH‘ºEI”.EJ”3EK”5EL”:EM”8EN”2EO”+EP•âEQ—8ER—9ES—2ET—ÿEU˜gEV˜eEW™WEXšEEYšCEZš@E[š>E\šÏE]›TE^›QE_œ-E`œ%Ea¯Eb´EcÂEd¸EežEfžïEgŸEhŸ\EiŸfEjŸgEkQE¶—ÃE·—ÁE¸˜kE¹™UEºšUE»šME¼šÒE½›E¾œIE¿œ1EÀœ>EÁœ;EÂÓEÃ×EÄŸ4EÅŸlEÆŸjEÇŸ”EÈVÌEÉ]ÖEÊbEËe#EÌe+EÍe*EÎfìEÏkEÐtÚEÑzÊEÒ|dEÓ|cEÔ|eEÕ~“EÖ~–E×~”EØâEÙ†8EÚ†?EÛˆ1EÜ‹ŠEÝEÞEß”cEà”`Eá”dEâ—hEã˜oEä™\EåšZEæš[EçšWEèšÓEéšÔEêšÑEëœTEìœWEíœVEîåEEðžôEñVÑEòXéEóe,Eôp^EõvqEövrE÷w×EøPEùˆEúˆ6Eûˆ9EüˆbEý‹“Eþ‹’F@‹–FA‚wFBFC‘ÀFD”jFE—BFF—HFG—DFH—ÆFI˜pFJš_FK›"FL›XFMœ_FNùFOúFPž|FQž}FRŸFSŸwFTŸrFU^óFVkFWpcFX|lFY|nFZˆ;F[‰ÀF\Ž¡F]‘ÁF^”rF_”pF`˜qFa™^FbšÖFc›#FdžÌFepdFfwÚFg‹šFh”wFi—ÉFjšbFkšeFl~œFm‹œFnŽªFo‘ÅFp”}Fq”~Fr”|FsœwFtœxFuž÷FvŒTFw”FxžFyr(FzšjF{›1F|žF}žF~|rF¡0þF¢0F£0žF¤0F¥0AF¦0BF§0CF¨0DF©0EFª0FF«0GF¬0HF­0IF®0JF¯0KF°0LF±0MF²0NF³0OF´0PFµ0QF¶0RF·0SF¸0TF¹0UFº0VF»0WF¼0XF½0YF¾0ZF¿0[FÀ0\FÁ0]FÂ0^FÃ0_FÄ0`FÅ0aFÆ0bFÇ0cFÈ0dFÉ0eFÊ0fFË0gFÌ0hFÍ0iFÎ0jFÏ0kFÐ0lFÑ0mFÒ0nFÓ0oFÔ0pFÕ0qFÖ0rF×0sFØ0tFÙ0uFÚ0vFÛ0wFÜ0xFÝ0yFÞ0zFß0{Fà0|Fá0}Fâ0~Fã0Fä0€Få0Fæ0‚Fç0ƒFè0„Fé0…Fê0†Fë0‡Fì0ˆFí0‰Fî0ŠFï0‹Fð0ŒFñ0Fò0ŽFó0Fô0Fõ0‘Fö0’F÷0“Fø0¡Fù0¢Fú0£Fû0¤Fü0¥Fý0¦Fþ0§G@0¨GA0©GB0ªGC0«GD0¬GE0­GF0®GG0¯GH0°GI0±GJ0²GK0³GL0´GM0µGN0¶GO0·GP0¸GQ0¹GR0ºGS0»GT0¼GU0½GV0¾GW0¿GX0ÀGY0ÁGZ0ÂG[0ÃG\0ÄG]0ÅG^0ÆG_0ÇG`0ÈGa0ÉGb0ÊGc0ËGd0ÌGe0ÍGf0ÎGg0ÏGh0ÐGi0ÑGj0ÒGk0ÓGl0ÔGm0ÕGn0ÖGo0×Gp0ØGq0ÙGr0ÚGs0ÛGt0ÜGu0ÝGv0ÞGw0ßGx0àGy0áGz0âG{0ãG|0äG}0åG~0æG¡0çG¢0èG£0éG¤0êG¥0ëG¦0ìG§0íG¨0îG©0ïGª0ðG«0ñG¬0òG­0óG®0ôG¯0õG°0öG±G²G³G´GµG¶G·G¸G¹GºG»#G¼$G½%G¾&G¿'GÀ(GÁ)GÂ*GÃ+GÄ,GÅ-GÆ.GÇ/GÈ0GÉ1GÊ2GË3GÌ4GÍ5GÎQGÏ6GÐ7GÑ8GÒ9GÓ:GÔ;GÕGØ?GÙ@GÚAGÛBGÜCGÝDGÞEGßFGàGGáHGâIGãJGäKGåLGæMGçNGèOGé$`Gê$aGë$bGì$cGí$dGî$eGï$fGð$gGñ$hGò$iGó$tGô$uGõ$vGö$wG÷$xGø$yGù$zGú${Gû$|Gü$}I@NBIAN\IBQõICSIDS‚IENIFN IGNGIHNIIV×IJú IK\nIL_sIMNINQ‡IONIPN.IQN“IRNÂISNÉITNÈIUQ˜IVRüIWSlIXS¹IYW IZYI[Y,I\\I]]ÿI^eáI_k³I`kÌIalIbr?IcN1IdNIðg9Iñg8Iòg;Ióg:Iôg?IõgJaOgJbORJcO_JdOAJeOXJfO-JgO3JhO?JiOaJjQJkQ¹JlRJmRJnR!JoR­JpR®JqS JrScJsSrJtSŽJuSJvT0JwT7JxT*JyTTJzTEJ{TJ|TJ}T%J~TJ¡T=J¢TOJ£TAJ¤T(J¥T$J¦TGJ§VîJ¨VçJ©VåJªWAJ«WEJ¬WLJ­WIJ®WKJ¯WRJ°YJ±Y@J²Y¦J³Y˜J´Y JµY—J¶YŽJ·Y¢J¸YJ¹YJºY§J»Y¡J¼[ŽJ½[’J¾\(J¿\*JÀ\JÁ\JÂ\ˆJÃ\‹JÄ\‰JÅ\’JÆ\ŠJÇ\†JÈ\“JÉ\•JÊ]àJË^ JÌ^JÍ^‹JÎ^‰JÏ^ŒJÐ^ˆJÑ^JÒ_JÓ_JÔ_xJÕ_vJÖ_ÒJ×_ÑJØ_ÐJÙ_íJÚ_èJÛ_îJÜ_óJÝ_áJÞ_äJß_ãJà_úJá_ïJâ_÷Jã_ûJä`Jå_ôJæb:JçbƒJèbŒJébŽJêbJëb”Jìb‡JíbqJîb{JïbzJðbpJñbJòbˆJóbwJôb}JõbrJöbtJ÷e7JøeðJùeôJúeóJûeòJüeõJýgEJþgGK@gYKAgUKBgLKCgHKDg]KEgMKFgZKGgKKHkÐKIlKJlKKlxKLlgKMlkKNl„KOl‹KPlKQlqKRloKSliKTlšKUlmKVl‡KWl•KXlœKYlfKZlsK[leK\l{K]lŽK^ptK_pzK`rcKar¿Kbr½KcrÃKdrÆKerÁKfrºKgrÅKhs•Kis—Kjs“Kks”Kls’Kmu:Knu9Kou”Kpu•KqvKry=Ks€4Kt€•Ku€™Kv€Kw€’Kx€œKy‚Kz‚K{‚…K|‚ŽK}‚‘K~‚“K¡‚ŠK¢‚ƒK£‚„K¤ŒxK¥ÉK¦¿K§ŸK¨¡K©¥KªžK«§K¬ K­–0K®–(K¯–/K°–-K±N3K²O˜K³O|K´O…KµO}K¶O€K·O‡K¸OvK¹OtKºO‰K»O„K¼OwK½OLK¾O—K¿OjKÀOšKÁOyKÂOKÃOxKÄOKÅOœKÆO”KÇOžKÈO’KÉO‚KÊO•KËOkKÌOnKÍQžKÎQ¼KÏQ¾KÐR5KÑR2KÒR3KÓRFKÔR1KÕR¼KÖS K×S KØSMsuŒMtu˜Muv¯MvvóMwvñMxvðMyvõMzwøM{wüM|wùM}wûM~wúM¡w÷M¢yBM£y?M¤yÅM¥zxM¦z{M§zûM¨|uM©|ýMª€5M«€M¬€®M­€£M®€¸M¯€µM°€­M±‚ M²‚ M³‚ÀM´‚«Mµ‚šM¶‚˜M·‚›M¸‚µM¹‚§Mº‚®M»‚¼M¼‚žM½‚ºM¾‚´M¿‚¨MÀ‚¡MÁ‚©M‚ÂM¤MÄ‚ÃMÅ‚¶MÆ‚¢MdžpMȆoMɆmMʆnMËŒVMÌÒMÍËMÎÓMÏÍMÐÖMÑÕMÒ×MÓ²MÔ´MÕ¯MÖ³M×°MØ–9MÙ–=MÚ–Sh€9Si€úSj€òSk€ùSl€õSmSn€ûSoSp‚Sq‚/Sr‚%Ssƒ3Stƒ-SuƒDSvƒSwƒQSxƒ%SyƒVSzƒ?S{ƒAS|ƒ&S}ƒS~ƒ"S¡ƒBS¢ƒNS£ƒS¤ƒ*S¥ƒS¦ƒTåZMTæZ9TçZLTèZpTéZiTêZGTëZQTìZVTíZBTîZ\Tï[rTð[nTñ[ÁTò[ÀTó\YTô]Tõ] Tö]T÷]Tø] Tù] Tú](Tû] Tü]&Tý]%Tþ]U@]0UA]UB]#UC]UD].UE^>UF^4UG^±UH^´UI^¹UJ^²UK^³UL_6UM_8UN_›UO_–UP_ŸUQ`ŠUR`US`†UT`¾UU`°UV`ºUW`ÓUX`ÔUY`ÏUZ`äU[`ÙU\`ÝU]`ÈU^`±U_`ÛU``·Ua`ÊUb`¿Uc`ÃUd`ÍUe`ÀUfc2UgceUhcŠUic‚Ujc}Ukc½UlcžUmc­UncUoc—Upc«UqcŽUrcoUsc‡UtcUucnUvc¯UwcuUxcœUycmUzc®U{c|U|c¤U}c;U~cŸU¡cxU¢c…U£cU¤c‘U¥cU¦cpU§eSU¨eÍU©feUªfaU«f[U¬fYU­f\U®fbU¯gU°hyU±h‡U²hU³hœU´hmUµhnU¶h®U·h«U¸iVU¹hoUºh£U»h¬U¼h©U½huU¾htU¿h²UÀhUÁhwUÂh’UÃh|UÄhkUÅhrUÆhªUÇh€UÈhqUÉh~UÊh›UËh–UÌh‹UÍh UÎh‰UÏh¤UÐhxUÑh{UÒh‘UÓhŒUÔhŠUÕh}UÖk6U×k3UØk7UÙk8UÚk‘UÛkUÜkUÝkŽUÞkŒUßl*UàmÀUám«Uâm´Uãm³UäntUåm¬UæméUçmâUèm·UémöUêmÔUënUìmÈUímàUîmßUïmÖUðm¾UñmåUòmÜUómÝUômÛUõmôUömÊU÷m½UømíUùmðUúmºUûmÕUümÂUýmÏUþmÉV@mÐVAmòVBmÓVCmýVDm×VEmÍVFmãVGm»VHpúVIq VJp÷VKqVLpôVMq VNpðVOqVPpóVQqVRpüVSpÿVTqVUqVVqVWpøVXpöVYq VZqV[qV\r~V]r{V^r|V_rV`sVasVbsVcsVdsVes VfsVgrÿVhsVisVjsˆVksöVlsøVmsõVntVotVpsýVqtVrtVssúVtsüVusÿVvt Vwt VxsôVytVzudV{ucV|uÎV}uÒV~uÏV¡uËV¢uÌV£uÑV¤uÐV¥vV¦v‰V§vÓV¨w9V©w/Vªw-V«w1V¬w2V­w4V®w3V¯w=V°w%V±w;V²w5V³xHV´xRVµxIV¶xMV·xJV¸xLV¹x&VºxEV»xPV¼ydV½ygV¾yiV¿yjVÀycVÁykVÂyaVÃy»VÄyúVÅyøVÆyöVÇy÷VÈzVÉz”VÊzVË{5VÌ{GVÍ{4VÎ{%VÏ{0VÐ{"VÑ{$VÒ{3VÓ{VÔ{*VÕ{VÖ{1V×{+VØ{-VÙ{/VÚ{2VÛ{8VÜ{VÝ{#VÞ|”Vß|˜Và|–Vá|£Vâ}5Vã}=Vä}8Vå}6Væ}:Vç}EVè},Vé})Vê}AVë}GVì}>Ví}?Vî}JVï};Vð}(VñcVò•VóœVôVõ›VöÊV÷ËVøÍVùÐVúÑVûÇVüÏVýÉVþ€W@€WA€WB€GWC€CWD€HWEWF%WGWHWI-WJWK,WLWM!WNWO'WPWQ"WR‚WS‚8WT‚3WU‚:WV‚4WW‚2WX‚tWYƒWZƒ£W[ƒ¨W\ƒW]ƒzW^ƒsW_ƒ¤W`ƒtWaƒWbƒWcƒ•Wdƒ™WeƒuWfƒ”Wgƒ©Whƒ}WiƒƒWjƒŒWkƒWlƒ›WmƒªWnƒ‹Woƒ~Wpƒ¥Wqƒ¯WrƒˆWsƒ—Wtƒ°WuƒWvƒ¦Wwƒ‡Wxƒ®WyƒvWzƒšW{†YW|†VW}†¿W~†·W¡†ÂW¢†ÁW£†ÅW¤†ºW¥†°W¦†ÈW§†¹W¨†³W©†¸Wª†ÌW«†´W¬†»W­†¼W®†ÃW¯†½W°†¾W±ˆRW²ˆ‰W³ˆ•W´ˆ¨Wµˆ¢W¶ˆªW·ˆšW¸ˆ‘W¹ˆ¡WºˆŸW»ˆ˜W¼ˆ§W½ˆ™W¾ˆ›W¿ˆ—WÀˆ¤WÁˆ¬WˆŒWÈ“WĈŽWʼn‚WƉÖWljÙWȉÕWÉŠ0WÊŠ'WËŠ,WÌŠWÍŒ9WÎŒ;WÏŒ\WÐŒ]WÑŒ}WÒŒ¥WÓ}WÔ{WÕyWÖ¼W×ÂWعWÙ¿WÚÁWÛŽØWÜŽÞWÝŽÝWÞŽÜWߎ×WàŽàWáŽáWâ$Wã WäWåWæ Wç!WèïWéêWêðWëôWìòWíóWîÔWïëWðìWñéWò‘VWó‘XWô‘ZWõ‘SWö‘UW÷‘ìWø‘ôWù‘ñWú‘óWû‘øWü‘äWý‘ùWþ‘êX@‘ëXA‘÷XB‘èXC‘îXD•zXE•†XF•ˆXG–|XH–mXI–kXJ–qXK–oXL–¿XM—jXN˜XO˜åXP™—XQP›XRP•XSP”XTPžXUP‹XVP£XWPƒXXPŒXYPŽXZPX[PhX\PœX]P’X^P‚X_P‡X`Q_XaQÔXbSXcSXdS¤XeS§XfU‘XgU¨XhU¥XiU­XjUwXkVEXlU¢XmU“XnUˆXoUXpUµXqUXrU£XsU’XtU¤XuU}XvUŒXwU¦XxUXyU•XzU¡X{UŽX|W X}X)X~X7X¡XX¢XX£X'X¤X#X¥X(X¦WõX§XHX¨X%X©XXªXX«X3X¬X?X­X6X®X.X¯X9X°X8X±X-X²X,X³X;X´YaXµZ¯X¶Z”X·ZŸX¸ZzX¹Z¢XºZžX»ZxX¼Z¦X½Z|X¾Z¥X¿Z¬XÀZ•XÁZ®XÂZ7XÃZ„XÄZŠXÅZ—XÆZƒXÇZ‹XÈZ©XÉZ{XÊZ}XËZŒXÌZœXÍZXÎZ“XÏZXÐ[êXÑ[ÍXÒ[ËXÓ[ÔXÔ[ÑXÕ[ÊXÖ[ÎX×\ XØ\0XÙ]7XÚ]CXÛ]kXÜ]AXÝ]KXÞ]?Xß]5Xà]QXá]NXâ]UXã]3Xä]:Xå]RXæ]=Xç]1Xè]YXé]BXê]9Xë]IXì]8Xí]Zý?Zþe[@f[A¢[B [C¡[D×[E€Q[F€O[G€P[H€þ[I€Ô[JC[KJ[LR[MO[NG[O=[PM[Q:[Ræ[Sî[T÷[Uø[Vù[W‚[X‚<[Y‚=[Z‚?[[‚u[\ƒ;[]ƒÏ[^ƒù[_„#[`ƒÀ[aƒè[b„[cƒç[dƒä[eƒü[fƒö[g„[hƒÆ[iƒÈ[jƒë[kƒã[lƒ¿[m„[nƒÝ[oƒå[pƒØ[qƒÿ[rƒá[sƒË[tƒÎ[uƒÖ[vƒõ[wƒÉ[x„ [y„[zƒÞ[{„[|„[}ƒÂ[~ƒó[¡ƒÕ[¢ƒú[£ƒÇ[¤ƒÑ[¥ƒê[¦„[§ƒÃ[¨ƒì[©ƒî[ªƒÄ[«ƒû[¬ƒ×[­ƒâ[®„[¯ƒÛ[°ƒþ[±†Ø[²†â[³†æ[´†Ó[µ†ã[¶†Ú[·†ê[¸†Ý[¹†ë[º†Ü[»†ì[¼†é[½†×[¾†è[¿†Ñ[ÀˆH[ÁˆV[ˆU[Ⱥ[Ĉ×[ň¹[ƈ¸[LjÀ[Ȉ¾[Ɉ¶[ʈ¼[ˈ·[̈½[͈²[Ή[ψÉ[Љ•[щ˜[Ò‰—[Ó‰Ý[Ô‰Ú[Õ‰Û[ÖŠN[׊M[ØŠ9[ÙŠY[ÚŠ@[ÛŠW[ÜŠX[ÝŠD[ÞŠE[ߊR[àŠH[áŠQ[âŠJ[ãŠL[äŠO[åŒ_[æŒ[猀[茺[錾[ꌰ[댹[쌵[í„[î€[ï‰[ðØ[ñÓ[òÍ[óÇ[ôÖ[õÜ[öÏ[÷Õ[øÙ[ùÈ[ú×[ûÅ[üŽï[ýŽ÷[þŽú\@Žù\AŽæ\BŽî\CŽå\DŽõ\EŽç\FŽè\GŽö\HŽë\IŽñ\JŽì\KŽô\LŽé\M-\N4\O/\P‘\Q‘,\R‘\Sÿ\Tü\U‘\Vù\Wû\X‘\Y‘\Z‘\[‘\\‘\]‘a\^‘d\_‘_\`‘b\a‘`\b’\c’ \d’%\e’\f’\g’&\h’\i’ \j’\k’\l‘ÿ\m‘ý\n’\o’\p’'\q’\r’\s’$\t’\u’\v’\w’\x•{\y•\z•Œ\{•\|–‡\}–~\~–ˆ\¡–‰\¢–ƒ\£–€\¤–Â\¥–È\¦–Ã\§–ñ\¨–ð\©—l\ª—p\«—n\¬˜\­˜©\®˜ë\¯œæ\°žù\±Nƒ\²N„\³N¶\´P½\µP¿\¶PÆ\·P®\¸PÄ\¹PÊ\ºP´\»PÈ\¼PÂ\½P°\¾PÁ\¿Pº\ÀP±\ÁPË\ÂPÉ\ÃP¶\ÄP¸\ÅQ×\ÆRz\ÇRx\ÈR{\ÉR|\ÊUÃ\ËUÛ\ÌUÌ\ÍUÐ\ÎUË\ÏUÊ\ÐUÝ\ÑUÀ\ÒUÔ\ÓUÄ\ÔUé\ÕU¿\ÖUÒ\×U\ØUÏ\ÙUÕ\ÚUâ\ÛUÖ\ÜUÈ\ÝUò\ÞUÍ\ßUÙ\àUÂ\áW\âXS\ãXh\äXd\åXO\æXM\çXI\èXo\éXU\êXN\ëX]\ìXY\íXe\îX[\ïX=\ðXc\ñXq\òXü\óZÇ\ôZÄ\õZË\öZº\÷Z¸\øZ±\ùZµ\úZ°\ûZ¿\üZÈ\ýZ»\þZÆ]@Z·]AZÀ]BZÊ]CZ´]DZ¶]EZÍ]FZ¹]GZ]H[Ö]I[Ø]J[Ù]K\]L\3]M]q]N]c]O]J]P]e]Q]r]R]l]S]^]T]h]U]g]V]b]W]ð]X^O]Y^N]Z^J][^M]\^K]]^Å]^^Ì]_^Æ]`^Ë]a^Ç]b_@]c_¯]d_­]e`÷]faI]gaJ]ha+]iaE]ja6]ka2]la.]maF]na/]oaO]pa)]qa@]rb ]s‘h]tb#]ub%]vb$]wcÅ]xcñ]ycë]zd]{d]|d ]}d ]~d$]¡d3]¢dC]£d]¤d]¥d]¦d9]§d7]¨d"]©d#]ªd ]«d&]¬d0]­d(]®dA]¯d5]°d/]±d ]²d]³d@]´d%]µd']¶d ]·cç]¸d]¹d.]ºd!]»d]¼eo]½e’]¾eÓ]¿f†]ÀfŒ]Áf•]Âf]Ãf‹]ÄfŠ]Åf™]Æf”]Çfx]Èg ]Éif]Êi_]Ëi8]ÌiN]Íib]Îiq]Ïi?]ÐiE]Ñij]Òi9]ÓiB]ÔiW]ÕiY]Öiz]×iH]ØiI]Ùi5]Úil]Ûi3]Üi=]Ýie]Þhð]ßix]ài4]áii]âi@]ãio]äiD]åiv]æiX]çiA]èit]éiL]êi;]ëiK]ìi7]íi\]îiO]ïiQ]ði2]ñiR]òi/]ói{]ôi<]õkF]ökE]÷kC]økB]ùkH]úkA]ûk›]üú ]ýkû]þkü^@kù^Ak÷^Bkø^Cn›^DnÖ^EnÈ^Fn^GnÀ^HnŸ^In“^Jn”^Kn ^Ln±^Mn¹^NnÆ^OnÒ^Pn½^QnÁ^Rnž^SnÉ^Tn·^Un°^VnÍ^Wn¦^XnÏ^Yn²^Zn¾^[nÃ^\nÜ^]nØ^^n™^_n’^`nŽ^an^bn¤^cn¡^dn¿^en³^fnÐ^gnÊ^hn—^in®^jn£^kqG^lqT^mqR^nqc^oq`^pqA^qq]^rqb^sqr^tqx^uqj^vqa^wqB^xqX^yqC^zqK^{qp^|q_^}qP^~qS^¡qD^¢qM^£qZ^¤rO^¥r^¦rŒ^§r‘^¨r^©rŽ^ªs<^«sB^¬s;^­s:^®s@^¯sJ^°sI^±tD^²tJ^³tK^´tR^µtQ^¶tW^·t@^¸tO^¹tP^ºtN^»tB^¼tF^½tM^¾tT^¿tá^Àtÿ^Átþ^Âtý^Ãu^Äuy^Åuw^Æiƒ^Çuï^Èv^Év^Êu÷^Ëuþ^Ìuü^Íuù^Îuø^Ïv^Ðuû^Ñuö^Òuí^Óuõ^Ôuý^Õv™^Övµ^×vÝ^ØwU^Ùw_^Úw`^ÛwR^ÜwV^ÝwZ^Þwi^ßwg^àwT^áwY^âwm^ãwà^äx‡^åxš^æx”^çx^èx„^éx•^êx…^ëx†^ìx¡^íxƒ^îxy^ïx™^ðx€^ñx–^òx{^óy|^ôy‚^õy}^öyy^÷z^øz^ùz^úz^ûz^üz^ýz"^þz_@z_Az_Bz£_Cz¢_Dzž_Ezë_F{f_G{d_H{m_I{t_J{i_K{r_L{e_M{s_N{q_O{p_P{a_Q{x_R{v_S{c_T|²_U|´_V|¯_W}ˆ_X}†_Y}€_Z}_[}_\}…_]}z_^}Ž__}{_`}ƒ_a}|_b}Œ_c}”_d}„_e}}_f}’_gm_hk_ig_jh_kl_l¦_m¥_n§_oÛ_pÜ_q€!_rd_s`_tw_u\_vi_w[_xb_yr_zg!_{^_|v_}g_~o_¡D_¢a_£‚_¤‚I_¥‚D_¦‚@_§‚B_¨‚E_©„ñ_ª„?_«„V_¬„v_­„y_®„_¯„_°„e_±„Q_²„@_³„†_´„g_µ„0_¶„M_·„}_¸„Z_¹„Y_º„t_»„s_¼„]_½…_¾„^_¿„7_À„:_Á„4_„z_ÄC_Ä„x_Å„2_Æ„E_Ç„)_ȃÙ_É„K_Ê„/_Ë„B_Ì„-_Í„__΄p_Ï„9_ЄN_Ñ„L_Ò„R_Ó„o_Ô„Å_Õ„Ž_Ö„;_ׄG_Ø„6_Ù„3_Ú„h_Û„~_Ü„D_Ý„+_Þ„`_ß„T_à„n_á„P_⇠_ã‡_ä†÷_å‡ _æ†ú_ç†Ö_è†õ_é‡M_ê†ø_ë‡_ì‡ _í‡_î†ö_ï‡ _ð‡_ñˆÖ_òˆË_óˆÍ_ôˆÎ_õˆÞ_öˆÛ_÷ˆÚ_øˆÌ_ùˆÐ_ú‰…_û‰›_ü‰ß_ý‰å_þ‰ä`@‰á`A‰à`B‰â`C‰Ü`D‰æ`EŠv`FІ`GŠ`HŠa`IŠ?`JŠw`KŠ‚`LŠ„`MŠu`NŠƒ`OŠ`PŠt`QŠz`RŒ<`SŒK`TŒJ`UŒe`VŒd`WŒf`XŒ†`YŒ„`ZŒ…`[ŒÌ`\h`]i`^‘`_Œ``Ž`a`b`c“`d”`e`f’`gð`hà`iì`jñ`kî`lÐ`mé`nã`oâ`pç`qò`rë`sô`t`uŽÿ`v`w`x`y`z`{`| `}R`~?`¡D`¢I`£=`¤‘`¥‘ `¦‘`§‘`¨‘`©‘`ª‘ `«‘`¬‘n`­‘o`®’H`¯’R`°’0`±’:`²’f`³’3`´’e`µ’^`¶’ƒ`·’.`¸’J`¹’F`º’m`»’l`¼’O`½’``¾’g`¿’o`À’6`Á’a`Â’p`Ã’1`Ä’T`Å’c`Æ’P`Ç’r`È’N`É’S`Ê’L`Ë’V`Ì’2`Í•Ÿ`Εœ`Ï•ž`Е›`Ñ–’`Ò–“`Ó–‘`Ô–—`Õ–Î`Ö–ú`×–ý`Ø–ø`Ù–õ`Ú—s`Û—w`Ü—x`Ý—r`Þ˜`ߘ `à˜`ᘬ`â˜ö`ã˜ù`䙯`噲`æ™°`癵`èš­`éš«`ê›[`ëœê`ìœí`íœç``ïžý`ðPæ`ñPÔ`òP×`óPè`ôPó`õPÛ`öPê`÷PÝ`øPä`ùPÓ`úPì`ûPð`üPï`ýPã`þPàa@QØaAR€aBRaCRéaDRëaES0aFS¬aGV'aHVaIV aJVaKUüaLVaMVaNVaOVaPVaQUúaRVaSVaTUÿaUUùaVX‰aWX|aXXaYX˜aZX†a[Xa\Xa]Xta^X‹a_Xza`X‡aaX‘abXŽacXvadX‚aeXˆafX{agX”ahXaiXþajYkakZÜalZîamZåanZÕaoZêapZÚaqZíarZëasZóatZâauZàavZÛawZìaxZÞayZÝazZÙa{Zèa|Zßa}[wa~[àa¡[ãa¢\ca£]‚a¤]€a¥]}a¦]†a§]za¨]a©]waª]Ša«]‰a¬]ˆa­]~a®]|a¯]a°]ya±]a²^Xa³^Ya´^Saµ^Øa¶^Ña·^×a¸^Îa¹^Üaº^Õa»^Ùa¼^Òa½^Ôa¾_Da¿_CaÀ_oaÁ_¶aÂa,aÃa(aÄaAaÅa^aÆaqaÇasaÈaRaÉaSaÊaraËalaÌa€aÍataÎaTaÏazaÐa[aÑaeaÒa;aÓajaÔaaaÕaVaÖb)a×b'aØb+aÙd+aÚdMaÛd[aÜd]aÝdtaÞdvaßdraàdsaád}aâduaãdfaäd¦aådNaæd‚açd^aèd\aédKaêdSaëd`aìdPaídaîd?aïdlaðdkañdYaòdeaódwaôesaõe aöf¡a÷f aøfŸaùgaúgaûg"aüi±aýi¶aþiÉb@i bAiÎbBi–bCi°bDi¬bEi¼bFi‘bGi™bHiŽbIi§bJibKi©bLi¾bMi¯bNi¿bOiÄbPi½bQi¤bRiÔbSi¹bTiÊbUišbViÏbWi³bXi“bYiªbZi¡b[ižb\iÙb]i—b^ib_iÂb`iµbai¥bbiÆbckJbdkMbekKbfkžbgkŸbhk bikÃbjkÄbkkþblnÎbmnõbnnñboobpo%bqnøbro7bsnûbto.buo bvoNbwobxobyo'bzob{o;b|ob}níb~o b¡o6b¢osb£nùb¤nîb¥o-b¦o@b§o0b¨ocã‡Fcä‡ cå‡2cæ‡*cç‡-cè‡dÞ›?dß›`dà›adá›_dâœñdãœòdäœõdåž§dæPÿdçQdèQ0déPødêQdëQdìPödíPþdîQ dïQ dðPýdñQ dòR‹dóRŒdôRñdõRïdöVHd÷VBdøVLdùV5dúVAdûVJdüVIdýVFdþVXe@VZeAV@eBV3eCV=eDV,eEV>eFV8eGV*eHV:eIWeJX«eKXeLX±eMX eNX£eOX¯ePX¬eQX¥eRX¡eSXÿeTZÿeUZôeVZýeWZ÷eXZöeY[eZZøe[[e\Zùe][e^[e_[e`[ea\geb]™ec]—ed]Ÿee]’ef]¢eg]“eh]•ei] ej]œek]¡el]šem]žen^ieo^]ep^`eq^\er}óes^Ûet^Þeu^áev_Iew_²exa‹eyaƒezaye{a±e|a°e}a¢e~a‰e¡a›e¢a“e£a¯e¤a­e¥aŸe¦a’e§aªe¨a¡e©aeªafe«a³e¬b-e­dne®dpe¯d–e°d e±d…e²d—e³dœe´deµd‹e¶dŠe·dŒe¸d£e¹dŸeºdhe»d±e¼d˜e½eve¾eze¿eyeÀe{eÁe²eÂe³eÃfµeÄf°eÅf©eÆf²eÇf·eÈfªeÉf¯eÊjeËjeÌjeÍiåeÎiøeÏjeÐiñeÑiäeÒj eÓiÿeÔiìeÕiâeÖje×jeØiþeÙj'eÚiòeÛiîeÜjeÝi÷eÞiçeßj@eàjeáiæeâiûeãj eäiüeåiëeæj eçjeèjeéj%eêjeëiöeìj&eíjeîiôeïjeðkQeñk¥eòk£eók¢eôk¦eõleöle÷kÿeøleùoAeúo&eûo~eüo‡eýoÆeþo’f@ofAo‰fBoŒfCobfDoOfEo…fFoZfGo–fHovfIolfJo‚fKoUfLorfMoRfNoPfOoWfPo”fQo“fRo]fSofToafUokfVo}fWogfXofYoSfZo‹f[oif\of]o•f^ocf_owf`ojfao{fbq²fcq¯fdq›feq°ffq fgqšfhq©fiqµfjqfkq¥flqžfmq¤fnq¡foqªfpqœfqq§frq³fsr˜ftršfusXfvsRfws^fxs_fys`fzs]f{s[f|saf}sZf~sYf¡sbf¢t‡f£t‰f¤tŠf¥t†f¦tf§t}f¨t…f©tˆfªt|f«tyf¬uf­uf®u~f¯v%f°vf±vf²vf³vf´v#fµvf¶v(f·vf¸vœf¹vfºvžf»v›f¼wf½wf¾w‰f¿wˆfÀxÍfÁx»fÂxÏfÃxÌfÄxÑfÅxÎfÆxÔfÇxÈfÈxÃfÉxÄfÊxÉfËyšfÌy¡fÍy fÎyœfÏy¢fÐy›fÑkvfÒz9fÓz²fÔz´fÕz³fÖ{·f×{ËfØ{¾fÙ{¬fÚ{ÎfÛ{¯fÜ{¹fÝ{ÊfÞ{µfß|Åfà|Èfá|Ìfâ|Ëfã}÷fä}Ûfå}êfæ}çfç}×fè}áfé~fê}úfë}æfì}öfí}ñfî}ðfï}îfð}ßfñvfò¬fó°fô­fõíföëf÷êføìfùæfúèfû€dfü€gfý£fþŸg@žgA•gB¢gC™gD—gE‚gF‚OgG‚SgH‚RgI‚PgJ‚NgK‚QgL…$gM…;gN…gO…gP…)gQ…gR… gS… gT…gU… gV…'gW…gX„ûgY…+gZ„úg[…g\… g]„ôg^…*g_„òg`…ga„÷gb„ëgc„ógd„üge…gf„êgg„égh…gi„þgj…(gk…gl….gm…gn„ýgo…gp„ögq…1gr…&gs„çgt„ègu„ðgv„ïgw„ùgx…gy… gz…0g{… g|…g}…/g~†bg¡‡Vg¢‡cg£‡dg¤‡wg¥‡ág¦‡sg§‡Xg¨‡Tg©‡[gª‡Rg«‡ag¬‡Zg­‡Qg®‡^g¯‡mg°‡jg±‡Pg²‡Ng³‡_g´‡]gµ‡og¶‡lg·‡zg¸‡ng¹‡\gº‡eg»‡Og¼‡{g½‡ug¾‡bg¿‡ggÀ‡igÁˆZg‰gÉ gĉgʼn gƉgljgȉgɉgʉgˉg̉g͉ gΉ¢gω¤gЉ£gщígÒ‰ðgÓ‰ìgÔŠÏgÕŠÆgÖŠ¸g׊ÓgØŠÑgÙŠÔgÚŠÕgÛŠ»gÜŠ×gÝŠ¾gÞŠÀgߊÅgàŠØgáŠÃg⊺g㊽gäŠÙgåŒ>gæŒMgçŒgèŒågéŒßgêŒÙgëŒègìŒÚgíŒÝgîŒçgï gðœgñ¡gò›góŽ gôŽ#gõŽ%göŽ$g÷Ž.gøŽgùŽgúŽgûŽgüŽgýŽ&gþŽ'h@ŽhAŽhBŽhCŽhDŽhEŽhFŽhG,hH$hIhJhK hL#hMhNhOshPphQohRghSkhT‘/hU‘+hV‘)hW‘*hX‘2hY‘&hZ‘.h[‘…h\‘†h]‘Šh^‘h_‘‚h`‘„ha‘€hb’Ðhc’Ãhd’Ähe’Àhf’Ùhg’¶hh’Ïhi’ñhj’ßhk’Øhl’éhm’×hn’Ýho’Ìhp’ïhq’Âhr’èhs’Êht’Èhu’Îhv’æhw’Íhx’Õhy’Éhz’àh{’Þh|’çh}’Ñh~’Óh¡’µh¢’áh£’Æh¤’´h¥•|h¦•¬h§•«h¨•®h©•°hª–¤h«–¢h¬–Óh­—h®—h¯—h°—Zh±—Šh²—Žh³—ˆh´—Ðhµ—Ïh¶˜h·˜h¸˜&h¹˜)hº˜(h»˜ h¼˜h½˜'h¾˜²h¿™hÀ˜úhÁ™h™hÙhÄ™hÅ™hÆ™ÜhÇ™ÍhÈ™ÏhÉ™ÓhÊ™ÔhË™ÎhÌ™ÉhÍ™ÖhΙØhÏ™ËhЙ×hÑ™ÌhÒš³hÓšìhÔšëhÕšóhÖšòhךñhØ›FhÙ›ChÚ›ghÛ›thÜ›qhÝ›fhÞ›vhß›uhà›phá›hhâ›dhã›lhäœühåœúhæœýhçœÿhèœ÷héhêhëœùhìœûhíhîhïhðžƒhñžÓhòŸhóŸhôQhõQhöQh÷QhøQhùQÞhúS4hûSáhüVphýV`hþVni@VsiAVfiBVciCVmiDVriEV^iFVwiGWiHWiIXÈiJX½iKXÉiLX¿iMXºiNXÂiOX¼iPXÆiQ[iR[iS[iT[!iU[iV[iW[iX[iY[(iZ[i[[ i\[i][ïi^]¬i_]±i`]©ia]§ib]µic]°id]®ie]ªif]¨ig]²ih]­ii]¯ij]´ik^gil^him^fin^oio^éip^çiq^æir^èis^åit_Kiu_¼ivaiwa¨ixa–iyaÅiza´i{aÆi|aÁi}aÌi~aºi¡a¿i¢a¸i£aŒi¤d×i¥dÖi¦dÐi§dÏi¨dÉi©d½iªd‰i«dÃi¬dÛi­dói®dÙi¯e3i°ei±e|i²e¢i³fÈi´f¾iµfÀi¶fÊi·fËi¸fÏi¹f½iºf»i»fºi¼fÌi½g#i¾j4i¿jfiÀjIiÁjgiÂj2iÃjhiÄj>iÅj]iÆjmiÇjviÈj[iÉjQiÊj(iËjZiÌj;iÍj?iÎjAiÏjjiÐjdiÑjPiÒjOiÓjTiÔjoiÕjiiÖj`i×jkJ…[kK…qkL…NkM…nkN…ukO…UkP…gkQ…`kR…ŒkS…fkT…]kU…TkV…ekW…lkX†ckY†ekZ†dk[‡›k\‡k]‡—k^‡“k_‡’k`‡ˆka‡kb‡–kc‡˜kd‡yke‡‡kf‡£kg‡…kh‡ki‡‘kj‡kk‡„kl‡”km‡œkn‡ško‡‰kp‰kq‰&kr‰0ks‰-kt‰.ku‰'kv‰1kw‰"kx‰)ky‰#kz‰/k{‰,k|‰k}‰ñk~Šàk¡Šâk¢Šòk£Šôk¤Šõk¥ŠÝk¦‹k§Šäk¨Šßk©ŠðkªŠÈk«ŠÞk¬Šák­Šèk®Šÿk¯Šïk°Šûk±Œ‘k²Œ’k³Œk´ŒõkµŒîk¶Œñk·Œðk¸Œók¹lkºnk»¥k¼§k½Ž3k¾Ž>k¿Ž8kÀŽ@kÁŽEkÂŽ6kÃŽnu‰Anv‰Rnw‰7nx‰Bny‰­nz‰¯n{‰®n|‰òn}‰ón~‹n¡‹n¢‹n£‹n¤‹n¥‹ n¦‹"n§‹n¨‹n©‹nª‹n«‹ n¬‹n­‹n®‹n¯‹n°‹n±ŒOn²Œpn³Œrn´ŒqnµŒon¶Œ•n·Œ”n¸Œùn¹onºŽNn»ŽMn¼ŽSn½ŽPn¾ŽLn¿ŽGnÀCnÁ@nÂ…nÃ~nÄ‘8nÅ‘šnÆ‘¢nÇ‘›nÈ‘™nÉ‘ŸnÊ‘¡nË‘nÌ‘ nÍ“¡nΓƒnÏ“¯nГdnÑ“VnÒ“GnÓ“|nÔ“XnÕ“\nÖ“vnדInØ“PnÙ“QnÚ“`nÛ“mnÜ“nÝ“LnÞ“jnß“ynà“Wná“Unâ“Rnã“Onä“qnå“wnæ“{nç“anè“^né“cnê“gnë“€nì“Nní“Ynî•Çnï•Ànð•Énñ•Ãnò•Ånó•·nô–®nõ–°nö–¬n÷— nø—nù—nú—nû—nü—šný—¡nþ—œo@—žoA—oB—ÕoC—ÔoD—ñoE˜AoF˜DoG˜JoH˜IoI˜EoJ˜CoK™%oL™+oM™,oN™*oO™3oP™2oQ™/oR™-oS™1oT™0oU™˜oV™£oW™¡oXšoY™úoZ™ôo[™÷o\™ùo]™øo^™öo_™ûo`™ýoa™þob™üocšodš¾oešþofšýog›ohšüoi›Hoj›šok›¨ol›žom››on›¦oo›¡op›¥oq›¤or›†os›¢ot› ou›¯ov3owAoxgoy6oz.o{/o|1o}8o~0o¡Eo¢Bo£Co¤>o¥7o¦@o§=o¨õo©-oªžŠo«ž‰o¬žo­ž°o®žÈo¯žÚo°žûo±žÿo²Ÿ$o³Ÿ#o´Ÿ"oµŸTo¶Ÿ o·Q1o¸Q-o¹Q.oºV˜o»Vœo¼V—o½Všo¾Vo¿V™oÀYpoÁ[pä‹1på‹%pæ‹7pç‹&pè‹6pé‹.pê‹$pë‹;pì‹=pí‹:pîŒBpïŒupðŒ™pñŒ˜pòŒ—póŒþpôpõpöp÷Ž\pøŽbpùŽ`púŽWpûŽVpüŽ^pýŽepþŽgq@Ž[qAŽZqBŽaqCŽ]qDŽiqEŽTqFFqGGqHHqIKqJ‘(qK‘:qL‘;qM‘>qN‘¨qO‘¥qP‘§qQ‘¯qR‘ªqS“µqT“ŒqU“’qV“·qW“›qX“qY“‰qZ“§q[“Žq\“ªq]“žq^“¦q_“•q`“ˆqa“™qb“Ÿqc“qd“±qe“‘qf“²qg“¤qh“¨qi“´qj“£qk“¥ql•Òqm•Óqn•Ñqo–³qp–×qq–Úqr]Âqs–ßqt–Øqu–Ýqv—#qw—"qx—%qy—¬qz—®q{—¨q|—«q}—¤q~—ªq¡—¢q¢—¥q£—×q¤—Ùq¥—Öq¦—Øq§—úq¨˜Pq©˜Qqª˜Rq«˜¸q¬™Aq­™qü[?qý]Ãqþ^pr@_¿rAaûrBerCerDe rEe rFe rGerHe„rIeÞrJeÝrKfÞrLjçrMjàrNjÌrOjÑrPjÙrQjËrRjßrSjÜrTjÐrUjërVjÏrWjÍrXjÞrYk`rZk°r[l r\pr]p'r^p r_pr`p+rap!rbp"rcp#rdp)reprfp$rgprhp*rir rjr rkrrlrrmrrnr¥ror¦rpr¤rqr£rrr¡rstËrttÅrut·rvtÃrwurxv`rywÉrzwÊr{wÄr|wñr}yr~yr¡y!r¢yr£yr¤yr¥y°r¦zgr§zhr¨|3r©|w÷ˆ0wøˆ2wùˆ.wúˆ3wû‰vwü‰twý‰swþ‰þx@‹ŒxA‹ŽxB‹‹xC‹ˆxDŒExExFŽ˜xGdxHcxI‘¼xJ”bxK”UxL”]xM”WxN”^xO—ÄxP—ÅxQ˜xRšVxSšYxT›xU›xV› xWœRxXœXxYœPxZœJx[œMx\œKx]œUx^œYx_œLx`œNxaûxb÷xcïxdãxeëxføxgäxhöxiáxjîxkæxlòxmðxnâxoìxpôxqóxrèxsíxtžÂxužÐxvžòxwžóxxŸxyŸxzŸ8x{Ÿ7x|Ÿ6x}ŸCx~ŸOx¡Ÿqx¢Ÿpx£Ÿnx¤Ÿox¥VÓx¦VÍx§[Nx¨\mx©e-xªfíx«fîx¬kx­p_x®pax¯p]x°p`x±r#x²tÛx³tåx´wÕxµy8x¶y·x·y¶x¸|jx¹~—xº‰x»‚mx¼†Cx½ˆ8x¾ˆ7x¿ˆ5xÀˆKxÁ‹”x‹•xÃŽžxÄŽŸxÅŽ xÆŽxÇ‘¾xÈ‘½xÉ‘ÂxÊ”kxË”hxÌ”ixÍ–åxΗFxÏ—CxЗGxÑ—ÇxÒ—åxÓš^xÔšÕxÕ›YxÖœcxלgxØœfxÙœbxÚœ^xÛœ`xÜžxÝþxÞžxßžxàžxážxâžxãžxäž xåÿxæýxçžxèž xéŸxêŸFxëŸtxìŸuxíŸvxîVÔxïe.xðe¸xñkxòkxókxôkxõpbxör&x÷rªxøwØxùwÙxúy9xû|ixü|kxý|öxþ~šy@~˜yA~›yB~™yCàyDáyE†FyF†GyG†HyH‰yyI‰zyJ‰|yK‰{yL‰ÿyM‹˜yN‹™yOŽ¥yPޤyQŽ£yR”nyS”myT”oyU”qyV”syW—IyX˜ryY™_yZœhy[œny\œmy]ž y^ž y_žy`žyažybžycž¡ydžõyeŸ yfŸGygŸxyhŸ{yiŸzyjŸyykWylpfym|oynˆy§ˆ=y¨ˆ?y©‹žyªŒœy«Ž©y¬ŽÉy­—Ky®˜sy¯˜ty°˜Ìy±™ay²™«y³šdy´šfyµšgy¶›$y·žy¸žy¹ŸHyºby»ky¼r'y½†Ly¾Ž¨y¿”‚yÀ”€yÁ”yšiyÚhyÄ›.yÅžyÆr)ydžKyÈ‹ŸyÉ”ƒyÊœyyËž·yÌvuyÍškyΜzyÏžyÐpiyÑpjyÒž¤yÓŸ~yÔŸIyÕŸ˜screen-4.9.1/utf8encodings/bf0000664000175000017500000000035014467014146014551 0ustar alexalexScreenI2UTF8¿4CP-1251€‚ ƒS„ … &† ‡ !ˆ ¬‰ 0Š ‹ 9Œ  Ž R‘ ’ “ ” • "– — ˜ ™!"šY› :œZ\ž[Ÿ_¡¢^£¥¨©©ª¯²³V´‘¸Q¹!ºT¼X½¾U¿WÀ€ÿOscreen-4.9.1/utf8encodings/cd0000664000175000017500000000006414467014146014552 0ustar alexalexScreenI2UTF8ÍISO-8859-9ÐÝ0Þ^ðý1þ_screen-4.9.1/ChangeLog0000664000175000017500000005021614467014146013237 0ustar alexalexVersion 4.9.1 (20/08/2023): * Support stop/parity bits on serial port (#23952) * Add needed system headers in checks and return values for implicit function declarations * Fixes: - Avoid zombies after shell exit (#25089) - Missed signal sending permission check on failed query messages (CVE-2023-24626) - manpage fixes - source code fixes during cleanup - UTF-8 encoding can emit invalid UTF-8 sequences for out of range unicode values (#62097) Version 4.9.0 (30/01/2022): * Hardstatus option for used encoding (escape string '%e') * OpenBSD uses native openpty() from its utils.h * Fixes: - fix combining char handling that could lead to a segfault - CVE-2021-26937: possible denial of service via a crafted UTF-8 character sequence (bug #60030) - make screen exit code be 0 when checking --help - session names limit is 80 symbols (bug #61534) - option -X ignores specified user in multiuser env (bug #37437) - a lot of reformations/fixes/cleanups (man page and source code) Version 4.8.0 (05/02/2020): * Improve startup time by only polling for files to close * Fixes: - Fix for segfault if termcap doesn't have Km entry - Make screen exit code be 0 when checking --version - Fix potential memory corruption when using OSC 49 Version 4.7.0 (02/10/2019): * Add support for SGR (1006) mouse mode * Add support for OSC 11 * Update Unicode ambiguous and wide tables to 12.1.0 * Fixes: - cross-compilation support (bug #43223) - a lot of manpage fixes and cleanups Version 4.6.2 (23/10/2017): * Fixes: - revert changes to cursor position restore behavour (bug #51832) - set freed pointer to NULL (bug #52133) - documentation fixes - fix windowlist crashes (bug #43054 & #51500) Version 4.6.1 (10/07/2017): * Fixes: - problems with starting session in some cases - parallel make install - segfault when querying info on nonUTF locale (bug #51402) Version 4.6.0 (28/06/2017): * Update Unicode wide tables to 9.0 (bug #50044) * Support more serial speeds * Improved namespaces support * Migrate from fifos to sockets * Start viewing scrollback at first line of output (bug #49377) Version 4.5.1 (25/02/2017): * Fixes: - logfile permissions problem (CVE-2017-5618) - SunOS build problem (bug #50089) - FreeBSD core dumps (bug #50143) Version 4.5.0 (10/12/2016): * Allow specifying logfile's name via command line parameter '-L' * Fixes: - broken handling of "bind u digraph U+" (bug #48691) - crash with long $TERM (bug #48983) - crash when bumping blank window - build for AIX (bug #49149) - %x improperly separating arguments - install with custom DESTDIR (bug #48370) Version 4.4.0 (19/06/2016): * Support up to 24 function keys * Fix runtime issues * 'logfile' command, starts logging into new file upon changing Version 4.3.1 (28/06/2015): * Fix resize bug Version 4.3.0 (13/06/2015): * Introduce Xx string escape showing the executed command of a window * Implement dead/zombie window polling, allowing for auto reconnecting * Allow setting hardstatus on first line * New Commands: - 'sort' command sorting windows by title - 'bumpleft', 'bumpright' - manually move windows on window list - 'collapse' removing numbering 'gaps' between windows, by renumbering - 'windows' command now accepts arguments for use with querying Version 4.2.1 (28/04/2014): * allow for terminal with long $TERM (up to 32 characters) * allow to use long logins * documentation fixes * runtime fixes Version 4.2.0 (17/04/2014): New Commands: * 'unbindall' to unbind all commands * 'up', 'down', 'left', 'right' sub-commands for 'focus' * 'rendition' to specify rendition to use in caption/hardstatus for window-names that have bell/monitor/silence/so turned on. * 'layout', with the following sub-commands - 'title' - 'number' - 'autosave' ('autosave on' or 'autosave off') - 'new' - 'save' ('save ') - 'select' - 'next' - 'prev' - 'attach' - 'show' - 'remove' - 'dump' * 'group' for moving window(s) into a group. * 'defmousetrack' and 'mousetrack', to turn on/off mouse-tracking for displays. It's turned off by default. With mouse-tracking turned on, it's possible to switch to a region ('focus') using mouse clicks. It's also possible to select a text region in copy-mode using a mouse click to place a mark and the scroll wheel to scroll through the buffer. Additional features might be to allow clicking on window-titles in the caption to switch to that window. * All commands prefixed '@' are treated as 'quiet', i.e. '@'-prefixed commands do not trigger any display messages. Changed Commands: * '-v' parameter to 'split' command for vertical splits. * 'sorendition' deprecated in favour of 'rendition so'. * 'digraph' can take a second parameter to specify custom digraphs. For example, 'digraph >= ≥' or 'digraph >= U+2265' Using '0' as the second parameter will remove the digraph. * 'stuff' will prompt for input if there's nothing to stuff. * The argument to ":number" can be prefixed with '+' or '-' to use it as a relative argument. * '-g' parameter to 'windowlist' to show nested list of windows. * '//group' parameter to 'screen' to create a grouped window. * 'blankerprg' shows the currently set command on no argument. * 'maxwin' can now be used to increase the number of maximum windows. .screenrc: * $PID expands to the PID of the screen session. * $PWD expands to the current working directory of the session. * $STY expands to the session name. * Tilde-expansion in pathnames (e.g. for the 'source' command) * C-style escapes can be used (e.g. "\n" to get a newline with 'stuff') * '%p' in caption/hardstatus string expands to the PID of the backend, and '%+p' expands to the PID of the frontend (display). * '%S' in caption/hardstatus string expands to the session name. * '%P' in the caption string evaluates to true if the region is in copy mode. * '%E' in the caption string evaluates to true if the escape character has currently been pressed. Window List: * Nested views when there are window groups (with 'windowlist -g'). * Press 'm' to toggle the most-recent view. * Press 'g' to toggle nestedness. * Press 'a' to view all windows in the list. * Press '/' to search in the list. * Press ',' and '.' to re-order windows in the list. * Press 'K' to kill a window (requires confirmation). Display List: * Press 'd' to detach a display, 'D' to power-detach. Others: * Start using 'ChangeLog' for logging changes again. * Terminfo update for 256-color support. * Multiple input history (partially from Romain Francoise). * vi-like fFtT;, searching in copy mode. * In copy mode, search in reverse direction when 'N' is pressed. * Tab-completion for command input. * Some more readline-like bindings in input mode (e.g. ^W, ^D, ^P, ^N etc.) * Fix displaying unicode characters in the caption/hardstatus on UTF8 locale. * A revamped displays list (for 'displays' command) * Increased default maximum number of windows from 40 to 100. * Increased number color/attribute changes in caption/hardstatus string from 16 to 256. * Some commands can be remotely queried using the -Q command-line flag. In-Progress: * Scripting support (thanks to Google Summer of Code 2009 project by Rui Guo) Developers: * Alexander Naumov * Amadeusz SÅ‚awiÅ„ski * Juergen Weigert * Michael Schroeder * Micah Cowan * Sadrul Habib Chowdhury Contributors: * Clavelito * Dick * Gabriel * Benjamin Andresen * Takeshi Banse * Maarten Billemont * Curtis Brown * Cyril Brulebois * Trent W Buck * Stephane Chazelas * Kees Cook * Thomas Dickey * Christian Ebert * Geraint Edwards * Romain Francoise * Alexander Gattin * Emanuele Giaquinta * Yi-Hsuan Hsin * Kipling Inscore * Chris Jones * Max Kalashnikov * Steve Kemp * Ryan Niebur * Jan Christoph Nordholz * William Pursell * Michael Scherer * Enrico Scholz * Peter Teichman 30.10.94 This is a quick overview of screen's life story. But it is not up to date. You'll find more details about the revision history in patchlevel.h and newer changes are only documented there. 31.7.93 -- 3.5.1 ================ * writelock, number, paste with arg, at, zombie and wall commands added. * Access Control Lists and more multi-user support added. * select and setenv commands enhanced. * socket.c: motorola bugfix. * configure.in: --srcdir support. * configure.in: recognize alpha and SUNOS3 correctly. * doc/screen.texinfo: Documentation by Jason Merrill. 13.05.93 -- 3.3.3 ================= * defautonuke, silence commands added. * exec command added. * hardcopydir, logdir commands added. * Made a superb configure script. * BROKEN_PIPE, SOCK_NOT_IN_FS added for braindamaged systems. * multi display, multi user support. * process command. CS, CE switch cursorkeycap in application mode. * lockprg pow_detaches on SIGHUP * ins_reg copy_reg commands. * new screenrc syntax. * split up screen.c and ansi.c 21.10.92 -- 3.2.9 ================ * ChangeLog: replaces CHANGES and is in GNUish format. * Makefile (CFLAGS, M_CFLAGS, LIBS, OPTIONS): moved user config here, merged all Makefiles, GNUified * socket.c (FindSocket): ignoring bad files in $SCREENDIR * config/config.linux: ported. * utmp.c, exec.c, loadav.c: split apart from screen.c/fileio.c 15.07.92 -- 3.2.8 ================= * ansi.c (WriteString): automatic character set switching for 8bit support 3.2.3-3.2.7 =========== * concept changes: Display structure, Multi attacher ... 3.2.2 ===== * screen.c (main): -m option, "_M_ake always new session", ignore $STY * screen.c (main): -Ssessionname * fileio.c (RcLine): ^A:sessionname give your session a nicer name. * screen.c (main): supporting detached startup via screen -d -m -Ssockname * fileio.c (stripdev): moved, could not compile * overlay.h: "stackable overlay concept" * search.c: vi-like / and ? search AND emacs-like ^S and ^R incremental search in scrollback * mark.c: I meant BSDI not BSD * concept change: struct display and struct newwin introduced. * screen.c (main): -v option prints version. * screen.c (MakeWindow): ^A:screen /dev/ttya opens a character device instead of forking ShellProg with a pty pair. 3.2.0 ===== Ultrix port Irix 3.3 SGI port shadow password suite supported data loss on stdin overflow fixed "refresh off" keyword added. 3.1.1 ------ Screen is now under the GNU copyleft license. See file COPYING. command line option -A. $LINES, $COLUMNS improved. C-A : vbellwait XENIX support (Ronald Khoo) SYSV has uname() instead of gethostname(). hpux has setresuid. ClearScreen now saves image to scrollback buffer. mips has setenv. numerous bugfixes. 3.1 finally released version. ============================= 3.0.99: last minute changes: ---------------------------- MIPS support (J{rvinen Markku) SVR4 support (Marc Boucher) secopen() secfopen() calls replace stat/access/open. C-a : echo improved. 'register int' Changes up to Screen 3.0 Patchlevel 7 ===================================== Better terminfo support: Screen now checks if a termcap/info entry which the name "screen.$TERM" does exist. Look in the "VIRTUAL TERMINAL" section of the manual for more details. Many security improvements. ScrollRegion() bug fixed which caused slow scrolling if AL or DL was used. Pyramid and Ultrix support added. (Tim and Larry) ENVIRONMENT support. /local/etc/screenrc checks for $SYSSCREENRC $HOME/.screenrc checks for $ISCREENRC and $SCREENRC /local/screens checks for $ISCREENDIR and $SCREENDIR .screenrc understands ${VAR} and $VAR . screen 3.0 Patchlevel 6 ======================= .screenrc: screen now only opens the windows you explicitly ask for. If you specify none, you still get one window, of course. screen 3.0. Patchlevel 5 ======================== Ansi prototyping by Christos. copy mode: CTRL-U / CTRL-D exchanged. code cleanup. changes to screen 3.0 patchlevel 4 ================================== markkeys "string" allows to rebind the keys used in copy/history mode. string is made up of pairs "=" which are separated by a colon. Oldchar and newchar are either single ascii characters, or the two character sequence ^x, where x is an ascii character, or a 3 digit octal value prepended with '\'. the string "\040=.:^M=q" rebinds '.' to set marks, and the return key will abort copy mode. set scrollback 100 resizes the scrollback history buffer to 100 lines. a default of 50 is installed. A Howard Chu like scrollback history is installed. Many vi-like keys are added to the copy mode. The '?' key reports on cursor position. screen 3.0 Patchlevel 3 ======================= WriteString fixed, it did kill the display variable. Yet another LP bugfix. non vt100 semi-graphics character support. waynes patch fixed screen 3.0 Patchlevel 2 ======================= wayne patches cursor motion outside scrollregions. .screenrc monitor on|off changes in Screen 3.0 Patchlevel 1 ================================== screen -wipe ^A : set vbell_msg "Wuff Wuff" Thousand enhancements: help resizable, copy'n'paste in main socket loop, and no more '\0' hackin'. :WS=\E8;%d;%dt: screen can now resize windows under sunview. ^A : set crlf on|off effects markroutine join. screen learned about sized windows under X screen -ls (-d) -q quiet option. We count the number of detached (attached) sessions and set a return value of 10+n. The -q option inhibits all startup warnings/messages. i.e. screen -R -q may return with code 12 or higher or start a new/old session. pow_detach_msg "text string" new command, allows messages, terminal reset, etc. on logout caused by pow_detach. ^A : learned a new keyword "set": commands like "login on" , "vbell off", ... affect the default for windows to be created. But commands like "set login off" affect the actual setting of this window. and not the default. such commands may be bound to keys. example: bind 'O' set login off is valid in your .screenrc as well as typed at the ':' prompt. a bonus is ":set all" which is synonym to ":help". At the Colon prompt also KeyNames can be entered, although that makes not always sense. ^A x uses a builtin lockprg, if a) we don't find our lockprg, or b) user supplies us with the environment variable LOCKPRG set to "builtin" the builtin locks until your login password is typed. on systems using "shadow password files" you are prompted for a password. markroutine can append joined. screen removes the "controlling tty" from utmp while ptys are attached. markroutine performs CR+NL when '\n' is pressed screen may die quietly, when no TERMCAP entry for "screen" is found, and screen is run under X-windows _SEQUENT_ marks sequent386_ptx screen runs now under SunOS4.1.1 (we need setsid()!). bug in SetForeWindow fixed. rare markroutine bug fixed. we don't open every file the attacher tells us. we have now our wonderful "Wuff, Wuff" visual_bell we have now the interprocess-communication-buffer. secure version. '^A =' removes the interprocess-communication-buffer. markroutine as in 2.1 markroutine: 'a' toggles append mode, '>' like ' ', but immediately WriteFile(DUMP_EXCHANGE) then. 'A' like ' ', but first switch to append mode. .screenrc understands "screen 2:faui09 rlogin faui09 -l jnweiger" and "password none" and "vbell [on|off]" '^A :' allows .screenrc commands "online". screen now receives new $TERM from attacher, when it is reattached MakeClientSocket() fifo version does now test for access. .screenrc learns "hardstatus {on|off}" termcap's VB is used for vbell if available. Attach() code rewritten: screen now lists socket directory, if it does not find a suitable socket screen -d [host.tty] detaches a running screen. screen -[ls|list] list all sockets that we find in our sockdir when the socket has been removed, send a SIGCHLD to the poor SCREEN process and it will try to recover. then try a 'screen -r' again. all the socket stuff lives now in an extra file. Major changes in version 2.4: ============================= * Test version that presents the erlangen extensions from 2.0 in a 2.3 screen. * window resize support * screen locking C-a x * support for SYSV * password protection * copy & paste across screens * remote detach and power detach Major changes in version 2.3: * Terminal emulation has been significantly enhanced and bugfixed. * We now fully update the last character on the screen for true auto- margin terminals, though there may be some delay before the character can be safely added to the screen. If your terminal has character insert it will be used to shorten the delay. * Added the "termcap" .screenrc command to tweak your terminal's termcap entry AND to customize the termcap generated for the virtual terminals. See also the -L and -O command-line options, and the SCREENCAP environ- ment variable. * Fixed screen's character handling when detached or suspended to NOT block the child processes in their windows -- output continues to be processed in the background. * Added a.k.a.s (window-name aliases) that allow you to customize the window-information line, including being able to change the name on- the-fly to reflect what's currently running in the window (see the -k option, shellaka command, and ALSO KNOWN AS discussion in the doc). * Added the ability to log the output of a window to a file (see the "C-a H" (log) command). * Flow-control can now be set for each window and switched interactively (see the "flow" command, -f option, and FLOW CONTROL discussion). * Individual windows can be included or excluded from mention in the /etc/utmp file (see the "login" command and -l option). * Added an activity monitor, which allows you to have a window watched for the start of any output and alert you when it occurs (see the "C-a M" (monitor) command). * Enhanced the information in the window-information line to keep track of windows that have: logging turned on '(L)'; beeped in the background '!'; became active while being monitored '@' (see the "C-a w" (windows) command). * Added an on-line help display that lists all the commands and their key bindings (see the "C-a ?" (help) command). * Extended handling of the beep message (and also the new activity message) to allow '~' to specify a literal beep (see the "beep" and "activity" .screenrc commands). * You can now set the default action on receipt of a hangup signal: detach or terminate (see the "autodetach" .screenrc command). * Routing of characters to their virtual terminals has been enhanced to not drop characters nor (in rare circumstances) hang up screen. * The NFS compatibility has been enhanced. Major changes in version 2.0a: * Screen allows you to `detach' the "screen" session from the physical terminal and resume it at a later point in time (possibly on a different terminal or in a different login session). To get an impression of this functionality do the following: - call "screen" and create a couple of windows - type Control-A Control-D (screen terminates; you are back in the shell) - call "screen -r" to resume the detached screen * Screen supports multiple character sets and the ISO 2022 control functions to designate and switch between character sets. This allows you, for instance, to make use of the VT100 graphics character set or national character sets. screen-4.9.1/logfile.c0000664000175000017500000001626014467014146013253 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include /* dev_t, ino_t, off_t, ... */ #include /* struct stat */ #include /* O_WRONLY for logfile_reopen */ #include "config.h" #include "screen.h" #include "extern.h" #include "logfile.h" static void changed_logfile __P((struct logfile *)); static struct logfile *lookup_logfile __P((char *)); static int stolen_logfile __P((struct logfile *)); static struct logfile *logroot = NULL; static void changed_logfile(struct logfile *l) { struct stat o, *s = l->st; if (fstat(fileno(l->fp), &o) < 0) /* get trouble later */ return; if (o.st_size > s->st_size) { /* aha, appended text */ s->st_size = o.st_size; /* this should have changed */ s->st_mtime = o.st_mtime; /* only size and mtime */ } } /* * Requires fd to be open and need_fd to be closed. * If possible, need_fd will be open afterwards and refer to * the object originally reffered by fd. fd will be closed then. * Works just like ``fcntl(fd, DUPFD, need_fd); close(fd);'' * * need_fd is returned on success, else -1 is returned. */ int lf_move_fd(int fd, int need_fd) { int r = -1; if (fd == need_fd) return fd; if (fd >=0 && fd < need_fd) r = lf_move_fd(dup(fd), need_fd); close(fd); return r; } static int logfile_reopen(char *name, int wantfd, struct logfile *l) { int got_fd; close(wantfd); if (((got_fd = open(name, O_WRONLY | O_CREAT | O_APPEND, 0666)) < 0) || lf_move_fd(got_fd, wantfd) < 0) { logfclose(l); debug1("logfile_reopen: failed for %s\n", name); return -1; } changed_logfile(l); debug2("logfile_reopen: %d = %s\n", wantfd, name); return 0; } static int (* lf_reopen_fn)() = logfile_reopen; /* * Whenever logfwrite discoveres that it is required to close and * reopen the logfile, the function registered here is called. * If you do not register anything here, the above logfile_reopen() * will be used instead. * Your function should perform the same steps as logfile_reopen(): * a) close the original filedescriptor without flushing any output * b) open a new logfile for future output on the same filedescriptor number. * c) zero out st_dev, st_ino to tell the stolen_logfile() indcator to * reinitialise itself. * d) return 0 on success. */ void logreopen_register(fn) int (*fn) __P((char *, int, struct logfile *)); { lf_reopen_fn = fn ? fn : logfile_reopen; } /* * If the logfile has been removed, truncated, unlinked or the like, * return nonzero. * The l->st structure initialised by logfopen is updated * on every call. */ static int stolen_logfile(struct logfile *l) { struct stat o, *s = l->st; o = *s; if (fstat(fileno(l->fp), s) < 0) /* remember that stat failed */ s->st_ino = s->st_dev = 0; ASSERT(s == l->st); if (!o.st_dev && !o.st_ino) /* nothing to compare with */ return 0; if ((!s->st_dev && !s->st_ino) || /* stat failed, that's new! */ !s->st_nlink || /* red alert: file unlinked */ (s->st_size < o.st_size) || /* file truncated */ (s->st_mtime != o.st_mtime) || /* file modified */ ((s->st_ctime != o.st_ctime) && /* file changed (moved) */ !(s->st_mtime == s->st_ctime && /* and it was not a change */ o.st_ctime < s->st_ctime))) /* due to delayed nfs write */ { debug1("stolen_logfile: %s stolen!\n", l->name); debug3("st_dev %d, st_ino %d, st_nlink %d\n", (int)s->st_dev, (int)s->st_ino, (int)s->st_nlink); debug2("s->st_size %d, o.st_size %d\n", (int)s->st_size, (int)o.st_size); debug2("s->st_mtime %d, o.st_mtime %d\n", (int)s->st_mtime, (int)o.st_mtime); debug2("s->st_ctime %d, o.st_ctime %d\n", (int)s->st_ctime, (int)o.st_ctime); return -1; } debug1("stolen_logfile: %s o.k.\n", l->name); return 0; } static struct logfile *lookup_logfile(char *name) { struct logfile *l; for (l = logroot; l; l = l->next) if (!strcmp(name, l->name)) return l; return NULL; } struct logfile *logfopen(char *name, FILE *fp) { struct logfile *l; if (!fp) { if (!(l = lookup_logfile(name))) return NULL; l->opencount++; return l; } if (!(l = (struct logfile *)malloc(sizeof(struct logfile)))) return NULL; if (!(l->st = (struct stat *)malloc(sizeof(struct stat)))) { free((char *)l); return NULL; } if (!(l->name = SaveStr(name))) { free((char *)l->st); free((char *)l); return NULL; } l->fp = fp; l->opencount = 1; l->writecount = 0; l->flushcount = 0; changed_logfile(l); l->next = logroot; logroot = l; return l; } int islogfile(char *name) { if (!name) return logroot ? 1 : 0; return lookup_logfile(name) ? 1 : 0; } int logfclose(struct logfile *l) { struct logfile **lp; for (lp = &logroot; *lp; lp = &(*lp)->next) if (*lp == l) break; if (!*lp) return -1; if ((--l->opencount) > 0) return 0; if (l->opencount < 0) abort(); *lp = l->next; fclose(l->fp); free(l->name); free((char *)l); return 0; } /* * XXX * write and flush both *should* check the file's stat, if it disappeared * or changed, re-open it. */ int logfwrite(struct logfile *l, char *buf, int n) { int r; if (stolen_logfile(l) && lf_reopen_fn(l->name, fileno(l->fp), l)) return -1; r = fwrite(buf, n, 1, l->fp); l->writecount += l->flushcount + 1; l->flushcount = 0; changed_logfile(l); return r; } int logfflush(struct logfile *l) { int r = 0; if (!l) for (l = logroot; l; l = l->next) { if (stolen_logfile(l) && lf_reopen_fn(l->name, fileno(l->fp), l)) return -1; r |= fflush(l->fp); l->flushcount++; changed_logfile(l); } else { if (stolen_logfile(l) && lf_reopen_fn(l->name, fileno(l->fp), l)) return -1; r = fflush(l->fp); l->flushcount++; changed_logfile(l); } return r; } screen-4.9.1/viewport.h0000664000175000017500000000371214467014146013514 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #ifndef SCREEN_VIEWPORT_H #define SCREEN_VIEWPORT_H #include "canvas.h" struct viewport { struct viewport *v_next; /* next vp on canvas */ struct canvas *v_canvas; /* back pointer to canvas */ int v_xoff; /* layer x offset on display */ int v_yoff; /* layer y offset on display */ int v_xs; /* vp upper left */ int v_xe; /* vp upper right */ int v_ys; /* vp lower left */ int v_ye; /* vp lower right */ }; extern int RethinkDisplayViewports __P((void)); extern void RethinkViewportOffsets __P((struct canvas *)); #endif /* SCREEN_VIEWPORT_H */ screen-4.9.1/configure0000775000175000017500000070654114467014300013375 0ustar alexalex#! /bin/sh # From configure.ac Revision. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='' PACKAGE_TARNAME='' PACKAGE_VERSION='' PACKAGE_STRING='' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="screen.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='LTLIBOBJS LIBOBJS ETCSCREENRC XTERMPATH WRITEPATH INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM AWK EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ac_prefix_program VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_socket_dir with_socket_dir with_pty_mode with_pty_group enable_pam enable_use_locale enable_telnet enable_colors256 enable_rxvt_osc with_sys_screenrc ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-socket-dir disable system wide socket-dir and use ~/.screen instead --enable-pam enable PAM support --enable-use-locale use localized month/day names (default: yes) --enable-telnet enable builtin telnet --enable-colors256 enable support for 256 colors --enable-rxvt_osc enable support for rxvt OSC codes Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-socket-dir=path where to put the per-user sockets --with-pty-mode=mode default mode for ptys --with-pty-group=group default group for ptys --with-sys-screenrc=path to the global screenrc file Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that # executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" # Auxiliary files required by this configure script. ac_aux_files="install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" rev=`sed < ${srcdir}/patchlevel.h -n -e '/#define REV/s/#define REV *//p'` vers=`sed < ${srcdir}/patchlevel.h -n -e '/#define VERS/s/#define VERS *//p'` pat=`sed < ${srcdir}/patchlevel.h -n -e '/#define PATCHLEVEL/s/#define PATCHLEVEL *//p'` VERSION="$rev.$vers.$pat" echo "this is screen version $VERSION" 1>&6 if test "x$prefix" = xNONE; then printf %s "checking for prefix by " >&6 # Extract the first word of "screen", so it can be a program name with args. set dummy screen; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_prefix_program+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_prefix_program in [\\/]* | ?:[\\/]*) ac_cv_path_ac_prefix_program="$ac_prefix_program" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_prefix_program="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_prefix_program=$ac_cv_path_ac_prefix_program if test -n "$ac_prefix_program"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prefix_program" >&5 printf "%s\n" "$ac_prefix_program" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$ac_prefix_program"; then prefix=`$as_dirname -- "$ac_prefix_program" || $as_expr X"$ac_prefix_program" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_prefix_program" : 'X\(//\)[^/]' \| \ X"$ac_prefix_program" : 'X\(//\)$' \| \ X"$ac_prefix_program" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_prefix_program" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` prefix=`$as_dirname -- "$prefix" || $as_expr X"$prefix" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$prefix" : 'X\(//\)[^/]' \| \ X"$prefix" : 'X\(//\)$' \| \ X"$prefix" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$prefix" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` fi fi if test "x$prefix" = xNONE; then printf %s "checking for prefix by " >&6 # Extract the first word of "gzip", so it can be a program name with args. set dummy gzip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_prefix_program+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_prefix_program in [\\/]* | ?:[\\/]*) ac_cv_path_ac_prefix_program="$ac_prefix_program" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_prefix_program="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_prefix_program=$ac_cv_path_ac_prefix_program if test -n "$ac_prefix_program"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prefix_program" >&5 printf "%s\n" "$ac_prefix_program" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$ac_prefix_program"; then prefix=`$as_dirname -- "$ac_prefix_program" || $as_expr X"$ac_prefix_program" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_prefix_program" : 'X\(//\)[^/]' \| \ X"$ac_prefix_program" : 'X\(//\)$' \| \ X"$ac_prefix_program" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_prefix_program" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` prefix=`$as_dirname -- "$prefix" || $as_expr X"$prefix" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$prefix" : 'X\(//\)[^/]' \| \ X"$prefix" : 'X\(//\)$' \| \ X"$prefix" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$prefix" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` fi fi old_CFLAGS="$CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 printf %s "checking whether $CC needs -traditional... " >&6; } if test ${ac_cv_prog_gcc_traditional+y} then : printf %s "(cached) " >&6 else $as_nop ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1 then : ac_cv_prog_gcc_traditional=yes else $as_nop ac_cv_prog_gcc_traditional=no fi rm -rf conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1 then : ac_cv_prog_gcc_traditional=yes fi rm -rf conftest* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 printf %s "checking for library containing strerror... " >&6; } if test ${ac_cv_search_strerror+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char strerror (); int main (void) { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_strerror+y} then : break fi done if test ${ac_cv_search_strerror+y} then : else $as_nop ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 printf "%s\n" "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else $as_nop ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else $as_nop MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -f etc/toolcheck; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for buggy tools..." >&5 printf "%s\n" "$as_me: checking for buggy tools..." >&6;} sh etc/toolcheck 1>&6 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if a system-wide socket dir should be used" >&5 printf %s "checking if a system-wide socket dir should be used... " >&6; } # Check whether --enable-socket-dir was given. if test ${enable_socket_dir+y} then : enableval=$enable_socket_dir; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no. ~/.screen will be used instead." >&5 printf "%s\n" "no. ~/.screen will be used instead." >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the socket dir" >&5 printf %s "checking for the socket dir... " >&6; } SOCKDIR="(eff_uid ? \"/tmp/uscreens\" : \"/tmp/screens\")" # Check whether --with-socket-dir was given. if test ${with_socket_dir+y} then : withval=$with_socket_dir; case "${withval}" in *\"*) SOCKDIR="${withval}" ;; *) SOCKDIR="\"${withval}\"" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${SOCKDIR}" >&5 printf "%s\n" "${SOCKDIR}" >&6; } printf "%s\n" "#define SOCKDIR $SOCKDIR" >>confdefs.h fi if test "$cross_compiling" = no && test -n "$ISC" ; then printf "%s\n" "#define ISC 1" >>confdefs.h LIBS="$LIBS -linet" fi if test "$cross_compiling" = no && test -f /sysV68 ; then printf "%s\n" "#define sysV68 1" >>confdefs.h fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MIPS..." >&5 printf "%s\n" "$as_me: checking for MIPS..." >&6;} if test -f /lib/libmld.a || test -f /usr/lib/libmld.a || test -f /usr/lib/cmplrs/cc/libmld.a; then oldlibs="$LIBS" test -f /bin/mx || LIBS="$LIBS -lmld" # for nlist. But not on alpha. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking mld library..." >&5 printf "%s\n" "$as_me: checking mld library..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -r /dev/ptc; then printf "%s\n" "#define MIPS 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait3..." >&5 printf "%s\n" "$as_me: checking wait3..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { wait3(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait2..." >&5 printf "%s\n" "$as_me: checking wait2..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { wait2(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define USE_WAIT2 1" >>confdefs.h LIBS="$LIBS -lbsd" ; CC="$CC -I/usr/include/bsd" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Ultrix..." >&5 printf "%s\n" "$as_me: checking for Ultrix..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(ultrix) || defined(__ultrix) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : ULTRIX=1 fi rm -rf conftest* if test "$cross_compiling" = no && test -f /usr/lib/libpyr.a ; then oldlibs="$LIBS" LIBS="$LIBS -lpyr" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Pyramid OSX..." >&5 printf "%s\n" "$as_me: checking Pyramid OSX..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { open_controlling_pty("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define OSX 1" >>confdefs.h else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for butterfly..." >&5 printf "%s\n" "$as_me: checking for butterfly..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(butterfly) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : butterfly=1 fi rm -rf conftest* if test -z "$butterfly"; then if test -n "$ULTRIX"; then test -z "$GCC" && CC="$CC -YBSD" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for POSIX.1..." >&5 printf "%s\n" "$as_me: checking for POSIX.1..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifdef _POSIX_VERSION YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : echo "- you have a POSIX system" 1>&6 printf "%s\n" "#define POSIX 1" >>confdefs.h posix=1 fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for System V..." >&5 printf "%s\n" "$as_me: checking for System V..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { int x = SIGCHLD | FNDELAY; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop printf "%s\n" "#define SYSV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sequent/ptx..." >&5 printf "%s\n" "$as_me: checking for sequent/ptx..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _SEQUENT_ YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -linet";seqptx=1 fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SVR4..." >&5 printf "%s\n" "$as_me: checking SVR4..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if defined(SVR4) || defined(__SVR4) yes; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : echo "- you have a SVR4 system" 1>&6 printf "%s\n" "#define SVR4 1" >>confdefs.h svr4=1 fi rm -rf conftest* if test -n "$svr4" ; then oldlibs="$LIBS" LIBS="$LIBS -lelf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking SVR4..." >&5 printf "%s\n" "$as_me: checking SVR4..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_fn_c_check_header_compile "$LINENO" "dwarf.h" "ac_cv_header_dwarf_h" "$ac_includes_default" if test "x$ac_cv_header_dwarf_h" = xyes then : printf "%s\n" "#define BUGGYGETLOGIN 1" >>confdefs.h else $as_nop ac_fn_c_check_header_compile "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default" if test "x$ac_cv_header_elf_h" = xyes then : printf "%s\n" "#define BUGGYGETLOGIN 1" >>confdefs.h fi fi else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$ac_includes_default" if test "x$ac_cv_header_stropts_h" = xyes then : printf "%s\n" "#define HAVE_STROPTS_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes then : printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris 2.x..." >&5 printf "%s\n" "$as_me: checking for Solaris 2.x..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(SVR4) && defined(sun) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -lnsl -lkstat" fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking BSD job jontrol..." >&5 printf "%s\n" "$as_me: checking BSD job jontrol..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (void) { #ifdef POSIX tcsetpgrp(0, 0); #else int x = TIOCSPGRP; #ifdef SYSV setpgrp(); #else int y = TIOCNOTTY; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : echo "- you have jobcontrol" 1>&6 printf "%s\n" "#define BSDJOBS 1" >>confdefs.h else $as_nop echo "- you don't have jobcontrol" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking setresuid..." >&5 printf "%s\n" "$as_me: checking setresuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setresuid(0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define HAVE_SETRESUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking setreuid..." >&5 printf "%s\n" "$as_me: checking setreuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setreuid(0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define HAVE_SETREUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking seteuid..." >&5 printf "%s\n" "$as_me: checking seteuid..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { #if defined(linux) || defined(NeXT) || defined(_AUX_SOURCE) || defined(AUX) || defined(ultrix) || (defined(sun) && defined(SVR4)) || defined(ISC) || defined(sony_news) int seteuid_is_broken(int); seteuid_is_broken(0); #else seteuid(0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define HAVE_SETEUID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking execvpe..." >&5 printf "%s\n" "$as_me: checking execvpe..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { execvpe(0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define HAVE_EXECVPE 1" >>confdefs.h CFLAGS="$CFLAGS -D_GNU_SOURCE" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking select..." >&5 printf "%s\n" "$as_me: checking select..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$LIBS -lnet -lnsl" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking select with $LIBS..." >&5 printf "%s\n" "$as_me: checking select with $LIBS..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop as_fn_error $? "!!! no select - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking fifos..." >&5 printf "%s\n" "$as_me: checking fifos..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming fifos are usable" 1>&6 fifo=1 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif char *fin = "/tmp/conftest$$"; int main() { struct stat stb; fd_set f; (void)alarm(5); unlink(fin); #ifdef POSIX if (mkfifo(fin, 0777)) #else if (mknod(fin, S_IFIFO|0777, 0)) #endif return 1; if (stat(fin, &stb) || (stb.st_mode & S_IFIFO) != S_IFIFO) return 1; close(0); #ifdef __386BSD__ /* * The next test fails under 386BSD, but screen works using fifos. * Fifos in O_RDWR mode are only used for the BROKEN_PIPE case and for * the select() configuration test. */ return 0; #endif if (open(fin, O_RDONLY | O_NONBLOCK)) return 1; if (fork() == 0) { close(0); if (open(fin, O_WRONLY | O_NONBLOCK)) return 1; close(0); if (open(fin, O_WRONLY | O_NONBLOCK)) return 1; if (write(0, "TEST", 4) == -1) return 1; return 0; } FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your fifos are usable" 1>&6 fifo=1 else $as_nop echo "- your fifos are not usable" 1>&6 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* if test -n "$fifo"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken fifo implementation..." >&5 printf "%s\n" "$as_me: checking for broken fifo implementation..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming fifo implementation is ok" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif char *fin = "/tmp/conftest$$"; int main() { struct timeval tv; fd_set f; #ifdef POSIX if (mkfifo(fin, 0600)) #else if (mknod(fin, S_IFIFO|0600, 0)) #endif return 1; close(0); if (open(fin, O_RDONLY|O_NONBLOCK)) return 1; FD_SET(0, &f); tv.tv_sec = 1; tv.tv_usec = 0; if (select(1, &f, 0, 0, &tv)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your implementation is ok" 1>&6 else $as_nop echo "- you have a broken implementation" 1>&6 printf "%s\n" "#define BROKEN_PIPE 1" >>confdefs.h fifobr=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking sockets..." >&5 printf "%s\n" "$as_me: checking sockets..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming sockets are usable" 1>&6 sock=1 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #include #include #include #include char *son = "/tmp/conftest$$"; int main() { int s1, s2, l; struct sockaddr_un a; fd_set f; (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 1; a.sun_family = AF_UNIX; strcpy(a.sun_path, son); (void) unlink(son); if (bind(s1, (struct sockaddr *) &a, strlen(son)+2) == -1) return 1; if (listen(s1, 2)) return 1; if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(son) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); return 0; } l = sizeof(a); close(0); if (accept(s1, &a, &l)) return 1; FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- your sockets are usable" 1>&6 sock=1 else $as_nop echo "- your sockets are not usable" 1>&6 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* if test -n "$sock"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking socket implementation..." >&5 printf "%s\n" "$as_me: checking socket implementation..." >&6;} if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming sockets are normal" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include #include #include char *son = "/tmp/conftest$$"; int main() { int s; struct stat stb; struct sockaddr_un a; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 0; a.sun_family = AF_UNIX; strcpy(a.sun_path, son); (void) unlink(son); if (bind(s, (struct sockaddr *) &a, strlen(son)+2) == -1) return 0; if (stat(son, &stb)) return 1; close(s); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- you are normal" 1>&6 else $as_nop echo "- unix domain sockets are not kept in the filesystem" 1>&6 printf "%s\n" "#define SOCK_NOT_IN_FS 1" >>confdefs.h socknofs=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f /tmp/conftest* fi if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming select is ok" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For select - According to POSIX 1003.1-2001 */ #include /* For select - According to earlier standards */ #include #include #include #include #include #include char *nam = "/tmp/conftest$$"; #ifdef NAMEDPIPE #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif int main() { fd_set f; #ifdef __FreeBSD__ /* From Andrew A. Chernov (ache@astral.msk.su): * opening RDWR fifo fails in BSD 4.4, but select return values are * right. */ return 0; #endif (void)alarm(5); #ifdef POSIX if (mkfifo(nam, 0777)) #else if (mknod(nam, S_IFIFO|0777, 0)) #endif return 1; close(0); if (open(nam, O_RDWR | O_NONBLOCK)) return 1; if (write(0, "TEST", 4) == -1) return 1; #else #include #include #include #include #include #include int main() { int s1, s2, l; struct sockaddr_un a; fd_set f; (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return 1; a.sun_family = AF_UNIX; strcpy(a.sun_path, nam); (void) unlink(nam); if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) return 1; if (listen(s1, 2)) return 1; if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); return 0; } l = sizeof(a); close(0); if (accept(s1, (struct sockaddr *)&a, &l)) return 1; #endif FD_SET(0, &f); if (select(1, &f, 0, 0, 0) == -1) return 1; if (select(1, &f, &f, 0, 0) != 2) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- select is ok" 1>&6 else $as_nop echo "- select can not count" 1>&6 printf "%s\n" "#define SELECT_BROKEN 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent..." >&5 printf "%s\n" "$as_me: checking for tgetent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop olibs="$LIBS" LIBS="-lcurses $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libcurses..." >&5 printf "%s\n" "$as_me: checking libcurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #ifdef __hpux __sorry_hpux_libcurses_is_totally_broken_in_10_10(); #else tgetent((char *)0, (char *)0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltermcap $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtermcap..." >&5 printf "%s\n" "$as_me: checking libtermcap..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltermlib $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtermlib..." >&5 printf "%s\n" "$as_me: checking libtermlib..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-lncursesw $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libncursesw..." >&5 printf "%s\n" "$as_me: checking libncursesw..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltinfow $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtinfow..." >&5 printf "%s\n" "$as_me: checking libtinfow..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-lncurses $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libncurses..." >&5 printf "%s\n" "$as_me: checking libncurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="-ltinfo $olibs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking libtinfo..." >&5 printf "%s\n" "$as_me: checking libtinfo..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop as_fn_error $? "!!! no tgetent - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming terminfo database is used" 1>&6 printf "%s\n" "#define TERMINFO 1" >>confdefs.h else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { return(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo "- you use the termcap database" 1>&6 else $as_nop echo "- you use the terminfo database" 1>&6 printf "%s\n" "#define TERMINFO 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ospeed..." >&5 printf "%s\n" "$as_me: checking ospeed..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern short ospeed; int main (void) { ospeed=5; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop printf "%s\n" "#define NEED_OSPEED 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc..." >&5 printf "%s\n" "$as_me: checking for /dev/ptc..." >&6;} if test -r /dev/ptc; then printf "%s\n" "#define HAVE_DEV_PTC 1" >>confdefs.h fi fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SVR4 ptys..." >&5 printf "%s\n" "$as_me: checking for SVR4 ptys..." >&6;} sysvr4ptys= if test -c /dev/ptmx ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { ptsname(0);grantpt(0);unlockpt(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define HAVE_SVR4_PTYS 1" >>confdefs.h sysvr4ptys=1 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi ac_fn_c_check_func "$LINENO" "getpt" "ac_cv_func_getpt" if test "x$ac_cv_func_getpt" = xyes then : printf "%s\n" "#define HAVE_GETPT 1" >>confdefs.h fi if test -z "$sysvr4ptys"; then for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" if test "x$ac_cv_func_openpty" = xyes then : printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 printf %s "checking for openpty in -lutil... " >&6; } if test ${ac_cv_lib_util_openpty+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char openpty (); int main (void) { return openpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_util_openpty=yes else $as_nop ac_cv_lib_util_openpty=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 printf "%s\n" "$ac_cv_lib_util_openpty" >&6; } if test "x$ac_cv_lib_util_openpty" = xyes then : printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" fi fi done fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ptyranges..." >&5 printf "%s\n" "$as_me: checking for ptyranges..." >&6;} if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : ptys=`echo /dev/ptyp??` else $as_nop ptys=`echo $pdir/pty??` fi rm -rf conftest* if test "$ptys" != "$pdir/pty??" ; then p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'` p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'` printf "%s\n" "#define PTYRANGE0 \"$p0\"" >>confdefs.h printf "%s\n" "#define PTYRANGE1 \"$p1\"" >>confdefs.h fi fi # Check whether --with-pty-mode was given. if test ${with_pty_mode+y} then : withval=$with_pty_mode; ptymode="${withval}" fi # Check whether --with-pty-group was given. if test ${with_pty_group+y} then : withval=$with_pty_group; ptygrp="${withval}" fi test -n "$ptymode" || ptymode=0620 if test -n "$ptygrp" ; then printf "%s\n" "#define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "#define PTYGROUP $ptygrp" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking default tty permissions/group..." >&5 printf "%s\n" "$as_me: checking default tty permissions/group..." >&6;} rm -f conftest_grp if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; assuming ptys are world accessable" 1>&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include int main() { struct stat sb; char *x,*ttyname(); int om, m; FILE *fp; if (!(x = ttyname(0))) return 1; if (stat(x, &sb)) return 1; om = sb.st_mode; if (om & 002) return 0; m = system("mesg y"); if (m == -1 || m == 127) return 1; if (stat(x, &sb)) return 1; m = sb.st_mode; if (chmod(x, om)) return 1; if (m & 002) return 0; if (sb.st_gid == getgid()) return 1; if (!(fp=fopen("conftest_grp", "w"))) return 1; fprintf(fp, "%d\n", sb.st_gid); fclose(fp); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : if test -f conftest_grp; then ptygrp=`cat conftest_grp` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 printf "%s\n" "#define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "#define PTYGROUP $ptygrp" >>confdefs.h else echo "- ptys are world accessable" 1>&6 fi else $as_nop WRITEPATH='' XTERMPATH='' # Extract the first word of "write", so it can be a program name with args. set dummy write; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_WRITEPATH+y} then : printf %s "(cached) " >&6 else $as_nop case $WRITEPATH in [\\/]* | ?:[\\/]*) ac_cv_path_WRITEPATH="$WRITEPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_WRITEPATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi WRITEPATH=$ac_cv_path_WRITEPATH if test -n "$WRITEPATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WRITEPATH" >&5 printf "%s\n" "$WRITEPATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "xterm", so it can be a program name with args. set dummy xterm; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_XTERMPATH+y} then : printf %s "(cached) " >&6 else $as_nop case $XTERMPATH in [\\/]* | ?:[\\/]*) ac_cv_path_XTERMPATH="$XTERMPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_XTERMPATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XTERMPATH=$ac_cv_path_XTERMPATH if test -n "$XTERMPATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XTERMPATH" >&5 printf "%s\n" "$XTERMPATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi found= if test -n "$WRITEPATH$XTERMPATH"; then findfollow= lsfollow= found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null` if test -n "$found"; then findfollow=-follow lsfollow=L fi if test -n "$XTERMPATH"; then ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'` if test tty != "$ptygrpn"; then XTERMPATH= fi fi fi if test -n "$WRITEPATH$XTERMPATH"; then found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` if test -n "$found"; then ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 printf "%s\n" "#define PTYMODE $ptymode" >>confdefs.h printf "%s\n" "#define PTYGROUP $ptygrp" >>confdefs.h else echo "- ptys are world accessable" 1>&6 fi else echo "- can not determine - assume ptys are world accessable" 1>&6 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest_grp fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getutent..." >&5 printf "%s\n" "$as_me: checking getutent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* to get time_t on SCO */ #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif #ifdef __hpux #define pututline _pututline #endif int main (void) { int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define GETUTENT 1" >>confdefs.h else $as_nop olibs="$LIBS" LIBS="$LIBS -lgen" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getutent with -lgen..." >&5 printf "%s\n" "$as_me: checking getutent with -lgen..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif #ifdef __hpux #define pututline _pututline #endif int main (void) { int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define GETUTENT 1" >>confdefs.h else $as_nop LIBS="$olibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ut_host..." >&5 printf "%s\n" "$as_me: checking ut_host..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined(SVR4) && !defined(DGUX) #include #define utmp utmpx #else #include #endif int main (void) { struct utmp u; u.ut_host[0] = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define UTHOST 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_fn_c_check_header_compile "$LINENO" "utempter.h" "ac_cv_header_utempter_h" "$ac_includes_default" if test "x$ac_cv_header_utempter_h" = xyes then : have_utempter=yes else $as_nop have_utempter=no fi if test "$have_utempter" = yes; then printf "%s\n" "#define HAVE_UTEMPTER 1" >>confdefs.h LIBS="$LIBS -lutempter" fi if test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libutil(s)..." >&5 printf "%s\n" "$as_me: checking for libutil(s)..." >&6;} test -f /usr/lib/libutils.a && LIBS="$LIBS -lutils" test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getloadavg..." >&5 printf "%s\n" "$as_me: checking getloadavg..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getloadavg((double *)0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define LOADAV_GETLOADAVG 1" >>confdefs.h load=1 else $as_nop if test "$cross_compiling" = no && test -f /usr/lib/libkvm.a ; then olibs="$LIBS" LIBS="$LIBS -lkvm" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getloadavg with -lkvm..." >&5 printf "%s\n" "$as_me: checking getloadavg with -lkvm..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getloadavg((double *)0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define LOADAV_GETLOADAVG 1" >>confdefs.h load=1 else $as_nop LIBS="$olibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$load" ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(NeXT) || defined(apollo) || defined(linux) YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : load=1 fi rm -rf conftest* fi if test -z "$load" && test "$cross_compiling" = no ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kernelfile..." >&5 printf "%s\n" "$as_me: checking for kernelfile..." >&6;} for core in /unix /vmunix /dynix /hp-ux /xelos /dev/ksyms /kernel/unix /kernel/genunix /unicos /mach /netbsd /386bsd /dgux /bsd /stand/vmunix; do if test -f $core || test -c $core; then break fi done if test ! -f $core && test ! -c $core ; then echo "- no kernelfile found" 1>&6 else echo "- using kernelfile '$core'" 1>&6 if test -r $core ; then printf "%s\n" "#define LOADAV_UNIX \"$core\"" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "nlist.h" "ac_cv_header_nlist_h" "$ac_includes_default" if test "x$ac_cv_header_nlist_h" = xyes then : printf "%s\n" "#define NLIST_STRUCT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking n_un in struct nlist..." >&5 printf "%s\n" "$as_me: checking n_un in struct nlist..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { struct nlist n; n.n_un.n_name = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define NLIST_NAME_UNION 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nlist declaration..." >&5 printf "%s\n" "$as_me: checking for nlist declaration..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef NLIST_STRUCT # include #else # include #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "nlist(( | )( | )*.*\(|\()" >/dev/null 2>&1 then : printf "%s\n" "#define NLIST_DECLARED 1" >>confdefs.h fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for avenrun symbol..." >&5 printf "%s\n" "$as_me: checking for avenrun symbol..." >&6;} nlist64= for av in avenrun _avenrun _Loadavg avenrun _avenrun _Loadavg; do if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef NLIST_STRUCT #include #else #include #endif $nlist64 struct nlist nl[2]; int main() { #if !defined(_AUX_SOURCE) && !defined(AUX) # ifdef NLIST_NAME_UNION nl[0].n_un.n_name = "$av"; # else nl[0].n_name = "$av"; # endif #else strncpy(nl[0].n_name, "$av", sizeof(nl[0].n_name)); #endif nlist(LOADAV_UNIX, nl); if (nl[0].n_value == 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : avensym=$av;break fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$av" = _Loadavg; then nlist64='#define nlist nlist64' fi done if test -z "$avensym" ; then echo "- no avenrun symbol found" 1>&6 else echo "- using avenrun symbol '$avensym'" 1>&6 printf "%s\n" "#define LOADAV_AVENRUN \"$avensym\"" >>confdefs.h if test -n "$nlist64"; then echo "- used nlist64 to find it" 1>&6 printf "%s\n" "#define LOADAV_USE_NLIST64 1" >>confdefs.h fi load=1 fi else echo "Can't configure the load average display feature" 1>&6 echo "because $core is not readable by you." 1>&6 echo "To configure the load average display feature" 1>&6 echo "re-run configure as root if possible." 1>&6 echo "If you are not the system administrator then disregard" 1>&6 echo "this warning. You can still use screen without" 1>&6 echo "the load average display feature." 1>&6 fi fi fi cat > conftest.c < #include _CUT_HERE_ #if !defined(LOADAV_GETLOADAVG) && ((defined(hp300) && !defined(__hpux)) || defined(sun) || (defined(ultrix) && defined(mips)) || defined(_SEQUENT_) || defined(sgi) || (defined(SVR4) && !defined(__hpux)) || defined(sony_news) || (!defined(__osf__) && defined(__alpha)) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) || defined(m88k)) loadtype=long # if defined(apollo) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) loadscale=65536 # else # if defined(FSCALE) && !defined(__osf__) # undef FSCALE loadscale=FSCALE # else # ifdef sgi loadtype=int loadscale=1024 # else # if defined(MIPS) || defined(SVR4) || defined(m88k) loadscale=256 # else /* not MIPS */ loadscale=1000 /* our default value */ # endif /* MIPS */ # endif /* sgi */ # endif /* not FSCALE */ # endif /* not apollo */ #else loadtype=double loadscale=1 #endif #ifdef alliant loadnum=4 #else loadnum=3 #endif EOF eval "$ac_cpp conftest.c 2>&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out" . ./conftest.out rm -f conftest* if test -n "$load" ; then printf "%s\n" "#define LOADAV 1" >>confdefs.h fi if test -n "$loadtype" ; then printf "%s\n" "#define LOADAV_TYPE $loadtype" >>confdefs.h fi if test -n "$loadnum" ; then printf "%s\n" "#define LOADAV_NUM $loadnum" >>confdefs.h fi if test -n "$loadscale" ; then printf "%s\n" "#define LOADAV_SCALE $loadscale" >>confdefs.h fi if test -n "$posix" ; then echo "assuming posix signal definition" 1>&6 printf "%s\n" "#define SIGVOID 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers..." >&5 printf "%s\n" "$as_me: checking return type of signal handlers..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef signal #undef signal #endif extern void (*signal ()) (); int main (void) { int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define SIGVOID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking sigset..." >&5 printf "%s\n" "$as_me: checking sigset..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #ifdef SIGVOID sigset(0, (void (*)())0); #else sigset(0, (int (*)())0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define USESIGSET 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking signal implementation..." >&5 printf "%s\n" "$as_me: checking signal implementation..." >&6;} if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifdef USESIGSET #define signal sigset #endif int got; #ifdef SIGVOID void #endif hand() { got++; } int main() { /* on hpux we use sigvec to get bsd signals */ #ifdef __hpux (void)signal(SIGCLD, hand); kill(getpid(), SIGCLD); kill(getpid(), SIGCLD); if (got < 2) return 1; #endif return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : else $as_nop printf "%s\n" "#define SYSVSIGS 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for crypt and sec libraries..." >&5 printf "%s\n" "$as_me: checking for crypt and sec libraries..." >&6;} if test "$cross_compiling" = no ; then test -f /lib/libcrypt_d.a || test -f /usr/lib/libcrypt_d.a && LIBS="$LIBS -lcrypt_d" fi oldlibs="$LIBS" LIBS="$LIBS -lcrypt" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking crypt..." >&5 printf "%s\n" "$as_me: checking crypt..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = no ; then test -f /lib/libsec.a || test -f /usr/lib/libsec.a && LIBS="$LIBS -lsec" test -f /lib/libshadow.a || test -f /usr/lib/libshadow.a && LIBS="$LIBS -lshadow" fi oldlibs="$LIBS" LIBS="$LIBS -lsun" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking IRIX sun library..." >&5 printf "%s\n" "$as_me: checking IRIX sun library..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking syslog..." >&5 printf "%s\n" "$as_me: checking syslog..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { closelog(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else $as_nop oldlibs="$LIBS" LIBS="$LIBS -lbsd" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking syslog in libbsd.a..." >&5 printf "%s\n" "$as_me: checking syslog in libbsd.a..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { closelog(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : echo "- found." 1>&6 else $as_nop LIBS="$oldlibs" echo "- bad news: syslog missing." 1>&6 printf "%s\n" "#define NOSYSLOG 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX YES_IS_DEFINED; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 then : LIBS="$LIBS -lsocket -lcrypt_i" fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking wait union..." >&5 printf "%s\n" "$as_me: checking wait union..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { union wait x; int y; #ifdef WEXITSTATUS y = WEXITSTATUS(x); #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define BSDWAIT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test -z "$butterfly"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for termio or termios..." >&5 printf "%s\n" "$as_me: checking for termio or termios..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : printf "%s\n" "#define TERMIO 1" >>confdefs.h else $as_nop if test -n "$posix"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : printf "%s\n" "#define TERMIO 1" >>confdefs.h fi rm -f conftest.err conftest.i conftest.$ac_ext fi fi rm -f conftest.err conftest.i conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getspnam..." >&5 printf "%s\n" "$as_me: checking getspnam..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getspnam("x"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define SHADOWPW 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking getttyent..." >&5 printf "%s\n" "$as_me: checking getttyent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { getttyent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define GETTTYENT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking fdwalk..." >&5 printf "%s\n" "$as_me: checking fdwalk..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { fdwalk(NULL, NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define HAVE_FDWALK 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether memcpy/memmove/bcopy handles overlapping arguments..." >&5 printf "%s\n" "$as_me: checking whether memcpy/memmove/bcopy handles overlapping arguments..." >&6;} if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "#define USEBCOPY 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes then : echo "- skipping check because we are cross compiling; use memmove" 1>&6 printf "%s\n" "#define USEMEMMOVE 1" >>confdefs.h else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define bcopy(s,d,l) memmove(d,s,l) int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "#define USEMEMMOVE 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define bcopy(s,d,l) memcpy(d,s,l) int main() { char buf[10]; strcpy(buf, "abcdefghi"); bcopy(buf, buf + 2, 3); if (strncmp(buf, "ababcf", 6)) return 1; strcpy(buf, "abcdefghi"); bcopy(buf + 2, buf, 3); if (strncmp(buf, "cdedef", 6)) return 1; return 0; /* libc version works properly. */ } _ACEOF if ac_fn_c_try_run "$LINENO" then : printf "%s\n" "#define USEMEMCPY 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long file names" >&5 printf %s "checking for long file names... " >&6; } if test ${ac_cv_sys_long_file_names+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: # . the current directory, where building will happen # $prefix/lib where we will be installing things # $exec_prefix/lib likewise # $TMPDIR if set, where it might want to write temporary files # /tmp where it might want to write temporary files # /var/tmp likewise # /usr/tmp likewise for ac_dir in . "$TMPDIR" /tmp /var/tmp /usr/tmp "$prefix/lib" "$exec_prefix/lib"; do # Skip $TMPDIR if it is empty or bogus, and skip $exec_prefix/lib # in the usual case where exec_prefix is '${prefix}'. case $ac_dir in #( . | /* | ?:[\\/]*) ;; #( *) continue;; esac test -w "$ac_dir/." || continue # It is less confusing to not echo anything here. ac_xdir=$ac_dir/cf$$ (umask 077 && mkdir "$ac_xdir" 2>/dev/null) || continue ac_tf1=$ac_xdir/conftest9012345 ac_tf2=$ac_xdir/conftest9012346 touch "$ac_tf1" 2>/dev/null && test -f "$ac_tf1" && test ! -f "$ac_tf2" || ac_cv_sys_long_file_names=no rm -f -r "$ac_xdir" 2>/dev/null test $ac_cv_sys_long_file_names = no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_long_file_names" >&5 printf "%s\n" "$ac_cv_sys_long_file_names" >&6; } if test $ac_cv_sys_long_file_names = yes; then printf "%s\n" "#define HAVE_LONG_FILE_NAMES 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for vsprintf" >&5 printf %s "checking for vsprintf... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { va_list valist; vsprintf(0,0,valist); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "#define USEVARARGS 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main (void) { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_ac_Header=yes" else $as_nop eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char opendir (); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setenv" >&5 printf %s "checking for setenv... " >&6; } if test -z "$ac_setenv_args"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setenv((char *) 0, (char *) 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_setenv_args=3 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi if test -z "$ac_setenv_args"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { setenv((char *) 0, (char *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_setenv_args=2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi if test -n "$ac_setenv_args"; then printf "%s\n" "#define USESETENV 1" >>confdefs.h if test "$ac_setenv_args" = 3; then printf "%s\n" "#define HAVE_SETENV_3 1" >>confdefs.h elif test "$ac_setenv_args" = 2; then printf "%s\n" "#define HAVE_SETENV_2 1" >>confdefs.h fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for putenv" >&5 printf %s "checking for putenv... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { putenv((char *)0);unsetenv((char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; };printf "%s\n" "#define NEEDPUTENV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo(CODESET)" >&5 printf %s "checking for nl_langinfo(CODESET)... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gethostname" >&5 printf %s "checking for library containing gethostname... " >&6; } if test ${ac_cv_search_gethostname+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gethostname (); int main (void) { return gethostname (); ; return 0; } _ACEOF for ac_lib in '' nsl do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gethostname=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gethostname+y} then : break fi done if test ${ac_cv_search_gethostname+y} then : else $as_nop ac_cv_search_gethostname=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostname" >&5 printf "%s\n" "$ac_cv_search_gethostname" >&6; } ac_res=$ac_cv_search_gethostname if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename" if test "x$ac_cv_func_rename" = xyes then : printf "%s\n" "#define HAVE_RENAME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod" if test "x$ac_cv_func_fchmod" = xyes then : printf "%s\n" "#define HAVE_FCHMOD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown" if test "x$ac_cv_func_fchown" = xyes then : printf "%s\n" "#define HAVE_FCHOWN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" if test "x$ac_cv_func_lstat" = xyes then : printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "_exit" "ac_cv_func__exit" if test "x$ac_cv_func__exit" = xyes then : printf "%s\n" "#define HAVE__EXIT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" if test "x$ac_cv_func_utimes" = xyes then : printf "%s\n" "#define HAVE_UTIMES 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = xyes then : printf "%s\n" "#define HAVE_VSNPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" if test "x$ac_cv_func_getcwd" = xyes then : printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes then : printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = xyes then : printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h fi # Check whether --enable-pam was given. if test ${enable_pam+y} then : enableval=$enable_pam; fi if test "$enable_pam" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PAM support" >&5 printf %s "checking for PAM support... " >&6; } oldlibs="$LIBS" LIBS="$LIBS -lpam" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { pam_start(0, 0, 0, 0); pam_authenticate(0, 0); pam_end(0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; };printf "%s\n" "#define USE_PAM 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; };LIBS="$oldlibs" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi # Check whether --enable-use-locale was given. if test ${enable_use_locale+y} then : enableval=$enable_use_locale; else $as_nop enable_use_locale=yes fi if test "$enable_use_locale" = "yes"; then printf "%s\n" "#define USE_LOCALE 1" >>confdefs.h fi # Check whether --enable-telnet was given. if test ${enable_telnet+y} then : enableval=$enable_telnet; fi if test "$enable_telnet" = "yes"; then printf "%s\n" "#define BUILTIN_TELNET 1" >>confdefs.h fi # Check whether --enable-colors256 was given. if test ${enable_colors256+y} then : enableval=$enable_colors256; fi if test "$enable_colors256" = "yes"; then printf "%s\n" "#define COLORS256 1" >>confdefs.h fi # Check whether --enable-rxvt_osc was given. if test ${enable_rxvt_osc+y} then : enableval=$enable_rxvt_osc; fi if test "$enable_rxvt_osc" = "yes"; then printf "%s\n" "#define RXVT_OSC 1" >>confdefs.h fi if test -z "$old_CFLAGS"; then if test "x$CFLAGS" = "x-g"; then CFLAGS="-O" fi fi test -n "$seqptx" && LIBS="-ltermcap -lc -lsocket -linet -lnsl -lsec -lseq" ETCSCREENRC= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the global screenrc file" >&5 printf %s "checking for the global screenrc file... " >&6; } # Check whether --with-sys-screenrc was given. if test ${with_sys_screenrc+y} then : withval=$with_sys_screenrc; ETCSCREENRC="${withval}" fi ac_config_files="$ac_config_files Makefile doc/Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default":C) # a hook for preserving undef directive in config.h mv config.h conftest sed -e 's@^\(.*\)defin.\( .*\) .*/\*\(.*KEEP_UNDEF_HERE\)@\1undef\2 /\*\3@' < conftest > config.h rm -f conftest ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" if test -z "$AWK"; then echo "!!! Since you have no awk you must copy the files 'comm.h.dist'" echo "!!! and 'term.h.dist' to 'comm.h' and 'term.h'." echo "!!! Do _not_ change the user configuration section in config.h!" echo "Please check the pathnames in the Makefile." else echo "Now please check the pathnames in the Makefile and in the user" echo "configuration section in config.h." fi echo "Then type 'make' to make screen. Good luck." echo "" screen-4.9.1/encoding.c0000664000175000017500000013374114467014146013424 0ustar alexalex/* Copyright (c) 1993-2003 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** */ #include #include "config.h" #include "screen.h" #include "extern.h" #ifdef ENCODINGS extern unsigned char *null; extern struct display *display, *displays; extern struct layer *flayer; extern char *screenencodings; #ifdef DW_CHARS extern int cjkwidth; #endif static int encmatch __P((char *, char *)); # ifdef UTF8 static int recode_char __P((int, int, int)); static int recode_char_to_encoding __P((int, int)); static void comb_tofront __P((int)); # ifdef DW_CHARS static int recode_char_dw __P((int, int *, int, int)); static int recode_char_dw_to_encoding __P((int, int *, int)); # endif # endif struct encoding { char *name; char *charsets; int deffont; int usegr; int noc1; char *fontlist; }; /* big5 font: ^X */ /* KOI8-R font: 96 ! */ /* CP1251 font: 96 ? */ struct encoding encodings[] = { { "C", 0, 0, 0, 0, 0 }, { "eucJP", "B\002I\00401", 0, 1, 0, "\002\004I" }, { "SJIS", "BIBB01", 0, 1, 1, "\002I" }, { "eucKR", "B\003BB01", 0, 1, 0, "\003" }, { "eucCN", "B\001BB01", 0, 1, 0, "\001" }, { "Big5", "B\030BB01", 0, 1, 0, "\030" }, { "KOI8-R", 0, 0x80|'!', 0, 1, 0 }, { "CP1251", 0, 0x80|'?', 0, 1, 0 }, { "UTF-8", 0, -1, 0, 0, 0 }, { "ISO8859-2", 0, 0x80|'B', 0, 0, 0 }, { "ISO8859-3", 0, 0x80|'C', 0, 0, 0 }, { "ISO8859-4", 0, 0x80|'D', 0, 0, 0 }, { "ISO8859-5", 0, 0x80|'L', 0, 0, 0 }, { "ISO8859-6", 0, 0x80|'G', 0, 0, 0 }, { "ISO8859-7", 0, 0x80|'F', 0, 0, 0 }, { "ISO8859-8", 0, 0x80|'H', 0, 0, 0 }, { "ISO8859-9", 0, 0x80|'M', 0, 0, 0 }, { "ISO8859-10", 0, 0x80|'V', 0, 0, 0 }, { "ISO8859-15", 0, 0x80|'b', 0, 0, 0 }, { "jis", 0, 0, 0, 0, "\002\004I" }, { "GBK", "B\031BB01", 0x80|'b', 1, 1, "\031" } }; #ifdef UTF8 static unsigned short builtin_tabs[][2] = { { 0x30, 0 }, /* 0: special graphics (line drawing) */ { 0x005f, 0x25AE }, { 0x0060, 0x25C6 }, { 0x0061, 0x2592 }, { 0x0062, 0x2409 }, { 0x0063, 0x240C }, { 0x0064, 0x240D }, { 0x0065, 0x240A }, { 0x0066, 0x00B0 }, { 0x0067, 0x00B1 }, { 0x0068, 0x2424 }, { 0x0069, 0x240B }, { 0x006a, 0x2518 }, { 0x006b, 0x2510 }, { 0x006c, 0x250C }, { 0x006d, 0x2514 }, { 0x006e, 0x253C }, { 0x006f, 0x23BA }, { 0x0070, 0x23BB }, { 0x0071, 0x2500 }, { 0x0072, 0x23BC }, { 0x0073, 0x23BD }, { 0x0074, 0x251C }, { 0x0075, 0x2524 }, { 0x0076, 0x2534 }, { 0x0077, 0x252C }, { 0x0078, 0x2502 }, { 0x0079, 0x2264 }, { 0x007a, 0x2265 }, { 0x007b, 0x03C0 }, { 0x007c, 0x2260 }, { 0x007d, 0x00A3 }, { 0x007e, 0x00B7 }, { 0, 0}, { 0x34, 0 }, /* 4: Dutch */ { 0x0023, 0x00a3 }, { 0x0040, 0x00be }, { 0x005b, 0x00ff }, { 0x005c, 0x00bd }, { 0x005d, 0x007c }, { 0x007b, 0x00a8 }, { 0x007c, 0x0066 }, { 0x007d, 0x00bc }, { 0x007e, 0x00b4 }, { 0, 0}, { 0x35, 0 }, /* 5: Finnish */ { 0x005b, 0x00c4 }, { 0x005c, 0x00d6 }, { 0x005d, 0x00c5 }, { 0x005e, 0x00dc }, { 0x0060, 0x00e9 }, { 0x007b, 0x00e4 }, { 0x007c, 0x00f6 }, { 0x007d, 0x00e5 }, { 0x007e, 0x00fc }, { 0, 0}, { 0x36, 0 }, /* 6: Norwegian/Danish */ { 0x0040, 0x00c4 }, { 0x005b, 0x00c6 }, { 0x005c, 0x00d8 }, { 0x005d, 0x00c5 }, { 0x005e, 0x00dc }, { 0x0060, 0x00e4 }, { 0x007b, 0x00e6 }, { 0x007c, 0x00f8 }, { 0x007d, 0x00e5 }, { 0x007e, 0x00fc }, { 0, 0}, { 0x37, 0 }, /* 7: Swedish */ { 0x0040, 0x00c9 }, { 0x005b, 0x00c4 }, { 0x005c, 0x00d6 }, { 0x005d, 0x00c5 }, { 0x005e, 0x00dc }, { 0x0060, 0x00e9 }, { 0x007b, 0x00e4 }, { 0x007c, 0x00f6 }, { 0x007d, 0x00e5 }, { 0x007e, 0x00fc }, { 0, 0}, { 0x3d, 0}, /* =: Swiss */ { 0x0023, 0x00f9 }, { 0x0040, 0x00e0 }, { 0x005b, 0x00e9 }, { 0x005c, 0x00e7 }, { 0x005d, 0x00ea }, { 0x005e, 0x00ee }, { 0x005f, 0x00e8 }, { 0x0060, 0x00f4 }, { 0x007b, 0x00e4 }, { 0x007c, 0x00f6 }, { 0x007d, 0x00fc }, { 0x007e, 0x00fb }, { 0, 0}, { 0x41, 0}, /* A: UK */ { 0x0023, 0x00a3 }, { 0, 0}, { 0x4b, 0}, /* K: German */ { 0x0040, 0x00a7 }, { 0x005b, 0x00c4 }, { 0x005c, 0x00d6 }, { 0x005d, 0x00dc }, { 0x007b, 0x00e4 }, { 0x007c, 0x00f6 }, { 0x007d, 0x00fc }, { 0x007e, 0x00df }, { 0, 0}, { 0x51, 0}, /* Q: French Canadian */ { 0x0040, 0x00e0 }, { 0x005b, 0x00e2 }, { 0x005c, 0x00e7 }, { 0x005d, 0x00ea }, { 0x005e, 0x00ee }, { 0x0060, 0x00f4 }, { 0x007b, 0x00e9 }, { 0x007c, 0x00f9 }, { 0x007d, 0x00e8 }, { 0x007e, 0x00fb }, { 0, 0}, { 0x52, 0}, /* R: French */ { 0x0023, 0x00a3 }, { 0x0040, 0x00e0 }, { 0x005b, 0x00b0 }, { 0x005c, 0x00e7 }, { 0x005d, 0x00a7 }, { 0x007b, 0x00e9 }, { 0x007c, 0x00f9 }, { 0x007d, 0x00e8 }, { 0x007e, 0x00a8 }, { 0, 0}, { 0x59, 0}, /* Y: Italian */ { 0x0023, 0x00a3 }, { 0x0040, 0x00a7 }, { 0x005b, 0x00b0 }, { 0x005c, 0x00e7 }, { 0x005d, 0x00e9 }, { 0x0060, 0x00f9 }, { 0x007b, 0x00e0 }, { 0x007c, 0x00f2 }, { 0x007d, 0x00e8 }, { 0x007e, 0x00ec }, { 0, 0}, { 0x5a, 0}, /* Z: Spanish */ { 0x0023, 0x00a3 }, { 0x0040, 0x00a7 }, { 0x005b, 0x00a1 }, { 0x005c, 0x00d1 }, { 0x005d, 0x00bf }, { 0x007b, 0x00b0 }, { 0x007c, 0x00f1 }, { 0x007d, 0x00e7 }, { 0, 0}, { 0xe2, 0}, /* 96-b: ISO-8859-15 */ { 0x00a4, 0x20ac }, { 0x00a6, 0x0160 }, { 0x00a8, 0x0161 }, { 0x00b4, 0x017D }, { 0x00b8, 0x017E }, { 0x00bc, 0x0152 }, { 0x00bd, 0x0153 }, { 0x00be, 0x0178 }, { 0, 0}, { 0x4a, 0}, /* J: JIS 0201 Roman */ { 0x005c, 0x00a5 }, { 0x007e, 0x203e }, { 0, 0}, { 0x49, 0}, /* I: halfwidth katakana */ { 0x0021, 0xff61 }, { 0x005f|0x8000, 0xff9f }, { 0, 0}, { 0, 0} }; struct recodetab { unsigned short (*tab)[2]; int flags; }; #define RECODETAB_ALLOCED 1 #define RECODETAB_BUILTIN 2 #define RECODETAB_TRIED 4 static struct recodetab recodetabs[256]; void InitBuiltinTabs() { unsigned short (*p)[2]; for (p = builtin_tabs; (*p)[0]; p++) { recodetabs[(*p)[0]].flags = RECODETAB_BUILTIN; recodetabs[(*p)[0]].tab = p + 1; p++; while((*p)[0]) p++; } } static int recode_char(c, to_utf, font) int c, to_utf, font; { int f; unsigned short (*p)[2]; if (to_utf) { if (c < 256) return c; f = (c >> 8) & 0xff; c &= 0xff; /* map aliases to keep the table small */ switch (f) { case 'C': f ^= ('C' ^ '5'); break; case 'E': f ^= ('E' ^ '6'); break; case 'H': f ^= ('H' ^ '7'); break; default: break; } p = recodetabs[f].tab; if (p == 0 && recodetabs[f].flags == 0) { LoadFontTranslation(f, 0); p = recodetabs[f].tab; } if (p) for (; (*p)[0]; p++) { if ((p[0][0] & 0x8000) && (c <= (p[0][0] & 0x7fff)) && c >= p[-1][0]) return c - p[-1][0] + p[-1][1]; if ((*p)[0] == c) return (*p)[1]; } return c & 0xff; /* map to latin1 */ } if (font == -1) { if (c < 256) return c; /* latin1 */ for (font = 32; font < 128; font++) { p = recodetabs[font].tab; if (p) for (; (*p)[1]; p++) { if ((p[0][0] & 0x8000) && c <= p[0][1] && c >= p[-1][1]) return (c - p[-1][1] + p[-1][0]) | (font << 8); if ((*p)[1] == c) return (*p)[0] | (font << 8); } } return '?'; } if (c < 128 && (font & 128) != 0) return c; if (font >= 32) { p = recodetabs[font].tab; if (p == 0 && recodetabs[font].flags == 0) { LoadFontTranslation(font, 0); p = recodetabs[font].tab; } if (p) for (; (*p)[1]; p++) { if ((p[0][0] & 0x8000) && c <= p[0][1] && c >= p[-1][1]) return (c - p[-1][1] + p[-1][0]) | (font & 128 ? 0 : font << 8); if ((*p)[1] == c) return (*p)[0] | (font & 128 ? 0 : font << 8); } } return -1; } #ifdef DW_CHARS static int recode_char_dw(c, c2p, to_utf, font) int c, *c2p, to_utf, font; { int f; unsigned short (*p)[2]; if (to_utf) { f = (c >> 8) & 0xff; c = (c & 255) << 8 | (*c2p & 255); *c2p = 0xffff; p = recodetabs[f].tab; if (p == 0 && recodetabs[f].flags == 0) { LoadFontTranslation(f, 0); p = recodetabs[f].tab; } if (p) for (; (*p)[0]; p++) if ((*p)[0] == c) { #ifdef DW_CHARS if (!utf8_isdouble((*p)[1])) *c2p = ' '; #endif return (*p)[1]; } return UCS_REPL_DW; } if (font == -1) { for (font = 0; font < 030; font++) { p = recodetabs[font].tab; if (p) for (; (*p)[1]; p++) if ((*p)[1] == c) { *c2p = ((*p)[0] & 255) | font << 8 | 0x8000; return ((*p)[0] >> 8) | font << 8; } } *c2p = '?'; return '?'; } if (font < 32) { p = recodetabs[font].tab; if (p == 0 && recodetabs[font].flags == 0) { LoadFontTranslation(font, 0); p = recodetabs[font].tab; } if (p) for (; (*p)[1]; p++) if ((*p)[1] == c) { *c2p = ((*p)[0] & 255) | font << 8 | 0x8000; return ((*p)[0] >> 8) | font << 8; } } return -1; } #endif static int recode_char_to_encoding(c, encoding) int c, encoding; { char *fp; int x; if (encoding == UTF8) return recode_char(c, 1, -1); if ((fp = encodings[encoding].fontlist) != 0) while(*fp) if ((x = recode_char(c, 0, (unsigned char)*fp++)) != -1) return x; if (encodings[encoding].deffont) if ((x = recode_char(c, 0, encodings[encoding].deffont)) != -1) return x; return recode_char(c, 0, -1); } #ifdef DW_CHARS static int recode_char_dw_to_encoding(c, c2p, encoding) int c, *c2p, encoding; { char *fp; int x; if (encoding == UTF8) return recode_char_dw(c, c2p, 1, -1); if ((fp = encodings[encoding].fontlist) != 0) while(*fp) if ((x = recode_char_dw(c, c2p, 0, (unsigned char)*fp++)) != -1) return x; if (encodings[encoding].deffont) if ((x = recode_char_dw(c, c2p, 0, encodings[encoding].deffont)) != -1) return x; return recode_char_dw(c, c2p, 0, -1); } #endif struct mchar * recode_mchar(mc, from, to) struct mchar *mc; int from, to; { static struct mchar rmc; int c; debug3("recode_mchar %02x from %d to %d\n", mc->image, from, to); if (from == to || (from != UTF8 && to != UTF8)) return mc; rmc = *mc; if (rmc.font == 0 && from != UTF8) rmc.font = encodings[from].deffont; if (rmc.font == 0) /* latin1 is the same in unicode */ return mc; c = rmc.image | (rmc.font << 8); if (from == UTF8) c |= rmc.fontx << 16; #ifdef DW_CHARS if (rmc.mbcs) { int c2 = rmc.mbcs; c = recode_char_dw_to_encoding(c, &c2, to); rmc.mbcs = c2; } else #endif c = recode_char_to_encoding(c, to); rmc.image = c & 255; rmc.font = c >> 8 & 255; if (to == UTF8) rmc.fontx = c >> 16 & 255; return &rmc; } struct mline * recode_mline(ml, w, from, to) struct mline *ml; int w; int from, to; { static int maxlen; static int last; static struct mline rml[2], *rl; int i, c; if (from == to || (from != UTF8 && to != UTF8) || w == 0) return ml; if (ml->font == null && ml->fontx == null && encodings[from].deffont == 0) return ml; if (w > maxlen) { for (i = 0; i < 2; i++) { if (rml[i].image == 0) rml[i].image = malloc(w); else rml[i].image = realloc(rml[i].image, w); if (rml[i].font == 0) rml[i].font = malloc(w); else rml[i].font = realloc(rml[i].font, w); if (rml[i].fontx == 0) rml[i].fontx = malloc(w); else rml[i].fontx = realloc(rml[i].fontx, w); if (rml[i].image == 0 || rml[i].font == 0 || rml[i].fontx == 0) { maxlen = 0; return ml; /* sorry */ } } maxlen = w; } debug("recode_mline: from\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(ml->image[i] >> 4) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(ml->image[i] ) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(ml->font[i] >> 4) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(ml->font[i] ) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(ml->fontx[i] >> 4) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(ml->fontx[i] ) & 15]); debug("\n"); rl = rml + last; rl->attr = ml->attr; #ifdef COLOR rl->color = ml->color; # ifdef COLORS256 rl->colorx = ml->colorx; # endif #endif for (i = 0; i < w; i++) { c = ml->image[i] | (ml->font[i] << 8); if (from == UTF8) c |= ml->fontx[i] << 16; if (from != UTF8 && c < 256) c |= encodings[from].deffont << 8; #ifdef DW_CHARS if ((from != UTF8 && (c & 0x1f00) != 0 && (c & 0xe000) == 0) || (from == UTF8 && utf8_isdouble(c))) { if (i + 1 == w) c = '?'; else { int c2; i++; c2 = ml->image[i] | (ml->font[i] << 8); c = recode_char_dw_to_encoding(c, &c2, to); if (to == UTF8) rl->fontx[i - 1] = c >> 16 & 255; rl->font[i - 1] = c >> 8 & 255; rl->image[i - 1] = c & 255; c = c2; } } else #endif c = recode_char_to_encoding(c, to); rl->image[i] = c & 255; rl->font[i] = c >> 8 & 255; if (to == UTF8) rl->fontx[i] = c >> 16 & 255; } last ^= 1; debug("recode_mline: to\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(rl->image[i] >> 4) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(rl->image[i] ) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(rl->font[i] >> 4) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(rl->font[i] ) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(rl->fontx[i] >> 4) & 15]); debug("\n"); for (i = 0; i < w; i++) debug1("%c", "0123456789abcdef"[(rl->fontx[i] ) & 15]); debug("\n"); return rl; } struct combchar { unsigned int c1; unsigned int c2; unsigned int next; unsigned int prev; }; struct combchar **combchars; void AddUtf8(c) int c; { ASSERT(D_encoding == UTF8); if (c >= 0xd800 && c < 0xe000 && combchars && combchars[c - 0xd800]) { AddUtf8(combchars[c - 0xd800]->c1); c = combchars[c - 0xd800]->c2; } /* replace out of range values with U+FFFD "replacement character" */ if (c < 0 || c > 0x10ffff) c = 0xfffd; if (c >= 0x10000) { AddChar((c & 0x1c0000) >> 18 ^ 0xf0); c = (c & 0x3ffff) ^ ((0xe0 ^ 0x80) << 12); } if (c >= 0x800) { AddChar((c & 0x7f000) >> 12 ^ 0xe0); c = (c & 0x0fff) ^ ((0xc0 ^ 0x80) << 6); } if (c >= 0x80) { AddChar((c & 0x1fc0) >> 6 ^ 0xc0); c = (c & 0x3f) | 0x80; } AddChar(c); } int ToUtf8_comb(p, c) char *p; int c; { int l; if (c >= 0xd800 && c < 0xe000 && combchars && combchars[c - 0xd800]) { l = ToUtf8_comb(p, combchars[c - 0xd800]->c1); return l + ToUtf8(p ? p + l : 0, combchars[c - 0xd800]->c2); } return ToUtf8(p, c); } int ToUtf8(p, c) char *p; int c; { int l = 1; /* replace out of range values with U+FFFD "replacement character" */ if (c < 0 || c > 0x10ffff) c = 0xfffd; if (c >= 0x10000) { if (p) *p++ = (c & 0x1c0000) >> 18 ^ 0xf0; l++; c = (c & 0x3ffff) ^ ((0xe0 ^ 0x80) << 12); } if (c >= 0x800) { if (p) *p++ = (c & 0x7f000) >> 12 ^ 0xe0; l++; c = (c & 0x0fff) | 0x1000; } if (c >= 0x80) { if (p) *p++ = (c & 0x1fc0) >> 6 ^ 0xc0; l++; c = (c & 0x3f) | 0x80; } if (p) *p++ = c; return l; } /* * returns: * -1: need more bytes, sequence not finished * -2: corrupt sequence found, redo last char * >= 0: decoded character */ int FromUtf8(c, utf8charp) int c, *utf8charp; { int utf8char = *utf8charp; if (utf8char) { if ((c & 0xc0) != 0x80) { *utf8charp = 0; return -2; /* corrupt sequence! */ } else c = (c & 0x3f) | (utf8char << 6); if (!(utf8char & 0x40000000)) { /* check for overlong sequences */ if ((c & 0x820823e0) == 0x80000000) c = 0xfdffffff; else if ((c & 0x020821f0) == 0x02000000) c = 0xfff7ffff; else if ((c & 0x000820f8) == 0x00080000) c = 0xffffd000; else if ((c & 0x0000207c) == 0x00002000) c = 0xffffff70; } } else { /* new sequence */ if (c >= 0xfe) c = UCS_REPL; else if (c >= 0xfc) c = (c & 0x01) | 0xbffffffc; /* 5 bytes to follow */ else if (c >= 0xf8) c = (c & 0x03) | 0xbfffff00; /* 4 */ else if (c >= 0xf0) c = (c & 0x07) | 0xbfffc000; /* 3 */ else if (c >= 0xe0) c = (c & 0x0f) | 0xbff00000; /* 2 */ else if (c >= 0xc2) c = (c & 0x1f) | 0xfc000000; /* 1 */ else if (c >= 0xc0) c = 0xfdffffff; /* overlong */ else if (c >= 0x80) c = UCS_REPL; } *utf8charp = utf8char = (c & 0x80000000) ? c : 0; if (utf8char) return -1; #if 0 if (c & 0xffff0000) c = UCS_REPL; /* sorry, only know 16bit Unicode */ #else if (c & 0xff800000) c = UCS_REPL; /* sorry, only know 23bit Unicode */ #endif if (c >= 0xd800 && (c <= 0xdfff || c == 0xfffe || c == 0xffff)) c = UCS_REPL; /* illegal code */ return c; } void WinSwitchEncoding(p, encoding) struct win *p; int encoding; { int i, j, c; struct mline *ml; struct display *d; struct canvas *cv; struct layer *oldflayer; if ((p->w_encoding == UTF8) == (encoding == UTF8)) { p->w_encoding = encoding; return; } oldflayer = flayer; for (d = displays; d; d = d->d_next) for (cv = d->d_cvlist; cv; cv = cv->c_next) if (p == Layer2Window(cv->c_layer)) { flayer = cv->c_layer; while(flayer->l_next) { if (oldflayer == flayer) oldflayer = flayer->l_next; ExitOverlayPage(); } } flayer = oldflayer; for (j = 0; j < p->w_height + p->w_histheight; j++) { #ifdef COPY_PASTE ml = j < p->w_height ? &p->w_mlines[j] : &p->w_hlines[j - p->w_height]; #else ml = &p->w_mlines[j]; #endif if (ml->font == null && ml->fontx == 0 && encodings[p->w_encoding].deffont == 0) continue; for (i = 0; i < p->w_width; i++) { c = ml->image[i] | (ml->font[i] << 8); if (p->w_encoding == UTF8) c |= ml->fontx[i] << 16; if (p->w_encoding != UTF8 && c < 256) c |= encodings[p->w_encoding].deffont << 8; if (c < 256) continue; if (ml->font == null) { if ((ml->font = (unsigned char *)calloc(p->w_width + 1, 1)) == 0) { ml->font = null; break; } } #ifdef DW_CHARS if ((p->w_encoding != UTF8 && (c & 0x1f00) != 0 && (c & 0xe000) == 0) || (p->w_encoding == UTF8 && utf8_isdouble(c))) { if (i + 1 == p->w_width) c = '?'; else { int c2; i++; c2 = ml->image[i] | (ml->font[i] << 8) | (ml->fontx[i] << 16); c = recode_char_dw_to_encoding(c, &c2, encoding); if (encoding == UTF8) { if (c > 0x10000 && ml->fontx == null) { if ((ml->fontx = (unsigned char *)calloc(p->w_width + 1, 1)) == 0) { ml->fontx = null; break; } } ml->fontx[i - 1] = c >> 16 & 255; } else ml->fontx = null; ml->font[i - 1] = c >> 8 & 255; ml->image[i - 1] = c & 255; c = c2; } } else #endif c = recode_char_to_encoding(c, encoding); ml->image[i] = c & 255; ml->font[i] = c >> 8 & 255; if (encoding == UTF8) { if (c > 0x10000 && ml->fontx == null) { if ((ml->fontx = (unsigned char *)calloc(p->w_width + 1, 1)) == 0) { ml->fontx = null; break; } } ml->fontx[i] = c >> 16 & 255; } else ml->fontx = null; } } p->w_encoding = encoding; return; } #ifdef DW_CHARS struct interval { int first; int last; }; /* auxiliary function for binary search in interval table */ static int bisearch(int ucs, const struct interval *table, int max) { int min = 0; int mid; if (ucs < table[0].first || ucs > table[max].last) return 0; while (max >= min) { mid = (min + max) / 2; if (ucs > table[mid].last) min = mid + 1; else if (ucs < table[mid].first) max = mid - 1; else return 1; } return 0; } int utf8_isdouble(c) int c; { /* A sorted list of intervals of ambiguous width characters generated by * https://github.com/GNOME/glib/blob/glib-2-50/glib/gen-unicode-tables.pl */ static const struct interval ambiguous[] = { {0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8}, {0x00AA, 0x00AA}, {0x00AD, 0x00AE}, {0x00B0, 0x00B4}, {0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6}, {0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1}, {0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED}, {0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA}, {0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101}, {0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B}, {0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133}, {0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144}, {0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153}, {0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE}, {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4}, {0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA}, {0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261}, {0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB}, {0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB}, {0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0300, 0x036F}, {0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1}, {0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F}, {0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016}, {0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022}, {0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033}, {0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E}, {0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084}, {0x20AC, 0x20AC}, {0x2103, 0x2103}, {0x2105, 0x2105}, {0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116}, {0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B}, {0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B}, {0x2170, 0x2179}, {0x2189, 0x2189}, {0x2190, 0x2199}, {0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4}, {0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203}, {0x2207, 0x2208}, {0x220B, 0x220B}, {0x220F, 0x220F}, {0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A}, {0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225}, {0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237}, {0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C}, {0x2252, 0x2252}, {0x2260, 0x2261}, {0x2264, 0x2267}, {0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283}, {0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299}, {0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x2312, 0x2312}, {0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573}, {0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1}, {0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7}, {0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8}, {0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x25E2, 0x25E5}, {0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609}, {0x260E, 0x260F}, {0x261C, 0x261C}, {0x261E, 0x261E}, {0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661}, {0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D}, {0x266F, 0x266F}, {0x269E, 0x269F}, {0x26BF, 0x26BF}, {0x26C6, 0x26CD}, {0x26CF, 0x26D3}, {0x26D5, 0x26E1}, {0x26E3, 0x26E3}, {0x26E8, 0x26E9}, {0x26EB, 0x26F1}, {0x26F4, 0x26F4}, {0x26F6, 0x26F9}, {0x26FB, 0x26FC}, {0x26FE, 0x26FF}, {0x273D, 0x273D}, {0x2776, 0x277F}, {0x2B56, 0x2B59}, {0x3248, 0x324F}, {0xE000, 0xF8FF}, {0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD}, {0x1F100, 0x1F10A}, {0x1F110, 0x1F12D}, {0x1F130, 0x1F169}, {0x1F170, 0x1F18D}, {0x1F18F, 0x1F190}, {0x1F19B, 0x1F1AC}, {0xE0100, 0xE01EF}, {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD}, }; /* A sorted list of intervals of double width characters generated by * https://github.com/GNOME/glib/blob/glib-2-50/glib/gen-unicode-tables.pl */ static const struct interval wide[] = { {0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A}, {0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3}, {0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653}, {0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1}, {0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5}, {0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA}, {0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA}, {0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B}, {0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C}, {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99}, {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB}, {0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF}, {0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31BA}, {0x31C0, 0x31E3}, {0x31F0, 0x321E}, {0x3220, 0x3247}, {0x3250, 0x4DBF}, {0x4E00, 0xA48C}, {0xA490, 0xA4C6}, {0xA960, 0xA97C}, {0xAC00, 0xD7A3}, {0xF900, 0xFAFF}, {0xFE10, 0xFE19}, {0xFE30, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, {0xFF01, 0xFF60}, {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE3}, {0x17000, 0x187F7}, {0x18800, 0x18AF2}, {0x1B000, 0x1B11E}, {0x1B150, 0x1B152}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, {0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F320}, {0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, {0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, {0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, {0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, {0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, {0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D5}, {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FA}, {0x1F7E0, 0x1F7EB}, {0x1F90D, 0x1F971}, {0x1F973, 0x1F976}, {0x1F97A, 0x1F9A2}, {0x1F9A5, 0x1F9AA}, {0x1F9AE, 0x1F9CA}, {0x1F9CD, 0x1F9FF}, {0x1FA70, 0x1FA73}, {0x1FA78, 0x1FA7A}, {0x1FA80, 0x1FA82}, {0x1FA90, 0x1FA95}, {0x20000, 0x2FFFD}, {0x30000, 0x3FFFD}, }; if (c >= 0xdf00 && c <= 0xdfff) return 1; /* dw combining sequence */ return ((bisearch(c, wide, sizeof(wide) / sizeof(struct interval) - 1)) || (cjkwidth && bisearch(c, ambiguous, sizeof(ambiguous) / sizeof(struct interval) - 1))); } #endif int utf8_iscomb(c) int c; { /* taken from Markus Kuhn's wcwidth */ static const struct interval combining[] = { { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } }; return bisearch(c, combining, sizeof(combining) / sizeof(struct interval) - 1); } static void comb_tofront(i) int i; { for (;;) { int root = i >= 0x700 ? 0x801 : 0x800; debug1("bring to front: %x\n", i); combchars[combchars[i]->prev]->next = combchars[i]->next; combchars[combchars[i]->next]->prev = combchars[i]->prev; combchars[i]->next = combchars[root]->next; combchars[i]->prev = root; combchars[combchars[root]->next]->prev = i; combchars[root]->next = i; i = combchars[i]->c1; if (i < 0xd800 || i >= 0xe000) return; i -= 0xd800; } } void utf8_handle_comb(c, mc) int c; struct mchar *mc; { int root, i, c1; int isdouble; c1 = mc->image | (mc->font << 8) | mc->fontx << 16; isdouble = c1 >= 0x1100 && utf8_isdouble(c1); if (!combchars) { combchars = (struct combchar **)calloc(0x802, sizeof(struct combchar *)); if (!combchars) return; combchars[0x800] = (struct combchar *)malloc(sizeof(struct combchar)); combchars[0x801] = (struct combchar *)malloc(sizeof(struct combchar)); if (!combchars[0x800] || !combchars[0x801]) { if (combchars[0x800]) free(combchars[0x800]); if (combchars[0x801]) free(combchars[0x801]); free(combchars); return; } combchars[0x800]->c1 = 0x000; combchars[0x800]->c2 = 0x700; combchars[0x800]->next = 0x800; combchars[0x800]->prev = 0x800; combchars[0x801]->c1 = 0x700; combchars[0x801]->c2 = 0x800; combchars[0x801]->next = 0x801; combchars[0x801]->prev = 0x801; } root = isdouble ? 0x801 : 0x800; for (i = combchars[root]->c1; i < combchars[root]->c2; i++) { if (!combchars[i]) break; if (combchars[i]->c1 == c1 && combchars[i]->c2 == c) break; } if (i == combchars[root]->c2) { /* full, recycle old entry */ if (c1 >= 0xd800 && c1 < 0xe000) comb_tofront(c1 - 0xd800); i = combchars[root]->prev; if (i == 0x800 || i == 0x801 || c1 == i + 0xd800) { /* completely full, can't recycle */ debug("utf8_handle_comp: completely full!\n"); mc->image = '?'; mc->font = 0; return; } /* FIXME: delete old char from all buffers */ } else if (!combchars[i]) { combchars[i] = (struct combchar *)malloc(sizeof(struct combchar)); if (!combchars[i]) return; combchars[i]->prev = i; combchars[i]->next = i; } combchars[i]->c1 = c1; combchars[i]->c2 = c; mc->image = i & 0xff; mc->font = (i >> 8) + 0xd8; mc->fontx = 0; debug3("combinig char %x %x -> %x\n", c1, c, i + 0xd800); comb_tofront(i); } #else /* !UTF8 */ void WinSwitchEncoding(p, encoding) struct win *p; int encoding; { p->w_encoding = encoding; return; } #endif /* UTF8 */ static int encmatch(s1, s2) char *s1; char *s2; { int c1, c2; do { c1 = (unsigned char)*s1; if (c1 >= 'A' && c1 <= 'Z') c1 += 'a' - 'A'; if (!(c1 >= 'a' && c1 <= 'z') && !(c1 >= '0' && c1 <= '9')) { s1++; continue; } c2 = (unsigned char)*s2; if (c2 >= 'A' && c2 <= 'Z') c2 += 'a' - 'A'; if (!(c2 >= 'a' && c2 <= 'z') && !(c2 >= '0' && c2 <= '9')) { s2++; continue; } if (c1 != c2) return 0; s1++; s2++; } while(c1); return 1; } int FindEncoding(name) char *name; { int encoding; debug1("FindEncoding %s\n", name); if (name == 0 || *name == 0) return 0; if (encmatch(name, "euc")) name = "eucJP"; if (encmatch(name, "off") || encmatch(name, "iso8859-1")) return 0; #ifndef UTF8 if (encmatch(name, "UTF-8")) return -1; #endif for (encoding = 0; encoding < (int)(sizeof(encodings)/sizeof(*encodings)); encoding++) if (encmatch(name, encodings[encoding].name)) { #ifdef UTF8 LoadFontTranslationsForEncoding(encoding); #endif return encoding; } return -1; } char * EncodingName(encoding) int encoding; { if (encoding >= (int)(sizeof(encodings)/sizeof(*encodings))) return 0; return encodings[encoding].name; } int EncodingDefFont(encoding) int encoding; { return encodings[encoding].deffont; } void ResetEncoding(p) struct win *p; { char *c; int encoding = p->w_encoding; c = encodings[encoding].charsets; if (c) SetCharsets(p, c); #ifdef UTF8 LoadFontTranslationsForEncoding(encoding); #endif if (encodings[encoding].usegr) { p->w_gr = 2; p->w_FontE = encodings[encoding].charsets[1]; } else p->w_FontE = 0; if (encodings[encoding].noc1) p->w_c1 = 0; } /* decoded char: 32-bit * fontx: non-bmp utf8 * c2: multi-byte character * font is always zero for utf8 * returns: -1 need more bytes * -2 decode error */ int DecodeChar(c, encoding, statep) int c; int encoding; int *statep; { int t; debug2("Decoding char %02x for encoding %d\n", c, encoding); #ifdef UTF8 if (encoding == UTF8) { c = FromUtf8(c, statep); if (c >= 0x10000) c = (c & 0x7f0000) << 8 | (c & 0xffff); return c; } #endif if (encoding == SJIS) { if (!*statep) { if ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xef)) { *statep = c; return -1; } if (c < 0x80) return c; return c | (KANA << 16); } t = c; c = *statep; *statep = 0; if (0x40 <= t && t <= 0xfc && t != 0x7f) { if (c <= 0x9f) c = (c - 0x81) * 2 + 0x21; else c = (c - 0xc1) * 2 + 0x21; if (t <= 0x7e) t -= 0x1f; else if (t <= 0x9e) t -= 0x20; else t -= 0x7e, c++; return (c << 8) | t | (KANJI << 16); } return t; } if (encoding == EUC_JP || encoding == EUC_KR || encoding == EUC_CN) { if (!*statep) { if (c & 0x80) { *statep = c; return -1; } return c; } t = c; c = *statep; *statep = 0; if (encoding == EUC_JP) { if (c == 0x8e) return t | (KANA << 16); if (c == 0x8f) { *statep = t | (KANJI0212 << 8); return -1; } } c &= 0xff7f; t &= 0x7f; c = c << 8 | t; if (encoding == EUC_KR) return c | (3 << 16); if (encoding == EUC_CN) return c | (1 << 16); if (c & (KANJI0212 << 16)) return c; else return c | (KANJI << 16); } if (encoding == BIG5 || encoding == GBK) { if (!*statep) { if (c & 0x80) { if (encoding == GBK && c == 0x80) return 0xa4 | (('b'|0x80) << 16); *statep = c; return -1; } return c; } t = c; c = *statep; *statep = 0; c &= 0x7f; return c << 8 | t | (encoding == BIG5 ? 030 << 16 : 031 << 16); } return c | (encodings[encoding].deffont << 16); } int EncodeChar(bp, c, encoding, fontp) char *bp; int c; int encoding; int *fontp; { int t, f, l; debug2("Encoding char %02x for encoding %d\n", c, encoding); if (c == -1 && fontp) { if (*fontp == 0) return 0; if (bp) { *bp++ = 033; *bp++ = '('; *bp++ = 'B'; } return 3; } f = (c >> 16) & 0xff; #ifdef UTF8 if (encoding == UTF8) { if (f) { # ifdef DW_CHARS if (is_dw_font(f)) { int c2 = c & 0xff; c = (c >> 8 & 0xff) | (f << 8); c = recode_char_dw_to_encoding(c, &c2, encoding); } else # endif { c = (c & 0xff) | (f << 8); c = recode_char_to_encoding(c, encoding); } } return ToUtf8(bp, c); } if (f == 0 && (c & 0x7f00ff00) != 0) /* is_utf8? */ { if (c >= 0x10000) c = (c & 0x7f0000) >> 8 | (c & 0xffff); # ifdef DW_CHARS if (utf8_isdouble(c)) { int c2 = 0xffff; c = recode_char_dw_to_encoding(c, &c2, encoding); c = (c << 8) | (c2 & 0xff); } else # endif { c = recode_char_to_encoding(c, encoding); c = ((c & 0xff00) << 8) | (c & 0xff); } debug1("Encode: char mapped from utf8 to %x\n", c); f = c >> 16; } #endif if (f & 0x80) /* map special 96-fonts to latin1 */ f = 0; if (encoding == SJIS) { if (f == KANA) c = (c & 0xff) | 0x80; else if (f == KANJI) { if (!bp) return 2; t = c & 0xff; c = (c >> 8) & 0xff; t += (c & 1) ? ((t <= 0x5f) ? 0x1f : 0x20) : 0x7e; c = (c - 0x21) / 2 + ((c < 0x5f) ? 0x81 : 0xc1); *bp++ = c; *bp++ = t; return 2; } } if (encoding == EUC) { if (f == KANA) { if (bp) { *bp++ = 0x8e; *bp++ = c; } return 2; } if (f == KANJI) { if (bp) { *bp++ = (c >> 8) | 0x80; *bp++ = c | 0x80; } return 2; } if (f == KANJI0212) { if (bp) { *bp++ = 0x8f; *bp++ = c >> 8; *bp++ = c; } return 3; } } if ((encoding == EUC_KR && f == 3) || (encoding == EUC_CN && f == 1)) { if (bp) { *bp++ = (c >> 8) | 0x80; *bp++ = c | 0x80; } return 2; } if ((encoding == BIG5 && f == 030) || (encoding == GBK && f == 031)) { if (bp) { *bp++ = (c >> 8) | 0x80; *bp++ = c; } return 2; } if (encoding == GBK && f == 0 && c == 0xa4) c = 0x80; l = 0; if (fontp && f != *fontp) { *fontp = f; if (f && f < ' ') { if (bp) { *bp++ = 033; *bp++ = '$'; if (f > 2) *bp++ = '('; *bp++ = '@' + f; } l += f > 2 ? 4 : 3; } else if (f < 128) { if (f == 0) f = 'B'; if (bp) { *bp++ = 033; *bp++ = '('; *bp++ = f; } l += 3; } } if (c & 0xff00) { if (bp) *bp++ = c >> 8; l++; } if (bp) *bp++ = c; return l + 1; } int CanEncodeFont(encoding, f) int encoding, f; { switch(encoding) { #ifdef UTF8 case UTF8: return 1; #endif case SJIS: return f == KANJI || f == KANA; case EUC: return f == KANJI || f == KANA || f == KANJI0212; case EUC_KR: return f == 3; case EUC_CN: return f == 1; case BIG5: return f == 030; case GBK: return f == 031; default: break; } return 0; } #ifdef DW_CHARS int PrepareEncodedChar(c) int c; { int encoding; int t = 0; int f; encoding = D_encoding; f = D_rend.font; t = D_mbcs; if (encoding == SJIS) { if (f == KANA) return c | 0x80; else if (f == KANJI) { t += (c & 1) ? ((t <= 0x5f) ? 0x1f : 0x20) : 0x7e; c = (c - 0x21) / 2 + ((c < 0x5f) ? 0x81 : 0xc1); D_mbcs = t; } return c; } if (encoding == EUC) { if (f == KANA) { AddChar(0x8e); return c | 0x80; } if (f == KANJI) { D_mbcs = t | 0x80; return c | 0x80; } if (f == KANJI0212) { AddChar(0x8f); D_mbcs = t | 0x80; return c | 0x80; } } if ((encoding == EUC_KR && f == 3) || (encoding == EUC_CN && f == 1)) { D_mbcs = t | 0x80; return c | 0x80; } if ((encoding == BIG5 && f == 030) || (encoding == GBK && f == 031)) return c | 0x80; return c; } #endif int RecodeBuf(fbuf, flen, fenc, tenc, tbuf) unsigned char *fbuf; int flen; int fenc, tenc; unsigned char *tbuf; { int c, i, j; int decstate = 0, font = 0; for (i = j = 0; i < flen; i++) { c = fbuf[i]; c = DecodeChar(c, fenc, &decstate); if (c == -2) i--; if (c < 0) continue; j += EncodeChar(tbuf ? (char *)tbuf + j : 0, c, tenc, &font); } j += EncodeChar(tbuf ? (char *)tbuf + j : 0, -1, tenc, &font); return j; } #ifdef UTF8 int ContainsSpecialDeffont(ml, xs, xe, encoding) struct mline *ml; int xs, xe; int encoding; { unsigned char *f, *i; int c, x, dx; if (encoding == UTF8 || encodings[encoding].deffont == 0) return 0; i = ml->image + xs; f = ml->font + xs; dx = xe - xs + 1; while (dx-- > 0) { if (*f++) continue; c = *i++; x = recode_char_to_encoding(c | (encodings[encoding].deffont << 8), UTF8); if (c != x) { debug2("ContainsSpecialDeffont: yes %02x != %02x\n", c, x); return 1; } } debug("ContainsSpecialDeffont: no\n"); return 0; } int LoadFontTranslation(font, file) int font; char *file; { char buf[1024], *myfile; FILE *f; int i; int fo; int x, u, c, ok; unsigned short (*p)[2], (*tab)[2]; myfile = file; if (myfile == 0) { if (font == 0 || screenencodings == 0) return -1; if (strlen(screenencodings) > sizeof(buf) - 10) return -1; sprintf(buf, "%s/%02x", screenencodings, font & 0xff); myfile = buf; } debug1("LoadFontTranslation: trying %s\n", myfile); if ((f = secfopen(myfile, "r")) == 0) return -1; i = ok = 0; for (;;) { for(; i < 12; i++) if (getc(f) != "ScreenI2UTF8"[i]) break; if (getc(f) != 0) /* format */ break; fo = getc(f); /* id */ if (fo == EOF) break; if (font != -1 && font != fo) break; i = getc(f); x = getc(f); if (x == EOF) break; i = i << 8 | x; getc(f); while ((x = getc(f)) && x != EOF) getc(f); /* skip font name (padded to 2 bytes) */ if ((p = malloc(sizeof(*p) * (i + 1))) == 0) break; tab = p; while(i > 0) { x = getc(f); x = x << 8 | getc(f); u = getc(f); c = getc(f); u = u << 8 | c; if (c == EOF) break; (*p)[0] = x; (*p)[1] = u; p++; i--; } (*p)[0] = 0; (*p)[1] = 0; if (i || (tab[0][0] & 0x8000)) { free(tab); break; } if (recodetabs[fo].tab && (recodetabs[fo].flags & RECODETAB_ALLOCED) != 0) free(recodetabs[fo].tab); recodetabs[fo].tab = tab; recodetabs[fo].flags = RECODETAB_ALLOCED; debug1("Successful load of recodetab %02x\n", fo); c = getc(f); if (c == EOF) { ok = 1; break; } if (c != 'S') break; i = 1; } fclose(f); if (font != -1 && file == 0 && recodetabs[font].flags == 0) recodetabs[font].flags = RECODETAB_TRIED; return ok ? 0 : -1; } void LoadFontTranslationsForEncoding(encoding) int encoding; { char *c; int f; debug1("LoadFontTranslationsForEncoding: encoding %d\n", encoding); if ((c = encodings[encoding].fontlist) != 0) while ((f = (unsigned char)*c++) != 0) if (recodetabs[f].flags == 0) LoadFontTranslation(f, 0); f = encodings[encoding].deffont; if (f > 0 && recodetabs[f].flags == 0) LoadFontTranslation(f, 0); } #endif /* UTF8 */ #else /* !ENCODINGS */ /* Simple version of EncodeChar to encode font changes for * copy/paste mode */ int EncodeChar(bp, c, encoding, fontp) char *bp; int c; int encoding; int *fontp; { int f, l; f = (c == -1) ? 0 : c >> 16; l = 0; if (fontp && f != *fontp) { *fontp = f; if (f && f < ' ') { if (bp) { *bp++ = 033; *bp++ = '$'; if (f > 2) *bp++ = '('; *bp++ = '@' + f; } l += f > 2 ? 4 : 3; } else if (f < 128) { if (f == 0) f = 'B'; if (bp) { *bp++ = 033; *bp++ = '('; *bp++ = f; } l += 3; } } if (c == -1) return l; if (c & 0xff00) { if (bp) *bp++ = c >> 8; l++; } if (bp) *bp++ = c; return l + 1; } #endif /* ENCODINGS */ screen-4.9.1/canvas.h0000664000175000017500000000736014467014146013113 0ustar alexalex/* Copyright (c) 2008, 2009 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Micah Cowan (micah@cowan.name) * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net) * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, see * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * **************************************************************** * $Id$ GNU */ #ifndef SCREEN_CANVAS_H #define SCREEN_CANVAS_H #define SLICE_UNKN 0 #define SLICE_VERT (1 << 0) #define SLICE_HORI (1 << 1) #define SLICE_THIS (1 << 2) /* used in equal test */ #define SLICE_GLOBAL (1 << 3) struct canvas { struct canvas *c_next; /* next canvas on display */ struct display *c_display; /* back pointer to display */ struct canvas *c_slnext; /* next canvas in display slice */ struct canvas *c_slprev; /* prev canvas in display slice */ struct canvas *c_slperp; /* perpendicular slice */ struct canvas *c_slback; /* perpendicular slice back pointer */ int c_slorient; /* our slice orientation */ int c_slweight; /* size ratio */ struct viewport *c_vplist; struct layer *c_layer; /* layer on this canvas */ struct canvas *c_lnext; /* next canvas that displays layer */ struct layer c_blank; /* bottom layer, always blank */ int c_xoff; /* canvas x offset on display */ int c_yoff; /* canvas y offset on display */ int c_xs; int c_xe; int c_ys; int c_ye; struct event c_captev; /* caption changed event */ }; struct win; /* forward declaration */ extern void SetCanvasWindow __P((struct canvas *, struct win *)); extern void SetForeCanvas __P((struct display *, struct canvas *)); extern struct canvas *FindCanvas __P((int, int)); extern int MakeDefaultCanvas __P((void)); extern int AddCanvas __P((int)); extern void RemCanvas __P((void)); extern void OneCanvas __P((void)); extern void FreeCanvas __P((struct canvas *)); extern void ResizeCanvas __P((struct canvas *)); extern void RecreateCanvasChain __P((void)); extern void RethinkViewportOffsets __P((struct canvas *)); extern int CountCanvasPerp __P((struct canvas *)); extern void EqualizeCanvas __P((struct canvas *, int)); extern void DupLayoutCv __P((struct canvas *, struct canvas *, int)); extern void PutWindowCv __P((struct canvas *)); #define CV_CALL(cv, cmd) \ { \ struct display *olddisplay = display; \ struct layer *oldflayer = flayer; \ struct layer *l = cv->c_layer; \ struct canvas *cvlist = l->l_cvlist; \ struct canvas *cvlnext = cv->c_lnext; \ flayer = l; \ l->l_cvlist = cv; \ cv->c_lnext = 0; \ cmd; \ flayer = oldflayer; \ l->l_cvlist = cvlist; \ cv->c_lnext = cvlnext; \ display = olddisplay; \ } #endif /* SCREEN_CANVAS_H */ screen-4.9.1/osdef.sh0000664000175000017500000000340414467014146013116 0ustar alexalex#! /bin/sh if test -z "$CPP"; then CPP="cc -E" fi if test -z "$srcdir"; then srcdir=. fi rm -f core* sed < $srcdir/osdef.h.in -n -e '/^extern/s@.*[)* ][)* ]*\([^ *]*\) __P.*@/[)*, ]\1[ (]/i\\\ \\/\\[^a-zA-Z_\\]\1 __P\\/d@p' > osdef1.sed cat << EOF > osdef0.c #include "config.h" #include #include #include #include #include #ifdef SHADOWPW #include #endif #ifndef sun #include #endif #ifdef linux #include #include #endif #include #ifndef NOSYSLOG #include #endif #include "os.h" #if defined(UTMPOK) && defined (GETTTYENT) && !defined(GETUTENT) #include #endif #ifdef SVR4 # include #endif EOF cat << EOF > osdef2.sed 1i\\ /* 1i\\ * This file is automagically created from osdef.sh -- DO NOT EDIT 1i\\ */ EOF $CPP -I. -I$srcdir osdef0.c | sed -n -f osdef1.sed >> osdef2.sed sed -f osdef2.sed < $srcdir/osdef.h.in > osdef.h rm osdef0.c osdef1.sed osdef2.sed if test -f core*; then file core* echo " Sorry, your sed is broken. Call the system administrator." echo " Meanwhile, you may try to compile screen with an empty osdef.h file." echo " But if your compiler needs to have all functions declared, you should" echo " retry 'make' now and only remove offending lines from osdef.h later." exit 1 fi if eval test "`diff osdef.h $srcdir/osdef.h.in | wc -l`" -eq 4; then echo " Hmm, sed is very pessimistic about your system header files." echo " But it did not dump core -- strange! Let's continue carefully..." echo " If this fails, you may want to remove offending lines from osdef.h" echo " or try with an empty osdef.h file, if your compiler can do without" echo " function declarations." fi screen-4.9.1/doc/0000775000175000017500000000000014467014146012226 5ustar alexalexscreen-4.9.1/doc/FAQ0000664000175000017500000003337514467014146012573 0ustar alexalex jw 21.10.93 05.05.94 screen: frequently asked questions -- known problems -- unimplemented bugs =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Q: Why is it impossible to download a file with Kermit/sz/rz when screen is running? Do I need to set some special variables? A: Screen always interprets control-sequences sent by the applications and translates/optimizes them for the current terminal type. Screen always parses the user input for its escape character (CTRL-A). Both are basic screen features and cannot be switched off. Even if it were possible to switch screen into a completely transparent mode, you could never switch between windows, while kermit/sz/rz is downloading a file. You must wait till the end as kermit/sz/rz will not transmit your input during a file transfer and as kermit/sz/rz would be very confused if screen switched away the window containing the other kermit/sz/rz. Simply detach your screen session for each file transfer and start the transfer program only from the shell where you started screen. Q: I am using screen with a YYY terminal, which supports the XXX graphic language. I am very happy with it, except one thing: I cannot render graphics into screen windows. A: You are out of luck there. Screen provides a fixed set of escape sequences in order to make it possible to switch terminal types. Screen has to know exactly what the escape sequences do to the terminal because it must hold an image in memory. Otherwise screen could not restore the image if you switch to another window. Because of this you have to change screens escape sequence parser (ansi.c) to pass the XXX graphics sequences to the terminal. Of course the graphics will be lost if you switch to another window. Screen will only honour graphics sequences that are demanded by an overwhelming majority. Q: For some unknown reason, the fifo in /tmp/screens/S-myname is gone, and i can't resume my screen session. Is there a way to recreate the fifo? A: Screen checks the fifo/socket whenever it receives a SIGCHLD signal. If missing, the fifo/socket is recreated then. If screen is running non set-uid the user can issue a 'kill -CHLD screenpid' directly (it is -CHILD on some systems). Screenpid is the process-id of the screen process found in a 'ps -x' listing. But usually this won't work, as screen should be installed set- uid root. In this case you will not be able to send it a signal, but the kernel will. It does so, whenever a child of screen changes its state. Find the process-id (shellpid below) of the "least important" shell running inside screen. The try 'kill -STOP shellpid'. If the fifo/socket does not reappear, destroy the shell process. You sacrify one shell to save the rest. If nothing works, please do not forget to remove all processes running in the lost screen session. Q: When you start "screen" a page of text comes up to start you off. Is there a way to get rid of this text as a command line argument or by using a switch of some sort. A: Just put the following line in your ~/.screenrc: startup_message off Many people ask this, although it is in the man page, too :-) Q: Start "screen emacs" and run emacs function suspend-emacs (ctrl-z). The window containing emacs vanishes. A: This is a known bug. Unfortunatly there is no easy fix because this is specified in the POSIX standard. When a new window is created Screen opens up a new session because the window has to get the pty as a controlling terminal (a session can only have one controlling terminal). With the setsid() call the process also creates a new process group. This process group is orphaned, because there is no process in the session which is not in the process group. Now if the process group leader (i.e. your program) gets a TTIN/TTOU/TSTP, POSIX states that the kernel must send a KILL signal to the process group because there is no one left to continue the process. Even if screen would try to restart the program, that would be after it received the KILL signal which cannot be caught or ignored. tromey@klab.caltech.edu (Tom Tromey): I've noticed this exact same problem. I put this in my .emacs file. It seems to work: ;; If running under screen, disable C-z. (if (and (getenv "STY") (not window-system)) (global-unset-key "\C-z")) Q: Screen gets the terminal size wrong and messes up. A: Before you start screen: Check with 'stty -a' what the terminal driver thinks about rows and columns. Check the environment variables LINES and COLUMNS. Then from within screen check with the info command (CTRL-A i) what size screen thinks your terminal is. If correcting tty driver setting and environment variables does not help, look up the terminal capability definition. First the TERMCAP environment variable. If this is not set, look up the terminals name as defined in the environment variable TERM in /etc/termcap or in the terminfo database with untic or infocmp. There may be :li=...: and :co=...: or even :ll=...: entries (cols#... and lines#... when it's terminfo) defined incorrectly. Either construct your own TERMCAP environment variables with correct settings, use screens terminfo/termcap command in your .screenrc file or have the database corrected by the system administrator. Q: Screen messes up the terminal output when I use my favourite ap- plication. Setting the terminal size does not help. A: Probably you got the termcap/terminfo entries wrong. Fixing this is a three stage procedure. First, find out if terminfo or termcap is used. If your system only has /etc/termcap, but not /usr/lib/terminfo/... then you are using termcap. Easy. But if your system has both, then it depends how the appli- cation and how screen were linked. Beware, if your applica- tion runs on another host via rlogin, telnet or the like, you should check the terminfo/termcap databases there. If you cannot tell if terminfo or termcap is used (or you just want to be save), the do all steps in stage 3 in parallel for both systems (on all involved hosts). Second: Understand the basic rules how screen does its terminal emulation. When screen is started or reattached, it relies on the TERM environment variable to correctly reflect the terminal type you have physically in front of you. And the entry should either exist in the system terminfo/termcap database or be specified via the TERMCAP en- vironment variable (if screen is using the termcap system). On the other end, screen understands one set of control codes. It relies on the application using these codes. This means applica- tions that run under screen must be able to adapt their con- trol codes to screen. The application should use the TERM vari- able and termcap or terminfo library to find out how to drive its terminal. When running under screen, the terminal is virtual and is only defined by the set of control codes that screen understands. The TERM variable is automatically set to "screen" and the "screen"-entries should exist in the data- bases. If your application uses hardcoded control codes rather than a database, you are on your own. Hint: The codes under- stood by screen are a superset of the very common definition named "vt100". Look at the documentation of screen. The codes are listed there. Third: Have the entry "screen" in- stalled on all hosts or make sure you can live with "vt100". Check the codes sent by your application, when the TERM variable is set to "screen". Do not try to set the TERM variable inside screen to anything other than "screen" or "vt100" or compati- ble. Thus your application can drive screen correctly. Also take care that a good entry is installed for your physical terminal that screen has to drive. Even if the entry was good enough for your application to drive the terminal directly, screen may find flaws, as it tries to use other capabilities while op- timizing the screen output. The screenrc commands "termcap" and/or "terminfo" may help to fine-tune capabilities without calling the supervisor to change the database. Q: I cannot configure screen. Sed does not work. A: The regular expressions used in our configure script are too complicated for GNU sed version 2.03. In this regard it is bug compatible with Ultrix 3.1 "sed": GNU sed version 2.03 dumps core with our configure script. Try an older release. E.g. from ftp.uni-erlangen.de:/pub/utilities/screen/sed-2.02b.tar.gz Q: When reattaching a session from a different Workstation, the DISPLAY environment variable should be updated. Even ``CTLR-A : setenv DISPLAY newhost:0'' does not work as expected. A: Under unix every process has its own environment. The environ- ment of the SCREEN process can be changed with the `setenv' com- mand. This however cannot affect the environment of the shells or applications already running under screen. Subsequently spawned processes will reflect the changes. One should be aware of this problem when running applications from very old shells. Screen is a means for keeping processes alive. Q: About once every 5 times I ran the program, rather than getting a "screen," I got someone elses IRC output/input. A: What probably happened is that an IRC process was left running on a pseudo tty in such a way that the kernel thought the tty was available for reallocation. You can fix this behaviour by applying the SunOS 4.1.x tty jumbo patch (100513-04). Q: Screen compiled on SunOS 5.3 cannot reattach a detached session. A: You are using /usr/ucb/cc, this compiler is wrong. Actually it links with a C-library that mis-interprets dirent. Try again with /opt/SUNWspro/bin/cc! Q: The "talk" command does not work when Screen is active. A: Talk and several other programs rely on entries in the Utmp- Database (/etc/utmp). On some systems this Database is world writable, on others it is not. If it is not, screen must be installed with the appropriate permissions (user or group s-bit) just like any program that uses PTYs (rlogin, xterm, ...). When screen cannot write to utmp, you will see messages on you display which do not belong to any screen window. When screen can update utmp, it is not guaranteed that it does as you expect. First this depends on the config.h file defining UTMPOK, LOGINDEFAULT, and perhaps CAREFULUTMP. Second it depends on the screenrc files (system wide and per user), if utmp entries are done. Third, you can control whether windows are logged in with screens ``login'' command. Q: Seteuid() does not work as expected in AIX. Attempting a multi- user-attach results in a screen-panic: "seteuid: not owner". A: This is not a screen problem. According to Kay Nettle (pkn@cs.utexas.edu) you need the AIX patch PTF 423674. Q: When I type cd directory (any directory or just blank) from within one of the windows in screen, the whole thing just freezes up. A: You display the current working directory in xterm's title bar, This may be caused by hardcoded ESC-sequences in the shell prompt or in an cd alias. In Xterm the coding is ESC ] n ; string_to_display ^G where n = 1, 2, 3 selects the location of the displayed string. Screen misinterprets this as the ansi operating system comment sequence: ESC ] osc_string and waits (according to ansi) for the string terminator ESC \ Screen versions after 3.5.12 may provide a workaround. Q: Mesg or biff cannot be turned on or off while running screen. A: Screen failed to change the owner of the pty it uses. You need to install screen setuid-root. See the file INSTALL for details. Q: The cursor left key deletes the characters instead of just moving the cursor. A redisplay (^Al) brings everything back. A: Your terminal emulator treats the backspace as "destructive". You can probably change this somewhere in the setup. We can't think of a reason why anybody would want a destructive backspace, but if you really must have it, add the lines termcap 'bc@:bs@' terminfo 'bc@:bs@' to your ~/.screenrc (replace with the terminal type your emulator uses). Q: I have an old SysV OS (like Motorola SysV68) and sometimes screen doesn't reset the attributes correctly. A redisplay (^Al) doesn't make things better. A: The libcurses library has a bug if attributes are cleared with the special ue/se capabilities. As a workaround (other than upgrading your system) modify 'rmul' (and 'rmso'?) in screen's terminfo entry: rmul=\E[m, rmso=\E[m screen-4.9.1/doc/window_to_display.ps0000664000175000017500000011253714467014146016341 0ustar alexalex%!PS-Adobe-2.0 EPSF-1.2 %%Creator: idraw %%DocumentFonts: Courier Times-Bold %%Pages: 1 %%BoundingBox: 20 154 576 782 %%EndComments %%BeginIdrawPrologue /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def %%EndIdrawPrologue /arrowHeight 8 def /arrowWidth 4 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /Times-Bold reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def %%EndProlog %I Idraw 10 Grid 8 8 %%Page: 1 1 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.95606 0 0 0.95606 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 6 276 433 276 449 292 449 364 449 380 449 380 433 6 BSpl %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -400 -208 ] concat Begin %I CBSpl %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 350 330.5 ] concat %I 12 340 107 340 123 340 187 340 203 356 203 468 203 484 203 484 187 484 123 484 107 468 107 356 107 12 CBSpl End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 535.5 381 ] concat %I [ (w_ptyfd) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 88 -23.9999 ] concat Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ -4.37114e-08 -1 1 -4.37114e-08 -608 640 ] concat Begin %I Poly none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 238 522.5 ] concat %I 4 164 315 228 315 228 363 164 363 4 Poly End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 233 363 241 387 Rect End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 225 387 225 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 217 387 217 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 233 363 201 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 201 387 233 387 Line %I 1 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 66.5 285 ] concat %I [ (d_obuf) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 153.5 244 ] concat %I [ (write\(\)) ] Text End Begin %I BSpl %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 0.5 0 0 0.5 56 123.5 ] concat %I 3 272 281 288 249 272 201 3 BSpl %I 2 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -239.5 -207.5 ] concat Begin %I CBSpl %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 350 330.5 ] concat %I 12 340 107 340 123 340 187 340 203 356 203 468 203 484 203 484 187 484 123 484 107 468 107 356 107 12 CBSpl End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 535.5 381 ] concat %I [ (w_ptyfd) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 248.5 -23.5 ] concat Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ -4.37114e-08 -1 1 -4.37114e-08 -608 640 ] concat Begin %I Poly none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 238 522.5 ] concat %I 4 164 315 228 315 228 363 164 363 4 Poly End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 233 363 241 387 Rect End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 225 387 225 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 217 387 217 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 233 363 201 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 201 387 233 387 Line %I 1 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 66.5 285 ] concat %I [ (d_obuf) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 314 244.5 ] concat %I [ (write\(\)) ] Text End Begin %I BSpl %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 0.5 0 0 0.5 216.5 124 ] concat %I 3 272 281 288 249 272 201 3 BSpl %I 2 End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -79.5 -207.5 ] concat Begin %I CBSpl %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 350 330.5 ] concat %I 12 340 107 340 123 340 187 340 203 356 203 468 203 484 203 484 187 484 123 484 107 468 107 356 107 12 CBSpl End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 535.5 381 ] concat %I [ (w_ptyfd) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 408.5 -23.5 ] concat Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ -4.37114e-08 -1 1 -4.37114e-08 -608 640 ] concat Begin %I Poly none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 238 522.5 ] concat %I 4 164 315 228 315 228 363 164 363 4 Poly End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 233 363 241 387 Rect End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 225 387 225 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 217 387 217 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 233 363 201 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 201 387 233 387 Line %I 1 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 66.5 285 ] concat %I [ (d_obuf) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 474 244.5 ] concat %I [ (write\(\)) ] Text End Begin %I BSpl %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 0.5 0 0 0.5 376.5 124 ] concat %I 3 272 281 288 249 272 201 3 BSpl %I 2 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 289 540 ] concat %I [ (WriteString\(\)) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 0 168 ] concat Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 32 56 ] concat Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 1 0 0 1 61 197 ] concat %I 195 243 259 291 Rect End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 283 251 283 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 275 251 275 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 267 251 267 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 259 251 259 Line %I 1 End Begin %I Line %I b 65535 1 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 251 251 251 Line %I 1 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 299 251 299 Line %I 1 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 307 251 307 Line %I 1 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 315 251 315 Line %I 1 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 61 197 ] concat %I 203 323 251 323 Line %I 1 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 53 197 ] concat %I 203 331 251 331 Line %I 1 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.5 0 0 0.5 162 329 ] concat %I 188 318 188 366 Line %I 2 End Begin %I Line %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.5 0 0 0.5 162 329 ] concat %I 316 318 316 366 Line %I 2 End Begin %I BSpl %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.5 0 0 0.5 162 329 ] concat %I 3 316 366 316 398 300 398 3 BSpl %I 2 End Begin %I BSpl %I b 65535 0 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.5 0 0 0.5 162 329 ] concat %I 3 188 366 188 398 172 398 3 BSpl %I 2 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 296 492.5 ] concat %I [ (w_image[]) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 312 567 ] concat %I [ (\(CB8\)) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 1.52588e-05 16 ] concat Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ -4.37114e-08 -1 1 -4.37114e-08 -567.5 808.5 ] concat Begin %I Poly none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 238 522.5 ] concat %I 4 164 315 228 315 228 363 164 363 4 Poly End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 233 363 241 387 Rect End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 225 387 225 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 217 387 217 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 233 363 201 363 Line %I 1 End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 111 317 ] concat %I 201 387 233 387 Line %I 1 End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 101 453.5 ] concat %I [ (w_string) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Poly none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 230 434.5 ] concat %I 4 164 315 228 315 228 363 164 363 4 Poly End Begin %I Pict %I b 65535 2 0 0 [] 0 SetB %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 -32 32 ] concat Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 233 363 241 387 Rect End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 225 387 225 363 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 217 387 217 363 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 233 363 201 363 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 201 387 233 387 Line %I 1 End End %I eop End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 300.5 589 ] concat %I [ (w_outbuf) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-times-bold-r-normal-*-14-*-*-*-*-*-*-* Times-Bold 14 SetF %I t [ 1 0 0 1 185 814 ] concat %I [ (Window to display data flow in Screen) ] Text End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 4 108 361 60 361 44 361 44 345 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 4 148 361 156 361 172 361 172 345 4 BSpl %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 34 491 ] concat %I [ (PrintFlush\(\)) ] Text End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 7 300 409 276 409 276 433 276 457 276 481 300 481 308 481 7 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 4 356 481 380 481 380 457 380 449 4 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 5 220 505 220 529 220 553 244 553 252 553 5 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 6 276 409 252 409 252 433 252 529 252 553 284 553 6 BSpl %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 0 136 ] concat Begin %I CBSpl %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 350 330.5 ] concat %I 12 340 107 340 123 340 187 340 203 356 203 468 203 484 203 484 187 484 123 484 107 468 107 356 107 12 CBSpl End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 535.5 381 ] concat %I [ (w_ptyfd) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 0 88 ] concat Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Rect none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 -0 -0 0.5 380.5 362.5 ] concat %I 71 123 135 171 Rect End Begin %I Pict %I b 65535 2 0 0 [] 0 SetB %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 24 -136 ] concat Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 257 363 265 387 Rect End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 273 387 273 363 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 281 387 281 363 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 265 363 297 363 Line %I 1 End Begin %I Line %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 135 197.5 ] concat %I 265 387 297 387 Line %I 1 End End %I eop End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 416.5 419 ] concat %I [ (main:buf) ] Text End End %I eop Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 464 538 ] concat %I [ (read\(\)) ] Text End Begin %I BSpl %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 -4 111 ] concat %I 3 516 409 484 417 460 409 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 7 412 401 396 401 396 385 396 361 396 345 412 345 420 345 7 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 3 36 337 36 305 76 257 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 3 44 337 52 297 108 265 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 3 52 337 68 297 132 273 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 3 164 337 164 321 172 273 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 3 172 337 172 321 204 289 3 BSpl %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 0 104 ] concat Begin %I Rect none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 -4 119 ] concat %I 28 201 92 217 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 29.5 332 ] concat %I [ (AddStrn\(\)) ] Text End End %I eop Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 471 481 ] concat %I [ (write\(\)) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u none SetP %I p n %I t [ 1 0 0 1 0 -120 ] concat Begin %I CBSpl %I b 65520 2 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg %I p 0.5 SetP %I t [ 0.5 0 0 0.5 350 482.5 ] concat %I 12 340 107 340 123 340 187 340 203 356 203 468 203 484 203 484 187 484 123 484 107 468 107 356 107 12 CBSpl End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 511.5 533 ] concat %I [ (w_pwin->p_ptyfd) ] Text End End %I eop Begin %I BSpl %I b 65535 1 1 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 3 516 345 492 353 468 345 3 BSpl %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 391.5 445.5 ] concat %I [ (w_pwin->p_inbuf) ] Text End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Poly none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg LtGray 0.762951 0.762951 0.762951 SetCBg none SetP %I p n %I t [ 0.5 0 0 0.5 342 290.5 ] concat %I 4 164 315 228 315 228 363 164 363 4 Poly End Begin %I Rect %I b 65520 2 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 215 85.0002 ] concat %I 233 363 241 387 Rect End Begin %I Line %I b 65520 2 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 215 85.0002 ] concat %I 225 387 225 363 Line %I 1 End Begin %I Line %I b 65520 2 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 215 85.0002 ] concat %I 233 363 201 363 Line %I 1 End Begin %I Line %I b 65520 2 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 215 85.0002 ] concat %I 201 387 233 387 Line %I 1 End Begin %I Line %I b 65520 2 0 0 [12 4] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 119 140 ] concat %I 313 308 313 332 Line %I 1 End End %I eop End %I eop End %I eop Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 222 210 358 106 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 190 194 198 106 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 150 194 518 106 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 126 186 358 106 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 94 178 198 106 Line %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t u Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 184 615 ] concat %I [ (Special\(\)) ] Text End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 127 ] concat %I 6 220 505 220 529 196 529 164 529 140 529 140 505 6 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 3 166 425 166 409 198 378 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 3 158 425 158 410 182 370 3 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 3 150 425 150 409 158 362 3 BSpl %I 1 End End %I eop Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 3 198 257 198 241 254 210 3 BSpl %I 1 End Begin %I Pict %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 1 0 0 1 120 48 ] concat Begin %I Rect none SetB %I b n %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 1 SetP %I t [ 1 -0 -0 1 -4 119 ] concat %I 28 257 108 273 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 28.5 388 ] concat %I [ (MakeStatus\(\)) ] Text End End %I eop Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 254 210 518 106 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 198 378 518 106 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 182 370 358 106 Line %I 1 End Begin %I Line %I b 65520 0 0 0 [12 4] 0 SetB %I cfg LtGray 0.762951 0.762951 0.762951 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -22 198.5 ] concat %I 158 362 198 106 Line %I 1 End Begin %I BSpl %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 4 268 337 268 281 180 241 180 185 4 BSpl %I 1 End Begin %I BSpl %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.5 -0 -0 0.5 197.5 193.5 ] concat %I 4 181 525 181 413 277 333 277 221 4 BSpl %I 2 End Begin %I BSpl %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 4 316 337 316 281 500 241 500 185 4 BSpl %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 0.587415 -0.809286 0.809286 0.587415 298.171 395.796 ] concat %I [ (AddChar\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 0.810117 0.586269 -0.586269 0.810117 198.687 362.705 ] concat %I [ (AddChar\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 0.954268 -0.298951 0.298951 0.954268 391.408 381.739 ] concat %I [ (AddChar\(\)) ] Text End Begin %I BSpl %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 5 412 409 308 409 292 409 292 393 292 361 5 BSpl %I 1 End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 232.5 473.5 ] concat %I [ (w_dlist->next->next...) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 134 540 ] concat %I [ (PrintChar\(\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f -*-courier-medium-r-normal-*-10-*-*-*-*-*-*-* Courier 10 SetF %I t [ 1 0 0 1 139 525 ] concat %I [ (SaveChar\(\)) ] Text End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg Black 0 0 0 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 5 412 409 292 409 148 409 132 409 132 393 5 BSpl %I 1 End Begin %I BSpl %I b 65535 1 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 -0 -0 1 -4 119 ] concat %I 4 244 409 220 409 220 433 220 481 4 BSpl %I 1 End End %I eop showpage %%Trailer end screen-4.9.1/doc/screen.texinfo0000664000175000017500000071140214467014146015110 0ustar alexalex\input texinfo @c -*-texinfo-*- @c %**start of header @c vi:set wm=5 @documentencoding ISO-8859-15 @setfilename screen.info @settitle Screen User's Manual @dircategory General Commands @finalout @setchapternewpage odd @c %**end of header @set version 4.9.1 @direntry * Screen: (screen). Full-screen window manager. @end direntry @c For examples, use a literal escape in info. @ifinfo @set esc ^[ @end ifinfo @iftex @set esc @end iftex @ifinfo This file documents the @code{Screen} virtual terminal manager. Copyright (c) 1993-2023 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation. @end ifinfo @titlepage @title Screen @subtitle The virtual terminal manager @subtitle for Version @value{version} @subtitle Aug 2023 @page @vskip 0pt plus 1filll Copyright @copyright{} 1993-2023 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation. @end titlepage @shortcontents @contents @node Top, Overview, (dir), (dir) @ifinfo @top Screen This file documents the @code{Screen} virtual terminal manager, version @value{version}. @end ifinfo @menu * Overview:: Preliminary information. * Getting Started:: An introduction to @code{screen}. * Invoking Screen:: Command line options for @code{screen}. * Customization:: The @file{.screenrc} file. * Commands:: List all of the commands. * New Window:: Running a program in a new window. * Selecting:: Selecting a window to display. * Session Management:: Suspend/detach, grant access, connect sessions. * Regions:: Split-screen commands. * Window Settings:: Titles, logging, etc. * Virtual Terminal:: Controlling the @code{screen} VT100 emulation. * Copy and Paste:: Exchanging text between windows and sessions. * Subprocess Execution:: I/O filtering with @code{exec}. * Key Binding:: Binding commands to keys. * Flow Control:: Trap or pass flow control characters. * Termcap:: Tweaking your terminal's termcap entry. * Message Line:: The @code{screen} message line. * Logging:: Keeping a record of your session. * Startup:: Functions only useful at @code{screen} startup. * Miscellaneous:: Various other commands. * String Escapes:: Inserting current information into strings * Environment:: Environment variables used by @code{screen}. * Files:: Files used by @code{screen}. * Credits:: Who's who of @code{screen}. * Bugs:: What to do if you find a bug. * Installation:: Getting @code{screen} running on your system. * Concept Index:: Index of concepts. * Command Index:: Index of all @code{screen} commands. * Keystroke Index:: Index of default key bindings. @end menu @node Overview, Getting Started, Top, Top @chapter Overview @cindex overview Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells. Each virtual terminal provides the functions of the DEC VT100 terminal and, in addition, several control functions from the ISO 6429 (ECMA 48, ANSI X3.64) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows the user to move text regions between windows. When @code{screen} is called, it creates a single window with a shell in it (or the specified command) and then gets out of your way so that you can use the program as you normally would. Then, at any time, you can create new (full-screen) windows with other programs in them (including more shells), kill the current window, view a list of the active windows, turn output logging on and off, copy text between windows, view the scrollback history, switch between windows, etc. All windows run their programs completely independent of each other. Programs continue to run when their window is currently not visible and even when the whole screen session is detached from the user's terminal. When a program terminates, @code{screen} (per default) kills the window that contained it. If this window was in the foreground, the display switches to the previously displayed window; if none are left, @code{screen} exits. Shells usually distinguish between running as login-shell or sub-shell. Screen runs them as sub-shells, unless told otherwise (See @code{shell} .screenrc command). Everything you type is sent to the program running in the current window. The only exception to this is the one keystroke that is used to initiate a command to the window manager. By default, each command begins with a control-a (abbreviated @kbd{C-a} from now on), and is followed by one other keystroke. The command character (@pxref{Command Character}) and all the key bindings (@pxref{Key Binding}) can be fully customized to be anything you like, though they are always two characters in length. @code{Screen} does not understand the prefix @kbd{C-} to mean control, although this notation is used in this manual for readability. Please use the caret notation (@kbd{^A} instead of @kbd{C-a}) as arguments to e.g. the @code{escape} command or the @code{-e} option. @code{Screen} will also print out control characters in caret notation. The standard way to create a new window is to type @kbd{C-a c}. This creates a new window running a shell and switches to that window immediately, regardless of the state of the process running in the current window. Similarly, you can create a new window with a custom command in it by first binding the command to a keystroke (in your @file{.screenrc} file or at the @kbd{C-a :} command line) and then using it just like the @kbd{C-a c} command. In addition, new windows can be created by running a command like: @example screen emacs prog.c @end example @noindent from a shell prompt within a previously created window. This will not run another copy of @code{screen}, but will instead supply the command name and its arguments to the window manager (specified in the $STY environment variable) who will use it to create the new window. The above example would start the @code{emacs} editor (editing @file{prog.c}) and switch to its window. - Note that you cannot transport environment variables from the invoking shell to the application (emacs in this case), because it is forked from the parent screen process, not from the invoking shell. If @file{/etc/utmp} is writable by @code{screen}, an appropriate record will be written to this file for each window, and removed when the window is closed. This is useful for working with @code{talk}, @code{script}, @code{shutdown}, @code{rsend}, @code{sccs} and other similar programs that use the utmp file to determine who you are. As long as @code{screen} is active on your terminal, the terminal's own record is removed from the utmp file. @xref{Login}. @node Getting Started, Invoking Screen, Overview, Top @chapter Getting Started @cindex introduction Before you begin to use @code{screen} you'll need to make sure you have correctly selected your terminal type, just as you would for any other termcap/terminfo program. (You can do this by using @code{tset}, @code{qterm}, or just @code{set term=mytermtype}, for example.) If you're impatient and want to get started without doing a lot more reading, you should remember this one command: @kbd{C-a ?} (@pxref{Key Binding}). Typing these two characters will display a list of the available @code{screen} commands and their bindings. Each keystroke is discussed in the section on keystrokes (@pxref{Default Key Bindings}). Another section (@pxref{Customization}) deals with the contents of your @file{.screenrc}. If your terminal is a ``true'' auto-margin terminal (it doesn't allow the last position on the screen to be updated without scrolling the screen) consider using a version of your terminal's termcap that has automatic margins turned @emph{off}. This will ensure an accurate and optimal update of the screen in all circumstances. Most terminals nowadays have ``magic'' margins (automatic margins plus usable last column). This is the VT100 style type and perfectly suited for @code{screen}. If all you've got is a ``true'' auto-margin terminal @code{screen} will be content to use it, but updating a character put into the last position on the screen may not be possible until the screen scrolls or the character is moved into a safe position in some other way. This delay can be shortened by using a terminal with insert-character capability. @xref{Special Capabilities}, for more information about telling @code{screen} what kind of terminal you have. @node Invoking Screen, Customization, Getting Started, Top @chapter Invoking @code{Screen} @cindex invoking @cindex options @cindex command line options Screen has the following command-line options: @table @samp @item -a Include @emph{all} capabilities (with some minor exceptions) in each window's termcap, even if @code{screen} must redraw parts of the display in order to implement a function. @item -A Adapt the sizes of all windows to the size of the display. By default, @code{screen} may try to restore its old window sizes when attaching to resizable terminals (those with @samp{WS} in their descriptions, e.g. @code{suncmd} or some varieties of @code{xterm}). @item -c @var{file} Use @var{file} as the user's configuration file instead of the default of @file{$HOME/.screenrc}. @item -d [@var{pid.sessionname}] @itemx -D [@var{pid.sessionname}] Do not start @code{screen}, but instead detach a @code{screen} session running elsewhere (@pxref{Detach}). @samp{-d} has the same effect as typing @kbd{C-a d} from the controlling terminal for the session. @samp{-D} is the equivalent to the power detach key. If no session can be detached, this option is ignored. In combination with the @code{-r}/@code{-R} option more powerful effects can be achieved: @table @code @item -d -r Reattach a session and if necessary detach it first. @item -d -R Reattach a session and if necessary detach or even create it first. @item -d -RR Reattach a session and if necessary detach or create it. Use the first session if more than one session is available. @item -D -r Reattach a session. If necessary detach and logout remotely first. @item -D -R Attach here and now. In detail this means: If a session is running, then reattach. If necessary detach and logout remotely first. If it was not running create it and notify the user. This is the author's favorite. @item -D -RR Attach here and now. Whatever that means, just do it. @end table @emph{Note}: It is a good idea to check the status of your sessions with @code{screen -list} before using this option. @item -e @var{xy} Set the command character to @var{x}, and the character generating a literal command character (when typed after the command character) to @var{y}. The defaults are @kbd{C-a} and @kbd{a}, which can be specified as @samp{-e^Aa}. When creating a @code{screen} session, this option sets the default command character. In a multiuser session all users added will start off with this command character. But when attaching to an already running session, this option only changes the command character of the attaching user. This option is equivalent to the commands @code{defescape} or @code{escape} respectively. (@pxref{Command Character}). @item -f @itemx -fn @itemx -fa Set flow-control to on, off, or automatic switching mode, respectively. This option is equivalent to the @code{defflow} command (@pxref{Flow Control}). @item -h @var{num} Set the history scrollback buffer to be @var{num} lines high. Equivalent to the @code{defscrollback} command (@pxref{Copy}). @item -i Cause the interrupt key (usually @kbd{C-c}) to interrupt the display immediately when flow control is on. This option is equivalent to the @code{interrupt} argument to the @code{defflow} command (@pxref{Flow Control}). Its use is discouraged. @item -l @itemx -ln Turn login mode on or off (for @file{/etc/utmp} updating). This option is equivalent to the @code{deflogin} command (@pxref{Login}). @item -ls [@var{match}] @itemx -list [@var{match}] Do not start @code{screen}, but instead print a list of session identification strings (usually of the form @var{pid.tty.host}; @pxref{Session Name}). Sessions marked @samp{detached} can be resumed with @code{screen -r}. Those marked @samp{attached} are running and have a controlling terminal. If the session runs in multiuser mode, it is marked @samp{multi}. Sessions marked as @samp{unreachable} either live on a different host or are dead. An unreachable session is considered dead, when its name matches either the name of the local host, or the specified parameter, if any. See the @code{-r} flag for a description how to construct matches. Sessions marked as @samp{dead} should be thoroughly checked and removed. Ask your system administrator if you are not sure. Remove sessions with the @samp{-wipe} option. @item -L Tell @code{screen} to turn on automatic output logging for the windows. @item -Logfile "file" By default logfile name is "screenlog.0". You can set new logfile name with the @code{-Logfile} option. @item -m Tell @code{screen} to ignore the @code{$STY} environment variable. When this option is used, a new session will always be created, regardless of whether @code{screen} is being called from within another @code{screen} session or not. This flag has a special meaning in connection with the @samp{-d} option: @table @code @item -d -m Start @code{screen} in @emph{detached} mode. This creates a new session but doesn't attach to it. This is useful for system startup scripts. @item -D -m This also starts @code{screen} in @emph{detached} mode, but doesn't fork a new process. The command exits if the session terminates. @end table @item -O Select a more optimal output mode for your terminal rather than true VT100 emulation (only affects auto-margin terminals without @samp{LP}). This can also be set in your @file{.screenrc} by specifying @samp{OP} in the @code{termcap} command. @item -p @var{name_or_number}|-|=|+ Preselect a window. This is useful when you want to reattach to a specific window or you want to send a command via the @samp{-X} option to a specific window. As with screen's select command, @samp{-} selects the blank window. As a special case for reattach, @samp{=} brings up the windowlist on the blank window, while a @samp{+} will create new window. The command will not be executed if the specified window could not be found. @item -q Suppress printing of error messages. In combination with @samp{-ls} the exit value is set as follows: 9 indicates a directory without sessions. 10 indicates a directory with running but not attachable sessions. 11 (or more) indicates 1 (or more) usable sessions. In combination with @samp{-r} the exit value is as follows: 10 indicates that there is no session to resume. 12 (or more) indicates that there are 2 (or more) sessions to resume and you should specify which one to choose. In all other cases @samp{-q} has no effect. @item -Q Some commands now can be queried from a remote session using this flag, e.g. 'screen -Q windows'. The commands will send the response to the stdout of the querying process. If there was an error in the command, then the querying process will exit with a non-zero status. The commands that can be queried now are: @code{echo} @code{info} @code{lastmsg} @code{number} @code{select} @code{time} @code{title} @code{windows} @item -r [@var{pid.sessionname}] @itemx -r @var{sessionowner}/[@var{pid.sessionname}] Resume a detached @code{screen} session. No other options (except combinations with @samp{-d} or @samp{-D}) may be specified, though the session name (@pxref{Session Name}) may be needed to distinguish between multiple detached @code{screen} sessions. The second form is used to connect to another user's screen session which runs in multiuser mode. This indicates that screen should look for sessions in another user's directory. This requires setuid-root. @item -R resumes screen only when it's unambiguous which one to attach, usually when only one @code{screen} is detached. Otherwise lists available sessions. @item -RR Resume the first appropriate detached @code{screen} session. If successful, all other command-line options are ignored. If no detached session exists, start a new session using the specified options, just as if @samp{-R} had not been specified. This option is set by default if screen is run as a login-shell (actually screen uses @samp{-xRR} in that case). For combinations with the @samp{-D}/@samp{-d} option see there. @item -s @var{program} Set the default shell to be @var{program}. By default, @code{screen} uses the value of the environment variable @code{$SHELL}, or @file{/bin/sh} if it is not defined. This option is equivalent to the @code{shell} command (@pxref{Shell}). See also there. @item -S @var{sessionname} Set the name of the new session to @var{sessionname}. This option can be used to specify a meaningful name for the session in place of the default @var{tty.host} suffix. This name identifies the session for the @code{screen -list} and @code{screen -r} commands. This option is equivalent to the @code{sessionname} command (@pxref{Session Name}). @item -t @var{name} Set the title (name) for the default shell or specified program. This option is equivalent to the @code{shelltitle} command (@pxref{Shell}). @item -T @var{term} Set the $TERM enviroment variable using the specified @emph{term} as opposed to the default setting of @code{screen}. @item -U Run screen in UTF-8 mode. This option tells screen that your terminal sends and understands UTF-8 encoded characters. It also sets the default encoding for new windows to @samp{utf8}. @item -v Print the version number. @item -wipe [@var{match}] List available screens like @code{screen -ls}, but remove destroyed sessions instead of marking them as @samp{dead}. An unreachable session is considered dead, when its name matches either the name of the local host, or the explicitly given parameter, if any. See the @code{-r} flag for a description how to construct matches. @item -x Attach to a session which is already attached elsewhere (multi-display mode). @code{Screen} refuses to attach from within itself. But when cascading multiple screens, loops are not detected; take care. @item -X Send the specified command to a running screen session. You may use the @code{-S} option to specify the screen session if you have several running. You can use the @code{-d} or @code{-r} option to tell screen to look only for attached or detached screen sessions. Note that this command doesn't work if the session is password protected. @end table @node Customization, Commands, Invoking Screen, Top @chapter Customizing @code{Screen} @cindex customization You can modify the default settings for @code{screen} to fit your tastes either through a personal @file{.screenrc} file which contains commands to be executed at startup, or on the fly using the @code{colon} command. @menu * Startup Files:: The @file{.screenrc} file. * Source:: Read commands from a file. * Colon:: Entering customization commands interactively. @end menu @node Startup Files, Source, , Customization @section The @file{.screenrc} file @cindex .screenrc @cindex screenrc When @code{screen} is invoked, it executes initialization commands from the files @file{.screenrc} in the user's home directory and @file{/usr/local/etc/screenrc}. These defaults can be overridden in the following ways: For the global screenrc file @code{screen} searches for the environment variable @code{$SYSSCREENRC} (this override feature may be disabled at compile-time). The user specific screenrc file is searched for in @code{$SCREENRC}, then @file{@code{$HOME}/.screenrc}. The command line option @samp{-c} specifies which file to use (@pxref{Invoking Screen}). Commands in these files are used to set options, bind commands to keys, and to automatically establish one or more windows at the beginning of your @code{screen} session. Commands are listed one per line, with empty lines being ignored. A command's arguments are separated by tabs or spaces, and may be surrounded by single or double quotes. A @samp{#} turns the rest of the line into a comment, except in quotes. Unintelligible lines are warned about and ignored. Commands may contain references to environment variables. The syntax is the shell-like @code{$VAR} or @code{$@{VAR@}}. Note that this causes incompatibility with previous @code{screen} versions, as now the '$'-character has to be protected with '\' if no variable substitution is intended. A string in single-quotes is also protected from variable substitution. Two configuration files are shipped as examples with your screen distribution: @file{etc/screenrc} and @file{etc/etcscreenrc}. They contain a number of useful examples for various commands. @node Source, Colon, Startup Files, Customization @section Source @deffn Command source file (none)@* Read and execute commands from file @var{file}. Source commands may be nested to a maximum recursion level of ten. If @var{file} is not an absolute path and screen is already processing a source command, the parent directory of the running source command file is used to search for the new command file before screen's current directory. Note that termcap/terminfo/termcapinfo commands only work at startup and reattach time, so they must be reached via the default screenrc files to have an effect. @end deffn @node Colon, , Source, Customization @section Colon Customization can also be done online, with this command: @kindex : @deffn Command colon (@kbd{C-a :})@* Allows you to enter @file{.screenrc} command lines. Useful for on-the-fly modification of key bindings, specific window creation and changing settings. Note that the @code{set} keyword no longer exists, as of version 3.3. Change default settings with commands starting with @samp{def}. You might think of this as the @code{ex} command mode of @code{screen}, with @code{copy} as its @code{vi} command mode (@pxref{Copy and Paste}). @end deffn @node Commands, New Window, Customization, Top @chapter Commands A command in @code{screen} can either be bound to a key, invoked from a screenrc file, or called from the @code{colon} prompt (@pxref{Customization}). As of version 3.3, all commands can be bound to keys, although some may be less useful than others. For a number of real life working examples of the most important commands see the files @file{etc/screenrc} and @file{etc/etcscreenrc} of your screen distribution. In this manual, a command definition looks like this: @table @asis @item -- Command: command [-n] ARG1 [ARG2] @dots{} (@var{keybindings})@* This command does something, but I can't remember what. @end table An argument in square brackets (@samp{[]}) is optional. Many commands take an argument of @samp{on} or @samp{off}, which is indicated as @var{state} in the definition. @menu * Default Key Bindings:: @code{screen} keyboard commands. * Command Summary:: List of all commands. @end menu @node Default Key Bindings, Command Summary, , Commands @section Default Key Bindings As mentioned previously, each keyboard command consists of a @kbd{C-a} followed by one other character. For your convenience, all commands that are bound to lower-case letters are also bound to their control character counterparts (with the exception of @kbd{C-a a}; see below). Thus, both @kbd{C-a c} and @kbd{C-a C-c} can be used to create a window. The following table shows the default key bindings: @table @asis @item @kbd{C-a '} (select)@* Prompt for a window identifier and switch. @xref{Selecting}. @item @kbd{C-a "} (windowlist -b)@* Present a list of all windows for selection. @xref{Selecting}. @item @kbd{C-a 0@dots{}9, -} (select 0@dots{}select 9, select -)@* Switch to window number 0@dots{}9, or the blank window. @xref{Selecting}. @item @kbd{C-a @key{Tab}} (focus)@* Switch the input focus to the next region. @xref{Regions}. @item @kbd{C-a C-a} (other)@* Toggle to the window displayed previously. If this window does no longer exist, @code{other} has the same effect as @code{next}. @xref{Selecting}. @item @kbd{C-a a} (meta)@* Send the command character (C-a) to window. See @code{escape} command. @xref{Command Character}. @item @kbd{C-a A} (title)@* Allow the user to enter a title for the current window. @xref{Naming Windows}. @item @kbd{C-a b} @itemx @kbd{C-a C-b} (break)@* Send a break to the tty. @xref{Break}. @item @kbd{C-a B} (pow_break)@* Close and reopen the tty-line. @xref{Break}. @item @kbd{C-a c} @itemx @kbd{C-a C-c} (screen)@* Create a new window with a shell and switch to that window. @xref{Screen Command}. @item @kbd{C-a C} (clear)@* Clear the screen. @xref{Clear}. @item @kbd{C-a d} @itemx @kbd{C-a C-d} (detach)@* Detach @code{screen} from this terminal. @xref{Detach}. @item @kbd{C-a D D} (pow_detach)@* Detach and logout. @xref{Power Detach}. @item @kbd{C-a f} @itemx @kbd{C-a C-f} (flow)@* Cycle flow among @samp{on}, @samp{off} or @samp{auto}. @xref{Flow}. @item @kbd{C-a F} (fit)@* Resize the window to the current region size. @xref{Fit}. @item @kbd{C-a C-g} (vbell)@* Toggle visual bell mode. @xref{Bell}. @item @kbd{C-a h} (hardcopy)@* Write a hardcopy of the current window to the file ``hardcopy.@var{n}''. @xref{Hardcopy}. @item @kbd{C-a H} (log)@* Toggle logging of the current window to the file ``screenlog.@var{n}''. @xref{Log}. @item @kbd{C-a i} @itemx @kbd{C-a C-i} (info)@* Show info about the current window. @xref{Info}. @item @kbd{C-a k} @itemx @kbd{C-a C-k} (kill)@* Destroy the current window. @xref{Kill}. @item @kbd{C-a l} @itemx @kbd{C-a C-l} (redisplay)@* Fully refresh the current window. @xref{Redisplay}. @item @kbd{C-a L} (login)@* Toggle the current window's login state. @xref{Login}. @item @kbd{C-a m} @itemx @kbd{C-a C-m} (lastmsg)@* Repeat the last message displayed in the message line. @xref{Last Message}. @item @kbd{C-a M} (monitor) Toggle monitoring of the current window. @xref{Monitor}. @item @kbd{C-a @key{SPC}} @itemx @kbd{C-a n} @itemx @kbd{C-a C-n} (next)@* Switch to the next window. @xref{Selecting}. @item @kbd{C-a N} (number)@* Show the number (and title) of the current window. @xref{Number}. @item @kbd{C-a p} @itemx @kbd{C-a C-p} @itemx @kbd{C-a C-h} @itemx @kbd{C-a @key{BackSpace}} (prev)@* Switch to the previous window (opposite of @kbd{C-a n}). @xref{Selecting}. @item @kbd{C-a q} @itemx @kbd{C-a C-q} (xon)@* Send a ^Q (ASCII XON) to the current window. @xref{XON/XOFF}. @item @kbd{C-a Q} (only)@* Delete all regions but the current one. @xref{Regions}. @item @kbd{C-a r} @itemx @kbd{C-a C-r} (wrap)@* Toggle the current window's line-wrap setting (turn the current window's automatic margins on or off). @xref{Wrap}. @item @kbd{C-a s} @itemx @kbd{C-a C-s} (xoff)@* Send a ^S (ASCII XOFF) to the current window. @xref{XON/XOFF}. @item @kbd{C-a S} (split)@* Split the current region horizontally into two new ones. @xref{Regions}. @item @kbd{C-a t} @itemx @kbd{C-a C-t} (time)@* Show the load average and xref. @xref{Time}. @item @kbd{C-a v} (version)@* Display the version and compilation date. @xref{Version}. @item @kbd{C-a C-v} (digraph)@* Enter digraph. @xref{Digraph}. @item @kbd{C-a w} @itemx @kbd{C-a C-w} (windows)@* Show a list of active windows. @xref{Windows}. @item @kbd{C-a W} (width)@* Toggle between 80 and 132 columns. @xref{Window Size}. @item @kbd{C-a x} @itemx @kbd{C-a C-x} (lockscreen)@* Lock your terminal. @xref{Lock}. @item @kbd{C-a X} (remove)@* Kill the current region. @xref{Regions}. @item @kbd{C-a z} @itemx @kbd{C-a C-z} (suspend)@* Suspend @code{screen}. @xref{Suspend}. @item @kbd{C-a Z} (reset)@* Reset the virtual terminal to its ``power-on'' values. @xref{Reset}. @item @kbd{C-a .} (dumptermcap)@* Write out a @file{.termcap} file. @xref{Dump Termcap}. @item @kbd{C-a ?} (help)@* Show key bindings. @xref{Help}. @item @kbd{C-a \} (quit)@* Kill all windows and terminate @code{screen}. @xref{Quit}. @item @kbd{C-a :} (colon)@* Enter a command line. @xref{Colon}. @item @kbd{C-a [} @itemx @kbd{C-a C-[} @itemx @kbd{C-a @key{ESC}} (copy)@* Enter copy/scrollback mode. @xref{Copy}. @item @kbd{C-a ]} @itemx @kbd{C-a C-]} (paste .)@* Write the contents of the paste buffer to the stdin queue of the current window. @xref{Paste}. @item @kbd{C-a @{} @itemx @kbd{C-a @}} (history)@* Copy and paste a previous (command) line. @xref{History}. @item @kbd{C-a >} (writebuf)@* Write the paste buffer out to the screen-exchange file. @xref{Screen Exchange}. @item @kbd{C-a <} (readbuf)@* Read the screen-exchange file into the paste buffer. @xref{Screen Exchange}. @item @kbd{C-a =} (removebuf)@* Delete the screen-exchange file. @xref{Screen Exchange}. @item @kbd{C-a _} (silence)@* Start/stop monitoring the current window for inactivity. @xref{Monitor}. @item @kbd{C-a |} (split -v)@* Split the current region vertically into two new ones. @xref{Regions}. @item @kbd{C-a ,} (license)@* Show the copyright page. @xref{License}. @item @kbd{C-a *} (displays)@* Show the listing of attached displays. @xref{Displays}. @end table @node Command Summary, , Default Key Bindings, Commands @section Command Summary @cindex command summary @table @code @item acladd @var{usernames} Allow other users in this session. @xref{Multiuser Session}. @item aclchg @var{usernames permbits list} Change a user's permissions. @xref{Multiuser Session}. @item acldel @var{username} Disallow other user in this session. @xref{Multiuser Session}. @item aclgrp @var{usrname} [@var{groupname}] Inherit permissions granted to a group leader. @xref{Multiuser Session}. @item aclumask [@var{users}]+/-@var{bits} ... Predefine access to new windows. @xref{Umask}. @item activity @var{message} Set the activity notification message. @xref{Monitor}. @item addacl @var{usernames} Synonym to @code{acladd}. @xref{Multiuser Session}. @item allpartial @var{state} Set all windows to partial refresh. @xref{Redisplay}. @item altscreen @var{state} Enables support for the "alternate screen" terminal capability. @xref{Redisplay}. @item at [@var{ident}][@kbd{#}@var{|}@kbd{*}@var{|}@kbd{%}] @var{command} [@var{args}] Execute a command at other displays or windows. @xref{At}. @item attrcolor @var{attrib} [@var{attribute/color-modifier}] Map attributes to colors. @xref{Attrcolor}. @item autodetach @var{state} Automatically detach the session on SIGHUP. @xref{Detach}. @item autonuke @var{state} Enable a clear screen to discard unwritten output. @xref{Autonuke}. @item backtick @var{id} @var{lifespan} @var{autorefresh} @var{command} [@var{args}] Define a command for the backtick string escape. @xref{Backtick}. @item bce [@var{state}] Change background color erase. @xref{Character Processing}. @item bell_msg [@var{message}] Set the bell notification message. @xref{Bell}. @item bind [-c @var{class}] @var{key} [@var{command} [@var{args}]] Bind a command to a key. @xref{Bind}. @item bindkey [@var{opts}] [@var{string} [@var{cmd args}]] Bind a string to a series of keystrokes. @xref{Bindkey}. @item blanker Blank the screen. @xref{Screen Saver}. @item blankerprg Define a blanker program. @xref{Screen Saver}. @item break [@var{duration}] Send a break signal to the current window. @xref{Break}. @item breaktype [@var{tcsendbreak} | @var{TCSBRK} | @var{TIOCSBRK}] Specify how to generate breaks. @xref{Break}. @item bufferfile [@var{exchange-file}] Select a file for screen-exchange. @xref{Screen Exchange}. @item bumpleft Swaps window with previous one on window list. @xref{Bumpleft}. @item bumpright Swaps window with previous one on window list. @xref{Bumpright}. @item c1 [@var{state}] Change c1 code processing. @xref{Character Processing}. @item caption @var{mode} [@var{string}] Change caption mode and string. @xref{Regions}. @item chacl @var{usernames permbits list} Synonym to @code{aclchg}. @xref{Multiuser Session}. @item charset @var{set} Change character set slot designation. @xref{Character Processing}. @item chdir [@var{directory}] Change the current directory for future windows. @xref{Chdir}. @item cjkwidth Treat ambiguous width characters as full/half width. @xref{Character Processing}. @item clear Clear the window screen. @xref{Clear}. @item colon Enter a @code{screen} command. @xref{Colon}. @item collapse Reorders window on window list, removing number gaps between them. @xref{Collapse}. @item command [-c @var{class}] Simulate the screen escape key. @xref{Command Character}. @item compacthist [@var{state}] Selects compaction of trailing empty lines. @xref{Scrollback}. @item console [@var{state}] Grab or ungrab console output. @xref{Console}. @item copy Enter copy mode. @xref{Copy}. @item copy_reg [@var{key}] Removed. Use @code{paste} instead. @xref{Registers}. @item crlf @var{state} Select line break behavior for copying. @xref{Line Termination}. @item debug @var{state} Suppress/allow debugging output. @xref{Debug}. @item defautonuke @var{state} Select default autonuke behavior. @xref{Autonuke}. @item defbce @var{state} Select background color erase. @xref{Character Processing}. @item defbreaktype [@var{tcsendbreak} | @var{TCSBRK} | @var{TIOCSBRK}] Specify the default for generating breaks. @xref{Break}. @item defc1 @var{state} Select default c1 processing behavior. @xref{Character Processing}. @item defcharset [@var{set}] Change defaul character set slot designation. @xref{Character Processing}. @item defencoding @var{enc} Select default window encoding. @xref{Character Processing}. @item defescape @var{xy} Set the default command and @code{meta} characters. @xref{Command Character}. @item defflow @var{fstate} Select default flow control behavior. @xref{Flow}. @item defgr @var{state} Select default GR processing behavior. @xref{Character Processing}. @item defhstatus [@var{status}] Select default window hardstatus line. @xref{Hardstatus}. @item deflog @var{state} Select default window logging behavior. @xref{Log}. @item deflogin @var{state} Select default utmp logging behavior. @xref{Login}. @item defmode @var{mode} Select default file mode for ptys. @xref{Mode}. @item defmonitor @var{state} Select default activity monitoring behavior. @xref{Monitor}. @item defmousetrack @var{on}|@var{off} Select the default mouse tracking behavior. @xref{Mousetrack}. @item defnonblock @var{state}|@var{numsecs} Select default nonblock mode. @xref{Nonblock}. @item defobuflimit @var{limit} Select default output buffer limit. @xref{Obuflimit}. @item defscrollback @var{num} Set default lines of scrollback. @xref{Scrollback}. @item defshell @var{command} Set the default program for new windows. @xref{Shell}. @item defsilence @var{state} Select default idle monitoring behavior. @xref{Monitor}. @item defslowpaste @var{msec} Select the default inter-character timeout when pasting. @xref{Paste}. @item defutf8 @var{state} Select default character encoding. @xref{Character Processing}. @item defwrap @var{state} Set default line-wrapping behavior. @xref{Wrap}. @item defwritelock @var{on|off|auto} Set default writelock behavior. @xref{Multiuser Session}. @item zombie_timeout [@var{seconds}] Try to reconnect dead windows after timeout. @xref{Zombie}. @item detach [-h] Disconnect @code{screen} from the terminal. @xref{Detach}. @item digraph [@var{preset} [@var{unicode-value}]] Enter a digraph sequence. @xref{Digraph}. @item dinfo Display terminal information. @xref{Info}. @item displays List currently active user interfaces. @xref{Displays}. @item dumptermcap Write the window's termcap entry to a file. @xref{Dump Termcap}. @item echo [-n] @var{message} Display a message on startup. @xref{Startup}. @item encoding @var{enc} [@var{denc}] Set the encoding of a window. @xref{Character Processing}. @item escape @var{xy} Set the command and @code{meta} characters. @xref{Command Character}. @item eval @var{command1} [@var{command2} ...] Parse and execute each argument. @xref{Eval}. @item exec [[@var{fdpat}] @var{command} [@var{args} ...]] Run a subprocess (filter). @xref{Exec}. @item fit Change window size to current display size. @xref{Window Size}. @item flow [@var{fstate}] Set flow control behavior. @xref{Flow}. @item focus [@code{next}|@code{prev}|@code{up}|@code{down}|@code{left}|@code{right}|@code{top}|@code{bottom}] Move focus to next region. @xref{Regions}. @item focusminsize Force the current region to a certain size. @xref{Focusminsize}. @item gr [@var{state}] Change GR charset processing. @xref{Character Processing}. @item group [@var{grouptitle}] Change or show the group the current window belongs to. @xref{Window Groups}. @item hardcopy [-h] [@var{file}] Write out the contents of the current window. @xref{Hardcopy}. @item hardcopy_append @var{state} Append to hardcopy files. @xref{Hardcopy}. @item hardcopydir @var{directory} Place, where to dump hardcopy files. @xref{Hardcopy}. @item hardstatus [@var{state}] Use the hardware status line. @xref{Hardware Status Line}. @item height [@var{lines} [@var{cols}]] Set display height. @xref{Window Size}. @item help [-c @var{class}] Display current key bindings. @xref{Help}. @item history Find previous command beginning @dots{}. @xref{History}. @item hstatus @var{status} Change the window's hardstatus line. @xref{Hardstatus}. @item idle [@var{timeout} [@var{cmd} @var{args}]] Define a screen saver command. @xref{Screen Saver}. @item ignorecase [on|off] Ignore character case in searches. @xref{Searching}. @item info Display window settings. @xref{Info}. @item ins_reg [@var{key}] Removed, use @code{paste} instead. @xref{Registers}. @item kill Destroy the current window. @xref{Kill}. @item lastmsg Redisplay the last message. @xref{Last Message}. @item layout new [@var{title}] Create a layout. @xref{Layout}. @item layout remove [@var{n}|@var{title}] Delete a layout. @xref{Layout}. @item layout next Select the next layout. @xref{Layout}. @item layout prev Select the previous layout. @xref{Layout}. @item layout select [@var{n}|@var{title}] Jump to a layout. @xref{Layout}. @item layout show List the available layouts. @xref{Layout}. @item layout title [@var{title}] Show or set the title of a layout. @xref{Layout}. @item layout number [@var{n}] Show or set the number of a layout. @xref{Layout}. @item layout attach [@var{title}|:last] Show or set which layout to reattach to. @xref{Layout}. @item layout save [@var{n}|@var{title}] Remember the organization of a layout. @xref{Layout}. @item layout autosave [@var{on}|@var{off}] Show or set the status of layout saving. @xref{Layout}. @item layout dump [filename] Save the layout arrangement to a file. @xref{Layout}. @item license Display licensing information. @xref{Startup}. @item lockscreen Lock the controlling terminal. @xref{Lock}. @item log [@var{state}] Log all output in the current window. @xref{Log}. @item logfile @var{filename} Place where to collect logfiles. @xref{Log}. @item login [@var{state}] Log the window in @file{/etc/utmp}. @xref{Login}. @item logtstamp [@var{state}] Configure logfile time-stamps. @xref{Log}. @item mapdefault Use only the default mapping table for the next keystroke. @xref{Bindkey Control}. @item mapnotnext Don't try to do keymapping on the next keystroke. @xref{Bindkey Control}. @item maptimeout @var{n} Set the inter-character timeout used for keymapping. @xref{Bindkey Control}. @item markkeys @var{string} Rebind keys in copy mode. @xref{Copy Mode Keys}. @item maxwin @var{n} Set the maximum window number. @xref{Maxwin}. @item meta Insert the command character. @xref{Command Character}. @item monitor [@var{state}] Monitor activity in window. @xref{Monitor}. @item mousetrack [@var{on}|@var{off}] Enable selecting split regions with mouse clicks. @xref{Mousetrack}. @item msgminwait @var{sec} Set minimum message wait. @xref{Message Wait}. @item msgwait @var{sec} Set default message wait. @xref{Message Wait}. @item multiuser @var{state} Go into single or multi user mode. @xref{Multiuser Session}. @item nethack @var{state} Use @code{nethack}-like error messages. @xref{Nethack}. @item next Switch to the next window. @xref{Selecting}. @item nonblock [@var{state}|@var{numsecs}] Disable flow control to the current display. @xref{Nonblock}.|@var{numsecs}] @item number [@var{n}] Change/display the current window's number. @xref{Number}. @item obuflimit [@var{limit}] Select output buffer limit. @xref{Obuflimit}. @item only Kill all other regions. @xref{Regions}. @item other Switch to the window you were in last. @xref{Selecting}. @item partial @var{state} Set window to partial refresh. @xref{Redisplay}. @item password [@var{crypted_pw}] Set reattach password. @xref{Detach}. @item paste [@var{src_regs} [@var{dest_reg}]] Paste contents of paste buffer or registers somewhere. @xref{Paste}. @item pastefont [@var{state}] Include font information in the paste buffer. @xref{Paste}. @item pow_break Close and Reopen the window's terminal. @xref{Break}. @item pow_detach Detach and hang up. @xref{Power Detach}. @item pow_detach_msg [@var{message}] Set message displayed on @code{pow_detach}. @xref{Power Detach}. @item prev Switch to the previous window. @xref{Selecting}. @item printcmd [@var{cmd}] Set a command for VT100 printer port emulation. @xref{Printcmd}. @item process [@var{key}] Treat a register as input to @code{screen}. @xref{Registers}. @item quit Kill all windows and exit. @xref{Quit}. @item readbuf [-e @var{encoding}] [@var{filename}] Read the paste buffer from the screen-exchange file. @xref{Screen Exchange}. @item readreg [-e @var{encoding}] [@var{reg} [@var{file}]] Load a register from paste buffer or file. @xref{Registers}. @item redisplay Redisplay the current window. @xref{Redisplay}. @item register [-e @var{encoding}] @var{key} @var{string} Store a string to a register. @xref{Registers}. @item remove Kill current region. @xref{Regions}. @item removebuf Delete the screen-exchange file. @xref{Screen Exchange}. @item rendition bell | monitor | silence | so @var{attr} [@var{color}] Change text attributes in caption for flagged windows. @xref{Rendition}. @item reset Reset the terminal settings for the window. @xref{Reset}. @item resize [(+/-)lines] Grow or shrink a region. @xref{Resize}. @item screen [@var{opts}] [@var{n}] [@var{cmd} [@var{args}] | //group] Create a new window. @xref{Screen Command}. @item scrollback @var{num} Set size of scrollback buffer. @xref{Scrollback}. @item select [@var{n}|-|.] Switch to a specified window. @xref{Selecting}. @item sessionname [@var{name}] Name this session. @xref{Session Name}. @item setenv [@var{var} [@var{string}]] Set an environment variable for new windows. @xref{Setenv}. @item setsid @var{state} Control process group creation for windows. @xref{Setsid}. @item shell @var{command} Set the default program for new windows. @xref{Shell}. @item shelltitle @var{title} Set the default name for new windows. @xref{Shell}. @item silence [@var{state}|@var{seconds}] Monitor a window for inactivity. @xref{Monitor}. @item silencewait @var{seconds} Default timeout to trigger an inactivity notify. @xref{Monitor}. @item sleep @var{num} Pause during startup. @xref{Startup}. @item slowpaste @var{msec} Slow down pasting in windows. @xref{Paste}. @item source @var{file} Run commands from a file. @xref{Source}. @item sorendition [@var{attr} [@var{color}]] Deprecated. Use @code{rendition so} instead. @xref{Rendition}. @item split Split region into two parts. @xref{Regions}. @item startup_message @var{state} Display copyright notice on startup. @xref{Startup}. @item stuff [@var{string}] Stuff a string in the input buffer of a window. @xref{Paste}. @item su [@var{username} [@var{password} [@var{password2}]]] Identify a user. @xref{Multiuser Session}. @item suspend Put session in background. @xref{Suspend}. @item term @var{term} Set @code{$TERM} for new windows. @xref{Term}. @item termcap @var{term} @var{terminal-tweaks} [@var{window-tweaks}] Tweak termcap entries for best performance. @xref{Termcap Syntax}. @item terminfo @var{term} @var{terminal-tweaks} [@var{window-tweaks}] Ditto, for terminfo systems. @xref{Termcap Syntax}. @item termcapinfo @var{term} @var{terminal-tweaks} [@var{window-tweaks}] Ditto, for both systems. @xref{Termcap Syntax}. @item time [@var{string}] Display time and load average. @xref{Time}. @item title [@var{windowtitle}] Set the name of the current window. @xref{Title Command}. @item umask [@var{users}]+/-@var{bits} ... Synonym to @code{aclumask}. @xref{Umask}. @item unbindall Unset all keybindings. @xref{Bind}. @item unsetenv @var{var} Unset environment variable for new windows. @xref{Setenv}. @item utf8 [@var{state} [@var{dstate}]] Select character encoding of the current window. @xref{Character Processing}. @item vbell [@var{state}] Use visual bell. @xref{Bell}. @item vbell_msg [@var{message}] Set vbell message. @xref{Bell}. @item vbellwait @var{sec} Set delay for vbell message. @xref{Bell}. @item version Display @code{screen} version. @xref{Version}. @item wall @var{message} Write a message to all displays. @xref{Multiuser Session}. @item width [@var{cols} [@var{lines}]] Set the width of the window. @xref{Window Size}. @item windowlist [[-b] [-m] [-g]] | string [@var{string}] | title [@var{title}] Present a list of all windows for selection. @xref{Windowlist}. @item windows List active windows. @xref{Windows}. @item wrap [ on | off ] Control line-wrap behavior. @xref{Wrap}. @item writebuf [-e @var{encoding}] [@var{filename}] Write paste buffer to screen-exchange file. @xref{Screen Exchange}. @item writelock @var{on}|@var{off}|@var{auto} Grant exclusive write permission. @xref{Multiuser Session}. @item xoff Send an XOFF character. @xref{XON/XOFF}. @item xon Send an XON character. @xref{XON/XOFF}. @item zmodem [off|auto|catch|pass] Define how screen treats zmodem requests. @xref{Zmodem}. @item zombie [@var{keys} [onerror] ] Keep dead windows. @xref{Zombie}. @end table @node New Window, Selecting, Commands, Top @chapter New Window This section describes the commands for creating a new window for running programs. When a new window is created, the first available number is assigned to it. The number of windows is set by the MAXWIN configuration parameter (which defaults to 100), but it can be changed by using @code{maxwin} command. @menu * Chdir:: Change the working directory for new windows. * Screen Command:: Create a new window. * Setenv:: Set environment variables for new windows. * Shell:: Parameters for shell windows. * Term:: Set the terminal type for new windows. * Window Types:: Creating different types of windows. * Window Groups:: Grouping windows together @end menu @node Chdir, Screen Command, , New Window @section Chdir @deffn Command chdir [directory] (none)@* Change the current directory of @code{screen} to the specified directory or, if called without an argument, to your home directory (the value of the environment variable @code{$HOME}). All windows that are created by means of the @code{screen} command from within @file{.screenrc} or by means of @kbd{C-a : screen @dots{}} or @kbd{C-a c} use this as their default directory. Without a @code{chdir} command, this would be the directory from which @code{screen} was invoked. Hardcopy and log files are always written to the @emph{window's} default directory, @emph{not} the current directory of the process running in the window. You can use this command multiple times in your @file{.screenrc} to start various windows in different default directories, but the last @code{chdir} value will affect all the windows you create interactively. @end deffn @node Screen Command, Setenv, Chdir, New Window @section Screen Command @kindex c @kindex C-c @deffn Command screen [opts] [n] [cmd [args] @var{| //group}] (@kbd{C-a c}, @kbd{C-a C-c})@* Establish a new window. The flow-control options (@samp{-f}, @samp{-fn} and @samp{-fa}), title option (@samp{-t}), login options (@samp{-l} and @samp{-ln}) , terminal type option (@samp{-T @var{term}}), the all-capability-flag (@samp{-a}) and scrollback option (@samp{-h @var{num}}) may be specified with each command. The option (@samp{-M}) turns monitoring on for this window. The option (@samp{-L}) turns output logging on for this window. If an optional number @var{n} in the range 0@dots{}MAXWIN-1 is given, the window number @var{n} is assigned to the newly created window (or, if this number is already in-use, the next available number). If a command is specified after @code{screen}, this command (with the given arguments) is started in the window; otherwise, a shell is created. If @samp{//group} is supplied, a container-type window is created in which other windows may be created inside it. @xref{Window Groups}. Screen has built in some functionality of @samp{cu} and @samp{telnet}. @xref{Window Types}. @end deffn Thus, if your @file{.screenrc} contains the lines @example # example for .screenrc: screen 1 screen -fn -t foobar 2 -L telnet foobar @end example @noindent @code{screen} creates a shell window (in window #1) and a window with a TELNET connection to the machine foobar (with no flow-control using the title @samp{foobar} in window #2) and will write a logfile @samp{screenlog.2} of the telnet session. If you do not include any @code{screen} commands in your @file{.screenrc} file, then @code{screen} defaults to creating a single shell window, number zero. When the initialization is completed, @code{screen} switches to the last window specified in your .screenrc file or, if none, it opens default window #0. @node Setenv, Shell, Screen Command, New Window @section Setenv @deffn Command setenv var string (none)@* Set the environment variable @var{var} to value @var{string}. If only @var{var} is specified, the user will be prompted to enter a value. If no parameters are specified, the user will be prompted for both variable and value. The environment is inherited by all subsequently forked shells. @end deffn @deffn Command unsetenv var (none)@* Unset an environment variable. @end deffn @node Shell, Term, Setenv, New Window @section Shell @deffn Command shell command @deffnx Command defshell command (none)@* Set the command to be used to create a new shell. This overrides the value of the environment variable @code{$SHELL}. This is useful if you'd like to run a tty-enhancer which is expecting to execute the program specified in @code{$SHELL}. If the command begins with a @samp{-} character, the shell will be started as a login-shell. Typical shells do only minimal initialization when not started as a login-shell. E.g. Bash will not read your @file{~/.bash_profile} unless it is a login-shell. @code{defshell} is currently a synonym to the @code{shell} .screenrc command. @end deffn @deffn Command shelltitle title (none)@* Set the title for all shells created during startup or by the C-a C-c command. @xref{Naming Windows}, for details about what titles are. @end deffn @node Term, Window Types , Shell, New Window @section Term @deffn Command term term (none)@* In each window @code{screen} opens, it sets the @code{$TERM} variable to @code{screen} by default, unless no description for @code{screen} is installed in the local termcap or terminfo data base. In that case it pretends that the terminal emulator is @samp{vt100}. This won't do much harm, as @code{screen} is VT100/ANSI compatible. The use of the @code{term} command is discouraged for non-default purpose. That is, one may want to specify special @code{$TERM} settings (e.g. vt100) for the next @code{screen rlogin othermachine} command. Use the command @code{screen -T vt100 rlogin othermachine} rather than setting and resetting the default. @end deffn @node Window Types, Window Groups, Term, New Window @section Window Types @cindex window types Screen provides three different window types. New windows are created with @code{screen}'s @samp{screen} command (@pxref{Screen Command}). The first parameter to the @samp{screen} command defines which type of window is created. The different window types are all special cases of the normal type. They have been added in order to allow @code{screen} to be used efficiently as a console with 100 or more windows. @itemize @bullet @item The normal window contains a shell (default, if no parameter is given) or any other system command that could be executed from a shell. (e.g. @samp{slogin}, etc...). @item If a tty (character special device) name (e.g. @samp{/dev/ttya}) is specified as the first parameter, then the window is directly connected to this device. This window type is similar to @samp{screen cu -l /dev/ttya}. Read and write access is required on the device node, an exclusive open is attempted on the node to mark the connection line as busy. An optional parameter is allowed consisting of a comma separated list of flags in the notation used by @samp{stty(1)}: @table @code @item Usually 300, 1200, 9600 or 19200. This affects transmission as well as receive speed. @item cs8 or cs7 Specify the transmission of eight (or seven) bits per byte. @item cstopb or -cstopb Specify two (or one) stop bits per character @item parenb or -parenb Generate parity bit in output and expect parity bit in input @item parodd or -parodd Set odd (or even) parity @item ixon or -ixon Enables (or disables) software flow-control (CTRL-S/CTRL-Q) for sending data. @item ixoff or -ixoff Enables (or disables) software flow-control for receiving data. @item istrip or -istrip Clear (or keep) the eight bit in each received byte. @end table You may want to specify as many of these options as applicable. Unspecified options cause the terminal driver to make up the parameter values of the connection. These values are system-dependent and may be in defaults or values saved from a previous connection. For tty windows, the @code{info} command shows some of the modem control lines in the status line. These may include @samp{RTS}, @samp{CTS}, @samp{DTR}, @samp{CD} and more. This depends rather on on the available @code{ioctl()}'s and system header files than on the physical capabilities of the serial board. The name of a logical low (inactive) signal is preceded by an exclamation mark (@samp{!}), otherwise the signal is logical high (active). Unsupported but shown signals are usually shown low. When the @code{CLOCAL} status bit is true, the whole set of modem signals is placed inside curly braces (@samp{@{} and @samp{@}}). When the @code{CRTSCTS} or @code{TIOCSOFTCAR} bit is true, the signals @samp{CTS} or @samp{CD} are shown in parenthesis, respectively. For tty windows, the command @code{break} causes the Data transmission line (TxD) to go low for a specified period of time. This is expected to be interpreted as break signal on the other side. No data is sent and no modem control line is changed when a @code{break} is issued. @item If the first parameter is @code{//telnet}, the second parameter is expected to be a host name, and an optional third parameter may specify a TCP port number (default decimal 23). Screen will connect to a server listening on the remote host and use the telnet protocol to communicate with that server. For telnet windows, the command @code{info} shows details about the connection in square brackets (@samp{[} and @samp{]}) at the end of the status line. @table @code @item b BINARY. The connection is in binary mode. @item e ECHO. Local echo is disabled. @item c SGA. The connection is in `character mode' (default: `line mode'). @item t TTYPE. The terminal type has been requested by the remote host. Screen sends the name @code{screen} unless instructed otherwise (see also the command @samp{term}). @item w NAWS. The remote site is notified about window size changes. @item f LFLOW. The remote host will send flow control information. (Ignored at the moment.) @end table Additional flags for debugging are @samp{x}, @samp{t} and @samp{n} (XDISPLOC, TSPEED and NEWENV). For telnet windows, the command @code{break} sends the telnet code @code{IAC BREAK} (decimal 243) to the remote host. @end itemize @node Window Groups, , Window Types, New Window @section Window Groups @cindex window groups Screen provides a method for grouping windows together. Windows can be organized in a hierarchical fashion, resembling a tree structure. New screens are created using the @code{screen} command while new groups are created using @code{screen //group}. @xref{Screen Command}. Once a new group is created, it will act as a container for windows and even other groups. When a group is selected, you will see the output of the @code{windowlist} command, allowing you to select a window inside. If there are no windows inside a group, use the @code{screen} command to create one. Once inside a group, using the commands @code{next} and @code{prev} will switch between windows only in that group. Using the @code{windowlist} command will give you the opportunity to leave the group you are in. @xref{Windowlist}. @deffn Command group [grouptitle] (none)@* Change or show the group the current window belongs to. Windows can be moved around between different groups by specifying the name of the destination group. Without specifying a group, the title of the current group is displayed. @end deffn Using groups in combination with layouts will help create a multi-desktop experience. One group can be assigned for each layout made. Windows can be made, split, and organized within each group as desired. Afterwhich, switching between groups can be as easy as switching layouts. @node Selecting, Session Management, New Window, Top @chapter Selecting a Window This section describes the commands for switching between windows in an @code{screen} session. The windows are numbered from 0 to 9, and are created in that order by default (@pxref{New Window}). @menu * Next and Previous:: Forward or back one window. * Other Window:: Switch back and forth between two windows. * Select:: Switch to a window (and to one after @code{kill}). * Windowlist:: Present a list of all windows for selection. @end menu @node Next and Previous, Other Window, , Selecting @section Moving Back and Forth @kindex SPC @kindex n @kindex C-n @deffn Command next (@kbd{C-a @key{SPC}}, @kbd{C-a n}, @kbd{C-a C-n})@* Switch to the next window. This command can be used repeatedly to cycle through the list of windows. (On some terminals, C-@key{SPC} generates a NUL character, so you must release the control key before pressing space.) @end deffn @kindex p @kindex C-p @kindex C-h @kindex Backspace @deffn Command prev (@kbd{C-a p}, @kbd{C-a C-p}, @kbd{C-a C-h}, @kbd{C-a @key{Backspace}})@* Switch to the previous window (the opposite of @kbd{C-a n}). @end deffn @node Other Window, Select, Next and Previous, Selecting @section Other Window @kindex C-a @deffn Command other (@kbd{C-a C-a})@* Switch to the last window displayed. Note that this command defaults to the command character typed twice, unless overridden. For instance, if you use the option @samp{-e]x}, this command becomes @kbd{]]} (@pxref{Command Character}). @end deffn @node Select, Windowlist, Other Window, Selecting @section Select @kindex 0@dots{}9 @kindex ' @deffn Command select [n @var{|-|.}] (@kbd{C-a @var{n}}, @kbd{C-a '})@* Switch to the window with the number @var{n}. If no window number is specified, you get prompted for an identifier. This can be a window name (title) or a number. When a new window is established, the lowest available number is assigned to this window. Thus, the first window can be activated by @code{select 0}; there can be no more than 10 windows present simultaneously (unless screen is compiled with a higher MAXWIN setting). There are two special arguments, @code{select -} switches to the internal blank window and @code{select .} switches to the current window. The latter is useful if used with screen's @code{-X} option. @end deffn @node Windowlist, , Select, Selecting @section Windowlist @kindex " @deffn Command windowlist [-b] [-m] [-g] @deffnx Command windowlist string [@var{string}] @deffnx Command windowlist title [@var{title}] (@kbd{C-a "})@* Display all windows in a table for visual window selection. If screen was in a window group, screen will back out of the group and then display the windows in that group. If the @code{-b} option is given, screen will switch to the blank window before presenting the list, so that the current window is also selectable. The @code{-m} option changes the order of the windows, instead of sorting by window numbers screen uses its internal most-recently-used list. The @code{-g} option will show the windows inside any groups in that level and downwards. The following keys are used to navigate in @code{windowlist}: @noindent @kbd{k}, @kbd{C-p}, or @kbd{up} Move up one line. @noindent @kbd{j}, @kbd{C-n}, or @kbd{down} Move down one line. @noindent @kbd{C-g} or @kbd{escape} Exit windowlist. @noindent @kbd{C-a} or @kbd{home} Move to the first line. @noindent @kbd{C-e} or @kbd{end} Move to the last line. @noindent @kbd{C-u} or @kbd{C-d} Move one half page up or down. @noindent @kbd{C-b} or @kbd{C-f} Move one full page up or down. @indent @kbd{0..9} Using the number keys, move to the selected line. @noindent @kbd{mouseclick} Move to the selected line. Available when @code{mousetrack} is set to @code{on}. @noindent @kbd{/} Search. @noindent @kbd{n} Repeat search in the forward direction. @noindent @kbd{N} Repeat search in the backward direction. @noindent @kbd{m} Toggle MRU. @noindent @kbd{g} Toggle group nesting. @noindent @kbd{a} All window view. @noindent @kbd{C-h} or @kbd{backspace} Back out the group. @noindent @kbd{,} Switch numbers with the previous window. @noindent @kbd{.} Switch numbers with the next window. @noindent @kbd{K} Kill that window. @noindent @kbd{space} or @kbd{enter} Select that window. The table format can be changed with the string and title option, the title is displayed as table heading, while the lines are made by using the string setting. The default setting is @samp{Num Name%=Flags} for the title and @samp{%3n %t%=%f} for the lines. See the string escapes chapter (@pxref{String Escapes}) for more codes (e.g. color settings). @code{Windowlist} needs a region size of at least 10 characters wide and 6 characters high in order to display. @end deffn @node Session Management, Regions, Selecting, Top @chapter Session Management Commands Perhaps the most useful feature of @code{screen} is the way it allows the user to move a session between terminals, by detaching and reattaching. This also makes life easier for modem users who have to deal with unexpected loss of carrier. @menu * Detach:: Disconnect @code{screen} from your terminal. * Power Detach:: Detach and log out. * Lock:: Lock your terminal temporarily. * Multiuser Session:: Changing number of allowed users. * Session Name:: Rename your session for later reattachment. * Suspend:: Suspend your session. * Quit:: Terminate your session. @end menu @node Detach, Power Detach, , Session Management @section Detach @deffn Command autodetach state (none)@* Sets whether @code{screen} will automatically detach upon hangup, which saves all your running programs until they are resumed with a @code{screen -r} command. When turned off, a hangup signal will terminate @code{screen} and all the processes it contains. Autodetach is on by default. @end deffn @kindex d @kindex C-d @deffn Command detach (@kbd{C-a d}, @kbd{C-a C-d})@* Detach the @code{screen} session (disconnect it from the terminal and put it into the background). A detached @code{screen} can be resumed by invoking @code{screen} with the @code{-r} option (@pxref{Invoking Screen}). The @code{-h} option tells screen to immediately close the connection to the terminal (@samp{hangup}). @end deffn @deffn Command password [crypted_pw] (none)@* Present a crypted password in your @file{.screenrc} file and screen will ask for it, whenever someone attempts to resume a detached session. This is useful, if you have privileged programs running under @code{screen} and you want to protect your session from reattach attempts by users that managed to assume your uid. (I.e. any superuser.) If no crypted password is specified, screen prompts twice a password and places its encryption in the paste buffer. Default is `none', which disables password checking. @end deffn @node Power Detach, Lock, Detach, Session Management @section Power Detach @kindex D @deffn Command pow_detach (@kbd{C-a D D})@* Mainly the same as @code{detach}, but also sends a HANGUP signal to the parent process of @code{screen}.@* @emph{Caution}: This will result in a logout if @code{screen} was started from your login-shell. @end deffn @deffn Command pow_detach_msg [message] (none)@* The @var{message} specified here is output whenever a power detach is performed. It may be used as a replacement for a logout message or to reset baud rate, etc. Without a parameter, the current message is shown. @end deffn @node Lock, Multiuser Session, Power Detach, Session Management @section Lock @kindex x @kindex C-x @deffn Command lockscreen (@kbd{C-a x}, @kbd{C-a C-x})@* Call a screenlock program. Screen does not accept any command keys until this program terminates. Meanwhile processes in the windows may continue, as the windows are in the detached state. The screenlock program may be changed through the environment variable @code{$LOCKPRG} (which must be set in the shell from which @code{screen} is started) and is executed with the user's uid and gid. Warning: When you leave other shells unlocked and have no password set on @code{screen}, the lock is void: One could easily re-attach from an unlocked shell. This feature should rather be called @code{lockterminal}. @end deffn @node Multiuser Session, Session Name, Lock, Session Management @section Multiuser Session @cindex multiuser session These commands allow other users to gain access to one single @code{screen} session. When attaching to a multiuser @code{screen} the sessionname is specified as @code{username/sessionname} to the @code{-S} command line option. @code{Screen} must be compiled with multiuser support to enable features described here. @menu * Multiuser:: Enable / Disable multiuser mode. * Acladd:: Enable a specific user. * Aclchg:: Change a users permissions. * Acldel:: Disable a specific user. * Aclgrp:: Grant a user permissions to other users. * Displays:: List all active users at their displays. * Umask:: Predefine access to new windows. * Wall:: Write a message to all users. * Writelock:: Grant exclusive window access. * Su:: Substitute user. @end menu @node Multiuser, Acladd, , Multiuser Session @subsection Multiuser @deffn Command multiuser @var{state} (none)@* Switch between single-user and multi-user mode. Standard screen operation is single-user. In multi-user mode the commands @code{acladd}, @code{aclchg} and @code{acldel} can be used to enable (and disable) other users accessing this @code{screen}. @end deffn @node Acladd, Aclchg, Multiuser, Multiuser Session @subsection Acladd @deffn Command acladd @var{usernames} @deffnx Command addacl @var{usernames} (none)@* Enable users to fully access this screen session. @var{Usernames} can be one user or a comma separated list of users. This command enables to attach to the @code{screen} session and performs the equivalent of @code{aclchg @var{usernames} +rwx "#?"}. To add a user with restricted access, use the @code{aclchg} command below. @code{Addacl} is a synonym to @code{acladd}. Multi-user mode only. @end deffn @node Aclchg, Acldel, Acladd, Multiuser Session @subsection Aclchg @deffn Command aclchg @var{usernames permbits list} @deffnx Command chacl @var{usernames permbits list} (none)@* Change permissions for a comma separated list of users. Permission bits are represented as @samp{r}, @samp{w} and @samp{x}. Prefixing @samp{+} grants the permission, @samp{-} removes it. The third parameter is a comma separated list of commands or windows (specified either by number or title). The special list @samp{#} refers to all windows, @samp{?} to all commands. If @var{usernames} consists of a single @samp{*}, all known users are affected. A command can be executed when the user has the @samp{x} bit for it. The user can type input to a window when he has its @samp{w} bit set and no other user obtains a writelock for this window. Other bits are currently ignored. To withdraw the writelock from another user in e.g. window 2: @samp{aclchg @var{username} -w+w 2}. To allow read-only access to the session: @samp{aclchg @var{username} -w "#"}. As soon as a user's name is known to screen, he can attach to the session and (per default) has full permissions for all command and windows. Execution permission for the acl commands, @code{at} and others should also be removed or the user may be able to regain write permission. @code{Chacl} is a synonym to @code{aclchg}. Multi-user mode only. @end deffn @node Acldel, Aclgrp, Aclchg, Multiuser Session @subsection Acldel @deffn Command acldel @var{username} (none)@* Remove a user from screen's access control list. If currently attached, all the user's displays are detached from the session. He cannot attach again. Multi-user mode only. @end deffn @node Aclgrp, Displays, Acldel, Multiuser Session @subsection Aclgrp @deffn Command aclgrp @var{username} [@var{groupname}] (none)@* Creates groups of users that share common access rights. The name of the group is the username of the group leader. Each member of the group inherits the permissions that are granted to the group leader. That means, if a user fails an access check, another check is made for the group leader. A user is removed from all groups the special value @samp{none} is used for @var{groupname}. If the second parameter is omitted all groups the user is in are listed. @end deffn @node Displays, Umask, Aclgrp, Multiuser Session @subsection Displays @kindex * @deffn Command displays (@kbd{C-a *})@* Shows a tabular listing of all currently connected user front-ends (displays). This is most useful for multiuser sessions. The following keys can be used in @code{displays} list: @noindent @kbd{k}, @kbd{C-p}, or @kbd{up} Move up one line. @noindent @kbd{j}, @kbd{C-n}, or @kbd{down} Move down one line. @noindent @kbd{C-a} or @kbd{home} Move to the first line. @noindent @kbd{C-e} or @kbd{end} Move to the last line. @noindent @kbd{C-u} or @kbd{C-d} Move one half page up or down. @noindent @kbd{C-b} or @kbd{C-f} Move one full page up or down. @noindent @kbd{mouseclick} Move to the selected line. Available when @code{mousetrack} is set to @code{on}. @noindent @kbd{space} Refresh the list. @noindent @kbd{d} Detach the selected display. @noindent @kbd{D} Power detach the selected display. @noindent @kbd{C-g}, @kbd{enter}, or @kbd{escape} Exit the list. The following is an example of what @code{displays} could look like: @example xterm 80x42 jnweiger@@/dev/ttyp4 0(m11) &rWx facit 80x24 mlschroe@@/dev/ttyhf nb 11(tcsh) rwx xterm 80x42 jnhollma@@/dev/ttyp5 0(m11) &R.x (A) (B) (C) (D) (E) (F)(G) (H)(I) @end example The legend is as follows: @*(A) The terminal type known by @code{screen} for this display. @*(B) Displays geometry as width x height. @*(C) Username who is logged in at the display. @*(D) Device name of the display or the attached device @*(E) Display is in blocking or nonblocking mode. The available modes are "nb", "NB", "Z<", "Z>", and "BL". @*(F) Number of the window @*(G) Name/title of window @*(H) Whether the window is shared @*(I) Window permissions. Made up of three characters: @display (1st character) @samp{-} : no read @samp{r} : read @samp{R} : read only due to foreign wlock (2nd character) @samp{-} : no write @samp{.} : write suppressed by foreign wlock @samp{w} : write @samp{W} : own wlock (3rd character) @samp{-} : no execute @samp{x} : execute @end display @code{Displays} needs a region size of at least 10 characters wide and 5 characters high in order to display. @end deffn @node Umask, Wall, Displays, Multiuser Session @subsection aclumask @deffn Command aclumask [@var{users}]+/-@var{bits} ... @deffnx Command umask [@var{users}]+/-@var{bits} ... (none)@* This specifies the access other users have to windows that will be created by the caller of the command. @var{Users} may be no, one or a comma separated list of known usernames. If no users are specified, a list of all currently known users is assumed. @var{Bits} is any combination of access control bits allowed defined with the @code{aclchg} command. The special username @samp{?} predefines the access that not yet known users will be granted to any window initially. The special username @samp{??} predefines the access that not yet known users are granted to any command. Rights of the special username nobody cannot be changed (see the @code{su} command). @code{Umask} is a synonym to @code{aclumask}. @end deffn @node Wall, Writelock, Umask, Multiuser Session @subsection Wall @deffn Command wall @var{message} (none)@* Write a message to all displays. The message will appear in the terminal's status line. @end deffn @node Writelock, Su , Wall, Multiuser Session @subsection Writelock @deffn Command writelock @var{on|off|auto} (none)@* In addition to access control lists, not all users may be able to write to the same window at once. Per default, writelock is in @samp{auto} mode and grants exclusive input permission to the user who is the first to switch to the particular window. When he leaves the window, other users may obtain the writelock (automatically). The writelock of the current window is disabled by the command @code{writelock off}. If the user issues the command @code{writelock on} he keeps the exclusive write permission while switching to other windows. @end deffn @deffn Command defwritelock @var{on|off|auto} (none)@* Sets the default writelock behavior for new windows. Initially all windows will be created with no writelocks. @end deffn @node Su, , Writelock, Multiuser Session @subsection Su @deffn Command su [@var{username} [@var{password} [@var{password2}]]] (none)@* Substitute the user of a display. The command prompts for all parameters that are omitted. If passwords are specified as parameters, they have to be specified un-crypted. The first password is matched against the systems passwd database, the second password is matched against the @code{screen} password as set with the commands @code{acladd} or @code{password}. @code{Su} may be useful for the @code{screen} administrator to test multiuser setups. When the identification fails, the user has access to the commands available for user @samp{nobody}. These are @code{detach}, @code{license}, @code{version}, @code{help} and @code{displays}. @end deffn @node Session Name, Suspend, Multiuser Session, Session Management @section Session Name @deffn Command sessionname [@var{name}] (none)@* Rename the current session. Note that for @code{screen -list} the name shows up with the process-id prepended. If the argument @var{name} is omitted, the name of this session is displayed.@* @emph{Caution}: The @code{$STY} environment variable will still reflect the old name in pre-existing shells. This may result in confusion. Use of this command is generally discouraged. Use the @code{-S} command-line option if you want to name a new session.The default is constructed from the tty and host names. @end deffn @node Suspend, Quit, Session Name, Session Management @section Suspend @kindex z @kindex C-z @deffn Command suspend (@kbd{C-a z}, @kbd{C-a C-z})@* Suspend @code{screen}. The windows are in the detached state while @code{screen} is suspended. This feature relies on the parent shell being able to do job control. @end deffn @node Quit, , Suspend, Session Management @section Quit @kindex \ @deffn Command quit (@kbd{C-a \})@* Kill all windows and terminate @code{screen}. (@pxref{Key Binding}). @end deffn @node Regions, Window Settings, Session Management, Top @chapter Regions @cindex regions Screen has the ability to display more than one window on the user's display. This is done by splitting the screen in regions, which can contain different windows. @menu * Split:: Split a region into two * Focus:: Change to the next region * Only:: Delete all other regions * Remove:: Delete the current region * Resize:: Grow or shrink a region * Caption:: Control the window's caption * Fit:: Resize a window to fit the region * Focusminsize:: Force a minimum size on a current region * Layout:: Manage groups of regions @end menu @node Split, Focus, , Regions @section Split @kindex S @kindex | @deffn Command split [-v] (@kbd{C-a S}, @kbd{C-a |})@* Split the current region into two new ones. All regions on the display are resized to make room for the new region. The blank window is displayed in the new region. The default is to create a horizontal split, putting the new regions on the top and bottom of each other. Using @samp{-v} will create a vertical split, causing the new regions to appear side by side of each other. Use the @code{remove} or the @code{only} command to delete regions. Use @code{focus} to toggle between regions. When a region is split opposite of how it was previously split (that is, vertical then horizontal or horizontal then vertical), a new layer is created. The layer is used to group together the regions that are split the same. Normally, as a user, you should not see nor have to worry about layers, but they will affect how some commands (@code{focus} and @code{resize}) behave. With this current implementation of @code{screen}, scrolling data will appear much slower in a vertically split region than one that is not. This should be taken into consideration if you need to use system commands such as @code{cat} or @code{tail -f}. @end deffn @node Focus, Only, Split, Regions @section Focus @kindex TAB @deffn Command focus [ @code{next|prev|up|down|left|right|top|bottom} ] (@kbd{C-a @key{Tab}})@* Move the input focus to the next region. This is done in a cyclic way so that the top left region is selected after the bottom right one. If no option is given it defaults to @code{next}. The next region to be selected is determined by how the regions are layered. Normally, the next region in the same layer would be selected. However, if that next region contains one or more layers, the first region in the highest layer is selected first. If you are at the last region of the current layer, @code{next} will move the focus to the next region in the lower layer (if there is a lower layer). @code{Prev} cycles in the opposite order. @xref{Split} for more information about layers. The rest of the options (@code{up}, @code{down}, @code{left}, @code{right}, @code{top}, and @code{bottom}) are more indifferent to layers. The option @code{up} will move the focus upward to the region that is touching the upper left corner of the current region. @code{Down} will move downward to the region that is touching the lower left corner of the current region. The option @code{left} will move the focus leftward to the region that is touching the upper left corner of the current region, while @code{right} will move rightward to the region that is touching the upper right corner of the current region. Moving left from a left most region or moving right from a right most region will result in no action. The option @code{top} will move the focus to the very first region in the upper list corner of the screen, and @code{bottom} will move to the region in the bottom right corner of the screen. Moving up from a top most region or moving down from a bottom most region will result in no action. Useful bindings are (h, j, k, and l as in vi): @example bind h focus left bind j focus down bind k focus up bind l focus right bind t focus top bind b focus bottom @end example Note that @samp{k} is traditionally bound to the @code{kill} command. @end deffn @node Only, Remove, Focus, Regions @section Only @kindex Q @deffn Command only (@kbd{C-a Q})@* Kill all regions but the current one. @end deffn @node Remove, Resize, Only, Regions @section Remove @kindex X @deffn Command remove (@kbd{C-a X})@* Kill the current region. This is a no-op if there is only one region. @end deffn @node Resize, Caption, Remove, Regions @section Resize @deffn Command resize [@code{-h|-v|-b|-l|-p}] [ [+|-]@var{n}[@code{%}] | @code{=} | @code{max} | @code{min} | @code{_} | @code{0} ] (none)@* Resize the current region. The space will be removed from or added to the surrounding regions depending on the order of the splits. The available options for resizing are @samp{-h}(horizontal), @samp{-v}(vertical), @samp{-b}(both), @samp{-l}(local to layer), and @samp{-p}(perpendicular). Horizontal resizes will add or remove width to a region, vertical will add or remove height, and both will add or remove size from both dimensions. Local and perpendicular are similar to horizontal and vertical, but they take in account of how a region was split. If a region's last split was horizontal, a local resize will work like a vertical resize. If a region's last split was vertical, a local resize will work like a horizontal resize. Perpendicular resizes work in opposite of local resizes. If no option is specified, local is the default. The amount of lines to add or remove can be expressed a couple of different ways. By specifying a number @var{n} by itself will resize the region by that absolute amount. You can specify a relative amount by prefixing a plus @samp{+} or minus @samp{-} to the amount, such as adding @code{+n} lines or removing @code{-n} lines. Resizing can also be expressed as an absolute or relative percentage by postfixing a percent sign @samp{%}. Using zero @samp{0} is a synonym for @code{min} and using an underscore @samp{_} is a synonym for @code{max}. Some examples are: @example resize +N increase current region by N resize -N decrease current region by N resize N set current region to N resize 20% set current region to 20% of original size resize +20% increase current region by 20% resize -b = make all windows equally resize max maximize current region resize min minimize current region @end example Without any arguments, @code{screen} will prompt for how you would like to resize the current region. See @code{focusminsize} if you want to restrict the minimum size a region can have. @end deffn @node Caption, Fit, Resize, Regions @section Caption @deffn Command caption @code{always}|@code{splitonly} [string] @deffnx Command caption @code{string} [string] (none)@* This command controls the display of the window captions. Normally a caption is only used if more than one window is shown on the display (split screen mode). But if the type is set to @code{always}, @code{screen} shows a caption even if only one window is displayed. The default is @samp{splitonly}. The second form changes the text used for the caption. You can use all string escapes (@pxref{String Escapes}). @code{Screen} uses a default of @samp{%3n %t}. You can mix both forms by providing the string as an additional argument. @end deffn @node Fit, Focusminsize, Caption, Regions @section Fit @kindex F @deffn Command fit (@kbd{C-a F})@* Change the window size to the size of the current region. This command is needed because screen doesn't adapt the window size automatically if the window is displayed more than once. @end deffn @node Focusminsize, Layout, Fit, Regions @section Focusminsize @deffn Command focusminsize [ (width|@code{max}|@code{_}) (height|@code{max}|@code{_}) ] (none)@* This forces any currently selected region to be automatically resized at least a certain @var{width} and @var{height}. All other surrounding regions will be resized in order to accommodate. This constraint follows every time the @code{focus} command is used. The @code{resize} command can be used to increase either dimension of a region, but never below what is set with @code{focusminsize}. The underscore @samp{_} is a synonym for @code{max}. Setting a @var{width} and @var{height} of @code{0 0} (zero zero) will undo any constraints and allow for manual resizing. Without any parameters, the minimum width and height is shown. @end deffn @node Layout, , Focusminsize, Regions @section Layout @cindex layout Using regions, and perhaps a large enough terminal, you can give @code{screen} more of a desktop feel. By being able to split regions horizontally or vertically, you can take advantage of the lesser used spaces of your terminal. The catch to these splits has been that they're not kept between screen detachments and reattachments. Layouts will help organize your regions. You can create one layout of four horizontal regions and then create a separate layout of regions in a two by two array. The regions could contain the same windows, but they don't have to. You can easily switch between layouts and keep them between detachments and reattachments. Note that there are several subcommands to @code{layout}. @deffn Command layout @code{new} [title] (none)@* Create a new layout. The screen will change to one whole region and be switched to the blank window. From here, you build the regions and the windows they show as you desire. The new layout will be numbered with the smallest available integer, starting with zero. You can optionally give a title to your new layout. Otherwise, it will have a default title of @code{layout}. You can always change the title later by using the command @code{layout title}. @end deffn @deffn Command layout @code{remove} [n|title] (none)@* Remove, or in other words, delete the specified layout. Either the number or the title can be specified. Without either specification, @code{screen} will remove the current layout. Removing a layout does not affect your set windows or regions. @end deffn @deffn Command layout @code{next} (none)@* Switch to the next layout available @end deffn @deffn Command layout @code{prev} (none)@* Switch to the previous layout available @end deffn @deffn Command layout @code{select} [n|title] (none)@* Select the desired layout. Either the number or the title can be specified. Without either specification, @code{screen} will prompt and ask which screen is desired. To see which layouts are available, use the @code{layout show} command. @end deffn @deffn Command layout @code{show} (none)@* List on the message line the number(s) and title(s) of the available layout(s). The current layout is flagged. @end deffn @deffn Command layout @code{title} [title] (none)@* Change or display the title of the current layout. A string given will be used to name the layout. Without any options, the current title and number is displayed on the message line. @end deffn @deffn Command layout @code{number} [n] (none)@* Change or display the number of the current layout. An integer given will be used to number the layout. Without any options, the current number and title is displayed on the message line. @end deffn @deffn Command layout @code{attach} [title|@code{:last}] (none)@* Change or display which layout to reattach back to. The default is @code{:last}, which tells @code{screen} to reattach back to the last used layout just before detachment. By supplying a title, You can instruct @code{screen} to reattach to a particular layout regardless which one was used at the time of detachment. Without any options, the layout to reattach to will be shown in the message line. @end deffn @deffn Command layout @code{save} [n|title] (none)@* Remember the current arrangement of regions. When used, @code{screen} will remember the arrangement of vertically and horizontally split regions. This arrangement is restored when a @code{screen} session is reattached or switched back from a different layout. If the session ends or the @code{screen} process dies, the layout arrangements are lost. The @code{layout dump} command should help in this siutation. If a number or title is supplied, @code{screen} will remember the arrangement of that particular layout. Without any options, @code{screen} will remember the current layout. Saving your regions can be done automatically by using the @code{layout autosave} command. @end deffn @deffn Command layout @code{autosave} [@code{on}|@code{off}] (none)@* Change or display the status of automatically saving layouts. The default is @code{on}, meaning when @code{screen} is detached or changed to a different layout, the arrangement of regions and windows will be remembered at the time of change and restored upon return. If autosave is set to @code{off}, that arrangement will only be restored to either to the last manual save, using @code{layout save}, or to when the layout was first created, to a single region with a single window. Without either an @code{on} or an @code{off}, the current status is displayed on the message line. @end deffn @deffn Command layout @code{dump} [filename] (none)@* Write to a file the order of splits made in the current layout. This is useful to recreate the order of your regions used in your current layout. Only the current layout is recorded. While the order of the regions are recorded, the sizes of those regions and which windows correspond to which regions are not. If no filename is specified, the default is @file{layout-dump}, saved in the directory that the @code{screen} process was started in. If the file already exists, @code{layout dump} will append to that file. As an example: @example layout dump /home/user/.screenrc @end example will save or append the layout to the user's @file{.screenrc} file. @end deffn @node Window Settings, Virtual Terminal, Regions, Top @chapter Window Settings These commands control the way @code{screen} treats individual windows in a session. @xref{Virtual Terminal}, for commands to control the terminal emulation itself. @menu * Naming Windows:: Control the name of the window * Console:: See the host's console messages * Kill:: Destroy an unwanted window * Login:: Control @file{/etc/utmp} logging * Mode:: Control the file mode of the pty * Monitor:: Watch for activity or inactivity in a window * Windows:: List the active windows * Hardstatus:: Set a window's hardstatus line @end menu @node Naming Windows, Console, , Window Settings @section Naming Windows (Titles) @cindex title You can customize each window's name in the window display (viewed with the @code{windows} command (@pxref{Windows}) by setting it with one of the title commands. Normally the name displayed is the actual command name of the program created in the window. However, it is sometimes useful to distinguish various programs of the same name or to change the name on-the-fly to reflect the current state of the window. The default name for all shell windows can be set with the @code{shelltitle} command (@pxref{Shell}). You can specify the name you want for a window with the @samp{-t} option to the @code{screen} command when the window is created (@pxref{Screen Command}). To change the name after the window has been created you can use the title-string escape-sequence (@kbd{@key{ESC} k @var{name} @key{ESC} \}) and the @code{title} command (C-a A). The former can be output from an application to control the window's name under software control, and the latter will prompt for a name when typed. You can also bind predefined names to keys with the @code{title} command to set things quickly without prompting. @menu * Title Command:: The @code{title} command. * Dynamic Titles:: Make shell windows change titles dynamically. * Title Prompts:: Set up your shell prompt for dynamic Titles. * Title Screenrc:: Set up Titles in your @file{.screenrc}. @end menu @node Title Command, Dynamic Titles, , Naming Windows @subsection Title Command @kindex A @deffn Command title [windowtitle] (@kbd{C-a A})@* Set the name of the current window to @var{windowtitle}. If no name is specified, screen prompts for one. @end deffn @node Dynamic Titles, Title Prompts, Title Command, Naming Windows @subsection Dynamic Titles @code{screen} has a shell-specific heuristic that is enabled by setting the window's name to @var{search|name} and arranging to have a null title escape-sequence output as a part of your prompt. The @var{search} portion specifies an end-of-prompt search string, while the @var{name} portion specifies the default shell name for the window. If the @var{name} ends in a @samp{:} @code{screen} will add what it believes to be the current command running in the window to the end of the specified name (e.g. @var{name:cmd}). Otherwise the current command name supersedes the shell name while it is running. Here's how it works: you must modify your shell prompt to output a null title-escape-sequence (@key{ESC} k @key{ESC} \) as a part of your prompt. The last part of your prompt must be the same as the string you specified for the @var{search} portion of the title. Once this is set up, @code{screen} will use the title-escape-sequence to clear the previous command name and get ready for the next command. Then, when a newline is received from the shell, a search is made for the end of the prompt. If found, it will grab the first word after the matched string and use it as the command name. If the command name begins with @samp{!}, @samp{%}, or @samp{^}, @code{screen} will use the first word on the following line (if found) in preference to the just-found name. This helps csh users get more accurate titles when using job control or history recall commands. @node Title Prompts, Title Screenrc, Dynamic Titles, Naming Windows @subsection Setting up your prompt for shell titles One thing to keep in mind when adding a null title-escape-sequence to your prompt is that some shells (like the csh) count all the non-control characters as part of the prompt's length. If these invisible characters aren't a multiple of 8 then backspacing over a tab will result in an incorrect display. One way to get around this is to use a prompt like this: @example set prompt='@value{esc}[0000m@value{esc}k@value{esc}\% ' @end example The escape-sequence @samp{@value{esc}[0000m} not only normalizes the character attributes, but all the zeros round the length of the invisible characters up to 8. Tcsh handles escape codes in the prompt more intelligently, so you can specify your prompt like this: @example set prompt="%@{\ek\e\\%@}\% " @end example Bash users will probably want to echo the escape sequence in the PROMPT_COMMAND: @example PROMPT_COMMAND='printf "\033k\033\134"' @end example (I used @samp{\134} to output a @samp{\} because of a bug in v1.04). @node Title Screenrc, , Title Prompts, Naming Windows @subsection Setting up shell titles in your @file{.screenrc} Here are some .screenrc examples: @example screen -t top 2 nice top @end example Adding this line to your .screenrc would start a niced version of the @code{top} command in window 2 named @samp{top} rather than @samp{nice}. @example shelltitle '> |csh' screen 1 @end example This file would start a shell using the given shelltitle. The title specified is an auto-title that would expect the prompt and the typed command to look something like the following: @example /usr/joe/src/dir> trn @end example (it looks after the '> ' for the command name). The window status would show the name @samp{trn} while the command was running, and revert to @samp{csh} upon completion. @example bind R screen -t '% |root:' su @end example Having this command in your .screenrc would bind the key sequence @kbd{C-a R} to the @code{su} command and give it an auto-title name of @samp{root:}. For this auto-title to work, the screen could look something like this: @example % !em emacs file.c @end example Here the user typed the csh history command @code{!em} which ran the previously entered @code{emacs} command. The window status would show @samp{root:emacs} during the execution of the command, and revert to simply @samp{root:} at its completion. @example bind o title bind E title "" bind u title (unknown) @end example The first binding doesn't have any arguments, so it would prompt you for a title when you type @kbd{C-a o}. The second binding would clear an auto-titles current setting (C-a E). The third binding would set the current window's title to @samp{(unknown)} (C-a u). @node Console, Kill, Naming Windows, Window Settings @section Console @deffn Command console [@var{state}] (none)@* Grabs or un-grabs the machines console output to a window. When the argument is omitted the current state is displayed. @emph{Note}: Only the owner of @file{/dev/console} can grab the console output. This command is only available if the host supports the ioctl @code{TIOCCONS}. @end deffn @node Kill, Login, Console, Window Settings @section Kill @kindex k @kindex C-k @deffn Command kill (@kbd{C-a k}, @kbd{C-a C-k})@* Kill the current window.@* If there is an @code{exec} command running (@pxref{Exec}) then it is killed. Otherwise the process (e.g. shell) running in the window receives a @code{HANGUP} condition, the window structure is removed and screen (your display) switches to another window. When the last window is destroyed, @code{screen} exits. After a kill screen switches to the previously displayed window. @* @emph{Caution}: @code{emacs} users may find themselves killing their @code{emacs} session when trying to delete the current line. For this reason, it is probably wise to use a different command character (@pxref{Command Character}) or rebind @code{kill} to another key sequence, such as @kbd{C-a K} (@pxref{Key Binding}). @end deffn @node Login, Mode, Kill, Window Settings @section Login @deffn Command deflogin state (none)@* Same as the @code{login} command except that the default setting for new windows is changed. This defaults to `on' unless otherwise specified at compile time (@pxref{Installation}). Both commands are only present when @code{screen} has been compiled with utmp support. @end deffn @kindex L @deffn Command login [state] (@kbd{C-a L})@* Adds or removes the entry in @file{/etc/utmp} for the current window. This controls whether or not the window is @dfn{logged in}. In addition to this toggle, it is convenient to have ``log in'' and ``log out'' keys. For instance, @code{bind I login on} and @code{bind O login off} will map these keys to be @kbd{C-a I} and @kbd{C-a O} (@pxref{Key Binding}). @end deffn @node Mode, Monitor, Login, Window Settings @section Mode @deffn Command defmode mode (none)@* The mode of each newly allocated pseudo-tty is set to @var{mode}. @var{mode} is an octal number as used by chmod(1). Defaults to 0622 for windows which are logged in, 0600 for others (e.g. when @code{-ln} was specified for creation, @pxref{Screen Command}). @end deffn @node Monitor, Windows, Mode, Window Settings @section Monitoring @deffn Command activity message (none)@* When any activity occurs in a background window that is being monitored, @code{screen} displays a notification in the message line. The notification message can be redefined by means of the @code{activity} command. Each occurrence of @samp{%} in @var{message} is replaced by the number of the window in which activity has occurred, and each occurrence of @samp{^G} is replaced by the definition for bell in your termcap (usually an audible bell). The default message is @example 'Activity in window %n' @end example Note that monitoring is off for all windows by default, but can be altered by use of the @code{monitor} command (@kbd{C-a M}). @end deffn @deffn Command defmonitor state (none)@* Same as the @code{monitor} command except that the default setting for new windows is changed. Initial setting is `off'. @end deffn @kindex M @deffn Command monitor [state] (@kbd{C-a M})@* Toggles monitoring of the current window. When monitoring is turned on and the affected window is switched into the background, the activity notification message will be displayed in the status line at the first sign of output, and the window will also be marked with an @samp{@@} in the window-status display (@pxref{Windows}). Monitoring defaults to @samp{off} for all windows. @end deffn @kindex _ @deffn Command silence [@var{state}|@var{sec}] (@kbd{C-a _})@* Toggles silence monitoring of windows. When silence is turned on and an affected window is switched into the background, you will receive the silence notification message in the status line after a specified period of inactivity (silence). The default timeout can be changed with the @code{silencewait} command or by specifying a number of seconds instead of @code{on} or @code{off}. Silence is initially off for all windows. @end deffn @deffn Command defsilence state (none)@* Same as the @code{silence} command except that the default setting for new windows is changed. Initial setting is `off'. @end deffn @deffn Command silencewait @var{seconds} (none)@* Define the time that all windows monitored for silence should wait before displaying a message. Default is 30 seconds. @end deffn @node Windows, Hardstatus, Monitor, Window Settings @section Windows @kindex w @kindex C-w @deffn Command windows [ string ] (@kbd{C-a w}, @kbd{C-a C-w})@* Uses the message line to display a list of all the windows. Each window is listed by number with the name of the program running in the window (or its title). The current window is marked with a @samp{*}; the previous window is marked with a @samp{-}; all the windows that are logged in are marked with a @samp{$} (@pxref{Login}); a background window that has received a bell is marked with a @samp{!}; a background window that is being monitored and has had activity occur is marked with an @samp{@@} (@pxref{Monitor}); a window which has output logging turned on is marked with @samp{(L)}; windows occupied by other users are marked with @samp{&} or @samp{&&} if the window is shared by other users; windows in the zombie state are marked with @samp{Z}. If this list is too long to fit on the terminal's status line only the portion around the current window is displayed. You can customize the output format to any string you like including string escapes (@pxref{String Escapes}). In this case, if the string parameter is passed, the maximum output size is unlimited (instead of 1024 bytes if no parameter is passed). @end deffn @node Hardstatus, Mousetrack, Windows, Window Settings @section Hardstatus @code{Screen} maintains a hardstatus line for every window. If a window gets selected, the display's hardstatus will be updated to match the window's hardstatus line. The hardstatus line can be changed with the ANSI Application Program Command (APC): @samp{ESC_ESC\}. As a convenience for xterm users the sequence @samp{ESC]0..2;^G} is also accepted. @deffn Command defhstatus [status] (none)@* The hardstatus line that all new windows will get is set to @var{status}. This command is useful to make the hardstatus of every window display the window number or title or the like. @var{status} may contain the same directives as in the window messages, but the directive escape character is @samp{^E} (octal 005) instead of @samp{%}. This was done to make a misinterpretation of program generated hardstatus lines impossible. If the parameter @var{status} is omitted, the current default string is displayed. Per default the hardstatus line of new windows is empty. @end deffn @deffn Command hstatus status (none)@* Changes the current window's hardstatus line to @var{status}. @end deffn @node Mousetrack, , Hardstatus, Window Settings @section Mousetrack @deffn Command mousetrack [ @code{on|off} ] (none)@* This command determines whether @code{screen} will watch for mouse clicks. When this command is enabled, regions that have been split in various ways can be selected by pointing to them with a mouse and left-clicking them. Without specifying @var{on} or @var{off}, the current state is displayed. The default state is determined by the @code{defmousetrack} command. @end deffn @deffn Command defmousetrack @code{on|off} (none)@* This command determines the default state of the @code{mousetrack} command, currently defaulting of @var{off}. @end deffn @node Virtual Terminal, Copy and Paste, Window Settings, Top @chapter Virtual Terminal Each window in a @code{screen} session emulates a VT100 terminal, with some extra functions added. The VT100 emulator is hard-coded, no other terminal types can be emulated. The commands described here modify the terminal emulation. @menu * Control Sequences:: Details of the internal VT100 emulation. * Input Translation:: How keystrokes are remapped. * Digraph:: Entering digraph sequences. * Bell:: Getting your attention. * Clear:: Clear the window display. * Info:: Terminal emulation statistics. * Redisplay:: When the display gets confusing. * Wrap:: Automatic margins. * Reset:: Recovering from ill-behaved applications. * Window Size:: Changing the size of your terminal. * Character Processing:: Change the effect of special characters. @end menu @node Control Sequences, Input Translation, , Virtual Terminal @section Control Sequences @cindex control sequences The following is a list of control sequences recognized by @code{screen}. @samp{(V)} and @samp{(A)} indicate VT100-specific and ANSI- or ISO-specific functions, respectively. @example ESC E Next Line ESC D Index ESC M Reverse Index ESC H Horizontal Tab Set ESC Z Send VT100 Identification String ESC 7 (V) Save Cursor and Attributes ESC 8 (V) Restore Cursor and Attributes ESC [s (A) Save Cursor and Attributes ESC [u (A) Restore Cursor and Attributes ESC c Reset to Initial State ESC g Visual Bell ESC Pn p Cursor Visibility (97801) Pn = 6 Invisible 7 Visible ESC = (V) Application Keypad Mode ESC > (V) Numeric Keypad Mode ESC # 8 (V) Fill Screen with E's ESC \ (A) String Terminator ESC ^ (A) Privacy Message String (Message Line) ESC ! Global Message String (Message Line) ESC k Title Definition String ESC P (A) Device Control String Outputs a string directly to the host terminal without interpretation. ESC _ (A) Application Program Command (Hardstatus) ESC ] 0 ; string ^G (A) Operating System Command (Hardstatus, xterm title hack) ESC ] 83 ; cmd ^G (A) Execute screen command. This only works if multi-user support is compiled into screen. The pseudo-user ":window:" is used to check the access control list. Use "addacl :window: -rwx #?" to create a user with no rights and allow only the needed commands. Control-N (A) Lock Shift G1 (SO) Control-O (A) Lock Shift G0 (SI) ESC n (A) Lock Shift G2 ESC o (A) Lock Shift G3 ESC N (A) Single Shift G2 ESC O (A) Single Shift G3 ESC ( Pcs (A) Designate character set as G0 ESC ) Pcs (A) Designate character set as G1 ESC * Pcs (A) Designate character set as G2 ESC + Pcs (A) Designate character set as G3 ESC [ Pn ; Pn H Direct Cursor Addressing ESC [ Pn ; Pn f same as above ESC [ Pn J Erase in Display Pn = None or 0 From Cursor to End of Screen 1 From Beginning of Screen to Cursor 2 Entire Screen ESC [ Pn K Erase in Line Pn = None or 0 From Cursor to End of Line 1 From Beginning of Line to Cursor 2 Entire Line ESC [ Pn X Erase character ESC [ Pn A Cursor Up ESC [ Pn B Cursor Down ESC [ Pn C Cursor Right ESC [ Pn D Cursor Left ESC [ Pn E Cursor next line ESC [ Pn F Cursor previous line ESC [ Pn G Cursor horizontal position ESC [ Pn ` same as above ESC [ Pn d Cursor vertical position ESC [ Ps ;...; Ps m Select Graphic Rendition Ps = None or 0 Default Rendition 1 Bold 2 (A) Faint 3 (A) @i{Standout} Mode (ANSI: Italicized) 4 Underlined 5 Blinking 7 Negative Image 22 (A) Normal Intensity 23 (A) @i{Standout} Mode off (ANSI: Italicized off) 24 (A) Not Underlined 25 (A) Not Blinking 27 (A) Positive Image 30 (A) Foreground Black 31 (A) Foreground Red 32 (A) Foreground Green 33 (A) Foreground Yellow 34 (A) Foreground Blue 35 (A) Foreground Magenta 36 (A) Foreground Cyan 37 (A) Foreground White 39 (A) Foreground Default 40 (A) Background Black ... ... 49 (A) Background Default ESC [ Pn g Tab Clear Pn = None or 0 Clear Tab at Current Position 3 Clear All Tabs ESC [ Pn ; Pn r (V) Set Scrolling Region ESC [ Pn I (A) Horizontal Tab ESC [ Pn Z (A) Backward Tab ESC [ Pn L (A) Insert Line ESC [ Pn M (A) Delete Line ESC [ Pn @@ (A) Insert Character ESC [ Pn P (A) Delete Character ESC [ Pn S Scroll Scrolling Region Up ESC [ Pn T Scroll Scrolling Region Down ESC [ Pn ^ same as above ESC [ Ps ;...; Ps h Set Mode ESC [ Ps ;...; Ps l Reset Mode Ps = 4 (A) Insert Mode 20 (A) @samp{Automatic Linefeed} Mode. 34 Normal Cursor Visibility ?1 (V) Application Cursor Keys ?3 (V) Change Terminal Width to 132 columns ?5 (V) Reverse Video ?6 (V) @samp{Origin} Mode ?7 (V) @samp{Wrap} Mode ?9 X10 mouse tracking ?25 (V) Visible Cursor ?47 Alternate Screen (old xterm code) ?1000 (V) VT200 mouse tracking ?1047 Alternate Screen (new xterm code) ?1049 Alternate Screen (new xterm code) ESC [ 5 i (A) Start relay to printer (ANSI Media Copy) ESC [ 4 i (A) Stop relay to printer (ANSI Media Copy) ESC [ 8 ; Ph ; Pw t Resize the window to @samp{Ph} lines and @samp{Pw} columns (SunView special) ESC [ c Send VT100 Identification String ESC [ x (V) Send Terminal Parameter Report ESC [ > c Send Secondary Device Attributes String ESC [ 6 n Send Cursor Position Report @end example @node Input Translation, Digraph, Control Sequences, Virtual Terminal @section Input Translation @cindex input translation In order to do a full VT100 emulation @code{screen} has to detect that a sequence of characters in the input stream was generated by a keypress on the user's keyboard and insert the VT100 style escape sequence. @code{Screen} has a very flexible way of doing this by making it possible to map arbitrary commands on arbitrary sequences of characters. For standard VT100 emulation the command will always insert a string in the input buffer of the window (see also command @code{stuff}, @pxref{Paste}). Because the sequences generated by a keypress can change after a reattach from a different terminal type, it is possible to bind commands to the termcap name of the keys. @code{Screen} will insert the correct binding after each reattach. See @ref{Bindkey} for further details on the syntax and examples. Here is the table of the default key bindings. (A) means that the command is executed if the keyboard is switched into application mode. @example Key name Termcap name Command ----------------------------------------------------- Cursor up ku stuff \033[A stuff \033OA (A) Cursor down kd stuff \033[B stuff \033OB (A) Cursor right kr stuff \033[C stuff \033OC (A) Cursor left kl stuff \033[D stuff \033OD (A) Function key 0 k0 stuff \033[10~ Function key 1 k1 stuff \033OP Function key 2 k2 stuff \033OQ Function key 3 k3 stuff \033OR Function key 4 k4 stuff \033OS Function key 5 k5 stuff \033[15~ Function key 6 k6 stuff \033[17~ Function key 7 k7 stuff \033[18~ Function key 8 k8 stuff \033[19~ Function key 9 k9 stuff \033[20~ Function key 10 k; stuff \033[21~ Function key 11 F1 stuff \033[23~ Function key 12 F2 stuff \033[24~ Home kh stuff \033[1~ End kH stuff \033[4~ Insert kI stuff \033[2~ Delete kD stuff \033[3~ Page up kP stuff \033[5~ Page down kN stuff \033[6~ Keypad 0 f0 stuff 0 stuff \033Op (A) Keypad 1 f1 stuff 1 stuff \033Oq (A) Keypad 2 f2 stuff 2 stuff \033Or (A) Keypad 3 f3 stuff 3 stuff \033Os (A) Keypad 4 f4 stuff 4 stuff \033Ot (A) Keypad 5 f5 stuff 5 stuff \033Ou (A) Keypad 6 f6 stuff 6 stuff \033Ov (A) Keypad 7 f7 stuff 7 stuff \033Ow (A) Keypad 8 f8 stuff 8 stuff \033Ox (A) Keypad 9 f9 stuff 9 stuff \033Oy (A) Keypad + f+ stuff + stuff \033Ok (A) Keypad - f- stuff - stuff \033Om (A) Keypad * f* stuff * stuff \033Oj (A) Keypad / f/ stuff / stuff \033Oo (A) Keypad = fq stuff = stuff \033OX (A) Keypad . f. stuff . stuff \033On (A) Keypad , f, stuff , stuff \033Ol (A) Keypad enter fe stuff \015 stuff \033OM (A) @end example @node Digraph, Bell, Input Translation, Virtual Terminal @section Digraph @kindex C-v @deffn Command digraph [preset [unicode-value]] (@kbd{C-a C-v})@* This command prompts the user for a digraph sequence. The next two characters typed are looked up in a builtin table and the resulting character is inserted in the input stream. For example, if the user enters @samp{a"}, an a-umlaut will be inserted. If the first character entered is a 0 (zero), @code{screen} will treat the following characters (up to three) as an octal number instead. The optional argument @var{preset} is treated as user input, thus one can create an "umlaut" key. For example the command @samp{bindkey ^K digraph '"'} enables the user to generate an a-umlaut by typing @samp{CTRL-K a}. When a non-zero @var{unicode-value} is specified, a new digraph is created with the specified preset. The digraph is unset if a zero value is provided for the @var{unicode-value}. The following table is the builtin sequences. @example Sequence Octal Digraph Unicode Equivalent ----------------------------------------------- ' ', ' ' 160 (space) U+00A0 'N', 'S' 160 (space) U+00A0 '~', '!' 161 ¡ U+00A1 '!', '!' 161 ¡ U+00A1 '!', 'I' 161 ¡ U+00A1 'c', '|' 162 ¢ U+00A2 'c', 't' 162 ¢ U+00A2 '$', '$' 163 £ U+00A3 'P', 'd' 163 £ U+00A3 'o', 'x' 164 ¤ U+00A4 'C', 'u' 164 ¤ U+00A4 'C', 'u' 164 ¤ U+00A4 'E', 'u' 164 ¤ U+00A4 'Y', '-' 165 ¥ U+00A5 'Y', 'e' 165 ¥ U+00A5 '|', '|' 166 ¦ U+00A6 'B', 'B' 166 ¦ U+00A6 'p', 'a' 167 § U+00A7 'S', 'E' 167 § U+00A7 '"', '"' 168 ¨ U+00A8 ''', ':' 168 ¨ U+00A8 'c', 'O' 169 © U+00A9 'C', 'o' 169 © U+00A9 'a', '-' 170 ª U+00AA '<', '<' 171 « U+00AB '-', ',' 172 ¬ U+00AC 'N', 'O' 172 ¬ U+00AC '-', '-' 173 ­ U+00AD 'r', 'O' 174 ® U+00AE 'R', 'g' 174 ® U+00AE '-', '=' 175 ¯ U+00AF ''', 'm' 175 ¯ U+00AF '~', 'o' 176 ° U+00B0 'D', 'G' 176 ° U+00B0 '+', '-' 177 ± U+00B1 '2', '2' 178 ² U+00B2 '2', 'S' 178 ² U+00B2 '3', '3' 179 ³ U+00B3 '3', 'S' 179 ³ U+00B3 ''', ''' 180 ´ U+00B4 'j', 'u' 181 µ U+00B5 'M', 'y' 181 µ U+00B5 'p', 'p' 182 ¶ U+00B6 'P', 'I' 182 ¶ U+00B6 '~', '.' 183 · U+00B7 '.', 'M' 183 · U+00B7 ',', ',' 184 ¸ U+00B8 ''', ',' 184 ¸ U+00B8 '1', '1' 185 ¹ U+00B9 '1', 'S' 185 ¹ U+00B9 'o', '-' 186 º U+00BA '>', '>' 187 » U+00BB '1', '4' 188 ¼ U+00BC '1', '2' 189 ½ U+00BD '3', '4' 190 ¾ U+00BE '~', '?' 191 ¿ U+00BF '?', '?' 191 ¿ U+00BF '?', 'I' 191 ¿ U+00BF 'A', '`' 192 À U+00C0 'A', '!' 192 À U+00C0 'A', ''' 193 Á U+00C1 'A', '^' 194 Â U+00C2 'A', '>' 194 Â U+00C2 'A', '~' 195 Ã U+00C3 'A', '?' 195 Ã U+00C3 'A', '"' 196 Ä U+00C4 'A', ':' 196 Ä U+00C4 'A', '@@' 197 Å U+00C5 'A', 'A' 197 Å U+00C5 'A', 'E' 198 Æ U+00C6 'C', ',' 199 Ç U+00C7 'E', '`' 200 È U+00C8 'E', '!' 200 È U+00C8 'E', ''' 201 É U+00C9 'E', '^' 202 Ê U+00CA 'E', '>' 202 Ê U+00CA 'E', '"' 203 Ë U+00CB 'E', ':' 203 Ë U+00CB 'I', '`' 204 Ì U+00CC 'I', '!' 204 Ì U+00CC 'I', ''' 205 Í U+00CD 'I', '^' 206 Î U+00CE 'I', '>' 206 Î U+00CE 'I', '"' 207 Ï U+00CF 'I', ':' 207 Ï U+00CF 'D', '-' 208 Ð U+00D0 'N', '~' 209 Ñ U+00D1 'N', '?' 209 Ñ U+00D1 'O', '`' 210 Ò U+00D2 'O', '!' 210 Ò U+00D2 'O', ''' 211 Ó U+00D3 'O', '^' 212 Ô U+00D4 'O', '>' 212 Ô U+00D4 'O', '~' 213 Õ U+00D5 'O', '?' 213 Õ U+00D5 'O', '"' 214 Ö U+00D6 'O', ':' 214 Ö U+00D6 '/', '\' 215 × U+00D7 '*', 'x' 215 × U+00D7 'O', '/' 216 Ø U+00D8 'U', '`' 217 Ù U+00D9 'U', '!' 217 Ù U+00D9 'U', ''' 218 Ú U+00DA 'U', '^' 219 Û U+00DB 'U', '>' 219 Û U+00DB 'U', '"' 220 Ü U+00DC 'U', ':' 220 Ü U+00DC 'Y', ''' 221 Ý U+00DD 'I', 'p' 222 Þ U+00DE 'T', 'H' 222 Þ U+00DE 's', 's' 223 ß U+00DF 's', '"' 223 ß U+00DF 'a', '`' 224 à U+00E0 'a', '!' 224 à U+00E0 'a', ''' 225 á U+00E1 'a', '^' 226 â U+00E2 'a', '>' 226 â U+00E2 'a', '~' 227 ã U+00E3 'a', '?' 227 ã U+00E3 'a', '"' 228 ä U+00E4 'a', ':' 228 ä U+00E4 'a', 'a' 229 å U+00E5 'a', 'e' 230 æ U+00E6 'c', ',' 231 ç U+00E7 'e', '`' 232 è U+00E8 'e', '!' 232 è U+00E8 'e', ''' 233 é U+00E9 'e', '^' 234 ê U+00EA 'e', '>' 234 ê U+00EA 'e', '"' 235 ë U+00EB 'e', ':' 235 ë U+00EB 'i', '`' 236 ì U+00EC 'i', '!' 236 ì U+00EC 'i', ''' 237 í U+00ED 'i', '^' 238 î U+00EE 'i', '>' 238 î U+00EE 'i', '"' 239 ï U+00EF 'i', ':' 239 ï U+00EF 'd', '-' 240 ð U+00F0 'n', '~' 241 ñ U+00F1 'n', '?' 241 ñ U+00F1 'o', '`' 242 ò U+00F2 'o', '!' 242 ò U+00F2 'o', ''' 243 ó U+00F3 'o', '^' 244 ô U+00F4 'o', '>' 244 ô U+00F4 'o', '~' 245 õ U+00F5 'o', '?' 245 õ U+00F5 'o', '"' 246 ö U+00F6 'o', ':' 246 ö U+00F6 ':', '-' 247 ÷ U+00F7 'o', '/' 248 ø U+00F8 'u', '`' 249 ù U+00F9 'u', '!' 249 ù U+00F9 'u', ''' 250 ú U+00FA 'u', '^' 251 û U+00FB 'u', '>' 251 û U+00FB 'u', '"' 252 ü U+00FC 'u', ':' 252 ü U+00FC 'y', ''' 253 ý U+00FD 'i', 'p' 254 þ U+00FE 't', 'h' 254 þ U+00FE 'y', '"' 255 ÿ U+00FF 'y', ':' 255 ÿ U+00FF '"', '[' 196 Ä U+00C4 '"', '\' 214 Ö U+00D6 '"', ']' 220 Ü U+00DC '"', '@{' 228 ä U+00E4 '"', '|' 246 ö U+00F6 '"', '@}' 252 ü U+00FC '"', '~' 223 ß U+00DF @end example @end deffn @node Bell, Clear, Digraph, Virtual Terminal @section Bell @deffn Command bell_msg [message] (none)@* When a bell character is sent to a background window, @code{screen} displays a notification in the message line. The notification message can be re-defined by this command. Each occurrence of @samp{%} in @var{message} is replaced by the number of the window to which a bell has been sent, and each occurrence of @samp{^G} is replaced by the definition for bell in your termcap (usually an audible bell). The default message is @example 'Bell in window %n' @end example An empty message can be supplied to the @code{bell_msg} command to suppress output of a message line (@code{bell_msg ""}). Without a parameter, the current message is shown. @end deffn @kindex C-g @deffn Command vbell [state] (@kbd{C-a C-g})@* Sets or toggles the visual bell setting for the current window. If @code{vbell} is switched to @samp{on}, but your terminal does not support a visual bell, the visual bell message is displayed in the status line when the bell character is received. Visual bell support of a terminal is defined by the termcap variable @code{vb}. @xref{Bell}, for more information on visual bells. The equivalent terminfo capability is @code{flash}. Per default, @code{vbell} is @samp{off}, thus the audible bell is used. @end deffn @deffn Command vbell_msg [message] (none)@* Sets the visual bell message. @var{Message} is printed to the status line if the window receives a bell character (^G), @code{vbell} is set to @samp{on} and the terminal does not support a visual bell. The default message is @samp{Wuff, Wuff!!}. Without a parameter, the current message is shown. @end deffn @deffn Command vbellwait sec (none)@* Define a delay in seconds after each display of @code{screen} 's visual bell message. The default is 1 second. @end deffn @node Clear, Info, Bell, Virtual Terminal @section Clear @kindex C @deffn Command clear (@kbd{C-a C})@* Clears the screen and saves its contents to the scrollback buffer. @end deffn @node Info, Redisplay, Clear, Virtual Terminal @section Info @kindex i @kindex C-i @deffn Command info (@kbd{C-a i}, @kbd{C-a C-i})@* Uses the message line to display some information about the current window: the cursor position in the form @samp{(@var{column},@var{row})} starting with @samp{(1,1)}, the terminal width and height plus the size of the scrollback buffer in lines, like in @samp{(80,24)+50}, the current state of window XON/XOFF flow control is shown like this (@pxref{Flow Control}): @example +flow automatic flow control, currently on. -flow automatic flow control, currently off. +(+)flow flow control enabled. Agrees with automatic control. -(+)flow flow control disabled. Disagrees with automatic control. +(-)flow flow control enabled. Disagrees with automatic control. -(-)flow flow control disabled. Agrees with automatic control. @end example The current line wrap setting (@samp{+wrap} indicates enabled, @samp{-wrap} not) is also shown. The flags @samp{ins}, @samp{org}, @samp{app}, @samp{log}, @samp{mon} and @samp{nored} are displayed when the window is in insert mode, origin mode, application-keypad mode, has output logging, activity monitoring or partial redraw enabled. The currently active character set (@samp{G0}, @samp{G1}, @samp{G2}, or @samp{G3}), and in square brackets the terminal character sets that are currently designated as @samp{G0} through @samp{G3}. If the window is in UTF-8 mode, the string @samp{UTF-8} is shown instead. Additional modes depending on the type of the window are displayed at the end of the status line (@pxref{Window Types}). If the state machine of the terminal emulator is in a non-default state, the info line is started with a string identifying the current state. For system information use @code{time}. @end deffn @deffn Command dinfo (none)@* Show what @code{screen} thinks about your terminal. Useful if you want to know why features like color or the alternate charset don't work. @end deffn @node Redisplay, Wrap, Info, Virtual Terminal @section Redisplay @deffn Command allpartial state (none)@* If set to on, only the current cursor line is refreshed on window change. This affects all windows and is useful for slow terminal lines. The previous setting of full/partial refresh for each window is restored with @code{allpartial off}. This is a global flag that immediately takes effect on all windows overriding the @code{partial} settings. It does not change the default redraw behavior of newly created windows. @end deffn @deffn Command altscreen state (none)@* If set to on, "alternate screen" support is enabled in virtual terminals, just like in xterm. Initial setting is @samp{off}. @end deffn @deffn Command partial state (none)@* Defines whether the display should be refreshed (as with @code{redisplay}) after switching to the current window. This command only affects the current window. To immediately affect all windows use the @code{allpartial} command. Default is @samp{off}, of course. This default is fixed, as there is currently no @code{defpartial} command. @end deffn @kindex l @kindex C-l @deffn Command redisplay (@kbd{C-a l}, @kbd{C-a C-l})@* Redisplay the current window. Needed to get a full redisplay in partial redraw mode. @end deffn @node Wrap, Reset, Redisplay, Virtual Terminal @section Wrap @kindex r @kindex C-r @deffn Command wrap [ on | off ] (@kbd{C-a r}, @kbd{C-a C-r}) @* Sets the line-wrap setting for the current window. When line-wrap is on, the second consecutive printable character output at the last column of a line will wrap to the start of the following line. As an added feature, backspace (^H) will also wrap through the left margin to the previous line. Default is @samp{on}. Without any options, the state of @code{wrap} is toggled. @end deffn @deffn Command defwrap state (none) @* Same as the @code{wrap} command except that the default setting for new windows is changed. Initially line-wrap is on and can be toggled with the @code{wrap} command (@kbd{C-a r}) or by means of "C-a : wrap on|off". @end deffn @node Reset, Window Size, Wrap, Virtual Terminal @section Reset @kindex Z @deffn Command reset (@kbd{C-a Z})@* Reset the virtual terminal to its ``power-on'' values. Useful when strange settings (like scroll regions or graphics character set) are left over from an application. @end deffn @node Window Size, Character Processing, Reset, Virtual Terminal @section Window Size @kindex W @deffn Command width [@code{-w}|@code{-d}] [cols [lines]] (@kbd{C-a W})@* Toggle the window width between 80 and 132 columns, or set it to @var{cols} columns if an argument is specified. This requires a capable terminal and the termcap entries @samp{Z0} and @samp{Z1}. See the @code{termcap} command (@pxref{Termcap}), for more information. You can also specify a height if you want to change both values. The @code{-w} option tells screen to leave the display size unchanged and just set the window size, @code{-d} vice versa. @end deffn @deffn Command height [@code{-w}|@code{-d}] [lines [cols]] (none)@* Set the display height to a specified number of lines. When no argument is given it toggles between 24 and 42 lines display. @end deffn @node Character Processing, ,Window Size, Virtual Terminal @section Character Processing @deffn Command c1 [state] (none)@* Change c1 code processing. @samp{c1 on} tells screen to treat the input characters between 128 and 159 as control functions. Such an 8-bit code is normally the same as ESC followed by the corresponding 7-bit code. The default setting is to process c1 codes and can be changed with the @samp{defc1} command. Users with fonts that have usable characters in the c1 positions may want to turn this off. @end deffn @deffn Command gr [state] (none)@* Turn GR charset switching on/off. Whenever screen sees an input char with an 8th bit set, it will use the charset stored in the GR slot and print the character with the 8th bit stripped. The default (see also @samp{defgr}) is not to process GR switching because otherwise the ISO88591 charset would not work. @end deffn @deffn Command bce [state] (none)@* Change background-color-erase setting. If @samp{bce} is set to on, all characters cleared by an erase/insert/scroll/clear operation will be displayed in the current background color. Otherwise the default background color is used. @end deffn @deffn Command encoding enc [denc] (none)@* Tell screen how to interpret the input/output. The first argument sets the encoding of the current window. Each window can emulate a different encoding. The optional second parameter overwrites the encoding of the connected terminal. It should never be needed as screen uses the locale setting to detect the encoding. There is also a way to select a terminal encoding depending on the terminal type by using the @samp{KJ} termcap entry. @xref{Special Capabilities}. Supported encodings are @code{eucJP}, @code{SJIS}, @code{eucKR}, @code{eucCN}, @code{Big5}, @code{GBK}, @code{KOI8-R}, @code{CP1251}, @code{UTF-8}, @code{ISO8859-2}, @code{ISO8859-3}, @code{ISO8859-4}, @code{ISO8859-5}, @code{ISO8859-6}, @code{ISO8859-7}, @code{ISO8859-8}, @code{ISO8859-9}, @code{ISO8859-10}, @code{ISO8859-15}, @code{jis}. See also @samp{defencoding}, which changes the default setting of a new window. @end deffn @deffn Command charset set (none)@* Change the current character set slot designation and charset mapping. The first four character of @var{set} are treated as charset designators while the fifth and sixth character must be in range @samp{0} to @samp{3} and set the GL/GR charset mapping. On every position a @samp{.} may be used to indicate that the corresponding charset/mapping should not be changed (@var{set} is padded to six characters internally by appending @samp{.} chars). New windows have @samp{BBBB02} as default charset, unless a @samp{encoding} command is active. The current setting can be viewed with the @ref{Info} command. @end deffn @deffn Command utf8 [state [dstate]] (none)@* Change the encoding used in the current window. If utf8 is enabled, the strings sent to the window will be UTF-8 encoded and vice versa. Omitting the parameter toggles the setting. If a second parameter is given, the display's encoding is also changed (this should rather be done with screen's @samp{-U} option). See also @samp{defutf8}, which changes the default setting of a new window. @end deffn @deffn Command defc1 state (none)@* Same as the @samp{c1} command except that the default setting for new windows is changed. Initial setting is @samp{on}. @end deffn @deffn Command defgr state (none)@* Same as the @samp{gr} command except that the default setting for new windows is changed. Initial setting is @samp{off}. @end deffn @deffn Command defbce state (none)@* Same as the @samp{bce} command except that the default setting for new windows is changed. Initial setting is @samp{off}. @end deffn @deffn Command defencoding enc (none)@* Same as the @samp{encoding} command except that the default setting for new windows is changed. Initial setting is the encoding taken from the terminal. @end deffn @deffn Command defcharset [set] (none)@* Like the @samp{charset} command except that the default setting for new windows is changed. Shows current default if called without argument. @end deffn @deffn Command defutf8 state (none)@* Same as the @samp{utf8} command except that the default setting for new windows is changed. Initial setting is @code{on} if screen was started with @samp{-U}, otherwise @code{off}. @end deffn @deffn Command cjkwidth [state] (none)@* Toggle how ambiguous characters are treated. If cjkwidth is on screen interprets them as double (full) width characters. If off then they are seen as one cell (half) width characters. @end deffn @node Copy and Paste, Subprocess Execution, Virtual Terminal, Top @chapter Copy and Paste @cindex copy and paste For those confined to a hardware terminal, these commands provide a cut and paste facility more powerful than those provided by most windowing systems. @menu * Copy:: Copy from scrollback to buffer * Paste:: Paste from buffer into window * Registers:: Longer-term storage * Screen Exchange:: Sharing data between screen users * History:: Recalling previous input @end menu @node Copy, Paste, , Copy and Paste @section Copying @cindex marking @cindex scrollback @kindex [ @kindex C-[ @kindex ESC @deffn Command copy (@kbd{C-a [}, @kbd{C-a C-[}, @kbd{C-a @key{ESC}})@* Enter copy/scrollback mode. This allows you to copy text from the current window and its history into the paste buffer. In this mode a @code{vi}-like full screen editor is active, with controls as outlined below. @end deffn @menu * Line Termination:: End copied lines with CR/LF * Scrollback:: Set the size of the scrollback buffer * Copy Mode Keys:: Remap keys in copy mode * Movement:: Move around in the scrollback buffer * Marking:: Select the text you want * Repeat count:: Repeat a command * Searching:: Find the text you want * Specials:: Other random keys @end menu @node Line Termination, Scrollback, , Copy @subsection CR/LF @deffn Command crlf [state] (none)@* This affects the copying of text regions with the @code{copy} command. If it is set to @samp{on}, lines will be separated by the two character sequence @samp{CR}/@samp{LF}. Otherwise only @samp{LF} is used. @code{crlf} is off by default. When no parameter is given, the state is toggled. @end deffn @node Scrollback, Copy Mode Keys, Line Termination, Copy @subsection Scrollback To access and use the contents in the scrollback buffer, use the @code{copy} command. @xref{Copy}. @deffn Command defscrollback num (none)@* Same as the @code{scrollback} command except that the default setting for new windows is changed. Defaults to 100. @end deffn @deffn Command scrollback num (none)@* Set the size of the scrollback buffer for the current window to @var{num} lines. The default scrollback is 100 lines. Use @code{info} to view the current setting. @end deffn @deffn Command compacthist [state] (none)@* This tells screen whether to suppress trailing blank lines when scrolling up text into the history buffer. Turn compacting @samp{on} to hold more useful lines in your scrollback buffer. @end deffn @node Copy Mode Keys, Movement, Scrollback, Copy @subsection Markkeys @deffn Command markkeys string (none)@* This is a method of changing the keymap used for copy/history mode. The string is made up of @var{oldchar}=@var{newchar} pairs which are separated by @samp{:}. Example: The command @code{markkeys h=^B:l=^F:$=^E} would set some keys to be more familiar to @code{emacs} users. If your terminal sends characters, that cause you to abort copy mode, then this command may help by binding these characters to do nothing. The no-op character is `@@' and is used like this: @code{markkeys @@=L=H} if you do not want to use the `H' or `L' commands any longer. As shown in this example, multiple keys can be assigned to one function in a single statement. @end deffn @node Movement, Marking, Copy Mode Keys, Copy @subsection Movement Keys @noindent @kbd{h}, @kbd{C-h}, or @kbd{left arrow} move the cursor left. @noindent @kbd{j}, @kbd{C-n}, or @kbd{down arrow} move the cursor down. @noindent @kbd{k}, @kbd{C-p}, or @kbd{up arrow} move the cursor up. @noindent @kbd{l} ('el'), or @kbd{right arrow} move the cursor right. @noindent @kbd{0} (zero) or @kbd{C-a} move to the leftmost column. @noindent @kbd{+} and @kbd{-} move the cursor to the leftmost column of the next or previous line. @noindent @kbd{H}, @kbd{M} and @kbd{L} move the cursor to the leftmost column of the top, center or bottom line of the window. @noindent @kbd{|} moves to the specified absolute column. @noindent @kbd{g} or @kbd{home} moves to the beginning of the buffer. @noindent @kbd{G} or @kbd{end} moves to the specified absolute line (default: end of buffer). @noindent @kbd{%} jumps to the specified percentage of the buffer. @noindent @kbd{^} or @kbd{$} move to the first or last non-whitespace character on the line. @noindent @kbd{w}, @kbd{b}, and @kbd{e} move the cursor word by word. @noindent @kbd{B}, @kbd{E} move the cursor WORD by WORD (as in vi). @noindent @kbd{f}/@kbd{F}, @kbd{t}/@kbd{T} move the cursor forward/backward to the next occurrence of the target. (eg, '3fy' will move the cursor to the 3rd 'y' to the right.) @noindent @kbd{;} and @kbd{,} Repeat the last f/F/t/T command in the same/opposite direction. @noindent @kbd{C-e} and @kbd{C-y} scroll the display up/down by one line while preserving the cursor position. @noindent @kbd{C-u} and @kbd{C-d} scroll the display up/down by the specified amount of lines while preserving the cursor position. (Default: half screenful). @noindent @kbd{C-b} and @kbd{C-f} move the cursor up/down a full screen. Note that Emacs-style movement keys can be specified by a .screenrc command. (@code{markkeys "h=^B:l=^F:$=^E"}) There is no simple method for a full emacs-style keymap, however, as this involves multi-character codes. @node Marking, Repeat count, Movement, Copy @subsection Marking The copy range is specified by setting two marks. The text between these marks will be highlighted. Press: @noindent @kbd{space} or @kbd{enter} to set the first or second mark respectively. If @code{mousetrack} is set to @code{on}, marks can also be set using @kbd{left mouse click}. @noindent @kbd{Y} and @kbd{y} can be used to mark one whole line or to mark from start of line. @noindent @kbd{W} marks exactly one word. @node Repeat count, Searching, Marking, Copy @subsection Repeat Count Any command in copy mode can be prefixed with a number (by pressing digits @kbd{0@dots{}9}) which is taken as a repeat count. Example: @example @kbd{C-a C-[ H 10 j 5 Y} @end example @noindent will copy lines 11 to 15 into the paste buffer. @node Searching, Specials, Repeat count, Copy @subsection Searching @noindent @kbd{/} @code{vi}-like search forward. @noindent @kbd{?} @code{vi}-like search backward. @noindent @kbd{C-a s} @code{emacs} style incremental search forward. @noindent @kbd{C-r} @code{emacs} style reverse i-search. @deffn Command ignorecase [on|off] (none)@* Tell screen to ignore the case of characters in searches. Default is @code{off}. Without any options, the state of @code{ignorecase} is toggled. @end deffn @noindent @kbd{n} Repeat search in forward direction. @noindent @kbd{N} Repeat search in backward direction. @node Specials, , Searching, Copy @subsection Specials There are, however, some keys that act differently here from in @code{vi}. @code{Vi} does not allow to yank rectangular blocks of text, but @code{screen} does. Press: @noindent @kbd{c} or @kbd{C} to set the left or right margin respectively. If no repeat count is given, both default to the current cursor position.@* Example: Try this on a rather full text screen: @example @kbd{C-a [ M 20 l SPACE c 10 l 5 j C SPACE}. @end example @noindent This moves one to the middle line of the screen, moves in 20 columns left, marks the beginning of the paste buffer, sets the left column, moves 5 columns down, sets the right column, and then marks the end of the paste buffer. Now try: @example @kbd{C-a [ M 20 l SPACE 10 l 5 j SPACE} @end example @noindent and notice the difference in the amount of text copied. @noindent @kbd{J} joins lines. It toggles between 4 modes: lines separated by a newline character (012), lines glued seamless, lines separated by a single space or comma separated lines. Note that you can prepend the newline character with a carriage return character, by issuing a @code{set crlf on}. @noindent @kbd{v} or @kbd{V} is for all the @code{vi} users who use @code{:set numbers} - it toggles the left margin between column 9 and 1. @noindent @kbd{a} before the final @kbd{space} key turns on append mode. Thus the contents of the paste buffer will not be overwritten, but appended to. @noindent @kbd{A} turns on append mode and sets a (second) mark. @noindent @kbd{>} sets the (second) mark and writes the contents of the paste buffer to the screen-exchange file (@file{/tmp/screen-exchange} per default) once copy-mode is finished. @xref{Screen Exchange}.@* This example demonstrates how to dump the whole scrollback buffer to that file: @example @kbd{C-a [ g SPACE G $ >}. @end example @noindent @kbd{C-g} gives information about the current line and column. @noindent @kbd{x} or @kbd{o} ('oh') exchanges the first mark and the current cursor position. You can use this to adjust an already placed mark. @noindent @kbd{C-l} ('el') will redraw the screen. @noindent @kbd{@@} does nothing. Absolutely nothing. Does not even exit copy mode. @noindent All keys not described here exit copy mode. @node Paste, Registers, Copy, Copy and Paste @section Paste @kindex ] @kindex C-] @deffn Command paste [registers [destination]] (@kbd{C-a ]}, @kbd{C-a C-]})@* Write the (concatenated) contents of the specified registers to the stdin stream of the current window. The register @samp{.} is treated as the paste buffer. If no parameter is specified the user is prompted to enter a single register. The paste buffer can be filled with the @code{copy}, @code{history} and @code{readbuf} commands. Other registers can be filled with the @code{register}, @code{readreg} and @code{paste} commands. If @code{paste} is called with a second argument, the contents of the specified registers is pasted into the named destination register rather than the window. If @samp{.} is used as the second argument, the display's paste buffer is the destination. Note, that @code{paste} uses a wide variety of resources: Usually both, a current window and a current display are required. But whenever a second argument is specified no current window is needed. When the source specification only contains registers (not the paste buffer) then there need not be a current display (terminal attached), as the registers are a global resource. The paste buffer exists once for every user. @end deffn @deffn Command stuff [string] (none)@* Stuff the string @var{string} in the input buffer of the current window. This is like the @code{paste} command, but with much less overhead. Without a parameter, @code{screen} will prompt for a string to stuff. You cannot paste large buffers with the @code{stuff} command. It is most useful for key bindings. @xref{Bindkey}. @end deffn @deffn Command pastefont [state] Tell screen to include font information in the paste buffer. The default is not to do so. This command is especially useful for multi character fonts like kanji. @end deffn @deffn Command slowpaste msec @deffnx Command defslowpaste msec (none)@* Define the speed text is inserted in the current window by the @code{paste} command. If the slowpaste value is nonzero text is written character by character. @code{screen} will pause for @var{msec} milliseconds after each write to allow the application to process the input. only use @code{slowpaste} if your underlying system exposes flow control problems while pasting large amounts of text. @code{defslowpaste} specifies the default for new windows. @end deffn @deffn Command readreg [-e encoding] [register [filename]] (none)@* Does one of two things, dependent on number of arguments: with zero or one arguments it duplicates the paste buffer contents into the register specified or entered at the prompt. With two arguments it reads the contents of the named file into the register, just as @code{readbuf} reads the screen-exchange file into the paste buffer. You can tell screen the encoding of the file via the @code{-e} option. The following example will paste the system's password file into the screen window (using register p, where a copy remains): @example C-a : readreg p /etc/passwd C-a : paste p @end example @end deffn @node Registers, Screen Exchange, Paste, Copy and Paste @section Registers @deffn Command copy_reg [key] (none)@* Removed. Use @code{readreg} instead. @end deffn @deffn Command ins_reg [key] (none)@* Removed. Use @code{paste} instead. @end deffn @deffn Command process [key] (none)@* Stuff the contents of the specified register into the @code{screen} input queue. If no argument is given you are prompted for a register name. The text is parsed as if it had been typed in from the user's keyboard. This command can be used to bind multiple actions to a single key. @end deffn @deffn Command register [-e encoding] key string (none)@* Save the specified @var{string} to the register @var{key}. The encoding of the string can be specified via the @code{-e} option. @end deffn @node Screen Exchange, History, Registers, Copy and Paste @section Screen Exchange @deffn Command bufferfile [@var{exchange-file}] (none)@* Change the filename used for reading and writing with the paste buffer. If the @var{exchange-file} parameter is omitted, @code{screen} reverts to the default of @file{/tmp/screen-exchange}. The following example will paste the system's password file into the screen window (using the paste buffer, where a copy remains): @example C-a : bufferfile /etc/passwd C-a < C-a ] C-a : bufferfile @end example @end deffn @kindex < @deffn Command readbuf [-e @var{encoding}] [@var{filename}] (@kbd{C-a <})@* Reads the contents of the specified file into the paste buffer. You can tell screen the encoding of the file via the @code{-e} option. If no file is specified, the screen-exchange filename is used. @end deffn @kindex = @deffn Command removebuf (@kbd{C-a =})@* Unlinks the screen-exchange file. @end deffn @kindex > @deffn Command writebuf [-e @var{encoding}] [@var{filename}] (@kbd{C-a >})@* Writes the contents of the paste buffer to the specified file, or the public accessible screen-exchange file if no filename is given. This is thought of as a primitive means of communication between @code{screen} users on the same host. If an encoding is specified the paste buffer is recoded on the fly to match the encoding. See also @kbd{C-a @key{ESC}} (@pxref{Copy}). @end deffn @node History, , Screen Exchange, Copy and Paste @section History @kindex @{ @kindex @} @deffn Command history (@kbd{C-a @{}, @kbd{C-a @}})@* Usually users work with a shell that allows easy access to previous commands. For example, @code{csh} has the command @code{!!} to repeat the last command executed. @code{screen} provides a primitive way of recalling ``the command that started @dots{}'': You just type the first letter of that command, then hit @kbd{C-a @{} and @code{screen} tries to find a previous line that matches with the prompt character to the left of the cursor. This line is pasted into this window's input queue. Thus you have a crude command history (made up by the visible window and its scrollback buffer). @end deffn @node Subprocess Execution, Key Binding, Copy and Paste, Top @chapter Subprocess Execution Control Input or Output of a window by another filter process. Use with care! @menu * Exec:: The @code{exec} command syntax. * Using Exec:: Weird things that filters can do. @end menu @node Exec, Using Exec, , Subprocess Execution @section Exec @deffn Command exec [[@var{fdpat}] @var{newcommand} [@var{args} ... ]] (none)@* Run a unix subprocess (specified by an executable path @var{newcommand} and its optional arguments) in the current window. The flow of data between newcommands stdin/stdout/stderr, the process originally started (let us call it "application-process") and screen itself (window) is controlled by the file descriptor pattern @var{fdpat}. This pattern is basically a three character sequence representing stdin, stdout and stderr of newcommand. A dot (@code{.}) connects the file descriptor to screen. An exclamation mark (@code{!}) causes the file descriptor to be connected to the application-process. A colon (@code{:}) combines both. @* User input will go to newcommand unless newcommand receives the application-process' output (@var{fdpat}s first character is @samp{!} or @samp{:}) or a pipe symbol (@samp{|}) is added to the end of @var{fdpat}. @* Invoking @code{exec} without arguments shows name and arguments of the currently running subprocess in this window. Only one subprocess can be running per window. @* When a subprocess is running the @code{kill} command will affect it instead of the windows process. Only one subprocess a time can be running in each window. @* Refer to the postscript file @file{doc/fdpat.ps} for a confusing illustration of all 21 possible combinations. Each drawing shows the digits 2, 1, 0 representing the three file descriptors of newcommand. The box marked `W' is usual pty that has the application-process on its slave side. The box marked `P' is the secondary pty that now has screen at its master side. @end deffn @node Using Exec, , Exec, Subprocess Execution @section Using Exec @noindent Abbreviations: @itemize @bullet @item Whitespace between the word @samp{exec} and @var{fdpat} and the command name can be omitted. @item Trailing dots and a @var{fdpat} consisting only of dots can be omitted. @item A simple @samp{|} is synonymous for the @samp{!..|} pattern. @item The word @samp{exec} can be omitted when the @samp{|} abbreviation is used. @item The word @samp{exec} can always be replaced by leading @samp{!}. @end itemize @noindent Examples: @table @code @item !/bin/sh @itemx exec /bin/sh @itemx exec ... /bin/sh All of the above are equivalent. Creates another shell in the same window, while the original shell is still running. Output of both shells is displayed and user input is sent to the new @file{/bin/sh}. @item !!stty 19200 @itemx exec!stty 19200 @itemx exec !.. stty 19200 All of the above are equivalent. Set the speed of the window's tty. If your stty command operates on stdout, then add another @samp{!}. This is a useful command, when a screen window is directly connected to a serial line that needs to be configured. @item |less @itemx exec !..| less Both are equivalent. This adds a pager to the window output. The special character @samp{|} is needed to give the user control over the pager although it gets its input from the window's process. This works, because @samp{less} listens on stderr (a behavior that @code{screen} would not expect without the @samp{|}) when its stdin is not a tty. @code{Less} versions newer than 177 fail miserably here; good old @code{pg} still works. @item !:sed -n s/.*Error.*/\007/p Sends window output to both, the user and the sed command. The sed inserts an additional bell character (oct. 007) to the window output seen by screen. This will cause 'Bell in window x' messages, whenever the string @samp{Error} appears in the window. @end table @node Key Binding, Flow Control, Subprocess Execution, Top @chapter Key Binding @cindex key binding @cindex binding You may disagree with some of the default bindings (I know I do). The @code{bind} command allows you to redefine them to suit your preferences. @menu * Bind:: @code{bind} syntax. * Bind Examples:: Using @code{bind}. * Command Character:: The character used to start keyboard commands. * Help:: Show current key bindings. * Bindkey:: @code{bindkey} syntax. * Bindkey Examples:: Some easy examples. * Bindkey Control:: How to control the bindkey mechanism. @end menu @node Bind, Bind Examples, , Key Binding @section The @code{bind} command @deffn Command bind [-c class] key [command [args]] (none)@* Bind a command to a key. The @var{key} argument is either a single character, a two-character sequence of the form @samp{^x} (meaning @kbd{C-x}), a backslash followed by an octal number (specifying the ASCII code of the character), or a backslash followed by a second character, such as @samp{\^} or @samp{\\}. The argument can also be quoted, if you like. If no further argument is given, any previously established binding for this key is removed. The @var{command} argument can be any command (@pxref{Command Index}). If a command class is specified via the @code{-c} option, the key is bound for the specified class. Use the @code{command} command to activate a class. Command classes can be used to create multiple command keys or multi-character bindings. By default, most suitable commands are bound to one or more keys (@pxref{Default Key Bindings}); for instance, the command to create a new window is bound to @kbd{C-c} and @kbd{c}. The @code{bind} command can be used to redefine the key bindings and to define new bindings. @end deffn @deffn Command unbindall (none)@* Unbind all the bindings. This can be useful when screen is used solely for its detaching abilities, such as when letting a console application run as a daemon. If, for some reason, it is necessary to bind commands after this, use 'screen -X'. @end deffn @node Bind Examples, Command Character, Bind, Key Binding @section Examples of the @code{bind} command @noindent Some examples: @example bind ' ' windows bind ^f screen telnet foobar bind \033 screen -ln -t root -h 1000 9 su @end example @noindent would bind the space key to the command that displays a list of windows (so that the command usually invoked by @kbd{C-a C-w} would also be available as @kbd{C-a space}), bind @kbd{C-f} to the command ``create a window with a TELNET connection to foobar'', and bind @key{ESC} to the command that creates an non-login window with title @samp{root} in slot #9, with a superuser shell and a scrollback buffer of 1000 lines. @example bind -c demo1 0 select 10 bind -c demo1 1 select 11 bind -c demo1 2 select 12 bindkey "^B" command -c demo1 @end example makes @kbd{C-b 0} select window 10, @kbd{C-b 1} window 11, etc. @example bind -c demo2 0 select 10 bind -c demo2 1 select 11 bind -c demo2 2 select 12 bind - command -c demo2 @end example makes @kbd{C-a - 0} select window 10, @kbd{C-a - 1} window 11, etc. @node Command Character, Help, Bind Examples, Key Binding @cindex escape character @cindex command character @section Command Character @deffn Command escape xy (none)@* Set the command character to @var{x} and the character generating a literal command character (by triggering the @code{meta} command) to @var{y} (similar to the @samp{-e} option). Each argument is either a single character, a two-character sequence of the form @samp{^x} (meaning @kbd{C-x}), a backslash followed by an octal number (specifying the ASCII code of the character), or a backslash followed by a second character, such as @samp{\^} or @samp{\\}. The default is @samp{^Aa}, but @samp{``} is recommended by one of the authors. @end deffn @deffn Command defescape xy (none)@* Set the default command characters. This is equivalent to the command @code{escape} except that it is useful for multiuser sessions only. In a multiuser session @code{escape} changes the command character of the calling user, where @code{defescape} changes the default command characters for users that will be added later. @end deffn @kindex a @deffn Command meta (@kbd{C-a a})@* Send the command character (@kbd{C-a}) to the process in the current window. The keystroke for this command is the second parameter to the @samp{-e} command line switch (@pxref{Invoking Screen}), or the @code{escape} .screenrc directive. @end deffn @deffn Command command [-c @var{class}] (none)@* This command has the same effect as typing the screen escape character (@kbd{C-a}). It is probably only useful for key bindings. If the @samp{-c} option is given, select the specified command class. @xref{Bind}, @xref{Bindkey}. @end deffn @node Help, Bindkey, Command Character, Key Binding @section Help @kindex ? @deffn Command help (@kbd{C-a ?})@* Displays a help screen showing you all the key bindings. The first pages list all the internal commands followed by their bindings. Subsequent pages will display the custom commands, one command per key. Press space when you're done reading each page, or return to exit early. All other characters are ignored. If the @samp{-c} option is given, display all bound commands for the specified command class. @xref{Default Key Bindings}. @end deffn @node Bindkey, Bindkey Examples, Help, Key Binding @section Bindkey @deffn Command bindkey [@var{opts}] [@var{string} [@var{cmd} @var{args}]] (none)@* This command manages screen's input translation tables. Every entry in one of the tables tells screen how to react if a certain sequence of characters is encountered. There are three tables: one that should contain actions programmed by the user, one for the default actions used for terminal emulation and one for screen's copy mode to do cursor movement. See @ref{Input Translation} for a list of default key bindings. If the @samp{-d} option is given, bindkey modifies the default table, @samp{-m} changes the copy mode table and with neither option the user table is selected. The argument @samp{string} is the sequence of characters to which an action is bound. This can either be a fixed string or a termcap keyboard capability name (selectable with the @samp{-k} option). Some keys on a VT100 terminal can send a different string if application mode is turned on (e.g. the cursor keys). Such keys have two entries in the translation table. You can select the application mode entry by specifying the @samp{-a} option. The @samp{-t} option tells screen not to do inter-character timing. One cannot turn off the timing if a termcap capability is used. @samp{cmd} can be any of screen's commands with an arbitrary number of @samp{args}. If @samp{cmd} is omitted the key-binding is removed from the table. @end deffn @node Bindkey Examples, Bindkey Control,Bindkey, Key Binding @section Bindkey Examples @noindent Here are some examples of keyboard bindings: @example bindkey -d @end example @noindent Show all of the default key bindings. The application mode entries are marked with [A]. @example bindkey -k k1 select 1 @end example @noindent Make the "F1" key switch to window one. @example bindkey -t foo stuff barfoo @end example @noindent Make @samp{foo} an abbreviation of the word @samp{barfoo}. Timeout is disabled so that users can type slowly. @example bindkey "\024" mapdefault @end example @noindent This key-binding makes @samp{C-t} an escape character for key-bindings. If you did the above @samp{stuff barfoo} binding, you can enter the word @samp{foo} by typing @samp{C-t foo}. If you want to insert a @samp{C-t} you have to press the key twice (i.e., escape the escape binding). @example bindkey -k F1 command @end example @noindent Make the F11 (not F1!) key an alternative screen escape (besides @samp{C-a}). @node Bindkey Control, , Bindkey Examples, Key Binding @section Bindkey Control @deffn Command mapdefault (none)@* Tell screen that the next input character should only be looked up in the default bindkey table. @end deffn @deffn Command mapnotnext (none)@* Like mapdefault, but don't even look in the default bindkey table. @end deffn @deffn Command maptimeout n (none)@* Set the inter-character timer for input sequence detection to a timeout of @var{n} ms. The default timeout is 300ms. Maptimeout with no arguments shows the current setting. @end deffn @node Flow Control, Termcap, Key Binding, Top @chapter Flow Control @cindex flow control @code{screen} can trap flow control characters or pass them to the program, as you see fit. This is useful when your terminal wants to use XON/XOFF flow control and you are running a program which wants to use ^S/^Q for other purposes (i.e. @code{emacs}). @menu * Flow Control Summary:: The effect of @code{screen} flow control * Flow:: Setting the flow control behavior * XON/XOFF:: Sending XON or XOFF to the window @end menu @node Flow Control Summary, Flow, , Flow Control @section About @code{screen} flow control settings Each window has a flow-control setting that determines how screen deals with the XON and XOFF characters (and perhaps the interrupt character). When flow-control is turned off, screen ignores the XON and XOFF characters, which allows the user to send them to the current program by simply typing them (useful for the @code{emacs} editor, for instance). The trade-off is that it will take longer for output from a ``normal'' program to pause in response to an XOFF. With flow-control turned on, XON and XOFF characters are used to immediately pause the output of the current window. You can still send these characters to the current program, but you must use the appropriate two-character screen commands (typically @kbd{C-a q} (xon) and @kbd{C-a s} (xoff)). The xon/xoff commands are also useful for typing C-s and C-q past a terminal that intercepts these characters. Each window has an initial flow-control value set with either the @samp{-f} option or the @code{defflow} command. By default the windows are set to automatic flow-switching. It can then be toggled between the three states 'fixed on', 'fixed off' and 'automatic' interactively with the @code{flow} command bound to @kbd{C-a f}. The automatic flow-switching mode deals with flow control using the TIOCPKT mode (like @code{rlogin} does). If the tty driver does not support TIOCPKT, screen tries to determine the right mode based on the current setting of the application keypad --- when it is enabled, flow-control is turned off and visa versa. Of course, you can still manipulate flow-control manually when needed. If you're running with flow-control enabled and find that pressing the interrupt key (usually C-c) does not interrupt the display until another 6-8 lines have scrolled by, try running screen with the @samp{interrupt} option (add the @samp{interrupt} flag to the @code{flow} command in your .screenrc, or use the @samp{-i} command-line option). This causes the output that @code{screen} has accumulated from the interrupted program to be flushed. One disadvantage is that the virtual terminal's memory contains the non-flushed version of the output, which in rare cases can cause minor inaccuracies in the output. For example, if you switch screens and return, or update the screen with @kbd{C-a l} you would see the version of the output you would have gotten without @samp{interrupt} being on. Also, you might need to turn off flow-control (or use auto-flow mode to turn it off automatically) when running a program that expects you to type the interrupt character as input, as the @samp{interrupt} parameter only takes effect when flow-control is enabled. If your program's output is interrupted by mistake, a simple refresh of the screen with @kbd{C-a l} will restore it. Give each mode a try, and use whichever mode you find more comfortable. @node Flow, XON/XOFF, Flow Control Summary, Flow Control @section Flow @deffn Command defflow fstate [interrupt] (none)@* Same as the @code{flow} command except that the default setting for new windows is changed. Initial setting is `auto'. Specifying @code{flow auto interrupt} has the same effect as the command-line options @samp{-fa} and @samp{-i}. Note that if @samp{interrupt} is enabled, all existing displays are changed immediately to forward interrupt signals. @end deffn @kindex f @kindex C-f @deffn Command flow [fstate] (@kbd{C-a f}, @kbd{C-a C-f})@* Sets the flow-control mode for this window to @var{fstate}, which can be @samp{on}, @samp{off} or @samp{auto}. Without parameters it cycles the current window's flow-control setting. Default is set by `defflow'. @end deffn @node XON/XOFF, , Flow, Flow Control @section XON and XOFF @kindex q @kindex C-q @deffn Command xon (@kbd{C-a q}, @kbd{C-a C-q})@* Send a ^Q (ASCII XON) to the program in the current window. Redundant if flow control is set to @samp{off} or @samp{auto}. @end deffn @kindex s @kindex C-s @deffn Command xoff (@kbd{C-a s}, @kbd{C-a C-s})@* Send a ^S (ASCII XOFF) to the program in the current window. @end deffn @node Termcap, Message Line, Flow Control, Top @chapter Termcap @code{Screen} demands the most out of your terminal so that it can perform its VT100 emulation most efficiently. These functions provide means for tweaking the termcap entries for both your physical terminal and the one simulated by @code{screen}. @menu * Window Termcap:: Choosing a termcap entry for the window. * Dump Termcap:: Write out a termcap entry for the window. * Termcap Syntax:: The @code{termcap} and @code{terminfo} commands. * Termcap Examples:: Uses for @code{termcap}. * Special Capabilities:: Non-standard capabilities used by @code{screen}. * Autonuke:: Flush unseen output * Obuflimit:: Allow pending output when reading more * Character Translation:: Emulating fonts and charsets. @end menu @node Window Termcap, Dump Termcap, , Termcap @section Choosing the termcap entry for a window Usually @code{screen} tries to emulate as much of the VT100/ANSI standard as possible. But if your terminal lacks certain capabilities the emulation may not be complete. In these cases @code{screen} has to tell the applications that some of the features are missing. This is no problem on machines using termcap, because @code{screen} can use the @code{$TERMCAP} variable to customize the standard screen termcap. But if you do a rlogin on another machine or your machine supports only terminfo this method fails. Because of this @code{screen} offers a way to deal with these cases. Here is how it works: When @code{screen} tries to figure out a terminal name for itself, it first looks for an entry named @code{screen.@var{term}}, where @var{term} is the contents of your @code{$TERM} variable. If no such entry exists, @code{screen} tries @samp{screen} (or @samp{screen-w}, if the terminal is wide (132 cols or more)). If even this entry cannot be found, @samp{vt100} is used as a substitute. The idea is that if you have a terminal which doesn't support an important feature (e.g. delete char or clear to EOS) you can build a new termcap/terminfo entry for @code{screen} (named @samp{screen.@var{dumbterm}}) in which this capability has been disabled. If this entry is installed on your machines you are able to do a rlogin and still keep the correct termcap/terminfo entry. The terminal name is put in the @code{$TERM} variable of all new windows. @code{screen} also sets the @code{$TERMCAP} variable reflecting the capabilities of the virtual terminal emulated. Furthermore, the variable @code{$WINDOW} is set to the window number of each window. The actual set of capabilities supported by the virtual terminal depends on the capabilities supported by the physical terminal. If, for instance, the physical terminal does not support underscore mode, @code{screen} does not put the @samp{us} and @samp{ue} capabilities into the window's @code{$TERMCAP} variable, accordingly. However, a minimum number of capabilities must be supported by a terminal in order to run @code{screen}; namely scrolling, clear screen, and direct cursor addressing (in addition, @code{screen} does not run on hardcopy terminals or on terminals that over-strike). Also, you can customize the @code{$TERMCAP} value used by @code{screen} by using the @code{termcap} command, or by defining the variable @code{$SCREENCAP} prior to startup. When the latter defined, its value will be copied verbatim into each window's @code{$TERMCAP} variable. This can either be the full terminal definition, or a filename where the terminal @samp{screen} (and/or @samp{screen-w}) is defined. Note that @code{screen} honors the @code{terminfo} command if the system uses the terminfo database rather than termcap. On such machines the @code{$TERMCAP} variable has no effect and you must use the @code{dumptermcap} command (@pxref{Dump Termcap}) and the @code{tic} program to generate terminfo entries for @code{screen} windows. When the boolean @samp{G0} capability is present in the termcap entry for the terminal on which @code{screen} has been called, the terminal emulation of @code{screen} supports multiple character sets. This allows an application to make use of, for instance, the VT100 graphics character set or national character sets. The following control functions from ISO 2022 are supported: @samp{lock shift G0} (@samp{SI}), @samp{lock shift G1} (@samp{SO}), @samp{lock shift G2}, @samp{lock shift G3}, @samp{single shift G2}, and @samp{single shift G3}. When a virtual terminal is created or reset, the ASCII character set is designated as @samp{G0} through @samp{G3}. When the @samp{G0} capability is present, screen evaluates the capabilities @samp{S0}, @samp{E0}, and @samp{C0} if present. @samp{S0} is the sequence the terminal uses to enable and start the graphics character set rather than @samp{SI}. @samp{E0} is the corresponding replacement for @samp{SO}. @samp{C0} gives a character by character translation string that is used during semi-graphics mode. This string is built like the @samp{acsc} terminfo capability. When the @samp{po} and @samp{pf} capabilities are present in the terminal's termcap entry, applications running in a @code{screen} window can send output to the printer port of the terminal. This allows a user to have an application in one window sending output to a printer connected to the terminal, while all other windows are still active (the printer port is enabled and disabled again for each chunk of output). As a side-effect, programs running in different windows can send output to the printer simultaneously. Data sent to the printer is not displayed in the window. The @code{info} command displays a line starting with @samp{PRIN} while the printer is active. Some capabilities are only put into the @code{$TERMCAP} variable of the virtual terminal if they can be efficiently implemented by the physical terminal. For instance, @samp{dl} (delete line) is only put into the @code{$TERMCAP} variable if the terminal supports either delete line itself or scrolling regions. Note that this may provoke confusion, when the session is reattached on a different terminal, as the value of @code{$TERMCAP} cannot be modified by parent processes. You can force @code{screen} to include all capabilities in @code{$TERMCAP} with the @samp{-a} command-line option (@pxref{Invoking Screen}). The "alternate screen" capability is not enabled by default. Set the @code{altscreen} @file{.screenrc} command to enable it. @node Dump Termcap, Termcap Syntax, Window Termcap, Termcap @section Write out the window's termcap entry @kindex . @deffn Command dumptermcap (@kbd{C-a .})@* Write the termcap entry for the virtual terminal optimized for the currently active window to the file @file{.termcap} in the user's @file{$HOME/.screen} directory (or wherever @code{screen} stores its sockets. @pxref{Files}). This termcap entry is identical to the value of the environment variable @code{$TERMCAP} that is set up by @code{screen} for each window. For terminfo based systems you will need to run a converter like @code{captoinfo} and then compile the entry with @code{tic}. @end deffn @node Termcap Syntax, Termcap Examples, Dump Termcap, Termcap @section The @code{termcap} command @deffn Command termcap term terminal-tweaks [window-tweaks] @deffnx Command terminfo term terminal-tweaks [window-tweaks] @deffnx Command termcapinfo term terminal-tweaks [window-tweaks] (none)@* Use this command to modify your terminal's termcap entry without going through all the hassles involved in creating a custom termcap entry. Plus, you can optionally customize the termcap generated for the windows. You have to place these commands in one of the screenrc startup files, as they are meaningless once the terminal emulator is booted. If your system uses the terminfo database rather than termcap, @code{screen} will understand the @code{terminfo} command, which has the same effects as the @code{termcap} command. Two separate commands are provided, as there are subtle syntactic differences, e.g. when parameter interpolation (using @samp{%}) is required. Note that the termcap names of the capabilities should also be used with the @code{terminfo} command. In many cases, where the arguments are valid in both terminfo and termcap syntax, you can use the command @code{termcapinfo}, which is just a shorthand for a pair of @code{termcap} and @code{terminfo} commands with identical arguments. @end deffn The first argument specifies which terminal(s) should be affected by this definition. You can specify multiple terminal names by separating them with @samp{|}s. Use @samp{*} to match all terminals and @samp{vt*} to match all terminals that begin with @samp{vt}. Each @var{tweak} argument contains one or more termcap defines (separated by @samp{:}s) to be inserted at the start of the appropriate termcap entry, enhancing it or overriding existing values. The first tweak modifies your terminal's termcap, and contains definitions that your terminal uses to perform certain functions. Specify a null string to leave this unchanged (e.g. ""). The second (optional) tweak modifies all the window termcaps, and should contain definitions that screen understands (@pxref{Virtual Terminal}). @node Termcap Examples, Special Capabilities, Termcap Syntax, Termcap @section Termcap Examples Some examples: @example termcap xterm* xn:hs@@ @end example @noindent Informs @code{screen} that all terminals that begin with @samp{xterm} have firm auto-margins that allow the last position on the screen to be updated (xn), but they don't really have a status line (no 'hs' -- append @samp{@@} to turn entries off). Note that we assume @samp{xn} for all terminal names that start with @samp{vt}, but only if you don't specify a termcap command for that terminal. @example termcap vt* xn termcap vt102|vt220 Z0=\E[?3h:Z1=\E[?3l @end example @noindent Specifies the firm-margined @samp{xn} capability for all terminals that begin with @samp{vt}, and the second line will also add the escape-sequences to switch into (Z0) and back out of (Z1) 132-character-per-line mode if this is a VT102 or VT220. (You must specify Z0 and Z1 in your termcap to use the width-changing commands.) @example termcap vt100 "" l0=PF1:l1=PF2:l2=PF3:l3=PF4 @end example @noindent This leaves your vt100 termcap alone and adds the function key labels to each window's termcap entry. @example termcap h19|z19 am@@:im=\E@@:ei=\EO dc=\E[P @end example @noindent Takes a h19 or z19 termcap and turns off auto-margins (am@@) and enables the insert mode (im) and end-insert (ei) capabilities (the @samp{@@} in the @samp{im} string is after the @samp{=}, so it is part of the string). Having the @samp{im} and @samp{ei} definitions put into your terminal's termcap will cause screen to automatically advertise the character-insert capability in each window's termcap. Each window will also get the delete-character capability (dc) added to its termcap, which screen will translate into a line-update for the terminal (we're pretending it doesn't support character deletion). If you would like to fully specify each window's termcap entry, you should instead set the @code{$SCREENCAP} variable prior to running @code{screen}. @xref{Virtual Terminal}, for the details of the @code{screen} terminal emulation. @xref{Termcap}, for more information on termcap definitions. @node Special Capabilities, Autonuke, Termcap Examples, Termcap @section Special Terminal Capabilities @cindex terminal capabilities @cindex capabilities The following table describes all terminal capabilities that are recognized by @code{screen} and are not in the termcap manual (@pxref{Termcap}). You can place these capabilities in your termcap entries (in @file{/etc/termcap}) or use them with the commands @code{termcap}, @code{terminfo} and @code{termcapinfo} in your @code{screenrc} files. It is often not possible to place these capabilities in the terminfo database. @table @samp @item LP (bool)@* Terminal has VT100 style margins (`magic margins'). Note that this capability is obsolete --- @code{screen} now uses the standard @samp{xn} instead. @item Z0 (str)@* Change width to 132 columns. @item Z1 (str)@* Change width to 80 columns. @item WS (str)@* Resize display. This capability has the desired width and height as arguments. SunView(tm) example: @samp{\E[8;%d;%dt}. @item NF (bool)@* Terminal doesn't need flow control. Send ^S and ^Q direct to the application. Same as @code{flow off}. The opposite of this capability is @samp{nx}. @item G0 (bool)@* Terminal can deal with ISO 2022 font selection sequences. @item S0 (str)@* Switch charset @samp{G0} to the specified charset. Default is @samp{\E(%.}. @item E0 (str)@* Switch charset @samp{G0} back to standard charset. Default is @samp{\E(B}. @item C0 (str)@* Use the string as a conversion table for font 0. See the @samp{ac} capability for more details. @item CS (str)@* Switch cursor-keys to application mode. @item CE (str)@* Switch cursor-keys to cursor mode. @item AN (bool)@* Enable autonuke for displays of this terminal type. (@pxref{Autonuke}). @item OL (num)@* Set the output buffer limit. See the @samp{obuflimit} command (@pxref{Obuflimit}) for more details. @item KJ (str)@* Set the encoding of the terminal. See the @samp{encoding} command (@pxref{Character Processing}) for valid encodings. @item AF (str)@* Change character foreground color in an ANSI conform way. This capability will almost always be set to @samp{\E[3%dm} (@samp{\E[3%p1%dm} on terminfo machines). @item AB (str)@* Same as @samp{AF}, but change background color. @item AX (bool)@* Does understand ANSI set default fg/bg color (@samp{\E[39m / \E[49m}). @item XC (str)@* Describe a translation of characters to strings depending on the current font. (@pxref{Character Translation}). @item XT (bool)@* Terminal understands special xterm sequences (OSC, mouse tracking). @item C8 (bool)@* Terminal needs bold to display high-intensity colors (e.g. Eterm). @item TF (bool)@* Add missing capabilities to the termcap/info entry. (Set by default). @end table @node Autonuke, Obuflimit, Special Capabilities, Termcap @section Autonuke @deffn Command autonuke @var{state} (none)@* Sets whether a clear screen sequence should nuke all the output that has not been written to the terminal. @xref{Obuflimit}. This property is set per display, not per window. @end deffn @deffn Command defautonuke @var{state} (none)@* Same as the @code{autonuke} command except that the default setting for new displays is also changed. Initial setting is @code{off}. Note that you can use the special @code{AN} terminal capability if you want to have a terminal type dependent setting. @end deffn @node Obuflimit, Character Translation, Autonuke, Termcap @section Obuflimit @deffn Command obuflimit [@var{limit}] (none)@* If the output buffer contains more bytes than the specified limit, no more data will be read from the windows. The default value is 256. If you have a fast display (like @code{xterm}), you can set it to some higher value. If no argument is specified, the current setting is displayed. This property is set per display, not per window. @end deffn @deffn Command defobuflimit @var{limit} (none)@* Same as the @code{obuflimit} command except that the default setting for new displays is also changed. Initial setting is 256 bytes. Note that you can use the special @code{OL} terminal capability if you want to have a terminal type dependent limit. @end deffn @node Character Translation, , Obuflimit, Termcap @section Character Translation @code{Screen} has a powerful mechanism to translate characters to arbitrary strings depending on the current font and terminal type. Use this feature if you want to work with a common standard character set (say ISO8851-latin1) even on terminals that scatter the more unusual characters over several national language font pages. Syntax: @example XC=@var{}@{,,@var{}@} @var{} := @var{}@var{